letztes Wochenende konnte ich endlich meinen Weatherman 2 nach dieser Anleitung in Betrieb nehmen,
Danke auch nochmal an Eugen (@funkleuchturm):
Nun möchte ich die Daten regelmäßig an OpenWeatherMap.org, (nachfolgend OWM genannt), mittels CURL-POST direkt aus der CCU/ Rasperrymatic/ o.a. schicken.
Hierfür hat OWM eine eigene JSON-Schnittstelle, dessen marginale Beschreibung mich jedoch viel Zeit mittels trial&error gekostet hat.
Daher möchte ich im Folgenden meine Lösung zur Wiederverwendung posten:
ANLEITUNG
Es sind folgende Schritte notwendig:
- 1. Vorbereitung: Free-Account auf OWM eröffnen, App Key generieren und Station registrieren
2. Homematic-Programm erstellen
3. Homematic-Script anpassen
4. Erfolgreichen Datenempfang auf OWM prüfen
Die Voraussetzungen zum Betreiben einer Station auf OWM sind ein vorhandener Account, ein damit generierter App Key (="appid) und eine initial registrierte Station (="station_id). Beide IDs werden später im Script benötigt. Dies ist leider auch der aufwändigste Teil der Übung.
Hierfür sei auf folgende Schritt-für-Schritt Anleitung verwiesen im WXForum.net , ggf. unter zur Hilfenahme eines Advanced Rest Clients zum Abholen der Station ID (per API Response), falls mein keine anderen Bordmittel zur Verfügung hat.

