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.
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.
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.
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.
Hi,
genau der letzte Abschnitt wäre für mich interessant.
Ich habe einen Trockner. Wenn der fertig ist dann soll mir über Telegramm eine Nachricht geschickt werden. das funktioniert soweit.
Leider kennt mein Sensor nur 2 Zustände. läuft oder läuft nicht. wenn ich jetzt auf läuft nicht mehr Triggere bekomme ich alle paar Minuten die Meldung.
Ich würde das also gerne nur ausführen wenn der Zustand von läuft auf läuft nicht mehr gewechselt hat.
Wie kann ich das machen?
Danke
wasty