Node-Red

Einstieg in Node-RED | Elektor Magazine

Warum Node-Red?

Ob bei der smarten Gebäudeautomatisierung oder industriellen Anlagen, die ihren Weg ins IoT finden sollen, besteht häufig das Problem, dass es keine gemeinsamen Schnittstellen gibt. Wie soll zum Beispiel ein Schütz hinter einer SPS durch eine Rest-API angesprochen werden können? Die Antwort darauf bietet Node-Red. Die Open-Source Low-Code-Plattform fokussiert sich auf das einfache Verbinden von verschiedener Hardware, Schnittstellen, Services und Protokolle mittels Drag and Drop. So lassen sich komplexe IoT-Anwendungen ohne vorausgesetzte Programmierkenntnisse entwickeln. Ein Baukastenprinzip ermöglicht es Prozesse einfach, transparent und Menschen-lesbar zu modellieren.

Neben den Automatisierungsmöglichkeiten bietet Node-Red darüber hinaus die Möglichkeit Dashboards zur Auswertung erfasster Daten zu generieren. Auch hier kann mit wenigen Klicks eine umfangreiche Visualisierung generiert werden.

Das breite Spektrum der Einsatzmöglichkeiten sorgt dafür, dass die Software sowohl in der Industrie zum Rapid-Prototyping wie auch in privaten Haushalten zur Heimautomatisierung Einzug hält.

Funktionsweise

Node-Red-Plattform

Bei Node-Red handelt es sich um eine auf JavaScript basierende grafische Entwicklungsumgebung, deren Laufzeitumgebung auf Node.js aufbaut. Dem Entwickler bleibt dies jedoch auf den ersten Blick in die IDE verborgen.

Der Baukasten von Node-Red besteht aus Nodes, welche mittels Drag and Drop zu einem Flow zusammengeführt und angeordnet werden können. Dabei gibt es Eingabe-, Ausgabe- und Verarbeitungs-Nodes. Jede einzelne besteht aus einem Eingang, mehreren Ausgängen oder einer Kombination aus beidem. Der Ausgang einer Node kann mit dem Eingang einer weiteren verbunden werden. Über diese Verbindungen erfolgt der eventbasierte Nachrichtenaustausch in Form eines Message-Objects.

Screenshot-Node-Red-Umgebung

Eine Node implementiert immer eine bestimmte Funktion nach dem Blackbox-Prinzip: Eine Information wird in den Eingang hineingegeben und nach kurzer Verarbeitungszeit erfolgt eine Ausgabe am Ausgang. Viele Funktionalitäten sind bereits in fertigen Nodes verfügbar oder können durch die Einbindung von entsprechenden Bibliotheken hinzugefügt werden. Das kuratierte Modul-Repository umfasst zahlreiche Integrationen von Google-Services bis hin zu industriellen Bus-Controllern.

Screenshot-Modul-Repository
Komplexere Funktionen lassen sich in einer Function-Node abbilden, deren Verhalten frei mit JavaScript beschrieben werden kann.

Screenshot-function-node

Zur Erstellung vollständiger Preset-Nodes müssen zusätzlich in HTML die Eigenschaften, der Bearbeitungsdialog und ein Hilfetext definiert werden. Die Datei „package.json“ beschreibt abschließend das fertige Modul. Die Eigenschaft der Erweiterbarkeit mittels Code macht Node-Red zu einer Low-Code-Plattform, statt einer No-Code-Plattform.

Die erstellten Flows oder auch Teile davon können jederzeit als JSON-String exportiert werden. Gleichermaßen unkompliziert wird das Importieren von Flows in einer anderen Node-Red-Instanz ermöglicht. Das Format eignet sich darüber hinaus ebenso um in einer Quellcode-Verwaltung gespeichert zu werden.

Screenshot-Export

Flow-based Programming