Ergänzend zum wxforum ist zu sagen, dass die station_id in der API Response in einem Advanced Rest Client nur id heißt:
2. Homematic-Programm erstellen 3. Homematic-Script einfügen und anpassen, siehe Kommentare innerhalb des Scripts:
Hinweis: Das Script ist bewusst so gestaltet, das für den Weatherman (2) mit integrierter automatische Setvar-Funktion nur die appid sowie die station_id im 1. Abschnitt angepasst werden müssen.
Gleichzeitig können im Bedarfsfall in dem im Script nachfolgenden 2. Abschnitt jedoch die Systemvariablen einfach angepasst werden.
Falls Daten wie z.B. Windrichtung nicht vorhanden sind, müssen die zugehörigen Variablen im 3. Abschnitt entfernt werden.
Code: Alles auswählen
! Wetterdaten vom Weatherman2 zu openweathermap.org (OWM) mit Curl hochladen
! Version: 0.21, Autor: sailor79, Stand: 24.11.20
! Basis_ Weatherman 2.0, siehe https://www.stall.biz/project/der-weatherman-2-die-ideale-wetterstation-fuer-die-hausautomation
! Verfügbaren Variablen auf OWM, siehe https://openweathermap.org/stations#measurement
! #########################################################################################
! ### 1. Abschnitt ###
! ### Einrichten einer eigenen Station vorher auf OWM, siehe Anleitung im Forum-Thread ###
! ### unter https://homematic-forum.de/forum/viewtopic.php?f=31&t=62884#p620975 ###
! #########################################################################################
! Hier den eigenen API key von OWM zwischen den "" eintragen:
string appid = "1234abc";
! Hier den eigene numerische Stations-ID von OWM eintragen: Achtung - nicht "name" oder "external_id" von OWM verwenden.)
string station_id = "1111zzz";
! Falls im Weatherman das Variablen-Suffix _w geändert wurde, bitte hier anpassen:
string wm_suffix ="w_";
! #########################################################################################
! ### 2. Abschnitt ###
! ### Weatherman-2: ab hier nichts mehr machen. ###
! ### Andere Wetterstation: Ab hier Korrektur der vorhanden Systemvariablen, wenn nötig.###
! #########################################################################################
! Aussen-Temperatur (in Grad Celsius) // Das Tages-Mittel ermittelt OWM.
string Aussentemperatur = (wm_suffix)#"temperatur";
! Taupunkt (in Grad Celsius)
string Taupunkt = (wm_suffix)#"taupunkt";
! Rel. Luftfeuchtigkeit (in %)
string Luftfeuchtigkeit_rel = (wm_suffix)#"feuchte_rel";
! Luftdruck N.N. (in hPa) // Die Höhe stellt man sowohl im Weatherman also auch auf OWM einmalig vorher
string Luftdruck = (wm_suffix)#"barometer";
! Mittlere Windgeschwindigkeit (in m/s)
! Hinweis: Weatherman stellt die Werte in km/h zur Verfügung, auch wenn die Systemvariable mittels automatischer setvar in Weatherman versehentlich die Einheit m/s anzeigt, Stand 22.11.20
string Windgeschwindigkeit_mittel = (wm_suffix)#"wind_mittel";
! Windspitze (in m/s)
string Windspitze = (wm_suffix)#"wind_spitze";
! Windrichtung (0-360°)
string Windrichtung = (wm_suffix)#"wind_dir";
! Regenmenge letzte Stunde (in mm)
string Regenmenge1h = (wm_suffix)#"regen_letzte_h";
! Regenmenge vorheriger Tag (in mm)
string Regenmenge_gestern = (wm_suffix)#"regen_mm_gestern";
! #########################################################################################################################
! ### 3. Abschnitt ###
! ### Im Falle nicht genutzter Variablen unter 3. Variablendeklaration + CURL String diese Variablen zwingend entfernen ###
! #########################################################################################################################
! *** Variablendeklaration für OWM und Werte holen ***
integer dt = system.Date("%F %T").ToTime().ToInteger(); ! *** OWN erwartet die Unix-Zeit ***
real temperature = dom.GetObject(Aussentemperatur).Value();
real dew_point = dom.GetObject(Taupunkt).Value();
real humidity = dom.GetObject(Luftfeuchtigkeit_rel).Value();
real pressure = dom.GetObject(Luftdruck).Value();
real windspeedkmh = dom.GetObject(Windgeschwindigkeit_mittel).Value();
real wind_speed = windspeedkmh / 3.6; ! Umrechnung in m/s
real windgustkmh = dom.GetObject(Windspitze).Value();
real wind_gust = windgustkmh / 3.6; ! Umrechnung in m/s
integer wind_deg = dom.GetObject(Windrichtung).Value();
real rain_1h = dom.GetObject(Regenmenge1h).Value();
real rain_24h = dom.GetObject(Regenmenge_gestern).Value();
! *** OWM URL Stand 22.11.20 & AppID zusammensetzen ***
string wurl = "http://api.openweathermap.org/data/3.0/measurements?appid="#appid#"";
! *** Curl String zusammenstellen, Nomenklatur gemäß https://openweathermap.org/stations#measurement, Stand 22.11.20 ***
string postreq = "curl -X POST -H \"Content-Type: application/json\" "#wurl#" -d '[{\"station_id\":\""#station_id#"\",\"dt\":"#dt#",\"temperature\":"#temperature#",\"dew_point\":"#dew_point#",\"humidity\":"#humidity#",\"pressure\":"#pressure#",\"wind_speed\":"#wind_speed#",\"wind_gust\":"#wind_gust#",\"wind_deg\":"#wind_deg#",\"rain_1h\":"#rain_1h#",\"rain_24h\":"#rain_24h#"}]'";
! *** Werte an OWM mittel Curl POST senden. ***
system.Exec(postreq);
! WriteLine(dt); ! Optional Ausgabe der Unixtime - zum Testen ! am Anfang dafür entfernen
4. Erfolgreichen Datenempfang auf OWM prüfen
Ca. 5min nach ausführen des CCU-Programms sollten die Daten auf OWM abrufbar sein.
Zum Testen, ob das CCU-Programm erfolgreich ausgeführt wurde UND Daten bei OWM angekommen sind, benutze ich wie unter 1. einen Advanced Rest Client oder einfacher, gebe nachfolgende Zeile direkt in den Browser ein, in meinem Fall Chrome:
Code: Alles auswählen
http://api.openweathermap.org/data/3.0/measurements?appid=1234abc&station_id=1111zzz&type=h&limit=100&from=1606136000&to=1606236620

Code: Alles auswählen
integer unixtime_jetzt = system.Date("%F %T").ToTime().ToInteger();
WriteLine(unixtime_jetzt);

Viele Grüße
Marc
--
Edit 24.11.20: Code Abschnitte im Script ergänzt, passend zur Beschreibung im Beitrag