2529828

Wetterwebsite mit Raspberry Pi

26.08.2020 | 10:27 Uhr | Swen Hopfe

Eingerichtet wird eine Wetterstation im Web, wo jeder Besucher Wetterdaten einer bestimmten Region abrufen kann. Gesteuert wird das Ganze über einen Raspberry Pi.

Schon lange läuft bei uns ein Raspberry Pi unterbrechungsfrei als kleiner Hausserver. Da dient er unter anderem als Webserver und Storage. Die Hausautomation auf Basis FHEM fragt auch Sensoren im Außenbereich ab und besitzt schon Wind- und Regenmesser. Warum nicht die bestehende Installation für eine kleine Wetterwebsite nutzen, wo diverse Werte auch öffentlich gemacht werden.

Es sollte eine Wetterstation im Web werden, wo sich jeder Besucher aus nah und fern über die aktuelle Wetterlage in unserer Gegend informieren kann, natürlich auch ohne Gewähr für die ganz akkurate Messung und Verfügbarkeit der Ergebnisse. Als Schaltzentrale bekommt der Raspberry Pi nun extra Aufgaben zugewiesen, wie die Beschickung der Website mit den passend aufbereiteten Wetterdaten.

Wetterwebsite - Screenshots
Vergrößern Wetterwebsite - Screenshots
© Swen Hopfe



Unsere Website


Nach dem Vorbild vergleichbarer Seiten aus dem Hobbybereich sollte sie Informationen über den lokalen Standort aus den hauseigenen Sensoren liefern, angereichert mit Statistiken und sonstigen Quellen, plus einer Wettervorhersage für das Gebiet. Auch Aufnahmen unserer Webcam sollten mit dabei sein. Schnell war für die Website eine Subdomain reserviert, die ist aktuell unter wetter.smartewelt.de online und zeigt schon alles an.


Wo die Daten herkommen


Die lokalen Daten wie Temperatur, Niederschlag, Helligkeit, Luftfeuchte, Luftdruck und Wind speisen sich aus unserer Hausautomationssoftware, die auf unserem Pi-Server mittlerweile schon ein paar Jahre und ganz zufriedenstellend läuft.

Neben der gewohnten Akquisition der Daten muss der Pi nun auch alle Berechnungen machen, die für die Darstellung auf der neuen Wetterwebsite gebraucht werden, wie das Update von Round-Robin-Datenbanken und die Erzeugung der Diagramme daraus.
Und er ist auch für das Management der Wetterdaten eingespannt, wie das Rücksetzen der pro Stunde, Tag oder Monat kumulierten Summenwerte. Dazu nutzen wir die Crontab des Kleinrechners, die kommt auch bei der Übertragung zur Website zum Einsatz.

Datenfluss
Vergrößern Datenfluss
© Swen Hopfe


Alle anzuzeigenden Messwerte werden in Grafiken umgewandelt, und in diversen Zeitabständen wird ein Verzeichnis der Webpräsenz per SFTP damit beschickt. Von da aus sind alle Zahlengrafiken und Diagramme in die Website statisch eingebunden. Damit braucht unsere Wetterwebsite keinen eigenen Zugriff auf den Pi und es muss kein extra Port ins lokale Netzwerk geöffnet werden.


Für die Wettervorhersage haben wir uns für das API von „daswetter.com“ entschieden. Nach Anmeldung gibt es freien Zugriff auf das konfigurierbare Interface. Auf das kann man nun per Nutzer-ID direkt im Code der Website zugreifen und alle Vorschaudaten einlesen, um sie anschließend, nach eigenen Belangen formatiert, wieder auszugeben.



Umsetzung - Sensoren über FHEM abfragen


Wie sind wir nun für die konkrete Umsetzung vorgegangen? Bis auf den Luftdrucksensor, welcher per I2C-Bus direkt am Pi verkabelt ist, nutzen wir FHEM rund ums Haus. Der unter Technikinteressierten bekannte Automationsserver läuft gut auf einem Raspberry Pi 3. Bislang war der Umzug auf die 4er-Version nicht angesagt, wo wir doch auch von SSD booten wollen.

