Praxisnahe Tutorials, auf die du zählen kannst.
Einsteiger Guide für Home Assistant

Actionable Notifications in Home Assistant

Wie du mit Home Assistant Benachrichtigungen auf deinem Handy nicht nur Infos erhältst, sondern direkt Aktionen auslösen kannst – und das alles ohne ständiges App-Hopping. Lass uns mit Actionable Notifications dein SmartHome gemeinsam auf das nächste Level heben! 🚀📱

Inhaltsverzeichnis

Voraussetzungen

App

Die Home Assistant App muss außerdem auf deinem Endgerät installiert sein und du musst die Rechte zum Anzeigen von Benachrichtigungen in den Einstellungen von iOS erteilt haben.

Basiswissen – Wie kann man Benachrichtigungen über Home Assistant senden?

Das Senden von Notifications in Home Assistant kannst du entweder über den Dienst notify.notify machen, oder über den jeweiligen Notify-Dienst der Geräte, auf denen die Home Assistant app installiert ist (den benutzte ich in den Beispielen immer).

Der Dienst notfy.notify sollte generell gesprochen nicht verwendet werden, da er sich abgekürzt erklärt, häufig unvorhersehbar verhält.

So kannst du über eine Home Assistant Aktion eine Benachrichtigung schicken, geht in den Automationen natürlich genau gleich 👇

Im Video oben sowie im Folgenden Beitrag geht es ja aber um das nächste Level der Benachrichtigungen, nämlich um Actionable Notifications 😉

Ressourcen für Actionable Notifications

Doku von HA, falls du etwas selbst nachlesen möchtesthttps://companion.home-assistant.io/docs/notifications/actionable-notifications/
iOS-Iconshttps://github.com/andrewtavis/sf-symbols-online

Automation-Codes

Hier die Automationen aus dem Video sowie 2 weitere Beispiele, damit du möglichst viel kopieren kannst! Natürlich musst du die Entitäten-IDs und Notifikations-Dienste durch deine eigenen ersetzen.

Garage offen → Schließen

Hier zuerst mal ein einfaches Beispiel: Wenn die Garage längere Zeit offen ist, wird eine Benachrichtigung verschickt, ob man diese nicht schließen will. Ohne Fancy Variablen, sondern ganz einfach gehalten und unterstützt insofern auch keine Parallelen Läufe (wäre hier ja auch nicht sinnvoll).

Screenshot der Home Assistant Automation "Garage 1.OG ist offen"
alias: Garage 1.OG ist offen
description: ""
triggers:
  - trigger: state
    entity_id:
      - cover.garage_door
    to: open
    from: closed
    for:
      hours: 0
      minutes: 20
      seconds: 0
conditions: []
actions:
  - data:
      title: Garage 1.OG offen
      message: Die Garage ist noch offen (bitte gedrückt halten)
      data:
        actions:
          - action: CLOSE_GARAGE_1OG
            title: Garage schließen
            icon: sfsymbols:square.and.arrow.down
          - action: URI
            title: Kamera-Dashboard
            uri: /1-og/cctv
            icon: sfsymbols:arrow.up.right.video.fill
    action: notify.notify
  - wait_for_trigger:
      - event_type: mobile_app_notification_action
        event_data:
          action: CLOSE_GARAGE_1OG
        trigger: event
    timeout:
      hours: 0
      minutes: 30
      seconds: 0
    continue_on_timeout: false
  - data: {}
    target:
      entity_id: cover.garage_door
    action: cover.close_cover
mode: single

Zuhause ankommen → Türen öffnen

Beispiel aus dem Video 😉

Screenshot der Home Assistant Automation "Türen öffnen"
alias: Türen öffnen
description: Öffnet die Haustür und Wohnungstür bei Ankunft
mode: parallel
max: 2
triggers:
  - entity_id:
      - sensor.sh42_arabella_oberstedt_fahrtrichtung
    from: towards
    to: arrived
    enabled: true
    id: Arabella
    trigger: state
  - entity_id:
      - sensor.sh42_simon_muller_fahrtrichtung
    from: towards
    to: arrived
    enabled: true
    id: Simon
    trigger: state
