Node-RED
Node-RED ist das flussbasierte Low-Code-Werkzeug, mit dem du im Browser ganze IoT-Pipelines zusammenklickst – von MQTT- und HTTP-Eingängen über Function-, Switch- und Change-Nodes bis zu Datenbank, Dashboard oder MQTT-Ausgang. Diese Anleitung zeigt dir Konzepte, Einsatzgebiete und den sauberen Docker-Betrieb mit persistentem /data-Volume.
Wenn du im IoT-Umfeld Geräte, Protokolle und Dienste miteinander verbinden musst, landest du früher oder später bei Node-RED. Das Werkzeug positioniert sich genau an der Stelle, an der sonst kleine Wegwerf-Skripte entstehen: Es nimmt Daten aus Sensoren, MQTT-Topics oder HTTP-Aufrufen entgegen, formt sie um und schickt sie an Datenbanken, Dashboards oder weitere Systeme. Statt dafür Code zu schreiben, verdrahtest du vorgefertigte Bausteine im Browser zu einem Fluss – darum heisst es flussbasierte oder Low-Code-Programmierung. In dieser Anleitung lernst du, was Node-RED ist, wofür es sich eignet, welche zentralen Konzepte du kennen musst und wie du es sauber und datensicher per Docker betreibst.
Was ist Node-RED?
Node-RED ist ein flussbasiertes Entwicklungswerkzeug, das ursprünglich für die Verdrahtung von Hardware-Geräten, APIs und Online-Diensten entstanden ist. Du arbeitest komplett in einem browser-basierten Flow-Editor, der standardmässig auf Port 1880 erreichbar ist. Dort ziehst du Bausteine – sogenannte Nodes – auf eine Arbeitsfläche und verbindest sie mit Linien zu einem Datenfluss. Eine Nachricht wandert von links nach rechts durch diese Kette und wird unterwegs verändert, gefiltert oder weitergeleitet.
Technisch baut Node-RED auf Node.js auf und läuft als leichtgewichtiger Server-Prozess. Das macht es sehr genügsam: Es läuft auf einem Raspberry Pi genauso wie auf einem Industrie-Gateway oder in einem Container im Rechenzentrum. Weil die gesamte Logik als JSON beschrieben wird, lassen sich fertige Flows exportieren, versionieren und auf andere Installationen übertragen. Erweitert wird der Funktionsumfang über die Palette, einen integrierten Paketmanager, mit dem du Tausende zusätzlicher Community-Nodes nachinstallieren kannst.
Wofür eignet es sich?
Weniger geeignet ist Node-RED dort, wo es um sehr hohe Datenraten, komplexe Geschäftslogik mit vielen Entwicklern oder strenge Software-Test-Pipelines geht. Seine Stärke ist das schnelle, sichtbare Verbinden von Systemen – nicht der Ersatz einer vollwertigen Anwendungs-Codebasis.
IoT-Glue und Protokoll-Übersetzung. Die Kerndisziplin von Node-RED ist das Verbinden von Dingen, die nicht direkt miteinander reden. Du nimmst Daten per MQTT, HTTP, Modbus oder seriell entgegen und gibst sie in einem anderen Format wieder aus – etwa als Datenbank-Insert oder REST-Aufruf.
Automatisierung und Regel-Logik. Mit Switch-, Change- und Function-Nodes baust du Wenn-Dann-Logik ohne klassischen Code: Schwellwerte überwachen, Alarme auslösen, Geräte schalten oder Zeitpläne abbilden – alles als nachvollziehbarer visueller Fluss.
Dashboards und schnelle Prototypen. Über die Palette node-red-dashboard erstellst du ohne Frontend-Entwicklung Web-Oberflächen mit Diagrammen, Reglern und Anzeigen. Für Machbarkeitsnachweise und kleine Bedien-Panels ist das in Minuten erledigt.
Zentrale Konzepte: Flows, Nodes, Messages und Palette
Flow. Ein Flow ist eine zusammenhängende Kette verdrahteter Nodes auf einer Arbeitsfläche (Tab). Er bildet einen kompletten Ablauf ab – vom Eingang bis zum Ausgang – und wird beim Klick auf Deploy aktiv geschaltet.
Node. Nodes sind die einzelnen Bausteine. Input-Nodes erzeugen Nachrichten (z.B. mqtt in, http in), Processing-Nodes verändern sie (Function, Switch, Change) und Output-Nodes geben sie aus (Datenbank, Dashboard, mqtt out).
Message. Die Nachricht (msg) ist das Datenpaket, das durch den Fluss wandert. Die eigentliche Nutzlast steht üblicherweise in msg.payload, weitere Eigenschaften wie msg.topic transportieren Zusatzinformationen von Node zu Node.
Palette. Die Palette ist die Sammlung aller verfügbaren Nodes am linken Editorrand. Über den Palette-Manager installierst du zusätzliche Node-Pakete nach – diese landen im /data-Verzeichnis und müssen darum persistiert werden.
Persistenz ist Pflicht: Alle Flows, verschlüsselten Credentials, deine settings.js und jede nachinstallierte Palette-Node liegen ausschliesslich im Verzeichnis /data im Container. Ohne ein benanntes Volume (node_red_data:/data) sind nach einem Container-Neustart oder Update sämtliche Flows und installierten Nodes unwiederbringlich weg. Lege das Volume an, bevor du den ersten produktiven Flow baust.
Installation mit Docker
Node-RED stellt mit nodered/node-red ein offizielles Docker-Image bereit. Der Editor läuft im Container auf Port 1880, den du nach aussen mappst. Wichtig beim Tag: Das Image kennt keinen blossen Major-Tag wie :4 – du wählst entweder eine konkrete Linie wie :4.1 (aktuell stabile 4.x-Serie) oder :latest (zeigt zur Zeit auf die neue 5.0-Generation). Für reproduzierbaren Betrieb empfiehlt sich ein gepinnter Tag wie :4.1 statt :latest. Entscheidend ist das Verzeichnis /data: Es enthält flows.json, settings.js, die verschlüsselten Credentials und alle nachinstallierten Palette-Nodes – du musst es zwingend als benanntes Volume node_red_data:/data persistieren, sonst sind nach jedem Neustart alle Flows und Nodes weg. Der Container läuft als Benutzer node-red (uid 1000); ein benanntes Volume (statt eines Host-Pfads/Bind-Mounts) setzt die Dateirechte automatisch korrekt, sodass du dich nicht um chown kümmern musst. Über die Env-Variable TZ legst du die Zeitzone fest, damit Zeitstempel und Zeitplan-Nodes stimmen.
1docker run -d \2 --name node-red \3 -p 1880:1880 \4 -e TZ=Europe/Zurich \5 -v node_red_data:/data \6 --restart unless-stopped \7 nodered/node-red:4.1
Oder als wiederverwendbare docker-compose.yml:
1services:2 node-red:3 image: nodered/node-red:4.14 container_name: node-red5 ports:6 - "1880:1880"7 environment:8 - TZ=Europe/Zurich9 volumes:10 - node_red_data:/data11 restart: unless-stopped1213volumes:14 node_red_data:
Verwende bewusst das benannte Volume node_red_data:/data und nicht einen Host-Pfad/Bind-Mount wie ./data: Das benannte Volume wird von Docker mit den richtigen Rechten für den node-red-Benutzer (uid 1000) angelegt. Bei einem Bind-Mount auf einen Host-Pfad muss dieser dem Benutzer mit uid 1000 gehören, sonst kann der Container nicht in /data schreiben – die Rechte setzt du dann manuell mit chown -R 1000:1000 pfad/zu/data. In diesem Volume liegen Flows, Credentials und Palette-Nodes – sichere es in dein Backup ein, denn ein gelöschtes Volume bedeutet Totalverlust deiner Konfiguration.
Nach dem Start prüfst du, ob der Container läuft und der Flow-Editor antwortet:
1docker ps --filter name=node-red2docker logs node-red3curl -I http://localhost:1880
Fazit
Node-RED ist das pragmatische Bindeglied im IoT-Stack: Statt für jede Schnittstelle ein eigenes Skript zu pflegen, verdrahtest du Eingänge, Logik und Ausgänge im Browser zu nachvollziehbaren Flows. Für Protokoll-Übersetzung, Automatisierungs-Regeln und schnelle Dashboards bekommst du in kürzester Zeit ein lauffähiges Ergebnis. Der wichtigste Betriebs-Grundsatz lautet: Persistiere das /data-Verzeichnis als benanntes Volume und sichere es regelmässig – dann überleben Flows, Credentials und installierte Nodes jedes Update und jeden Neustart. Damit hast du ein robustes, herstellerneutrales Werkzeug, das vom Bastel-Prototyp bis zum produktiven Gateway mitwächst.
