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

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 berücksichtigt.

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

{{ 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.

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!“

alias: Regen Benachrichtigung
description: ""
mode: single
triggers:
  - entity_id: binary_sensor.regenmelder_regen
    from: "off"
    to: "on"
    trigger: state
conditions:
  - 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"
actions:
  - data:
      message: >-
        {% if states('binary_sensor.alle_fenster') == 'on' %} Es regnet! 😔
        {{"\n"-}} Und folgende Fenster sind noch geöffnet:         
        {{-expand('binary_sensor.alle_fenster')
        | selectattr('state','eq','on')
        | map(attribute='name')
        | list|join(',') }}
        {% else %}
        Es regnet! 😔
        {% endif %}
    action: notify.telegram_all

Gruß
Osorkon