Der Autor
Udo Brandes war mehrere Jahre lang Systementwickler beim Rechenzentrum der Finanzverwaltung des Landes Nordrhein-Westfalen. Nach verschiedenen Tätigkeiten bei der Stadt Wuppertal arbeitet er seit einigen Jahren als selbstständiger Programmierer und IT-Entwickler. Ansätze und Möglichkeiten der Hausautomation sind Zukunftsthemen, die den Autor faszinieren und mit deren Chancen und Risiken er sich seit Langem intensiv befasst.
FRANZIS
Einstieg in die Hausautomation mit Node-RED
Bibliografische Information der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte Daten sind im Internet über http://dnb.ddb.de abrufbar.
Hinweis: Alle Angaben in diesem Buch wurden vom Autor mit größter Sorgfalt erarbeitet bzw. zusammengestellt und unter Einschaltung wirksamer Kontrollmaßnahmen reproduziert. Trotzdem sind Fehler nicht ganz auszuschließen. Der Verlag und der Autor sehen sich deshalb gezwungen, darauf hinzuweisen, dass sie weder eine Garantie noch die juristische Verantwortung oder irgendeine Haftung für Folgen, die auf fehlerhafte Angaben zurückgehen, übernehmen können. Für die Mitteilung etwaiger Fehler sind Verlag und Autor jederzeit dankbar. Internetadressen oder Versionsnummern stellen den bei Redaktionsschluss verfügbaren Informationsstand dar. Verlag und Autor übernehmen keinerlei Verantwortung oder Haftung für Veränderungen, die sich aus nicht von ihnen zu vertretenden Umständen ergeben. Evtl. beigefügte oder zum Download angebotene Dateien und Informationen dienen ausschließlich der nicht gewerblichen Nutzung. Eine gewerbliche Nutzung ist nur mit Zustimmung des Lizenzinhabers möglich.
© 2019 Franzis Verlag GmbH, 85540 Haar bei München
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Das Erstellen und Verbreiten vonKopien auf Papier, auf Datenträgern oder im Internet, insbesondere als PDF, ist nur mit ausdrücklicher Genehmigung des Verlags gestattet und wird widrigenfallsstrafrechtlich verfolgt.
Die meisten Produktbezeichnungen von Hard- und Software sowie Firmennamen und Firmenlogos, die in diesem Werk genannt werden, sind in der Regel gleichzeitig auch eingetragene Warenzeichen und sollten als solche betrachtet werden. Der Verlag folgt bei den Produktbezeichnungen im Wesentlichen den Schreibweisen der Hersteller.
Lektorat: Ulrich Dorn
Satz: Nelli Ferderer (nelli@ferderer.de)
Art & design: Anna Lena Ibiş
eISBN 978-3-645-22479-6
Das Internet ist nicht nur aus dem wissenschaftlichen, sondern auch aus dem privaten Bereich kaum mehr wegzudenken. So sind E-Mail, Social Media, Onlineshopping und Onlinebanking sowie Streamingdienste wie YouTube oder Netflix Bestandteil des täglichen Lebens.
Aber das alles ist kein statischer Zustand, sondern einer ständigen rasanten Weiterentwicklung unterworfen. Das Internet wird zunehmend als Basis genutzt, um mithilfe entsprechender Technologien physische und virtuelle Gegenstände miteinander zu vernetzen und sie zusammenarbeiten zu lassen. Dafür wurde der Begriff Allesnetz bzw. Internet of Things (Internet der Dinge, Kurzform IoT) geprägt.
Ausgehend vom industriellen Bereich, finden diese Ansätze zunehmend auch im privaten Sektor ihren Einsatz. Schlagwörter sind hier Smart Home oder Wearables. Immer kleinere in Gegenstände eingebettete Computer sollen dazu dienen, den Besitzer im Alltagsleben zu unterstützen, ihn mit beliebigen elektronischen Systemen zu vernetzen sowie die Systeme zusammenzuschalten.
Für die Verknüpfung solcher identifizierbaren physischen Objekte, damit sie sich gegenseitig »verstehen« und interagieren, sind mehrere Komponenten erforderlich. Zum einen muss die Rolle eines Moderators besetzt werden, der Nachrichten von den Objekten empfängt und an andere, bestimmte Teilnehmer weiterleitet. Diese Funktion eines Moderators oder Brokers übernimmt MQTT. Darüber hinaus wird ein Hilfsmittel benötigt, das eingehende Nachrichten auswertet, bearbeitet und wieder weiterleitet. Node-RED kann in diesem Sinne als Übersetzungswerkzeug verstanden werden, das die einzelnen Objekte über Knoten (engl. Nodes) miteinander verbindet. Dabei können Knoten die eingehenden Informationen auch verändern und aufbereiten.
Dass dies keine abgehobene und spröde Materie für Nerds und Computerfreaks ist, sondern jedermann mit kleinen, selbst entwickelten Helferlein im Alltag unterstützen kann, soll dieses Buch anhand praktischer und leicht verständlicher Beispiele belegen. In diesem Sinne soll es Wegbereiter und Ideengeber für eigene gelungene Hausautomatisierungsprojekte sein.
Für wen das Buch gedacht ist
Das Buch richtet sich an alle, die
•neugierig sind und sich gern mit den Möglichkeiten von Internet und Computer beschäftigen,
•einen Einstieg in die Hausautomation und das IoT suchen,
•mit einfachen Mitteln schnell loslegen möchten,
•aber auch etwas weiterführende und vertiefende Anregungen, Vorschläge und praktische Anleitungen suchen und
•auf aussagekräftige und ausführliche Schritt-für-Schritt-Erläuterungen Wert legen.
Voraussetzungen:
Im Prinzip reicht es für die im Buch dargestellten Beispiele aus, wenn man über einen PC mit Internetzugang verfügt. Programmierkenntnisse und Erfahrungen in der Installation von Software sind nicht erforderlich, da jeder einzelne Schritt zur Realisierung eines Projekts detailliert beschrieben und mit Screenshots visuell unterlegt wird.
Inhalt dieses Buchs:
Die Kapitel sind in logischer Reihenfolge angeordnet; es beginnt mit den notwendigen Vorbereitungen und führt über einfache Aufgaben bis hin zu etwas anspruchsvolleren Techniken.
•Was ist Node-RED?
Dieser Teil des Buchs behandelt die Entstehung und einige Grundgedanken zur Verwendung von Mode-RED.
•Installation
Hier erfahren Sie, welche Möglichkeiten zur Installation von Node-RED es gibt.
•Erste Schritte
Dieser Teil führt Sie langsam in die Nutzung von Node-RED ein.
•Node-RED-Menü und Dashboard
Hier erfahren Sie alles zum Node-RED-Menü und zum Dashboard.
•Messages
Sie lernen die Nachrichtenstruktur innerhalb von Node-RED kennen.
•Erweiterte Flows
Hier werden Flows mit erweitertem Funktionsumfang behandelt.
So entwickeln Sie z. B. einen Audio-Wetterdienst und einen Frostwächter.
•MQTT
Dieser Teil erläutert das Zusammenspiel von Node-RED mit MQTT.
•USB
Sie erfahren etwas über die Kommunikation via USB-Schnittstelle.
•Social Media
Einige der Möglichkeiten der Kommunikation mit Social-Media-Plattformen werden hier beschrieben.
•Node-RED im WWW
Hier geht es um die Anbindung an das WWW.
Besondere Schriftarten:
Verschiedene Begriffe werden in einer vom üblichen Text abweichenden Schriftart dargestellt:
•Codezeilen sowie Codeelemente werden in nicht proportionaler Schrift dargestellt.
•Namen, Dateipfade und dergleichen werden kursiv dargestellt.
EINLEITUNG
1.WAS IST NODE-RED?
Entstehung als Open-Source-Projekt
Grundgedanken zur Verwendung
2.NODE-RED FÜR DEN EINSATZ VORBEREITEN
Linux und Raspberry Pi
Node-RED von GitHub installieren
Node-RED starten und beenden
Das System administrieren
Wichtige Dateien im Home-Verzeichnis
Sicherheit mit Passwortauthentifizierung
Windows
Installation unter Windows
Node-RED im Terminal starten
Node-RED beim Windows-Start einbeziehen
FRED (Front-End-Node-RED)
3.ERSTE SCHRITTE IM EDITOR
Browserzugriff auf Node-RED
Eingaben im Node-RED-Editor
Start mit einem »Hallo-Welt-Flow«
4.NODE-RED-MENÜ UND -DASHBOARD
Operationen im Node-RED-Menü
Daten importieren
Export
Flows
Palette
View und Keyboard
Das Node-RED-Dashboard-Modul
Installation über das Terminal
Das Dashboard einrichten
Das Dashbord im Browser aufrufen
Hallo-Welt-Flow mit Dashboard-Ausgabe
Exkurs Template-Node
5.MESSAGES ALS VERBINDENDES ELEMENT
Message-Objekte
Die Message-Struktur
6.FLOWS MIT ERWEITERTER FUNKTIONALITÄT
Hallo Welt mit Zeitangabe
Wetterbericht mit Audioansage und Frostwarnung
OpenWeatherMap
openweathermap-Node
Die Wetter-Flow-Grundfassung
Ein Audio-Wetterbericht
Bau eines Frostwächters
Weitere Wetter-Nodes
Zeitschaltuhren steuern
Fixe Zeitspannen
Variable Zeitspannen
Bewegungsalarm mit dem Raspberry Pi
7.MIT ALEXA KOMMUNIZIEREN
Was genau ist Alexa?
Smart-Home-Skills
Zurück zur Alexa-App
Alexa-Flow entwickeln
8.433-MHZ-GERÄTE SCHALTEN
Funksteckdosen steuern
Funksteckdose und Fernbedienung
WiringPi installieren
Die Schaltung
rcswitch-Node für den Flow
9.NODE-RED SPRICHT MIT DER USB-SCHNITTSTELLE
Arduino-Nodes installieren
Arduino-LED ansteuern
Pflanzenbewässerung
Schaltung des Bodenfeuchtigkeitsmessers
serial-Nodes-Installation
Optimierte Lösung zur Pflanzenbewässerung
433-MHz-Geräte über USB steuern
Der Flow
10.WEBANBINDUNG UND NETZENDPUNKT
TCP-Anforderungen senden
Websockets mit Node-RED
Funktionsweise von Websockets
Websocket für Dateitransfer nutzen
11.ESP8266 UND ESP32 PROGRAMMIEREN
Die Mikrocontroller der ESP-Familie
ESP8266-NodeMCU
ESP8266 und DHT22
Die Schaltung
Mit dem ESP8266 den DHT22 auslesen
Modul mit dem WLAN verbinden
DHT22-Daten ins Netz senden
Smarte Datenausgabe am Browser
Den ESP8266 über WLAN steuern
12.MQTT VERBINDET
Was verbirgt sind hinter MQTT?
Einfacher Publish und Subscribe
Industriell gefertigte MQTT-Geräte
13.MQTT MIT ESP8266 UND DHT22
NTP: das Network Time Protocol
Der ESP8266 holt sich die Zeit …
… bildet Datenobjekte …
… und verbindet sich über MQTT
ESP8266 empfängt MQTT-Messages
Der ESP8266 wächst zu einem Sensormodul
14.KONKRETE PRAXISSITUATION MIT MQTT
Heizungssteuerung für das Badezimmer
MQTT-Nachricht abonnieren und aufbereiten
Daten für Temperatur und Luftfeuchtigkeit separieren
Dashboard-Ausgabe und Schwellenwerte
MQTT-DHT22-Dashboard-Ausgabe
Behandlung der Schwellenwerttemperatur
Schwellenwertluftfeuchtigkeit
MQTT-Nachricht aufbereiten und veröffentlichen
15.SOCIAL MEDIA NUTZEN
Node-RED an Twitter anbinden
Tweets versenden
Beliebtheit von Personen
dropdown, twitter, sentiment und debug
Ergebnisse eines Zeitraums zusammenfassen
Ergebnisse aufbereiten und ausgeben
E-Mails versenden
E-Mails abrufen
Weitere Social-Media-Nodes
16.»FLÜCHTIGE« DATEN SICHERN
Node-RED-context-Variable
Daten in eine Datei ausgeben
Daten aus einer Datei auslesen
Sensormoduldaten sichern
Link-out-Node und Link-in-Node
Sensormoduldaten speichern
Aktuelle Chart-Daten darstellen
Historische Daten darstellen
Das Dashboard ansprechender gestalten
17.PING IN DER HEIMAUTOMATION
Einfacher Ping
Alarmanlage aktivieren
Alle Familienmitglieder an Bord?
Advanced Ping
18.TIMES ARE CHANGING
moment-Node
humanizer-Node
19.ANBINDUNG ALTERNATIVER SOFTWARELÖSUNGEN
Stärken und Schwächen von Node-RED
Alternative Hausautomationslösungen
OpenHAB2
FHEM
pilight
domoticz
Last, but not least: der Überallzugriff
20.ANHANG
Anhang A: Node-RED-Nodes
input-Nodes
output-Nodes
Funktions-Nodes
social- und storage-Nodes
social-Nodes
storage-Nodes
advanced- und analysis-Nodes
advanced-Nodes
analysis-Nodes
Raspberry Pi-Nodes
Dashboard-Nodes
Weitere Nodes
Anhang B: Arduino-IDE
Arduino-Software installieren
Arduino-IDE
Arduino-Software einrichten
Bibliotheken hinzufügen
Boards hinzufügen
ESP32
Anhang C: MQTT
Linux/Raspberry Pi
Windows
Mosquitto-Testserver
Mosquitto mit Passwort absichern (Raspberry Pi)
Anhang D: Sketche
TCP aus Kapitel 11
MQTT aus Kapitel 13
INDEX
Wir stehen hier am Beginn einer Wanderung, die uns zu einer pfiffigen selbst entwickelten Lösung für unsere Heimautomation führen wird. Das geht nicht ohne Hilfsmittel. Was für die Wanderung Schuhe und Stöcke sind, ist für die Hausautomation geeignete Software. Das folgende Kapitel soll dazu etwas Hintergrundinformation geben.
Die Geschichte von Node-RED1 ist noch relativ jung. Es wurde ursprünglich Ende 2013 von Nick O’Leary und Dave Conway-Jones, beides Wissenschaftler der IBM Engineering Technologies Group, als Open-Source-Projekt für eigene Zwecke entwickelt. Ziel war es, auf einfache Weise eine schnelle Verbindung zwischen Geräten mit Webdiensten und Programmierschnittstellen zu schaffen.
Node-RED erfreut sich einer lebhaften Benutzer- und Entwicklercommunity, in der eine Kerngruppe an dem Node-RED-Code selbst arbeitet und der Rest der Entwickler Nodes oder Flows zur Flow-Bibliothek beisteuert. Mit entsprechenden Suchanfragen können im Netz oder in GitHub2-Repositorys Lösungen zu einer Vielzahl von Anforderungen gefunden werden.
Node-RED basiert auf der Programmiersprache Node.js3. Deshalb findet sich das Wort Node auch im Namen wieder. Der Zusatz »RED« hat wohl keine tiefere Bedeutung. Er wurde von Dave Conway-Jones vorgeschlagen, weil sich der gesamte Name wie »Code-Red« anhört. Darunter versteht man eine Gruppe von Computerwürmern. Node-RED hat binnen kurzer Zeit an Popularität gewonnen und ist heute ein weitverbreitetes Werkzeug für das Internet der Dinge (Internet of Things, IoT).
Node-RED präsentiert sich als universelle und visuelle IoT-Plattform mit einer beständig wachsenden Nutzerbasis und einer aktiven Entwicklergemeinschaft, die neue Nodes beisteuert. Damit kann Node-RED für eine Vielzahl von Aufgaben verwendet werden. Allerdings sind nicht alle Aufgaben für Node-RED geeignet; ihre Erledigung bleibt dann traditionellen Programmiersprachen und Entwicklungsumgebungen vorbehalten.
Der Grundgedanke von Node-RED ist es, vordefinierte Codeblöcke für die Ausführung von Aufgaben zu definieren. Diese Codeblöcke werden als »Nodes« (engl. Knoten) bezeichnet, die miteinander verbunden werden, sodass eine Linie von Eingangs-Node über Verarbeitungs-Node bis Ausgabe-Node entsteht. Ein solches Gebilde wird »Flow« (engl. Datenfluss) genannt.
Obwohl Node-RED ursprünglich für die Zusammenarbeit mit dem Internet of Things entwickelt wurde, das heißt, um Geräte zu kontrollieren, die mit der realen Welt interagieren, hat sich das Anwendungsspektrum deutlich erweitert. So haben inzwischen Belange von Social Media (Twitter, E-Mail) genauso Eingang gefunden wie die Möglichkeit, eigene Smart-Home-Lösungen zu realisieren.
1https://Node-RED.org
2https://github.com/
3https://nodejs.org/en/
Eingangs des vorigen Kapitels war von Werkzeug, von Software, die Rede, die wir für unsere Heimautomationslösung benötigen. Nachfolgend werden drei Möglichkeiten beschrieben, sich das Werkzeug Node-RED in den Werkzeugkasten zu legen und es für den Einsatz vorzubereiten.
Bei den meisten Linux-Installationen ist Node-RED bereits vorinstalliert. Das gilt insbesondere für den Raspberry Pi. Überprüfen lässt sich das mit der Eingabe von node –v. Als Ergebnis wird dann die installierte Version, z. B. v8.11.3, ausgegeben.
Sollte das nicht der Fall sein, kann Node-RED von GitHub4 installiert werden. Hierzu öffnen wir ein Terminal. Zunächst sollte jedoch wie fast immer mit sudo apt-get update das System auf den neuesten Stand gebracht werden. Mit der Eingabe von
bash <(curl -sL https://raw.githubusercontent.com/node-red/
raspbian-deb-package/master/resources/update-nodejs-and-Node-RED)
werden die notwendigen Pakete heruntergeladen und befinden sich im Ordner .node-red des Home-Verzeichnisses.
Im Terminal kann mit node-red-start Node-RED gestartet werden. Alternativ geht das auch auf der grafischen Benutzeroberfläche mit dem Icon unter Menu/Programming/Node-RED.
In einem neu zu öffnenden Terminal kann dann Node-RED durch die Eingabe von node-red-stop beendet werden.
Mit der Eingabe von
sudo systemctl enable Node-RED.service
am Terminal kann das System so konfiguriert werden, dass Node-RED beim Bootvorgang mit gestartet wird. Mit sudo service Node-RED status wird der Status überprüft, mit sudo service Node-RED stop wird Node-RED beendet.
Es gibt zwei wichtige Dateien, die sich im Home-Verzeichnis .node-red befinden. Dies sind:
•settings.js: Hier sind die Standardvoreinstellungen gespeichert. So kann z. B. die maximale Länge der Ausgabe des debug-Nodes erhöht werden – debugMaxLength: 5000.
JAVASCRIPT-OBJEKTE
Die Datei settings.js exportiert ein JavaScript-Objekt. Um Node-RED zu konfigurieren, sollte ein Grundverständnis hinsichtlich des Hinzufügens und Änderns von Schlüsselpaaren in JavaScript-Objekten vorhanden sein.
•flows_<Rechnername>.json: In dieser Datei werden alle Flows gespeichert, <Rechnername> ist der Name des Rechners, auf dem Node-RED läuft (z. B. raspberrypi). Diese Datei sollte vor jeder Änderung in Node-RED gesichert werden, da einige Updates diese Datei in den Urzustand zurücksetzen.
Nach der Installation ist Node-RED nicht gesichert. Das heißt, jeder, der Zugang im und zum eigenen Netz hat, kann auf den Node-RED-Editor zugreifen und so Flows verändern und über spezielle Nodes auf den gesamten Rechner zugreifen. Eine Authentifizierung mittels Passwort kann helfen, das zu vermeiden. Was also zu tun ist:
Ein Passwort-Hash erzeugen:
Das zu verwendende Passwort muss als Hash in der Konfigurationsdatei settings.js abgelegt werden, und zwar mithilfe der Admin-CLI-Tools. In der Regel müssen diese aber noch nachinstalliert werden. Bei der Installation kann es zu einigen Warn- und Fehlerhinweisen kommen, die in der Regel ignoriert werden können.
sudo npm install -g node-red-admin
Nun kann das Tool aufgerufen werden. Es erfragt das Passwort und gibt den Hash aus.
sudo node-red-admin hash-pw
Mit Copy-and-paste in eine leere Textdatei kann der Hash zunächst einmal gesichert werden.
Die Datei setting.js anpassen:
Meistens liegt die Konfigurationsdatei unter /home/pi/.node-red/settings.js. Diese Datei öffnen wir in einem Editor, suchen den bereits vorgegebenen, aber auskommentierten Bereich Security Node-Red und ergänzen ihn wie folgt: