🤖Automationen

Eine Automation hat drei Teile: Trigger (wann?), Conditions (nur wenn …) und Actions (was tun?). Dazu kommen Modi, Scripts, Szenen, Blueprints und Helfer.

🧩Aufbau: UI und YAML

Die Beispiele sind die Automationen des Musterhauses – dieselben, die im Simulator laufen.
mode: restart

Bewegung im Flur → Licht an, nach 2 Minuten wieder aus. Jede neue Bewegung startet die Wartezeit neu.

Wenn (Auslöser)
⋮⋮binary_sensor.flur_bewegung nach on
Und wenn (Bedingungen, optional)
⋮⋮sun.sun = below_horizon
Dann (Aktionen)
⋮⋮light.turn_on → light.flur
⋮⋮delay 120 s
⋮⋮light.turn_off → light.flur

Der UI-Editor speichert in automations.yaml – beides ist dieselbe Automation. Die id braucht der Editor, um sie wiederzufinden. Seit 2024.10 heißen die Schlüssel triggers:/trigger:, conditions: und actions:/action: (alte Schreibweise platform:/service: funktioniert weiter).

📚Bausteine im Überblick

Triggerfeuert, wenn …Beispiel
stateZustand (oder Attribut) einer Entität ändert sichto: "on", from:, for:
numeric_stateZahl über-/unterschreitet eine Schwelle – nur beim Überschreitenabove: 25
timefeste Uhrzeit oder Zeit aus einem input_datetimeat: "22:00:00"
time_patternregelmäßig, z. B. jede 5. Minuteminutes: "/5"
sunSonnenauf-/-untergang mit Versatzevent: sunset, offset: "-00:30:00"
eventbeliebiges Event auf dem Busevent_type: timer.finished
mqttNachricht auf einem MQTT-Topictopic: haus/klingel
templateTemplate wird wahrvalue_template: "{{ … }}"
homeassistantStart/Stopp von Home Assistantevent: start
zone · device · webhook · tag · calendar …und viele weitere
Conditionprüft …
stateEntität hat (gerade) einen Zustand
numeric_stateWert liegt über/unter einer Grenze
timeUhrzeit-Fenster und Wochentage (über Mitternacht möglich)
sunvor/nach Sonnenauf-/-untergang
templateTemplate ergibt wahr
triggerwelcher Trigger (id) hat ausgelöst
and · or · notBedingungen verknüpfen
zone · devicePerson in Zone, gerätespezifisch
Actiontut …
action: domain.serviceAction aufrufen (light.turn_on, notify.…, scene.turn_on)
delaywarten (Sekunden oder HH:MM:SS)
wait_template / wait_for_triggerwarten, bis etwas passiert (mit timeout)
conditionInline-Bedingung: ist sie falsch, endet die Ausführung
choose · if/then/elseVerzweigungen
repeatSchleifen: count, while, until, for_each
parallel · sequenceAktionen gleichzeitig oder als Gruppe
event · variables · stopEvent feuern, Variablen setzen, beenden
⚠️ Trigger ≠ Condition
Trigger sind Ereignisse („wird on“), Conditions prüfen einen Zustand („ist on“) zum Zeitpunkt des Auslösens. Mehrere Trigger sind ODER, mehrere Conditions sind UND.
💡 State-Trigger ohne to/from
Ohne to/from feuert der State-Trigger auch bei reinen Attributänderungen. Mit to: null nur bei echten Zustandswechseln.
✅ Traces
Jede Ausführung hinterlässt einen Trace (Pfade wie trigger/0, condition/0, action/1) – der beste Debugger. Standardmäßig werden die letzten 5 gespeichert (trace: stored_traces).

🔀Modi: single · restart · queued · parallel

Was passiert, wenn eine Automation erneut ausgelöst wird, während sie noch läuft (z. B. während eines delay)? Die vier Zeilen zeigen dieselben Auslösungen mit jedem Modus – berechnet von der eigenen Engine.

Auf die obere Zeitachse klicken, um Auslösungen (▼) hinzuzufügen oder zu entfernen. Jede Ausführung: Event → delay: 20 → fertig.

