HomeAssistant Kachelmann Wetter via API

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.

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?

1703187078351.png

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.
 
  • Gefällt mir
Reaktionen: madmax2010 und JumpingCat
An verschachtelte JSON responses kommt man doch mit Template Sensoren ran.

So sieht es bei mir für meinen "Lottozahlensensor" aus:
Code:
{{ state_attr('sensor.lotto', 'data').hauptlotterie.ziehungen[0].zahlenSortiert }}

bei dem die Response so aussieht:
JSON:
{
    "objType":"gewinnzahlen",
    "error":null,
    "head":{
        "version":"1.0",
        "spielart":"LOTTO",
        "spielformel":"6 aus 49",
        "datum":"2024-09-11",
        "fehlenDaten":false,
        "folgeZiehung":{
            "datum":"2024-09-14",
            "annahmeschluss":"2024-09-14T19:00:00+02:00"
        },
        "spielrunde":null
    },
    "data":{
        "hauptlotterie":{
            "ziehungen":[{
                    "bezeichnung":"",
                    "zahlenSortiert":[
                        "5",
                        "9",
                        "18",
                        "28",
                        "33",
                        "49"
                    ],
                    "zahlen":[
                        "49",
                        "33",
                        "5",
                        "9",
                        "18",
                        "28"
                    ],
                    "zusatzzahl":"",
                    "superzahl":"8",
                    "gewinnklasse":null
                }
            ]
        },
        "kandidatenspiel":{
            "spiele":[
            ]
        },
        "jokerzahl":"",
        "spiel77":"8536945",
        "super6":"893380",
        "plus5":"",
        "gsPraemienziehung":{
            "ziehungen":[
            ]
        },
        "hauptlotterieAsNr":3680,
        "hauptlotterieName":null

    },
    "history":{
        "jahre":[
        ],
        "wochen":[
        ],
        "tage":[
        ],
        "wettrunden":null
    }
}
 
Zuletzt bearbeitet:
Zurück
Oben