Zum Inhalt springen
Alles Automatisch

Home AssistantAutomatisierungenSnippets

Home Assistant Automation mit Trigger, Choose und Zeitlogik

Ich habe mir in letzter Zeit ein paar meiner Automationen noch mal genauer angeschaut und dabei festgestellt, dass eine davon eigentlich ein ziemlich gutes Beispiel dafür ist, wie man Automationen in Home Assistant sinnvoll strukturieren kann. Es geht um die Automation, die meine Lavalampe im Esszimmer steuert. Klingt erstmal simpel, steckt aber ein bisschen mehr drin als man denkt: Einschalten bei Sonnenuntergang, nachholen wenn ich nach Hause komme, und unterschiedliche Ausschaltzeiten für Wochentage und Wochenende. Das Ganze mit einer einzigen Automation.

Warum eine Automation statt vier

Man könnte jetzt natürlich hingehen und für jeden dieser Fälle eine eigene Automation schreiben. Einen Trigger für Sonnenuntergang, einen für Anwesenheit, einen für 23 Uhr und einen für 1 Uhr. Das würde technisch funktionieren, aber irgendwann hast du eine Automationsliste, durch die du selbst nach zwei Monaten nicht mehr durchblickst. Ich kenne das aus eigener Erfahrung.

Wenn alle diese Trigger dasselbe Gerät steuern, gehören sie auch zusammen. Das ist eigentlich das Grundprinzip. Eine Automation pro Gerät oder pro logischer Einheit, nicht eine Automation pro Ereignis.

Dazu kommt noch ein praktischer Grund: Eine gute Beschreibung in der Automation selbst spart dir später wahnsinnig viel Zeit. Ich schreibe mir da immer rein, was die Automation macht, wann sie feuert und was die Bedingungen sind. So verstehe ich auch nach einem halben Jahr sofort, was da passiert, ohne den YAML-Code lesen zu müssen.

Die vier Trigger und ihre IDs

Die Automation hat vier Auslöser. Jeder bekommt eine eigene Trigger-ID, weil wir die später in den Bedingungen brauchen. Das ist ein Konzept, das ich wahnsinnig praktisch finde: Du kannst damit in der choose-Aktion gezielt auf einzelne Trigger reagieren.

yaml
1triggers:
2  - event: sunset
3    offset: "-00:30:00"
4    id: sunset
5    trigger: sun
6  - entity_id: person.DEINE_PERSON
7    to: home
8    id: arrive_home
9    trigger: state
10  - at: "23:00:00"
11    id: off_weekday
12    trigger: time
13  - at: "01:00:00"
14    id: off_weekend
15    trigger: time

Der erste Trigger feuert 30 Minuten vor Sonnenuntergang. Home Assistant berechnet den Sonnenuntergang automatisch anhand des hinterlegten Standorts, du musst da nichts manuell einstellen. Der zweite Trigger reagiert auf Anwesenheit, also wenn die Person-Entity auf home wechselt. Die beiden Zeittrigger kümmern sich um das Ausschalten, einmal um 23 Uhr für Wochentage und einmal um 1 Uhr für das Wochenende.

Die vollständige Automation

Hier ist die komplette Automation am Stück. Entity-IDs musst du natürlich auf dein Setup anpassen: person.DEINE_PERSON gegen deine Person-Entity tauschen und switch.DEIN_SMART_PLUG gegen den echten Entity-Namen deines Schalters.

yaml
1alias: Lavalampe Esszimmer
2description: >-
3  Steuert die Lavalampe im Esszimmer (Meross Smart Plug Mini).
4
5  Einschalten: Jeden Tag 30 Minuten vor Sonnenuntergang, aber nur wenn
6  jemand zuhause ist.
7  Nachholen: Kommt jemand zwischen Sonnenuntergang-30min und der
8  Ausschaltzeit nach Hause, wird die Lampe nachträglich eingeschaltet.
9  Ausschalten: Unter der Woche (So–Do) um 23:00 Uhr, am Wochenende
10  (Fr/Sa-Nacht) um 01:00 Uhr.
11triggers:
12  - event: sunset
13    offset: "-00:30:00"
14    id: sunset
15    trigger: sun
16  - entity_id: person.DEINE_PERSON
17    to: home
18    id: arrive_home
19    trigger: state
20  - at: "23:00:00"
21    id: off_weekday
22    trigger: time
23  - at: "01:00:00"
24    id: off_weekend
25    trigger: time
26actions:
27  - choose:
28      - alias: Einschalten bei Sonnenuntergang oder Heimkommen
29        conditions:
30          - condition: trigger
31            id:
32              - sunset
33              - arrive_home
34          - condition: state
35            entity_id: person.DEINE_PERSON
36            state: home
37          - condition: or
38            conditions:
39              - alias: >-
40                  Abend-Fenster: nach Sonnenuntergang-30min, vor Ausschaltzeit
41                  (So-Do)
42                condition: and
43                conditions:
44                  - condition: sun
45                    after: sunset
46                    after_offset: "-00:30:00"
47                  - condition: time
48                    before: "23:00:00"
49                    weekday:
50                      - mon
51                      - tue
52                      - wed
53                      - thu
54                      - sun
55              - alias: >-
56                  Abend-Fenster: nach Sonnenuntergang-30min, Wochenende (Fr/Sa)
57                  bis Mitternacht
58                condition: and
59                conditions:
60                  - condition: sun
61                    after: sunset
62                    after_offset: "-00:30:00"
63                  - condition: time
64                    weekday:
65                      - fri
66                      - sat
67              - alias: "Spaetstunden-Fenster: 00:00-01:00 nach Fr/Sa-Abend"
68                condition: time
69                before: "01:00:00"
70                weekday:
71                  - sat
72                  - sun
73        sequence:
74          - target:
75              entity_id: switch.DEIN_SMART_PLUG
76            action: switch.turn_on
77      - alias: Ausschalten unter der Woche (So-Do um 23:00)
78        conditions:
79          - condition: trigger
80            id: off_weekday
81          - condition: time
82            weekday:
83              - sun
84              - mon
85              - tue
86              - wed
87              - thu
88        sequence:
89          - target:
90              entity_id: switch.DEIN_SMART_PLUG
91            action: switch.turn_off
92      - alias: Ausschalten am Wochenende (Sa/So um 01:00)
93        conditions:
94          - condition: trigger
95            id: off_weekend
96          - condition: time
97            weekday:
98              - sat
99              - sun
100        sequence:
101          - target:
102              entity_id: switch.DEIN_SMART_PLUG
103            action: switch.turn_off
104mode: restart

