image

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

image

Erste Schritte mit der

SMART-HOME-PROGRAMMIERUNG

Einstieg in die Hausautomation mit Node-RED

image

UDO BRANDES

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

eISBN 978-3-645-22479-6

EINLEITUNG

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.

INHALT

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

 1 WAS IST NODE-RED?

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.

Entstehung als Open-Source-Projekt

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.

image

Bild 1.1: Das Internet of Things (IoT) mit Node-RED.

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).

Grundgedanken zur Verwendung

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/

 2 NODE-RED FÜR DEN EINSATZ VORBEREITEN

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.

Linux und Raspberry Pi

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.

Node-RED von GitHub installieren

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.

Node-RED starten und beenden

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.

Das System administrieren

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.

Wichtige Dateien im Home-Verzeichnis

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.

Sicherheit mit Passwortauthentifizierung

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:

imageEin 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.

imageDie 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: