Node-RED: IoT Programmierung mit ESP32 & MQTT - Markus Edenhauser - E-Book
SONDERANGEBOT

Node-RED: IoT Programmierung mit ESP32 & MQTT E-Book

Markus Edenhauser

0,0
9,99 €
Niedrigster Preis in 30 Tagen: 9,99 €

oder
-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Zu jedem Buch gibt es kostenlos das E-Book im PDF-Format zum Downloaden dazu. Dieses Buch ist eine praxisorientierte Einführung in das Internet of Things (IoT) und zeigt auf über 300 Seiten, wie man mit Hilfe des ESP32 Mikrocontrollers und des MQTT-Protokolls seine eigenen IoT-Anwendung entwickeln kann. Die Open-Source-Software Node-RED steht dabei im Fokus, da sie eine grafische Programmieroberfläche bietet, mit der verschiedene Datenquellen und -ziele einfach miteinander verknüpft werden können.. Du lernst, wie du dein eigenes IoT-Netzwerk mit Linux und Docker aufbaust, Daten von Sensoren sammelst und diese in Echtzeit mit aktuellen Programmen wie InfluxDB oder Grafana visualisiert. Du lernst auch, wie du deine Projekte über das Internet überwachen, steuern und Daten von überall auf der Welt abrufen kannst. Folgende Inhalte und Projekte werden wir gemeinsam umsetzen: * Installation aller notwendigen Programme und Services * Installationsvariante mit Docker * Erster Überblick von Node-RED * MQTT Grundlagen * ESP32 Express Einstieg * Erstes Projekt - Mini Wetterstation * Wetterdaten am E-Ink Display mit Akkubetrieb visualisieren * Überwachungskamera mit ESP32-Cam inkl. Machine-Learning Node * Zeiterfassung mit RFID und TimeTagger * Zeitgesteuerte Pflanzenbewässerung mit * Füllstandsüberwachung * Smarte Steckdosen und Relais * Kleiner IoT Button mit 100 Tage Batterielaufzeit * Exkurs eigene Web API mit OCR-Service und Telegram-Anbindung erstellen * Internet Radio * Spotify Steuerung * MQTT SSL/TLS * BONUS Kapitel Raspberry PicoAbschluss Leg das Buch jetzt gleich in den Einkaufswagen und sichere dir viele tolle Stunden in der IoT Entwicklung.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Node-RED: IoT Programmierung mit ESP32 und MQTT
Für Maker und DIY-Enthusiasten, die ihre Internet of Things (IoT) - Projekte selbst in die Hand nehmen wollen
Markus Edenhauser, MA MSc
Copyright ©April 20231. AuflageSelbstverlag
Markus Edenhauser, MA MScVölser Straße 416020 InnsbruckÖsterreichpixeledi.eu/impressum
Gewidmet der besten Frau der Welt – meiner Partnerin!
Ich widme dieses Buch dir, da du meine größte Inspiration und Unterstützung bist und weil ich weiß, dass du genauso verrückt bist wie ich und es liebst, stundenlang über Fachthemen zu diskutieren.
Achja und Danke fürs Lektorat zu diesem Buch :)
Inhaltsverzeichnis
1  Vorwort             11.
2  Einführung             12
3  Installation aller notwendigen Programme             18
4  Installationsvariante mit Docker             43
5  Erster Überblick von Node-RED             70
6  MQTT Grundlagen             89.
7  Node-RED Anbindung zu den Microservices             103
8  ESP32 Express-Einstieg             117
8.1  Arduino vs. ESP8266 vs. ESP32             117
8.2  Pinout ist nicht Pinout             119
8.3  Empfehlung VS Code mit PlatformIO             119
8.4  Platformio.ini             121
8.5  LED Blink             122
8.6  Blink without delay             123
8.7  Quellcode für WIFI Verbindung             125
8.8  Quellcode für MQTT mit PubSub Client             127
8.9  LED mit MQTT ein und ausschalten             130
8.10  Quellcode in Headerdatei auslagern             132
8.11  Arduino JSON senden und empfangen             135
8.12  Quellcode von VS Code für Arduino IDE übernehmen             139
9  Mini Wetterstation             141
9.1  Verdrahtung             142
9.2  Platformio.ini und Bibliotheken             143
9.3  BMP180 Temperatur und Luftdruck Auswertung             144
9.4  BH1750 Lichtsensor Auswertung             146
9.5  Sensordaten an Node-RED übermitteln             147
9.6  Daten in InfluxDB speichern             148
9.7  Daten in Grafana visualisieren             149
9.8  Lüfter mit MQTT ansteuern             151
9.9  Funktionsprinzip Hysterese             153
9.10  Ventilator mit Hysterese-Node regeln             154
10  Wetterdaten am E-Ink Display mit Akkubetrieb             157
10.1  Verdrahtung             158
10.2  PlatformIO und XIAO ESP32             159
10.3  E-Ink Hello World             159
10.4  Text ausrichten und Font anpassen             162
10.5  Grafik konvertieren und einbinden             163
10.6  Text und Grafik gemeinsam anzeigen             166
10.7  Wetterdaten REST API             167
10.8  Node-RED und REST APIs             170
10.9  JSON Verarbeitung             170
10.10  Von Unix Timestamp zum Datum             172
10.11  Logik für das Updateintervall             174
10.12  Werte von Node-RED an E-Ink übertragen             175
10.13  Aktualisierung und Deep Sleep             179
10.14  WLAN während der Nachtstunden nicht verfügbar             181
10.15  Stromverbrauch berechnen             181
10.16  3D Druck Gehäuse             184
11  Überwachungskamera mit ESP32-Cam             185
11.1  Verdrahtung             186
11.2  Platformio.ini und Bibliotheken             187
11.3  Beispiel CameraWebServer             188
11.4  Node-RED Anbindung             190
11.5  Foto Darstellung in Node-RED             193
11.6  Überwachungskamera mit PIR-Sensor             195
11.7  Telegram Token und Verbindung zu Node-RED             196
11.7.1  Telegram Bot einrichten             197
11.7.2  Telegram Bot in Node-RED einbinden             197
11.8  Foto auf Server speichern             198
11.9  Foto mit Telegram versenden             201
11.10  Machine Learning Node             203
11.10.1  Deepstack Docker Installation             204
11.10.2  Object Detection             205
11.10.3  Face Registration and Recognition             206
12  Zeiterfassung mit RFID und TimeTagger             209
12.1  Verdrahtung             210
12.2  Platformio.ini             212
12.3  RFID ID auslesen             212
12.4  Anbindung an Node-RED             214
12.5  LED checkin und checkout             215
12.6  TimeTagger als Container             215
12.7  TimeTagger Web API mit HTTP Requests             217
12.8  PUT Record via WEB API             220
12.9  Ein- und Auschecken mit globaler Variable             222
12.10  Record an WEB API beim Check out mit RFID             223
12.11  TXT statt globaler Variable für Checkin             224
13  Zeitgesteuerte Pflanzenbewässerung             226
13.1  Verdrahtung             227
13.2  Ablaufdiagramm             228
13.3  Headerdateien             230
13.3.1  Globals.h und Enums             230
13.3.2  Ultrasonic.h             232
13.4  MQTT Kommunikation mit Node-RED und ESP32             233
13.5  Relais via MQTT 3 Sekunden einschalten             235
13.6  Füllstand mit Ultraschall auswerten und übermitteln             238
13.7  Daten in MariaDB speichern             240
13.7.1  Füllstand             240
13.7.2  Deep Sleep Aufzeichnungen             242
13.8  Logik für individuelles Gieß-Intervall             242
13.9  Füllstand und E-Mail Notification             245
13.10  Deep Sleep zum Strom sparen             247
13.11  Füllstand & Gießvorgang am Dashboard visualisieren249
14  Smarte Steckdosen und Relais             251
14.1  Tasmota für Smart Plugs             252
14.2  Gosund EP2 mit Tasmota flashen             253
14.3  Tasmota konfigurieren             255
14.3.1  Tasmota Steckdosen mit Node-Red schalten             259
14.3.2  Sensordaten von Smart Plug auslesen             260
14.3.3  Sensorwerte in Grafana visualisieren             262
14.4  Shelly 1PM             263
14.4.1  Setup             264
14.4.2  Shelly Anbindung an Node-RED via RPC             266
14.4.3  Relais mit Node-RED schalten             268
14.4.4  Intervall und InfluxDB Anbindung             268
14.4.5  Relais Temperaturüberwachung mit Push-Notification             270
15  Kleiner IoT Button mit 100 Tage Batterielaufzeit             272
15.1  ESP8266 vs. ESP32 XIAO             272.
15.2  MQTT und Deep Sleep             274
15.3  Schalten von Tasmota oder Shelly             274
15.4  Berechnung Batterielaufzeit             276
15.5  3D-Druck             277
16  Internet Radio             279
16.1  Verdrahtung             280
16.2  Bibliotheken und Radio Streams             281
16.3   Trackinfo anzeigen             282
16.4  Internet Radio via MQTT steuern             283
16.5  Weckzeit in NodeRED einstellen             285
16.6  Dashboard Steuerung             286
17  Spotify Steuerung             287
18  MQTT mit TLS             294
18.1  Let’s Encrypt als CA             295
18.2  DynDNS Eintrag anlegen             296
18.3  Certbot installieren             297
18.4  Zertifikat von Let`s Encrypt abrufen             298
18.5   Verschlüsselte Pub und Sub mit Linux CLI             299
18.6  Node-RED für MQTT mit TLS einrichten             301
18.7  ESP32 mit TLS und MQTT Broker verbinden             302
18.8  Mit Wireshark MQTT Pakete analysieren             304
19  Bonuskapitel: Raspberry Pico W             307
19.1  Thonny IDE einrichten             307
19.2   Built in LED Blink             309
19.3  Pico W MQTT Publish             311
19.4  Pico W MQTT Subscribe             313
20  Abschluss             315
20.1  Zugang Website             315
20.2  Rabattcodes             316
20.3  Stuff that works             317
21  Über den Autor             318
22  Weitere Literatur vom Autor             319
23  Verzeichnisse             320
24  Literaturverzeichnis             328
1            Vorwort
Hallo an alle Maker und Freunde der Mikrocontroller-Entwicklung. Dieses Buch wurde speziell für Maker und DIY-Enthusiasten entwickelt und gibt dir die Möglichkeit, deine Projekte auf die nächste Stufe zu bringen, indem du Node-RED, MQTT und ESP32 kombinierst.
Node-RED ist eine visuelle Programmierumgebung, mit der Projekte einfach und intuitiv erstellt werden können, ohne dass tiefgreifende Programmierkenntnisse erforderlich sind. MQTT ist ein leichtgewichtiges Protokoll für die Datenübertragung in IoT-Netzwerken, mit dem Endgeräte schnell und einfach miteinander verbunden werden können. Der große Vorteil von MQTT ist, dass eine Übertragung in nahezu Echtzeit möglich ist. Der ESP32 ist ein leistungsstarker Mikrocontroller, der sich durch seine integrierte WiFi- und Bluetooth-Unterstützung ideal für IoT-Projekte eignet.
In diesem Praxisbuch lernst du, wie du Node-RED verwendest, um deine ESP32-basierten Projekte zu steuern, zu regeln und Daten über MQTT auszutauschen. Du lernst, wie du dein eigenes IoT-Netzwerk aufbaust, Daten von Sensoren sammelst und diese in Echtzeit mit aktuellen Programmen wie InfluxDB oder Grafana visualisierst. Du lernst auch, wie du deine Projekte über das Internet überwachen, steuern und Daten von überall auf der Welt abrufen kannst.
Wirf einen Blick in die Kapitel Prämissen & Voraussetzungen, um für dich ab zu checken, ob dir die Herangehensweise der hier vorgestellten Praxisprojekte zusagt.
2            Einführung
Dieses Buch hat den Anspruch eines Praxisbuchs, soll heißen, es gibt nur ganz wenig Theorie und mehr Umsetzungsbeispiele. Wir werden gemeinsam Schritt für Schritt die notwendigen Systeme installieren und einrichten und dann widmen wir uns den Praxisprojekten. Lernen funktioniert meiner Meinung nach am besten mit dem Tun. Sobald die ersten DIY-Projekte geklappt haben, kann man sich selber noch weiter in die Materie einlesen, um die Hintergründe besser verstehen zu können. Vermutlich kommen dann sowieso gleich die eigenen Ideen und dann gibt es kein Halten mehr.
2.1       Prämissen
Zwei ganz wesentliche Prämissen verfolgt dieses Buch:
1. Jedes Projekt hat eine Problemstellung und ein Ziel.
Die Umsetzung habe ich bewusst so ausgewählt, dass wir bei einigen Projekten einen längeren Weg gehen, damit ich euch ganz bewusst ein Konzept oder eine Logik besser zeigen kann. Das bloße erklären von Nodes in Node-RED oder auch Codeschnipsel für den ESP32 wäre ja auch langweilig. Am Ende eines jeden Kapitels soll ein funktionierendes Praxisprojekt herauskommen, dass noch weiter individualisiert werden kann.
Im Grunde zeige ich euch Herangehensweisen, wie man Mikrocontroller mit Node-RED kombinieren kann. Ihr sollt dabei eine Vorstellung bekommen, was alles möglich ist, sodass ihr dann selbständig eure IoT-Projekte umsetzen könnt.
2. Selber Programmieren
Node-RED hat eine großartige Community und es wird fleißig programmiert und viele Nodes öffentlich zur Verfügung gestellt. Es spricht absolut gar nichts dagegen, sich eine fertige Lösung in das eigene Projekt zu kopieren und somit ein Projekt umzusetzen.
So könnte man zum Beispiel für ChatGPT ein Node zur Ansteuerung der API herunterladen, sodass man nur die Parameter eingeben muss und damit die Schnittstelle ansprechen kann. Somit wird auch dem Low-Code Grundgedanken von Node-RED Rechnung getragen.
Ich wähle aber sehr oft den Weg über selbsterstellte Function-Nodes. Wir als DIYer und Maker lieben den Freiheitsgrad der individuellen Umsetzung und genau dafür ist Node-RED auch konzipiert. Mit kurzen Codeschnippseln die man aneinander reiht kann das eigene Vorhaben aufgebaut werden.
Versteht also die Umsetzung der Praxisprojekte nicht als Musterlösung, sondern als Idee und mögliche Herangehensweise für Problemstellungen im IoT-Bereich.
2.2       Voraussetzungen
Dieses Praxisbuch richtet sich an alle DIYer und Maker, die Lust auf Programmieren haben. Wir verwenden im Laufe dieses Buches die unterschiedlichsten Technologien, Betriebssysteme, Programmiersprachen, Protokolle und Geräte. Aufgrund dieser Tatsache, setze ich ein Minimum an Erfahrung für dieses Praxisprojekt voraus.
Du hast schon mal einen ESP32 programmiert?
Du hast Grundlagen in C++ und JavaScript?
Du hast einen eigenen Server bzw. willst dir einen aufbauen / mieten / virtualisieren. Die genauen Erläuterungen folgen im Kapitel 3 oder 4 .
Alles mit Ja beantwortet? Dann sollte den Praxisprojekten nichts mehr im Wege stehen.
Und welches Betriebssystem benötige ich?
Such dir eins aus. Zufriedenstellende Antwort, oder? Nein im Ernst, es ist völlig egal, denn die Arduino IDE gibt es für MacOS, Linux und Windows und den Rest installieren wir vorwiegend auf einem Linux System bzw. auf dem Raspberry Pi.
Das heißt das Backend wird direkt mit Linux umgesetzt und die weitere Konfiguration erfolgt meist über den Browser bequem über das Web-Frontend.
2.3       Wie liest man dieses Buch
Zur besseren Lesbarkeit markiere ich dir immer wieder gewisse Textpassagen mit folgender Formatierung, sodass sich der Fließtext zu den Codezeilen abgrenzt:
In diesem Format findest du Codeschnipsel vor:
if(Formatierung) Serial.println(„Der Lesefluss ist besser“);
else Serial.println(„Hä, hier steht auch was?“);
Die Lesbarkeit des Sourcecodes in monochromer Farbe ist natürlich kein Genuss, deshalb gibt es auch das PDF zu diesem Buch zum Herunterladen, siehe Kapitel 2.4 .
Befehle und Kommandos für das Terminal bzw. für die Konsole werden in diesem Format angegeben:
sudo -i
whoami
pwd
Damit wir in diesem Praxisbuch nicht seitenweise Screenshots produzieren und damit unnötig viele Buchseiten erzeugen, werden Menüpunkte meist so dargestellt:
Menüpunkt→ Untermenüpunkt → hier klicken
Ich führe oft mit mir selber einen Dialog und markiere offen gestellte Fragen wie folgt:
Warum stellst du Fragen in einem Buch?
Sollte die Frage nicht lauten: „Wieso redest du als Autor mit dir selbst?
2.4       Begleitmaterial und Codeschnipsel zum Downloaden
Wer keinen Spaß am Abtippen vom Code hat kann sich diesen herunterladen. Zu den Praxisprojekten gibt es folgende Unterlagen:
Bauteilliste aller verwendeten Sensoren und Module
Source-Code des ESP32 Projekts
Node-RED Flow zum Importieren
Notizen mit Links und Erklärungen, die im Source-Code nicht abgedeckt sind. Im Markdown, *.docx bzw *.pdf Format, damit man gegebenenfalls auch noch eigene Notizen hinzufügen kann.
www.pixeledi.eu/arduino/node-red
Das dazugehörige Passwort findest du im Anhang (Kapitel 20.1 ).
Ich hinterlege zu den Kapiteln im Buch den jeweiligen Dateinamen im Fließtext – so zum Beispiel:
01_ESP32_Expresseinstieg.zip
Ach ja, das E-Book im PDF-Format ist auch mit dabei!
2.5       Der ESP32 Basis-Sketch - Start eines jeden Projekts
Immer wieder erwähne ich den „Basis-Sketch“ als Startpunkt für die Praxisprojekte. Dieser selbsterstellte Sourcecode für den ESP32 enthält eine WiFi- und MQTT Verbindung. Damit haben wir eine perfekte Grundlage und Ausgangsposition für die Praxisprojekte.
Weiters kannst du damit sicherstellen, dass der ESP32 funktioniert und die Anbindungen an Node-RED und den MQTT-Broker gewährleistet sind. In den nachfolgenden Kapiteln werden wir uns die Grundlagen dieses Basis-Sketches erarbeiten. Selbstverständlich ist dieser Sketch auch im Downloadbereich verfügbar.
2.6       Das geht sicher auch anders!
Du wirst dir eventuell bei einer Codezeile mal denken „Geht es denn noch komplizierter?“. „Benutze doch lieber ein Switch case“, „Wieso so umständlich über den Funktionsaufruf, schreibs doch direkt in die Variable“... Kein Problem, adaptiere den Code einfach so, wie du es für richtig hältst. Was für mich Sinn ergibt, kann für jemand anderen durchaus kompliziert erscheinen. Wir konstruieren und programmieren „frei“ und halten uns nicht an viele Standards – also außer an die physikalischen Grundgesetze natürlich.
2.7       Haftungsausschluss
Kommst du mir jetzt mit juristischen Fachbegriffen?
Ich habe die Qualifikation und Befugnis im Niederspannungsbereich arbeiten zu dürfen. Dennoch bin ich (leider) auch nicht frei von Fehlern. Es kann sein, dass ich etwas falsch darstelle, beschreibe oder anschließe und ihr dadurch ein Bauteil beschädigt, das komplette Projekt euch abbrennt oder ihr euch verletzt.
Die Mikrocontroller sind sensibel, soll heißen einmal etwas zu viel Spannung und schon funktionieren sie nicht mehr so wie sie wollen. Durch das unbeabsichtigte falsche Anschließen  kann man einen Kurzschluss erzeugen, sodass eine weitere Gefahrenquelle besteht. Ebenso kann eine unsachgemäße Handhabung und Verwendung der Komponenten einen Brand verursachen. Gerade die Spannungswandler (auch andere Sensoren) haben eine sehr hohe Oberflächentemperatur von über 70 °C, sodass Brandgefahr besteht.
Im Kapitel 14 mit den Smart Plugs habe ich bewusst die Verdrahtung weggelassen. Hier nochmal der eindringliche Appell,  dass Arbeiten im Niederspannungsbereich (~230 V) darf nur eine dafür ausgebildete Personen übernehmen. Bei unsachgemäßer Handhabung besteht Lebensgefahr!
Der Nachbau erfolgt auf eigene Verantwortung. Ich kann keinerlei Garantie über die Richtigkeit und Funktionalität gewährleisten. Außerdem kann ich euch keine individuelle Hilfestellung leisten. Falls ihr nicht mehr weiter wisst, holt euch Hilfe von fachkundigen Kollegen. Ebenso ist jegliche Haftung für Beschädigungen und Verletzungen ausgeschlossen.
Falls ihr einen Fehler im Buch entdeckt oder sonstige konstruktive Kritik für mich habt, meldet euch unter: [email protected].
So aber jetzt nützen wir die Zeit und legen los. Viel Spaß dabei!
3            Installation aller notwendigen Programme
In diesem Kapitel geht es um die Installation und Konfiguration von Node-RED, Mosquitto, InfluxDB und Grafana auf Linux/Ubuntu. Diese vier Services sind die Grundlage für unsere IoT-Infrastruktur. Node-RED bietet uns die visuelle Low-Code Programmierungsumgebung, Mosquitto ist ein leistungsstarker MQTT-Broker, InfluxDB ist eine Datenbank für Zeitreihen-Daten und Grafana ist ein Dashboard-System, das die Visualisierung der Daten ermöglicht.
Zu beginn dieses Kapitels gehen wir der Frage nach, welcher Server für uns am besten geeignet ist. Gleich im Anschluss darauf werden wir den konventionellen Weg einschlagen, das heißt, wir installieren sämtliche geforderten Programme und Services direkt auf dem Server.
Wie willst du den sonst die Programme installieren?
Das ist genau die richtige Frage. Im darauffolgenden Kapitel werden wir alles hier besprochene in Containern mit Docker umsetzen. Falls du also mal eine neue und flexible Variante ausprobieren möchtest, riskiere einen Blick ins nächste Kapitel. Übrigens werde ich in den Praxiskapiteln die Docker-Variante bevorzugen und auch umsetzen.
Nach diesem Kapitel hast du folgende Programme und Services auf deinem Server installiert und die Basiskonfiguration durchgeführt:
Auswahl eines geeigneten Servers
Node-RED
Mosquitto MQTT Broker
InfluxDB
Grafana
MariaDB mit Adminer
Die Anbindung der einzelnen Services miteinander folgt in den späteren Kapiteln.
3.1       Heimserver, Virtualbox, vServer oder Raspberry Pi?
Tja, falls du noch keinen eigenen Server für deine IoT Projekte hast, muss jetzt eine Entscheidung getroffen werden. Wie immer im Leben sind die Auswahlmöglichkeiten mannigfaltig und sobald man sich entschieden hat, schwingt so ein leichtes Gefühl von Zweifel mit. In diesem Kapitel diskutieren wir die Vor- und Nachteile jeder Option,  um zu verstehen und zu entscheiden, welche der aufgezeigten Varianten für die eigenen Bedürfnisse am geeignetsten sind.
Wir starten mit einer lockeren Diskussion über den Heimserver. Vermutlich haben wir noch ein altes Notebook oder einen ausrangierten PC zuhause. Dieser eignet sich ja perfekt für einen Heimserver. Die Programme, die wir benötigen, sind alle nicht so ressourcenfressend, sodass ein Ubuntu-Server Betriebssystem zum Beispiel auch für ein zehn Jahre altes Geräte noch machbar ist. Seit Ende 2022 sind zwar die Strompreise stark angestiegen, weshalb man in das Haushaltsbudget auf jeden Fall die Position des Heimservers mitaufnehmen muss, allerdings ist dies wohl nur ein kleiner Preis dafür, dass man die Datenhoheit besitzt und immer und überall Zugriff auf seine Daten und Geräte hat.
Eine weitere Möglichkeit ist die Verwendung eines Raspberry Pis. Diese Variante empfehle ich dir nur dann, wenn du bereits einen Raspberry Pi besitzt. Die Anschaffung ist derzeit (erstes Quartal 2023) meiner Meinung nach zu teuer. Der CEO von Raspberry Pi, Eben Upton, gab über den offiziellen Blog bekannt, dass 100.000 Einheiten für den Einzelverkauf (eine Einheit pro Kunde) gesichert wurden und dass man davon ausgeht, dass in der zweiten Hälfte des Jahres 2023 das Niveau von vor der Pandemie wieder erreicht sein wird [1].
Der kleine Einplatinencomputer ist abseits der Lieferketten-Schwierigkeiten ein tolles Tool für Maker, da er in Kombination mit Raspberry Pi OS (früher Raspian) einen kleineren Linux-Computer darstellt [2]. Ein Raspberry Pi 4 mit 1GB RAM ist für den Einsatz mit Node-RED gut geeignet. Stellt man jedoch mehr Ansprüche an den Raspi, so bedarf es mehr Arbeitsspeicher. Spannend ist sicher der Stromkostenvergleich zwischen Raspi und  Heimserver.
Werfen wir nun einen Blick auf die Virtualbox. Wir virtualisieren also auf unserem PC einen weiteren PC.
Was soll denn das bringen?
Gerade zum Testen und Ausprobieren sind Virtualisierungen, zum Beispiel mit der Virtualbox oder VMWare, zu empfehlen. Im Privatbereich sind diese kostenlos und unkompliziert zum Einrichten. Ebenfalls kann man die Virtualbox mit dem lokalen Netzwerk verbinden, damit können alle Services miteinander kommunizieren und wir können auch in dieser Variante die hier gezeigten Projekte umsetzen. In dieser „gesicherten“ Umgebung kann man also alles ausprobieren und wenn was schiefgeht, holt man sich einen Speicherstand von früher wieder her und beginnt von vorne. Also ein perfekter Low-budget Start. Für den Dauerbetrieb finde ich persönlich diese Variante ungeeignet, da die Ressourcen für die Virtualbox vom Haupt-PC reserviert werden bzw. sich teilen müssen und der PC natürlich immer in Betrieb sein muss. Also auch wieder eine Kostenfrage.
Ebenso kann man WSL also Windows Subsystem for Linux aktivieren. Das Windows Subsystem für Linux ermöglicht es Entwicklern, eine Linux-Umgebung inklusive der meisten Anwendungen, direkt unter Windows auszuführen. Somit spart man sich die Virtualisierung oder ein etwaiges Dualboot [3].
Zu guter Letzt bleibt noch das Mieten eines vServers übrig. Diese Variante bevorzuge ich von allen hier aufgezeigten, da sie meiner Meinung nach kostengünstig, flexibel und mit wenig Aufwand betrieben werden kann. Zu den Auswahlkriterien zählt neben den bisherigen Berichten zur Ausfallsicherheit, der Standort des Servers, schon alleine wegen dem Datenschutzgedanken.
Ich meine jetzt nicht die tolle DSGVO-Verordnung, sondern eher, wo liegen meine Daten und vertraue ich dem Unternehmen soweit, dass hier keine (okay, bleiben wir realistisch - fast keine :) Daten oder Nutzungsstatistiken weiterverkauft werden. Ebenso unterscheiden sich die Preise je nach Anbieter und Ausstattung der Server. Im Downloadbereich findest du einen Gutschein von Hetzner, bei dem du bei der Registrierung 20€ Cloud-Guthaben geschenkt bekommst. Genau das richtige für deinen Einstieg. Die Server können mit Stand April 2023 jederzeit gekündigt werden und man geht keine Knebelverträge ein. In den nachfolgenden Kapiteln gehen wir eine Konfiguration eines vServers Schritt für Schritt durch.
Eines solltest du jedoch bei allen Varianten noch bedenken und zwar, sie brauchen deine Zeit und Aufmerksamkeit. Du bist nämlich für die Updates und Backups deines Servers verantwortlich. Ebenso kann man sich schnell aus Unwissenheit den gesamten Server versehentlich zerschießen. Eine Unaufmerksamkeit im Terminal und schon steht die gesamte Kiste. Ich spreche hier aus mehrmaliger Erfahrung – also Lernen durch Schmerz durfte ich öfters erfahren :). Dank der eigenen Skripte für Backups und Container, welche wir in diesem Buch durchgehen, kann der Server schnell und unkompliziert wieder erstellt werden. Das Thema Sicherheit spielt im „bösen weiten Internet“ auch eine große Rolle. Ein schwaches Passwort oder ein versehentlich geöffneter Port stellt einen Angriffsvektor dar, sodass Hacker durch automatisierte Skripte auf deinen Server aufmerksam werden können. Und man will nicht, dass sein eigener Server kompromittiert und als Ausgangsposition für weitere Angriffe verwendet wird, da man ja auch eine gewisse Haftung hat.
Gut, jetzt hast du genügend Argumente geliefert, dass ich das Buch gleich weglege und mir ein anderes Hobby suche.
Alles easy, es geht mir viel mehr um Transparenz und eine Bewusstseinsbildung. Wir als ITler, Hobby-Entwickler und Maker sind uns dieser Gefahren natürlich bewusst.
Wer also Spaß daran findet, sein eigenes System aufzusetzen und zu konfigurieren, hat sicherlich viel Freude am eigenen Server. Und, hast du dich schon entschieden?
3.2       Virtualbox mit Ubuntu
In diesem Kapitel geht es um die Virtualbox von Oracle. Es werden die gängigsten Betriebssysteme unterstützt und die Einstellungsmöglichkeiten sind für unsere Zwecke absolut ausreichend. Nach dem Download (www.virtualbox.org) und Installation der Virtualbox geht es an die Auswahl des Betriebssystems [4].
Ich verwende für die Praxisprojekte den Ubuntu-Server. Auf der Website https://ubuntu.com/download/server findest du stets die aktuellen Versionen. LTS steht für long term support und ist eine Art Verpflichtung von Canonical, eine Version von Ubuntu fünf Jahre lang (kostenlos) zu unterstützen und zu warten. Eine gute Übersicht findest du unter folgendem Link [5].
Im Normalfall hast du nun eine *.iso Datei einer Ubuntu Version heruntergeladen. Nun können wir mit der Installation beginnen:
Abbildung 1: Installationsdialog Ubuntu in Virtualbox
Wählt man zuerst das ISO Abbild aus, werden Typ und Version im Dialogfeld von Abbildung 1 meist automatisch ausgefüllt. Klickt man im unteren Bereich auf „Experten Modus“, kann man weiters noch die Hardware- und Festplatten-Einstellungen vornehmen. Zuerst wählt man noch „Unbeaufsichtigte Installation überspringen“ aus. Im Abschnitt Hardware wird einem je nach vorhandenem PC mit grünen Strichen bereits dargestellt, wie viel Ressourcen man für die Virtualbox zur Verfügung stellen kann.
Beim Festplattenspeicher sollte man nicht geizen und mindestens 20 GB, besser noch 40 GB auswählen. Nun kann man im unteren Bereich den Button „Fertigstellen“ klicken und der Installationsprozess beginnt.
Im Installationsverlauf müssen immer wieder ein paar Eingaben gemacht werden und nach ein paar Minuten sollte man seine Ubuntu Version in der Virtualbox installiert haben.
Abbildung 2: Virtualbox Netzwerkbrücke
Damit die Virtualbox bzw. Ubuntu sich mit dem lokalen Netzwerk verbinden kann und auch per SSH bzw. MQTT erreichbar ist, wählt ihr im linken Menü der Virtualbox mit einem Rechtsklick die Ubuntu Installation an und wählt „Ändern“ aus.
Im folgenden Dialog gehst du auf Netzwerk und stellst bei „angeschlossen an:“ Netzwerkbrücke ein, wie in Abbildung 2 zu sehen ist.
Die ersten Schritte sind somit abgeschlossen und nun kann es an das individuelle Konfigurieren des Systems gehen.
3.3       Raspberry Pi
Falls du einen Raspberry Pi dein eigen nennen kannst, dann darf ich dir gratulieren. Der Raspi ist nicht nur ein technischer Tausendsassa sondern performt auch als Wertanlage beinahe besser als Kryptos, Gold und Aktien.
Das offizielle Betriebssystem für den Raspberry Pi nennt sich Raspberry Pi OS – früher auch bekannt als Raspbian. Das tolle an diesem OS ist, dass es auf Debian basiert, sodass wir ganz ähnliche Abläufe in der Installation und Konfiguration wie bei Ubuntu vorfinden werden [2]. Bei der Auswahl des Raspberry Pi Os gibt es eine 32- und 64-bit Variante. Bei der Verwendung der 32bit Variante kann es bei diversen Programmen zu Problemen kommen, deshalb würde ich von vornherein gleich die 64-bit Version installieren. Ebenso bekam ich von anderen Nutzern die Rückmeldung, dass mit dem Raspiberry Pi Os die Docker Nutzung mehr Recherche benötigt, da nicht alle Befehle und Kommandos gleich umzusetzen sind.
Sehr gute Erfahrungen habe ich mit der Ubuntu Desktop Version für Raspberry Pi gemacht. Gerade hinsichtlich der Verwendung von Docker mit Raspi ist Ubuntu hier unschlagbar.
Running Ubuntu on your Raspberry Pi is easy. Just pick the OS image you want, flash it onto a microSD card, load it onto your Pi and away you go [6].
Auf der offiziellen Ubuntu Website gibt es gute Anleitungen, wie man mit dem Raspberry Pi Imager Ubuntu installieren kann [6]. Gerade wenn man schon eine Linuxversion zur Verfügung hat, braucht man nur Schritt für Schritt der Anleitung folgen und kommt zu seinem Raspberry Pi OS / Ubuntu. Man sollte jedoch ein paar Minuten Zeit mitbringen, da die Installation auf einer SD Karte Zeit beansprucht.
Ist die Installation abgeschlossen, kann man sich per SSH von einem PC im gleichen Netzwerk hin verbinden. Genauere Infos zu SSH findest du im Kapitel 3.4 .
Der Standardbenutzer lautet pi und das Passwort raspberry. Somit kannst du dich mit „ssh pi@ipvomraspi“ zum Raspi per SSH verbinden.
Woher bekomme ich denn die IP vom Raspi in meinem Netzwerk?
Am besten über deinen Router, den du meist über 192.178.168.0 oder 192.178.168.1 im Browser erreichen kannst. Alternativ kannst du, falls du ein Linux zur Hand hast, auch „nmap“ verwenden und holst dir einen IP-Scanner für dein Betriebssystem.
Die Installationsprozesse von Kapitel 3 sind nur teilweise für den Raspberry Pi umsetzbar. Das System des Raspis hat eine andere Architektur, sodass oft auch andere Paketquellen verlangt werden. Auch das Kapitel 4 mit Docker sollte ebenfalls mit kleinen Adaptierungen genauso umsetzbar sein. Recherchiert dazu im Selbststudium welche Quellen und Herangehensweisen für die Installation am besten sind.
3.4       SSH mit Putty und CLI von Windows
In diesem Kapitel werden wir uns mit der Verwendung von SSH und Putty befassen, um eine Verbindung zu einem Linux-basierten Server aufzubauen. Wir werden auch sehen, wie man die Kommandozeile (CLI) von Windows verwendet, um Befehle auf dem Server auszuführen. SSH ermöglicht es, uns auf entfernte Systeme sicher zu verbinden und Befehle auszuführen, ohne dass wir uns in das System direkt vor Ort einloggen müssen. Wir werden lernen, wie man eine SSH-Verbindung mit Putty herstellt und in den folgenden Kapiteln, wie man Befehle auf dem Server über die CLI von zum Beispiel Windows ausführt.
Im Internet spielt vor allem die Sicherheit eine zentrale Rolle: Das Netzwerkprotokoll Secure Shell (SSH) ist deshalb als Sicherheitsverfahren fest im TCP/IP-Protokoll, oder vereinfacht gesagt - im Internet – implementiert  [7]
Als Netzwerkprotokoll bietet SSH eine Kennwortauthentifizierung an, sodass eine sichere Verbindung von Computer zu Computer stattfinden kann.
Gerade in der Remote-Verwaltung ist SSH das Standardtool, welches auch wir vorwiegend nutzen werden [8].
Putty ist wohl einer der bekanntesten SSH Clients für Windows. Prinzipiell benötigt man unter Windows gar keine Zusatzsoftware, weil man direkt aus der Konsole bzw. PowerShell eine SSH Verbindung aufbauen kann. Der Vorteil von Putty ist, dass man mehrere Server hinterlegen kann und die Software auch SSH-Keys erzeugen und abspeichern kann.
Abbildung 3: Putty login
Die Abbildung 3 zeigt den Startscreen von Putty. Hier kann die IP und der Standardport 22 hinterlegt werden. Ebenfalls kann die Servereinstellung gleich abgespeichert werden, sodass wir bei späteren Verbindungen nur mehr den Server anwählen müssen. Bestätigen wir mit „Open“ dann öffnet sich ein weiteres Fenster mit der SSH Verbindung. Wir geben unser Passwort ein und schon sind wir auf unseren Server verbunden.
Mac und Linux User sind mit dem Terminal gut ausgerüstet, die Befehlsstruktur ist hier genau gleich wie für Windows:
ssh user@ip
Abbildung 4: SSH login
Und so einfach können wir uns mit der Konsole / Terminal zu einem Server hin verbinden. Mit dem Befehl „exit“ oder dem einfachen   Schließen des Terminals beenden wir die aktuelle Verbindung zum Server.
Falls die Verbindung mit dem Server nicht klappt, kann das an folgenden zwei Einstellungen liegen.
Der Benutzer root wurde für SSH gesperrt. Man loggt sich mit einem User ein, der im Grunde fast keine Rechte am System hat. Mit „sudo -i“ wechselt man dann zu root, sodass man die vollen Rechte am System hat. Würde ein Angreifer, aus welchen Gründen auch immer, an die SSH-Login Daten kommen, könnte dieser mit dem stark reglementierten User weniger schaden anrichten als mit dem root Benutzer.
In der Firewall ist der Port nicht freigegeben. Unter Debian bzw. Ubuntu kommt standardmäßig die UFW (uncomplicated Firewall) zum Einsatz. Mit dem Befehl „sudo ufw allow ssh“ kann man somit am einfachsten den Service freigeben. Alternativ kann man auch den Port 22 mit „sudo ufw allow 22“ freigeben.
Selbstverständlich gibt es bezüglich SSH noch viel mehr zu wissen und zu konfigurieren, was jedoch den Umfang dieses Kapitels sprengen würde.
Ein Thema, das ich für das Selbststudium noch empfehlen kann, ist „Fail2ban“. Dieser kleine Tool sperrt IPs, die bösartige Anzeichen aufweisen wie zum Beispiel zu viele Passwort-Eingaben oder Suche nach Exploits [9].
Ebenfalls könnt ihr euch das Thema SSH-Keys ansehen, damit hat man eine Publickey-Authentifizierung, sodass man sich das Passwort eintippen sparen kann. Im folgenden Link findet ihr im Abschnitt „Publickey-Authentifizierung“ eine Anleitung zum Einrichten [7].
3.5       vServer mieten
Auch bei der Auswahl eines geeigneten Cloud-Dienstleisters für den Server hat man eine riesige Auswahl. Ich entscheide mich für diese Projekte für Hetzner (20€ Cloud Guthaben von Hetzner für die Erstregistrierung für meine Leser – findet ihr im Downloadbereich) aus den folgenden Überlegungen.
Die Mindestvertragszeit ist auf Stundenbasis (Stand 2023). Das gibt einem die Freiheit noch zusätzliche Server zum Testen zu installieren. Dadurch kann man sich auch gut ein Produktiv- und Testsystem aufbauen. Funktionieren die Vorhaben am Testserver, fährt man seine Skripts auf dem Produktivsystem aus und löscht den Testserver.
Es gibt Serverstandorte in Deutschland, Finnland und USA. Man kann nicht nur aus Gründen der Redundanz andere Länder selektieren, sondern kann sich auch aus Überlegungen bezüglich DSGVO für einen Standort in Deutschland entscheiden.
Die günstigste Variante mit einer vCPU und 2 GB Ram kostet ~ 5€ pro Monat (Stand 1 Quartal 2023) und ist somit auch für den Hobbybereich gut vertretbar [10].
40 GB Festplattenspeicher würde ich empfehlen, da wir doch einige Programme benötigen und wir wollen uns im Nachhinein nicht mit Speicherplatzproblemen herumärgern.
Nach der Registrierung hat man Zugriff auf die Hetzner Konsole in der man seine Server verwalten kann. Prominent in der rechten Ecke findet man den „Server hinzufügen“ Button.
Abbildung 5: Hetzner Serverkonfiguration
Im darauffolgenden Fenster findet man die Übersicht für Standort, Image und Server Typ, wie in Abbildung 5 auszugsweise dargestellt wird. Auf der rechten Seite von Abbildung 5 sieht man meine Serverauswahl. Klickt man nun auf „kostenpflichtig bestellen“ hat man seinen ersten Server gemietet.
Nach der Bestellung checkt man sein E-Mail-Konto, denn da wird standardmäßig das root-Passwort versendet. In der Übersicht der Hetzner Cloud Console kann man seine Öffentliche IP ablesen. Nun steht dem SSH-Login nichts mehr im Wege und die Konfiguration und das Programmieren der Praxisprojekte kann starten.
Falls man sein root-Passwort vergisst, kann man in den Servereinstellungen der Hetzner Cloud auf dem Menüpunkt „Rescue“ das Root-Passwort zurücksetzen.
3.6       Oh-my-zsh – Alternatives Terminal
"Oh My ZSH!" - dieses Terminal macht einem das Leben als Linux Administrator um ein Vielfaches einfacher. Die Installation ist denkbar leicht [11]:
sudo apt install zsh 
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Nach der Installation wird in der aktiven Zeile nur mehr der aktuelle Ordner angezeigt, dass spart schon mal einiges an Platz. Was wir immer wieder benötigen, ist das Aufrufen von Textfiles oder das Wechseln von Ordnern. Dazu hilft einem Oh-my-zsh insofern, als dass man nur mehr die Anfangsbuchstaben ins Terminal tippen muss und mit der Tabulator-Taste wird der Pfad bzw. Dateiname ergänzt. Falls die Auswahl nicht eindeutig ist, werden alle Möglichkeiten aufgezeigt, sodass man einen weiteren Buchstaben eintippt und somit wieder mit Tabulator die Vervollständigung ausführt.
Falls ich also eine Installationsdatei mit einem laaangen Dateinamen heruntergeladen habe, brauche ich in diesem Fall nur die Anfangsbuchstaben eintippen und mit Tabulator wird mir der vollständige Name ausgeben, wie in Abbildung 6 dargestellt wird. Man gibt also folgenden Befehl ein
tar -xf inf [Tabulatortaste]
Abbildung 6:  Terminal Vervollständigung mit Oh-my-zsh
Oh-my-zsh hat noch viele weitere Features, die auf der offiziellen Seite gerne im Selbststudium recherchiert werden können [11].
3.7       Nerven und Zeit sparen mit Snapshots
Wer die Philosophie „Lernen durch Schmerz“ verfolgt kann dieses Kapitel überspringen.
Der Trial & Error Ansatz, also das praktische Herumprobieren, macht gerade in einem Lernumfeld Sinn. Man muss verstehen warum etwas funktioniert und vor allem was nicht funktioniert. In der Linux-Welt kann man sich jedoch auch ganz schnell das ganze System abwürgen.
Ein fehlender Punkt kann bei einem Befehl gravierende Auswirkungen haben und man bügelt über sein ganzes System drüber ohne zu wissen, was man genau fabriziert hat.   Deshalb helfen einem Snapshots – also Sicherungspunkte. Bevor ihr weitermacht legt JETZT einen Sicherungspunkt an.
Falls ihr einen vServer bei Hetzner habt, könnt ihr euch dort auf der Menüleiste unter Snapshots einen Sicherungspunkt anlegen. Die Snapshots sind kostenpflichtig, jedoch ist der Betrag mit ~0,01 € / GB / Monat vertretbar.
3.8       Node-RED auf Ubuntu/Debian
Hier nochmal der Hinweis, dass sämtliche Sourcecodes und Kommandos für die Installationsprozesse nochmal extra als Beilage im Downloadbereich (siehe Kapitel 2.4 ) zur Verfügung stehen, damit man sich das abtippen sparen kann.
Nach dem ersten SSH-Login sollten wir zu aller erst die Paketquellen aktualisieren:
sudo apt update
sudo apt upgrade
Mit „upgrade“ werden bestehende Programme aktualisiert.
Für die weitere Bearbeitung benötigen wir npm:
sudo apt install npm
Für die Installation von Node-RED benötigen wir 3 Zeilen:
sudo npm install -g --unsafe-perm node-red
sudo ufw allow 1880
node-red start
In der zweiten Zeile geben wir den Port 1880 von der Firewall frei. Das Terminalfenster zeigt uns nun den Start von Node-RED an. Wir öffnen den Browser und geben die IP-Adresse des Servers mit dem Port 1880 ein. Im lokalen Netzwerk kannst du alternativ zur IP auch localhost verwenden:
http://192.168.178.50:1880
http://localhost:1880
Mit STRG+C kann man die lokale Instanz von Node-RED im Terminal beenden und kommt wieder retour in das gewohnte Terminal.
Die lokale IP vom Raspi oder der Virtualbox bekommst du mit einem Befehl im Terminal heraus: (ja, wirklich mit doppel „d“ und „s“ ;)
ip address
3.9       Node-RED Autostart
Mit dem Starten des Servers soll auch Node-RED gestartet werden, schließlich muss auch ein Linux Server hin und wieder neugestartet werden. Es ist dann sehr nervig, wenn man die Services manuell starten muss und außerdem vergisst man das sowieso bei jedem zweiten Mal.
Dazu legen wir uns zuerst ein neues File an und öffnen dieses gleich mit dem Texteditor nano.
nano /etc/systemd/system/nodered.service
Im weiteren Schritt können wir jetzt einen Service definieren, sodass Node-RED bei jedem Startvorgang des Betriebssystems mitstartet. Text von der Zwischenablage lässt sich in Nano zum Beispiel mit  STRG+UMSCHALT+V einfügen.
[Unit]
Description=Node-RED
After=syslog.target network.target
[Service]
ExecStart=/usr/local/bin/node-red --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT
# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog
# if using a root user
WorkingDirectory=/root/
User=root
Group=root
[Install]
WantedBy=multi-user.target
Mit STRG + O speichern wir das File ab und mit STRG + X wird nano beendet.
Wir starten den gerade erstellen Dienst und sehen uns den Status des Dienstes an und darauffolgend rebooten wir den Server. Die Befehle werden einzeln pro Zeile eingegeben.
systemctl daemon-reload
systemctl enable nodered.service
systemctl start nodered.service
systemctl status nodered.service
sudo reboot
Wenn alles geklappt hat, hat man nach dem Neustart wieder wie gewohnt Zugriff auf Node-RED.
3.10 Node-RED mit Passwort schützen
Was wir ganz bestimmt nicht wollen ist ein offenes Node-RED. Offen im Sinne von frei zugänglich für Alle und genau deshalb benötigen wir einen Passwortschutz für unser Node-RED.
Zuerst installieren wir das Node-RED Admin Modul:
npm install -g --unsafe-perm node-red-admin
Mit diesem Modul lässt sich nun ein Hashwert von einem Passwort erstellen.
node-red-admin hash-pw
Nach der Eingabe des Passworts bekommen wir den Hash-String retourniert:
$2b$08$fNWZiG.mr7VlbaDm92A/yOHLYlhXo7HYVECxUrahUpjldHPzR/h4C
Nun öffnet man die settings.js Datei von Node-RED:
nano ~/.node-red/settings.js
Mit STRG+W sucht man nach "adminAuth" und kommentiert die Zeilen aus und gibt das gerade erstellte Passwort ein. Optional kann der „username“ ausgetauscht werden. Achtet beim löschen der „//“ darauf, dass keine Leerzeichen vor der Zeile gelöscht werden.
1    adminAuth: {
2        type: "credentials",
3        users: [{
4            username: "admin",
5            password: "$2b$08$fNWZiG.mr7VlbaDm92A/yOHLYlhXo7HYVECxUrahUpjldHPzR/>
6            permissions: "*"
7             }]
8    },
Code 1: adminAuth in settings.js von Node-RED
Mit STRG+X und Bestätigung mit „y“ wird das File gespeichert und beendet.
Abbildung 7: Node-RED mit Login Abfrage
Mit einem Neustart des Servers bzw. des Node-RED Dienstes sollte nun eine Passwortabfrage, wie in Abbildung 7 zu sehen ist, erscheinen.
3.11 Mosquitto Broker installieren und erster Test
In diesem Kapitel werden wir die Installation und Konfiguration des Mosquitto Brokers besprechen, einer Open-Source-Lösung perfekt für IoT-Projekte.
Auch in diesem Fall gestaltet sich die Installation einfach:
sudo apt install mosquitto mosquitto-clients
Wir installieren mit diesem Befehl zwei Programme. Den Mosquitto Broker und den Client. Den Client benötigen wir, damit wir über das Terminal MQTT Nachrichten empfangen und senden können und der Server ist unsere Zentrale für die MQTT-Kommunikation.
Im Grunde sind wir schon fertig und wir haben bereits alle Voraussetzungen für die erste MQTT Kommunikation geschaffen. Die genauen Hintergründe und Theorie zu MQTT behandeln wir in Kapitel 6 .
In diesem Abschnitt geht es um den ersten Test des Systems. Mit dem folgenden Befehl und Parameter -t abonnieren (subscribe) wir auf das Topic „erstesmqtt“ und mit dem Parameter -h übergeben wir die Zieladresse, in unserem Fall localhost.
mosquitto_sub -h localhost -t erstesmqtt
Das Terminalfenster blinkt und wartet auf reinkommende MQTT-Nachrichten. Wir verbinden uns ein weiters Mal auf unseren Server und geben in dem neuen Terminalfenster diesen Befehl ein:
mosquitto_pub -h localhost -t erstesmqtt -m "es funktioniert“
Sobald die Nachricht abgeschickt wird, erscheint im anderen Terminal, also da wo wir auf das Topic abonniert haben, die versendete Nachricht „es funktioniert“. Gratulation zur ersten MQTT-Nachricht.
Wie du deinen Mosquitto Broker mit Usernamen und Passwort schützt, findest du im Kapitel 4 zur Docker Installation. Die Vorgehensweise ist sehr ähnlich und wurde deshalb zusammengefasst.
3.12 MQTT Broker in Node-RED einbinden
In diesem Schritt werden wir den Mosquitto Broker mit Node-RED verbinden. Dazu gehen wir links auf die Filterung der Nodes und suchen nach „mqtt“. Es sollten zwei Nodes, mqtt in und mqtt out, erscheinen. Wir ziehen beide auf unseren Flow. Ebenso benötigen wir noch ein inject- und debug- Node.
Abbildung 8: Erste MQTT Nodes
Es wird der inject-Node mit mqtt out und der mqtt-out mit dem debug node verbunden, wie in Abbildung 8 ersichtlich ist.
Es fehlt noch die Konfiguration der MQTT-Nodes, was prinzipiell nur einmal pro Node-RED Instanz eingestellt werden muss. Mit einem Doppelklick auf einen MQTT-Node öffnet sich das Konfigurationsmenü.
Abbildung 9: MQTT-Server Einstellungen in Node-RED
In der Zeile „Server“ kann mit einem Klick auf den Stift das erweiterte Menü für den Server eingestellt werden. In diesem Schritt brauchen wir lediglich unter Server „localhost“ eintragen, wie in der Abbildung 9 zu sehen ist. Im Tab „Sicherheit“ könnte man die MQTT Zugangsdaten hinterlegen, welche wir im ersten Schritt noch auslassen.
Mit der Bestätigung auf „hinzufügen“ springt der Dialog zu den MQTT-Node Eigenschaften.
Ich befinde mich im Node mqtt-out und trage das Topic „erstesmqtt“ , QoS=0 und retain auf falsch ein. Mit „fertig“ wird bestätigt und somit haben wir den MQTT-Server und den Node konfiguriert.
Der zweite Node wird ebenfalls mit einem Doppelklick konfiguriert. Zum Beispiel tragen wir beim Topic „fromCLI“ und QoS=0 ein.
Im letzten Schritt klicken wir im Hauptfenster rechts oben auf „Übernahme“.
Abbildung 10:  Fertig konfigurierte MQTT-Nodes
Hat alles geklappt, sieht man unter den MQTT-Nodes ein grünes Viereck mit „Verbunden“ Schriftzug, wie in Abbildung 10 gezeigt.
Jetzt geht es an das Testen. Im Optimalfall ist das Terminal mit dem  „mosquitto_sub -h localhost -t erstesmqtt“ noch offen.
Abbildung 11:  MQTT von Node-RED zum Terminal
Wenn du jetzt in Node-RED den Inject-Node (Timestamp) links anklickst, dann wird der aktuelle UnixTimestamp zum Topic erstesmqtt gesendet, was du im Terminal sehen solltest. Abbildung 11 zeigt mein Ergebnis der empfangenen Daten im Terminal.
Selbstverständlich geht die Kommunikation auch in die andere Richtung.
mosquitto_pub -h localhost -t fromCLI -m "Hallo to Node-RED"
Mit der Eingabe des obigen Befehls im Terminal, bekommen wir in Node-RED auf unsere mqtt-in eine Nachricht.
Abbildung 12:  MQTT von CLI zu Node-RED
Da wir einen Debug-Node eingefügt haben, sehen wir die Nachricht, wenn wir rechts im Menü auf Debug (kleiner Käfer) klicken, zu sehen in Abbildung 12.
Mit dem Wissen über die Integration des MQTT Brokers in Node-RED bist du nun in der Lage, MQTT-kompatible Geräte und Dienste in deine IoT-Umgebung einzubinden. Das erworbene Wissen werden wir dann in den Praxisprojekten gleich umsetzen.
3.13 InfluxDB
InfluxDB ist eine Open-Source-Datenbank, die speziell für Zeitreihendaten entwickelt wurde, und die eine einfache Verwaltung, Analyse und Darstellung von Daten ermöglicht [12].
InfluxDB macht uns das Leben einfach, wir holen uns zum Beispiel Daten von Sensoren und speichern diese direkt mit einem InfluxDB-Node in InfluxDB ab. Später können wir dann die Daten auf verschiedenste Weise aggregieren und anhand der eingestellten Zeit darstellen.
Zunächst installieren wir InfluxDB auf unserem System. Damit man stets die aktuelle Version von InfluxDB herunterladet, besucht die Dokumentation unter folgenden Link [12]. Nach der Auswahl des Betriebssystems bekommt man die notwendigen Befehlszeilen. Der angegebene Link in der Doku hat nach der Versionsnummer oft Platzhalter in Form von xxx enthalten. Die Platzhalter ergänzt man mit seiner Rechnerarchitektur wie im untenstehenden Beispiel angeführt.
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.6.1-amd64.deb
sudo dpkg -i influxdb2-2.6.1-amd64.deb
Nach der Installation wird der InfluxDB Service gestartet:
sudo service influxdb start
Im weiteren Schritt öffnen wir an der Firewall den Standardport 8086  von InfluxDB.
ufw allow 8086
Und schon sollte InfluxDB auf deinem System laufen. Öffne den Browser und gib die IP-Adresse mit Port 8086 ein.
http://5.75.238.225:8086/
Falls das nicht klappt, kannst du den Status abfragen und mögliche Fehlermeldungen ablesen.
sudo service influxdb status
Abbildung 13:  InfluxDB Onboarding-Screen
Die Felder des InfluxDB Startscreens, wie in Abbildung 13 dargestellt, füllen wir gleich aus. Die Felder Organisation und Bucket Name benötigen wir gleich im Anschluss für die Grafana Anbindung und die Node-RED Integration.
3.14 Grafana
Grafana ist eine benutzerfreundliche und flexible Plattform für die Erstellung von Dashboards für Überwachungs- und Analysezwecke. Mit Grafana kann man Daten aus verschiedenen Datenquellen visualisieren und benutzerdefinierte Dashboards erstellen. Ideal für die eigenen IoT Projekte [13].
Auch hier folgen wir der Anleitung aus der offiziellen Dokumentation [13]. Für die Installation des letzten Releases von Grafana benötigen wir folgende Befehle:
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor > /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list
Im Anschluss kann die Installation gestartet werden:
sudo apt-get update
sudo apt-get install grafana
Wie schon im Beispiel davor muss nun der Systemdienst gestartet werden:
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
Als Rückmeldung zum letzten Befehl sollten wir „active“ retour bekommen. Damit Grafana auch beim Systemstart von Ubuntu mit gestartet wird, geben wir noch folgendes ein:
sudo systemctl enable grafana-server.service
Als letzten Schritt geben wir den Standardport 3000 von Grafana noch in der Firewall frei.
ufw allow 3000
Und somit können wir uns über die IP und den Port 3000 auf unsere Grafana Instanz einloggen:
http://5.75.238.225:3000
Es folgt eine Login-Maske und für die erste Anmeldung verwendet man:
Nachdem im Folgedialog das Passwort geändert wird, kann mit der Konfiguration von Grafana gestartet werden, was wir dann gemeinsam in den Praxisprojekten durchführen werden.
4            Installationsvariante mit Docker
Docker ist eine aktuelle Technologie zur Ausführung von Anwendungen in virtuellen Containern. Im Gegensatz zur herkömmlichen Installation von Programmen direkt auf dem Betriebssystem, bietet Docker eine flexible und isolierte Arbeitsumgebung. Dadurch können Anwendungen und ihre Abhängigkeiten einfach und effizient verwaltet und ausgeführt werden. Außerdem können Docker-Container leicht zwischen verschiedenen Systemen migriert werden, was eine einfache Wartung und Skalierbarkeit der Anwendungen ermöglicht. In diesem Kapitel werden wir uns mit den Vorteilen von Docker als Installationsvariante für Anwendungen beschäftigen und erläutern, wie Container im Vergleich zur traditionellen Installation funktionieren [14].
Bevor du gleich startest, möchte ich noch auf die beiden Themen oh-my-szh ( 3.6 ) und vServer ( 3.5 ) vom vorherigen Kapitel hinweisen, da wir darauf aufbauen bzw. die Inhalte verwenden.
4.1  Schnelleinführung
Dieses Kapitel soll eine Schnelleinführung in Docker darstellen. Docker ist enorm umfangreich und es gibt zahlreiche Bücher, die sich nur um die Konfiguration und Verwendung von Docker drehen. Deshalb kann eine vollumfängliche Ausarbeitung dieses Themas in diesem Abschnitt gar nicht bewerkstelligt werden. Es kann also gut sein, dass in diesem Abschnitt ein paar Begrifflichkeiten und Sachverhalte vorkommen, die euch nicht geläufig sind. Ich kann euch aber versprechen, dass sich diese eventuellen Unklarheiten mit einer raschen Google-Suche aus der Welt schaffen lassen. Meiner Meinung nach, und ich wiederhole mich hier schon des öfteren, funktioniert Lernen genau dann gut, wenn wir die Programme gleich verwenden. Das Wissen kommt dann Schrittweise in kleinen Portionen.
4.2  Was ist Docker?
Docker ist eine Open-Source plattformübergreifende Container-Virtualisierungslösung, die es ermöglicht, Anwendungen und ihre Abhängigkeiten in so genannten Containern zu isolieren und unabhängig voneinander auszuführen. Docker ermöglicht die einfache und schnelle Bereitstellung von Anwendungen ohne Konflikte oder Inkompatibilitäten. Das heißt, wir installieren zum Beispiel Wordpress, mit allen dazugehörigen Komponenten wie Webserver und Datenbank, in einem Container und mit nur einem Befehl. Darüber hinaus können Docker-Images einfach gespeichert und gemeinsam genutzt werden, was den Aufwand für die Bereitstellung von Anwendungen erheblich reduziert. Docker ist zu einem wichtigen Werkzeug für Entwickler und Administratoren geworden und wird häufig in Microservice-Architekturen eingesetzt, um eine flexible und skalierbare Umgebung zu schaffen. Also ganz genau das richtige für unser Node-RED Vorhaben [14].
4.3  Docker Installation
Docker ist vielseitig und deshalb lässt sich die Containerverwaltung auch auf beinahe alle Betriebssysteme installieren. Für Windows gibt es eine Desktop-Version oder alternativ auch die integrierte Ubuntu-Variante in Windows WSL2. Die Desktop-Version unter Windows und macOS bietet eine grafische Benutzeroberfläche, mit der sich die Container verwalten lassen. Die Dokumentation auf der docs.docker.com Website ist gut und detailliert, sodass man spezifisch für sein Betriebssystem alle Informationen bekommt [15].
Auch der Raspberry Pi kommt nicht zu kurz, denn bereits 2016 wurde Docker auf dem Raspi lauffähig gemacht. Es gibt diverse Installationsskripts, die die Installation von Docker auf den Raspi vereinfachen [16]. Meine Tests mit dem Raspi waren durchaus positiv. Der Prozessmanager htop zeigte bei der Verwendung von Node-RED und Mosquitto gerade mal ein paar Prozent CPU und RAM Auslastung an. Dennoch wird erwähnt, dass für den Produktivbetrieb der Raspberry Pi aufgrund der limitierten Hardwareressourcen nicht vollumfänglich geeignet wäre [14]. Ich empfehle dazu, dass man sein System unter Alltagsbedingungen selber testet und evaluiert. Denn nur unter realen Bedingungen kann wirklich getestet werden, wie robust und zuverlässig das eigene System konfiguriert ist.
In dem nachfolgenden Abschnitt geht es primär um die Installation und Verwendung von Docker unter Linux Debian/Ubuntu.
Die offizielle Dokumentation führt hier eine Reihe von Befehlen an, damit man Docker über den Paketmanager herunterladen kann [17].
Zuerst benötigt man einige Hilfsprogramme:
sudo apt-get update
sudo apt-get install \
   ca-certificates \
   curl \
   gnupg \
   lsb-release
Dann wird der offizielle Docker GPG-Key hinzugefügt:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Weiters wird das Repository angelegt:
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Paketquellen upaten und Docker installieren:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Wir installieren die Community Edition von Docker, dass ist erkennbar an dem „ce“. Die Docker EE Version wäre die Enterprise Edition und ist kostenpflichtig.
Im nächsten Kapitel testen wir gleich, ob die Installation geglückt ist.
4.4  Docker Hello World
Was darf bei keinem Start eines neuen Systems fehlen? Richtig – ein Hello World Beispiel. In diesem Beispiel testen wir nun, ob Docker auf die offiziellen Images zugreifen und diese auf dem System auch installieren kann.
sudo docker run hello-world
Direkt nach der Eingabe des docker run Commands, kommen die folgenden Rückmeldungen:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Das Image für den Container hello-world wurde nicht gefunden und somit heruntergeladen. Im Anschluss darauf sieht man das Hello-World-Beispiel von Docker:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
   (amd64)
3. The Docker daemon created a new container from that image which runs the
   executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
   to your terminal.
In diesem ersten Beispiel konnten wir nun Docker installieren und auch gleichzeitig ausprobieren. Das System ist somit vorbereitet für die nächsten Schritte der Installationen für unsere Praxisbeispiele.
4.5  Docker CLI am Beispiel Focalboard
Für dieses Beispiel bleiben wir noch am Terminal und konfigurieren Docker bzw. die Container über die Kommandozeile. Im nächsten Kapitel sehen wir uns dann eine grafische Verwaltungssoftware für Docker-Container unter Linux an.
Docker listet unter hub.docker.com Images inklusive Details und Statistiken auf. Nicht alle Images werden stets gewartet und gepflegt, also ist ein Blick vor der Nutzung auf jeden Fall empfehlenswert [18].  
Jetzt aber zu diesem Beispiel, dass eindrucksvoll verdeutlicht, wie einfach man mit einer Befehlszeile eine Applikation installieren kann.
Focalboard is an open source, multilingual, self-hosted project management tool that's an alternative to Trello, Notion, and Asana [18].
Wir geben nun folgende Zeile im Terminal ein.
docker run -d --name focalboard -p 8000:8000 mattermost/focalboard
Mit dem Parameter -d wird der Prozess im Hintergrund gestartet. Der Parameter - -name kann auch weg gelassen werden, dann wir ein zufällig generierter Name von Docker ausgewählt. Als nächstes wird mit -p der Port für diesen Container definiert. Hier muss stets darauf geachtet werden, dass sich die Services nicht in die Quere kommen. Am Ende gibt man den Image Namen an.
Da dieses Image lokal am eigenen Server noch nicht verfügbar ist, wird dieses mit dem ersten Aufruf von docker run heruntergeladen und dann ausgeführt.
Wir haben die Applikation mit all den Abhängigkeiten und notwendigen Hilfsprogrammen in einem Container nun installiert. Dieser Container ist getrennt vom Rest des Systems und kann mit einem Klick auch wieder gelöscht, ausgeschaltet oder neugestartet werden.
Öffnet den Browser mit eurer öffentlichen IP und der Port Angabe und ihr solltet eine Anmeldemaske eures eigenen Projektmanagement Tool sehen können. Bei mir lautet die URL wie folgt:
http://5.75.238.225:8000/
Mit klick auf die untere Zeile „oder erstelle einen Account…“ könnt ihr euren Administrations-Zugang anlegen.
Abbildung 14: Focalboard als Docker Container
Über die Kommandozeile können wir die Container, die sich auf unserem Server befinden, verwalten:
1    docker ps
2    docker stop focalboard
3    docker start focalboard
4    docker container ls
5    docker image ls
6    docker container prune
Code 2: Docker Verwaltungs-Commands
   • Mit dem Befehl aus Zeile 1. werden die aktiven Container aufgelistet.
   • Mit Zeile 2. kann man den Container stoppen und der Service vom Focalboard ist nicht mehr erreichbar. Ein erneuertes docker ps zeigt nun keinen Eintrag mehr an.
   • Zeile 3. startet den Container wieder und somit ist auch das Focalboard wieder erreichbar.
   • Zeile 4. listet alle Container auf.
   • Zeile 5. zeigt sämtliche heruntergeladenen Images. Es kann sich über die Zeit hier einiges an Datenleichen ansammeln.
   • Zeile 6. soll nur dann ausgeführt werden, wenn man auch wirklich alle gestoppten Container entfernen will.
Mit den sechs Befehlen aus Code 2 lässt sich Docker für das Erste gut konfigurieren und verwalten.
4.6  Portainer-ce
Portainer Community Edition is a lightweight service delivery platform for containerized applications that can be used to manage Docker [...] [19].
Mit Portainer lassen sich die Docker Container über eine Weboberfläche verwalten. Zu Beginn werfen wir stets einen Blick auf dockerhub, damit wir uns die notwendigen Konfigurationsinformationen holen können [19].
docker run -d -p 9000:9000 -p 9443:9443 --name portainer \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest
n diesem Fall gibt die Dockerhub-Seite nicht viel her, sodass wir die offizielle Portainer Dokumentation zu rate ziehen. Hier gibt es eine Reihe an Parameter, die für diesen Befehl verwendet werden [20]. Wichtig ist hier die erste Portangabe von 9000. Der Parameter „–restart“ gibt das Verhalten von Docker Container an, wenn der Container beendet bzw. das System neugestartet wird. In diesem Fall soll der Container selbständig neu starten. Mit dem Parameter „-v“ wird ein lokaler Ordner mit dem Container verknüpft. Container sind isoliert, sodass sämtliche Daten außerhalb des Containers nicht verfügbar wären. Im ersten Beispiel haben wir das Focalboard ohne externes Verzeichnis (volume) erstellt, sodass wir auf die erstellten Inhalte des Focalboards nicht über den Host zugreifen können. Wir werden im späteren Verlauf immer wieder Volumes einbinden.
Nach der Eingabe des obigen Befehls lässt sich Portainer auch schon starten und es wird sofort nach einem Passwort für den Admin-Zugang gefragt.
Es folgt das „Quick Setup“ und wir können auf „Get Started“ klicken.
Abbildung 15: Portainer Einrichtung
Wählt man links den Menüpunkt „Containers“ wird einem die Übersicht aller lokalen Container aufgelistet.
Abbildung 16: Portainer Container-Übersicht
Der hello-world Container wurde gleich nach dem ausführenden Dialog wieder beendet, was in Abbildung 16 in der ersten Zeile in der Spalte State als „exited“ zu sehen ist. Beim Namen in der ersten Zeile wurde von Docker ein Zufallsname ausgewählt, da beim docker-run kein Parameter für den Container-Namen übermittelt wurde. Weiters sind die beiden Container focalboard und portainer zu sehen.
Über die grafische Benutzeroberfläche lassen sich die Container im darüber liegenden Menü, starten, beenden und vieles mehr.
Gerade für das Debuggen ist Portainer sehr hilfreich. Klicken wir zum Beispiel auf den Focalboard-Container haben wir noch zahlreiche weitere Einstellungsmöglichkeiten.
Abbildung 17: Container Status
Im ersten Abschnitt sind die „Container status“ Inhalte aufgelistet. Im unteren Bereich befinden sich Links und unter anderem auch ein Link zu den „Logs.“, was in Abbildung 17 nochmal extra dargestellt ist. Die Logs werden wir immer wieder konsolidieren, damit wir bei etwaigen Fehlern mehr Informationen bekommen und dementsprechend andere Konfigurationen vornehmen können.
Interessant ist im linken Hauptmenü der Punkte Images. Hier können nicht verwendete Images identifiziert und gelöscht werden. Docker macht es einem einfach neue Programme und Services schnell zu testen, doch oft vergisst man auf das Bereinigen und so sammeln sich immer wieder einige Gigabytes an Datenleichen an.
In diesem kurzen Kapitel haben wir Portainer kennengelernt. Dank der grafischen Benutzeroberfläche erleichtert Portainer das verwalten und überwachen von Containern, ohne sich tiefer in die Befehlsketten der Kommandozeile einlesen zu müssen. Als Alternative möchte ich hier noch „Yacht“ anführen. Dieses Programm hat sich ebenso der Container-Verwaltung verschrieben und hat eine wesentlich schlankere Menüführung [21].
4.7  Mosquitto Broker
Mosquitto ist ein kostenloser und quelloffener MQTT-Broker, der eine sichere und zuverlässige Datenübertragung zwischen IoT-Geräten und Anwendungen ermöglicht. Aufgrund seiner Einfachheit und Skalierbarkeit ist Mosquitto ein beliebtes Werkzeug für den Einsatz in Smart Home Systemen, Automatisierungsprojekten und anderen Anwendungen, die eine drahtlose Datenübertragung erfordern. Dreh- und Angelpunkt der Kommunikation der Praxisprojekte vom ESP32 zu Node-RED wird MQTT sein.
Die genaueren Ausführungen zum MQTT Protokoll kommen in den nächsten Kapitel vor. In diesem Kapitel geht es um die Installation und Konfiguration von Mosquitto.
Wir starten mit den ersten Befehlen.
cd /usr/local/sbin
mkdir mosquitto
sudo chown -R 1883:1883 mosquitto
cd mosquitto
nano mosquitto.conf