Direkt zum Hauptinhalt

Push Notifactions / Benachrichtigungen

Beschreibung:

Wenn man die Home Assistant Companion App installiert hat auf Android oder iOS kann man benachrichtungen senden.
Natürlich kann man auch andere Geräte Nachrichten senden, das hängt davon ab, welche Entität (Device) ausgewählt wurde, was die Benachrichtigung erhalten soll.

Kanäle für Benachrichtungen  Android:

Es gibt zwei Arten von Kanälen

  • Push Benachrichtungskanäle (Nur auf Android)
    • General: Für allgemeine Benachrichtigungen, die keine spezielle Kategorisierung benötigen.

    • Camera: Benachrichtigungen, die mit Kameras oder Bildern verknüpft sind (z. B. Snapshot von einer Sicherheitskamera).

    • Location: Benachrichtigungen im Zusammenhang mit Standortaktualisierungen (z. B. Standortänderungen des Geräts).

    • Alert: Dringende Warnungen, die Aufmerksamkeit erfordern (visuell, aber ohne spezifische Audio-Streams).
    • Progress: Für Benachrichtigungen, die den Fortschritt eines Prozesses darstellen (z. B. Updates oder Installationen).

    • Eigene Kanäle, es können auch Kanäle selbst erstellt werden.


Hinweis:

Push Töne werden auf den Medianausgabe Streams ausgegben
Push Töne funktionieren nicht im Lautlosmodus, selbst wenn bei Push Benachrichtung im Channel,
auch bei Bitte nicht stören, melden angehakt ist.
Wenn bitte nicht nicht stören angehakt ist lässt nur die Benachrichigung dann anzeigen, den Ton hört man trotzdem nicht!

Workaround: Die Lautstärke per Befehl vorher hochstellen kommen wir später zu..
Hier schon mal der Befehl fürs laut stellen des Benachrichtungs Media Stream

data:
      message: command_volume_level
      title: "100"
      data:
        channel: notification_stream
        
        
Als JSON Data für den Service in Node Red

