Thomas Rudolph  •  IT-Sicherheit   •  Internet of Things   •  IT-Lösungen


  Menü:
  🏠     Start
  💻     IT-Lösungen & Digitalisierung
  〰     Sensoren & Internet of Things
  🔒     IT-Sicherheit
  📈     Datenanalyse & Karten
  👨     Portfolio
  📝     Artikel & Anleitungen
  🙋️     Über mich


MOSMIX: Wettervorhersage mit Open Data des DWD

Stand: 2021-07-03


Worum geht es?

Der Deutsche Wetterdienst (DWD) stellt seit einigen Jahren Vorhersagedaten als Open Data zur Verfügung. Es handelt sich dabei um MOS-Daten (Model Output Statistics) für 5000 Orte weltweit, die allermeisten davon in Deutschland. Vom DWD werden diese Daten MOSMIX genannt und bieten eine Kurzfristvorhersage, die stündlich aktualisiert wird und eine 10-Tages-Vorhersage mit sechsstündigem Aktualisierungsintervall. Aufgrund eines Urteils bereitet der DWD diese Daten jedoch nicht grafisch und ansprechend auf. Die Rohdaten müssen also selbst verarbeitet werden. Informationen zu Dateiformaten und eine Liste mit Stationen hält der DWD am rechten Rand dieser Seite bereit. Im Stationskatalog bezeichnet der Wert in der Spalte id die ID der jeweiligen Station, unter der die Daten auf dem Open-Data-Server unter weather/local_forecasts/mos/MOSMIX_L/single_stations heruntergeladen werden können. Hier empfiehlt es sich, die Datei MOSMIX_L_LATEST_ID.kmz zu nutzen.

Es existieren bereits Initiativen, diese Daten ansprechend aufzuarbeiten. Beispiele sind die Website morgendwirdes.de und die Android-Anwendung Kleine Wettervorschau Deutschland, die im F-Droid heruntergeladen werden kann.


Das Programm mosmixparser

Aus persönlicher Neugier und weil ich mit diesen Lösungen noch nicht ganz zufrieden war, habe ich selbst eine Software geschrieben, die die MOSMIX-Daten aufbereitet und als HTML5 ausgibt. Sie kommt gänzlich ohne Grafiken aus, da sie zur Visualisierung des Wetters auf Text, Farben und Emojis setzt und Graphen mittels HTML5-Canvas-Elementen und etwas Javascript erzeugt. Die komplette Vorhersageseite ist daher nur ca. 35 kB groß und damit ein großer Kontrast zu kommerziellen Plattformen.

Diese Darstellung entspricht nur bedingt den Designvorstellungen der Gegenwart. Mein Ziel war es, zwischen einer möglichst kompakten Darstellung aller relevanten Werte ohne aufgeblähte Effekte und der Notwendigkeit der Einbindung großer Bibliotheken sowie einer ästhetischen Darstellung abzuwägen.

Der Ablauf geschieht folgendermaßen und ist auf Linux-Systeme optimiert:

Das Programm ist in C++ geschrieben und sollte als schneller Proof-of-Concept angesehen werden, der aber bei mir seit Monaten zuverlässig funktioniert, jedoch keine hohen Ansprüche an die Codequalität stellt. Der Code ist absichtlich recht schlicht gehalten und damit hoffentlich leicht verständlich, um Anpassungen zu ermöglichen. Verbesserungen sind durchaus sinnvoll und erwünscht. Die Software ist unter der GPL-3.0-or-later lizenziert. Der Code, der für die Ausgabe in die HTML-Datei zuständig ist, neigt in Richtung Spaghetticode. Dies gilt insbesondere, da der HTML-CSS-Header, die HTML-Formatierung und der Javascript-Code im C++-Code verkapselt ist. Diese Daten stattdessen aus externen Dateien einzulesen, könnte sinnvoll sein. Auch kann es sein, dass Feinanpassungen bei der Auswertung der Wetterdaten nötig werden. Manche Ausgaben (insbesondere die Wettersymbole) beruhen rein auf empirischen Erfahrungen.
Alle Werte werden über sechs Stunden gemittelt. Bei einigen Werten wird stattdessen (z.B. bei Windböen) der Höchstwert innerhalb dieser sechs Stunden angezeigt. Als Temperatur wird zweimal rund um die Nachtstunden der Tiefstwert und tagsüber zweimal der Höchstwert angezeigt wird.