Lokale Werte der Wettersensoren
Vergrößern Lokale Werte der Wettersensoren
© Swen Hopfe


Ein Vorteil von FHEM besteht in seiner Plattformunabhängigkeit in Bezug auf die anzubindende Hardware. So können eine Vielzahl von Geräten verschiedener Hersteller angebunden werden, wenn man die passenden Funkempfänger am Raspi angeschlossen hat.

Für die Zwecke unserer Wetterwebsite fragen wir nur einen kleinen Teil unserer FHEM-Geräte ab.


Unserer Website liefern folgende Geräte zu:


- Luftdrucksensor GY68-BMP180 (über I2C-Bus verbunden)
- Wind- und Regenmesser über TX-DTH-Empfänger an WS1600-IT Wetterstation
- Temperatur- und Luftfeuchte-Sensor TX29DTH-IT (LaCrosse-Protokoll)
- Helligkeitssensor HmIP-SLO (Homematic-IP)

Jeelink zum Empfang von LaCrosse-Sensoren
Vergrößern Jeelink zum Empfang von LaCrosse-Sensoren
© Swen Hopfe


Dazu hängen Jeelink - und CUL -Stick über USB, wie ein TRXC2-Empfänger am Raspberry Pi, die auch alle anderen Empfänger bedienen.

Da wir manche Dinge separat brauchen, besteht unsere Softwarebasis für die Wetterwebsite nicht nur aus einem einzigen Skript. Aber das meiste ist in einem zusammengefasst, dort werden alle benötigten Werte aus FHEM gezogen und wir greifen dazu auf Python und Telnet zurück, wo eine typische Abfrage so aussieht:

Eine typische Abfrage
Vergrößern Eine typische Abfrage
© Swen Hopfe

Im ersten Beispiel wird der Wert des Regensensors des Geräts „Wetterstation“ als String abgefragt. Im zweiten Beispiel ist es der Temperatursensor namens „Temp_Aussen“. Im Anschluss kann man noch in float wandeln und auf eine Kommastelle runden.


Einen größeren Auszug möchte ich an dieser Stelle gar nicht geben, wo doch Ihre Implementierung ganz anders aussehen kann und Sie vielleicht einen Hausserver mittels homematic oder ioBroker am Laufen haben. Derlei Plattformen gibt es mittlerweile viele, und es soll ja auf das Bestehende aufgestockt werden.


Wer sich für unsere aktuelle Wahl interessiert, informiert sich am besten zuerst unter fhem.de . Erfahrene Nutzer wissen um die Arbeit, welche in einer hausumspannenden Installation mit vielen angebundenen Aktoren und Sensoren steckt. Es geht aber auch eine Nummer kleiner und auf die Wetterbeobachtung angepasst.



Statistiken


Unmittelbar nach den „lokalen Werten“ schließt sich auf unserer Website der Block „Statistiken“ an. In der Regel erhält man beim Messen nur kontinuierlich Werte für den Augenblick. Möchten wir den Besuchern unserer Website einen Überblick über Tag und Monat geben, wird das Sammeln von Werten und etwas Rechenarbeit notwendig.

Statistiken
Vergrößern Statistiken
© Swen Hopfe


Für ein Tages-Maximum oder Minimum merkt man sich die Spitzenwerte, für die Regensumme pro Tag addiert man kontinuierlich auf. Wie später beschrieben, leistet hier die Crontab des Pi gute Dienste, um beispielsweise am Tages- oder Monatsende diverse Summen wieder auf Null zu setzen.


Für die Ausgestaltung eines solchen Statistik-Blocks kann man der eigenen Kreativität freien Lauf lassen. Diverse Anhaltspunkte, was für meine Besucher interessant sein könnte, kann ich mir von professionellen Seiten im Web holen.


Etwas stolz bin ich auf unsere Ermittlung des Luftdrucktrends, der aus den eigenen Messwerten abgeleitet wird. Dort extrahieren wir einige letzte Messpunkte und eliminieren Spitzen, um einen mittelfristigen Trend für die „Schön- oder Schlecht“-Wetterentwicklung zu ermitteln, wie er auch bei diversen Wetterstationen angezeigt wird.



RRD-Files und Diagramme


