Wettermonster eine Anleitung für die eigene Wetterstation

Einfach, Günstig, Gut…

…das ist die Idee hinter Wettermonster. Jeder Interessierte soll die Möglichkeit bekommen, selbst eine Wetterstation zu betreiben.

So wirbt Wettermonster auf ihrer Seite und hält das Versprechen auch ein.

Jan Dopheide hat im Rahmen einer Jugend-forscht-AG an seiner Schule und des Wettbewerbs Schüler experimentieren eine Wetterstation gebaut und im Nachgang dann die Webseite aufgebaut in der sehr gut erklärt wird wie man zu einer eigenen Wetterstation kommt.

Wir haben uns im Verein Nucleon e.V. nun zum Ziel gesetzt diese Wetterstation zu einer autonom arbeitenden LoRaWAN Wetterstation auszubauen. Das interessante an der Seite ist das neben dem Tutorial auch eine Karte mit den Stationen aufgebaut wurde an die man dann seine Daten senden kann. Da der verwendete MCU seine Daten aber mittels WLAN an die Seite sendet haben wir eine kleine Schnittstelle bauen müssen um die Daten unserer Stationen über LoRaWAN, dem The Things Network und Node-RED dann auch zu Wettermonster senden können.

Dieses werden wir hier nun näher beschreiben.

Der aktuelle Aufbau unserer Station

Da wir zur Zeit noch nicht alle notwendigen Teile für die Solar-Wetterstation haben nehmen wir einen vorhandenen Nucleon Wetter Node auf Basis der im Workshop erstellten BaseNodes und passen die Datenübertragung entsprechend an.

Der Nucleon Wetter Node

Unser Wetter Node ist auf Basis des NucleonBase Node aufgebaut und hat als Sensor einen BME280 an Board. Eine Anleitung zum Bau des BaseNode findet ihr hier im Blog.

Der Node liefert die Temperatur, den Luftdruck und die relative Luftfeuchtigkeit so wie die aktuelle Spannung des Akkus. Ein Trigger bei erreichen der Mindestspannung ist einprogrammiert so das man darauf auch eine Alarmierung des Nutzers aufsetzen kann das sich der Betreiber doch mal um seinen Node kümmern sollte.

Der Node sendet alle 5 Minuten seine Daten an das TTN und legt über Node-RED seine Daten in unsere InfluxDB ab.

Das Datenmodell des Node

Der Node überträgt neben einer Handvoll Meta-Daten die folgenden Wirk-Daten
batt: 3.8 in Volt
humidity: 80 in %
pressure: 997 in hPA
temperature: 6.299999999999997 in °C
trigger: false als boolean Wert

Das Datenmodell von Wettermonster

Das Wettermonster nimmt die Daten mittels einer PHP Schnittstelle an. Der Code wird bei der Registrierung einer Station zum Download angeboten.

Unter https://wettermonster.de/verwaltung/konfiguration haben wir den BME280 ausgewählt und so den Code für einen Node gleich passend erzeugt bekommen.

Da wir aber schon einen Node auf auf BaseNode Basis haben ist der erzeugte Code für uns nur die Quelle um die nötigen Parameter zu erhalten.

Diese sind:

  • id welche die Identifikation der Wetterstation repräsentiert
  • key das Passwort um die Daten an die Seite zu übertragen
  • temperature also die gemessene Temperatur
  • humidity die relative Luftfeuchtigkeit
  • pressure der aktuelle Luftdruck
  • windSpeed Windgeschwindigkeit
  • windDirection Windrichtung
  • Percipitation Regenmenge
  • luminosity Lichtstärke

Wir nutzen davon die ersten 5 Variablen um den BME280 als wetterstation zu übertragen.

Die Übertragung der Daten erfolgt im Original Code an folgender Stelle, wir nehmen uns aus diesem Code die notwendigen Strings und Variablen um die URL für den Request nach zubauen:

void sendToWettermonster() {

	if (client.connect("upload.wettermonster.de", 80)) // Verbindung zum Server aufbauen
	{

		Serial.println ("Verbunden mit upload.wettermonster.de");
		client.print("GET /speichern.php");
		client.print("?id=");
		client.print(id);
		client.print("&schluessel=");
		client.print(key);
		client.print("&temperatur=");
		client.print(temperature);
		client.print("&luftfeuchtigkeit=");
		client.print(humidity);
		client.print("&luftdruck=");
		client.print(pressure);
		client.print("&niederschlag=");
		client.print(Percipitation);
		client.print("&windgeschwindigkeit=");
		client.print(windSpeed);
		client.print("&windrichtung=");
		client.print(windDirection);
		client.print("&helligkeit=");
		client.print(luminosity);
		client.println(" HTTP/1.1");
		client.println("Host: upload.wettermonster.de");
		client.println("User-Agent: Wettermonster");
		client.println("Accept: text/html");
		client.println();

		Serial.println("Daten an Wettermonster gesendet");
	}

	else
	{
		Serial.println("Verbindung fehlgeschlagen");
	}

	client.stop();
}

