Automatisierung nur alle x Stunden/Tage ausführen - Benachrichtigung Regen - offene Fenster

Hier könnt Ihr gerne Eure Automatisierungen reinstellen, die Ihr gerne mit allen Teilen wollt. Einen kurze Beschreibung sowie ein Aussagekräftiger Titel sind erwünscht.


Antworten
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Automatisierung nur alle x Stunden/Tage ausführen - Benachrichtigung Regen - offene Fenster

Beitrag von Osorkon »

Hier mal ein Beispiel wie man die Ausführung einer Automatisierung bezüglich der Häufigkeit steuert.

In meinem Bsp. wird bei Erkennung vom Regen über einen Regen Sensor eine Benachrichtigung verschickt, dass es angefangen hat zu regnen.
Sollten zu diesem Zeitpunkt auch noch Fenster offen stehen, werden diese namentlich benannt.

Ich wollte aber nicht, dass ich die Benachrichtigungen mehrmals pro Stunde bekomme, wenn es nur kurz regnet, der Sensor abtrocknet und es erneut wieder anfängt zu regnen.
Das Ziel war es einen mindest Abstand zwischen 2 Benachrichtigen von 1h zu erreichen. Zusätzlich habe ich auch noch die Bedingung nur zwischen 7 und 22 Uhr.

Als Bedingung benutze ich ein template. (jetzt - letze Ausführung der Automatisierung > 1h)

Code: Alles auswählen

{{ now() - (this.attributes.last_triggered | default((now() - timedelta(hours = 1, minutes = 1 )), true)) > timedelta(hours=1) }}
Mit this.attributes.last_triggered verweist das template auf die Automatisierung, wessen Teil es ist. Also im Prinzip auf sich selbst.

Wird eine Automatisierung neu angelegt, gibt es noch keinen Wert für die letze Ausführung. in diesem Fall würde das Template einen Fehler aufwerfen.
Es muss also ein Standard Wert definiert werden. Diesen habe ich so gewählt, dass die Bedingung erfüllt wird. Der Standart Wert lautet 1h 1min

Code: Alles auswählen

default((now() - timedelta(hours = 1, minutes = 1 )), true)) 
Jetzt - 1h 1min

Für die Ausgabe der Fenster, welche noch geöffnet sind, verwende ich eine Gruppe.
D.h. Ich habe alle Fenster in einen Gruppe gepackt und Frage dann ab welche Gruppen Mitglieder den Status offen (on) haben.
Das Template habe ich auch hier schon mal vorgestellt (Auflistung/ Zählen von Gruppenmitgliedern mit einem bestimmten Status)

Die Nachricht selber beinhaltet wieder rum ein template mit einer if else Anweisung.
Wenn Gruppe = on, dann zusätzlich noch die die Namen der Fenster, die offen stehen ausgeben.
Wenn nicht, dann nur die Nachricht "Es regnet!"

Code: Alles auswählen

alias:  Regen Benachrichtigung
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.regenmelder_regen
    from: 'off'
    to: 'on'
condition:
  - condition: template
    value_template: >-
      {{ now() - (this.attributes.last_triggered | default((now() - timedelta(hours = 1, minutes = 1 )), true)) > timedelta(hours=1) }}
  - condition: time
    after: '07:00:00'
    before: '22:00:00'
action:
  - service: notify.telegram_all
    data:
      message: >-
        {% if states('group.fenster_alle') == 'on' %} Es regnet! 😔 {{"\n"-}}
        Und folgende Fenster sind noch geöffnet:         
        {{-expand('group.fenster_alle')|selectattr('state','eq','on')|map(attribute='name')|list|join(',')
        }}  {% else %} Es regnet! 😔 {% endif %}
mode: single

Gruß
Osorkon
Einer muss ja für Ordnung sorgen. :D
Antworten