Wetterdaten an Openweathermap

Mit der CCU2 ist es möglich Daten an externe Dienste weiter zu geben. Zum Beispiel können die Wetterdaten der Wetterstation OC3 an openweathermaps.com gesendet werden. Es kann natürlich auch ein einfacher Wettersensor sein, der nur Temperatur und Luftfeuchte liefert. Openweathermaps bietet eine Vielzahl an Schnittstellenoptionen mit denen die Daten übertragen werden können. Die einfachste Methode ist die Übertragung der Daten per  POST-Request an „http://openweathermap.org/data/post“ mit diesem Skript. Vor der Nutzung muss man sich bei openweathermap.com noch registrieren.

( ! ) Achtung: Durch die Umstellung der Schnittstellte bei openweathermap.org ist das Script leider nicht mehr funktional. Eine überarbeitete Version ist in Planung.

Mit dem folgenden Skript können die folgenden Parameter übertragen werden:

  • Temperatur
  • Luftfeuchtigkeit
  • Windrichtung
  • Windgeschwindigkeit
  • Tagesregenmenge

Die Übertragung erfolgt mittels cURL. Hierzu muss auf der CCU die Erweiterung CUx-Daemon (CUxD) installiert sein, da hier die cURL Funktion mit installiert wird. Ich habe zwar auch andere Anleitungen zum Nachinstallieren gefunden, die aber leider alle nicht funktionierten.

Beim Auslesen einigen Wetterdaten musste ich die ID verwenden, da es mit dem Namen nicht funktionierte. Zudem muss die Windgeschwindigkeit der OC3 von km/h in m/s umgerechnet werden. Im Skript sind hierzu einige Kommentare (!).

Skript für die Wetterdatenübertragung

var wds = dom.GetObject("Funk-Kombisensor");
! Hier muss der Name des Channels Funk-Kombisensor aus dem Sensor ersetzt werden
string curTemp = wds.DPByHssDP("TEMPERATURE").Value().ToString(1);
! DPByHssDP ist eine Methode zum Auslesen des Datenpunkt-Wertes
! mit ToString wird der Wert in einen Text konvertiert mit einer Nachkommastelle
string curHum = wds.DPByHssDP("HUMIDITY").Value().ToString(0);
string curWinDir = wds.DPByHssDP("WIND_DIRECTION").Value().ToString(0);
string curRain = dom.GetObject(5213).Value().ToString(2);
! Hier wird ueber die ID der Wert einer Systemvariable ausgelesen
real windspeed =dom.GetObject(5212).Value()/3.6; 
! Die Windgeschwindigkeit wird hier über die ID ausgelesen und in m/s umgerechnet
! Der Umrechnungsfaktor betraegt 3,6
string curWindSpeed = windspeed.ToString(2); 
! Umschreiben der berechneten Windgeschwindigkeit in einen Text mit zwei Nachkommastellen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -d 'wind_dir="#curWinDir#"&wind_speed="#curWindSpeed#"&temp="#curTemp#"&humidity="#curHum#"&rain_today="#curRain#"&lat=50.217528&long=7.908076&alt=400' --user 'benutzername:passwort' http://openweathermap.org/data/post");
! Absenden des cURL-Befehls über ein beliebig angelegtes CUxD Geraet
! Im POST-Parameter werden die ausgelesenen Variablen über "#Variable#" integriert
! POST-Parameter enthaelt neben den Wetterdaten die Angaben fuer Laengen- und Breitengrad sowie die Hoehe
! Als Login werden Benutzername und Passwort benoetigt

Programme & Zentraleverknüpfungen

Das Programm wird nun in der CCU2 angelegt und per Zeitintervall immer wieder ausgelöst. Da die OC3 per Standard nur alle 3 Minuten die Wetterdaten überträgt, empfiehlt sich das Ausführungsintervall des Programms auch auf drei Minuten zu setzen.

CCU2 Wetterdatenübertragung
CCU2 Programm zur Übertragung von Wetterdaten an openweathermap.com

Ergebnis

So kann z.B. das Ergebnis bei openwaethermap.com mit dem oben dargestellten Skript aussehen.

Stationsanzeige bei openweathermap.com
Stationsanzeige bei openweathermap.com

Tipps

Um die IDs und die benötigten Namen heraus zu bekommen kann die CCU2-Erweiterung XML-API zu Hilfe genommen werden.

Liste aller Geräte:
http://homematic-ccu2/config/xmlapi/devicelist.cgi

Daten eines Gerätes bei Übergabe einer <ID>:
http://homematic-ccu2/config/xmlapi/state.cgi?device_id=<ID>

Schreibe einen Kommentar

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