Da wir aber Node-RED nutzen werden wir dieses Stück Code nur als Grundlage für unseren HTTP Request nehmen, den wir aus dem Flow absetzen werden.

Der Node-RED Flow

Node-RED ist zur Zeit unsere universal Waffe für ETL Prozesse, es löst sich damit bis jetzt einfach jedes Problem lösen.

Übersicht des Flow

Dieser einfache Flow reicht aus um die Daten vom Wetter Node Tarp 02 aufzubereiten und via HTTP Request zu versenden.

Der blaue Node holt die Daten vom TTN ab.

Die Applikation muss eingetragen werden und mit dem Access Key aus der TTN App versehen werden. Das nächste Fenster erreicht man wenn man den Stift klickt.

Konfiguration der Zugangsdaten für die TTN App

Den Access Key bekommt man in der Console vom TTN, er steht als letzter Eintrag auf der Seite der Applikation unten.

Kopiere den Access Key aus dem TTN und trage diesen oben in das entsprechende Feld ein.

Nun müssen wir uns um die empfangenen Daten kümmern, sie sind fast schon so zu gebrauchen, können aber noch ein wenig abgespeckt werden.

Der TTN Node liefert halt zusätzlich noch eine große Menge an Meta Daten die wir an dieser Stelle nicht benötigen. Wir haben in einem anderen Beitrag schon erklärt was wir damit allen anstellen und wie wir sie für die weitere Nutzung übertragen.

Hier in der Funktion liegt das eigentlich wichtige Stück Code

Mit dem Funktions Node erfolgt die Transformation der Daten.
Wir erstellen ein msg1 Objekt und befüllen dessen payload.
Es werden die von Wettermonster erhaltenen Daten der id und den dazu passenden key hier hinzu gefügt und die empfangenen Messwerte, pressure, temperature und humidity benötigt. Wir hätten nun auch noch die Felder für Windgeschwindigkeit, Windrichtung, Regenmenge und Lichtstärke einbauen können. Das haben wir aber erst einmal nicht gemacht weil der Node diese Daten ja nicht liefert. Wir können diese Felder auch in der URL zum HTTP Request auf 0 setzen.

Nun folgt ein Limiter um maximal eine Meldung innerhalb von 4 Minuten an das Wettermonster zu übertragen, es kann ja mal sein das aus irgend einem Grund eine Funktion hier durchdreht und dann versucht das Wettermonster zu fluten. Sollte man immer machen wenn man eine fremde Seite mit Daten versorgt.

Jetzt haben wir alle Daten in der Form wie wir sie haben möchten und können die URL für den Request zusammen stellen:

http://upload.wettermonster.de/speichern.php?id={{payload.id}}&schluessel={{payload.key}}&temperatur={{payload.temperature}}&luftfeuchtigkeit={{payload.humidity}}&luftdruck={{payload.pressure}}&niederschlag=0&windgeschwindigkeit=0&windrichtung='N'&helligkeit=0

Damit ist der Flow auch schon fertig, die Debug Nodes sind nur dafür da das man etwas sehen kann wenn der Flow arbeitet, damit lassen sich dann die Fehler schnell finden.

Ein beherzter klick auf Deploy aktiviert den Code und sobald der Wetter Node nun Daten sendet werden diese auf die Wettermonster Seite übertragen.

Um die Änderungen zu aktivieren muss der Deploy Button gedrückt werden.

Das Ergebnis

Nun können wir nach einigen Zyklen folgende Ergebnisse bei Wettermonster betrachten:

Übersicht mit Karte

Nach dem Klick auf Details rechts erhält man die folgenden Ansichten:

Verlauf der Temperatur an der gewählten Station
Verlauf des Luftdrucks an der gewählten Station
Verlauf der relativen Feuchtigkeit an der gewählten Station

Damit haben wir unsere Wetterstation aus dem TTN auf die Seite des Wettermonsters übertragen. Die Übertragung der Daten erfolgt automatisch wenn neue Daten vorhanden sind, dazu muss allerdings der Server auf dem Node-RED läuft angeschaltet bleiben, aber ein RasberryPI reicht völlig aus um Node-RED zu betreiben. Die Stromkosten sind somit in einem überschaubaren Rahmen.

Den Sketch bekommt ihr wie üblich bei uns im Gitlab, weitere Informationen über den Fortschritt bei der Solar-Wetterstation gibt es im Forum.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.