conditions:
  - condition: or
    conditions:
      - type: is_not_open
        condition: device
        device_id: b3fb6caba13b81df5afabbc1aebe8859
        entity_id: 9e4d8f62d11768ac2436a1c546031d2b
        domain: binary_sensor
      - type: is_not_open
        condition: device
        device_id: 795e199c81d2255ddbe001c597158154
        entity_id: 1ecef2a94711e81ecaf8ff58be049885
        domain: binary_sensor
  - condition: template
    value_template: >-
      {{ state_attr("automation.turen_offnen", "last_triggered") == None or (
      as_timestamp(now()) -
      as_timestamp(state_attr("automation.automation.turen_offnen",
      "last_triggered")) |int(0) ) > 300 }}
    alias: Automation wurde nicht in den letzten 5 Minuten ausgeführt
    enabled: false
actions:
  - variables:
      action_open: "{{ 'OPEN_' ~ context.id }}"
      action_no: "{{ 'NO_' ~ context.id }}"
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Simon
        sequence:
          - data:
              message: Möchtest du, dass ich die Türen öffne? (Geht 5 Min.)
              data:
                actions:
                  - action: "{{ action_open }}"
                    title: Öffnen
                  - action: "{{ action_no }}"
                    title: Nein
              title: Bitte gedrückt halten!
            action: notify.mobile_app_iphone16psimon
  - wait_for_trigger:
      - event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_open }}"
        trigger: event
    continue_on_timeout: false
    timeout:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
  - parallel:
      - if:
          - type: is_not_open
            condition: device
            device_id: b3fb6caba13b81df5afabbc1aebe8859
            entity_id: 9e4d8f62d11768ac2436a1c546031d2b
            domain: binary_sensor
        then:
          - if:
              - condition: device
                device_id: 4c80468524dc95931a283f24a61e7243
                domain: lock
                entity_id: dadad051515ba437b2a664b07b7c15e6
                type: is_unlocked
            then:
              - device_id: 4c80468524dc95931a283f24a61e7243
                domain: lock
                entity_id: dadad051515ba437b2a664b07b7c15e6
                type: lock
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 4
                  milliseconds: 0
              - device_id: 4c80468524dc95931a283f24a61e7243
                domain: lock
                entity_id: dadad051515ba437b2a664b07b7c15e6
                type: unlock
            else:
              - device_id: 4c80468524dc95931a283f24a61e7243
                domain: lock
                entity_id: dadad051515ba437b2a664b07b7c15e6
                type: unlock
        alias: Wohnungstür Aktionen bedingt ausführen
      - alias: Haustür Aktionen bedingt ausführen
        if:
          - type: is_not_open
            condition: device
            device_id: 795e199c81d2255ddbe001c597158154
            entity_id: 1ecef2a94711e81ecaf8ff58be049885
            domain: binary_sensor
        then:
          - if:
              - condition: device
                device_id: 6cea6c4d797de7ed9bc3bb8cbdf5005d
                domain: lock
                entity_id: f9dc4db3d2b6a972f63a0dcfcb67d982
                type: is_unlocked
            then:
              - device_id: 6cea6c4d797de7ed9bc3bb8cbdf5005d
                domain: lock
                entity_id: f9dc4db3d2b6a972f63a0dcfcb67d982
                type: lock
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 4
                  milliseconds: 0
              - device_id: 6cea6c4d797de7ed9bc3bb8cbdf5005d
                domain: lock
                entity_id: f9dc4db3d2b6a972f63a0dcfcb67d982
                type: unlock
            else:
              - device_id: 6cea6c4d797de7ed9bc3bb8cbdf5005d
                domain: lock
                entity_id: f9dc4db3d2b6a972f63a0dcfcb67d982
                type: unlock

Bewegung bei Abwesenheit erkannt → Alarm/Kameras

Das 2. Beispiel aus dem Video 🎉

Screenshot der Home Assistant Automation "Abwesenheit - Benachrichtigung bei Bewegung"
alias: Abwesenheit - Benachrichtigung bei Bewegung
description: ""
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.bewegungsmelder_bad_motion
    to: "on"
    from: "off"
    id: test
  - trigger: state
    entity_id:
      - binary_sensor.hmip_smi55_2_00319d899ed9aa_motion
    to: "on"
    from: "off"
  - trigger: state
    entity_id:
      - binary_sensor.garage_hinten_bewegung
    to: "on"
    from: "off"
  - trigger: state
    entity_id:
      - binary_sensor.hue_bewegungsmelder_occupancy
    to: "on"
    from: "off"
  - trigger: state
    entity_id:
      - binary_sensor.bewegungsmelder_flur_occupancy
    to: "on"
    from: "off"
conditions:
  - condition: numeric_state
    entity_id: zone.home
    below: 1
    alias: Home Zone ist unter 1 (keiner zuhause)
    enabled: true
