Bastelecke > Smarthome > ioBroker und Node-RED > Node-RED als eigenständige Instanz mit dem ioBroker verbinden
Kommen wir nun zur zweiten Möglichkeit Node-RED zusammen mit dem ioBroker zu kombinieren. Nur fügen wir ihn diesmal nicht als Plugin hinzu, sondern betreiben die Software als eigenständiges System, in einem LXC-Container in Proxmox-VE.
Was Proxmox-VE ist, wie man es installiert und verwendet, habe ich hier bereits ausführlich erklärt:
Bastelecke > Proxmox Virtual Environment
Wer bereits mit Proxmox-VE arbeitet, und vielleicht auch bereits seinen ioBroker darauf laufen lässt, für den eignet sich die hier gezeigte Installationsvariante besonders, aufgrund der hohen Performance und der besseren Lastenverteilung. Das liegt vor allem daran das Node.js gewissermaßen ein Flaschenhals darstellt. Zum einen liegt das daran das JavaScript eine Interpreter-Sprache ist, welche erst bei der Ausführung in Maschinencode übersetzt wird. Diese Übersetzung klaut Prozessorleistung. Zum anderen ist Node.js nur bedingt Multicore-fähig. Heißt somit, ein Prozess, der darauf gestartet wird, wird immer nur von einem Prozessorkern verarbeitet. Das beides in Kombination macht den ioBroker, bei großen Installationen, schnell träge. Hat man viele Adapter installiert merkt man schnell wie die Reaktionszeiten in die Höhe schießen, bereits lange bevor die CPU des Systems an ihre Grenzen stößt.
Im Smarthome, und damit auch im ioBroker, wo alle Fäden zusammen laufen, laufen sehr viele Prozesse parallel ab. Drückt man einen Schalter, soll das Licht möglichst ohne Verzögerung einschalten, während gleichzeitig Heizungsthermostate Temperaturen übermitteln und das Tablet an der Wand mit den neuesten Statusinformationen gefüttert wird. Davon das mit nur einem CPU-Kern alles nacheinander verarbeitet wird merkt man nur deshalb nichts, weil die CPU bei der Ausführung der Befehle so wahnsinnig schnell ist. Doch spätestens wenn die Visualisierung auf dem Tablet an der Wand Verbindungsabbrüche hat oder die Verzögerung zwischen Tastendruck auf dem Tablet und Schalten der Lampe mehrere Sekunden dauert, weiß man wovon ich rede.
Hier macht es nun absolut Sinn Node-RED auf einer eigenen virtuellen Maschine laufen zu lassen. Nur so kann man sicher gehen das die beiden Instanzen von Node.js sich nicht gegenseitig blockieren. Der Geschwindigkeits-Boost, der sich daraus ergibt, ist enorm und deutlich spürbar. Auch lassen sich so beliebig viele Node-RED Instanzen parallel betreiben. Einzige Limitierung hier stellen dann nur noch die Speicherressourcen des Host-Systems dar, wobei selbst hier mit weiteren Rechnern theoretisch nahezu endlos erweitert werden könnte.
Installation von Node-RED in Proxmox-VE
Ich setze an dieser Stelle zwingend voraus das ihr wisst wie ihr euch in euren Proxmox-VE Server einloggt und mit der grundsätzlichen Bedienung vertraut seid. Anderenfalls empfehle ich euch dringend zuerst die oben bereits verlinkten Kapitel zum Thema Proxmox-VE zu lesen.
Die Installation von Node-RED unter Proxmox-VE als Linux Container ist dank den Proxmox Helper Scripts denkbar einfach. Hier ist nämlich ein Script zur vollautomatischen Erstellung eines Containers samt anschließender Installation von Node-RED verfügbar.1
Wir loggen uns also in unseren Proxmox-VE Server ein, wählen auf der linken Seite den Proxmox-Host aus, auf dem wir Node-RED installieren wollen und gelangen mit einem Klick auf den _Shell Button, oben rechts, in die Admin-Konsole des ausgewählten Hosts.

Hier geben wir nun folgende Befehlszeile ein, die wir uns zuvor in der Datenbank der Proxmox Helper Scripts rausgesucht haben, um die Installation zu starten:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/node-red.sh)"
Die Tastenkombination Strg.+V zum Einfügen funktioniert hier übrigens nicht. Statt dessen muss mit Rechtsklick – Einfügen der zuvor kopierte String hinzugefügt werden.
Mit Enter-Taste starten wir nun die Installation. Diese führen wir mit den Standard-Einstellungen durch.

Ihr werdet aufgefordert einen Datenträger zur Installation auszuwählen:

In meinem Fall hier gehe ich mit Pfeiltasten zu zfs-data, welches ich anschließend mit der Leertaste auswähle, da es sich hierbei um ein mehrere Hosts umfassenden Speicherort handelt, wo der Container später frei zwischen den Hosts verschiebbar wird. Habt ihr sowas nicht, oder möchtet ihr den Container später nur auf dem einen Proxmox-Host nutzen, könnt ihr auch einfach local-lvm auswählen. Mit der Eingabetaste fahrt ihr hier fort.
Nun läuft die Installation eigenständig durch.

