Bei manchen Automatisierungen in Home Assistant kann es sinnvoll sein, dass eine Bedingung der Automatisierung ist diese nur dann auszuführen, wenn die Automatisierung nicht innerhalb einer bestimmten Zeit ausgeführt wurde. Ich selbst habe einige wenige Automatisierungen, welche in Abhängigkeit von sich nahezu willkürlich ändernden Werten ausgeführt werden. Der Wert eines Sensors unterschreitet einen Schwellwert für ein paar Minuten und soll dann die Automatisierung auslösen.
Eben dieser Wert kann aber auch wieder ansteigen und danach erneut unter den eben erwähnten Schwellwert sinken. In dem Fall einer solchen Wiederholung, möchte ich keine erneute Ausführung der Automatisierung – zumindest nicht, wenn die letzte Ausführung nicht mindestens 6 Stunden zurückliegt.
Hier gibt es das Ganze auch als Video:
Ein Beispiel gefällig?
Ich habe in unserer Sauna einen Temperatur-Sensor, welcher über ESPHome [offizielle Homepage ESPHome.io] die aktuelle Temperatur minütlich an Home Assistant meldet (hierzu werde ich bei Gelegenheit noch ein how-to schreiben). Immer dann, wenn die Temperatur unter 50 Grad gesunken ist, unterstelle ich, dass der Saunagang beendet ist. Nun möchte ich, dass immer am Folgetag eines Saunaganges der Boden gewischt wird.
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Da ich ein leicht verhaltensgestörter Mensch bin ( 😉 ), möchte ich hierfür in todoist eine Aufgabe am Folgetag haben. Letztlich muss ich mit der Automatisierung nur abwarten, wenn die Temperatur tief genug sinkt und dann in todoist eine neue Aufgabe für den Folgetag anlegen.
Was aber, wenn nicht nur ich an einem Tag in die Sauna gehe, sondern einige Stunden später auch noch meine Frau? In einem solchen Fall, würde ich auch nach dem zweiten Saunagang wieder unterhalb den Schwellwert von beispielsweise 50 Grad sinken und erneut mit der zuvor beschriebenen Automatisierung eine Aufgabe in todoist erstellen.
Diese zweite Aufgabe wäre aber absolut identisch mit der ersten und somit definitiv überflüssig!
Also habe ich die beschriebene Automatisierung um eine Kondition ergänzt, welche prüft, wann die Automatisierung zuletzt ausgeführt wurde. Und nur, wenn die Automatisierung (also Erstellen einer Aufgabe in todoist für den Folgetag „Keller wischen“) nicht innerhalb der letzten 6 Stunden bereits ausgeführt wurde, darf die Automatisierung „feuern“.
Lange Rede, kurzer Sinn:
alias: Wischen nach Sauna trigger: - platform: numeric_state entity_id: sensor.sauna_derivative below: -30 for: minutes: 1 condition: - condition: template value_template: > {{ as_timestamp(now()) - as_timestamp(states.automation.wischen_nach_sauna.attributes.last_triggered, default=0) > 21600 }} action: - data: {} action: rest_command.todoist_add_todo
Ein klein wenig Erklärung hierzu:
Mit der Zeile
{{ as_timestamp(now()) - as_timestamp(states.automation.wischen_nach_sauna.attributes.last_triggered, default=0) > 21600 }}
…prüfe ich, ob zwischen jetzt („as_timestamp(now())“) und der letzten Ausführung der Automatisierung („last_triggered“) mindestens 21600 Sekunden liegen, was exakt 6 Stunden entspricht (6x60x60 = 21600).
Nur, wenn diese Kondition wahr ist, wird die Automatisierung ausgeführt!
In dem folgenden Beitrag hatte ich vor einigen Tagen schon erklärt, wie man generell die Attribute einer Entität auslesen kann:
Produktempfehlungen
Hier ein Code-Beispiel für FabioGianna von YouTube:
Du musst das natürlich auf deinen Sensor (also statt binary_sensor.fenster_badezimmer_z2m_contact) anpassen und statt 1200 die für dich gewünschten Sekunden angeben.
Unter Entwicklerwerkzeuge -> Template kannst du den Code dann testen und bekommst bei korrekter Syntax entweder true oder false als Ergebnis rechts daneben angezeigt:
Genau was ich gesucht habe um meine LTE-Fritzbox beim neu Verbinden nicht in eine Dauerschleife zu setzen..
Vielen Dank aus Schlesien
Hi, Olli,
deine hier skizzierte Anwendung geht ein wenig in die Richtung meiner Fragestellung: ich möchte in einem definierten Zeitintervall auf Bedingungen prüfen und entsprechende Aktionen auslösen.
Aktuell nehme ich als Auslöser ‚trigger every 5 minutes every hour‘ – eigentlich bräuchte ich diese Prüfung aber nur in einem kleinen Zeitintervall des Tages (hier: 7-8Uhr).
Hastu du eine Idee oder Vorschlag, den Trigger auf dieses Zeitfenster zu begrenzen?
Danke für einen Hinweis.
Hi Wolfgang,
wenn ich dich richtig verstanden habe, würde ich
trigger:
- platform: time_pattern
minutes: "/5"
und dann als Condition
- condition: time
after: '6:59:59'
- condition: time
before: '8:00:00'
Meinst du sowas?
VG
Olli