Download

mosmixparser-1.0.2.tar.gz, Version 1.0.2 vom 2023-09-08

Kompilieren mit (C++-Standard >= 17) / compile using:

c++ mosmixparser.cpp -o mosmixparser

Beispielausgabe einer Wettervorhersage für den Raum Selters (Westerwald) hier.


Versionsgeschichte

Version 1.0.2: Felder mit "-" in der MOSMIX.kml-Datei führen nicht mehr zum Abbruch der Auswertung der Variable
Version 1.0.1: Das Regen-Symbol wird nicht mehr nur bei >= 30 % Regenwahrscheinlichkeit, sondern auch bei >= 1 l/m² Regenmenge angezeigt, um sommerliche Gewitter-Regenschauern besser erfassen zu können.


Schrittweise Anleitung für Einsteiger

Zunächst müssen die notwendigen Compiler installiert sein. Auf Debian-/Ubuntu-basierten Systemen (u.a. Linux Mint) sind diese im Metapaket build-essential enthalten, das über die Paketverwaltung installiert werden kann.

In einen beliebigen Ordner kann nun der mosmixparser heruntergeladen und entpackt werden. Wenn das Terminal benutzt wird, geschieht dies z.B. mit den Befehlen wget https://rudo.info/mosmixparser-1.0.2.tar.gz und tar xzf mosmixparser-1.0.2.tar.gz.

Per cd mosmixparser-1.0.2 wird nun in den entpackten Ordner gewechselt und dort mit c++ mosmixparser.cpp -o mosmixparser das Programm kompiliert. Nun wird aus dem Stationskatalog des DWD die ID des gewünschten Ortes herausgesucht und im Editor der Wahl in die Datei mosmixskript geschrieben. Beispielsweise wird für den ersten Ort in der Liste (Beveringen) EW002 eingesetzt. Dies muss überall dort geschehen, wo in der vorhandenen Datei K172 steht (also dreimal). Im Terminal lässt sich für die Änderung statt eines Editors auch der Befehl sed -i 's/K172/EW002/g' mosmixskript nutzen (hier muss K172 bleiben und EW002 durch die gewünschte Station ersetzt werden).

Jetzt ist mosmixparser einsatzbereit und kann im Ordner per ./mosmixskript (oder von jedem anderen Ort im Dateisystem mit vollem Pfad, feststellbar mit dem Befehl pwd) aufgerufen werden. Es erzeugt die HTML-Datei wx.htm mit der Wettervorhersage, die im Browser aufgerufen werden kann.

Fortgeschrittene Nutzer können mosmixparser nun mittels crontab automatisch zu einem bestimmten Zeitpunkt aufrufen lassen. Per crontab -e öffnet sich ein Editor und erlaubt die Konfiguration der automatischen Ausführung. Ganz unten in die Datei geschrieben, führt die Zeile 10 12 * * * /home/nutzer/mosmixparser-1.0.2/mosmixskript dazu, dass jeden Tag um 12 Uhr 10 (sic!) eine neue wx.htm erzeugt wird, sofern der Pfad an die örtlichen Gegebenheiten angepasst wurde. Unterhalb dieser Zeile muss zudem eine Leerzeile eingefügt werden.


English Summary

This program uses the open MOSMIX data by the German weather service (DWD) to create an HTML5 based weather forecast for the next ten days at a station selected by the user and chosen among 5000 stations provided by the DWD (most of them in Germany). A script downloads the data from the DWD servers as a kmz file, unzips it to a kml file and feeds it to the mosmixparser software. The software itself is written in C++. The HTML output routines in mosmixhtml.cpp tend to be spaghetti code as they include the encapsulated Javascript and HTML formatting within the code as well as empirical decisions on how to display the weather. Reading this data from a file might be a cleaner solution. The software is licensed under GPL-3.0-or-later. Feel free to fork.




   Sie sehen das eingeschränkte Design für einfache Browser. Zurück zur normalen Ansicht.
Impressum, Schlichtungsstelle und Datenschutzerklärung