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 %}