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.
Optional: Versatz (Offset): Format: HH:MM:SS
Beispiel: Versatz (Offset): -02:00:00 = 2 Stunden vor dem Sonnenauf- oder Untergang;
Beispiel: Versatz (Offset):  02:00:00 = 2 Stunden nach dem Sonnenauf- oder Untergang
Tag Löst aus, wenn ein Tag gescannt wird.
Template

Löst aus, wenn eine Vorlage den Wert wahr enthält. Z.B. wenn eine Entität grösser wird als eine andere:
{{ states("sensor.entity1") | float  > states("sensor.entity2") | float }} 

siehe auch: Home Assistant Templates / Statistik und Sensoren

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.

Optional: Vor Versatz (Offset) oder Nach Versatz (Offset): Format: HH:MM:SS
Beispiel: Vor Versatz (Offset):  02:00:00 = 2 Stunden vor dem Sonnenauf- oder Untergang

Template Vorlage Bedingung, siehe auch Home Assistant Templates / Statistik und Sensoren
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 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)}}

Ein- und Ausschalten: eine Automation oder zwei?

Alternativ zu zwei Automationen für das Ein- und Ausschalten eines Gerätes kann in den Auslösern auch eine ID vergeben und in den Aktionen verwendet werden:

Mittels ID kann in den Aktionen reagiert werden, indem das Gerät in einer Wenn-Abfrage entsprechend Ein- oder Ausgeschaltet wird:

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 das Handy. Als Bedingung für den Start habe ich in der Automatisierung das Wetter abgefragt: Herangezogen werden die vergangenen Niederschlagswerte und eine Wettervorhersage:

Auslöser Beschreibung
When BalkonKW Total AC Output Power (Active) is above 110 Über 110 Watt vom Balkonkraftwerk: die Sonne scheint:
In den Aktionen: Prüfen ob der Mäher starten soll und gegebenenfalls die Steckdose einschalten
Wenn die Zeit gleich 18:00 ist Abends
In den Aktionen: Prüfen ob der Mäher in der Ladestation ist und gegebenenfalls die Steckdose ausschalten, oder eine Benachrichtigung schicken.

Aktionen:

[+]

 'Einschalten?' ausführen wenn 'Vormittag' sonst 'Abends: Ausschalten'

Wenn*:
Vormittag (vor 13Uhr)
Dann*:
Einschalten?

Wenn*: 
Confirm BalkonKW Total AC Output Power (Active) is above 110 (Sonne scheint)
Oswald Switch ist ausgeschaltet 
 Confirm rain_zamg is below 1 (kein Regen)
 Wettervorhersage (kein Regen in Sicht)

Confirm OpenWeatherMap Forecast Precipitation is below 50
Confirm OpenWeatherMap Forecast Precipitation is below 2

Dann*:
Oswald Switch einschalten
Aufruf eines Dienstes 'notify.mobile_app_sm_??' auf

Sonst:
 Abends: Ausschalten

Wenn*:
Oswald Switch ist eingeschaltet
Dann*:
'Oswald Switch ausschalten' ausführen wenn 'Confirm Oswald Active power is below 3' sonst 'Aufruf eines Dienstes 'notify.mobile_app_sm_??' auf '

Wenn*:
 Confirm Oswald Active power is below 3
Dann*:
Oswald Switch ausschalten
Sonst:
Aufruf eines Dienstes 'notify.mobile_app_sm_??' auf

 

 

 

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. Siehe auch: HA: Werte einer beliebigen WebGUI als Entitäten verwenden.

Balkonkraftwerk oder PV-Anlage Überschuss

Nicht immer, aber doch immer wieder - liefert mein Balkonkraftwerk an sonnigen Tagen einen Stromüberschuss. Damit ich diesen nicht verschenke, starte ich die Poolpumpe bei einem Überschuss und stoppe diese wieder, wenn kein überschüssiger Strom mehr zur Verfügung steht.

Auslöser Beschreibung
When meter_power is below -200 for 20:00

meter_power spiegelt die Daten des Smartmeters wider: negative Werte (-) bedeuten einen Stromüberschuss

ID: Überschuss

When meter_power is above 0 meter_power = 0: kein Überschuss

Aktionen:

'PoolPumpe Switch einschalten' ausführen wenn 'When triggered by Überschuss' sonst 'PoolPumpe Switch ausschalten'

Wenn*:

When triggered by Überschuss

Dann*:

 PoolPumpe Switch einschalten

Sonst:

PoolPumpe Switch ausschalten

