Addons - Node Red
- Node Red Installation
- Grundübersicht
- Push Notifactions / Benachrichtigungen
- Rauchmelder Beispiel mit Benachrichtigungen
Node Red Installation
Beschreibung:
Node Red ist ein Flussdiagramm basiertes Programmieren von Regeln.
Das macht das ganze sehr einfach und Übersichtlich.
Mit Variablen , schleifen etc.
Installation:
Auf einstellungen -> Addons gehen
Nun auf Addon Store
Dann runter scrollen bis Node Red und dann Node anklicken
Nun auf installieren klicken
Nach der installation sieht das ganze so aus
Nun auf Konfiguration gehen und credential_secret eintragen. Dieses passwort aufschreiben.
Den Haken SSL rausnehemne und auf speichern klicken
Nun die Haken einhaken:
Beim booten starten
Watchdog
Automatische Updates
In der Seiteleiste anzeigen
Dann auf starten klicken
Nach dem starten in der Seitenleiste auf Node-Red klicken.
Nun öffnet sich das Node Red Fenster.
Dort oben Rechts auf das Burger Menü klicken
Und im Menü Paletten verwalten anklicken
Dort schauen Ob in der Liste das Node-Red contrib Home Assistant Websocket installiert ist.
Da es in der Regel beim Node-Red standardmäßig mit installiert wurde steht da kein installieren, aber eine neue Version.
Sollte es bei euch nicht installiert sein. Steht anstelle von Aktuialiseren installieren.
Sollte sogar die aktuellste Version drauf sein steht da gar nichts.
Ich klicke erst mal auf aktualisieren um die aktuellste Version zu bekommen.
Dann nochmal bestätigen
Nun warten...
Nach dem Upgrade muss Node Red neu gestartet werden
Nun auf schließen klicken
Jetzt auf Einstellungen -> Addon Ons
Dann auf Node Red klicken
Dann auf neustarten klicken
Dann wieder auf Node Red in der Seitenleiste. Und die Warnung ist auch weg.
Node RED-Companion installieren:
Was macht dieser:
Hauptfunktionen:
Installation:
Auf HACS -> integrationen gehen
Dann unten auf Durchsuchen und herunterldaen von repositories klicken
Dort in den suchfilter node eingeben und dann NODE-RED Companion anklicken
Rechts unten dann auf herunterladen klicken
Nun nochmals auf Herunterladen klicken. Aktuellste Version ist vor ausgewählt
Es steht danach immer noch wieder herunterladen, das ist okay. Weil man könnte ja die Version wechseln
Danach Home Assistant neustarten.
Nach dem Neustart die Seite nochmal neuladen.
Nun unter Einstellungen -> Geräte und Dienste gehen
Dann auf integration hinzufügen klicken
Nun node als suchbegriff eingeben und dann node red companion anklicken
Nun auf Absenden klicken
Nun haben wir in der Liste unter konfiguriert, den Node Red Companion. Fertig
Grundübersicht
Flows und Nodes
Übersicht
Flows sind die Seiten auf den Nodes plaziert werden. Mann kann mehrere Flows haben. Vergleichbar mit Szenen.
Somit wird es übersichtlicher. Man kann natürlich auch alles auf einen Flow packen. Aber der Übersichthalber kann man halt mehrere Flows anlegen.
Die Nodes sind auf der Linke Seite.
Nodes sind unsere Bausteine mit den wir unseren Flow bauen.
Flow hinzufügen
Um ein weiteren Flow hinzu zu fügen klicken wir auf das + Symbol
Nun haben wir einen zweiten Flow im Tab daneben.
Im Rechten Fenster sehen wir auch nochmal unsere Flows.
Flow umbenennen
Um einen Flow umzubenennen, doppelklick auf den Tab des Flows den man umbenennen möchte
Nun dort den Text ändern. Wir haben auch die Möglichkeit eine Beschreibung hinzuzufügen.
Darin kann man zum Beispiel noch mal seine Abläufe erläutern, damit man nach einem jahr auch noch weiß was womit gemeint war, so ne Art Doku.
Geändert und eine Beschreibung eingefügt. Nun auf Fertig klicken.
Flow löschen
Doppelklcik wieder auf den Reiter des zu löschenden Flows
Und dort dann löschen anklicken
Nodes
Plazieren von Nodes
Um ein Node auf den Flow zu ziehen, den node den man haben möchte aus der Liste Links mit der linken Muastatse gedrückt halten und auf den Flow ziehen
Nun ist die Node plaziert.
Eigenschaften der Node anzeigen, umbenennen und löschen
Hierrüber kann die Node auch gelöscht werden, analog wie beim Tab.
Dazu doppelklick auf die Node.
Nun können wir Name vergeben oder aber über den löschen Button die Node löschen.
Deployen - scharf schalten
Damit Nodes eigenschften etc. auch Aktiv geschaltet werden, gibt es oben rechts den Butto deploy.
Kann man gleich setzten mit speichern oder übernehmen.
Über den Pfeil kann man auch sagen, mann will nur bestimmte Bereiche Deployen möchte
Erste Automation
Denn Node RED dient ja dazu Automatisierungen Visuell zu Programmieren mit Blöcken (Nodes)
Was brauchen wir für die Automatisierung:
- Ein Gerät / Entität,
- Diese muss Eigenschaften haben irgendwas zu triggern also ein Sensor quasi (Zum Besipiel ein Temperatur Sensor)
- Dann wird eine Aktion ausgelöst, zum Beispiel eine Benachrichtung oder ein Gerät wird geschaltet
- Das ganze kann man dann noch mit einer Statusüberwachung prüfen.
Nodes typen
Kommentar Node
Die Kommentar Node hat keine Funktion, sie dient zur Dokumentation von Bausteinen oder sonstigen infos.
Jetzt suchen wir uns die Comment Node raus. Dazu einfach comm
Oben links ist ein suchfilter. Da kann man nach Nodes filtern.
Dann braucht man nicht so viel scrollen. DIese dann wieder mit linker Taste gedrückt halten und auf die freie Fläche ziehen
Nun doppelklick auf die Node, kann man Name und den Kommentar eingeben
In der Node selbst wird der name angezigt, klickt man die Node an. wird im rechten Fenster der Inhalt also unser Kommentartext angezeigt.
Entity Node (Ersetzt durch eine neue Gruppe von Elementen die "Home Assitant Entities" )
Die Entity Node ist eine Node mit der man eine Entität in Home Assistant anlegen kann. Also ein Virtuelles Gerät.
Zum Beispiel ein Schalter oder ein sensor. Diese Entität ist allerding deprecated. Denn in diese Entität war zu unflexibel.
Dafür gibt es jetzt neue Nodes, mit denen Man GUI Elemnte oder Sensororen in Home Assistant bauen kann.
Virtuell halt.
Am Namen kann man schon erkennen was was sein soll.
Wir ziehen uns einen Schalter (switch) auf die freie Fläche) doppelklcik drauf und geben Ihm den Namen. Testschalter.
klicken dann auf den Bleistift.
In Neueren Versionen ist dies ein + Button
Nun Einen Namen angeben, switch auswählen und Device class auch switch.
Mit dem Stift bei Device kann man auch einen Eigenen Geräte Namen und Hersteller angeben.
Hier ist es jetzt in neueren Version auch ein + Button anstatt Stift
Wenn man möchte. Dann auf Hinzufügen
Nun noch Auf Fertig klicken.
Danach auf deploy klicken
Nun haben wir einen registrierten Schalter
Um zu sehen welche Entitäten von Node-RED Companion es gibt, gehen wir unter
EInstellungen -> Geräte und Dienste
Dort sehen wir dann bei Node Red Companion 1 Entität. Weil wir haben zur Zeit einen Schalter.
Da klicken wir drauf.
Nun sehen wir unseren Schalter. Name soll irgendwas machen. vom Typ switch.{name} name = soll irgendwas machen.
läuft. Dieses Gerät kann wie jedes anderes Gerät dann auch ein Bereich zugewiesen werden usw.
Auf dem Dashboard sieht das dann so aus. Ein Virtueller Schalter.
Event State Node (trigger/sensor) Teil 1
Die Event State Node fragt Geräte eigenschaften / Zustände ab, also ein trigger.
Wieder eine Node hinzufügen, hier die Event State Node einen Namen vergeben, Server auswählen (HomeAssistant)
und das Entity auswählen.
Über die suche hab ich jetzt einfach "soll" eingegeben. Und schon bekommen wir unseren Schalter soll irgendwas machen.
Wir klicken erstmal auf fertig.
Debug Node
Bevor es an die Bedingung geht.
Was für einen Wert gibt unser Schalter denn zurück?
Das bekommen wir mit der Debug Node raus.
Diese Node ist besonders hilfreich um zustände zu bekommen.
In der Seitenleiste Rechts gibt es Symbol mit nem Käfer, da landen alle Infos von Debug Nodes oder Fehler von Nodes.
Über die Mülltonne mit all, lassen sich alle Nachrichten löschen, sprich das Debug Log leeren.
Für Fehler braucht man keine Debug Nodes.
Wir fügen eine Debug Node hinzu und geben Ihr einen Namen.
Als Ausgabe wollen wir meisten den payload, also sprich die Daten die das Gerät zurück gibt.
Den Haken bei Debug Tab rein, so das diese Dann auch im Debug Log hinzugefügt werden.
ist der Haken raus, steht der Zustand nur unten drin
Nun den Ausgang unserer prüfe schalter node mit dem Eingang des Debug Nodes verbinden und auf Deploy klicken
Nun einen neuen Tab öffnen und unseren Schalter aus und wieder einschalten betätigen.
Nach Erstellung ist der Schalter Standardmäßig eingeschaltet
Nun machen wir den Schalter aus
Und wieder ein
Im Debug ist nun folgendes zu sehen.
Für einfache Zustände braucht man tatsächlich keine Debug Node, aber es geht ums Prinzip, denn wie zu sehen, wir der Wert unterm Testschalter angegeben, allerdings immer nur der letzte.
Übers Debug Node wissen wir nun beide zustände. Wenn der Schalter eingeschaltet ist ist es der Wert on und wenn er ausgeschaltet ist , ist es off.
Es hätte ja genauso gut true and false sein können.
Da der Wert on off ein Text ist, wissen wir das wir einen String vergleichen müssen.
Event State Node (trigger/sensor) Teil 2
Nun können wir wieder unseren Service anklicken und die Bedingung eintragen. Ist Text und on.
Unsere Node hat zwei Ausgänge.
Der Erste wenn die Bedingung wahr ist und die zweite Unwahr.
So können wir zwei Zustände erfassen. Ist der Schalter an, mach das, ist der aus mach das.
Nachdem wir die Bedingung eingetragen haben, bekommen wir im Debug auch nur noch on.
Denn vorher war die Node ja immer true und der Payload wurde für on wie auch off an dem ersten Ausgang übertragen. Wollen wir im Debug Node auch jetzt noch beide zustände müssen wir den False Ausgang auch noch ans Debug Modul packen.
Beide Ausgänge aufs Debug Modul.
Jetzt wäre ein Kommenta sinnvoll und das Debug modul kann gelöscht werden, wenn man es nicht braucht, oder deaktiviert, damit das Log nicht vollgemüllt wird.
Deaktivieren
Nun ist es deaktiviert. Deployen nicht vergessen.
Ich lösche das Debug Objekt aber und ändere unser Kommentarfeld was jetzt auch einen sinn macht
Ich schreibe oben in den Titel schon die Werte rein. Für die Vollbeschreibung dann doppelklick auf das Kommentar Node
Nun können wir endlich unsere Aktion hinzufügen.
Das machen wir mit der call service node
Call Service Node
Wir fügen ein call service node hinzu vergeben einen Namen und die wählen unsere Geräte Klasse,
Hier Licht
Bei Enitity wählen wir das eigentliche Gerät.
ich gebe in die suche light an, so werden mir alle Geräte mit light aufgelistet.
ich wähle mein Sofa licht. Auch Gruppen können ausgewählt werden wie meine Gruppe light.wohnzimmerlichter
Nun wählen wir den Service aus. Da wir gesagt bei status on soll das licht an gehen und nicht togglen, wählen wir hier on
Nun da wir den Service ausgwählt haben, haben wir weiter unten bei Data eine reihe von Werten die Wir übergeben können angezeigt.
Die Service node hat übrigends auch die Möglichkeit Debug Informationen anzuzeigen. So braucht man keine Extra Debug Node erstellen.
Viele Nodes haben das schon inbegriffen.
Hier aber eine Liste der Werte, die dieser Service unterstützt, einige Werte werden eventuell von dem Entity nicht unterstützt.
Dann passiert halt nichts und wird nur eingeschaltet.
zum Beispiel bei einer weißen Lampe die keine Farben unterstützt, kann ich auch keine Farbe setzten:
Hier sind zufällig alle Parameter optional, das heißt in das Feld Data einfach zwei geschweifte Klammern.
Wichtig: Bei Data Format muss Json ausgewählt sein, nicht json Data
aber möchte man ein Beispiel, einfach auf Load Example Data klicken.
Das find ich total Praktisch, dann braucht man nur noch die Werte ändern.
Nun braucht man nur noch den Farbwert ändern als Beispiel
Wir belassen es bei leeren klammern.
Nun auf Fertig.
Jetzt können wir event state Ausgang wahr mit dem Licht verbinden und deployen das ganze.
Jetzt machen wir zwei Tabs auf. Einmal wieder zu unserem Schalter und dann den Gerätestaus vom Licht.
Wir schalten unser licht als erstes aus, auf der Geräte Seite
Nun gehen wir aufs Dashbaord und schalten den schalter aus und wieder ein.
Nun wurde auch die Lampe eingeschaltet, siehe Geräte Seite
Nun möchten wir natürlich das beim ausschalten des Schalters die Lampe auch ausgeht.
Dazu kopieren wir die Node Licht Wohnzimmer. Anklicken strg+c bzw bei mac command+c und strg+v bzw command+v
Jetzt haben wir die Node zweimal
Wir klicken die erste noch verbundene doppelt an und ändern den Namen
Bei der zweiten Node ändern wir den Namen in aus und wählen den Service turn_off
Nun verbinden wir die zweite node mit dem false Ausgang des event state, dann deployen
Nun kann man mittels Schalter das Licht ein und ausschalten.
Und jep Ihr habt recht, man hatte auch die Schalter Ausgänge direkt mit den Services verbinden können.
ich wollte hier aber den event state vorstellen, denn anstatt eines Schalters hätte es ja auch ein Bewegungsmelder sein können, und den können wir nur über event state abfragen.
Direkt mit Schalter sähe so aus:
Damit das Aber klappt muss im Schalter noch ein Haken gesetzt werden das der Status als Payload weitergeben werden soll
Dies kann dann bei Standard also belassen werden
Fertig, nun kann das Licht direkt ohne event state geschaltet werden, da der Button ja schon ein event (Ereignis auslöst)
Wie hier auch nochmal zu sehen
Dieser Schalter dient wirklich nur dazu, wenn man gerne einen Knopf in der Oberfläche haben möchte der kein Echter Schalter ist.
Hat man so einen Schalter nur zum debuggen eingebaut, damit ich auch ohne event state meine Aktion testen kann, gibt es einen besseren Weg.
Denn jedes mal zum Bewegungsmelder zu rennen damit er ein Ereignis ausgibt kann ich mir einen Hilfsknopf direkt in Node Red bauen, ohne den Dashboard Knopf.
Über die Entwicklerwerkzeuge hab ich auch die Möglichkeit Werte zu ändern, aber da muss ich ja schon wieder ein Tab im Browser wechseln.
Siehe Geräte Werte Temporär ändern
Und nun der Inject Knopf
Inject Node
Der Inejct Knopf ist ein Debug Hilfsmittel mit dem Ich ein Ereignis innerhalb Node Red triggern kann.
Entweder im Intervall oder einmal.
Wir löschen erstmal die Verbindungen zu unserem Vorherigen Button und schieben die Lichter ein wenig nach rechts
Nun fügen wir die Inject Node hinzu. Vergeben einen namen.
ALs Payload wird der Zeitstempel übergeben. Der Payload ist uns eigentlich negal, da er ja sowieso nur ein true rausgibt egal was drin steht. Das teil hat ja nur einen Zustand.
Unten wäre die Möglichkeit auch eine Uhrzeit einzusetllen, dann ist es Kein Debug Knopf mehr sondern währe ein Taskplaner.
Wie geil ist das denn ;-)
Wir nutzen Ihn hier aber nur als Debug Button zum Auslösen beim drauf drücken.
Diesen verbinden wir jetzt mit Lmape an. Genauso wie unseren Prüfe schalter Verbinden wir auch wieder mit Lampe an und Lampe aus.
Dann sieht das ganze wieder so aus. Wird der Dashboard Schalter gedrückt löst das event state wieder aus jenach nzustand an oder aus. Wird unser Debug Knopf gedrückt wird das licht angeschaltet unabhängig vom event state
Wir kopieren den Debug Knopf noch einmal und verbinden diesen mit Wohnzimmer aus und deployen das ganze.
man löst den Debug knopf über die Schaltfläche davor aus, wie bei der Debug Node den Knopf
Anhand der Uhrzeit sieht mann ich hab erst on dann off gedrückt.
Hier auch nochmal im Log der Lampe
Anstatt den Button in der event statse noder zu überwachen, würde man hier einen Bewegungsmelder nehmen oder was auch immer nehmen, ist schon klar.
Es geht hier ums Prinzip ;-)
Variablen: Change und Function Node :
Es gibt zwei Typen von Variablen:
- Flow Variablen - Gelten nur in dem aktuellen Flow
- Global Variablen - Gelten über alle Flows
Dazu ziehen wir uns eine Change Node in den Flow, setzten den Namen.
und wählen dann flow oder Global aus der Liste aus.
Nach flow. den variable Namen und darunter der Wert
Uns stehen folgende Variable Typen zur Verfügung. Flow und Global machen meist keinen Sinnd weil wir hier ja eine flow/global Variable definieren. Möchten wir eine bestehende Variable ändern, kommt meist noch mehr dazu als nur Inhalt Variable 1 in Variable 2 kopieren
(was natürlich geht in dem to Value dann die Flowvariable ausgewählt wird mit dem Quellvariablennamen).
Für komplexere Sachen nehmen wir lieber dann die später erklärte Function Node.
Das bei Set to value ist das msg Objekt, das msg was am Eingang der Node ankommt zum Beispiel der Wert eines vorherigen verbundenen Sensors oder so.
Nun setzten wir uns ein Inject Knopf und verbinden die Change Node mit um diesen dann triggern.
Setzen uns eine weiteres Inject und Verbinden eine Debug Node.
Dort einen Namen wählen und als payload flow und unseren Variable namen.
Nun deployen wir das ganze und drücken dann auf den inject button 1 und danach inject button 2
Nun sehen wir in der Debug leiste unseren Wert.
Wir können die Variable aber auch innerhalb eines Payloads nutzen also sprich als Varibale in einem text oder so.
Dazu nutzen wir eine Function Node und setzten diese zwischen dem inject und dem debug
Doppelklick auf die Function und die Function anpassen
Beschreibung:
var newText = flow.get("meinevariable"); //wir holen die flow Variable meinevariable und stecken sie in eine loakle in dieser funktion
newText = "Dieser texte enthält folgende Variable: "+newText+" in der Mitte"; //wir überschreiben newtext mit einem text und in der mitte die ausgelesene Variable die noch in newtext steckt.
//newtext ist jetzt der neue text
flow.set("meineneuevariable",newText); //wir legen eine neue flow variable an, falls man darauf später zurgeifen möchte und nicht gleich in der nächsten node
msg.payload = newText; //gleichzeitig geben wir als payload den neuen text aus, falls man gleich schon mit dem payload in der nächsten node weiterarbeiten möchte, man kann aber auch die neue flow variable nehmen
return msg; //die message zurückgeben
Da wir als Payload auch unseren neuen Text ausgegeben haben, ist der auch sofort im Debug Node sichtabr
DIe flow.meineneue Variable können wir auch in einer weiteren function, weiterverarbeiten
oder mit einer change node die msg.payload einfach auf den Wert des flows/global setzten
Beispiel Eigenschaften einer change node.
Der Name muss natürlich auch ausgefüllt werden, geht ums Prinzip, die mgs payload auf den Inhalt eines flows/global zu setzten:
Eine Function macht dann sinn, wenn man einer Variable Werte hinzufügen/ rechnen oder was was ich mach möchte oder gleich mehrere dinge auf einmal.
Wie die Variable komplex ändern und gleichzeitig als Payload ausgeben.
Will man aber tastächlich nur variable definieren und als payload ausgeben geht das auch mit change. denn mit hinzufügen kann man mehre aktionen durchführen.
Diese werden von oben nach unten abgearbeitet.
Beispiel:
Wir können aber auch anstatt eine Change Node zu nehmen auch gleich eine Function Node nehmen um dieses durch zu führen, eine Variable zu definieren und als Payload ausgeben. Allerdings finde ich zum reinen definieren ne Change Node einfacher.
Das gleiche geht natürlich dann auch mit global anstatt flow global schreiben, wenn man global variablen braucht.
JSON in eine Variable laden, so hat man ein Array in einer Variablen:
Wie man Variablen anlegt haben wir ja schon gesehen.
So speichern wir ein JSON Object in einer Variablen und lesen einzelne Elemete wieder aus.
So können wir mehrere Werte in einer Variablen speichern. Und hätten damit ein Array
Hier mal ein Beispiel JSON. Hier haben wir 4 Eigenschaften: name, color,on,brightness
{
"name":"licht Sofa",
"color":"blau",
"on":"true",
"brightness":100
}
Mit einer Change node können wir diese JSON speichern. Kommt sie von einer msg nutzen wir ebenfalls die change node.
Wir erstellen einen inject button eine change node und eine debug node
Doppelklick auf die Change Node
Dort vergeben wir einen Namen, bei setze wieder flow/gloabl und den variablennamen und bei set to wählen wir json aus.
nun klicken wir auf die 3 Punkte
und fügen unser json Data Beispiel von oben ein und dann auf fertig
Nun sieht das ganze so aus und jetzt unten auf hinzufügen klicken
Nun kann die msg.payload Ausgabe gesetzt werden auf die flow Variable die wir im ersten schritt defniert haben, danach auf fertig. Diese variable kann nun in der nächsten node durch setzten des msg.payload, wie auch später über den Variablenamen wieder verwendet werden.
Nun unsere Nodes Verbinden und dann deploy anklicken
Wenn wir jetzt auf den Injector klicken sehen wir im Debug Fenster unsere json Objekt
Klicken wir auf den Pfeil gibt ne bessere Übersicht.
Daten Zugreifen.
Da das ein JSON Object können wir dem "." auf die Objekte zugreifen..
Wir legen dazu wieder ein Inject und ein Debug an Verbinden die auch gleich.
Nun doppelklick auf die Inject node
Dort einen Namen vergeben und dann bei Flow den Variablenamen einegben.
Nun kann hinter den Variablennamen ein punkt angeben werden und wir bekommen eine auflistung der Elemente
Wir nehmen hier mal den Namen und klicken auf fertig.
Nun deployen
Dann den ersten inject für die für die json variable erstellen.
Dann den zweiten Inject für das auslesen.
nun sehen wir den Wert der Eigenschaft Name als Payload.
Nämlichen den Namen.
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.
- General: Für allgemeine Benachrichtigungen, die keine spezielle Kategorisierung benötigen.
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:
-
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" } } }
- 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.
-
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" } } }
- Beschreibung: Diese Kategorie priorisiert die Benachrichtigung stark. Sie wird auch dann abgespielt, wenn der
-
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
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.
Dann auf die 3 Punkte und auf Herunterladen klicken.
Nun die letzte Version auswählen und herunterladen anklicken.
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.
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
Nun geben wir unserem gerät hinter der ID Namen zum identifizieren.
Nun nach dem Speichern wir der link zu den Profilen freigeschaltet, da drauf klicken nach unten scrollen
Nun das Auto trennen raus nehmen.
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)
ALs json data haben wir nur Message und sprache
{
"message": "Rauchmelder {{ global.rauchmeldertext }} Rauch erkannt",
"language": "de"
}
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
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 |
Auf neueren Geräten (ab Android 8.0) wird Die Property
Tipp: Für Alarm‑ oder TTS‑Nachrichten immer |
"high" |
| importance | String |
Auf Android‑Geräten (ab Version 8.0+) wird die Wichtigkeit eines Notification‑Kanals über das
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.
Merke: Ein hoher |
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
Es werden folgende Werte unterstützt:
|
"data": { "push": { "category": "alarm" } } |
push.interruption_level |
String |
|
"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_HIGHerzeugt ein kurzes Popup (Heads‑Up) und Ton.
IMPORTANCE_DEFAULTspielt Ton, aber ohne Popup.
IMPORTANCE_LOW/MINsind ruhig, ohne Ton bzw. ohne Leisten‑Icon.
IMPORTANCE_NONEunterdrückt die Notification komplett. Android DevelopersAndroid Developers
Unterschied zu priority:
-
priorityist 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 (wieStop) ausgeführt wird.
Verhalten:
-
Mit
stickyallein: Die Benachrichtigung bleibt bestehen, aber der Benutzer kann sie durch Wischen entfernen. -
Mit
sticky+persistent: Die Benachrichtigung kann nur durch eine Aktion (z. B. denStop-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: trueideal. -
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
Dann eine Switch Node zum auswerten
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.
Die Eigenschaft der Events Node
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
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.
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"]
}
}
}
Rauchmelder Beispiel mit Benachrichtigungen
Beschreibung:
Ein Rauchmelder Beispiel mit Stopp Benachrichtigung:
Es wurden zwei Rauchmelder definiert und jenachdem Weclher als erstes Auslöst gibt die Nachricht per TTS aus.
DIe States sind die Rauchmelder, diese triggern die Send Action Buttons, also die Nachricht die eingeblendet wird um den TTS wieder stoppen. Und sie setzten eine globale Variable mit dem Text des Rauchmelders.
Dann wird die abort false gesetzt. Dann gehts in die schleife die checkt ob abort true ist. Ist dies nicht der fall gehts an die nachricht sagen dann 10 sekunden warten und wieder zum check. solange bis auf dem button stopp gedrückt wurde.
Dann wird über überpüfe Tab bzw dem danachfolgendem Switch (werte aus) und wenn das passt, dann durch ein change das abort abort false zu true und die schleife wird beendet.
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.
Bei den anderen Flows würde man dann andere namen nehmen.
fertig
Hier einmal der Komplette code als export:
[
{
"id": "72f8bbccc156abc9",
"type": "tab",
"label": "Flow 78",
"disabled": false,
"info": "",
"env": []
},
{
"id": "fd846045ce203fdb",
"type": "switch",
"z": "72f8bbccc156abc9",
"name": "Check abort",
"property": "abort",
"propertyType": "global",
"rules": [
{
"t": "false"
},
{
"t": "true"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 1110,
"y": 380,
"wires": [
[
"b2b1641da0ae4e50"
],
[
"4189cd5f02c60a22",
"75cb06568f31df0d"
]
]
},
{
"id": "bd0cc484a47ac218",
"type": "api-call-service",
"z": "72f8bbccc156abc9",
"name": "Send Actions Buttons",
"server": "0b5c0a092e06b662",
"version": 5,
"debugenabled": true,
"domain": "notify",
"service": "mobile_app_gm1913",
"areaId": [],
"deviceId": [],
"entityId": [],
"data": "{\"message\":\"Rauchmelder-Alarm! Bitte überprüfen!\",\"data\":{\"channel\":\"alarm_stream_max\",\"priority\":\"high\",\"ttl\":0,\"sticky\":true,\"persistent\":true,\"importance\":\"high\",\"tag\":\"{{ global.message_tag }}\",\"presentation_options\":\"alert\",\"url\":null,\"clickAction\":\"noAction\",\"actions\":[{\"action\":\"SNOOZE_SMARTPHONE_STEFAN\",\"title\":\"Rauchmelder Stoppen\"}]}}",
"dataType": "json",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "data"
}
],
"queue": "none",
"x": 940,
"y": 40,
"wires": [
[]
]
},
{
"id": "7a2df04207532b6e",
"type": "delay",
"z": "72f8bbccc156abc9",
"name": "",
"pauseType": "delay",
"timeout": "10",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "5",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": true,
"allowrate": false,
"outputs": 1,
"x": 1590,
"y": 180,
"wires": [
[
"fd846045ce203fdb"
]
]
},
{
"id": "b2b1641da0ae4e50",
"type": "api-call-service",
"z": "72f8bbccc156abc9",
"name": "TTS Raucherkannt auf dem Media Stream Alarm",
"server": "0b5c0a092e06b662",
"version": 5,
"debugenabled": true,
"domain": "notify",
"service": "mobile_app_gm1913",
"areaId": [],
"deviceId": [],
"entityId": [],
"data": "{\"message\":\"TTS\",\"data\":{\"priority\":\"high\",\"media_stream\":\"alarm_stream\",\"tts_text\":\"Rauch {{ global.rauchmeldertext }} erkannt\"}}",
"dataType": "json",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 1360,
"y": 40,
"wires": [
[
"7a2df04207532b6e"
]
]
},
{
"id": "20fc249d39285d23",
"type": "change",
"z": "72f8bbccc156abc9",
"name": "Set abort faLSE",
"rules": [
{
"t": "set",
"p": "abort",
"pt": "global",
"to": "false",
"tot": "bool"
}
],
"x": 980,
"y": 240,
"wires": [
[
"fd846045ce203fdb"
]
]
},
{
"id": "4189cd5f02c60a22",
"type": "debug",
"z": "72f8bbccc156abc9",
"name": "debug 8",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 1480,
"y": 380,
"wires": []
},
{
"id": "4c344c4831e5fcac",
"type": "server-state-changed",
"z": "72f8bbccc156abc9",
"name": "",
"server": "0b5c0a092e06b662",
"version": 4,
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"entityidfilter": "binary_sensor.smoke_detected_1",
"entityidfiltertype": "exact",
"outputinitially": false,
"state_type": "str",
"haltifstate": "on",
"halt_if_type": "str",
"halt_if_compare": "is",
"outputs": 2,
"output_only_on_state_change": true,
"for": "0",
"forType": "num",
"forUnits": "minutes",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": false,
"ignorePrevStateUnavailable": false,
"ignoreCurrentStateUnknown": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "",
"valueType": "triggerId"
}
],
"x": 240,
"y": 200,
"wires": [
[
"41e0d6ee2b5907b9",
"650bd1c892f800a0"
],
[]
]
},
{
"id": "41e0d6ee2b5907b9",
"type": "change",
"z": "72f8bbccc156abc9",
"name": "",
"rules": [
{
"t": "set",
"p": "rauchmeldertext",
"pt": "global",
"to": "Fahrradschuppen",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 680,
"y": 240,
"wires": [
[
"20fc249d39285d23"
]
]
},
{
"id": "4dcffc1f5cb9e580",
"type": "server-state-changed",
"z": "72f8bbccc156abc9",
"name": "",
"server": "0b5c0a092e06b662",
"version": 4,
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"entityidfilter": "binary_sensor.smoke_detected_2",
"entityidfiltertype": "exact",
"outputinitially": false,
"state_type": "str",
"haltifstate": "on",
"halt_if_type": "str",
"halt_if_compare": "is",
"outputs": 2,
"output_only_on_state_change": true,
"for": "0",
"forType": "num",
"forUnits": "minutes",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": false,
"ignorePrevStateUnavailable": false,
"ignoreCurrentStateUnknown": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "",
"valueType": "triggerId"
}
],
"x": 200,
"y": 440,
"wires": [
[
"15bcfcc2b81baf03",
"650bd1c892f800a0"
],
[]
]
},
{
"id": "15bcfcc2b81baf03",
"type": "change",
"z": "72f8bbccc156abc9",
"name": "",
"rules": [
{
"t": "set",
"p": "rauchmeldertext",
"pt": "global",
"to": "Wohnstube",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 680,
"y": 440,
"wires": [
[
"20fc249d39285d23"
]
]
},
{
"id": "75cb06568f31df0d",
"type": "api-call-service",
"z": "72f8bbccc156abc9",
"name": "Clear Actions Buttons",
"server": "0b5c0a092e06b662",
"version": 5,
"debugenabled": false,
"domain": "notify",
"service": "mobile_app_gm1913",
"areaId": [],
"deviceId": [],
"entityId": [],
"data": "{\"message\":\"clear_notification\",\"data\":{\"tag\":\"{{ global.message_tag }}\"}}",
"dataType": "json",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "data"
}
],
"queue": "none",
"x": 1520,
"y": 460,
"wires": [
[]
]
},
{
"id": "47d0e3399b240284",
"type": "inject",
"z": "72f8bbccc156abc9",
"name": "manuell starten",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 160,
"y": 140,
"wires": [
[
"41e0d6ee2b5907b9",
"650bd1c892f800a0"
]
]
},
{
"id": "faf2cf47f8a2e467",
"type": "inject",
"z": "72f8bbccc156abc9",
"name": "manuell starten",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 380,
"wires": [
[
"15bcfcc2b81baf03",
"650bd1c892f800a0"
]
]
},
{
"id": "650bd1c892f800a0",
"type": "change",
"z": "72f8bbccc156abc9",
"name": "",
"rules": [
{
"t": "set",
"p": "message_tag",
"pt": "global",
"to": "benachrichtung_stefan",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 690,
"y": 40,
"wires": [
[
"bd0cc484a47ac218"
]
]
},
{
"id": "f5e75181e7417fe2",
"type": "change",
"z": "72f8bbccc156abc9",
"name": "Set abort true",
"rules": [
{
"t": "set",
"p": "abort",
"pt": "global",
"to": "true",
"tot": "bool"
}
],
"x": 800,
"y": 600,
"wires": [
[]
]
},
{
"id": "8f5bb3abc51be77f",
"type": "server-events",
"z": "72f8bbccc156abc9",
"name": "überpüfe tap",
"server": "0b5c0a092e06b662",
"version": 2,
"eventType": "mobile_app_notification_action",
"exposeToHomeAssistant": false,
"eventData": "",
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"waitForRunning": true,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
}
],
"event_type": "",
"x": 90,
"y": 600,
"wires": [
[
"765be5afb170835b",
"24ebd151429c0ffb"
]
]
},
{
"id": "765be5afb170835b",
"type": "switch",
"z": "72f8bbccc156abc9",
"name": "werte aus",
"property": "payload.event.action",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "SNOOZE_SMARTPHONE_STEFAN",
"vt": "str"
},
{
"t": "eq",
"v": "IRGENDWAS",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 420,
"y": 600,
"wires": [
[
"f5e75181e7417fe2",
"14956e7bf6034ba7"
],
[]
]
},
{
"id": "24ebd151429c0ffb",
"type": "debug",
"z": "72f8bbccc156abc9",
"name": "debug 10",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 420,
"y": 520,
"wires": []
},
{
"id": "14956e7bf6034ba7",
"type": "debug",
"z": "72f8bbccc156abc9",
"name": "debug 11",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload.event.action",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 660,
"y": 720,
"wires": []
},
{
"id": "0b5c0a092e06b662",
"type": "server",
"name": "Home Assistant",
"version": 5,
"addon": true,
"rejectUnauthorizedCerts": true,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30",
"areaSelector": "friendlyName",
"deviceSelector": "friendlyName",
"entitySelector": "friendlyName",
"statusSeparator": ": ",
"statusYear": "hidden",
"statusMonth": "short",
"statusDay": "numeric",
"statusHourCycle": "default",
"statusTimeFormat": "h:m",
"enableGlobalContextStore": false
}
]