Wetterdaten vom Deutschen Wetter Dienst
Verfasst: 10. Jun 2023 07:59
Hi zusammen,
ich verzweifle mal wieder an einem Thema. Ich persönlich finde, dass die Wettervorhersagen und generell alle Wetterinformationen zumindest für Essen sehr genau sind und fand es immer schade, dass die Einbindung der Wetterdaten in openHAB nicht möglich ist.
Als ich letztens aber mal etwas Zeit hatte, habe ich mir das noch einmal etwas genauer angeschaut und habe doch einen Weg gefunden die Daten einzubinden. Hier (https://listed.to/@DieSieben/7851/api-d ... erdienstes) ist eigentlich sehr gut beschrieben wie man an Wetterdaten für seinen Ort kommt. Ich beschreibe das mal etwas ausführlicher falls noch andere Leute die Daten vom DWD einbinden wollen und diese nicht ebenfalls so lange überlegen müssen wie ich.
Meine Things sehen wie folgt aus:
Da die Daten noch etwas formatiert werden müssen, habe ich zu jedem der Items aus den Things noch ein schön formatiertes Item angelegt. Hier meine Items:
In den rules, die auf Änderung des nicht formatieren Items reagieren (*_text), berechne ich das schön formatierte item neu (zB DWDTemperatureMinDay1). Die Daten sind nämlich leider nicht sofort verwendbar.
Temperaturen werden ohne Einheit und Komma übertragen. zB für 10,5 °C wird 105 übertragen.
Die Sonnenstunden werden als Stundenanzahl in Sekunden übertragen zB für 15,2 Std. wird 9120 übertragen.
Die Zeit für den Sonnenaufgang wird (wenn ich das richtig recherchiert habe) als UNIX Timestamp übertragen. zB für 05:15 wird 1686366948000 übertragen.
Die Rule zu der heutigen Mindesttemperatur sieht zB so aus:
und die rule für die heutigen Sonnenstunden so:
Wie Ihr oben bestimmt bereits vermutet habt, habe ich mit den Uhrzeiten ein Problem. Ich habe etwas rumexperiment und herausgefunden, dass wenn ich die aktuellen Millis vom heutigen Tag um 00:00 Uhr von den Millis für den Sonnenaufgang abziehe und die verbleibenden Millis in Stunden und Minuten umreche, die korrekte Uhrzeit herausbekomme. ...eventuell habe Ihr noch eine bessere Lösung. Ich scheidere aber kläglich bei der Umsetzung. Ich kann einfach nicht mit den Millis umgehen. Gibt es eine Möglichkeit die Millis von Java in eine Zeit umrechnen zu lassen.
Danke für Eure Hilfe.
Christian
ich verzweifle mal wieder an einem Thema. Ich persönlich finde, dass die Wettervorhersagen und generell alle Wetterinformationen zumindest für Essen sehr genau sind und fand es immer schade, dass die Einbindung der Wetterdaten in openHAB nicht möglich ist.
Als ich letztens aber mal etwas Zeit hatte, habe ich mir das noch einmal etwas genauer angeschaut und habe doch einen Weg gefunden die Daten einzubinden. Hier (https://listed.to/@DieSieben/7851/api-d ... erdienstes) ist eigentlich sehr gut beschrieben wie man an Wetterdaten für seinen Ort kommt. Ich beschreibe das mal etwas ausführlicher falls noch andere Leute die Daten vom DWD einbinden wollen und diese nicht ebenfalls so lange überlegen müssen wie ich.
Meine Things sehen wie folgt aus:
Code: Alles auswählen
Thing http:url:dwd "DWD" [
baseURL="https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/forecast_mosmix_H423.json",
refresh=15] {
Channels:
//heute
Type string : TemperatureMaxDay0 "TemperatureMaxDay0" [ stateTransformation="JSONPATH:$.days[0].temperatureMax" ]
Type string : TemperatureMinDay0 "TemperatureMinDay0" [ stateTransformation="JSONPATH:$.days[0].temperatureMin" ]
Type string : SunriseDay0 "SunriseDay0" [ stateTransformation="JSONPATH:$.days[0].sunrise" ]
Type string : SunsetDay0 "SunsetDay0" [ stateTransformation="JSONPATH:$.days[0].sunset" ]
Type string : SunHoursDay0 "SunHoursDay0" [ stateTransformation="JSONPATH:$.days[0].sunshine" ]
//morgen
Type string : TemperatureMaxDay1 "TemperatureMaxDay1" [ stateTransformation="JSONPATH:$.days[1].temperatureMax" ]
Type string : TemperatureMinDay1 "TemperatureMinDay1" [ stateTransformation="JSONPATH:$.days[1].temperatureMin" ]
Type string : SunriseDay1 "SunriseDay1" [ stateTransformation="JSONPATH:$.days[1].sunrise" ]
Type string : SunsetDay1 "SunsetDay1" [ stateTransformation="JSONPATH:$.days[1].sunset" ]
Type string : SunHoursDay1 "SunHoursDay1" [ stateTransformation="JSONPATH:$.days[1].sunshine" ]
}
Code: Alles auswählen
Group:String gDWD "Wetterdaten DWD"
//heute
String DWDTemperatureMinDay0_text "Temperature min day0 [%s]" (gDWD) {channel="http:url:dwd:TemperatureMinDay0"}
Number:Temperature DWDTemperatureMinDay0 "Temp min (heute) [%.1f °C]" <temperature> (gDWD)
String DWDTemperatureMaxDay0_text "Temperature max day0 [%s]" (gDWD) {channel="http:url:dwd:TemperatureMaxDay0"}
Number:Temperature DWDTemperatureMaxDay0 "Temp max (heute) [%.1f °C]" <temperature> (gDWD)
String DWDSunriseDay0_text "Sunrise day0 [%s]" (gDWD) {channel="http:url:dwd:SunriseDay0"}
String DWDSunriseDay0 "Sunrise day0 [%s]" (gDWD)
String DWDSunsetDay0_text "Sunset day0 [%s]" (gDWD) {channel="http:url:dwd:SunsetDay0"}
String DWDSunHoursDay0_text "Sun hours day0 [%s]" (gDWD) {channel="http:url:dwd:SunHoursDay0"}
Number DWDSunHoursDay0 "Sonnenstd. (heute) [%.1f h]" <time> (gDWD)
//morgen
String DWDTemperatureMinDay1_text "Temperature min day1 [%s]" (gDWD) {channel="http:url:dwd:TemperatureMinDay1"}
Number:Temperature DWDTemperatureMinDay1 "Temp min (morgen) [%.1f °C]" <temperature> (gDWD)
String DWDTemperatureMaxDay1_text "Temperature max day1 [%s]" (gDWD) {channel="http:url:dwd:TemperatureMaxDay1"}
Number:Temperature DWDTemperatureMaxDay1 "Temp max (morgen) [%.1f °C]" <temperature> (gDWD)
String DWDSunHoursDay1_text "Sun hours day1 [%s]" (gDWD) {channel="http:url:dwd:SunHoursDay1"}
Number DWDSunHoursDay1 "Sonnenstd. (morgen) [%.1f h]" <time> (gDWD)
Temperaturen werden ohne Einheit und Komma übertragen. zB für 10,5 °C wird 105 übertragen.
Die Sonnenstunden werden als Stundenanzahl in Sekunden übertragen zB für 15,2 Std. wird 9120 übertragen.
Die Zeit für den Sonnenaufgang wird (wenn ich das richtig recherchiert habe) als UNIX Timestamp übertragen. zB für 05:15 wird 1686366948000 übertragen.
Die Rule zu der heutigen Mindesttemperatur sieht zB so aus:
Code: Alles auswählen
rule "TemperatureMinDay0_text updated"
when
Item DWDTemperatureMinDay0_text received update
then
var Number oldValue = new DecimalType(DWDTemperatureMinDay0_text.state.toString)
DWDTemperatureMinDay0.postUpdate(oldValue/10)
end
Code: Alles auswählen
rule "DWDSunHoursDay0_text updated"
when
Item DWDSunHoursDay0_text received update
then
var Number oldValue = new DecimalType(DWDSunHoursDay0_text.state.toString)
DWDSunHoursDay0.postUpdate(oldValue/600)
end
Danke für Eure Hilfe.
Christian