{
    "message": "command_volume_level",
    "data": {
        "command": 100,
        "media_stream": "notification_stream"
    }
}
  • Medien Ausgabe Kanäle für Akustik (Nur Android)
    • alarm_stream: Stelle die Lautstärke für den Alarm-Stream ein.
    • alarm_stream_max: Stelle die Lautstärke für den Alarm-Stream TTS ein
      (Aber nur wenn die MESSAGE  TTS ist (TextToSpeech), bei allen anderen wirds ignoriert.
    • call_stream: Stelle die Lautstärke für den Anruf-Stream ein.
    • dtmf_stream: Stelle die Lautstärke für DTMF-Töne ein.
    • music_stream: Stelle die Lautstärke für den Musik-Stream ein.
    • notification_stream: Stelle die Lautstärke für den Benachrichtigungs-Stream ein.
    • ring_stream: Stelle die Lautstärke für den Klingel-Stream ein.
    • system_stream: Stelle die Lautstärke für den System-Stream ein.
    • Anything else: Die Benachrichtigung wird als normale Benachrichtigung gepostet und der Befehl wird nicht verarbeitet.

Kanäle für Benachrichtungen iOS

Auf iOS gibt es Keine Kanäle in diesem Sinne wie bei Android. Hier können wir zwischen 3 Kategorien wählen

Die drei Kategorien sind:

  1. notification (Standard)

    • Beschreibung: Dies ist die Standardkategorie. Die Benachrichtigung wird in der Mitteilungszentrale angezeigt, spielt eventuell einen Ton ab (abhängig von den Geräteeinstellungen) und erscheint als Banner.
      Wird keine Category angegeben, wird sowieo notifiction benutzt. Ist also Standard
    • Geeignet für: Allgemeine Benachrichtigungen, die keine besondere Aufmerksamkeit erfordern.
    • Beispiel:
      {
        "message": "Neue Nachricht erhalten.",
        "data": {
          "push": {
            "category": "notification"
          }
        }
      }
      

  2. alarm

    • Beschreibung: Diese Kategorie priorisiert die Benachrichtigung stark. Sie wird auch dann abgespielt, wenn der Nicht stören-Modus aktiv ist, und ein lauter Ton wird abgespielt (vorausgesetzt, die Benachrichtigung hat einen Ton definiert).
    • Geeignet für: Kritische Alarme wie Rauchmelder, Einbruchalarm oder medizinische Warnungen.
    • Beispiel:
      {
        "message": "Rauchmelder-Alarm! Bitte überprüfen!",
        "data": {
          "push": {
            "category": "alarm"
          }
        }
      }
      




  3. silent

    • Beschreibung: Die Benachrichtigung wird still gesendet, ohne Banner, Ton oder Mitteilung in der Mitteilungszentrale. Sie wird nur in Home Assistant verarbeitet.
    • Geeignet für: Hintergrundaufgaben, stille Benachrichtigungen oder Datenübertragungen an Home Assistant.
    • Beispiel:
      {
        "message": "Daten aktualisiert.",
        "data": {
          "push": {
            "category": "silent"
          }
        }
      }
      

      Siehe auch Tabelle Beschreibung der Parameter hier


Benachrichtung TTS Android only

Um TTS Benachrichtungen zu senden, erstelle wir einen Service call.
Wählen notify bei Domäne aus und service wenn es ein rundruf an alle werden soll notify aus explicit das Gerät.
Über die 3 Punkte erstellen wir die Nachricht

Auswahl_424.png

Quelltext

{
    "message": "TTS",
    "data": {
        "priority": "high",
        "media_stream": "alarm_stream",
        "tts_text": "Rauchmelder Fahrradschuppen Rauch erkannt"
    }
}

Parameter

Parameter Typ Beschreibung Beispiel
message String Der Haupttext der Benachrichtigung, der dem Benutzer angezeigt wird. Hier wird TTS als Befehl ausgewertet und es erscheint keine Benachrichtung, da die TTS einfach abgespielt wird.
"TTS"
data Objekt Zusätzliche Daten und Einstellungen für die Benachrichtigung. Siehe unten.
 priority String Die Wichtigkeit der Benachrichtigung. high sorgt dafür, dass die Benachrichtigung mit hoher Priorität gesendet wird. "high"
 media_stream String Gibt an, welcher Audiokanal für die Benachrichtigung verwendet wird. alarm_stream spielt sie über den Alarmkanal ab. Dieser Kanal ist auch im Silent modus erreichbar und kann auch nicht gemuted werden.
"alarm_stream"
 tts_text String Text, der über Text-to-Speech (TTS) wiedergegeben werden soll. "Rauchmelder Fahrradschuppen Rauch erkannt"

Benachrichtung TTS ios

Eigentlich ist es keine Benachrichtung, aber es passt trotzdem hier her.
Denn iOS unterstützt keine TTS Push Benachrichtung, aber mit einem trick können wir das über die App machen.
Mittels Plugin asu dem HACS Store.

Auswahl_425.png

Dann auf die 3 Punkte und auf Herunterladen klicken.Menü_014.png

Nun die letzte Version auswählen und herunterladen anklicken.

Auswahl_426.png

nachdem das heruntergeladen wurde auf Geräte gehen und auf integration hinzufügen klicken.
Als Suchbgriff brow eingeben und die integration Browser mod auswählen.
Auswahl_427.png
Nun erscheint in der Seitenleiste Browser mod.
Dieses brauchen wir aber erst auf dem iPAD. (Es sei denn Ihr seid schon auf dem iPAD, dann machen wir da später weiter.
Jetzt muss noch die configration.yaml angepasst werden.

Wir fügen folgende abschnitte hinzu.
Solltet ihr den google translate teil schon haben, weil ihr den für was anderes konfiguriert habt, könnt ihr den natürlich weg lassen.

...
# Text to speech
tts:
  - platform: google_translate
    language: de
...
#tatsächlich nur den namen, nichts mehr
browser_mod:
...

Danach Home Assistant neustarten (yaml neuladen reicht nicht)

Nun auf dem Gerät in den Reiter Browsermod gehen
Den haken zum Registrieren rein packen

IMG_0147.PNG

Nun geben wir unserem gerät hinter der ID Namen zum identifizieren.

IMG_0148.PNG

Nun nach dem Speichern wir der link zu den Profilen freigeschaltet, da drauf klicken nach unten scrollen

IMG_0149.PNG

Nun das Auto trennen raus nehmen.

IMG_0150.PNG

Ein TTS Objekt in Node RED erstellen

Ein call service erstellen domain tts , service google translate, auswählen und als entity unser ipad (die Browser ID)

grafik.png

ALs json data haben wir nur Message und sprache

{
    "message": "Rauchmelder {{ global.rauchmeldertext }} Rauch erkannt",
    "language": "de"
}

grafik.png

Benachrichtung mit Aktionen

Man kann auch Benachrichtungen mit Buttons erstellen, die Aktionen ausführen wie Seiten öffnen oder variablen ändern in node red.

Dazu legen wir uns eine Benachrichtigung an mit zwei Buttons.
Dazu wieder einen call service reinziehen und vom typ notify auswählen.
Dann unter service notify für alle Geräte oder das Gerät an das gesendet werden soll, explicit auswählen.
Dann auf die 3 Punkte um unseren Inhalt der Benachrichtung zu definieren

Auswahl_424.png

Der Quelltext

{
    "message": "Rauchmelder-Alarm! Bitte überprüfen!",
    "data": {
        "channel": "Alarm",
        "priority": "high",
        "importance": "high", 
        "ttl": 0,
        "push":{
            "category": "alarm",
            "interruption_level": "time-sensitive"
        },
        "actions": [
            {
                "action": "SNOOZE",
                "title": "Rauchmelder Stoppen",
                "icon": "mdi:bell-alert"
            },
            {
                "action": "IRGENDWAS",
                "title": "IRGENDWAS Stoppen",
                "icon": "mdi:bell-alert"
            }
        ]
    }
}

Beschreibung der Parameter:
Parameter Typ Beschreibung Beispiel
message String Die Hauptnachricht der Benachrichtigung, die dem Benutzer angezeigt wird. "Rauchmelder-Alarm! Bitte überprüfen!"
data Objekt Enthält zusätzliche Informationen und Konfigurationen für die Benachrichtigung. Siehe unten.
 channel String Der Benachrichtigungskanal, der für Android verwendet wird. Kanäle steuern Benachrichtigungseigenschaften wie Ton oder Priorität. "Alarm"
 priority String

priority ist ein älteres, legacy‑Feld, das vor allem auf Android < 8.0 (NotificationCompat) greift.

Auf neueren Geräten (ab Android 8.0) wird priority zwar noch akzeptiert, empfohlen wird aber, den Kanal per importance korrekt zu konfigurieren und priority nur als Fallback zu verwenden.

Die Property priority legt fest, wie wichtig die Notification vom Betriebssystem eingestuft wird und beeinflusst vor allem auf Android, ob sie als Heads‑Up‑Popup aufplatzt oder eher still im Hintergrund landet.

  • priority: "high" ⇒ kurze Heads‑Up‑Notification oben am Bildschirm, mit Ton (vorausgesetzt der Kanal/Stream ist entsprechend konfiguriert)

  • priority: "default" ⇒ normale Mitteilung ohne Popup

  • priority: "low" oder "min" ⇒ möglichst unaufdringlich (kein Ton, kein Banner)

Tipp: Für Alarm‑ oder TTS‑Nachrichten immer "high" verwenden, damit die Nachricht wirklich direkt auffällt.

"high"
importance String

Auf Android‑Geräten (ab Version 8.0+) wird die Wichtigkeit eines Notification‑Kanals über das importance‑Feld gesteuert. Die möglichen Werte sind:

  • min
    low
    default
    high
    max

Die Beschreibung der Werte Siehe Tabelle importance


 ttl Integer ttl steht für Time To Live und bestimmt, wie lange eine Notification auf dem Server zwischengespeichert und immer wieder zugestellt wird, falls das Gerät gerade offline ist.
  • ttl: 0 → Nachricht wird sofort zugestellt und nicht zwischengespeichert.

  • ttl: 3600 → Nachricht bleibt bis zu 1 Stunde aktiv und wird wiederholt, bis sie zugestellt oder die Stunde abgelaufen ist.

Merke: Ein hoher ttl‑Wert sorgt dafür, dass du auch dann noch benachrichtigt wirst, wenn dein Handy gerade keine Verbindung hatte.

0
push Array
Push ist ein Array für iOS, zum Verständnis sind bei den nächsten beiden Parametern das Wort push davor, damit man man weis wo zu es gehört. Der Typ String bezieht sich auf das Element in push

push.category String

Auf iOS gibt es kein Äquivalent zu den Android‑Feldern priority oder importance – die werden von der Companion App schlicht ignoriert. Stattdessen steuerst du das Verhalten über zwei iOS‑spezifische Felder in deinem Payload:

 

push.category

  • Legt fest, in welche Kategorie (notification, alarm, silent) die Notification fällt.

    alarm spielt deinen definierten Ton auch im „Nicht stören“ ab.

Es werden folgende Werte unterstützt:

  • notification (Standard)

    • Anzeige: Banner in der Mitteilungszentrale und auf dem Sperrbildschirm

    • Ton: Spielt einen Ton ab, sofern das Gerät nicht stumm geschaltet ist und der User es erlaubt

    • Einsatz: Allgemeine Hinweise, Status‑Updates, alles, was keine besondere Dringlichkeit hat

  • alarm

    • Anzeige: Banner und Mitteilung wie bei „notification“, selbst im „Nicht stören“‑Modus

    • Ton: Laut und durchdringend, auch wenn das Gerät stumm ist oder DND aktiv

    • Einsatz: Kritische Warnungen (Rauchmelder, Einbruch, medizinische Notfälle), bei denen man sofortige Aufmerksamkeit benötigt

  • silent

    • Anzeige: Kein sichtbarer Banner, kein Ton, keine Badges

    • Verarbeitung: Wird nur intern von der Companion App entgegengenommen und in Home Assistant verarbeitet

    • Einsatz: Hintergrund‑Signale, Status‑Synchronisation, Updates ohne User‑Unterbrechung (z. B. Daten‑Refresh)

"data": {
  "push": {
    "category": "alarm"
  }
}
push.interruption_level String
  • notification (Standard)

    • Anzeige: Banner in der Mitteilungszentrale und auf dem Sperrbildschirm

    • Ton: Spielt einen Ton ab, sofern das Gerät nicht stumm geschaltet ist und der User es erlaubt

    • Einsatz: Allgemeine Hinweise, Status‑Updates, alles, was keine besondere Dringlichkeit hat

  • alarm

    • Anzeige: Banner und Mitteilung wie bei „notification“, selbst im „Nicht stören“‑Modus

    • Ton: Laut und durchdringend, auch wenn das Gerät stumm ist oder DND aktiv

    • Einsatz: Kritische Warnungen (Rauchmelder, Einbruch, medizinische Notfälle), bei denen man sofortige Aufmerksamkeit benötigt

  • silent

    • Anzeige: Kein sichtbarer Banner, kein Ton, keine Badges

    • Verarbeitung: Wird nur intern von der Companion App entgegengenommen und in Home Assistant verarbeitet

    • Einsatz: Hintergrund‑Signale, Status‑Synchronisation, Updates ohne User‑Unterbrechung (z. B. Daten‑Refresh)

 "data": {
  "push": {
    "category": "alarm",
    "interruption_level": "time-sensitive"
  }
}
 actions Array Eine Liste von Aktionen, die in der Benachrichtigung angezeigt werden. SIehe json Data
 action String Der interne Schlüssel für die Aktion, der in Automatisierungen verwendet wird, wenn die Schaltfläche gedrückt wird.
Das ist auch der Wert den wir dann auswerten.
"SNOOZE"
 title String Der Text des Button, der in der Benachrichtigung angezeigt wird. "Rauchmelder Stoppen"
 icon String (Optional) Ein Icon, das mit der Aktion verknüpft ist. iOS unterstützt dies, aber Android zeigt normalerweise keine Icons an. "mdi:bell-alert"
Tabelle importance Werte und unterschied zu Priority
Stufe Konstante Verhalten Entspricht (Android 7.x priority)
None IMPORTANCE_NONE (0) Keine Anzeige, kein Ton, nicht im Benachrichtigungsbereich sichtbar (kein Äquivalent)
Min IMPORTANCE_MIN (1) Kein Ton, kein Icon, nicht im Status‑Bar‑Bereich PRIORITY_MIN
Low IMPORTANCE_LOW (2) Kein Ton, nur in der Benachrichtigungs‑Leiste PRIORITY_LOW
Default IMPORTANCE_DEFAULT (3) Ton, erscheint in Leiste PRIORITY_DEFAULT
High IMPORTANCE_HIGH (4) Ton + Heads‑Up‑Popup (aufklappbar) PRIORITY_HIGH / PRIORITY_MAX

Kurz erklärt:

  • IMPORTANCE_HIGH erzeugt ein kurzes Popup (Heads‑Up) und Ton.

  • IMPORTANCE_DEFAULT spielt Ton, aber ohne Popup.

  • IMPORTANCE_LOW/MIN sind ruhig, ohne Ton bzw. ohne Leisten‑Icon.

  • IMPORTANCE_NONE unterdrückt die Notification komplett. Android DevelopersAndroid Developers

Unterschied zu priority:

  • priority ist der ältere Parameter (Android ≤7.x) und steuert ebenfalls Popup vs. stille Notification.
    Am besten beide Parameter definieren priority und importance um maximale Kompatibilität zu gewährleisten

Notfication, stehen lassen, nicht wegwischbar, bei drauf tippen nicht auslösen:

Manchmal möchte man das die Notification ein Button gedrückt werden muss, mit drauf tippen soll auch nichts auseglöst werden.
Sondern nur beim Button

Erklärung der Optionen:
  • sticky: true: Die Benachrichtigung bleibt auf dem Bildschirm, bis eine Aktion ausgeführt wird oder sie manuell entfernt wird.

  • persistent: true: Die Benachrichtigung kann nicht weggewischt werden, sondern verschwindet nur, wenn eine Aktion (wie Stop) ausgeführt wird.

Verhalten:
  • Mit sticky allein: Die Benachrichtigung bleibt bestehen, aber der Benutzer kann sie durch Wischen entfernen.

  • Mit sticky + persistent: Die Benachrichtigung kann nur durch eine Aktion (z. B. den Stop-Button) entfernt werden und ist nicht wegwischbar.

Was solltest du verwenden?
  • Wenn es dir wichtig ist, dass die Benachrichtigung immer präsent bleibt, bis der Benutzer aktiv darauf reagiert, ist persistent: true ideal.

  • Falls es dem Benutzer erlaubt sein soll, die Benachrichtigung durch Wischen zu entfernen, dann verwende nur sticky: true.

Beides gibt dir Flexibilität, je nachdem, wie wichtig die Benachrichtigung in deinem Fall ist.

Android:
  • sticky: Funktioniert einwandfrei, da Android-native Benachrichtigungen standardmäßig Sticky-Funktionalitäten unterstützen.

  • persistent: Funktioniert ebenfalls, da Android es ermöglicht, Benachrichtigungen unentfernbar zu machen.
    Es muss aber dazu ein Tag angeben werden siehe ioS und Android weiter unten


iOS:
  • sticky: Nicht direkt unterstützt, da iOS keine Sticky-Benachrichtigungen in der gleichen Weise wie Android bietet. Auf iOS werden Benachrichtigungen entweder im Benachrichtigungscenter angezeigt oder verschwinden nach einer festgelegten Zeit, wenn sie nicht persistent sind.

  • persistent: Wird unterstützt, da die Home Assistant Companion App dies auf iOS nutzt, um kritische Benachrichtigungen (wie Rauchmelder) dauerhaft sichtbar zu halten, bis der Benutzer darauf reagiert.

iOS und Android:
  • tagWird benötigt um die Nachricht eine ID zu geben, denn mit der ID kann die Nachricht angesprochen werden, zum
    Beispiel um sie Programm technisch zu löschen, denn auf dem Smartphone lässt Sie sich nicht mehr löschen.
    Auch wenn der Button ausgelöst wird, bleibt die Nachricht bestehen
    Wichtig! Wird der Tag vergessen bleibt die Nachricht wegwischbar!

Im Beispiel Quelltext, wir lassen sticky für Android einfach stehen.:

{
    "message": "Rauchmelder-Alarm! Bitte überprüfen!",
    "data": {
        "channel": "Alarm",
        "priority": "high",
        "importance":"high",
        "ttl": 0,
        "sticky": true,
        "persistent": true,
        "tag": "android_phone_anna",
        "actions": [
            {
                "action": "SNOOZE",
                "title": "Rauchmelder Stoppen",
                "icon": "mdi:bell-alert"
            },
            {
                "action": "IRGENDWAS",
                "title": "IRGENDWAS Stoppen",
                "icon": "mdi:bell-alert"
            }
        ]
    }
}

Den Button druck auswerten

Dazu brauchen wir ein Alle Events Node

image.png

Dann eine Switch Node zum auswerten

image.png

Nun können wir die Events node mit der Switch node verbinden.
Der Oberste Ausgang der Switchnode wird true, also wenn der button gedrückt wurde.

image.png

Die Eigenschaft der Events Node

image.png

Die Eigenschaft der Switch node

Namen vergeben

Wir wollen msg.payload.event.action auswerten, den Button

Und nun die Werte als string rein.
Über hinzufügen können mehrer Werte angegeben werden, jeder ausgang ist für den jeweiligen Wert.
Hier snooze PIN1 IRGENDWAS PIN2

image.png


Sollten mehrer buttons vorhanden zein können die pin zwei und soweiter für weitere Buttons benutzt werden.

Tipp, wenn auf verschiednenen Geräten Buttons Ausgewertet werden sollen, die in verschiedenen Flows drin sind.
Macht es sinn die Werte der Buttons unique für jedes Gerät zu machen. Sprich beim Send button den Button unique definieren und beim Auswerten diesen wieder zu nehmen.

Beispiel beim Button senden

image.png

Und dann beim Button empfangen

image.png

Bei den anderen Flows würde man dann andere namen nehmen.
fertig

Nicht weg wischbare Nachricht über den Tag wieder löschen.

message, der Befehl das eine Notification entfernt werden soll, hier "clear_notification"
Als data muss nur der tag der zu löschenden Notification übergeben werden
Hier :   "tag": "android_phone_anna"

{
    "message": "clear_notification",
    "data": {
       "tag": "android_phone_anna"
    }
}

Das die Home Assistant App nicht geöffnet wird, wenn die Nachricht angeklickt wird.

Für iOS wird URL verwendet mit dem Wert null,
Für Android wird clickAction mit noAction verwendet

{
    "message": "Rauchmelder-Alarm! Bitte überprüfen!",
    "data": {
        "channel": "Alarm",
        "priority": "high",
        "ttl": 0,
        "sticky": true,
        "persistent": true,
        "tag": "android_phone_anna",
        "url": null,
        "clickAction": "noAction",
        "actions": [
            {
                "action": "SNOOZE",
                "title": "Rauchmelder Stoppen"
            },
            {
                "action": "IRGENDWAS",
                "title": "IRGENDWAS Stoppen"
            }
        ]
    }
}

NUR iOS Push Benachrichtung auch anzeigen, wenn die Home assistant APP im vordergrund also geöffnet ist:

Das Feld presentation_options betrifft nur die iOS-App und steuert, wie Notifications angezeigt werden, wenn die Companion‑App im Vordergrund läuft. Standardmäßig blendet iOS eingehende Pushes aus, sobald die App aktiv ist – mit presentation_options kannst du das ändern.

Mögliche Werte (als Array oder einzelner String):

  • alert → zeigt ein Banner/Popup

  • sound → spielt den definierten Ton ab

  • badge → aktualisiert das App‑Icon‑Badge

Du kannst mehrere Optionen kombinieren, z. B.:

{
  "message": "Rauchmelder-Alarm!",
  "data": {
    "push": {
      "category": "alarm",
      "presentation_options": ["alert","sound"]
    }
  }
}