Die Installation ist abgeschlossen, wenn wieder der Eingabeprompt erscheint. Zum Ende wird uns auch direkt mitgeteilt wie wir auf die Oberfläche unserer neu hinzugefügten Node-RED Installation gelangen.

Keine der hier hinterlegten Einstellungen ist später in Stein gemeißelt. In dem Container, welcher nun erstellt wird, lassen sich sämtliche Einstellungen später ändern und erweitern. Auch der zuvor ausgewählte Speicherort lässt sich ändern indem man im Container, in der Sektion Ressources, einfach die Root Disk auf ein anders Laufwerk verschiebt.

Testen wir doch direkt die Installation, indem wir die Nutzeroberfläche von Node-RED, unter Verwendung der zuvor gezeigten Adresse am Ende der Installation, im Browser aufrufen:

Hier werden uns wahrscheinlich gleich zwei Dinge, im Unterschied zur Installation als Adapter im ioBroker, auffallen. Zum Einen handelt es sich hier um Version 4.0, im Gegensatz zur alten 3-er Version des ioBroker. Zum Anderen reagiert Node-RED bereits von Anfang an erheblich schneller als die Adapter-Version.
Allerdings wird uns bei der weiteren Betrachtung auch auffallen das wir keine ioBroker-Nodes zur direkten Interaktion mit dem ioBroker zur Verfügung haben. Kommen wir also dazu, wie wir Node-RED dennoch mit dem ioBroker verbinden.
Verbindung von Node-RED im ioBroker vorbereiten
Die wohl einfachste Möglichkeit ioBroker mit Node-RED zum verbinden ist die Verwendung von MQTT. Dabei handelt es sich um ein schlankes und äußerst performantes Server-Client-Protokoll zur Kommunikation zwischen IoT-Devices verschiedener Hersteller.
Wenn ihr wissen wollt wie ihr einen MQTT-Server (auch Broker genannt) auf eurem ioBroker installiert, könnt ihr hier weiterlesen:
Bastelecke > Smarthome > ioBroker > Adapter installieren: MQTT
Solltet ihr bereits MQTT installiert haben und zur Gerätekommunikation nutzen, würde ich euch dringend empfehlen zur Kommunikation mit Node-RED eine weitere Instanz hinzuzufügen. Anders als die Geräte, welche lediglich im mqtt-Verzeichnis des Objektbaums ihre Werte posten, benötigt Node-RED Vollzugriff auf alles. Auch solltet ihr diesen Vollzugriff unbedingt mit einem sicheren Passwort absichern, da der Vollzugriff auf alle Schaltzustände ein erhebliches Sicherheitsrisiko darstellt. Gelangt jemand in euer lokales Netz, könnte er damit einfach alles steuern, was am ioBroker hängt.

Eine weitere Instanz fügen wir hinzu, indem wir im linken Menü, wie auch bei der Installation, in den Adapter-Katalog gehen, dort wieder MQTT suchen und bei dem bereits installierten Adapter Instanz hinzufügen wählen.
Haben wir nun unsere MQTT-Broker Instanz zur Interaktion mit Node-RED hinzugefügt, müssen wir erstmal die Einstellungen entsprechend anpassen. Diese rufen wir im Menüpunkt Instanzen mit dem Schraubenschlüsselsymbol hinter der entsprechenden MQTT-Instanz auf.

In den Einstellungen müssen wir bei IP erstmal auf Server/Broker umstellen. Sollte dieses nicht unsere erste Server-Instanz sein, müssen wir hier auch den Port ändern, da der vorgegebene Port 1883 dann bereits von der ersten Instanz belegt ist. Auf meinem Produktivsystem habe ich zum Beispiel diesen Fall. Dort habe ich einfach an den Port eine 1 angehängt. Wichtig ist nur das jeder Port nur einmal belegt werden kann. Wir könnten auch ebenso gut 1884, verwenden, müssen es uns halt nur merken oder notieren da Node-RED diesen später zum Verbinden benötigt.
Auch sollte hier, in den Authentifizierungseinstellungen, weiter unten, zwingend ein Benutzer, sowie ein sicheres Passwort eingegeben werden, da wir gleich diese Instanz so konfigurieren, dass sie Vollzugriff auf den ioBroker bekommt.

Nachdem wir auf Speichern geklickt haben, wählen wir nun oben den Reiter MQTT Einstellungen, wo wir einige Anpassungen vornehmen müssen. Die nachfolgende Konfiguration könnt ihr so übernehmen. Diese sollte einwandfrei mit Node-RED funktionieren und Vollzugriff gewähren.

Anschließend wählt ihr Speichern und Schließen und startet die Instanz durch klicken auf den Play-Button in der MQTT-Zeile.

