Im Zuge meiner Bemühungen, meine Wohnung smart zu machen, habe ich mit der naheliegendsten Routine begonnen: Schlafen gehen und aufstehen. Beides macht man (mehr oder weniger) jeden Tag. Diese Routine eignet sich daher perfekt, um zu lernen, was eine Smart-Home-Automation leisten muss, damit sie wirklich „smart“ ist.
In diesem Beitrag konzentriere ich mich darauf, wie ich die Routinen auslöse. Mein Ziel: Eine intuitive Bedienung, die jeder versteht, ohne eine Einweisung zu benötigen.
Ausgangssituation
- System: Ein Home Assistant-Server läuft als VM auf meiner NAS.
- Geräte: Im Haushalt sind alle mobilen Endgeräte von Apple.
Zielsetzung
Ich möchte eine einfach zu bedienende **Bedtime-Routine** mit einem entsprechenden **WakeUp-Prozess** erstellen. Die Besonderheiten:
- Die Zeit für den WakeUp-Prozess soll beim Auslösen vom Anwender erfragt werden.
- Der Prozess soll von jedem Endgerät aus möglich sein, ohne dass die Home-Assistant-App installiert werden muss.
- Es soll möglich sein, auch Smart Buttons zu verwenden.
Umsetzung
Um diese Ziele zu erreichen, habe ich mich für Webhooks entschieden. Die Herausforderung besteht darin, die vom Anwender eingestellte Uhrzeit korrekt an Home Assistant zu übergeben und zu interpretieren. Der Vorteil von Webhooks ist, dass sie theoretisch von jedem vernetzten Endgerät aus gesendet werden können. Dies unterstützt das Ziel, die Routine intuitiv auslösen und konfigurieren zu können.
Mit den Shortcuts (Kurzbefehlen) von Apple habe ich eine Lösung gefunden, die alle notwendigen Benutzerinteraktionen im gewohnten Apple-Look-and-Feel bereitstellt. Ich bin sicher, dass es unter Android ähnliche Möglichkeiten gibt, aber da ich seit Jahren kein Android mehr verwende, kann ich hierzu keine Empfehlungen geben.
Warum Apple Shortcuts?
Apple Shortcuts sind eine grafische Skriptingumgebung, die mittlerweile nicht nur unter iOS, sondern auch auf allen anderen Apple-Geräten (Mac, iPad, Apple Watch) funktioniert. Die Synchronisierung über iCloud ermöglicht es, einen Shortcut einmal zu erstellen und auf jedem Endgerät auszuführen.
Webhooks in HomeAssistant erstellen
Die Erstellung von Webhooks in Home Assistant ist relativ einfach:
Man erstellt eine Automation und wählt als Trigger den Webhook aus.
In meinem Fall arbeite ich mit zwei Webhook-Triggern:
- Einer für die Übergabe der Uhrzeit für den WakeUp-Prozess.
- Einer, um nur die Bedtime-Routine auszuführen.
So kann ich flexibel entscheiden, ob ich den WakeUp-Prozess direkt mit starten möchte. Geräte wie Smart Buttons, die keine Möglichkeit zur Dateneingabe haben, können trotzdem die Bedtime-Routine auslösen, ohne dass dafür eine eigene Automation erstellt werden muss.
Hier die Konfiguration in YAML zur Übersicht:
triggers: - trigger: webhook allowed_methods: - POST - PUT local_only: true webhook_id: SECRET id: "@WakeUp" alias: Webhook @WakeUp - trigger: webhook allowed_methods: - GET local_only: true webhook_id: SECRET id: Bedtime alias: Webhook Bedtime (without Payload)
Der Webhook „@WakeUp“ unterstützt die Methoden POST und PUT, damit die Payload (Datum und Uhrzeit) übertragen werden kann. Der Webhook „Bedtime“ hört hingegen nur auf GET, da hier keine Daten benötigt werden.
ShortCut (Kurzbefehl) erstellen
Um die Webhooks auszulösen, habe ich in der Apple-Shortcuts-App ein Skript erstellt. Dieses sieht folgendermaßen aus:
Kurze Stichwortartige Erklärung:
- Liste mit Auswahlmöglichkeiten anlegen
- Wenn „Ja“ gewählt wurde, wird der @WakeUp Prozess getriggert
- Nach Datum und Uhrzeiteingaben fragen und in Variable „WakeUp“ speichern
- Webhook URL definieren und Inhalte von URL abrufen
In der Aktion „URL abrufen“ ist es wichtig, die Variable als Payload zu übergeben. Das Datums- und Zeitformat muss in ISO 8601 vorliegen, da Home Assistant dieses Format korrekt interpretieren kann.
HomeAssistant – Datum und Zeit interpretieren
Für die WakeUp-Routine nutze ich einen Kalendereintrag in Home Assistant. Alternativ könnten auch Helfer-Entitäten oder andere Mechanismen verwendet werden. Die Kalenderoption ist für mich jedoch übersichtlich und ermöglicht einfache Änderungen. Wie man Automationen mit Kalendereinträgen kreiert habe ich aus dieser Anleitung von smart home & more.
Als erstes müssen wir an die Payload vom Webhook kommen. Dies funktioniert mit folgendem Code:
{{trigger.json.wakeup}}
Trigger sagt, dass wir auf den Trigger der Automation zugreifen. In diesem Fall auf den Webhook. Mit json gehen wir in die Datenstruktur der Payload und mit wakeup bekommen wir den Wert des Keys. Den Key haben wir im ShortCut selbst definiert. Die Ausgabe wird von HomeAssistant jedoch noch nicht automatisch als Datum und Zeitformat interpretiert. Dadurch müssen wir das ganze umformen. Dies geht wie folgt:
{{ as_datetime(trigger.json.wakeup) | as_local }}
as_datetime gibt HomeAssistant an, dass er die Daten in ein Datums und Zeitformat interpretieren soll. Da wir die Daten bereits in einem Standardisierten Format übertragen, brauchen wir keine weitere Anpassung vornehmen. HomeAssistant versteht, dass das Format im ISO 8601 Format ist und baut daraus ein datetime-object. Mit | as_local sagen wir HomeAssistant, dass er die Uhrzeit in die ihm bekannte Zeitzone zuordnen soll.
So kann ich bspw. einen Kalendereintrag hinzufügen:
action: calendar.create_event
metadata: {}
target:
entity_id: calendar.routinen
data:
summary: "@WakeUp"
start_date_time: "{{ as_datetime(trigger.json.wakeup) | as_local }}"
end_date_time: "{{ (as_datetime(trigger.json.wakeup) + timedelta(minutes=1)) | as_local }}"
Die fertige Automation könnte dann wie folgt aussehen:
Bedienung – Look and Feel
Die erstellten Apple-Shortcuts können als Icon auf den Home-Bildschirm gelegt werden. Ein einfacher Klick auf das Icon reicht aus, um die Routine zu starten.
In Home Assistant kann man den Trace der Automation einsehen. Im Beispiel sieht man, dass die Uhrzeit erfolgreich interpretiert wurde und ein Kalendereintrag für die WakeUp-Routine angelegt wurde.
Fazit
Durch den Einsatz von Webhooks können die Bordmittel der Endgeräte verwendet werden, um Routinen in Home Assistant auszulösen. Es wird keine Home-Assistant-App benötigt, und die Bedienung bleibt intuitiv und benutzerfreundlich. Die Apple-Shortcuts lassen sich zudem einfach teilen, wodurch auch Dritte die Routinen verwenden können, ohne direkten Zugriff auf Home Assistant zu haben.