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.
Inhaltsverzeichnis
- Was ist ein CronJob?
- Git Repository klonen ins Home-Verzeichnis
- Berechtigungen für meteomatics_fetch.sh setzen
- Apache FOP auf dem Raspberry Pi installieren
- Bereitstellung des PNG-Bildes über einen HTTP-Server
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:

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.

Nach der Auswahl öffnet sich die Crontab-Datei im gewählten Editor. Hier kannst du neue Zeilen hinzufügen, um Jobs zeitgesteuert auszuführen.

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/<Benutzername>/xml2weatherpng
Dort kannst du anschließend dein meteomatic_fetch.sh
-Script ausführen oder für den CronJob hinterlegen.

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

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 ../

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

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

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.

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.

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://<IP-Adresse-des-Raspberry-Pi>:8080/forecast.png
Ersetze <IP-Adresse-des-Raspberry-Pi>
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/<Benutzername>/xml2weatherpng/output && python3 -m http.server 8080'
🔁 Der Parameter
-d
sorgt dafür, dasstmux
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.