Die Wetterbeobachtung lebt nicht zuletzt von Diagrammen, denn so lassen sich Verläufe besonders gut visualisieren. Um unseren Besuchern nicht nur schnöde Zahlen zu präsentieren, gibt es Diagramme auch auf unserer Website. Für unsere Betrachtung brauchen wir immer nur einen zeitlich begrenzten Ausschnitt. Da bieten sich Round-Robin-Datenbanken an.


Den Umgang damit können wir nur streifen, weil es doch ein weites Feld ist. Auch hier spielt der Pi als Plattform eine wesentliche Rolle. Für Python gibt es eine gute Integration der rrdtools , damit uns solche Datenbanken als FIFO-Speicher für die zu merkenden Datenpunkte dienen können.


Im folgenden Auszug wird der vorher für den Luftdruck ermittelte Wert in die Datenbank „air.rrd“ mit dem Zeitstempel „N“ für „now“ unmittelbar geschrieben:

from rrdtool import update as rrd_update
ret = rrd_update('/mnt/.../air.rrd', 'N:%s' %(str(luftdruck)));


Die Pfadangabe haben wir mit drei Punkten versehen, wo sie doch auch variabel sein kann und bei uns auf einer am Pi angebundenen SSD endet. Die häufig beschriebenen Datenbanken befinden sich bei uns also nicht auf der SD-Karte des Pi, sondern sind auf dessen Platte an USB ausgelagert.


Die rrdtools halten außerdem eine gelungene grafische Aufbereitung bereit, mit der man sich schicke Graphen ausgeben lassen kann. Die gibt es bei uns für Temperatur, Luftdruck und stündlicher Niederschlagsmenge.

Diagramme für den Temperaturverlauf
Vergrößern Diagramme für den Temperaturverlauf
© Swen Hopfe


Um solche Grafiken an die eigenen Bedürfnisse angepasst zu erzeugen, bietet die „graph“-Option der rrdtools viele Einstellungsmöglichkeiten. So sieht ein entsprechender Aufruf aus, den wir entsprechend angepasst für alle unsere Diagramme auf der Wetterwebsite genutzt haben:

Beispiel für den Aufruf von Diagrammen
Vergrößern Beispiel für den Aufruf von Diagrammen
© Swen Hopfe


Datenmanagement


RRD-Datenbanken brauchen ein kontinuierliches Update in bestimmten Intervallen. Da ist es gut, dass der Raspi als vollwertiger Linuxrechner eine Crontab bietet, wo man Herr über Minute, Stunde oder Tag ist und gezielt Prozesse starten kann.


Cron-Jobs nutzen wir also, um in regelmäßigen Abständen Sensordaten zu holen, in Auswertezeiträumen zusammenzufassen, die RRD-Archive zu füllen und der Wetterwebsite zur Verfügung zu stellen. Braucht man solches Scheduling häufiger, lohnt sich ein Blick in die Dokumentation von Cron.


Die anfallenden Aufgaben haben wir auf mehrere Skripte verteilt. So gibt es unter anderem:


# alle 6 Minuten rrd-Archiv “Luftdruck” füllen

*/6 * * * * /.../rrdgraph1.sh



# jede Stunde rrd-Archiv “Regen pro Stunde” füllen

0 * * * * /.../rrdgraph2.sh



# alle 10 Minuten Wetterdaten holen und uebertragen

*/10 * * * python /.../wetter.py




# kurz vor 0.00Uhr Regenwert des alten Tages merken
# wenn Regentag, Anzahl der Regentage hochzählen
# Min/Max-Werte des vergangenen Tages löschen

58 23 * * * python /.../rmem_d.py




# Regenwert des alten Monats merken, 0:05Uhr jeden ersten im Monat

5 0 1 * * python /.../rmem_m.py



Werden die Werte der eigenen Sensoren nun zuverlässig ermittelt und auf der Website wie gewünscht angezeigt, kann man sich den weiteren Inhalten widmen.



Vorhersagen


Vorhersagen sind die Sache von Wetterdiensten. Aber eine von extern eingebundene Wetterkarte oder ein Wetterwidget zum eigenen Standort können die eigene Wetterseite positiv auflockern und gehören schließlich zum Thema. Da findet man im Web leicht etwas.