Als Auslöser (Trigger) für das Einschalten verwende ich die Entität des Smartmeter für den Stromüberschuss (meter_power): einmal für das Einschalten, einmal für das Ausschalten. Wenn die Entität meter_power für 20 Minuten einen Stromüberschuss von mehr als 200 Watt liefert (-200Watt), löst der Trigger aus und startet die Pumpe in den Aktionen. Die 200 Watt entsprechen ca. dem Stromverbrauch der Pumpe. Damit die Automation in den Aktionen zwischen keinem und einem Überschuss reagieren kann, entscheidet die Wenn-Abfrage, ob die Pumpe ein- oder ausgeschaltet werden soll. Der Auslöser "When meter_power is below -200 for 20:00" besitzt dazu die ID "Überschuss", diese kann als Bedingung für die Wenn-Abfrage verwendet werden. Somit muss der Schwellwert für das Einschalten (-200Watt) nur einmalig im Auslöser definiert werden und nicht zusätzlich auch noch in der Wenn-Abfrage.

Automatisierung im Detail

[+]
alias: Überschuss PoolPumpe
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.meter_power
    for:
      hours: 0
      minutes: 20
      seconds: 0
    below: -200
    id: Überschuss
  - platform: numeric_state
    entity_id: sensor.meter_power
    for:
      hours: 0
      minutes: 0
      seconds: 0
    above: 0
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Überschuss
    then:
      - type: turn_on
        device_id: ???
        entity_id: switch.poolpumpe_switch
        domain: switch
    else:
      - type: turn_off
        device_id: ???
        entity_id: switch.poolpumpe_switch
        domain: switch
mode: single

Heizung steuern - Warmwasser für den Folgetag aufbereiten

Neben der Steuerung meiner Wärmepumpe kann ich das Warmwasser alternativ über eine schaltbare Steckdose und einen Heizstab erhitzen. Nachdem meine Wärmepumpe das Wasser nur bis auf 50°C erwärmen kann, ermöglicht mir der Heizstab auch höhere Temperaturen zu erzeugen. Wird das Warmwasser an einem Tag mit ausreichend Sonnenschein um weitere 10°C erhitzt, ist am Folgetag keine Warmwasseraufbereitung notwendig. Sollte die Prognose für den erwarteten PV-Ertag für den folgenden Tag unter einen bestimmten Wert fallen, habe ich eine Automation zusammengestellt um das Warmwasser mit dem erzeugten PV-Strom mehr als gewöhnlich zu erhitzen. Hier die Automation in der Praxis:

Legende: Grün: PV Energieerzeugung, Rot: Verbrauch;  Gelb: Wärmepumpe; Dunkelrot: Heizstab

Automation im Detail:

Auslöser Beschreibung
When meter_power is below -3000 for 6:00

meter_power spiegelt die Daten des Smartmeters wider: negative Werte (-) bedeuten einen Stromüberschuss

ID: Überschuss

When heating.Warmwasser is above 60 Sollte das Warmwasser über 60°C heiß sein, sollte die entsprechende Aktion ausschalten: 
When meter_power is above 0 kein PV-Strom Überschuss mehr

Aktionen:

[+]
Aktionen:

'Warmwasser Switch einschalten' ausführen wenn 'Confirm meter_power is below -3000, Confirm heating.Warmwasser is above 46 and below 60, Confirm the time is after entity PV West Forecast Highest power peak time - today und Confirm Pv production tomorrow is below 20' sonst 'Warmwasser Switch ausschalten'

Wenn*:

When triggered by Überschuss

Confirm heating.Warmwasser is above 48 and below 60

 Confirm Pv production tomorrow is below 20

Dann*:

Warmwasser Switch einschalten

Sonst:

Warmwasser Switch ausschalten

 

 

 

YAML-Datei:

[+]
alias: "Überschuss: Heizstab Warmwasser"
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.meter_power
    for:
      hours: 0
      minutes: 6
      seconds: 0
    below: -3000
    id: Überschuss
  - platform: numeric_state
    entity_id: sensor.heating_warmwasser
    above: 60
  - platform: numeric_state
    entity_id: sensor.meter_power
    above: 0
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Überschuss
      - condition: numeric_state
        entity_id: sensor.heating_warmwasser
        below: 60
        above: 48
      - condition: numeric_state
        entity_id: sensor.pv_production_tomorrow
        below: 20
    then:
      - type: turn_on
        device_id: ???
        entity_id: switch.warmwasser_switch
        domain: switch
    else:
      - type: turn_off
        device_id: ???
        entity_id: switch.warmwasser_switch
        domain: switch
mode: single

Um aktiv in die Steuerung meiner Heizung eingreifen zu können, verwende ich einen ESP32 und ein 4-Kanal-Relayboard, siehe: Heizung mit Home Assistant steuern

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. 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
17.06.2023 22:50
Hallo, könntest Du das mit der Poolpumpe (Zeitsteuerung) genauer erklären bzw. wie Du das mit einer Automatisierung gemach hast? Grüße Micha
✍Bernhard
gepostet am 18.06.2023 10:01
Danke für den Input, ja habe eine kleine Erklärung hinzugefügt.

Beitrag erstellt von Bernhard

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details