Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Wetterdaten mit XSLT visualisieren: Raspberry Pi & CronJob steuern Bash Script

Posted on 22. Juni 202522. Juni 2025 by Stefan Draeger

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.

Wetterdaten mit XSLT visualisieren: Raspberry Pi & CronJob steuern Bash Script
Dieses Video auf YouTube ansehen.

Inhaltsverzeichnis

  • Was ist ein CronJob?
    • Aufbau eines CronJob-Patterns
    • Zugriff auf die Crontab
  • Git Repository klonen ins Home-Verzeichnis
  • Berechtigungen für meteomatics_fetch.sh setzen
  • Apache FOP auf dem Raspberry Pi installieren
    • Java JDK installieren
      • 1. System aktualisieren
      • 2. OpenJDK installieren
      • 3. Version prüfen
    • Wetterdaten abrufen und PNG erzeugen
  • Bereitstellung des PNG-Bildes über einen HTTP-Server
    • HTTP-Server automatisch starten mit tmux und CronJob
      • Schritt 1: Webserver-Befehl in tmux starten (manuell testen)
      • Schritt 2: Automatischen Start per CronJob konfigurieren
      • Ergebnis

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
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
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
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/<Benutzername>/xml2weatherpng

Dort kannst du anschließend dein meteomatic_fetch.sh-Script ausführen oder für den CronJob hinterlegen.

Projekt xml2weatherpng auf dem Pi
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
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
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
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
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:

  1. Download der aktuellen Wetterdaten (im XML-Format)
  2. Transformation per XSLT in ein XSL-FO-Dokument
  3. 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
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
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://<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, 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.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}