Wettervorhersage nutzen

Bei Überlegungen die Wärmepumpe besser zu steuern hatte ich die Herausforderung, wie kann ich die Wettervorhersage nutzen.
Ich wollte die Höchsttemperatur des Tages und vor allem die Uhrzeit der Tageshöchsttemperatur wissen, um dann das Warm-Wasser Programm laufen zu lassen.

Diese Vorhersage (ForeCast) Daten stehen nicht direkt zur Verfügung, sie müssen erst von der WetterEntiät abgerufen werden. Dazu gibt es eine action „service: weather.get_forecasts“. Und es gibt verschiedene Vorhersagen, täglich, stündlich und zweitägig. In den EntwicklerTools kann man sich das Resultat ansehen.

Um die Tageshöchsttemperatur zu ermitteln, wird beim DWD-Wetter Dienst die tägliche Vorhersage, um dann die Uhrzeit zum Höchstwert zu bekommen, die stündliche Vorhersage.

Also nehmen wir einen Template Sensor, speichern die jeweilige Vorhersage in einer Variable und extrahieren dann aus der Variable die jeweilige Information.
Für die Uhrzeit ist es etwas komplexer, hier müssen wir in der Liste die Tageshöchsttemperatur suchen, un dann den dazugehörigen Uhrzeit-Wert übernehmen.

Hier der Code:

template:
#### weather.aachen min max daily values
  - trigger:
      - platform: time
        at: "02:00:00"
    action:
      - variables:
          w: weather.aachen
      - service: weather.get_forecasts
        data:
          type: daily
        target:
          entity_id: '{{ w }}'
        response_variable: d
    sensor:
      - name: 'Temperature Max Today'
        unique_id: 'max_temp_today'
        unit_of_measurement: '°C'
        device_class: temperature
        state: "{{ d[w].forecast[0].temperature }}"
      - name: "Temperature Min Today"
        unique_id: min_temp_today
        state: " {{ d[w].forecast[0].templow }}"
        unit_of_measurement: "°C" 
        device_class: temperature
  - trigger:
      - platform: state
        entity_id: weather.aachen
    action:
      - variables:
          w: weather.aachen
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: '{{ w }}'
        response_variable: h 
    sensor:          
      - name: "Time of Highest Temperature"
        unique_id: max_temp_time_today
        state: >
          {% if h[w] and h[w].forecast %}
            {% set max_temp = h[w].forecast | map(attribute='temperature') | max %}
            {% for entry in h[w].forecast %}
              {% if entry.temperature == max_temp %}
                {{ as_timestamp(entry.datetime) | timestamp_custom('%H:%M') }}
              {% endif %}
            {% endfor %}
          {% else %}
            "Keine Daten"
          {% endif %}
      - name: "Time of Lowst Temperature"
        unique_id: min_temp_time_today
        state: >
          {% if h[w] and h[w].forecast %}
            {% set max_temp = h[w].forecast | map(attribute='temperature') | min %}
            {% for entry in h[w].forecast %}
              {% if entry.temperature == max_temp %}
                {{ as_timestamp(entry.datetime) | timestamp_custom('%H:%M') }}
              {% endif %}
            {% endfor %}
          {% else %}
            "Keine Daten"
          {% endif %}

Schreibe einen Kommentar