actions:
  - variables:
      action_alarm: "{{ 'ALARM_' ~ context.id }}"
      action_silence: "{{ 'SILENCE_' ~ context.id }}"
  - action: notify.mobile_app_iphone16psimon
    metadata: {}
    data:
      message: Bewegung zuhause von {{ trigger.to_state.name }} erkannt
      data:
        push:
          interruption-level: time-sensitive
        actions:
          - action: "{{ action_alarm }}"
            title: Alarm aktivieren
            icon: sfsymbols:bell
          - action: "{{ action_silence }}"
            title: Alarm deaktivieren
            icon: sfsymbols:bell.slash
          - action: URI
            title: Kamera-Dashboard
            uri: /1-og/cctv
            icon: sfsymbols:arrow.up.right.video.fill
  - wait_for_trigger:
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_alarm }}"
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_silence }}"
    timeout:
      hours: 0
      minutes: 10
      seconds: 0
    continue_on_timeout: false
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_alarm }}"
        sequence:
          - action: select.select_option
            metadata: {}
            data:
              option: alarm
            target:
              entity_id: select.aqara_smart_smoke_detector_buzzer
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_silence }}"
        sequence:
          - action: select.select_option
            metadata: {}
            data:
              option: mute
            target:
              entity_id: select.aqara_smart_smoke_detector_buzzer
mode: single

Fazit

Actionable Notifications sind mehr als nur eine technische Spielerei – sie sind der Schlüssel zu einem intuitiven, responsiven Smarthome. Sie reduzieren Komplexität, sparen Zeit und machen die Hausautomatisierung endlich so einfach, wie sie immer sein sollte: unsichtbar und selbstverständlich.

Home Assistant macht’s möglich – und wir sind mittendrin in dieser spannenden Entwicklung. Der größte Gewinn? Mehr Kontrolle, weniger Aufwand und einfache Benutzung auch für Nichttechniker → Genau das ist die Essenz moderner Smarthome-Technologie.

Verpasse keine Tipps!

Ich sende keinen Spam! Erfahre mehr in der Datenschutzerklärung.

Transparenz: In diesem Artikel sind Partnerlinks enthalten. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhalte ich ei­ne kleine Provision. Für euch ändert sich am Preis nichts & Partnerlinks haben keinerlei Einfluss auf meine Berichterstattung. Vielen Dank für deine Unterstützung!

Gründer von simon42. Schreibt hier ehrlich und leidenschaftlich über Smart Home und Technik Themen, denn das Zuhause wurde bereits von Sprachassistenten übernommen und die Kontrolle abgegeben 😁

