Die Hausautomatisierung erfreut sich immer größerer Beliebtheit und dementsprechend gibt es viele Lösungen, die uns dies ermöglichen. Node-RED ist eine davon – mittels einfachem Drag-and-drop ist es möglich Programmabläufe zu erstellen, ohne eine Zeile Code zu schreiben. Daher schauen wir uns zunächst an, welche Schritte notwendig sind, um am Raspberry Pi Node-RED zu nutzen.
Außerdem erstellen wir ein erstes kleines Testprogramm, mit dem wir einige der Node-RED Komponenten kennenlernen und eine LED darüber fernsteuern – und ganz ohne Code.
Was ist Node-RED?
Bevor wir anfangen, möchten wir klären, was Node-RED überhaupt ist. Die offizielle Beschreibung ist folgende:
Node-RED is a flow-based programming tool, originally developed by IBM’s Emerging Technology Services team and now a part of the JS Foundation.
It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.
Node-RED ist für die Hausautomatisierung gedacht und soll Prozesse vereinfachen. Dadurch wird das Coding verringert und selbst technisch unerfahrene Nutzer können ihre eigenen Prozesse modellieren.
Das schöne dabei ist: Wir können auf einem Raspberry Pi Node-RED installieren, da es komplett auf Node.JS aufbaut. Zwar ist es auch möglich das ganze auf einem normalen Computer (oder der Cloud) laufen zu lassen, aber was die Stromkosten angeht, ist unser Raspberry Pi die günstigste Alternative!
Zubehör
Je nach Anwendung werden unterschiedliche Teile benötigt. Wir konzentrieren uns in diesem Tutorial auf ein einfaches Szenario und brauchen daher nicht allzu viele Komponenten. Folgendes Zubehör wird benötigt:
- Raspberry Pi mit SD-Karte (min. 16 GB)
- LED Set mit Widerständen
- alternativ: Starter Set
- Breadboard
- Jumper Kabel
- Stromversorgung
Node-RED auf dem Raspberry Pi installieren
Die Installation von Node-RED können wir auf verschiedenen Linux-basierenden Betriebssystemen des Raspberry Pi’s ausführen. Im Normalfall nutzen wir das Raspberry Pi OS. Nachdem wir dies auf die SD-Karte übertragen haben, aktualisieren wir zunächst einmal alle Paketquellen über das Terminal (bzw. per SSH):
sudo apt-get update Sudo apt-get upgrade
Der Vorgang dauert ein wenig.
Danach können wir Node-RED einfach per Skript installieren. Solltest du ein anderes Betriebssystem als das Raspberry Pi OS verwenden, empfehle ich einen Blick hierauf.
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Hier bejahen wir alle Fragen (y).
Damit sind wir bereits fertig mit der Installation! Wir können nun den Node-RED Service über das Startmenü (Start > Programming > Node-RED) oder alternativ per Terminal starten:
node-red-start
Dadurch wird ein Server gestartet, der über das ganze (interne) Netzwerk erreichbar ist. Über die lokale IP-Adresse (192.168.x.x) bzw. den Hostname (raspberrypi auf Port 1880) können wir auf das Node-RED Interface zugreifen.
http://raspberrypi:1880
Das Interface sieht folgendermaßen aus und ist in mehrere Bereiche unterteilt, die wir gleich näher kennenlernen werden:
- Flow Section: Wie der Name schon sagt, modellieren wir hier unseren Programm-Flow bzw. die gesamte Logik des Programms. Hier kommen also die Nodes und ihre Verbindungen hin.
- Node Palette: Auf der linken Seite sehen wir alle verfügbaren Nodes. Diese sind in Sektionen unterteilt und stehen für Hardware, Protokolle (wie MQTT), Funktionen, etc. Hovert man mit der Maus über einen Node, bekommt man Zusatzinformationen angezeigt.
- Info und Debug Console: Rechts finden wir Optionen zum Laden, Speichern und Verwalten unseres Flows – sowie bspw. den Debug-Modus.
Add-ons installieren
Neben den angezeigten Nodes, gibt es noch sehr viel mehr. Die Community kann daher ebenfalls Pakete bereitstellen. Diese finden wir in der Node-RED Library.
So möchten wir bspw. gleich Nodes nutzen, womit wir die Raspberry Pi GPIOs steuern können. Öffne daher im Interface oben rechts das Menü > Manage Palette. Im Tab „Install“ kannst du nach Modulen suchen. Suche nach „node-red-node-pi-gpio“ und installiere es. Daraufhin wird es ebenfalls links in der Palette angezeigt.
Node-RED Autostart am Raspberry Pi
Damit der Node-RED Server auch nach einem Neustart des Pi’s weiterhin läuft, können wir einen automatischen Start aktivieren. Dies geht einfach mit dem folgenden Befehl:
sudo systemctl enable nodered.service
Um den Autostart wieder zu deaktivieren, nutzen wir diesen Command:
sudo systemctl disable nodered.service
Erste Schritte: LED per Raspberry Pi und Node-RED schalten
Um zu sehen, wie einfach Node-RED ist, fangen wir mit einem kleinen Demo-Projekt an. Dazu schalten wir eine kleine LED über das Interface. Beginnen wir also mit dem Aufbau:
- Die längere Seite der LED kommt an GPIO 4 (Pin 7).
- Das andere Ende kommt über einen 330 oder 470 Ω Widerstand an GND vom Raspberry Pi (Pin 6).
Nun zum Flow: Wähle links einen Node vom Typ „rpi gpio out“ und ziehe ihn per Drag-and-drop in die Mitte. Per Doppelklick konfigurieren wir den ausgewählten Pin 7:
Hier gibt es sehr viele Optionen – selbst PWM könnte einfach eingestellt werden. Für jetzt brauchen wir das allerdings nicht. Speichere via Klick auf „Done“.
Anschließend brauchen wir einen bzw. zwei Trigger – etwas wodurch der GPIO geschaltet wird. Dazu nehmen wir zunächst einen Node vom Typ „Inject“.
Den Inject-Node konfigurieren wir wie folgt. Wir ändern den Namen in „ON“, die Payload in den Typ „String“ und geben den Wert 1 ein. Anschließend speichern wir ihn.
Das Gleiche wiederholen wir für einen zweiten Knoten (OFF – Payload: 0).
Nun können wir die Knoten verbinden.
Zu guter Letzt müssen wir unseren Flow noch aktivieren. Dies geht über den Deploy-Button oben rechts.
Nachdem das Programm aktiv ist, können wir auf die linke Schaltfläche in den Inject-Nodes klicken. Dadurch wird der eingestellte Wert (0 bzw. 1) an den nächsten Knoten gesendet – in unserem Fall an den GPIO. Dieser Knoten nimmt den entsprechenden Wert und schaltet sich an oder aus.
LED per Taster über das Node-RED Interface am Raspberry Pi schalten
Nun ist es etwas unrealistisch, dass wir nur einen Button drücken, um eine LED zu schalten. Daher wollten wir die LED nur dann leuchten lassen, wenn ein physischer Taster gedrückt wird.
Dazu erweitern wir als Erstes unseren Aufbau und schließen den Taster and GPIO25 und GND an:
Wir beginnen im Node-RED Interface mit einem leeren Flow oder löschen die beiden Inject-Nodes aus dem vorherigen Programm. Hier erstellen einen neuen „rpi gpio in“ Knoten mit folgender Konfiguration (wichtig ist, dass der pullup Widerstand gewählt wird):
Als nächstes nehmen wir einen Switch Node (unter dem Tab functions). Dieser ist dazu da, um klar definierte Ergebnisse als Ausgabe zu bekommen. Das kann z.B. zum Kategorisieren genutzt werden, oder – wie in unserem Fall – um die Eingaben umzukehren (aus 0 wird 1 und umgekehrt). Daher sieht die Konfiguration des Knotens wie folgt aus:
Im Flow-Interface sieht das Ganze dann so aus:
Der Switch-Node hat nun zwei mögliche Pfade. Nämlich, wenn die Eingabe (d.h. die Ausgabe von unserem Button) gleich 1 ist oder falls die Eingabe eben nicht gleich 1 ist. Da wir einen Pull-Up Widerstand eingestellt haben, ist die Ausgabe immer dann 1, wenn der Taster nicht gedrückt wird.
Die LED soll allerdings immer dann leuchten, wenn der Taster gedrückt wird. Daher brauchen wir noch zwei Change-Nodes. Diese enthalten lediglich einen Namen und den Wert der Ausgabe:
Ähnlich dazu erstellen wir den zweiten Change-Node zum Aktivieren (Ausgabe: 1). Diese beiden Knoten verbinden wir entsprechend mit dem vorherigen Switch-Node und ebenfalls mit dem LED GPIO Node.
Nun können wir den Flow aktivieren und deployen. Sobald der Taster nun gedrückt wird, geht die LED ebenfalls an!
Falls du dich hier fragst, ob es nicht noch eine andere Lösung gibt, statt Switch und Change-Nodes zu verwenden – so ist die Antwort: Ja! Wir könnten den Taster auf einer Seite auch an 3.3V statt GND anschließen und einen Pull-Down Widerstand verwenden. Dann könnten wir die Ausgabe des linken GPIO Nodes direkt als Eingabe für den LED-Node nehmen. Allerdings wollen wir uns ja näher mit Node-RED beschäftigen 😉
Aufgaben zum Selbst-Test
Dieses erste Szenario ist zugegebenermaßen recht einfach. Falls du also noch weitere Szenarien entwerfen willst, gibt es hier noch ein paar Anregungen, die zum Ausprobieren gut geeignet sind:
- Zustand speichern: Die LED soll nicht nur leuchten während wir den Taster drücken, sondern den Zustand beibehalten. Dafür müssen wir einen Variable (Context) nutzen, welche beim Drücken des Tasters verändert wird,
- Das Wetter abfragen alle 5 Minuten per API (http-request Node) und Folgeaktionen ausführen (z.B. LEDs verschiedener Farben leuchten lassen).
- Fortgeschritten: Schalte eine Wifi/Funksteckdose an einer bestimmten Uhrzeit.
Fazit
Node-RED ist eine aufgeräumte und vor allem sehr einfache Lösung zum Automatisieren von Prozessen am Raspberry Pi. Es sind kaum Programmierkenntnisse erforderlich und auch das Konfigurieren verschiedener Anwendungen gehört damit der Vergangenheit an. Durch verschiedene Add-ons gibt es zusätzlich für viele gängige Problemstellungen bereits vorgefertigte Lösungen und Beispiele.
Gerade für Anfänger, oder jene die sich nicht zu tief mit der Programmierung beschäftigen wollen, bietet Node-RED einen großen Mehrwert. Die Abhängigkeit zur Cloud (bei Diensten wie Alexa oder Magenta Smart Home) fällt weg – man hat die Kontrolle über seine Daten. Und dennoch ist der Aufwand dafür überschaubar.
Wie gefällt euch Node-RED als Alternative oder Ergänzung zu OpenHAB und Home Assistant? Das Schöne ist, dass man Node-RED parallel laufen lassen und dessen API’s dabei nutzen kann. Wenn weitere Tutorials erwünscht sind (zu welchen Themen) – würde ich mich über einen Kommentar freuen.
13 Kommentare
Ein super Artikel, hervorragend kommentiert.
Klasse Artikel, wie bisher alle. Freu mich schon jedes mal auf einen Neuen. Vielen Dank. Bitte weiter so.
Node-Red und Raspberry zusammen, eine „super Sache“ !!! läuft 24/7 – 365 problemlos
NodeRed ist keine Alternative zu OpenHab oder Home-Assistant, sondern eine sehr gute Ergänzung. Home Assistant zB liefert die ganzen Integrationen plus eine brauchbare Bedienoberfläche inkl. Apps für Android/IOS. Schwedische oder Holländische Smartlights, MQTT, Rest Webinterfaces, … you name it, alles da.
Was bei Home-Assistant aber ziemlich unbrauchbar ist, nämlich Automatisierungen in Yaml zu realisieren, wird mit NodeRed zum Kinderspiel. Da kannst du die Stärken von beiden Welten prima vereinigen.
Ich nutze *nur* Node-RED als SmartHome Zentrale, insofern ist es für mich doch eine Alternative!
Vielen Dank, toller Artikel! Ich habe meine Homeautomatisierung komplett in Python (UniPi Hardware) programmiert. Vielleicht bin ich ein bisschen Oldschool.
Vielen Dank für den tollen Artikel. Ich hab Node-Red ebenfalls schon einige Jahre im Einsatz und messe Temperaturen und Feuchtigkeiten in Haus und Garten. Bitte setzt doch diese Artikelreihe fort. Vielleicht könntet Ihr auch mal auf das generelle Funktionsprinzip der Nodes und den Aufbau und die Funktionalität der Messages eingehen und die Bedeutung und Möglichkeiten der Payload erläutern.
Ich arbeite mit Node-Red seit einigen Jahren. Einer der großen Vorteile ist, dass man seine Konfigurationen über „schmale“ txt-Dateien austauschen kann. Der individuellen Anpassung sind dann kaum Grenzen gesetzt.
Die Steuerung meiner Regenwassersammlung incl. der zugehörigen Anzeigen, meine Steuerung der Rasenbewässerung etc. habe ich mit Node-Red „programmiert“, obwohl ich keine Programmiersprache beherrsche.
Sicher eine einfache Lösung für Leute, die nicht programmieren können.
Ich arbeite nichts von Script – Sprachen, die auf einem Interpreter laufen.
Super Arbeit Felix, als Grossvater von 7 Enkeln (alle zwischen 8 und 13J) bin ich als ehemaliger Gebäude Leitsystem Entwickler und Tester froh um solche Beiträge um die Kinder spielend zu fördern! No Code Lösungen setzen die Hürde echt tief und ermöglichen faszinierende Resultate! Danke für deinen inhaltlich und didaktisch wertvollen Beitrag (!) Mach nur weiter so!
Übrigens sind die Raspi spzifischen Nodes schon installiert, wenn man beim Installationsscript zu Beginn immer „y“ drückt, d.h. man muss node-red-node-pi-gpio dann nicht mehr installieren.
Hallo, super Beitrag. Ich fange gerade an mich mit Raspberry intensiver zu beschäftigen.
Dabei stellt sich mir, gerade ob der veralteten Beiträge zu vielen Themen, wie man mit Node beim Raspbi4 die Prozessortemperatur auslesen und damit einen Ventilator schalten könnte?
Viele Suchergebnisse beziehen sich auf das alte Raspbian und den R3, ich würde mich lieber mit Node, zusätzlich mit ergänzenden Sprachen beschäftigen wollen. Leide gibts fast nichts darüber.
Moin,
wie kann ich User und Passwort für node-red auf dem Pi ändern?
Gruß Thomas