Wie erstellt man eine Home Assistant Zeitschaltuhr im YAML-Modus? Automatische Licht oder Rollladensteuerung einfach mit der Home Assistant Zeitschaltuhr umgesetzt!
Immer wieder kommt (zurecht) die Frage auf, wie man mit Home Assistant eine Zeitschaltuhr umsetzt. Hierzu vielleicht zur Einordnung in der Home Assistant-Logik eine Anmerkung:
Eine Zeitschaltuhr in Home Assistant ist letzten Endes nichts anderes als eine Automation (also eine Automation), welche auf zeitliche Vorgaben reagiert. Also zum Beispiel so etwas wie: Öffne die Rollläden jeden Tag um 07:00 Uhr!
Der Vorteil einer Zeitschaltuhr mit Home Assistant gegenüber nicht smarten Zeitschaltuhren ist eindeutig, dass man unendlich viele Regeln beziehungsweise Bedingungen einbauen kann und dann dies sogar noch um Zufallskomponenten ergänzen kann.
Inhaltsverzeichnis
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!
Home Assistant Zeitschaltuhr mit Zufallskomponente
Folgendes Beispiel: Viele nutzen klassische Zeitschaltuhren (Zeitschaltuhren bei Amazon), um zu Hause das Licht ein- und auszuschalten, wenn man im Urlaub ist. Das Problem bei einer solchen Nutzung liegt auf der Hand: Wenn jeden Tag um Punkt 18:00 Uhr im Wohnzimmer das Licht angeht, wird ein potentieller Einbrecher dies spätestens am zweiten Tag seiner Beobachtung bemerkt haben. Der Mehrwert einer solchen „alten“ Zeitschaltuhr geht also gegen Null (Einbruchschutz mit Zeitschaltuhren).
Anders ist dies, wenn aber ab 17:30 Uhr mit einer zufälligen Wartezeit von 5-45 Minuten das Licht im Wohnzimmer angeht. Das kann dann im Ergebnis nämlich heute um 17:38 Uhr sein, und morgen dann um 18:12 Uhr.
Aber der Reihe nach 🙂
Home Assistant Zeitschaltuhr erklärt
Wie bereits zuvor gesagt, reden wir in diesem Beitrag über Automations und konzentrieren uns hierbei auf die Zeitkomponente. Entsprechend werde ich als auszuführende Aktion auch immer nur eine einzuschaltende Lampe nutzen.
Du kannst dies natürlich nach deinem Bedarf beliebig anpassen und erweitern – bei konkreten Fragen dazu einfach gerne Kommentieren!
Zuallererst solltest du folgendes sicherstellen: Damit dein Home Assistant auch die richtige Uhrzeit hast, solltest du in deiner configuration.yaml (sofern es nicht bereits vorhanden ist) folgendes ergänzen:
homeassistant:
time_zone: Europe/Berlin
Entscheidend ist hier natürlich die Angabe „time_zone“, während „homeassistant:“ in der configuration.yaml bereits enthalten sein wird.
Durch diese Angabe sagst du dem System unmissverständlich, welche Zeitzone genutzt werden soll!
Nachdem du diese Zeile ergänzt hast, solltest du dein System einmalig neustarten, damit die korrekte Uhrzeit gilt!
Home Assistant Zeitschaltuhr Beispiel
Nun kommen wir direkt zu einem konkreten Code-Beispiel einer Automation, welche als Zeitschaltuhr fungiert:
- alias: '[holidaymode] lights on' trigger: - platform: time at: '18:15' condition: [] action: - delay: 00:{{ range(0,10) | random | int }}:00 - action: light.turn_on metadata: {} data: {} target: entity_id: light.extended_color_light_13
Diesen Beispielcode nehmen wir nun Zeilenweise auseinander, damit du verstehst warum was da steht, wie eine Home Assistant Zeitschaltuhr funktioniert und wie du es anpassen kannst!
- Der „alias“ ist der Name deiner Automation beziehungsweise Zeitschaltuhr. Diesen kannst du natürlich beliebig wählen 😉 Wähle ihn aber am besten so, dass er für dich sprechend ist, damit dein Home Assistant übersichtlich bleibt!
- Als Trigger haben wir die platform „time“ gewählt. Mit „at: ’18:15′“ sagen wir, dass um 18:15 Uhr die Automation ausgelöst werden soll. Hier sind theoretisch auch Sekunden möglich (also 18:15:16), jedoch macht das wohl in den allermeisten Fällen keinen Sinn.
- „condition“ lassen wir „leer“, also geben nichts ab. Man könnte hier aber Bedingungen setzen, welche auf den aktuellen Zustand/Wert jeder in Home Assistant bekannten Entität prüfen.
- Unter „action“ kommt dann die eigentliche Aktion (oder halt eben mehrere) die ausgeführt werden soll(en). Als erste führen wir einen „delay“ aus, also eine Verzögerung. Und diese ist dann mit einer Zufallskomponente kombiniert, welche einen Wert zwischen 0 und 10 zufällig wählt. Als Ergebnis steht in dieser Zeile sinngemäß „- delay: 00:01:00“ oder anstelle der 1 eben halt, was bei der Zufallskomponente zufällig herausgekommen ist. Dies ist natürlich optional, ich zeige es dir aber dennoch, da ich eingangs genau eine solche Zufallskomponente beschrieben hatte. Und dann kommt natürlich noch unsere eigentlich Action: Wir rufen die action „light.turn_on“ auf und diesen für die „entity_id“: light.extended_color_light_13. Hier trägst du natürlich die von dir gewünschte Lampe in deinem Smart Home ein!
Diese Automation beziehungsweise Home Assistant Zeitschaltuhr kannst du also kopieren und selbst nutzen. Alles, was du anpassen musst, ist die von dir gewünschte Uhrzeit, sowie natürlich die Entity-ID deiner Lampe(n).
Und das Delay mit dem Zufallsgenerator von 0 bis 10 Minuten, musst du natürlich nicht nutzen! 😉
Produktempfehlungen
@olli Danke für diesen Tipp! Ich habe das ganze mal über den Automationen-Pflegedialog eingegeben und dann geschaut, wie der entsprechende YAML-Code aussieht. Die entity_id war tatsächlich eine andere.
Hier ist mein Code, der jetzt endlich funktioniert. Ich habe ein paar Zeilen inzugefügt, damit sich der Stecker bzw. das Licht auch wieder zu einem zufälligen Zeitpunkt ausschaltet.
alias: Ferienmodus Stecker Flur
description: >-
Ferienmodus schaltet *DEIN GERÄT, hier “Stecker Flur” gennant* zu einem zufälligen Zeitpunkt
zwischen 18 und 19 Uhr an und zu einem zufälligen Zeitpunkt zwischen 22 und 23
Uhr aus
trigger:
– platform: time
at: „18:00:00“
alias: Stecker Flur an
id: Stecker Flur an
– platform: time
at: „22:00:00“
alias: Stecker Flur aus
id: Stecker Flur aus
condition: []
action:
– if:
– condition: trigger
id:
– Stecker Flur an
then:
– delay: 00:{{ range(0,60) | random | int }}:00
– type: turn_on
device_id: *DEINE DEVICE ID*
entity_id: *DEINE ENTITY ID*
domain: switch
– if:
– condition: trigger
id:
– Stecker Flur aus
then:
– delay: 00:{{ range(0,60) | random | int }}:00
– type: turn_off
device_id: *DEINE DEVICE ID*
entity_id: *DEINE ENTITY ID*
domain: switch
mode: single
Hallo Olli,vielen Dank für den Artikel zum Thema Zeitschaltuhr! Ich finde die Idee genial und wollte es auch gleich mal selber ausprobieren. Ich habe eine neue Automation erstellt und in „Als YAML bearbeiten“ deinen Code eingefügt (natürlich angepasst auf meinen smarten Stecker):
– alias: ‚[holidaymode] Nous Stecker on’trigger:- platform: timeat: ’18:15’condition: []action:- delay: 00:{{ range(0,10) | random | int }}:00- service: switch.turn_ondata:entity_id: switch.nous_stecker_flur
Leider kommt jetzt immer die Fehlermeldung: Message malformed: extra keys not allowed @ data[‚0‘]
Wenn jemand Ideen oder Lösungsvorschläge hat bin ich sehr dankbar! Ich bin noch relativ neu bei Home Assistant und noch nicht wirklich vertraut mit der Thematik.
Viele Grüße,Lorenz
[attach]14[/attach]
@l-38 Hi Lorenz, danke für das Feedback und zeitgleich sorry für den Code, der mittlerweile wie folgt aussehen muss, da sich die Syntax zwischenzeitlich geändert hat:
Ich habe das oben im Beitrag angepasst und hoffe, dass es für dich nun wie gewünscht funktioniert!
VG
Olli
@olli Danke für die schnelle Antwort und die Aktualisierung der Beschreibung!
Ich habe den neuen Code gleich ausprobiet, leider ohne Erfolg. Die Fehlermeldung Message malformed: extra keys not allowed @ data[‚0‘] kommt immer noch.
Hat jemand eine Idee, was ich noch ändern könnte? Funktioniert der neue Code bei Euch?
Hier ein Screenshot:
[attach]15[/attach]
@l-38 Hast du die Automatisierung mal über den Pflegedialog von Home Assistant erstellt? Irgendwie habe ich das Gefühl, dass die genutzte Entität „was besonderes“ ist. Hast du das mal versucht und die den hieraus resultierenden YAML-Code angeschaut?
Hallo Olli,
eine Frage zu Deinem Beitrag über die Zeitschaltuhr: Ich kann aber trotzdem z.B. die Lampe, die über die Zeitschaltuhr gesteuert wird, auch manuell ein-oder ausschalten?
Servus
Peter
Hi Peter,
ja klar, das ist natürlich immer möglich!
VG
Olli
Danke Olli,
ich habe das jetzt so konfiguriert, funktioniert einwandfrei 🙂
Peter