Bekijk deze pagina voor info over de API
Update 2024: Deze API bestaat niet meer
Bekijk deze pagina voor info over de API
Update 2024: Deze API bestaat niet meer
Je kan spamassassin op verschillende plaatsen toevoegen, je kan het toevoegen aan de globale configuratie (`/etc/mail/spamassassin/local.cf`) of aan de user-configuratie, indien ingeschakeld. (`~/.spamassassin/user_prefs`).
Standaard staat het toevoegen van regels in de user-configuratie standaard uit als spamassassin draait als spamd. Dit is uit veiligheids en performance overwegingen. Spamassassin moet in dat geval namelijk de regels telkens compileren bij elke mail, wat niet het geval is bij de globale configuratie.
De keuze waar je je regels toevoegd licht uiteraard bij jou.
Om te voorkomen dat regels overlappen met bestaande regels, word aangeraden om ze een prefix te geven. bijvoorbeeld `LOCAL_` of je initialen `VL_`.
Om in de tekst van een mail op een bepaald woord te filteren kan je een regel zoals hieronder aanmaken. Deze regel filters op “test”, maar ook op “testpersoon”.
Spamassassin maakt gebruikt van reguliere expressies, met name die van perl.
`BODY_BEVAT_TEST` is hier de naam van de test.
body BODY_BEVAT_TEST /test/ score BODY_BEVAT_TEST 0.1 describe BODY_BEVAT_TEST dit is een test regel
De `score` regel, bepaald welke score word toegevoegd als een mail met deze regel matched. Dit kan altijd in user_prefs per-user worden aangepast.
de `describe`regel bevat wat extra info over de regel.
Wil je enkel op “test” filteren maar niet op “testpersoon”, dan kan je een het woord omringen met `\b`
body BODY_BEVAT_TEST /\btest\b/ score BODY_BEVAT_TEST 0.1 describe BODY_BEVAT_TEST dit is een test regel
we kunnen dit ook nog case-insensitive maken door `i` achter de reguliere expressie te hangen. (`body BODY_BEVAT_TEST /\btest\b/i`)
Om te filteren op het onderwerp, de verzender of andere headers kunnen header regels gebruikt worden. Deze werken net zoals body regels met reguliere expressies. Om bijvoorbeeld een test te maken die het onderwerp controleerd op “test” kunnen we een regel als volgt aanmaken
header SUBJECT_BEVAT_TEST Subject =~ /\btest\b/i score SUBJECT_BEVAT_TEST 0.1 describe SUBJECT_BEVAT_TEST deze mail bevat test in het onderwerp
De gespecifieerde header (in dit voorbeeld `Subject`) is altijd case-insentitive.
Meta regels zijn heel handig om complexere regels te maken. Deze laten toe om meerdere tests te combineren en de score aan te passen aan bijvoorbeeld het aantal keer dat de regel matched tegen een mail.
body __BEVAT_TEST1 /\btest1\b/i body __BEVAT_TEST2 /\btest2\b/i body __BEVAT_TEST3 /\btest3\b/i meta BEVAT_TEST1_TEST2_TEST3 ((__BEVAT_TEST1 + __BEVAT_TEST2 + __BEVAT_TEST3)>1) score BEVAT_TEST1_TEST2_TEST3 0.3
Dit voorbeeld voegt 0.3 score toe als de mail zowel de strings “test1”, “test2” en “test3” tegelijk bevat.
Na het schrijven van regels laat je spamassassin beter de configuratie eens linten. dit kan je doen met `spamassassin –lint`.
Om een repository automatisch te deployen kan je de volgende git hook toevoegen aan de git repository.
Deze hook voeg je toe aan een bare repo. Deze maak je aan met `git init –bare ~/git-repo.git`. Hierna plaats je de volgende code in het bestand `~/git-repo.git/hooks/post-receive`.
#!/bin/bash
TARGET="/home/user/target-dir"
GIT_DIR="/home/user/git-repo.git"
BRANCH="master"
while read oldrev newrev ref
do
# only checking out the master (or whatever branch you would like to deploy)
if [ "$ref" = "refs/heads/$BRANCH" ];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done
Daarna moet je het bestand gewoon nog uitvoerbaar maken (`chmod -x ~/git-repo.git/hooks/post-recieve`) en naar de repository pushen (bijvoorbeeld over ssh als deze op een remote host staat)
Ik heb 2 api’s gemaakt omdat ik zelf snel de data nodig had: een API voor een stadsnaam om te zetten in coordinaten, en een API om luchthavens op te zoeken:
op https://airport-api.lamdev.be kan je de documentatie raadplegen
het gebruik van de locatie API is heel eenvoudig:
```
$ curl https://location-api.lamdev.be/brussel
{"status":200,"error":"","naam":"Brussel","lat":50.83,"lon":4.33}
```
deze geeft de lat en lon terug.
Ik heb 11 maanden aan weerdata Je kan het overzicht bekijken op Skyz
update: gegevens zijn verplaatst naar Skyz
Ik merk vaak dat de MySQL server wel eens veel ram gebruikt op mijn webserver (die maar 1GB ram heeft). Een oplossing hiervoor is om `performance_schema = off` toe te voegen aan de mysql configuratie (/etc/mysql/my.cnf) onder het blokje `[mysqld]`
# ... [mysqld] # ... performance_schema = off # <-- Toevoegen aan configuratie onder [mysqld] # ...
In deze post leg ik uit hoe je gebruik maakt van de custom upload functie van de WS-5500. Hiermee kan je de data meteen naar jouw eigen webserver sturen.
Het uploadscript werkt enkel over HTTP verbindingen, en niet over HTTPS verbindingen. Het weerstation volgt geen redirects, een HTTP naar HTTPS redirect zal dus niet gevolgd worden.
Het uploadscript zorgt ervoor dat je de data van het weerstation kan uitlezen. Deze dien je op een webserver te uploaden en nadien in de app in te stellen. Om de data op te slaan heb je ook en MySQL databank nodig.
Je kan het uploadscript met de knop hierboven downloaden. Dit .zip bestand bevat 2 files: updateweatherstation.php (uploadscript) en hwa.php, het script waarmee je de data kan delen met andere weerstations.
Eens je het uploadscript hebt gedownload moet je de databank nog instellen. Het SQL script hieronder maakt de tabel aan om de data in op te slaan:
CREATE TABLE `data` ( `Tijd` DATETIME NOT NULL, `Temperatuur` DECIMAL(4,1) NOT NULL, `Dauwpunt` DECIMAL(4,1) NOT NULL, `Windchill` DECIMAL(4,1) NOT NULL, `Vochtigheid` INT(16) NOT NULL, `Windsnelheid` DECIMAL(4,1) NOT NULL, `WindstootSnelheid` DECIMAL(4,1) NOT NULL, `Windrichting` DECIMAL(4,1) NOT NULL, `Barometer` DECIMAL(5,1) NOT NULL, `RegenVandaag` DECIMAL(4,1) NOT NULL, `RegenIntensiteit` DECIMAL(4,1) NOT NULL, `Zonnestraling` DECIMAL(5,1) NOT NULL, `UV` INT(16) NOT NULL, UNIQUE (`Tijd`) );
Zodra je de Databank hebt aangemaakt en de datatabel hebt aangemaakt kan je de gegevens aanpassen in het uploadscript. Bovenaan het uploadscript vind je dit stukje:
// Instellingen $db_host = "localhost"; // Meestal "localhost" $db_name = "weerstation"; // De naam van de databank $db_user = "weerstation"; // De databank gebruiker $db_pass = "wachtwoord"; // Het wachtwoord van de databank gebruiker $db_table = "data"; // De naam van de datatabel $id = "weerstation"; // stationID $key = "key"; // stationKey // Einde instellingen
Hier moet je de inloggegevens voor de databank aanpassen, alsook de $id en $key, zodat enkel jouw station data kan uploaden.
Nu moet je de WSView app downloaden, als je deze nog niet hebt geïnstalleerd. Deze app is uitgegeven door Shenzen Fine Offset Electronics. (android – ios)
Eens het uploadscript op de webserver staat moet je het nog instellen in de app. Hiervoor kan je op het laatste tabje bij “customized” het volgende ingeven.