Wird die Zeile nun grün, hat alles funktioniert und auf Seite des ioBrokers ist alles bereit. Lasst euch von dem Ausrufezeichen, anstelle des grünen Punktes vor der Zeile, nicht verwirren. Es bedeutet nur das noch keine Verbindung zu dieser Instanz hergestellt wurde. Sobald sich Node-RED verbindet, wird daraus ein grüner Punkt.

Mit Node-RED auf ioBroker zugreifen
In Node-RED haben wir zwar keine Nodes zur direkten Interaktion mit ioBroker, allerdings finden wir in der Kategorie Netzwerk den Node MQTT in, welchen wir uns nun in unseren Flow ziehen.

Durch Doppelklick darauf gelangen wir nun in die Einstellungen, wo wir zunächst mit Klick auf das Plus hinter Neuen Typ ‚mqtt-broker‘ hinzufügen unseren vorhin erstellten MQTT-Broker auf ioBroker anlegen.

Keine Sorge, dieses muss nur einmal gemacht werden. Danach können wir den im Dropdownmenü bei Server immer wieder auswählen, ohne die Zugangsdaten immer wieder neu eingeben zu müssen. Jetzt müssen wir allerdings einmal da durch.

In die Zeile Server gebt ihr die IP-Adresse eures ioBrokers ein. Solltet ihr vorhin den Port so gelassen haben, könnt ihr hier einfach die Voreinstellungen beibehalten. Anderenfalls müsst ihr den auch noch ändern. Wenn ihr möchtet, könnt ihr oben noch einen Namen vergeben, der wird euch dann später immer, anstelle der IP-Adresse angezeigt. Anschließend wechselt ihr in den Reiter Sicherheit. Dort müsst ihr euren vorhin vergebenen Nutzernamen, sowie das Passwort hinterlegen und bestätigt das anschließend durch klicken auf Hinzufügen.

Nun sieht der Eigenschaften-Dialog des mqtt in Nodes so aus, und es existiert der Server

In der Zeile Topic habe ich nun einen Schaltzustand eingegeben, welchen ich zuvor in meinem Demosystem angelegt habe. Anschließend bestätigen wir das durch klicken auf die Fertig Schaltfläche.

Bei größeren Installationen, wo die Schaltzustände durchaus längere Pfade und Namen haben können, können wir uns den Pfad auch einfach rauskopieren. Geht hierzu auf das Stiftsymbol hinten in der Zeile des entsprechenden Schaltzustandes.

Anschließend könnt ihr den exakten Pfad aus der Titelzeile markieren und kopieren.

Vergesst nur nicht die Punkte durch „/“ zu ersetzen. MQTT trennt die Verzeichnisebenen mit „/“, ioBroker hingegen mit Punkt.
Zurück in Node-RED ziehen wir uns in unseren Flow zum Testen nun auch wieder den debug-Node rein und verbinden beide mit einer Linie.

Anschließend klicken wir oben rechts auf deploy.

Hat alles geklappt, wird unter unserem MQTT-in-Node ein grüner Punkt angezeigt, gefolgt von dem Schriftzug Verbunden.

Ändern wir nun den Zustand vom Objekt in ioBroker, wird der neue Zustand über den MQTT-in-Node an den debug-Node übermittelt und im Debug-Bereich in Node-RED ausgegeben.

So, zum Abschluss erstellen wir uns gleich einmal unsere erste sinnvolle logische Verknüpfung. Ich ziehe den MQTT-Out-Node in den Flow, verbinde ihn mit dem MQTT-in-Node und bearbeite ihn mit Doppelklick.
Hier wähle ich nun wieder unseren bereits erstellten Server und als Topic dieses Mal den ebenso vorhin manuell erzeugten Schaltzustand Testlampe.

Fertig und deploy, dann sollte das ganze so aussehen:

Ändern wir nun den Wert von Testschalter im ioBroker, ändert Node-RED damit auch den Schaltzustand von Testlampe.


Machen wir das nun statt mit manuell erzeugten Testzuständen, mit einem echten angeschlossenen Schalter und einer tatsächlich vorhandenen Lampe, dann haben wir hier schon unseren ersten tatsächlichen Nutzen.
Wir haben nun gesehen wie man Node-RED als eigenständige Instanz installiert und mit ioBroker verbindet. Außerdem haben wir unsere erste logische Verknüpfung erstellt.
Nun solltet ihr euch mit den Funktionen und Möglichkeiten von Node-RED vertraut machen. Spielt ruhig etwas herum, probiert Nodes aus, usw. Dank der grafischen Nutzeroberfläche und den logischen Zusammenhängen ergibt sich vieles von selbst.
Das Erstellen von komplexeren Flows und Funktionen in Node-RED werde ich hier demnächst im nächsten Kapitel genauer erläutern. Bis dahin, viel Spaß beim Testen und Ausprobieren.
Weiter geht es hier:
Erste Flows und die grundsätzliche Funktionsweise von Node-RED