Wir nutzen die Wetterdaten von Open-Meteo, die in Home Assistant als Core-Integration ohne API-Key und ohne Anmeldung laufen. Daraus bauen wir zwei Sensoren:
Den ersten Wert brauchst du für den Regen-Check, den zweiten, wenn deine Bewässerung mittags läuft und du den Vormittagsregen nicht doppelt zählen willst
# =====================================================================
# Open-Meteo Niederschlags-Sensoren für GießBot Rain-Check
# =====================================================================
# Was es macht:
# Liest aus der Open-Meteo Wetter-Entität die erwartete Regenmenge in
# mm und legt sie als zwei Sensoren ab:
# - sensor.niederschlag_heute_vorhersage -> komplette Tagessumme heute
# - sensor.niederschlag_rest_des_tages -> nur noch ab jetzt bis 24 Uhr
#
# Anpassen:
# weather.home -> deine Open-Meteo Entität
# (Entwicklerwerkzeuge -> Zustände -> nach weather. filtern)
# =====================================================================
template:
- trigger:
- trigger: time_pattern
minutes: "/30"
- trigger: homeassistant
event: start
action:
- action: weather.get_forecasts
target:
entity_id: weather.home
data:
type: daily
response_variable: daily_fc
- action: weather.get_forecasts
target:
entity_id: weather.home
data:
type: hourly
response_variable: hourly_fc
sensor:
# --- Komplette erwartete Tagessumme für heute ---
- name: "Niederschlag heute Vorhersage"
unique_id: niederschlag_heute_vorhersage
unit_of_measurement: "mm"
device_class: precipitation
state_class: measurement
state: >
{% set fc = (daily_fc.values() | list)[0].forecast %}
{{ fc[0].precipitation | float(0) | round(1) }}
availability: >
{{ daily_fc is defined
and (daily_fc.values() | list | count) > 0
and ((daily_fc.values() | list)[0].forecast | count) > 0 }}
# --- Nur noch erwarteter Regen ab jetzt bis Mitternacht ---
- name: "Niederschlag Rest des Tages"
unique_id: niederschlag_rest_des_tages
unit_of_measurement: "mm"
device_class: precipitation
state_class: measurement
state: >
{% set fc = (hourly_fc.values() | list)[0].forecast %}
{% set ns = namespace(total=0) %}
{% for f in fc %}
{% set dt = as_local(as_datetime(f.datetime)) %}
{% if dt.date() == now().date() and dt >= now() %}
{% set ns.total = ns.total + (f.precipitation | float(0)) %}
{% endif %}
{% endfor %}
{{ ns.total | round(1) }}
availability: >
{{ hourly_fc is defined
and (hourly_fc.values() | list | count) > 0 }}
# template bitte nur nutzen, wenn noch keine weiteren Template Sensoren in der YAML sind, # sonst darunter einfügen template: - trigger: - platform: time_pattern minutes: "/15" # Update alle 15 Minuten (oder nach Bedarf anpassen) - platform: homeassistant event: start # Update beim Start von Home Assistant action: - service: weather.get_forecasts # Der neue Dienstaufruf data: type: daily # Tägliche Vorhersage abrufen target: entity_id: weather.home # DEINE AccuWeather Wetter-Entität response_variable: accu_daily # Name der Variable für das Ergebnis sensor: # Dieser Sensor dient nur als "Container" für das forecast-Attribut - name: "AccuWeather Forecast Attribute" unique_id: accuweather_forecast_attribute state: "{{ states('weather.home') }}" # Zustand kann z.B. der Zustand der Original-Entität sein attributes: # Hier wird das 'forecast'-Attribut mit den Daten aus dem Dienstaufruf erstellt forecast: "{{ accu_daily['weather.home'].forecast }}" - sensor: # --- AccuWeather Regen Heute (Separate Sensoren) --- - name: "Regenwahrscheinlichkeit Heute (Accu)" unique_id: regen_prob_heute_accu # Eindeutige ID (ggf. anpassen falls schon vergeben) unit_of_measurement: '%' icon: mdi:water-percent state_class: measurement # Numerischer Sensor für Statistiken state: > {# Holt die Wahrscheinlichkeit für heute (Index 0) #} {% set fc = state_attr('sensor.accuweather_forecast_attribute', 'forecast') %} {% if fc and fc|length > 0 and 'precipitation_probability' in fc[0] and fc[0].precipitation_probability is not none %} {{ fc[0].precipitation_probability }} {% else %} unknown {# Fallback, falls Wert nicht lesbar #} {% endif %} availability: > {# Verfügbar, wenn Quelle existiert und mind. heutigen Forecast hat #} {{ state_attr('sensor.accuweather_forecast_attribute', 'forecast') is not none and state_attr('sensor.accuweather_forecast_attribute', 'forecast') | length > 0 }} - name: "Regenmenge Heute (Accu)" unique_id: regen_menge_heute_accu # Eindeutige ID unit_of_measurement: 'mm' icon: mdi:weather-pouring state_class: measurement state: > {# Holt die Menge für heute (Index 0) #} {% set fc = state_attr('sensor.accuweather_forecast_attribute', 'forecast') %} {% if fc and fc|length > 0 and 'precipitation' in fc[0] and fc[0].precipitation is not none %} {{ fc[0].precipitation }} {% else %} unknown {% endif %} availability: > {# Verfügbar, wenn Quelle existiert und mind. heutigen Forecast hat #} {{ state_attr('sensor.accuweather_forecast_attribute', 'forecast') is not none and state_attr('sensor.accuweather_forecast_attribute', 'forecast') | length > 0 }} # --- AccuWeather Regen Morgen --- - name: "Regenwahrscheinlichkeit Morgen (Accu)" unique_id: regen_prob_morgen_accu # Eindeutige ID unit_of_measurement: '%' icon: mdi:water-percent state_class: measurement state: > {# Holt die Wahrscheinlichkeit für morgen (Index 1) #} {% set fc = state_attr('sensor.accuweather_forecast_attribute', 'forecast') %} {# Wichtig: Prüfe auf Länge > 1 für morgigen Forecast #} {% if fc and fc|length > 1 and 'precipitation_probability' in fc[1] and fc[1].precipitation_probability is not none %} {{ fc[1].precipitation_probability }} {% else %} unknown {% endif %} availability: > {# Verfügbar, wenn Quelle existiert und mind. morgigen Forecast hat #} {{ state_attr('sensor.accuweather_forecast_attribute', 'forecast') is not none and state_attr('sensor.accuweather_forecast_attribute', 'forecast') | length > 1 }} - name: "Regenmenge Morgen (Accu)" unique_id: regen_menge_morgen_accu # Eindeutige ID unit_of_measurement: 'mm' icon: mdi:weather-pouring state_class: measurement state: > {# Holt die Menge für morgen (Index 1) #} {% set fc = state_attr('sensor.accuweather_forecast_attribute', 'forecast') %} {# Wichtig: Prüfe auf Länge > 1 für morgigen Forecast #} {% if fc and fc|length > 1 and 'precipitation' in fc[1] and fc[1].precipitation is not none %} {{ fc[1].precipitation }} {% else %} unknown {% endif %} availability: > {# Verfügbar, wenn Quelle existiert und mind. morgigen Forecast hat #} {{ state_attr('sensor.accuweather_forecast_attribute', 'forecast') is not none and state_attr('sensor.accuweather_forecast_attribute', 'forecast') | length > 1