Der Sketch für die WeatherStation füllt das ROM des Arduino fast vollständig. Es muss an jedem Byte gespart werden. Wird der Sketch vergrößert, funktioniert das Programm nicht mehr. Im Folgenden wird der Sketch Version 2.00 näher beschrieben. Das Programm läuft auf der WeatherStation-Hardware Version 1.00 (seit 2012 unverändert).

 

IDE 1.05

Zur Entwicklung wurde die die Entwicklungsumgebung IDE1.05 benutzt. Höhere Versionen können ebenfalls verwendet werden.

 

Verwendete Arduino-Bibliotheken

Folgende Bibliotheken kommen zum Einsatz:

Library Quelle Zweck
SPI.h Arduino-IDE SPI-Schnittstelle für LAN
Ethernet.h Arduino-IDE LAN-Verbindung
SoftwareSerial.h Arduino-IDE Serielle Verbindung zu FS20WUE
Wire.h Arduino-IDE I²C-Bus für Barometer

 

Beschreibung der Sketch-Funktionen

Das Programm sammelt laufend die Messwerte aller Sensoren und speichert sie in Variablen. Jede Minute (einstellbar im Sketch) werden die Messwerte per HTTP an den OpenHAB Webserver übermittelt. Die WeatherStation wird über LAN/WLAN mit dem Hausnetzwerk verbunden. Die WeatherStation kann ihre IP_Adresse über eine statische Konfiguration oder DHCP erhalten. Die statische Konfiguration wird empfohlen, da der Sketch dann nach dem Kompilieren kleiner ist. Nach dem Einschalten der WeatherStation verbindet sich diese mit dem LAN und startet dann den Messablauf. Die Übermittlung der ersten Messwerte beginnt nach Ablauf der Intervallzeit (Default = 1 Minute). Ist die WeatherStation per USB an den PC angeschlossen, gibt sie auf der IDE-Konsole laufend Statusmeldungen aus, welche sinnvoll fürs Debugging verwendet werden können.

 

Datenübermittlung zum OpenHAB-Server

Der Arduino Sketch verwendet das HTTP-Protokoll zur Datenübermittlung. Dabei wird ein GET-Request an den OpenHAB-Webserver übermittelt:

http://10.0.0.10:8080/CMD?WS_01_LDruck=1022.13

In diesem Beispiel hat der OpenHAB-Server die feste Ip-Adresse 10.0.0.10 und verwendet den Port 8080 (Standard). CMD ist das Verarbeitungsskript für externe Daten. Hier wird das Item WS_01_LDruck mit einem Wert von 1022.13 hPa übermittelt - der Luftdruckwert des BMP085-Sensors. Achtung: Trennzeichen für den Nachkommanteil ist der "Punkt", nicht das "Komma".

OpenHAB erfordert, dass immer nur ein Messwert pro Aufruf übermittelt wird. Um alle WeatherStation-Werte zu übermitteln, wird eine Sequenz von HTTP-Aufrufen erzeugt.

 

Übermittelte Daten

Zu jedem Übermittlungszeitpunkt werden die Messdaten an OpenHAB übermittelt, welche vorliegen. Findet die WeatherStation keine Werte für die Sensoren S300TH, werden die Werte auch nicht übermittelt. Da der Wettermast KS300 nur alle drei Minuten seine Werte aktualisiert, kann es nach dem Einschalten ein paar Minuten dauern bis Messwerte übermittelt werden.

Diese Parameter sind verfügbar:

Sensor-
Adresse
Sensor-
Typ
Wert Typ OpenHAB-
Parameter
Wertebereich
0 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp0
WS_01_Hum0
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
1 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp1
WS_01_Hum1
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
2 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp2
WS_01_Hum2
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
3 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp3
WS_01_Hum3 
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
4 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp4
WS_01_Hum4 
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
5 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp5
WS_01_Hum5 
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
6 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp6
WS_01_Hum6 
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
7 S300TH Temperatur
Feuchtigkeit
Float WS_01_Temp7
WS_01_Hum7 
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
--- KS300

Temperatur
Feuchtigkeit
Windgeschwindigkeit
Regenmenge
Regenkennung

Float WS_01_Temp
WS_01_Hum
WS_01_WSpeed
WS_01_RAmount
WS_01_RFlag
-40.0 bis +80.0 °C
0.0 bis 99.0 %rH
0.0 bis 200.0 km/h
0.0 bis 200.0 l/m²
0.0 / 1.0: Kein Regen/Regen
--- BMP085

Temperatur BMP085
Luftdruck

Float WS_01_LDTemp
WS_01_LDruck
0.0 bis 80.0 C
0.0 bis 1200.0 hPa
--- LDR03 Spannung am LDR Float WS_01_LumDigits 0.0 bis 1023.0
--- KTY81 Spannung am KTY Float WS_01_KTY 0.0 bis 1023.0
--- Arduino Heizung WeatherStation
Heizung Regenmesser
Float WS_01_HtWS
WS_01_HtRM
0.0 bis 4.0W
0.0 bis 9.6 W

 

Umrechnung von gelieferten Messwerten in OpenHAB

Einige Messwerte werden von der WeatherStation ein einem nicht direkt lesbarem Format geliefert. Sie werden nicht innerhalb des Arduino-Sketches umgerechnet, weil:

  • Das Programm bereits sehr groß ist
  • Die Verarbeitungsgeschwindigkeit des Arduino zu gering ist
  • Die Fließkommagenauigkeit des Arduino zu gering ist (Exponentialfunktionen usw.)

Diese Umrechnung erfolgt innerhalb von OpenHAB.

 

Helligkeit

Der Messwert WS_01_LumDigits wird erst in OpenHAB zu Lux-Werten umgewandelt.

Formel hinterlegen!

 

Temperatur Regenmesser

Der Messwert WS_01_KTY werden erst in OpenHAB zu einem Temperaturwert umgewandelt. 

Formel hinterlegen!

 

Luftdruck

Der von der WeatherStation ausgegebene Luftdruck entspricht der Höhe des Standortes der Weatherstation (in meinem Fall 492m). Er muß innerhalb von OpenHAB auf Meereshöhe umgerechnet werden, damit er mit den Wetterprognosen im Radio/Internet vergleichbar ist. Hierzu muß die Barometrische Höhenformel verwendet werden:

  1. p(H) = P0 * exp(-H/7990m)
  2. Corr = exp(-H/7990m)
  3. p(H) = P0 * Corr 

H ist die Höhe der Weatherstation über Meeresspiegel in Meter (per Google einfach zu finden)
p(H) ist der Luftdruck auf der Höhe der WeatherStation in hPa
p ist der Luftdruck in Meereshöhe in hPa

Für "H" setzt bitte die Höhe Eures Wohnortes ein. Die Exponentialgleichung ergibt aufgelöst einen festen Faktor. Bei meiner Höhe von 492m errechnet sich der Faktor "Corr" zu 0,940280568. Jetzt stellt man die Gleichung um:

P0 = p(H) / Corr

Meldet die WeatherStation auf 492m Höhe einen Luftdruck von 963,4 hPa, dann ergibt dies nach Formel einen Wert von 1024,6 hPa auf Meereshöhe. Der Korrekturfaktor muß von Euch nur einmal berechnet und in OpenHAB eingegeben werden.

Regenmenge

Die WeatherStation sendet den aktuellen Regen zwischen zwei Messpunkten (1 min. Abstand). Natürlich interessiert darüber hinaus die Regenmenge pro Tag, Monat und Jahr. Diese Mengen werden mit einer OpenHAB-Rule aus dem aktuellen Niederschlag gebildet.