# Addons - Node Red

# 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 -&gt; Addons gehen

[![Auswahl_176.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/dB9CgdbzIj0RRYm6-auswahl-176.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/dB9CgdbzIj0RRYm6-auswahl-176.png)

Nun auf Addon Store

[![Auswahl_177.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/oS1jRJxy7OvuvNCs-auswahl-177.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/oS1jRJxy7OvuvNCs-auswahl-177.png)

Dann runter scrollen bis Node Red und dann Node anklicken

[![Auswahl_178.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/7RAaWvEchfOALcH4-auswahl-178.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/7RAaWvEchfOALcH4-auswahl-178.png)

Nun auf installieren klicken

[![Auswahl_179.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/EK34eWV89ZksOWhe-auswahl-179.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/EK34eWV89ZksOWhe-auswahl-179.png)

Nach der installation sieht das ganze so aus

[![Auswahl_191.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/lkpdu2wSvgrxfVEM-auswahl-191.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/lkpdu2wSvgrxfVEM-auswahl-191.png)

Nun auf Konfiguration gehen und `credential_secret` eintragen. Dieses passwort aufschreiben.

[![Auswahl_192.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/bXT0I95VV95ZuVEW-auswahl-192.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/bXT0I95VV95ZuVEW-auswahl-192.png)

Den Haken SSL rausnehemne und auf speichern klicken

[![Auswahl_197.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/3LkHDyIqb1fynR9h-auswahl-197.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/3LkHDyIqb1fynR9h-auswahl-197.png)

Nun die Haken einhaken:  
Beim booten starten  
Watchdog  
Automatische Updates  
In der Seiteleiste anzeigen

Dann auf starten klicken

[![Auswahl_195.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/uT5go6RKWL8YaIXm-auswahl-195.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/uT5go6RKWL8YaIXm-auswahl-195.png)

Nach dem starten in der Seitenleiste auf Node-Red klicken.  
Nun öffnet sich das Node Red Fenster.

[![Auswahl_198.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/28TraSqmg2yeakIT-auswahl-198.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/28TraSqmg2yeakIT-auswahl-198.png)

 Dort oben Rechts auf das Burger Menü klicken

[![Auswahl_207.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/KZiFe2uhLjro9ZgE-auswahl-207.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/KZiFe2uhLjro9ZgE-auswahl-207.png)

Und im Menü Paletten verwalten anklicken

[![Menü_009.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/5mZbdaG8m2BflCPI-menu-009.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/5mZbdaG8m2BflCPI-menu-009.png)

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.

[![Auswahl_208.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/v9JQqY7cKHRKo3tQ-auswahl-208.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/v9JQqY7cKHRKo3tQ-auswahl-208.png)

Dann nochmal bestätigen

[![Auswahl_209.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/yS0GLYMGQ1KNeeQ2-auswahl-209.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/yS0GLYMGQ1KNeeQ2-auswahl-209.png)

Nun warten...

[![Auswahl_210.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/Y1RDmWdyZImMwLVf-auswahl-210.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/Y1RDmWdyZImMwLVf-auswahl-210.png)

Nach dem Upgrade muss Node Red neu gestartet werden

[![Auswahl_211.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/HozP32tuhuay8QmY-auswahl-211.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/HozP32tuhuay8QmY-auswahl-211.png)

Nun auf schließen klicken

[![Auswahl_212.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/hmDFmLp5qQbPNVgv-auswahl-212.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/hmDFmLp5qQbPNVgv-auswahl-212.png)

Jetzt auf Einstellungen -&gt; Addon Ons

[![Auswahl_213.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/0cCVnSUKvwAjmFGW-auswahl-213.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/0cCVnSUKvwAjmFGW-auswahl-213.png)

Dann auf Node Red klicken

[![Auswahl_214.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/fkv4CfkgTh9Wfo5q-auswahl-214.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/fkv4CfkgTh9Wfo5q-auswahl-214.png)

Dann auf neustarten klicken

[![Auswahl_215.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/8hu6tuTdBdCfrZMa-auswahl-215.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/8hu6tuTdBdCfrZMa-auswahl-215.png)

Dann wieder auf Node Red in der Seitenleiste. Und die Warnung ist auch weg.

[![Auswahl_216.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/CkziUgoQBdRkZLcb-auswahl-216.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/CkziUgoQBdRkZLcb-auswahl-216.png)

### Node RED-Companion installieren:  


#### Was macht dieser:

Hauptfunktionen:

<div class="flex max-w-full flex-col flex-grow" id="bkmrk-entit%C3%A4tenverwaltung%3A"><div class="min-h-8 text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="585fc969-5ca9-4618-83ea-cd5815b2bfb3" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert light">- **Entitätenverwaltung**: 
    - Erstellen und Aktualisieren von Home Assistant Entitäten über Node-RED, einschließlich: 
        - Binärsensoren
        - Tasten
        - Zahlen
        - Auswahlen
        - Sensoren
        - Schalter
        - Textfelder
- **Flow-Steuerung**: 
    - Aktivieren oder Deaktivieren von Node-RED Flows direkt über die Home Assistant-Benutzeroberfläche.
- **Webhooks**: 
    - Erstellen und Verwalten von Home Assistant Webhooks mit Verarbeitung in Node-RED.
- **Geräteautomatisierung**: 
    - Nutzen von Gerätetriggern und -aktionen in Node-RED für erweiterte Automatisierungsmöglichkeiten.

</div></div></div></div>#### Installation:

Auf HACS -&gt; integrationen gehen

[![Auswahl_243.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/h38dwjGKw7uhNvwZ-auswahl-243.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/h38dwjGKw7uhNvwZ-auswahl-243.png)

Dann unten auf Durchsuchen und herunterldaen von repositories klicken

[![Auswahl_244.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/Mh8jZMNVKG16zv6W-auswahl-244.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/Mh8jZMNVKG16zv6W-auswahl-244.png)

Dort in den suchfilter node eingeben und dann NODE-RED Companion anklicken

[![Auswahl_245.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/k22TqZLE1XrqufVX-auswahl-245.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/k22TqZLE1XrqufVX-auswahl-245.png)

Rechts unten dann auf herunterladen klicken

[![Auswahl_246.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/9Ya9Z63dHerd7YTz-auswahl-246.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/9Ya9Z63dHerd7YTz-auswahl-246.png)

Nun nochmals auf Herunterladen klicken. Aktuellste Version ist vor ausgewählt

[![Auswahl_247.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/neJc3bcM3MpW3MNK-auswahl-247.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/neJc3bcM3MpW3MNK-auswahl-247.png)  
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 -&gt; Geräte und Dienste gehen

[![Auswahl_248.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/mLQos5eXeBpy4oOp-auswahl-248.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/mLQos5eXeBpy4oOp-auswahl-248.png)

Dann auf integration hinzufügen klicken

[![Auswahl_249.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/a4zb60HK1kKHy2El-auswahl-249.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/a4zb60HK1kKHy2El-auswahl-249.png)

Nun node als suchbegriff eingeben und dann node red companion anklicken

[![Auswahl_250.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/ZIm0pYZ9bNBIs5vt-auswahl-250.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/ZIm0pYZ9bNBIs5vt-auswahl-250.png)

Nun auf Absenden klicken

[![Auswahl_251.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/jAE6Y1O2rEURodlh-auswahl-251.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/jAE6Y1O2rEURodlh-auswahl-251.png)

Nun haben wir in der Liste unter konfiguriert, den Node Red Companion. Fertig  
[![Auswahl_252.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/DgIeCGjfCTuTY9kq-auswahl-252.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/DgIeCGjfCTuTY9kq-auswahl-252.png)

# 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.

[![Auswahl_217.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/OkP9nvboLLOKuKL8-auswahl-217.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/OkP9nvboLLOKuKL8-auswahl-217.png)

### Flow hinzufügen

Um ein weiteren Flow hinzu zu fügen klicken wir auf das + Symbol

[![Auswahl_218.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/EFfKYWERCbC2wvpJ-auswahl-218.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/EFfKYWERCbC2wvpJ-auswahl-218.png)

Nun haben wir einen zweiten Flow im Tab daneben.

[![Auswahl_219.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/62nswowH8F5oorNT-auswahl-219.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/62nswowH8F5oorNT-auswahl-219.png)

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

[![Auswahl_221.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/5GQsIgKSFZinc1JM-auswahl-221.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/5GQsIgKSFZinc1JM-auswahl-221.png)

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.

[![Auswahl_222.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/y4GdtsBuxwBCdq2K-auswahl-222.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/y4GdtsBuxwBCdq2K-auswahl-222.png)

Geändert und eine Beschreibung eingefügt. Nun auf Fertig klicken.

[![Auswahl_223.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/6xhTIqvwV8FNEZY2-auswahl-223.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/6xhTIqvwV8FNEZY2-auswahl-223.png)

### Flow löschen

Doppelklcik wieder auf den Reiter des zu löschenden Flows

[![Auswahl_224.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/9qCK2DXuVwUjN4e5-auswahl-224.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/9qCK2DXuVwUjN4e5-auswahl-224.png)

Und dort dann löschen anklicken

[![Auswahl_225.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/HUaT8stp4jlapyeK-auswahl-225.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/HUaT8stp4jlapyeK-auswahl-225.png)

### 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

[![Auswahl_226.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/r5QQHkpMph3XM8mQ-auswahl-226.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/r5QQHkpMph3XM8mQ-auswahl-226.png)

Nun ist die Node plaziert.

[![Auswahl_227.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/ASkA44xEg8kJdcvU-auswahl-227.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/ASkA44xEg8kJdcvU-auswahl-227.png)

#### 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.

[![Auswahl_228.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/krh4sqO93UfncsTa-auswahl-228.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/krh4sqO93UfncsTa-auswahl-228.png)

### 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.

[![Auswahl_233.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/JTdS4anBVQHLnuME-auswahl-233.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/JTdS4anBVQHLnuME-auswahl-233.png)

Über den Pfeil kann man auch sagen, mann will nur bestimmte Bereiche Deployen möchte

[![Auswahl_234.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/eFYuGxcGiEvhKiWx-auswahl-234.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/eFYuGxcGiEvhKiWx-auswahl-234.png)

### 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

[![Auswahl_229.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/gHdveOIZHtDAI8zn-auswahl-229.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/gHdveOIZHtDAI8zn-auswahl-229.png)

Nun doppelklick auf die Node, kann man Name und den Kommentar eingeben

[![Auswahl_230.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/lnKvEw2zbBxaILqZ-auswahl-230.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/lnKvEw2zbBxaILqZ-auswahl-230.png)

In der Node selbst wird der name angezigt, klickt man die Node an. wird im rechten Fenster der Inhalt also unser Kommentartext angezeigt.

[![Auswahl_232.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/zu3HZnsfyFDoivkW-auswahl-232.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/zu3HZnsfyFDoivkW-auswahl-232.png)

##### 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.

[![Auswahl_235.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/McJiYYmVMbsfCEpv-auswahl-235.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/McJiYYmVMbsfCEpv-auswahl-235.png)

Wir ziehen uns einen Schalter (switch) auf die freie Fläche) doppelklcik drauf und geben Ihm den Namen. Testschalter.

[![Auswahl_236.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/Q3BrMNo4ZDAbQien-auswahl-236.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/Q3BrMNo4ZDAbQien-auswahl-236.png)  
klicken dann auf den Bleistift.   
**In Neueren Versionen ist dies ein + Button**

[![Auswahl_238.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/4GDHHK0vnlmzB8Ga-auswahl-238.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/4GDHHK0vnlmzB8Ga-auswahl-238.png)

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

[![Auswahl_239.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/kmn65hRPEdR06asz-auswahl-239.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/kmn65hRPEdR06asz-auswahl-239.png)

Nun noch Auf Fertig klicken.  
Danach auf deploy klicken

[![Auswahl_237.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/60D7sat5HUC1F9PL-auswahl-237.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/60D7sat5HUC1F9PL-auswahl-237.png)

Nun haben wir einen registrierten Schalter

[![Auswahl_253.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/CPKqaHq7lcujaD17-auswahl-253.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/CPKqaHq7lcujaD17-auswahl-253.png)

Um zu sehen welche Entitäten von Node-RED Companion es gibt, gehen wir unter  
EInstellungen -&gt; Geräte und Dienste

[![Auswahl_248.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/mLQos5eXeBpy4oOp-auswahl-248.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/mLQos5eXeBpy4oOp-auswahl-248.png)

Dort sehen wir dann bei Node Red Companion 1 Entität. Weil wir haben zur Zeit einen Schalter.  
Da klicken wir drauf.

[![Auswahl_254.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/GB6bhc9JIHCjmPWv-auswahl-254.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/GB6bhc9JIHCjmPWv-auswahl-254.png)

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.

[![Auswahl_255.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/fcU1aMDtUjHCqfd9-auswahl-255.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/fcU1aMDtUjHCqfd9-auswahl-255.png)

Auf dem Dashboard sieht das dann so aus. Ein Virtueller Schalter.

[![Auswahl_256.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/TKvaOTp3g9eQdOT2-auswahl-256.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/TKvaOTp3g9eQdOT2-auswahl-256.png)

##### 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.

[![Auswahl_194.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/66Pv0auALtb0Xzgs-auswahl-194.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/66Pv0auALtb0Xzgs-auswahl-194.png)

##### 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.

[![Auswahl_196.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/EphiB2KkR73sIAK4-auswahl-196.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/EphiB2KkR73sIAK4-auswahl-196.png)  
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

[![Auswahl_195.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/3Rk30seEkUwaqfM4-auswahl-195.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/3Rk30seEkUwaqfM4-auswahl-195.png)

Nun den Ausgang unserer prüfe schalter node mit dem Eingang des Debug Nodes verbinden und auf Deploy klicken

[![Auswahl_201.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/Q2poJncbP9yNJmIJ-auswahl-201.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/Q2poJncbP9yNJmIJ-auswahl-201.png)

Nun einen neuen Tab öffnen und unseren Schalter aus und wieder einschalten betätigen.  
Nach Erstellung ist der Schalter Standardmäßig eingeschaltet

[![Auswahl_198.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/Y6LYpCvhMEcqaIaT-auswahl-198.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/Y6LYpCvhMEcqaIaT-auswahl-198.png)

Nun machen wir den Schalter aus

[![Auswahl_199.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/7OPKhKwZzIfcrbpb-auswahl-199.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/7OPKhKwZzIfcrbpb-auswahl-199.png)

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.

[![Auswahl_202.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/g2coIYuePwyOi0gP-auswahl-202.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/g2coIYuePwyOi0gP-auswahl-202.png)

##### Event State Node (trigger/sensor) Teil 2  


Nun können wir wieder unseren Service anklicken und die Bedingung eintragen. Ist Text und on.

[![Auswahl_203.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/PJKyO6NkDC3rtO3M-auswahl-203.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/PJKyO6NkDC3rtO3M-auswahl-203.png)

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.

[![Auswahl_204.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/PHSwjO5vUUiOUM0n-auswahl-204.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/PHSwjO5vUUiOUM0n-auswahl-204.png)

Beide Ausgänge aufs Debug Modul.

[![Auswahl_205.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/nFCX2I7fP9pfmntv-auswahl-205.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/nFCX2I7fP9pfmntv-auswahl-205.png)

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

[![Auswahl_206.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/LRAq6Ziflk84QNwy-auswahl-206.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/LRAq6Ziflk84QNwy-auswahl-206.png)

Nun ist es deaktiviert. Deployen nicht vergessen.

[![Auswahl_207.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/b2k3g5yZyOrA27yT-auswahl-207.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/b2k3g5yZyOrA27yT-auswahl-207.png)

Ich lösche das Debug Objekt aber und ändere unser Kommentarfeld was jetzt auch einen sinn macht

[![Auswahl_209.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/MpWNorizE4b5hFBl-auswahl-209.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/MpWNorizE4b5hFBl-auswahl-209.png)

Ich schreibe oben in den Titel schon die Werte rein. Für die Vollbeschreibung dann doppelklick auf das Kommentar Node

[![Auswahl_210.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/zUleGkYPQk0eHZ1C-auswahl-210.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/zUleGkYPQk0eHZ1C-auswahl-210.png)

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

[![Auswahl_211.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/1gYH083JAbSpTwoY-auswahl-211.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/1gYH083JAbSpTwoY-auswahl-211.png)

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

[![Auswahl_212.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/M02g6ubQYsDoTBRr-auswahl-212.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/M02g6ubQYsDoTBRr-auswahl-212.png)

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

[![Auswahl_213.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/0O9ldP7DIQYsAaRA-auswahl-213.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/0O9ldP7DIQYsAaRA-auswahl-213.png)

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:

[![Auswahl_214.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/4j009wWNspaYMbCy-auswahl-214.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/4j009wWNspaYMbCy-auswahl-214.png)

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

[![Auswahl_219.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/FKDA8UXofd0MMuGd-auswahl-219.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/FKDA8UXofd0MMuGd-auswahl-219.png)

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.

[![Auswahl_215.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/AZYp9BCkRHMXofC9-auswahl-215.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/AZYp9BCkRHMXofC9-auswahl-215.png)

Nun braucht man nur noch den Farbwert ändern als Beispiel

[![Auswahl_220.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/3Sx4SWy8wQLuKoSS-auswahl-220.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/3Sx4SWy8wQLuKoSS-auswahl-220.png)

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.

[![Auswahl_217.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/8zt1EJrVReKUfbNq-auswahl-217.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/8zt1EJrVReKUfbNq-auswahl-217.png)

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

[![Auswahl_221.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/jUnqpMQHi2lddHXg-auswahl-221.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/jUnqpMQHi2lddHXg-auswahl-221.png)

Nun gehen wir aufs Dashbaord und schalten den schalter aus und wieder ein.

[![Auswahl_199.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/7OPKhKwZzIfcrbpb-auswahl-199.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/7OPKhKwZzIfcrbpb-auswahl-199.png)

[![Auswahl_198.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/Y6LYpCvhMEcqaIaT-auswahl-198.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/Y6LYpCvhMEcqaIaT-auswahl-198.png)

Nun wurde auch die Lampe eingeschaltet, siehe Geräte Seite

[![Auswahl_222.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/aZVv3n6i0nrQiYz2-auswahl-222.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/aZVv3n6i0nrQiYz2-auswahl-222.png)

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

[![Auswahl_223.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/kU9lu7rqgv8CQatq-auswahl-223.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/kU9lu7rqgv8CQatq-auswahl-223.png)

Wir klicken die erste noch verbundene doppelt an und ändern den Namen

[![Auswahl_225.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/xOLkfamQqCiB9DF0-auswahl-225.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/xOLkfamQqCiB9DF0-auswahl-225.png)

Bei der zweiten Node ändern wir den Namen in aus und wählen den Service turn\_off

[![Auswahl_226.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/x6gxy5gCkQHdBSoW-auswahl-226.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/x6gxy5gCkQHdBSoW-auswahl-226.png)

Nun verbinden wir die zweite node mit dem false Ausgang des event state, dann deployen

[![Auswahl_227.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/UG7o9V3rG51vSIFf-auswahl-227.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/UG7o9V3rG51vSIFf-auswahl-227.png)

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:

[![Auswahl_227.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/qr8zoPn1LRfKzUH9-auswahl-227.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/qr8zoPn1LRfKzUH9-auswahl-227.png)

Damit das Aber klappt muss im Schalter noch ein Haken gesetzt werden das der Status als Payload weitergeben werden soll

[![Auswahl_228.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/g6YlGPcna7XDLpUJ-auswahl-228.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/g6YlGPcna7XDLpUJ-auswahl-228.png)

Dies kann dann bei Standard also belassen werden

[![Auswahl_229.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/RbhefxEXOkOqp1ty-auswahl-229.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/RbhefxEXOkOqp1ty-auswahl-229.png)

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

[![Auswahl_230.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/eCQujKsri4n1veZU-auswahl-230.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/eCQujKsri4n1veZU-auswahl-230.png)

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](https://wiki.hacker-net.de/books/home-assistant/page/gerate-werte-temporar-andern-ohne-neustart "Geräte Werte Temporär ändern ohne neustart")

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

[![Auswahl_231.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/X8xCXd3ARZWIuOPB-auswahl-231.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/X8xCXd3ARZWIuOPB-auswahl-231.png)

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.

[![Auswahl_232.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/DpvZ9nc7plvD8BT3-auswahl-232.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/DpvZ9nc7plvD8BT3-auswahl-232.png)

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 ;-)

[![Auswahl_233.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/0zyroWtVCNoY8vfh-auswahl-233.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/0zyroWtVCNoY8vfh-auswahl-233.png)

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

[![Auswahl_234.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/AwyLEsrBbxm8CjrG-auswahl-234.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/AwyLEsrBbxm8CjrG-auswahl-234.png)

Wir kopieren den Debug Knopf noch einmal und verbinden diesen mit Wohnzimmer aus und deployen das ganze.

[![Auswahl_235.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/y5zcePuMfoDx1jl1-auswahl-235.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/y5zcePuMfoDx1jl1-auswahl-235.png)

man löst den Debug knopf über die Schaltfläche davor aus, wie bei der Debug Node den Knopf

[![Auswahl_236.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/sRnMKLbOILBUWP9O-auswahl-236.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/sRnMKLbOILBUWP9O-auswahl-236.png)

Anhand der Uhrzeit sieht mann ich hab erst on dann off gedrückt.

[![Auswahl_238.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/oLa6yhQD65m6GHdC-auswahl-238.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/oLa6yhQD65m6GHdC-auswahl-238.png)  
  
Hier auch nochmal im Log der Lampe

[![Auswahl_237.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/CWqR1v83Wc0l2nrH-auswahl-237.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/CWqR1v83Wc0l2nrH-auswahl-237.png)

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:

1. Flow Variablen - Gelten nur in dem aktuellen Flow
2. 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.

[![Auswahl_240.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/ZfChrFGm02ZCyuqQ-auswahl-240.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/ZfChrFGm02ZCyuqQ-auswahl-240.png)

Nach flow. den variable Namen und darunter der Wert

[![Auswahl_241.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/kL0drX5w6guh43B5-auswahl-241.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/kL0drX5w6guh43B5-auswahl-241.png)

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.

[![Auswahl_242.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/ToqfpxLsFF9MtdGh-auswahl-242.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/ToqfpxLsFF9MtdGh-auswahl-242.png)

Nun setzten wir uns ein Inject Knopf und verbinden die Change Node mit um diesen dann triggern.

[![Auswahl_243.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/wqDkIfE9JymgusBo-auswahl-243.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/wqDkIfE9JymgusBo-auswahl-243.png)  
Setzen uns eine weiteres Inject und Verbinden eine Debug Node.  
Dort einen Namen wählen und als payload flow und unseren Variable namen.

[![Auswahl_244.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/yFZDe962QG4mMKVm-auswahl-244.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/yFZDe962QG4mMKVm-auswahl-244.png)

Nun deployen wir das ganze und drücken dann auf den inject button 1 und danach inject button 2

[![Auswahl_245.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/dxN0j9Gy0Rm1yGFw-auswahl-245.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/dxN0j9Gy0Rm1yGFw-auswahl-245.png)

Nun sehen wir in der Debug leiste unseren Wert.

[![Auswahl_246.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/8SxsCeo5v4L3fL2r-auswahl-246.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/8SxsCeo5v4L3fL2r-auswahl-246.png)

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

[![Auswahl_248.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/jQgCeQBm6ZmhMQuc-auswahl-248.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/jQgCeQBm6ZmhMQuc-auswahl-248.png)

Doppelklick auf die Function und die Function anpassen

[![Auswahl_249.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/zzIzLW2tblHww2b6-auswahl-249.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/zzIzLW2tblHww2b6-auswahl-249.png)

Beschreibung:

```JavaScript
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

[![Auswahl_250.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/gZY8PLFlJRsjnBwa-auswahl-250.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/gZY8PLFlJRsjnBwa-auswahl-250.png)

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:

[![Auswahl_251.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/oBFnCGXwDSONGKN6-auswahl-251.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/oBFnCGXwDSONGKN6-auswahl-251.png)

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:

[![Auswahl_259.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/lXHms9xheQtsU8OI-auswahl-259.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/lXHms9xheQtsU8OI-auswahl-259.png)  
  
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

```JSON
{
	"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

[![Auswahl_252.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/ywrPgXwKPGT5uAlE-auswahl-252.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/ywrPgXwKPGT5uAlE-auswahl-252.png)

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.

[![Auswahl_253.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/csYdoquJBo4rAjFH-auswahl-253.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/csYdoquJBo4rAjFH-auswahl-253.png)

nun klicken wir auf die 3 Punkte

[![Auswahl_254.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/5u8BoLvdWm1DIB9I-auswahl-254.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/5u8BoLvdWm1DIB9I-auswahl-254.png)

und fügen unser json Data Beispiel von oben ein und dann auf fertig  
[![Auswahl_255.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/FppVXsvSL2uTV4GN-auswahl-255.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/FppVXsvSL2uTV4GN-auswahl-255.png)

Nun sieht das ganze so aus und jetzt unten auf hinzufügen klicken

[![Auswahl_258.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/H4bIeAK7yEt2Qeh1-auswahl-258.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/H4bIeAK7yEt2Qeh1-auswahl-258.png)

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.

[![Auswahl_260.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/q25yftQlkUeF01os-auswahl-260.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/q25yftQlkUeF01os-auswahl-260.png)

Nun unsere Nodes Verbinden und dann deploy anklicken

[![Auswahl_257.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/LB4nw7yibGIA4K4w-auswahl-257.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/LB4nw7yibGIA4K4w-auswahl-257.png)

Wenn wir jetzt auf den Injector klicken sehen wir im Debug Fenster unsere json Objekt

[![Auswahl_261.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/awPKpDrQSZ5J2iYa-auswahl-261.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/awPKpDrQSZ5J2iYa-auswahl-261.png)

Klicken wir auf den Pfeil gibt ne bessere Übersicht.

[![Auswahl_262.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/3DArd6SXln694iSW-auswahl-262.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/3DArd6SXln694iSW-auswahl-262.png)

[![Auswahl_263.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/vssqS4pxnURaVasf-auswahl-263.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/vssqS4pxnURaVasf-auswahl-263.png)

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.  
[![Auswahl_264.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/sydvClpVjW8nD4hH-auswahl-264.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/sydvClpVjW8nD4hH-auswahl-264.png)  
Nun doppelklick auf die Inject node  
Dort einen Namen vergeben und dann bei Flow den Variablenamen einegben.

[![Auswahl_265.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/RiLtLzEdYzqWK0OT-auswahl-265.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/RiLtLzEdYzqWK0OT-auswahl-265.png)

Nun kann hinter den Variablennamen ein punkt angeben werden und wir bekommen eine auflistung der Elemente

[![Auswahl_266.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/NFtL1tf5K43MwdTD-auswahl-266.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/NFtL1tf5K43MwdTD-auswahl-266.png)

Wir nehmen hier mal den Namen und klicken auf fertig.  
[![Auswahl_267.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/Q1laCSGs9VPZWy5C-auswahl-267.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/Q1laCSGs9VPZWy5C-auswahl-267.png)

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.

[![Auswahl_268.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/scaled-1680-/vqjmwAkDojfGe4RJ-auswahl-268.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-10/vqjmwAkDojfGe4RJ-auswahl-268.png)

# 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.

<div id="bkmrk-hinweis%3A-push-t%C3%B6ne-f" style="border: 1px solid #ffc107; background-color: #fff3cd; padding: 15px; margin-bottom: 20px;">**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..  
</div>```
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](#bkmrk--11)

### 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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/S9W9EWvsM1EAzlsu-auswahl-424.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/S9W9EWvsM1EAzlsu-auswahl-424.png)

Quelltext

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

Parameter

<table id="bkmrk-parameter-typ-beschr" style="width: 100%;"><thead><tr><th style="width: 15.57%;">Parameter</th><th style="width: 9.27903%;">Typ</th><th style="width: 49.5745%;">Beschreibung</th><th style="width: 25.5908%;">Beispiel</th></tr></thead><tbody><tr><td style="width: 15.57%;">`message`</td><td style="width: 9.27903%;">String</td><td style="width: 49.5745%;">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.  
</td><td style="width: 25.5908%;">`"TTS"`</td></tr><tr><td style="width: 15.57%;">`data`</td><td style="width: 9.27903%;">Objekt</td><td style="width: 49.5745%;">Zusätzliche Daten und Einstellungen für die Benachrichtigung.</td><td style="width: 25.5908%;">Siehe unten.</td></tr><tr><td style="width: 15.57%;"> `priority`</td><td style="width: 9.27903%;">String</td><td style="width: 49.5745%;">Die Wichtigkeit der Benachrichtigung. `high` sorgt dafür, dass die Benachrichtigung mit hoher Priorität gesendet wird.</td><td style="width: 25.5908%;">`"high"`</td></tr><tr><td style="width: 15.57%;"> `media_stream`</td><td style="width: 9.27903%;">String</td><td style="width: 49.5745%;">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.  
</td><td style="width: 25.5908%;">`"alarm_stream"`</td></tr><tr><td style="width: 15.57%;"> `tts_text`</td><td style="width: 9.27903%;">String</td><td style="width: 49.5745%;">Text, der über Text-to-Speech (TTS) wiedergegeben werden soll.</td><td style="width: 25.5908%;">`"Rauchmelder Fahrradschuppen Rauch erkannt"`</td></tr></tbody></table>

### 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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/nmdzrXnge6CG364L-auswahl-425.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/nmdzrXnge6CG364L-auswahl-425.png)

Dann auf die 3 Punkte und auf Herunterladen klicken.[![Menü_014.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/Gmm2F51NbaDDsjai-menu-014.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/Gmm2F51NbaDDsjai-menu-014.png)

Nun die letzte Version auswählen und herunterladen anklicken.

[![Auswahl_426.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/7LGFisgH5wuk3jSF-auswahl-426.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/7LGFisgH5wuk3jSF-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/lihViQ8yk0ZWnKmf-auswahl-427.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/lihViQ8yk0ZWnKmf-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/Jo6X08mCMOWhNNpn-img-0147.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/Jo6X08mCMOWhNNpn-img-0147.PNG)

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

[![IMG_0148.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/UFL2wyscFOoPPh90-img-0148.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/UFL2wyscFOoPPh90-img-0148.PNG)

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

[![IMG_0149.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/FcnPjAEGTbNWjVpO-img-0149.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/FcnPjAEGTbNWjVpO-img-0149.PNG)

Nun das Auto trennen raus nehmen.

[![IMG_0150.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/JJLqcFz9fgWfmiGT-img-0150.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/JJLqcFz9fgWfmiGT-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](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/N5neKE6OEwxHAYsy-grafik.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/N5neKE6OEwxHAYsy-grafik.png)

ALs json data haben wir nur Message und sprache

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

[![grafik.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/GuGrIvYXhneHUb6C-grafik.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/GuGrIvYXhneHUb6C-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/S9W9EWvsM1EAzlsu-auswahl-424.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/S9W9EWvsM1EAzlsu-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"
            }
        ]
    }
}
```

<span id="bkmrk--11"></span>

##### Beschreibung der Parameter:

<table id="bkmrk-parameter-typ-beschr-0" style="width: 100%;"><thead><tr><th style="width: 12.4864%;">Parameter</th><th style="width: 10.6241%;">Typ</th><th style="width: 54.4038%;">Beschreibung</th><th style="width: 22.5002%;">Beispiel</th></tr></thead><tbody><tr><td class="align-left" style="width: 12.4864%;">`message`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">Die Hauptnachricht der Benachrichtigung, die dem Benutzer angezeigt wird.</td><td style="width: 22.5002%;">`"Rauchmelder-Alarm! Bitte überprüfen!"`</td></tr><tr><td class="align-left" style="width: 12.4864%;">`data`</td><td style="width: 10.6241%;">Objekt</td><td style="width: 54.4038%;">Enthält zusätzliche Informationen und Konfigurationen für die Benachrichtigung.</td><td style="width: 22.5002%;">Siehe unten.</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `channel`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">Der Benachrichtigungskanal, der für Android verwendet wird. Kanäle steuern Benachrichtigungseigenschaften wie Ton oder Priorität.</td><td style="width: 22.5002%;">`"Alarm"`</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `priority`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">**`priority`** ist ein älteres, legacy‑Feld, das vor allem auf Android &lt; 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.

</td><td style="width: 22.5002%;">`"high"`</td></tr><tr><td style="width: 12.4864%;">importance</td><td style="width: 10.6241%;">String  
</td><td style="width: 54.4038%;">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

</td><td style="width: 22.5002%;">  
</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `ttl`</td><td style="width: 10.6241%;">Integer</td><td style="width: 54.4038%;">**`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.

</td><td style="width: 22.5002%;">`0`</td></tr><tr><td style="width: 12.4864%;">`push`</td><td style="width: 10.6241%;">Array  
</td><td style="width: 54.4038%;">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  
</td><td style="width: 22.5002%;">  
</td></tr><tr><td style="width: 12.4864%;">`push.category`</td><td style="width: 10.6241%;">String  
</td><td style="width: 54.4038%;">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)

</td><td style="width: 22.5002%;">"data": {  
 "push": {  
 "category": "alarm"  
 }  
}</td></tr><tr><td style="width: 12.4864%;">`push.interruption_level`</td><td style="width: 10.6241%;">String  
</td><td style="width: 54.4038%;">- **`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)

</td><td style="width: 22.5002%;"> "data": {  
 "push": {  
 "category": "alarm",  
 "interruption\_level": "time-sensitive"  
 }  
}  
</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `actions`</td><td style="width: 10.6241%;">Array</td><td style="width: 54.4038%;">Eine Liste von Aktionen, die in der Benachrichtigung angezeigt werden.</td><td style="width: 22.5002%;">SIehe json Data  
</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `action`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">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.  
</td><td style="width: 22.5002%;">`"SNOOZE"`</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `title`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">Der Text des Button, der in der Benachrichtigung angezeigt wird.</td><td style="width: 22.5002%;">`"Rauchmelder Stoppen"`</td></tr><tr><td class="align-left" style="width: 12.4864%;"> `icon`</td><td style="width: 10.6241%;">String</td><td style="width: 54.4038%;">(Optional) Ein Icon, das mit der Aktion verknüpft ist. iOS unterstützt dies, aber Android zeigt normalerweise keine Icons an.</td><td style="width: 22.5002%;">`"mdi:bell-alert"`</td></tr></tbody></table>

##### Tabelle importance Werte und unterschied zu Priority

<table class="min-w-full" data-end="1301" data-start="172" id="bkmrk-stufe-konstante-verh" style="width: 100%;"><thead data-end="333" data-start="172"><tr data-end="333" data-start="172"><th data-end="185" data-start="172" style="width: 8.82002%;">Stufe</th><th data-end="217" data-start="185" style="width: 20.2622%;">Konstante</th><th data-end="288" data-start="217" style="width: 47.3174%;">Verhalten</th><th data-end="333" data-start="288" style="width: 23.6004%;">Entspricht (Android 7.x priority)</th></tr></thead><tbody data-end="1301" data-start="496"><tr data-end="657" data-start="496"><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="509" data-start="496" style="width: 8.82002%;">**None**</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="541" data-start="509" style="width: 20.2622%;">`IMPORTANCE_NONE (0)`</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)] min-w-[calc(var(--thread-content-max-width)/3)]" data-end="612" data-start="541" style="width: 47.3174%;">Keine Anzeige, kein Ton, nicht im Benachrichtigungsbereich sichtbar</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="657" data-start="612" style="width: 23.6004%;">(kein Äquivalent)</td></tr><tr data-end="818" data-start="658"><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="671" data-start="658" style="width: 8.82002%;">**Min**</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="703" data-start="671" style="width: 20.2622%;">`IMPORTANCE_MIN (1)`</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)] min-w-[calc(var(--thread-content-max-width)/3)]" data-end="773" data-start="703" style="width: 47.3174%;">Kein Ton, kein Icon, nicht im Status‑Bar‑Bereich</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="818" data-start="773" style="width: 23.6004%;">`PRIORITY_MIN`</td></tr><tr data-end="979" data-start="819"><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="832" data-start="819" style="width: 8.82002%;">**Low**</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="864" data-start="832" style="width: 20.2622%;">`IMPORTANCE_LOW (2)`</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)] min-w-[calc(var(--thread-content-max-width)/3)]" data-end="934" data-start="864" style="width: 47.3174%;">Kein Ton, nur in der Benachrichtigungs‑Leiste</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="979" data-start="934" style="width: 23.6004%;">`PRIORITY_LOW`</td></tr><tr data-end="1140" data-start="980"><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="993" data-start="980" style="width: 8.82002%;">**Default**</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1025" data-start="993" style="width: 20.2622%;">`IMPORTANCE_DEFAULT (3)`</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1095" data-start="1025" style="width: 47.3174%;">Ton, erscheint in Leiste</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1140" data-start="1095" style="width: 23.6004%;">`PRIORITY_DEFAULT`</td></tr><tr data-end="1301" data-start="1141"><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1154" data-start="1141" style="width: 8.82002%;">**High**</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1186" data-start="1154" style="width: 20.2622%;">`IMPORTANCE_HIGH (4)`</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1256" data-start="1186" style="width: 47.3174%;">Ton + Heads‑Up‑Popup (aufklappbar)</td><td class="max-w-[calc(var(--thread-content-max-width)*2/3)]" data-end="1301" data-start="1256" style="width: 23.6004%;">`PRIORITY_HIGH` / `PRIORITY_MAX`</td></tr></tbody></table>

> **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. <span class="" data-state="closed"><span class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]">[<span class="relative start-0 bottom-0 flex h-full w-full items-center"><span class="flex h-4 w-full items-center justify-between overflow-hidden"><span class="max-w-full grow truncate overflow-hidden text-center">Android Developers</span></span></span>](https://developer.android.com/develop/ui/views/notifications/channels?utm_source=chatgpt.com)</span></span><span class="ms-1 inline-flex max-w-full items-center relative top-[-0.094rem] animate-[show_150ms_ease-in]">[<span class="relative start-0 bottom-0 flex h-full w-full items-center"><span class="flex h-4 w-full items-center justify-between overflow-hidden"><span class="max-w-full grow truncate overflow-hidden text-center">Android Developers</span></span></span>](https://developer.android.com/develop/ui/views/notifications?utm_source=chatgpt.com)</span>

**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:

- **`tag`**Wird 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](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/OL9JhnU4yvrECTEJ-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/OL9JhnU4yvrECTEJ-image.png)

Dann eine Switch Node zum auswerten

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/EjZXfc8YUWLUmHth-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/EjZXfc8YUWLUmHth-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](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/e9gw3Jj6JKUGjeOd-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/e9gw3Jj6JKUGjeOd-image.png)

Die Eigenschaft der Events Node

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/QUdRLRWGTL8CEkfC-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/QUdRLRWGTL8CEkfC-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](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/8U6D9YYJ3hLi2bnQ-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/8U6D9YYJ3hLi2bnQ-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](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/i131U2tzYqHHLJOA-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/i131U2tzYqHHLJOA-image.png)

Und dann beim Button empfangen

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/BpvC0pKDoX0EIXh4-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/BpvC0pKDoX0EIXh4-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"]
    }
  }
}

```

# 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.

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/eGgN0uh9NIJgqcWB-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/eGgN0uh9NIJgqcWB-image.png)

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.

Beim Button senden

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/ro82LUVxbsmppzaf-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/ro82LUVxbsmppzaf-image.png)

Und dann beim Button empfangen

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/scaled-1680-/BpvC0pKDoX0EIXh4-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-04/BpvC0pKDoX0EIXh4-image.png)

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

  
  
Hier einmal der Komplette code als export:

```json
[
    {
        "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
    }
]
```