Nennenswerte Antworten

  1. Avatar for mase mase says:

    Wie immer ein super Video!
    Sehr verständlich erklärt.

    Ich würde das ganze aber gerne “einen Schritt weiter” machen, komme nur nicht drauf wie.
    Folgende Ausgangssituation:

    Ich meiner “Wohnung verlassen”-Automation gibt es den Step, dass ich eine Benachrichtigung bekommen wenn ein Fenster geöffnet ist (Aqara Sensoren). Diese zeigt mir an welche/s offen ist:

    metadata: {}
    data:
      title: Home Assistant
      message: >-
        🪟 Fenster {{ expand('binary_sensor.sensor_windows_all')|selectattr('state',
        'eq', 'on')|map(attribute='name')|list|join(', - ') }} ist offen!
    action: notify.mobile_app_iphone_david
    

    Jetzt wäre es natürlich super, dass ich die Möglichkeit habe über die Notification den bzw. die Rollläden zu öffnen/schließen bei den geöffneten Fenster.

    In einer anderen Automation, zum Öffnen der Rollläden wenn ein Fenster geöffnet wird nutze, ich Variablen um herauszufinden bei welchem Fenster welcher Rollladen sich öffnen soll:

    alias: open Cover
    description: open Cover when Window is open
    triggers:
      - entity_id:
          - binary_sensor.window_hallway_contact
          - binary_sensor.window_bedroom_1_contact
          - binary_sensor.window_bedroom_2_contact
          - binary_sensor.window_office_1_contact
          - binary_sensor.window_office_2_contact
          - binary_sensor.window_livingroom_1_contact
          - binary_sensor.window_livingroom_2_contact
          - binary_sensor.window_livingroom_3_contact
          - binary_sensor.door_balcony_contact
        from: "off"
        to: "on"
        trigger: state
    conditions: []
    actions:
      - variables:
          covers:
            window_hallway_contact: hallway
            window_bedroom_1_contact: bedroom_1
            window_bedroom_2_contact: bedroom_2
            window_office_1_contact: office_1
            window_office_2_contact: office_2
            window_livingroom_1_contact: livingroom_1
            window_livingroom_2_contact: livingroom_2
            window_livingroom_3_contact: livingroom_3
            door_balcony_contact: balcony
      - data:
          position: 100
        target:
          entity_id: cover.{{ covers[trigger.to_state.object_id] }}
        action: cover.set_cover_position
    mode: single
    

    ich würde jetzt natürlich gern beides kombinieren, damit ich in der Notification einfach nur auf “öffnen” oder “schließen” gehen muss und den Rollladen am geöffneten Fenster bzw. den geöffneten Fenstern auf/zu geht.

    Da ich ja aber {{ expand('binary_sensor.sensor_windows_all')|selectattr('state', 'eq', 'on')|map(attribute='name')|list|join(', - ') }} in der Notification nutze, ist das glaube ich nicht so einfach, bzw. komme ich nicht drauf.

    Hat da jemand eine Idee?

  2. Avatar for mase mase says:

    sollte jemand hier drüber stolpern und das gleiche vor haben:

    die notification:

    metadata: {}
    data:
      title: Home Assistant
      message: >-
        🪟 Fenster {{ expand('binary_sensor.sensor_windows_all')|selectattr('state',
        'eq', 'on')|map(attribute='name')|list|join(', - ') }} ist offen!
    
    
        🔘 für Aktion halten
      data:
        actions:
          - action: open
            icon: sfsymbols:arrow.up.circle
            title: diese Cover öffnen        
          - action: close
            icon: sfsymbols:arrow.down.circle
            title: diese Cover schließen
    action: notify.mobile_app_iphone_david
    

    die automation:

    alias: Fenster Rolladensteuerung via Mobile Notification
    description: ""
    triggers:
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: open
        id: open
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: close
        id: close
    actions:
      - variables:
          action: "{{ trigger.event.data.action }}"
          covers:
            binary_sensor.window_hallway_contact: cover.hallway
            binary_sensor.window_bedroom_1_contact: cover.bedroom_1
            binary_sensor.window_bedroom_2_contact: cover.bedroom_2
            binary_sensor.window_office_1_contact: cover.office_1
            binary_sensor.window_office_2_contact: cover.office_2
            binary_sensor.window_livingroom_1_contact: cover.livingroom_1
            binary_sensor.window_livingroom_2_contact: cover.livingroom_2
            binary_sensor.window_livingroom_3_contact: cover.livingroom_3
            binary_sensor.door_balcony_contact: cover.balcony
      - choose:
          - conditions:
              - condition: trigger
                id:
                  - open
            sequence:
              - repeat:
                  for_each: "{{ covers.keys() | select('is_state', 'on') | list }}"
                  sequence:
                    - target:
                        entity_id: "{{ covers[repeat.item] }}"
                      data:
                        position: 100
                      action: cover.set_cover_position
          - conditions:
              - condition: trigger
                id:
                  - close
            sequence:
              - repeat:
                  for_each: "{{ covers.keys() | select('is_state', 'on') | list }}"
                  sequence:
                    - target:
                        entity_id: "{{ covers[repeat.item] }}"
                      data:
                        position: 20
                      action: cover.set_cover_position
    mode: parallel
    
  3. Hallo Simon, hallo Community,
    wieder einmal danke für dieses tolle Video.
    Ich habe für einen anderen Anwendungsfall die Actionable Notification hergenommen. Allerdings überspringt er zum Schluss IMMER eine der beiden Auswahlmöglichkeiten und beendet die Automation und ich sitze seit drei Stunden hier und komme einfach nicht weiter. :smiley: Warum zum Henker nimmt er keine der beiden Optionen? Ich habe den Code 1:1 kopiert und entsprechend meiner Konfiguration angepasst.
    Bildschirmfoto 2025-02-09 um 18.09.45

    alias: 2h Test Abwesenheit Klima weiter#
    description: ""
    triggers:
      - trigger: numeric_state
        entity_id:
          - zone.home
        for:
          hours: 0
          minutes: 10
          seconds: 0
        below: 1
        enabled: false
      - trigger: state
        entity_id:
          - input_boolean.testschalter_fur_automationen
        from: "off"
        to: "on"
    conditions:
      - condition: state
        entity_id: input_select.heizmodus
        state: Heizen (tagsüber)
    actions:
      - variables:
          action_ja: "{{ 'ja_' ~ context.id }}"
          action_nein: "{{ 'nein_' ~ context.id }}"
      - action: notify.mobile_app_kevins_iphone_14_pro
        metadata: {}
        data:
          title: Heizung.
          message: Soll ich die Heizung herunterdrehen? (bitte gedrückt halten)
          data:
            actions:
              - action: "{{ action_ja }}"
                title: Ja, bitte.
              - action: "{{ action_nein }}"
                title: Nein, danke.
      - wait_for_trigger:
          - event_type: mobile_app_notification_action
            event_data:
              action: "{{ action_ja }}"
            trigger: event
          - event_type: mobile_app_notification_action
            event_data:
              action: "{{ action_nein }}"
            trigger: event
        timeout:
          hours: 0
          minutes: 5
          seconds: 0
          milliseconds: 0
        continue_on_timeout: false
        enabled: true
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ wait.trigger.event.data.action == \"action_ja\" }}"
            sequence:
              - action: notify.mobile_app_ipad_von_kevin_neu
                metadata: {}
                data:
                  message: Ja
                  title: Ja
          - conditions:
              - condition: template
                value_template: "{{ wait.trigger.event.data.action == \"action_nein\" }}"
            sequence:
              - action: notify.mobile_app_ipad_von_kevin_neu
                metadata: {}
                data:
                  title: NEIN
                  message: NEIN
        enabled: true
    mode: parallel
    max: 10
    
    

    Vielleicht findet ja jemand den Fehler. :slight_smile:
    Danke für eure Hilfe.
    Liebe Grüße
    Kevin


    EDIT:

    Ich konnte das Problem in der Zwischenzeit lösen.
    Ich habe die Variablen-Definition weggelassen, die Variablen in der ActionableNotification einfacher gehalten und entsprechend im “Wait-Trigger” ergänzt.
    Für die, die es interessiert anbei der Code. :slight_smile:

    actions:
      - action: notify.mobile_app_kevins_iphone_14_pro
        metadata: {}
        data:
          title: Heizung.
          message: Soll ich die Heizung herunterdrehen? (bitte gedrückt halten)
          data:
            actions:
              - action: JA
                title: Ja, bitte.
              - action: NEIN
                title: Nein, danke.
      - wait_for_trigger:
          - event_type: mobile_app_notification_action
            event_data:
              action: JA
            trigger: event
          - event_type: mobile_app_notification_action
            event_data:
              action: NEIN
            trigger: event
        timeout:
          hours: 0
          minutes: 10
          seconds: 0
          milliseconds: 0
        continue_on_timeout: false
        enabled: true
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ wait.trigger.event.data.action == \"JA\" }}"
            sequence:
              - action: input_select.select_option
                metadata: {}
                data:
                  option: Absenkung (nachts/außer Haus)
                target:
                  entity_id: input_select.heizmodus
                enabled: false
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 3
                  milliseconds: 0
              - action: notify.mobile_app_kevins_iphone_14_pro
                metadata: {}
                data:
                  title: Alles klar, Chef!
                  message: Heizung ist heruntergedreht. 🫡
          - conditions:
              - condition: template
                value_template: "{{ wait.trigger.event.data.action == \"NEIN\" }}"
            sequence:
              - action: notify.mobile_app_kevins_iphone_14_pro
                metadata: {}
                data:
                  title: Dann halt näääächt.
                  message: "#GretaIstTraurig 😢"
                enabled: true
        enabled: true
    
  4. @simon42
    Ich hoffe mal das das Video “längst überfällig” und nicht “längst überflüssig” ist. :rofl:

    Ich löse das mit den Messages ohne Variablen, nämlich so:


    und mit einem Trigger springe ich wieder in dieselbe Automation rein. (Weil man 10min Zeit hat zu reagieren)

    So muss die Automation nicht warten.

    Wenn man einen “Tag” in der “Frage”-Message hinterlegt, kann man auch so witzige Sachen machen wie die Nachricht wieder von den Geräten die nicht gedrückt haben zu löschen. :wink:

  5. Das hoffe ich doch auch :rofl::see_no_evil:

    Danke fürs Teilen deiner Automation :tada:

Setze die Diskussion fort unter community.simon42.com

2 mehr antworten

Teilnehmer

Avatar for system Avatar for simon42 Avatar for mase Avatar for Kevin-HH Avatar for der_Micro Avatar for MiGoRy

Schreibe einen Kommentar