Möchte man umfangreichere Informationen abrufen, die sich auch noch flexibel formatieren lassen, bietet sich ein API an. Meist findet man hier Angebote für gewerbliche Kunden. Nach weniger umfangreichen und kostenfreien Schnittstellen für den Privatnutzer muss man mittlerweile suchen, wird aber bei daswetter.com von Meteored noch fündig.

Vorhersagen aus der Wetter-API
Vergrößern Vorhersagen aus der Wetter-API
© Swen Hopfe


Nach der Registrierung erhält man Zugang zum Bereich der Wetter-API mit Dokumentation, Icon-Sets und Beispielen für die Integration in die eigene Website. Zum Auslesen der Daten könnte man durchaus ein Skript auf einem Raspberry Pi verwenden.
Oft setzt ein kostenfreies Angebot jedoch die explizite Nutzung in Zusammenhang mit einer Website voraus, und wir benötigen die Hilfe vom Pi hier auch nicht wirklich. Mit ein paar Zeilen PHP im Code der Website liest man das Gewünschte aus der API. Wir starten die Abfrage mit

 $file='  http://api.daswetter.com/index.php?api_lang=de&localidad=xxxxxx&affiliate_id=yyyyyyyyyyyy&v=2.0 '; 


und nutzen die Version 2 laut Dokumentation. Meteored stellt verschiedene Versionen mit unterschiedlich langer Beschreibung und unterschiedlicher Anzahl von Vorschautagen zur Verfügung.


Die hier mit „x“ und „y“ ausgefüllten Bereiche für die IDs erhält man nach der Konfiguration im persönlichen Bereich vom Anbieter.


Und der beschreibt in den Beispielen dann auch, wie man das Parsing der eben in $file eingelesenen XML-Daten macht, um ein Array mit Vorschaudaten zu füllen. Um auch schicke Wettersymbole anzeigen zu können, werden für die Symbole Zahlenwerte übertragen, die sich im Dateinamen der PNG-Dateien in den Iconsets wiederfinden. Damit kann man sich im Quelltext der eigenen Website seine Dateipfade zusammenbauen und ein für die eigene Gestaltung passendes Iconset hinterlegen.


Geht man Schritt für Schritt vor, ist alles nicht so kompliziert. Damit auf unserer Wetterwebsite der Besucher nicht mit zu viel Information auf einmal konfrontiert wird, haben wir nach der Wochenübersicht die Tagesübersichten ausklappbar gemacht. Die werden erst nach einem Buttonklick angezeigt.




Sonst noch


Und was gibt es sonst noch? Im Block Tageszeiten zeigen wir Aufgangs- und Untergangs-Zeiten von Sonne und Mond an. Die sind nun gar nicht vom aktuellen Wetter beeinflusst, aber trotzdem eine beliebte Anzeige bei Wetterstationen.

Tageszeiten
Vergrößern Tageszeiten
© Swen Hopfe


Was da nicht über die Wetter-API kommt, kann man sich wieder mittels PHP-Funktionen holen. Bei uns das „Mondalter“ zum Beispiel. Oder man möchte sich die Sonnenaufgangs-Zeit für einen oder mehrere Tage im Voraus (vt) anzeigen lassen. Das klappt mittels

<?php echo date_sunset(mktime(0, 0, 0, date("m"), date("d") + vt, date("Y")), SUNFUNCS_RET_STRING, 50.493307, 12.419366, ini_get("date.sunset_zenith"), date("O") / 100);?>


erstaunlich einfach und braucht ansonsten nur die Koordinaten vom eigenen Standort.


Zum Schluss zeigen wir noch Webcam-Bilder und eine Standort-Karte an, damit der Besucher im Zweifelsfall auch weiß, wo unsere Beobachtungsstation liegt. Dass unsere Webcam auch mit dem Pi im Hintergrund arbeitet, kriegt er nicht mit.


Mitunter schaut er aber nicht vom heimischen PC oder Notebook rein, sondern auch von unterwegs. Da auf unserer Website viel eigener Code eingebracht werden sollte, aber kaum etwas verwaltet werden muss, kam nur eigene Programmierung und kein CMS wie etwa Wordpress zum Einsatz.