Bij `Server IP / Hostname` geef je de domeinnaam in van jouw website. Bij mij is dat bijvoorbeeld `www.vincentlammens.be`
Bij `path` geef je aan waar dat uploadscript staat op jouw website, bijvoorbeeld `/weerstation/updateweatherstation.php?` **Let op: dit dient te eindigen met een `?`**
Bij `Station ID` en `Station Key` geef je de waarden in die je in het uploadscript hebt ingesteld.
De `Port` is 80, in de meeste gevallen is dat correct.
`Upload interval` zet je op 16, of een andere waarde. 16 is bij dit weerstation de laagste waarde.
Nu klik je op “Save”. Je weerstation zal nu beginnen met de data door te sturen naar jouw webserver.
De data kan je nu verwerken op elke manier die je maar wilt door hem uit te lezen uit de databank.
Ik ga me in deze post beperken tot het genereren van een bestand waarmee je de data met weersites kunt delen, maar uiteraard kan je net zoals bij de Weather Underground optie grafiekjes maken.
Een veelgebruikt formaat waarmee weersites data van weerstations uitlezen is het “Openweerdata.txt” formaat, ook wel “hwa.txt” genoemd. Dit bestand zit bij de zipfile van het uploadscript.
In dit script dien je bovenaan het script de databank gegevens aan te passen. Hierna kan je het uploaden, en de URL naar dit script delen met andere weersites.
Ik wou onlangs de data van mijn weerstation exporteren naar een Excel file.
Ik wou niet gewoon een .csv exporteren, maar een .xlsx bestand met verschillende tabbladen.
Ik maak gebruik van de XLSXWriter van mk-j. Deze php class maakt het
aanmaken van een .xlsx file zeer eenvoudig.
<?php // xlsxwriter impoteren require_once('xlsxwriter.class.php'); // nieuwe writer maken $writer = new XLSXWriter(); // Hier zouden we data uit de databank uitlezen // $data1 en $data2 bevat data uit de databank // een nieuw werkblad maken: $writer->writeSheet($data1,'Blad 1');
$writer->writeSheet($data2,'Blad 2');
// Data opslaan
$writer->writeToFile('output.xlsx');
// of de bezoeker de data laten downloaden
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="export.xlsx"');
$writer->writeToStdOut();
?>
Zoals je ziet is het zeer eenvoudig in gebruik.
Ik wou al een tijdje een Webcam voor mijn weerstation. Ik had nog een oude
USB-Webcam die ik hiervoor kon gebruiken.
**Noot:** De 5.10 Linux kernel heeft een bug waarmee /dev/video0 niet kan uitgelezen worden. De versie van Raspberrypi OS op moment van schrijven maakt gebruik van deze kernel. Je moet deze dus eerst downgraden voordat je foto’s kunt maken.
Een USB Webcam gebruiken op de raspberrypi is zeer eenvoudig. Met het programmatje `fswebcam` kan je zeer eenvoudig een foto nemen met de aangesloten webcam.
# FSWebcam Installeren sudo apt install fswebcam
we kunnen dan met de volgende commando’s foto’s nemen:
# Gewone foto: fswebcam foto.jpg # Resolutie specifieren fswebcam -r 640x480 foto.jpg # Banner aanpassen # Titel: fswebcam -r 640x480 --title "Webcam Foto" foto.jpg # Banner kleur (Hex, 2 waarden voor transparantie, 6 waarden voor kleur) fswebcam -r 640x480 --banner-colour "#2F5B5B5B" --line-colour "#0F81FC0F" foto.jpg # Geen banner fswebcam -r 640x480 --no-banner foto.jpg
Met behulp van LFTP kan je eenvoudig de foto’s uploaden. LFTP is een command-line FTP programma dat naast FTP ook FTPS en SFTP ondersteund.
#lftp installeren sudo apt install lftp # uploaden lftp -e "put foto.jpg; quit;" sftp://sftp.server.be -u gebruikersnaam,wachtwoord
Dit kan je evt in een cronjob combineren om de foto meteen te uploaden.
Ik moest onlangs voor school een MySQL server installeren in een VM. Omdat een mysql server installatie
een interactieve prompt gebruikt voor de `mysql_secure_installation` ben ik op zoek gegaan naar een alternatieve
manier om dezelfde stappen te kunnen doen in een shellscript, om zo de installatie te automatiseren.
Het root wachtwoord kan ingesteld worden met `mysqladmin password “password”`, de overige opties kunnen uitgevoerd
worden met SQL queries:
– Anonieme gebruikers verwijderen:
“`sql
delete from mysql.user where user=”;
“`
– Test databases verwijderen:
“`sql
drop database if exists test;
delete from mysql.db where Db=’test’ or DB=’test\\_%’;
“`
Hieronder het gehele script, alsook extra regels die een extra superuser ‘admin’ aanmaken en mysql doen luisteren op all ip’s.
#!/bin/bash # Dit script automatiseerd de installatie van een MySQL server op een Ubuntu Server # Voor vragen/hulp mail vincent@vincentlammens.be # # Getest op Ubuntu 20.04 # # 1. Installatie van de software # ------------------------------ # Eerst moeten we de benodigde software installeren. In dit geval is het enkel het pakket # 'mysql-server' dat we moeten installeren. sudo apt update; sudo apt install mysql-server -y; # 2. MySQL Secure Installation # ---------------------------- # De eerste stap is om MySQL veilig in te stellen. Hiervoor word normaal gebruik gemaakt van # 'mysql_secure_installation'. Echter kan dit ook op een non-interactieve manier waarmee het te # automatiseren is in een script # zie: https://vincentlammens.be/blog/2021/02/23/mysql-server-installatie-automatiseren/ # !! NOOT: # Hiermee word het root wachtwoord op 'root' gezet, en een extra superuser 'admin' gemaakt met # wachtwoord 'admin'. Dit is niet veilig. Idealieter word dit vervangen door een veiliger # wachtwoord, of een random gegenereerd wachtwoord. sudo mysqladmin password "root"; sudo mysql --user=root <<EOF delete from mysql.user where user=''; drop database if exists test; delete from mysql.db where Db='test' or DB='test\\_%'; flush privileges; create user 'admin'@'%' identified by 'admin'; grant all privileges on *.* to 'admin'@'%' with grant option; flush privileges; EOF # 3. MySQL laten luisteren op alle ip's # ------------------------------------- # Standaard luisterd MySQL server enkel op localhost. Hiervoor moet het bind-address ip veranderd # worden van '127.0.0.1' naar '0.0.0.0'. Dit kunnen we automatiseren met het programma 'sed'. sudo sed -i "s/.*bind-address.*/bind-address=0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf #restart mysql sudo service mysql restart