Frostwarnungen verschicken mit Home Assistant
Damit die Wasserleitungen im Garten nicht einfrieren, möchte ich von Home Assistant daran erinnert werden, wenn Frost ansteht. Dann habe ich hoffentlich noch genügend Zeit das Wasser aus den Leitungen zu lassen und kann dann hoffentlich auch einen Frostschaden vermeiden.
Dazu muss zunächst ein Wetterdienst eingerichtet werden. Ich habe mich für die Integrationvom Meteorologisk Institutt (met.no) entschieden. Die kann einfach unter Configuration > Integrations
eingerichtet werden.
Danach kann in der configuration.yaml
ein Template-Sensor erstellt werden, der als Value die Tiefsttemperatur der aktuellen Vorhersage speichert. Als Attribute wird zusätzlich abgespeichert, an welchem Tag die Tiefsttemperatur auftreten soll und auf welchen Zeitraum sich die Wettervorhersage bezieht:
sensor:
- platform: template
min_temp_forecast:
friendly_name: "Vorhergesagte Minimaltemperatur"
unique_id: "a148a623-7999-4d76-9af2"
unit_of_measurement: '°C'
icon_template: "mdi:thermometer-chevron-down"
value_template: >-
{% set ns = namespace(templow=999) %}
{%- for fc in states.weather.home.attributes.forecast -%}
{%- if fc.templow < ns.templow -%}
{%- set ns.templow = fc.templow -%}
{%- endif -%}
{%- endfor -%}
{{ns.templow}}
attribute_templates:
datetime: >-
{% set ns = namespace(templow=999, datetime=0) %}
{%- for fc in states.weather.home.attributes.forecast -%}
{%- if fc.templow < ns.templow -%}
{%- set ns.datetime = fc.datetime -%}
{%- endif -%}
{%- endfor -%}
{{ns.datetime}}
forecastdays: >-
{% set ns = namespace(days=0) %}
{%- for fc in states.weather.home.attributes.forecast -%}
{%- set ns.days = ns.days + 1 -%}
{%- endfor -%}
{{ns.days}}
Mit einem zweiten Sensor wird der eigentliche Sensor zur Frostwarnung implementiert:
sensor:
- platform: template
sensors:
frost_warning:
friendly_name: "Frost Warnung"
unique_id: "39a5e512-b92f-449c-b681"
icon_template: "mdi:snowflake-alert"
value_template: >-
{% if states('sensor.min_temp_forecast') | float < 0 %}
on
{% else %}
off
{% endif %}
attribute_templates:
frostdays: >-
{% set ns = namespace(frostdays=0) %}
{%- for fc in states.weather.home.attributes.forecast -%}
{%- if fc.templow < 0 -%}
{%- set ns.frostdays = ns.frostdays + 1 -%}
{%- endif -%}
{%- endfor -%}
{{ns.frostdays}}
first_frost_date: >-
{% set ns = namespace(date=0) %}
{%- for fc in states.weather.home.attributes.forecast -%}
{%- if fc.templow < 0 and ns.date == 0 -%}
{%- set ns.date = fc.datetime -%}
{%- endif -%}
{%- endfor -%}
{{ns.date}}
date_low: "{{state_attr('sensor.min_temp_forecast', 'datetime')}}"
temp_low: "{{states('sensor.min_temp_forecast')}}"
forecastdays: "{{state_attr('sensor.min_temp_forecast', 'forecastdays')}}"
Mit der folgenden Automatisierung kann der Frost-Sensor dann genutzt werden, um eine Warnung per Pushover rauszuschicken, wenn in der Wettervorhersage an einem der kommenden Tage Frost angesagt wird. Voraussetzung dafür ist natürlich, dass Pushover entsprechend eingerichtet wurde.
alias: 'Frost Warning: Send Notification'
description: >-
Wenn in der Wettervorhersage Frost angesagt ist, dann eine Notification
rausschicken, damit das Wasser abgestellt wird.
trigger:
- platform: state
entity_id: sensor.frost_warning
from: 'off'
to: 'on'
condition: []
action:
- service: notify.pushover
data:
title: Winter is coming!
message: >-
Ab {{ as_timestamp(state_attr("sensor.frost_warning",
"first_frost_date")) | timestamp_custom("%a, %d.%m.%y", True) }} soll es
frieren mit Temperaturen bis zu {{ state_attr('sensor.frost_warning',
'temp_low') }}°C an {{state_attr('sensor.frost_warning', 'frostdays') }}
Tagen in den kommenden {{state_attr('sensor.frost_warning',
'forecastdays') }} Tagen.
data:
priority: 1
mode: single
Kommentare