Wetterwebsite auf dem Smartphone
Vergrößern Wetterwebsite auf dem Smartphone
© Swen Hopfe


Trotzdem haben wir auf ein „Responsive Design“ Wert gelegt, so dass sich alles auch auf mobilen Geräten skaliert und auf dem Smartphone von unterwegs gut „durchstöbern“ lässt.



Fazit


Soviel zur Reise durch unsere Wetterwebsite. Mittlerweile nutze ich die Website gern auch als eigene und schnelle Informationsquelle, wo doch viel an einem Ort zusammengefasst ist. Das nützt mir für eigene Zwecke und ich hoffe, dass das  Besuchern, Freunden oder Bekannten genauso geht. Außerdem ist sie in diversen Verzeichnissen als Wetterwebsite eingetragen, genauso wie die integrierte Webcam, die man dadurch auch ganz gut im Web finden kann.

Temperatur- und Helligkeitssensor
Vergrößern Temperatur- und Helligkeitssensor
© Swen Hopfe


Wir wollten zeigen, wie man mit etwas zusätzlicher Programmierung zu einer eigenen Wetterwebsite kommen kann, in dem man nutzt, was etwa schon da ist, ohne dass man sich gleich eine professionelle Wertewarte anschafft.


Ein Thema für den Pi ist es deshalb, weil er bei uns den nötigen Serverbetrieb macht. Wo ein Pi da noch andere Aufgaben hat, sollte man bei einem Neuaufbau gleich einen 3er-oder 4er-Pi vorsehen.

Raspberry Pi 4
Vergrößern Raspberry Pi 4
© Swen Hopfe


Abseits davon haben wir auf ein paar Regeln zur Werteermittlung geachtet. So ist der Temperatursensor auf der Nordseite vom Gebäude abgeschattet und belüftet.


Aber mit mehr oder weniger professionellen privaten Beobachtungsstationen, die auch den Wetterdiensten zuliefern, kann und soll unsere Lösung auch nicht konkurrieren. So stört es mich auch nicht, dass unser Regenmesser nur ein einfaches Wippenmodell mit 0,5 mm Auflösung ist und ich bin mit unseren Ergebnissen recht zufrieden.


Aus eigener Erfahrung kann ich nun sagen: Wenn man einmal eine solche Website aufgebaut hat, wird man sich immer häufiger ertappen, mal eben nebenbei die aktuelle Lage checken zu müssen. Sei es auf Grund der wechselnden Wetterverhältnisse in diesen Jahren oder weil es einfach ein interessantes Hobby ist, dem immer mehr Leute folgen...

Hier finden Sie noch mehr Raspberry-Projekte von Swen Hopfe


Digitalradio mit Raspberry Pi

Raspberry Pi Zero W: Kamera per WiFi fernsteuern

Fotoslider mit Raspberry Pi

So machen Sie den Raspberry Pi sicherer

Raspberry Pi: Kontrolle per Smartphone-App

Pidoctor: Raspberry Pi überprüfen

Raspberry Pi: Computerschach per Pi-Cam spielen

NFC-Reader mit Raspberry Pi selbst bauen

Raspberry Pi Zero W als smarter USB-Stick

Zeitraffer-Aufnahmen mit dem Raspberry Pi Zero machen

Webcam mit Raspberry Zero Pi W einrichten

Nächtliche Tierfotografie mit NoIR-Cam und Raspberry Pi

PC-WELT Marktplatz

PC-WELT Hacks - Technik zum Selbermachen?

Raspberry Pi erfreut sich gerade unter Bastlern einer großen Beliebtheit. Kein Wunder, denn mit der 35-Euro-Platine lassen sich viele spannende Projekte realisieren. Vom Mediacenter, Netzwerkspeicher, Fotomaschine bis hin zum Überwachungssystem ist alles möglich. Dieser Bereich ist aber nicht nur dem Raspberry Pi gewidmet, sondern bietet auch viele Tipps, Tricks und Anleitungen für andere spannende Bastelprojekte.

2529828