Automatisierung nur aller X Minuten / Stunden / Tage ausführen

Hast du eine Automatisierung, die durch ein bestimmtes Event ausgelöst wird, aber nicht immer ausgeführt werden soll? Dann gibt es dabei verschiedene Lösungsansätze, wie du eine erneute Ausführung verhindern kannst

Bespiele, dafür wären z. B.

  • Eine Aktion soll durch einen Bewegungsmelder nicht immer erneut ausgelöst werden
  • du musst einen Wert berechnen (z. B. Kosten) und das soll zuverlässig aber maximal aller X Stunden ausgeführt werden

Lösung 1: Timeout zum Blockieren der erneuten Ausführung

Diese Lösung ist die einfachste und kann direkt im visuellen Editor durchgeführt werden. Am Ende der Automatisierung wird ein Timeout angelegt, dass die weitere Ausführung blockiert.

Diese Art von Blockierung würde ich aber nur empfehlen, wenn es sich um einen einstelligen Minutenbereich handelt, z. B. ein Bewegungsmelder, der nicht erneut ausgeführt werden soll. Mit diesem Timeout hält man permanent einen Prozess aktiv. Noch dazu hat es den Haken, dass dieser Prozess ggf. bei einem Neustart beendet wird und der Timeout Wert damit verloren geht (z. B. bei einer Bewässerung ein heikles Thema). Also wirf bitte auch einen Block auf Lösung 2.

Umsetzung

Prüfe, ob deine Automatisierung auf Einzeln bei der Ausführung steht. Mit dieser Option kann sich nicht erneut ausgeführt werden, wenn sie aktuell ausgeführt wird.

Ausführungsmodus Einzeln
Ausführungsmodus Einzeln

Jetzt fügst du ein Timeout als letzte Aktion dazu. In Deutsch heißt der Block inzwischen “Warten auf Ablauf einer Zeit”. Jetzt noch die entsprechenden Minuten eintragen und die mehrfache Ausführung deiner Automatisierung ist geblockt.

Timeout in einer Automation festlegen
Timeout in einer Automation festlegen

Lösung 2: Prüfen wann die Automatisierung das letzte Mal ausgeführt wurde

Diese Lösung ist die eigentlich immer die sauberste. Sie ist jedoch etwas aufwendiger zu erstellen, blockiert aber keine unnötigen Ressourcen und bietet mehr Sicherheit.

Hierbei wird über eine Bedingung geprüft, wann die Automation das letzte Mal gestartet wurde. Mit einem Datums-Vergleich kann dann geprüft werden, wie viel Sekunden die letzte Ausführung vergangen ist.

Um die Bedingung zu erstellen, wähle als Bedingungstyp „Template“. Das Template nun eingeben.

Unter Entwicklungswerkzeuge „Template“ kannst du deine Bedingung prüfen. Einfach dort ausprobieren, wenn dort die Bedingung entsprechend passt, mit den {{ }} in das Feld bei deiner Automatisierung einfügen.

Die Bedingung kann hier als Jinja Template angegeben werden. Beispiele weiter unten
Der praktische Template Editor in den Entwicklerwerkzeugen. Hier kannst du einfach testen ob deine Bedingungen stimmen.


Wichtig: Wenn du die Automatisierung testest und manuell auslöst, werden die Bedingungen ignoriert und nur die Aktionen ausgeführt. Das kann einem schon die ein oder andere Stunde kosten. Auch der Testen button funktioniert nicht! Die Bedingung trifft nie zu und bei Test bekommst du den Fehler: „template value should be a string for dictionary value @ data[‚value_template‘]. Got None“ angezeigt.

Beispiele:

Automatisierung nur einmal stündlich ausführen

{{ (as_timestamp(now())  - as_timestamp(state_attr('automation.deine_id', 'last_triggered'))) | int(0) >= 3600 }}

Automation nur alle 5 Minuten

{{ (as_timestamp(now())  - as_timestamp(state_attr('automation.deine_id', 'last_triggered'))) | int(0) >= 300 }}

Automatisierung maximal aller 24 Stunden

{{ (as_timestamp(now())  - as_timestamp(state_attr('automation.deine_id', 'last_triggered'))) | int(0) >= 86400 }}

Ausführung einmal die Woche

 {{ (as_timestamp(now()) - as_timestamp(state_attr('automation.deine_id', 'last_triggered'))) | int(0) >= 604800 }}

nur Ausführen wenn heute noch nicht ausgeführt

{{ now().strftime('%Y-%m-%d') != state_attr('automation.deine_id', 'last_triggered').strftime('%Y-%m-%d') }}

Statt an die letzte Ausführung der Automatisierung zu knüpfen, besteht auch die Möglichkeit, die letzte Zustandsänderung eines Sensors zu verwenden in der Bedingung.

NICHTS VERPASSEN
Neue Beiträge direkt per Mail!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.