Automatisierung nur ausführen, wenn sie innerhalb einer bestimmten Zeit nicht bereits ausgeführt wurde

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:

Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Video Erklärung des Codes

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
( 490 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

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:

4 Gedanken zu „Automatisierung nur ausführen, wenn sie innerhalb einer bestimmten Zeit nicht bereits ausgeführt wurde“

  1. Hier ein Code-Beispiel für FabioGianna von YouTube:

    {{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.fenster_badezimmer_z2m_contact.last_changed)) < 1200 }}

    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:

    image
  2. 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

Kommentare sind geschlossen.