Das Prinzip hinter Node-Red ist das sogenannte Flow-based Programming (Flussbasierte Programmierung). Es beschreibt ein Programmierparadigma, dass von J. Paul Morrison erfunden wurde. In diesem Paradigma ist ein Programm ein Netzwerk aus einzelnen Prozessen, die über Eingänge und Ausgänge miteinander verbunden sind. Jeder Prozess ist als Black Box zu betrachten, und ist dabei von den anderen Prozessen unabhängig, abgesehen von den Eingaben, die er von diesen erhält. Es gibt also keinen „Shared mutable state“, womit die Prozesse asynchron und parallel arbeiten können. Außerdem lassen sich Netzwerke von Prozessen zu neuen Einzelprozessen mit Eingängen und Ausgängen zusammenfassen, die man dann in anderen Netzwerken nutzen kann, ähnlich wie in anderen Programmierparadigmen Unterprogramme aus anderen Unterprogrammen zusammensetzbar sind.

Zur Programmierung wird oft ein visuelles Tool benutzt, welches das resultierende Programm in eine textbasierte Programmiersprache übersetzt. Im Idealfall lässt sich damit einen Prozess, den man in der Planungsphase der Softwareentwicklung modelliert hat, sehr schnell implementieren.

Bei oberflächlicher Betrachtung sieht Node-Red wie ein gutes Tool zur flussbasierten Programmierung aus. Laut J. Paul Morrison gehört Node-Red zu den Systemen, die zwar von der flussbasierten Programmierung inspiriert sind, jedoch nur einen Teil der wichtigen Aspekte des Paradigmas umsetzen und deshalb auch dessen Vorteile nicht richtig ausnutzen können. Als Mängel solcher Systeme nennt er unter anderem fehlende Asynchronität zwischen den einzelnen Prozessen, und die Tatsache, dass ein Ausgang eines Prozesses mit mehreren Eingängen anderer Prozesse verknüpft sein kann. Trotz dieser Unzulänglichkeiten bietet Node-Red einen guten Einstieg in die flussbasierte Programmierung und die Softwareentwicklung mit einem visuellen Tool.

Anwendungsfälle

Low Code IDE für IoT-Anwendungen

IoT-Anwendungen verknüpfen verschiedene Geräte kabelgebundenen, oder über drahtlose Netzwerke wie Bluetooth und Wi-Fi. Im Smart-Home Bereich können dies zum Beispiel intelligente Leuchtmittel, Thermostate und Schaltsteckdosen sein. Sollen Geräte abhängig voneinander geschaltet werden oder eine übergreifende Automatisierungen, zum Beispiel mit zeitlicher Abhängigkeit, implementiert werden eignet sich Node-Red sehr gut.

Die größte Schwierigkeit, bei der Entwicklung einer solchen Anwendung, stellt in der Regel die Schnittstellenentwicklung für die einzelnen Geräten dar. Da jedoch genau diese bereits in einer großen Vielzahl in Node-Red vorhanden sind, beschränkt sich die Entwicklungstätigkeit auf das Erstellen der Schaltungslogik.

So lässt sich beispielsweise binnen Minuten das Öffnen eines Türkontakt mit dem Einschalten der Zimmerbeleuchtung eines anderen Systems verknüpfen. Bei Bedarf wird dieser Aufbau noch durch ein Dashboard ergänzt, was die Kontrolle über verschiede Prozesse und Aktoren vom Smartphone aus ermöglicht.

Prototypen-Entwicklung

Das schnelle Entwickeln von Programmabläufen macht Node-Red im Hinblick auf Rapid-Prototyping interessant. Eine komplexe Anwendung kann als Netzwerk von Knoten konstruiert werden. Die Darstellung in der IDE ermöglicht eine gute Lesbarkeit und bietet die Chance nicht-programmierende Projektbeteiligte in den Entwicklungsprozess zu integrieren.

Ein solcher Prototyp kann dabei unterstützen kritische Aspekte oder Probleme früh zu identifizieren. Der Prototyp ist dabei in der Regel hinsichtlich der Performance einer hochsprachlichen Implementierung unterlegen, kann jedoch als Proof Of Concept dienen.

Auch zum Mocking kann Node-Red genutzt werden. Mit wenig Aufwand wird ein System simuliert, mit welchem im Entwicklungsprozess kommuniziert werden soll. Dies kann zum Beispiel eine Motorsteuerung sein, die ihre Betriebsparameter zyklisch via OPC-UA bereitstellt.

