Wir wollen dir in diesem Beitrag zeigen, wie du Node-RED auf einem Raspberry Pi mit installiertem Docker ausführst. Falls du auf deinem Raspberry Pi noch kein Docker installiert hast, zeigen wir dir dies in unserem Beitrag Docker auf dem Raspberry Pi installieren.
Am einfachsten startest du Node-RED über das folgende Kommando:
Code-Sprache: Shell Session (shell)docker run -it -p 8080:1880 --name mynodered nodered/node-red
Beachte hierbei allerdings, dass dieses Kommando mehr zu Testzwecken geeignet ist. Wenn Node-RED beendet wird, ist es möglich, dass bei diesem Kommando deine Daten verloren gehen.
Wenn du das Kommando auf dem Raspberry Pi ausführst, solltest du die folgende Ausgabe sehen:
Wenn du jetzt in deinem Webbrowser die Adresse des Raspberry Pi’s gefolgt von dem Port 8080 aufrufst, solltest du die Node-RED Seite sehen. Bei dem Standard-Hostname (raspberrypi) lautet die Adresse: http://raspberrypi:8080/. Die Node-RED Startseite sieht dabei wie folgt aus:
Hier kannst du einmal die inject-Node (in der linken Leiste ganz oben) nehmen und in das große Feld ziehen. Anschließend wiederholst du dies mit einer debug-Node. Diese findest du direkt unterhalb der inject-Node. Verbinde die beiden kleinen grauen Kästchen an der rechten bzw. linken Seite der Nodes.
Drücke anschließend auf die rote Schaltfläche deploy am oberen, rechten Bildschirmrand.
Nach dem Klick auf deploy, sollte die rote Schaltfläche nach einiger Zeit grau geworden sein. Wechsel jetzt auf der rechten Seite auf den Reiter Debugnachrichten. Auf dem Reiter ist ein Käfer abgebildet. Du solltest auf der rechten Seite jetzt eine leere Spalte sehen können. Klicke nun im mittleren Teil des Fensters auf den kleinen blauen Kasten links neben der inject-Node (auf dieser müsste nun das Wort timestamp stehen).
Es sollte dir jetzt oben, in der Mitte des Bildschirms, ein PopUp angezeigt werden. Außerdem sollte in dem weißen Feld auf der rechten Seite ein neuer Eintrag erschienen sein. Dieser beinhaltet den aktuellen Timestamp (die Millisekunden seit dem 01.01.1970 0:00:00). Bei einem weiteren Klick auf den blauen Button würde diese Zahl also größer werden.
Für den nächsten Schritt benötigst du das in Python geschriebene Tool docker-compose. docker-compose hilft dir bei der Verwaltung von mehreren Containern. Wenn du beispielsweise eine Webanwendung gemeinsam mit einer Datenbank starten möchtest, kann dir docker-compose dabei helfen, dass diese beiden Dienste immer gemeinsam ausgeführt werden.
Zunächst musst du die für docker-compose benötigten Abhängigkeiten auf deinem Raspberry Pi installieren:
Code-Sprache: Shell Session (shell)sudo apt-get install -y python3 python3-pip
Anschließend kannst du über den Paketmanager pip docker-compose installieren:
Code-Sprache: Shell Session (shell)sudo pip3 -v install docker-compose
Sollte bei der Installation (von bcrypt) ein Fehler auftreten, führe einmal die folgenden Befehl aus, um die für den Build von bcrypt benötigten Packate neu zu installieren. Anschließend sollte die Installation von docker-compose ohne Fehler funktionieren:
Code-Sprache: Shell Session (shell)sudo apt-get remove build-essential libffi-dev python-dev sudo apt-get install build-essential libffi-dev python-dev
Nach der Installation sollte dir der folgende Befehl die installierte Version von docker-compose ausgeben:
Code-Sprache: Shell Session (shell)docker-compose --version
Ein weiterer Vorteil von docker-compose ist, dass die gesamte Konfiguration der Container in einer Datei abgespeichert werden kann.
Der oben genannte Befehl würde als docker-compose-Datei so aussehen:
version: '3'
services:
nodered:
image: nodered/node-red
ports:
- "8080:1880"
Code-Sprache: YAML (yaml)
Natürlich bietet hier die docker-compose.yml-Datei keinen großen Vorteil gegenüber der direkten Eingabe über die Kommandozeile. Allerdings kann die Datei etwas ergänzt werden, um einen Mehrwert zu bieten:
version: '3'
services:
nodered:
image: nodered/node-red
restart: always
ports:
- "8080:1880"
volumes:
- ./data:/data
user: 'node-red:node-red'
Code-Sprache: YAML (yaml)
Die Option restart: always gibt hierbei an, dass docker versuchen soll den Container neuzustarten, falls diese beendet wird. Bei einem Neustart des Systems, startet hierbei auch der Container wieder erneut. Nur wenn du den Container manuell beendest, bleibt er beendet.
Die zweite Ergänzung ist der Punkt volumes. Über diesen wird festgelegt, dass im Ordner neben der docker-compose.yml ein Ordner data angelegt wird, in welchem alle Dateien von Node-RED gespeichert werden. Wenn du den Node-RED Container entfernst, werden deine Daten jetzt nicht mehr gelöscht.
Um die letzt Funktion zu nutzen, solltest du zunächst einen Benutzer mit dem Namen node-red im System anlegen. Verwende hierfür einfach das folgende Kommando:
Code-Sprache: Shell Session (shell)sudo adduser --system node-red && sudo addgroup --system node-red && sudo adduser node-red node-red
Hierdurch wird der Container vom Benutzer node-red ausgeführt, was zu einer höheren Sicherheit führt.
Starte den Container nun mit dem folgenden Befehl:
Code-Sprache: Shell Session (shell)docker-compose up
Der Start des Containers müsste mit einem EACCES-Fehler abgebrochen werden. Dies passiert, weil docker den Ordner data standardmäßig als root-Benutzer anlegt. Ändere die Zugriffsrechte auf den data-Ordner mit dem folgenden Kommando:
Code-Sprache: Shell Session (shell)sudo chown -R 1000:1000 ./data
Nun startet Node-RED ganz normal. Drücke die Tastenkombination [Strg]+[C] um Node-RED wieder zu beenden. Führe jetzt den folgenden Befehl aus, um Node-RED im Hintergrund zu starten:
Code-Sprache: Shell Session (shell)docker-compose up -d
Du kannst dich jetzt vom Raspberry Pi abmelden, während deine Node-RED Installation weiterhin ausgeführt wird.
Da es für Node-RED viele Erweiterungen gibt, kann es sein, dass du irgendwann mal eine Erweiterung verwendest, die direkten Zugriff auf dein Netzwerk benötigt. So benötigen beispielsweise viele Erweiterungen im Bereich der Sprachassistenten (bspw. Alexa) einen direkten Zugriff auf das Netzwerk um mit einem entsprechenden Endgerät (wie bspw. einem Amazon Echo) kommunizieren zu können.
Auch dies lässt sich über docker-compose ganz einfach realisieren. Hierfür musst du einfach den network_mode auf host umstellen. Beachte dabei, dass sich der Port, unter dem du Node-RED aufrufen kannst dabei auf den Port 1880 ändert. Die URL bei einem RaspberryPi mit Standard-Hostname ändert sich also auf http://raspberrypi:1880/. Die Port-Einstellungen sollten dabei aus der docker-compose.yml entfernt werden:
version: '3'
services:
nodered:
image: nodered/node-red
restart: always
network_mode: host
volumes:
- ./data:/data
user: 'node-red:node-red'
Code-Sprache: YAML (yaml)
Jetzt steht deinem Einstieg in den Bereich Home-Automation nichts mehr im weg!