Warum sollte ich keine lange Verzögerungen in Automatisierungen verwenden

Es gibt so einige Anwendungen, da wird man gerne dazu verleitet mit Verzögerungen zu arbeiten.
Diese haben leider einen großen Nachteil. Sollte während die Automatisierung noch dabei ist die Verzögerung abzuarbeiten Home Assistant aus welchem Grund auch immer neu gestartet werden, dann bricht die Automatisierung ab!

Ein Beispiel wäre z.B. Ein Gerät / Licht einzuschalten und nach 30 Minuten wieder ausschalten.

Wie man es nicht machen sollte, also unter Verwendung einer Verzögerung:

description: ""
mode: single
triggers:
  - trigger: state
    entity_id:
      - switch.xyz
    from: "off"
    to: "on"
conditions: []
actions:
  - delay:
      hours: 0
      minutes: 30
      seconds: 0
      milliseconds: 0
  - action: switch.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: switch.xyz

Mit Verwendung eines Timers (Helfer)
Der Auslöser Switch wird eingeschaltet startet einen 30 minütigen Timer.
Nach Ablauf des Timers wird der Switch ausgeschaltet. Damit der Timer einen Home Assistant Neustart überlebt, müsst Ihr die Option Wiederherstellen aktivieren.

Bedeutet dann, dass nach einem Neustart der Timer weiter läuft und auch das Ausschalten nach Ablauf auslösen kann. Sollte Home Assistant vor Ablauf des Timer ausfallen und erst nach Ablauf des Timers wieder online sein, wird die Automatisierung auch ausgeführt, auch wenn verspätet. Denn nach einem Neustart von Home Assistant der Zustand des Timers von unavailable zu idle wechselt.

description: ""
triggers:
  - trigger: state
    entity_id:
      - timer.xyz
    to: idle
    id: ausschalten
  - trigger: state
    entity_id:
      - switch.xyz
    from: "off"
    to: "on"
    id: einschalten
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - einschalten
        sequence:
          - action: timer.start
            metadata: {}
            data:
              duration: "00:30:00"
            target:
              entity_id: timer.xyz
      - conditions:
          - condition: trigger
            id:
              - ausschalten
        sequence:
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.xyz
mode: single

Warten auf Auslöser ist ebenfalls eine Verzögerung die Ihr vermeiden solltet, wenn es möglich ist.

Wie mann es nicht machen sollte:

description: ""
mode: restart
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.motion
    from: "off"
    to: "on"
conditions: []
actions:
  - action: light.turn_on
    target:
      entity_id: light.licht
    data: {}
  - wait_for_trigger:
      - trigger: state
        entity_id:
          - binary_sensor.motion
        from: "on"
        to: "off"
        for:
          hours: 0
          minutes: 5
          seconds: 0
  - action: light.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: light.licht

Statt dessen sollten die Auslöser Bewegung an und Bewegung aus für 5 min verwendet werden.
Zusätzlich kann man auch den Zustand Licht in an für 10 min als Auslöser verwenden. Um sicherzustellen, das wenn das Licht mal nicht über den BM eingeschaltet wurde, das Licht auch ohne Bewegung nach 10 Minuten ausgeschaltet wird.

description: ""
mode: restart
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.motion
    from: "off"
    to: "on"
    id: einschalten
  - trigger: state
    entity_id:
      - binary_sensor.motion
    from: "on"
    to: "off"
    id: ausschalten
    for:
      hours: 0
      minutes: 5
      seconds: 0
  - trigger: state
    entity_id:
      - light.licht
    to: "on"
    for:
      hours: 0
      minutes: 10
      seconds: 0
    id: ausschalten
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - einschalten
        sequence:
          - action: light.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: light.licht
      - conditions:
          - condition: trigger
            id:
              - ausschalten
          - condition: state
            entity_id: binary_sensor.motion
            for:
              hours: 0
              minutes: 5
              seconds: 0
            state: "off"
        sequence:
          - action: light.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: light.licht

Warten will ja bekanntlich keiner, also muten wir es der Automatisierung auch nicht zu. :rofl: :grin:

Time Waiting GIF

Gruß
Osorkon

1 „Gefällt mir“