HMIs oder Dashboard lassen sich in durch integrierte Nodes zügig als einfache Web-Oberfläche zusammensetzen. Sie können als funktionaler Platzhalter in der Entwicklung wie auch als Diskussionsgrundlage in der Angebotsphase zwischen Kunden und Vertrieb dienen.
Wenn so zum Beispiel ein Kunde seine Anforderungen für ein neues Tool oder eine Änderung formuliert hat, kann vor Erstellung des konkreten Pflichtenhefts aufwandsarm ein Software-Prototyp erstellt werden. Sofern kein weitereichendes technisches Wissen benötigt wird, muss das Entwicklungsteam an diesem Prozess nicht beteiligt werden. Der Prototyp kann dem Kunden dabei helfen seine Anforderungen zu konkretisieren und dem Projektteam ein belastbares Pflichtenheft zu formulieren.

bpmn

Citizen Development

Citizen Development beschreibt die Integration fachfremder Personen in den Softwareentwicklungsprozess. Ein Argument dafür kann sein, dass sich Mitarbeiter, welche mit einem Prozess arbeiten, in der Regel besser in diesen Hineinversetzen können und daraus Anforderungen für ein Tool, zur Verbesserung des Prozess, ableiten können, als ein Softwareentwickler-Team. Ende 2022 wurde Citizen Development bereits von 39 % der Unternehmen in den USA genutzt.

Durch Low-Code- oder No-Code-Plattformen ist eine solche Verlagerung der Softwareentwicklung, hin zum Anwender, in einem gewissen Rahmen möglich. Dies kann nicht nur die Entwicklungsdauer verkürzen, es entlastet ebenso die Entwicklerteams.

Des Weiteren kann Low-Code das Interesse an Softwareentwicklung wecken und einen niedrigschwelligen Einstieg ermöglichen. Für komplexe Abläufe ist Citizen Development mit Node-Red jedoch nicht geeignet, da hier die Standard-Nodes schnell an ihre Grenzen kommen, und Teile des Algorithmus mit der Function-Node in Javascript umgesetzt werden müssen.

Betrieb von Node-Red

Node-Red ist eine Plattform, welche vielseitig einsetzbar ist. Doch welche Vorrausetzungen müssen erfüllt sein, um die Software zur Anwendung bringen zu können?

Node-Red ist ausschließlich On Premise nutzbar. Neben einer Installation unter Windows und allen gängigen Linux-Distributionen, wird die Software auch als Docker-Image bereitgestellt.

Die Anforderungen an die Hardware sind dabei sehr gering. So kann Node-Red problemlos auf einem RaspberryPi ausgeführt werden. Im industriellen Kontext hält die Low-Code-Plattform ebenfalls Einzug. Auf vielen IoT-Gateways (z.B. Siemens IoT2050) und (Soft-)SPS (z.B. RevPi) ist Node-Red bereits vorinstalliert. Dabei sind jedoch ausschließlich Automatisierungsaufgaben umzusetzen, welche keine Echtzeitfähigkeit verlangen. Bestehende Produktionsanlagen ohne umfangreiche Schnittstellen können auf diesem Weg um ein IoT-Hardwaremodul mit Node-Red erweitert werden, welches als Brücke zwischen der Steuerungstechnik und einem übergeordneten MES-/ERP- System dient.

Node-Red-IndustrialUse
Quelle: https://www.it-production.com/industrie-4-0-iot/node-red-im-industrial-iot/

Installationsanleitung für docker-icon

Da Docker Betriebssystemübergreifend verwendet werden kann, bietet sich die Installation auf diesem Weg an. Zur Ausführung ist lediglich ein Befehl notwendig:

docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
Parameter:
„-it“ startet eine interaktive bash shell in den Container, alternativ „-d“ für Hintergrundbetrieb
„-p“ Portmapping PortHost:PortContainer
„-v“ Docker-Volume zur Speicherung der Flows, welche in Container gemounted wird
„–name“ Name des Container
Anschließend kann die Programmieroberfläche von Node-Red, in diesem Beispiel, im Browser unter http://localhost:1880/ aufgerufen werden. Das Dashboard ist unter http://localhost:1880/ui/ zu finden.
Zur Konfiguration des Dashboard sollte das zugehörige Modul „node-red-dashboard“ installiert werden.
Hamburger-Menü->“Palette verwalten“->“Installation“->Modul suchen
Für weitere Informationen zur Konfiguration kann der offizielle Installationsleitfaden konsultiert werden.

Alternativen zu Node-Red

Zu Node-Red gibt es zahlreiche Alternativen. Im Folgenden werden drei Alternativen kurz vorgestellt.

Kissflow

Bei Kissflow handelt es sich um eine kostenpflichtige End-to-End-Workflow-Software, welche cloudbasiert ist. Es handelt sich ebenfalls um eine No-Code Anwendung, bei der sich automatisierte Workflows sehr einfach über Drag-and-Drop erstellen lassen. Es werden dabei strukturierte Workflows (Fallmanagement) und unstrukturierte Workflows (BPM/Prozessmanagement) unterstützt. So ist es möglich in einer intelligenten und einfach zu integrierenden Plattform automatisierte Prozesse und Projektboards zu erstellen, mit deren Hilfe man einen Fallfluss abwickeln sowie Arbeitsthemen zusammenarbeiten kann. Weltweit wird Kissflow von über 10.000 Unternehmen in über 100 Ländern genutzt.

Vorteile:
– weltweit in einer Vielzahl an Unternehmen im Einsatz
– Kundenspezifische Entwicklung
– benutzerdefinierte Integration von anderen Apps möglich

Nachteile:
– kostenpflichtig

Kissflow
Quelle: https://www.capterra.com.de/software/149470/kissflow

NoFlo

NoFlo ist eine JavaScript Implementation von Flow-based Programming, welche den Kontrollfluss der Software von der eigentlichen Softwarelogik trennt. Die MIT-lizensierte NoFlo Bibliothek kann entweder komplett Flow-basierte Anwendungen ausführen sowie als Bibliothek komplexe Workflows oder asynchrone Prozesse besser managebar machen. Ebenfalls kann es als Extract, Transform, Load (ETL) Tool in Business Anwendungen benutzt werden. NoFlo Komponenten können in jeder Sprache geschrieben werden, welche zu JavaScript transpiliert werden kann.

Vorteile:
– Open Source

Nachteile:
– keine GUI zur Bearbeitung von Flows

noflo
Quelle: https://bergie.iki.fi/blog/noflo-jekyll/

Datacake

Datacake ist eine ab dem dritten Gerät kostenpflichtige IoT Low-Code Plattform mit der IoT Anwendungen ohne Programmierkenntnisse erstellt werden können. Durch ein benutzerfreundliches Dashboard lassen sich Auslöser und Bedienungen zusammenklicken. Es sind eine Vielzahl von Templates für die Geräte der etablierten Hersteller vorhanden, mit denen die Konfiguration ohne Programmierkenntnisse durchgeführt werden kann. Es bietet ebenfalls die Integration für LoRaWAN Netzwerk Server.

Vorteile:
– benutzerfreundlich
– keine Programmierkenntnisse nötig

Nachteile:
– kostenpflichtig

datacake
Quelle: https://datacake.co/low-code-iot-platform

Fazit

Node-Red ist eine vielseitige Low-Code-Plattform, welche in vielen Szenarien Anwendung finden kann. Von privaten Bastelprojekten bis in die Industrie wird immer häufiger auf die Software zurückgegriffen, um schnell, einfach und transparent Automatisierungslösungen zu schaffen. Die einfache Verbindung von Sensoren, Aktoren, Services und Dashboards macht Node-Red attraktiv. Dabei ist die Nutzung der Open-Source Plattform kostenlos. Die entwickelte Applikation wird jedoch nicht denselben Maßstäben, im Hinblick auf Performance oder mögliche Komplexität, wie eine hochsprachliche Implementierung gerecht.

Quellen

Autoren: Benjamin Killisch, Malte Schönert, Valentin Rosenke