Auslöser0s5s10s15s20s25s30s35s40s45s50s55s60s▼▼▼single1 Läufe2 verworfen#1„Modus-Demo“: Already running – neue Ausführung verworfen (mode: single).⚠„Modus-Demo“: Already running – neue Ausführung verworfen (mode: single).⚠restart3 Läufe0 verworfen✕#1✕#2#3queued3 Läufe0 verworfen#1#2#3parallel3 Läufe0 verworfen#1#2#3
mode: single – (Standard) Läuft schon eine Ausführung, wird keine neue gestartet – Warnung im Log.
mode: restart – Laufende Ausführung stoppen, neu beginnen (nur wenn die Conditions erfüllt sind).
mode: queued – Nacheinander, garantiert in Reihenfolge. max zählt laufende + wartende.
mode: parallel – Unabhängige Ausführungen gleichzeitig. max begrenzt die Anzahl.

Legende: farbiger Balken = Ausführung, blass mit ✕ = durch restart gestoppt, gelbe Linie = wartet in der Warteschlange, ⚠ = verworfen (Log: „Already running“ bzw. „Maximum number of runs exceeded“; Stufe über max_exceeded, Standard warning).

- alias: Flurlicht bei Bewegung
  mode: restart              # jede neue Bewegung startet die 2 Minuten neu
  triggers:
    - trigger: state
      entity_id: binary_sensor.flur_bewegung
      to: "on"
  actions:
    - action: light.turn_on
      target: { entity_id: light.flur }
    - delay: 120
    - action: light.turn_off
      target: { entity_id: light.flur }

- alias: Klingel-Durchsagen
  mode: queued
  max: 25                    # Standard wäre 10
  max_exceeded: silent       # Standard: warning

📜Scripts, Szenen, Blueprints, Helfer

📜 Scripts

Eine Folge von Actions ohne Trigger – aufrufbar wie eine Action (script.gute_nacht), mit Feldern (Parametern) und denselben Modi wie Automationen.

gute_nacht:
  alias: Gute Nacht
  mode: single
  fields:
    helligkeit:
      description: Restlicht im Flur in %
      example: 10
  sequence:
    - action: light.turn_off
      target: { area_id: wohnzimmer }
    - action: light.turn_on
      target: { entity_id: light.flur }
      data:
        brightness_pct: "{{ helligkeit | default(10) }}"

🎬 Szenen

Eine Szene speichert Zielzustände: „Wohnzimmer gedimmt, Rollladen zu“. scene.turn_on stellt sie her. Der Zustand der Szenen-Entität ist der Zeitstempel der letzten Aktivierung.

- id: fernsehabend
  name: Fernsehabend
  entities:
    light.wohnzimmer_decke:
      state: "on"
      brightness: 77
    cover.schlafzimmer_rollladen: closed
    light.flur: "off"

Im Simulator: Taster lang drücken → Szene „Fernsehabend“.

🧩 Blueprints

Vorlagen für Automationen/Scripts mit Eingaben (!input). Einmal schreiben, mehrfach mit anderen Entitäten nutzen – oder per URL aus der Community importieren.

blueprint:
  name: Licht bei Bewegung
  domain: automation
  input:
    sensor:
      name: Bewegungsmelder
      selector:
        entity:
          filter: { domain: binary_sensor, device_class: motion }
    lampe:
      name: Licht
      selector:
        target:
          entity: { domain: light }
mode: restart
triggers:
  - trigger: state
    entity_id: !input sensor
    to: "on"
actions:
  - action: light.turn_on
    target: !input lampe

🎚️ Helfer

Virtuelle Entitäten für Zustand in Automationen – in der UI unter Einstellungen → Geräte & Dienste → Helfer.

input_boolean
An/Aus-Schalter, z. B. Gästemodus
input_number
Zahl mit Schieberegler
input_select
Auswahlliste (Modus: Tag/Nacht/Urlaub)
input_datetime
Datum/Uhrzeit (z. B. Weckzeit)
input_text · input_button
Text, Knopf
counter
Zähler: increment/decrement/reset
timer
Countdown: idle/active/paused, Event timer.finished
Template-Sensor · Gruppe · Schwellwert …
abgeleitete Entitäten

🧪Templates

💡 Jinja2 in Automationen
Überall, wo Werte berechnet werden (Template-Condition, data:, Nachrichten), kommen Templates zum Einsatz. Probieren Sie sie im Template-Tester gegen das Musterhaus aus.