Home Assistant Automatisierung - Möglichkeiten & Grundlagen
Vom Steuern der Poolpumpe über die Heizung bis hin zum Mähroboter, Automatisierungen in Home Assistant bieten eine Möglichkeit die Dinge rund ums eigene Heim so richtig smart zu machen.
Anfangs habe ich mit den Automatisierungen in Home-Assistant nur eine Zeitschaltuhr für meine Poolpumpe abgelöst. Dazu habe ich zunächst eine Automatisierung für das Einschalten und eine für das Ausschalten erstellt: Klappt, aber irgendwie fühlen sich zwei Automatisierungen für das Steuern eines Geräts noch nicht ganz richtig an. Aus diesem Grund, aber auch weil sich in der Zwischenzeit anspruchsvollere Abläufe ergeben haben, habe ich mir die Möglichkeiten der Automatisierungen im Detail angesehen. Zuletzt konnte ich sogar meine bisherige Mährobotersteuerung mit einer Home Assistant-Automatisierung ablösen, siehe: Steuerung meines Mähroboters.
Automatisierung erstellen
Eine neue Automatisierung kann in den Einstellungen und "Automatisierungen & Szenen" hinzugefügt werden.
Das Konzept: Auslöser -> Bedingung -> Aktion
Automatisierungen werden durch einen oder mehrere hinterlegte Auslöser gestartet, als Beispiel zu einer bestimmten Zeit, oder wenn sich der Status eines Sensors oder Gerätes ändert. Vor dem Ausführen einer oder mehrerer Aktionen kann die Automatisierung noch auf bestimmte Bedingungen geprüft werden.
Hier ein kurzer Überblick über die möglichen Auslöser für das Starten einer Automatisierung:
Auslöser
Auslöser | Beschreibung |
---|---|
Ereignis | Das Herzstück des Home Assistant ist der Ereignisbus (event bus). Sämtliche Statusänderungen in Home-Assistant lösen entsprechende Events aus, welche als Auslöser für das Starten einer Automatisierung verwendet werden können. |
Geolokalisierung | Der Geolocation-Trigger wird ausgelöst, wenn eine Entität in einer Zone auftaucht oder aus ihr verschwindet. Als Beispiel, wenn ein Wetterereignis in der Zone in der sich Home Assistant befindet, eintritt. |
Gerät | Löst aus, wenn sich der Status eines bestimmten Gerätes ändert, z. B. wenn ein Gerät aus- oder eingeschaltet wird, oder wenn sich ein bestimmter Wert z.B. die Temperatur eines Temperaturfühlers über oder unter einem vorgegebenen Wert befindet. |
Home Assistant | Löst aus, wenn Home Assistant startet oder gestoppt wird. |
Kalender | Kalenderentitäten können von anderen Integrationen genutzt und bereitgestellt zu werden. Kalenderauslöser ermöglichen die Automatisierung basierend auf dem Beginn oder Ende eines Ereignisses einer Kalenderentität. |
MQTT | Löst aus, wenn eine MQTT-Nachricht empfangen wurde. |
Numerischer Zustand | Löst aus, wenn der numerische Wert einer Entität über oder unter einem bestimmten Wert ist. |
Sonne | Löst vor dem Sonnenauf- oder Untergang, oder nach dem Sonnenauf- oder Untergang aus. |
Tag | Löst aus, wenn ein Tag gescannt wird. |
Template | Löst aus, wenn eine Vorlage den Wert wahr enthält. |
Webhook |
Löst aus, wenn eine Webhook-Nutzlast auf dem Endpunkt /api/webhook/{ID} empfangen wurde. Die ID wird dabei beim Erstellen des Auslösers generiert: Webhooks unterstützen HTTP POST-, PUT- und HEAD-Anfragen. Beim Aufruf des Webhook-Endpunkts können Formulardaten, JSON-Daten oder URL Query Parameter an das Template übertragen werden: trigger.data, trigger.json oder trigger.query. |
Zeit | Zeitauslöser, zu einer festen Zeit oder über einen Datums-/Zeit-Helfers. |
Zeitraster | Der Zeitmuster-Trigger löst aus, wenn die Stunde, Minute oder Sekunde der aktuellen Uhrzeit mit einem bestimmten Wert übereinstimmt. |
Zone | Löst aus, wenn eine Entität mit Standort eine Zone betritt oder verlässt. z.b. Device-Tracker Entitäten. Als Beispiel wenn ein WLAN-Gerät zu Hause ist oder Abwesend, siehe: ha-integrationen#device-tracker-openwrt. |
Zustand | Löst aus, wenn sich der Zustand einer Entität ändert. |
Bedingung
Optional kann die gestartete Automatisierung auf bestimmte Bedingungen überprüft werden.
Bedingung | Beschreibung |
---|---|
Ausgelöst durch | Überprüft, ob die Automatisierung von einem bestimmten Auslöser (bestimmte Auslöser-ID) gestartet wurde. |
Gerät | Überprüft, ob ein bestimmtes Gerät einen bestimmten Status oder einen bestimmten Wert besitzt. |
Nicht | Mit Nicht kann eine der hier gelisteten Bedingungen überprüft werden, ob die Bedingung nicht erfüllt ist. |
Numerischer Zustand | Überprüft den numerischen Wert einer Entität, ob dieser über oder unter einem bestimmten Wert ist. |
Oder | Verknüpfen mehrere Bedingungen, wenn eine der Bedingungen erfüllt ist. |
Sonne | Vor dem Sonnenauf- oder Untergang, oder nach dem Sonnenauf- oder Untergang. |
Template | Vorlage Bedingung |
Und | Verknüpfen mehrere Bedingungen, wenn mehrere Bedingungen erfüllt sind. |
Zeit | Prüft auf eine feste Zeit oder über einen Datums-/Zeit-Helfers. |
Zone | Überprüft, ob sich eine Entität mit Standort in einer Zone befindet oder nicht… |
Zustand | Überprüft den Zustand einer Entität |
Treffen die hinterlegten Bedingungen zu, werden die definierten Aktionen ausgeführt:
Aktion
Aktion | Beschreibung |
---|---|
Auswählen | Eine oder mehrere Aktionen anhand einer oder mehrerer Bedingungen ausführen. |
Bedingung | Überprüfen, ob eine Einheit in einem bestimmten Zustand ist. |
Dienst ausführen | Einen bestimmten Dienst ausführen, als Beispiel eine Benachrichtigung auf ein Handy mit installierte Home Assistant App schicken. |
Ereignis | Ein bestimmtes Event auslösen |
Gerät | Eine Aktion auf einem bestimmten Gerät ausführen, z.B. ein bestimmtes Gerät ein- oder ausschalten. |
Medien abspielen | Abspielen von Medien auf einem Media Player |
Parallel laufen | Mehrere Aktionen gleichzeitig starten |
Stopp | Automatisierung stoppen |
Szene | Eine bestimmte Szene aktivieren |
Warten auf den Ablauf der Zeit (Verzögerung) | Wartezeit für die Automatisierung. Damit die folgenden Aktionen verzögert gestartet werden. |
Warten auf eine Vorlage | Warten auf eine Vorlage, wenn diese erfüllt ist. |
Warten auf einen Auslöser | Auf einen Auslöser warten, inkl. Timeout. |
Wenn-dann | Wenn, dann, sonst (If-then, else). Wenn bestimmte Bedingungen erfüllt sind eine bestimmte Aktion starten, sonst eine bestimmte andere Aktion ausführen. |
Wiederholen | eine Aktion mehrfach wiederholen |
YAML
Beim Erstellen einer Automatisierung im visuellen Editor wird im Hintergrund eine ein YAML-Text mit allen relevanten Informationen erstellt. Der YAML-Text kann in einem Text-Editor bearbeitet und angepasst werden.
Abläufe
Neben dem Verlauf können die Abläufe von bereits ausgeführte Automatisierungen im Detail analysiert werden:
Sensor unknown
Sollte in der Automation ein nummerischer Vergleich: größer, oder kleiner als - verwendet werden, bleibt die Automation stehen, wenn der Sensor aus irgendeinem Grund den Status "Unknown" besitzt:
if/condition/3/entity_id/0
Executed: May 4, 2023 at 7:20:27 AM
Result:
result: false
message: value 'unknown' is non-numeric and treated as False
Abhilfe schafft die Verwendung eines "Value template" in der Automatisierung:
{{states('sensor.rain_zamg_12') | round(2,default=0)}}
Praxis: Einsatzzweck Rasenmähroboter: Regen und Sonnensteuerung über eine Steckdose
Wie in einem früheren Beitrag erwähnt, steuere ich meinen Rasenmähroboter, einen Husqvarna Automower, liebevoll Oswald genannt, über eine steuerbare Steckdose. Das Prinzip dahinter ist, dass der Mäher erst startet wenn die Ladestation einen Strom von der Steckdose bekommt. Meine Beweggründe waren das Fehlen eines Regensensors und der Mangel an verfügbaren Steuermöglichkeiten, siehe: Steuern des Automowers mittels Steckdose - Regensensor? Einige Jahre lang habe ich für die Steuerung eine simple PHP-Seite verwendet, siehe: www.script-example.com/smartplug-steuerung und diese später mit dem PHP-Framework Laravel ersetzt. Nachdem in der Zwischenzeit mehr und mehr Automatisierungsaufgaben an Home-Assistant übertragen habe, war der Mähroboter ein weiterer logischer Schritt. Im Vergleich zu den früheren Lösungen ließ sich die Steuerung mit Home Assistant wesentlich schneller und einfacher umsetzen, zumal ich mich nicht um das Sammeln der Daten, die Auswertung und Anzeige kümmern muss. Die Logik für das Steuern konnte ich dabei von der Grundidee von den bestehenden Projekten übernehmen. Ich habe die Mähphase direkt in den Einstellungen des Geräts auf den Vormittag beschränkt, damit Oswald möglichst wenig stört. Home Assistant soll die Steckdose erst einschalten, wenn es nicht geregnet hat, die Wettervorhersage passt und die Sonne scheint, damit das Gerät nicht in Konflikt mit bestimmten nacht- oder dämmerungsaktiven Tieren kommt.
Die Automatisierung im Detail
Als Auslöser dient, neben bestimmten Zeiten, die Stromerzeugung meines Balkonkraftwerks. Der Mäher startet vormittags, wenn die Sonne scheint und wird abends wieder deaktiviert, wenn sich der Mäher in der Ladestation befindet. Ob der Mäher wieder zurück in die Ladestation gefunden hat, kann ich am Stromverbrauch feststellen: Unter 3 Watt ist der Mäher vollgeladen und in der Station. Sollte der Mäher einmal nicht nach Hause finden, bekomme ich eine Benachrichtigung auf Handy. Als Bedingung für den Start habe ich in der Automatisierung das Wetter abgefragt: Herangezogen werden die vergangenen Niederschlagswerte und eine Wettervorhersage:
Hier der fertige Ablauf als YAML-Text:
alias: Oswald
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.balkonkw_total_ac_output_power_active
above: 110
- platform: time
at: "18:00:00"
condition: []
action:
- if:
- condition: time
before: "13:00:00"
alias: Vormittag
then:
- if:
- condition: numeric_state
entity_id: sensor.balkonkw_total_ac_output_power_active
above: 110
- condition: device
type: is_off
device_id: ???
entity_id: switch.oswald_switch
domain: switch
- condition: numeric_state
entity_id: sensor.rain_zamg
below: 1
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.openweathermap_forecast_precipitation
below: 50
- condition: numeric_state
entity_id: sensor.openweathermap_forecast_precipitation
below: 2
alias: Wettervorhersage
then:
- type: turn_on
device_id: ???
entity_id: switch.oswald_switch
domain: switch
- service: notify.mobile_app_sm_??
data:
title: Es ist trocken und PV liefert -> Oswald ein
message: "{{states('sensor.balkonkw_total_ac_output_power_active')}}Watt"
alias: PV liefert? Einschalten?
alias: Einschalten?
else:
- if:
- condition: device
type: is_on
device_id: ???
entity_id: switch.oswald_switch
domain: switch
then:
- if:
- condition: numeric_state
entity_id: sensor.oswald_active_power
below: 3
then:
- type: turn_off
device_id: ???
entity_id: switch.oswald_switch
domain: switch
else:
- service: notify.mobile_app_sm_??
data:
title: Oswald nicht ausgeschaltet
message: "Power: {{states('sensor.oswald_active_power')}}Watt"
alias: "Abends: Ausschalten"
mode: single
Der Yaml-Text kann in eine leere Automatisierung kopiert und angepasst werden. Die historischen Niederschlagswerte, im Ablauf "sensor.rain_zamg" hohle ich dabei mittels curl von einer öffentlich zugänglichen Webseite, ähnlich dem Auslesen der PV-Werte meines Balkonkraftwerks: PV Balkonkraftwerk Inbetriebnahme und HA Integration.
Fazit
Eine Smarthome-Lösung entfaltet ihr volles Potenzial erst durch die Möglichkeit bestimmte Geräte automatisch zu steuern. Durch das intelligente Steuern einzelner Geräte kann nicht nur der Komfort erhöht werden, es kann damit auch Strom gespart oder dieser sinnvoller eingesetzt werden. Beim Eintreten bestimmter Ereignisse kann zudem eine Alarmierung aufs Handy erfolgen.

{{percentage}} % positiv
