Wunderground-Anbindung ohne API-Key
Problem
Nach der Übernahme von Weather Underground durch IBM bietet WU keine kostenlosen Developer Keys zur Abfrage von Daten mehr an. Um weiterhin an die Daten der eigenen Wetterstation über Wunderground zu gelangen nutze ich einen Aufruf, welcher auch in der Webansicht der eigenen Wetterstation von Wunderground (https://www.wunderground.com/dashboard/pws/StationID) genutzt wird.
Lösung
Nur per HTTPS möglich
Der Abruf der Daten ist, seit 7.November 2022, nur noch über HTTPS möglich!
Dies ist auf dem Miniserver V2 oder Miniserver Compact direkt möglich. Der Miniserver V1 hat hierfür keine Untersützung, eine Anbindung ist jedoch z.B. Loxberry HTTP2HTTPS Plugin möglich.
Hier die Info von Weather Underground:
API Call Requirements Change -- 7 Nov 2022
Status: Aktuell
Short Summary: The Weather Company will be deprecating support of API requests using http, TLS 1.0, and TLS 1.1 protocols on November 7, 2022. After this date, API requests using http and TLS versions prior to 1.2 will fail. This action is being taken to ensure the highest levels of encryption and security for our systems. This means that all API calls for PWS data MUST be made with https. Basic information about TLS protocols may be found here: https://en.wikipedia.org/wiki/Transport_Layer_Security This will most likely impact those who use old software to download data FROM Weather Underground. There should be no impacts to uploading data TO Weather Underground. If you are encountering problems, the first step should be to see if there are new versions of the software/firmware you are using. Make sure all API calls begin with https://
Details: The Weather Company will be deprecating support of API requests using http, TLS 1.0, and TLS 1.1 protocols on November 7, 2022. After this date, API requests using http and TLS versions prior to 1.2 will fail. This action is being taken to ensure the highest levels of encryption and security for our systems. This means that all API calls for PWS data MUST be made with https. Basic information about TLS protocols may be found here: https://en.wikipedia.org/wiki/Transport_Layer_Security
Die Webview von Wunderground nutzt diverse Webservices um die Daten für die aktuelle Ansicht zu erhalten. Einige davon liefern als Antwort ein JSON, welches wiederum in Loxone verarbeitet werden können:
https://api.weather.com/v2/pws/observations/current?apiKey=
e1f10a1e78da46f5b10a1e78da96f525&stationId=StationID&format=json&units=m
In diesem Aufruf muss lediglich die StationID eingetragen werden. Der API-Key ist öffentlich und muss nicht geändert werden! Die StationID findet man am einfachsten über die Wundermap heraus.
Was bekommen wir nun zurück? Ein JSON formatierter Datensatz der die Informationen der im Request eingegrenzten Wetterstation enthält!
Response
{
"observations": [
{
"stationID": "IDARMSTA223",
"obsTimeUtc": "2019-05-27T08:00:25Z",
"obsTimeLocal": "2019-05-27 10:00:25",
"neighborhood": "Tulpenweg",
"softwareType": "WH2602 V4.5.6",
"country": "DE",
"solarRadiation": 159.31,
"lon": 8.64811707,
"realtimeFrequency": null,
"epoch": 1558944025,
"lat": 49.90708923,
"uv": 2.0,
"winddir": 103,
"humidity": 93,
"qcStatus": 1,
"metric": {
"temp": 15,
"heatIndex": 15,
"dewpt": 14,
"windChill": 15,
"windSpeed": 0,
"windGust": 0,
"pressure": 1008.81,
"precipRate": 0.0,
"precipTotal": 1.02,
"elev": 224
}
}
]
}
In der Loxone Config
Virtueller Eingang:
Bei den virtuellen Eingängen wird ein neuer Virtueller HTTP Eingang angelegt, diesen nennen wir in diesem Beispiel "Wetter".
In den Eigenschaften des Virtuellen Eingangs muss anschließend die URL zur Wetterstation eingetragen werden, von der wir die Daten auslesen wollen
In diesem Beispiel nehmen wir als Station ID die Wetterstation ISACHSEN347
Die URL für den Virtuellen Eingang sollte dann so aussehen:
https://api.weather.com/v2/pws/observations/current?apiKey=e1f10a1e78da46f5b10a1e78da96f525&stationId=ISACHSEN347&format=json&units=m
Um die Station ID deiner nächstgelegenen Wetterstation herauszufinden, einfach auf https://www.wunderground.com/wundermap deinen Ort suchen und die nächstegelegene Wetterstation anklicken (die farbigen Punkte auf der Landkarte). In dem kleinen Fenster, das sich öffnet, findest du die Station ID.
Im Eigenschaften Fenster sieht das Ganze dann so aus:
(Hinweis: Der auf dem Screenshot gezeigte APIKey ist veraltet - im text findet ihr den aktuellen Key!)
Virtueller Eingang Befehl:
Anschließend werden mit Virtueller HTTP Eingang Befehl die gewünschten Daten ausgelesen.
In diesem Beispiel wird die Temperatur mit dem Befehl "temp":\v abgefragt.
Für jeden Wert, den wir auslesen möchten legen wir einen eigenen Virtueller HTTP Eingang Befehl an, und tragen den entspechenden Befehl ein.
Wenn du https://api.weather.com/v2/pws/observations/current?apiKey=e1f10a1e78da46f5b10a1e78da96f525&stationId=ISACHSEN347&format=json&units=m
im Browser öffnest siehst du alle Werte die ausgelesen werden können.
Hier einige Beispiele:
Information | Befehlserkennung | Ausgabe |
---|---|---|
Windrichtung | "winddir":\v | Grad als Kompassrichtung → Für Umrechnung in Himmelsrichtung siehe unten |
Windgeschwindigkeit | "windSpeed":\v | Aktuelle Windgeschwindigkeit in km/h |
Windböen | "windGust":\v | Windböen in km/h |
Luftfeuchtigkeit | "humidity":\v | Luftfeuchtigkeit in % |
Außentemperatur | "temp":\v | Temperatur in Celsius (°C) |
Gefühlte Temperatur | "windChill":\v | Temperatur in Celsius (°C) |
Regenrate | "precipRate":\v | Aktuelle Regenrate in mm |
Regenmenge | "precipTotal":\v | Tagesregenmenge in mm |
Sonneneinstrahlung | "solarRadiation":\v | Aktuelle Sonneneinstrahlung in Watt je m² (W/m²) |
Luftdruck | "pressure":\v | Luftdruck in mbar |
Windrichtung als Himmelsrichtung anzeigen:
der Befehl "winddir":\v gibt die Himmelsrichtung in Grad aus. 0°=Norden, 180°=Süden usw.
Die Windrichtung kann mithilfe des Status-Bausteins auch im Format N NO O SO S SW W NW angezeigt werden.
Beispiel für eine fertige Config:
Datenalter und Validierung
Im Json ist die Unix Epoche Zeit (Unix Timestamp) verfügbar, welche es erlaubt die Daten auf Aktualität zu validieren. Eine genaue Anleitung dazu findest Du hier: epochtime (Unix-Zeit) zum Prüfen auf Datenaktualität nutzen