derchris
Commander
- Registriert
- Jan. 2004
- Beiträge
- 2.728
Weihnachtszeit, Bastelzeit ... in diesem Falle: wie mache ich mein SmartHome mit Wetterdaten steuerbar.
Seit Mai 2023 gibt es von meinem bevorzugten Wetterdienst Kachelmannwetter eine API, die man mit einem Abo nutzen kann.
Nun habe ich eine HomeAssistant Instanz und würde gerne die Wetterdaten von Kachelmannwetter integrieren, via API bekomme ich die Daten für "aktuelles Wetter" soweit auch runter geladen.
Soweit so gut, die Daten sind da. Aber ist das die effektivste Möglichkeit die zu Laden?
Jetzt kann ich die Daten auf dem Dashboard irgendwie auch anzeigen lassen, was ja nun nicht so kompliziert ist oder die in Routinen integrieren. So far, so good.
Jetzt gibt es noch eine Forecast API, welche mir für die nächsten 3 Tage, jeweils die tägliche Vorhersage und dann unterteilt in night, morning, afternoon, evening die Daten zurück gibt.
Wie bekomme ich denn jetzt diese verschachtelte Response in sensoren?
Und wie könnte ich die Daten am sinnvollsten verarbeiten? Will keine Wetterseite "replizieren" aber halt Daten wie Temperaturen, Regen, Sonne (PV), könnten für Planung von Aktionen von Interesse sein. Veluxrollos bei Schnee unten lassen z.b.
Und ja, es soll unbedingt Kachelmannwetter Daten sein und kein anderes fertiges Addon.
Seit Mai 2023 gibt es von meinem bevorzugten Wetterdienst Kachelmannwetter eine API, die man mit einem Abo nutzen kann.
Nun habe ich eine HomeAssistant Instanz und würde gerne die Wetterdaten von Kachelmannwetter integrieren, via API bekomme ich die Daten für "aktuelles Wetter" soweit auch runter geladen.
JSON:
# Kachelmannwetter jetzt
# https://api.kachelmannwetter.com/v02/_doc.html#/operations/get_current_weather
rest:
- authentication: basic
scan_interval: 900
resource_template: https://api.kachelmannwetter.com/v02/current/{{ state_attr('zone.home', 'latitude') | round(3) }}/{{ state_attr('zone.home', 'longitude') | round(3) }}?units=metric
headers:
Accept: application/json
X-API-Key: !secret Kachelmannwetter
sensor:
- name: kmw_date
value_template: '{{ value_json["data"].isDay["dateTime"] }}'
- name: kmw_temp
value_template: '{{ value_json["data"].temp["value"] }}'
unit_of_measurement: "°C"
- name: kmw_dew
value_template: '{{ value_json["data"].dewpoint["value"] }}'
unit_of_measurement: "°C"
- name: kmw_hum
value_template: '{{ value_json["data"].humidityRelative["value"] }}'
unit_of_measurement: "%"
- name: kmw_prec
value_template: '{{ value_json["data"].prec1h["value"] }}'
unit_of_measurement: "mm"
- name: kmw_press
value_template: '{{ value_json["data"].pressureMsl["value"] }}'
unit_of_measurement: "hPa"
- name: kmw_snowamt
value_template: '{{ value_json["data"].snowAmount["value"] }}'
unit_of_measurement: "mm"
- name: kmw_snowheight
value_template: '{{ value_json["data"].snowHeight["value"] }}'
unit_of_measurement: "m"
- name: kmw_windspeed
value_template: '{{ value_json["data"].windSpeed["value"] }}'
unit_of_measurement: "m/s"
- name: kmw_winddirection
value_template: '{{ value_json["data"].windDirection["value"] }}'
- name: kmw_windgust
value_template: '{{ value_json["data"].windGust["value"] }}'
unit_of_measurement: "m/s"
- name: kmw_wmo
value_template: '{{ value_json["data"].wmoCode["value"] }}'
- name: kmw_data_xsymbol
value_template: '{{ value_json["data"].weatherSymbol["value"] }}'
- name: kmw_cloudcoverage
value_template: '{{ value_json["data"].cloudCoverage["value"] }}'
unit_of_measurement: "%"
Soweit so gut, die Daten sind da. Aber ist das die effektivste Möglichkeit die zu Laden?
Jetzt kann ich die Daten auf dem Dashboard irgendwie auch anzeigen lassen, was ja nun nicht so kompliziert ist oder die in Routinen integrieren. So far, so good.
Jetzt gibt es noch eine Forecast API, welche mir für die nächsten 3 Tage, jeweils die tägliche Vorhersage und dann unterteilt in night, morning, afternoon, evening die Daten zurück gibt.
Wie bekomme ich denn jetzt diese verschachtelte Response in sensoren?
JSON:
{
"lat": 51.000,
"lon": 6.000,
"alt": 30,
"resolution": "SUPER_HIGH",
"timeZone": "Europe/Berlin",
"systemOfUnits": "metric",
"run": "2023-12-21T06:00:00+00:00",
"data": [
{
"dateTime": "2023-12-22",
"dayName": "tomorrow",
"tempMax": 8.6,
"tempMin": 5.5,
"precCurrent": 9.3,
"windGust": 20.4,
"windSpeed": 6.5,
"windDirection": 288,
"sunHours": 0,
"cloudCoverage": 92,
"weatherSymbol": "rain",
"risks": [],
"timeOfDay": {
"night": {
"timeOfDay": "night",
"isDay": false,
"tempMax": 5.9,
"tempMin": 5.6,
"precCurrent": 2.6,
"windGust": 20.4,
"windSpeed": 7.9,
"windDirection": 293,
"weatherSymbol": "cloudy",
"risks": [
{
"type": "weather",
"weatherSymbol": "rain"
}
]
},
"morning": {
"timeOfDay": "morning",
"isDay": true,
"tempMax": 6.8,
"tempMin": 5.6,
"precCurrent": 2.1,
"windGust": 18,
"windSpeed": 5.5,
"windDirection": 284,
"weatherSymbol": "rain",
"risks": []
},
"afternoon": {
"timeOfDay": "afternoon",
"isDay": true,
"tempMax": 8.6,
"tempMin": 5.5,
"precCurrent": 3.7,
"windGust": 16.3,
"windSpeed": 5.6,
"windDirection": 281,
"weatherSymbol": "rain",
"risks": []
},
"evening": {
"timeOfDay": "evening",
"isDay": false,
"tempMax": 8.5,
"tempMin": 7.6,
"precCurrent": 0.9,
"windGust": 17.6,
"windSpeed": 7.1,
"windDirection": 290,
"weatherSymbol": "rain",
"risks": []
}
}
},
{
"dateTime": "2023-12-23",
"dayName": "saturday",
"tempMax": 8.3,
"tempMin": 7.3,
"precCurrent": 4.4,
"windGust": 18.8,
"windSpeed": 8,
"windDirection": 257,
"sunHours": 0,
"cloudCoverage": 100,
"weatherSymbol": "overcast",
"risks": [
{
"type": "weather",
"weatherSymbol": "rain"
}
],
"timeOfDay": {
"night": {
"timeOfDay": "night",
"isDay": false,
"tempMax": 8.3,
"tempMin": 7.3,
"precCurrent": 3.4,
"windGust": 17.2,
"windSpeed": 6.6,
"windDirection": 268,
"weatherSymbol": "rain",
"risks": []
},
"morning": {
"timeOfDay": "morning",
"isDay": true,
"tempMax": 8,
"tempMin": 7.4,
"precCurrent": 0.4,
"windGust": 18.8,
"windSpeed": 9.2,
"windDirection": 256,
"weatherSymbol": "overcast",
"risks": [
{
"type": "weather",
"weatherSymbol": "rain"
}
]
},
"afternoon": {
"timeOfDay": "afternoon",
"isDay": true,
"tempMax": 8.3,
"tempMin": 8.1,
"precCurrent": 0.4,
"windGust": 17.8,
"windSpeed": 8.5,
"windDirection": 256,
"weatherSymbol": "overcast",
"risks": [
{
"type": "weather",
"weatherSymbol": "rain"
}
]
},
"evening": {
"timeOfDay": "evening",
"isDay": false,
"tempMax": 8.1,
"tempMin": 7.8,
"precCurrent": 0.2,
"windGust": 14.8,
"windSpeed": 7.7,
"windDirection": 250,
"weatherSymbol": "overcast",
"risks": [
{
"type": "weather",
"weatherSymbol": "rain"
}
]
}
}
},
{
"dateTime": "2023-12-24",
"dayName": "sunday",
"tempMax": 11.7,
"tempMin": 9,
"precCurrent": 14.2,
"windGust": 16.3,
"windSpeed": 7.9,
"windDirection": 240,
"sunHours": 0,
"cloudCoverage": 100,
"weatherSymbol": "rain",
"risks": [],
"timeOfDay": {
"night": {
"isDay": false,
"tempMax": 9.7,
"tempMin": 9,
"precCurrent": 1.5,
"windGust": 14.5,
"windSpeed": 7.6,
"windDirection": 244,
"weatherSymbol": "rain",
"risks": []
},
"morning": {
"isDay": true,
"tempMax": 10.3,
"tempMin": 9.3,
"precCurrent": 3,
"windGust": 14.8,
"windSpeed": 7.9,
"windDirection": 238,
"weatherSymbol": "rain",
"risks": []
},
"afternoon": {
"isDay": true,
"tempMax": 11.7,
"tempMin": 10.5,
"precCurrent": 2.7,
"windGust": 15.2,
"windSpeed": 7.7,
"windDirection": 239,
"weatherSymbol": "rain",
"risks": []
},
"evening": {
"isDay": false,
"tempMax": 11.6,
"tempMin": 11,
"precCurrent": 7,
"windGust": 16.3,
"windSpeed": 8.5,
"windDirection": 240,
"weatherSymbol": "rain",
"risks": []
}
}
}
]
}
Und wie könnte ich die Daten am sinnvollsten verarbeiten? Will keine Wetterseite "replizieren" aber halt Daten wie Temperaturen, Regen, Sonne (PV), könnten für Planung von Aktionen von Interesse sein. Veluxrollos bei Schnee unten lassen z.b.
Und ja, es soll unbedingt Kachelmannwetter Daten sein und kein anderes fertiges Addon.