Wie die Choose-Logik funktioniert

Der choose-Baustein ist im Grunde ein Switch-Case aus der Programmierung. Home Assistant geht die Optionen von oben nach unten durch und führt die erste aus, deren Bedingungen alle erfüllt sind. Das macht ihn zum idealen Werkzeug, wenn ein und dieselbe Automation auf verschiedene Trigger unterschiedlich reagieren soll.

Die erste Option kümmert sich ums Einschalten. Sie feuert, wenn der Trigger entweder sunset oder arrive_home war, die Person zuhause ist, und das aktuelle Zeitfenster passt. Das Zeitfenster ist etwas aufwändiger aufgebaut, weil Wochentage und Wochenende unterschiedlich behandelt werden. Dazu gleich mehr.

Die zweite und dritte Option sind fürs Ausschalten. Hier prüft die Automation erstmal, durch welchen Trigger sie überhaupt ausgelöst wurde, und danach den Wochentag. So landen wir sicher im richtigen Ausschalt-Zweig.

Die Wochentag-Logik und warum sie nicht trivial ist

Das ist der Teil, der auf den ersten Blick ein bisschen verwirrend wirkt. Das Problem ist, dass Freitag-Nacht technisch schon Samstag ist, wenn es 1 Uhr morgens ist. Home Assistant rechnet mit dem aktuellen Kalendertag, nicht mit dem gefühlten Abend.

Deswegen braucht das Spaetstunden-Fenster zwischen Mitternacht und 1 Uhr die Wochentage sat und sun. Samstag für die Nacht nach Freitag, Sonntag für die Nacht nach Samstag. Die Tabelle macht das nochmal klarer:

Für Montag bis Donnerstag ist das einfach: Einschalten und Ausschalten passieren am selben Kalendertag um 23 Uhr. Für Freitag-Abend schaltet die Lampe am fri ein, aber das Ausschalten um 1 Uhr passiert bereits am sat. Für Samstag-Abend entsprechend: Einschalten am sat, Ausschalten am sun. Und Sonntag-Abend wird wieder um 23 Uhr ausgeschaltet, also alles am sun.

mode: restart und warum das hier Sinn ergibt

Die Automation läuft mit mode: restart. Das bedeutet: Wenn sie erneut ausgelöst wird, während sie noch läuft, wird der aktuelle Durchlauf abgebrochen und ein neuer gestartet. In diesem Fall ist das gewollt.

Stell dir vor, die Automation feuert um Sonnenuntergang-30min, aber du bist nicht zuhause. Die Einschalt-Bedingung schlägt fehl, nichts passiert. Kurz darauf kommst du nach Hause, der arrive_home-Trigger feuert, die Automation startet neu und diesmal ist die Bedingung erfüllt. Die Lampe geht an. Das ist genau das Nachholen, das ich oben beschrieben habe.

Mehrere Lampen steuern

Wenn du nicht nur eine Lampe, sondern mehrere Geräte gleichzeitig schalten möchtest, kannst du in der target-Sektion einfach eine Liste angeben:

yaml
target:
  entity_id:
    - switch.DEIN_SMART_PLUG
    - switch.DEIN_ZWEITER_PLUG
    - light.DEINE_LAMPE

Das funktioniert für alle drei Aktionen in der Automation gleich. Einmal anpassen, fertig.

Was du dafür brauchst

Für diese Automation brauchst du kein HACS, keine Erweiterungen, nichts Externes. Alles läuft mit Bordmitteln. Du brauchst ein schaltbares Gerät in Home Assistant, also einen Smart Plug, eine smarte Lampe oder ähnliches. Dazu eine eingerichtete Person-Entity für die Anwesenheitserkennung, zum Beispiel über die Home Assistant Companion App. Und Home Assistant muss deinen Standort kennen, damit er den Sonnenuntergang berechnen kann. Das stellst du unter Einstellungen, System, Allgemein ein.

Für den Smart Plug selbst nutze ich übrigens den Meross Matter WLAN Smart Plug. Die Dinger funktionieren bei mir wirklich gut und ich finde sie nach wie vor wahnsinnig zuverlässig. Falls du dir einen holen möchtest, gibt es im Meross Shop mit dem Code AAT10 noch 10% Rabatt.

Machst du das bei dir ähnlich, also mehrere Trigger in einer Automation zusammenfassen? Oder baust du das lieber getrennt auf? Ich bin gespannt, wie ihr das handhabt.

Diskussion im Forum

Hast du Fragen oder Ideen zu diesem Thema?

Diskutiere im Forum

Video teilen

Community

Unterstütze den Kanal

Hat dir der Beitrag geholfen? Es gibt zwei Wege, etwas zurückzugeben.