Wetterdaten mit XSLT visualisieren: Raspberry Pi & CronJob steuern Bash Script
In meinem letzten Beitrag habe ich gezeigt, wie man mit XSLT und Apache FOP aus Wetterdaten automatisch ein grafisches Dashboard generiert. Damit dieses Bild regelmĂ€Ăig und automatisch erzeugt wird â zum Beispiel stĂŒndlich oder einmal tĂ€glich â eignet sich ein CronJob auf dem Raspberry Pi perfekt. In diesem Beitrag zeige ich dir, wie du mit einem Bash Script, einem passenden CronJob und deinem Raspberry Pi eine solche Automatisierung realisierst. https://youtu.be/wsOeFisDvNY
Was ist ein CronJob?
Ein CronJob ist ein zeitgesteuerter Task unter Unix/Linux-Systemen. Er erlaubt es dir, Skripte oder Programme zu festen Zeitpunkten automatisch auszufĂŒhren â zum Beispiel jeden Tag um 6 Uhr oder alle 15 Minuten. Das macht Cron zu einem perfekten Werkzeug fĂŒr wiederkehrende Aufgaben wie das Generieren von Reports oder â in unserem Fall â das Erstellen eines Wetter-Dashboards. Aufbau eines CronJob-Patterns Ein CronJob besteht aus einem zeitlichen Ausdruck (Pattern) und dem Befehl, der ausgefĂŒhrt werden soll. Das Pattern besteht aus fĂŒnf Feldern, die wie folgt interpretiert werden:
Aufbau eines CronJob-Patterns Beispiel: 0 6 * * * /home/pi/xml2weatherpng/templating/transform.sh â fĂŒhrt das Skript jeden Tag um 6:00 Uhr morgens aus. Zugriff auf die Crontab Um einen CronJob auf dem Raspberry Pi (oder einem anderen Linux-System) einzurichten, verwendet man die sogenannte Crontab â das ist die Konfigurationsdatei, in der geplante Aufgaben definiert werden. Du gelangst zur Crontab ĂŒber das Terminal mit folgendem Befehl: crontab -e Beim ersten Aufruf wirst du möglicherweise aufgefordert, einen Editor auszuwĂ€hlen (z.âŻB. nano, vim, mcedit). FĂŒr Einsteiger empfiehlt sich nano, da er leicht zu bedienen ist.
CronTab - Auswahl des Editors Nach der Auswahl öffnet sich die Crontab-Datei im gewĂ€hlten Editor. Hier kannst du neue Zeilen hinzufĂŒgen, um Jobs zeitgesteuert auszufĂŒhren.
CronTab im Editor Nano Beispiel fĂŒr einen Eintrag: 0 * * * * /home/pi/wetterdashboard/transformXML2PNG.sh Dieser Job wĂŒrde das Bash-Script stĂŒndlich zur vollen Stunde ausfĂŒhren. Wichtig: - Jeder Benutzer hat seine eigene Crontab. Wenn du z.âŻB. als pi angemeldet bist, gilt die Crontab nur fĂŒr diesen Nutzer. - Der vollstĂ€ndige Pfad zur Datei ist zwingend notwendig. - Falls Umgebungsvariablen (wie PATH) im Script verwendet werden, empfiehlt es sich, diese im Script selbst korrekt zu setzen oder absolute Pfade zu verwenden.
Git Repository klonen ins Home-Verzeichnis
Ăffne ein Terminal auf deinem Raspberry Pi. Wechsle in dein Home-Verzeichnis (optional, falls du nicht schon dort bist): cd ~ Klonen des Repositories: git clone https://github.com/StefanDraeger/xml2weatherpng.git
Nach dem AusfĂŒhren befindet sich das Repository unter: /home//xml2weatherpng Dort kannst du anschlieĂend dein meteomatic_fetch.sh-Script ausfĂŒhren oder fĂŒr den CronJob hinterlegen.
Projekt xml2weatherpng auf dem Pi
Berechtigungen fĂŒr meteomatics_fetch.sh setzen
Nachdem du das Repository mit git clone auf deinen Raspberry Pi geladen hast, fehlt dem Bash-Skript standardmĂ€Ăig oft die AusfĂŒhrungsberechtigung. Um das Skript ausfĂŒhrbar zu machen, musst du einmalig folgende Zeile ausfĂŒhren: chmod +x meteomatics_fetch.sh AnschlieĂend lĂ€sst sich das Skript wie gewohnt starten:
Hier ist ein passender Abschnitt fĂŒr deinen Blogbeitrag, in dem du erklĂ€rst, wie FOP auf dem Raspberry Pi heruntergeladen und entpackt wird:
Apache FOP auf dem Raspberry Pi installieren
Damit das Bash-Skript spÀter aus den XML- und XSL-Dateien eine PNG-Datei erzeugen kann, benötigen wir Apache FOP. Dieses Tool kannst du direkt mit wget herunterladen: wget --content-disposition https://www.apache.org/dyn/closer.cgi?filename=/xmlgraphics/fop/binaries/fop-2.11-bin.zip -O fop-2.11-bin.zip
Apache FOP download mit wget AnschlieĂend entpackst du das ZIP-Archiv mit: unzip fop-2.11-bin.zip AnschlieĂend muss der Ordner fop im entpackten Verzeichniss fop-2.11 eine Ebene nach oben verschoben werden (oder man passt alternativ die Pfade in den Bash Scripts an): cd fop-2.11 mv fop ../
verschieben des Ordners fop auf dem Pi Java JDK installieren Bevor Apache FOP auf dem Raspberry Pi genutzt werden kann, muss eine Java-Laufzeitumgebung installiert werden. Apache FOP basiert auf Java und benötigt daher ein entsprechendes JDK (Java Development Kit). 1. System aktualisieren Es empfiehlt sich, das System vor der Installation zu aktualisieren, um sicherzustellen, dass alle Paketquellen aktuell sind: sudo apt-get update sudo apt-get upgrade 2. OpenJDK installieren AnschlieĂend installierst du das OpenJDK â die freie Referenzimplementierung von Java: sudo apt install default-jdk
install default-jdk auf Pi Dabei wird aktuell (Stand Juni 2025) OpenJDK 17.0.15 installiert, was vollstĂ€ndig kompatibel mit Apache FOP ist. 3. Version prĂŒfen Ob die Installation erfolgreich war, kannst du mit folgendem Befehl prĂŒfen: java -version
installiertes Open JDK 17 auf dem Pi Mit einem aktuellen und funktionierenden Java-Setup kannst du im nĂ€chsten Schritt Apache FOP herunterladen und einsetzen. Wetterdaten abrufen und PNG erzeugen Sobald Apache FOP korrekt eingerichtet und das Java JDK installiert ist, kann das vorbereitete Bash-Script ausgefĂŒhrt werden. Dieses ruft die Wetterdaten im XML-Format von Meteomatics ab und erzeugt daraus mithilfe von XSLT und FOP eine PNG-Grafik fĂŒr das ePaper-Display. FĂŒhre dazu einfach folgenden Befehl aus: ./fetch_weatherdata.sh Das Script erledigt automatisch folgende Schritte: - Download der aktuellen Wetterdaten (im XML-Format) - Transformation per XSLT in ein XSL-FO-Dokument - Generierung des fertigen PNG-Bildes mit Apache FOP Das Ergebnis findest du anschlieĂend im Verzeichnis output/ â z.âŻB.: output/forecast.png Dieses Bild kann dann direkt auf einem Display dargestellt oder weiterverwendet werden.
abrufen der Wetterdaten sowie transformieren der XML Datei in ein PNG mit Apache FOP
Bereitstellung des PNG-Bildes ĂŒber einen HTTP-Server
Da sich das erzeugte Bild nun lokal auf dem Raspberry Pi befindet, muss es ĂŒber einen HTTP-Server bereitgestellt werden, damit beispielsweise ein ESP32-ePaper-Display es abrufen und darstellen kann.
Bild vom Raspberry PI im Browser Ein einfacher Weg ist die Nutzung von Python, da auf den meisten Systemen bereits eine Python-Installation vorhanden ist: cd output/ python3 -m http.server 8080 Dieser Befehl startet einen kleinen lokalen Webserver auf Port 8080, der das aktuelle Verzeichnis (output/) bereitstellt. Das PNG-Bild kann dann ĂŒber folgende URL abgerufen werden: http://:8080/forecast.png Ersetze durch die tatsĂ€chliche IP deines Raspberry Pis im Netzwerk. Diese findest du mit dem Befehl: hostname -I HTTP-Server automatisch starten mit tmux und CronJob Im vorherigen Abschnitt habe ich gezeigt, wie man mit python3 -m http.server schnell und unkompliziert das generierte Wetterbild im Netzwerk verfĂŒgbar macht. Doch nach einem Neustart des Raspberry Pi ist der Server wieder beendet â das ist natĂŒrlich nicht gewĂŒnscht. Um sicherzustellen, dass der HTTP-Server automatisch beim Systemstart gestartet wird, nutzen wir eine Kombination aus: - dem Terminal-Multiplexer tmux, der den Serverprozess im Hintergrund dauerhaft laufen lĂ€sst, - einem CronJob mit @reboot, der die tmux-Sitzung beim Hochfahren automatisch startet. Schritt 1: Webserver-Befehl in tmux starten (manuell testen) Du kannst testen, ob der Server wie gewĂŒnscht lĂ€uft: tmux new -s webserver 'cd ~/xml2weatherpng/output && python3 -m http.server 8080' Schritt 2: Automatischen Start per CronJob konfigurieren Ăffne die Crontab deines Benutzers: crontab -e FĂŒge am Ende folgende Zeile hinzu: @reboot tmux new -d -s webserver 'cd /home//xml2weatherpng/output && python3 -m http.server 8080' đ Der Parameter -d sorgt dafĂŒr, dass tmux die Sitzung im Hintergrund startet â du musst dich also nicht einloggen. Ergebnis Nach einem Neustart des Raspberry Pi wird der kleine Webserver automatisch gestartet und stellt das aktuelle PNG bereit â ganz ohne manuelles Zutun. Read the full article











