c't Smart Home

c't Smart Home

Praxis & Tipps | Projekt

Hunderte Smart-Home-Systeme tummeln sich auf dem Markt. Zueinander kompatibel sind sie jedoch selten. c't Smart Home zeigt eine Welt, die vom Gegenteil lebt und Geräte unterschiedlicher Hersteller verbindet.

Seit c't 2/2018 haben wir über mehrere Ausgaben hinweg erklärt, wie Sie mit günstigen fertigen oder selbst gebauten Komponenten ein Smart-Home ohne zwingende Cloud-Anbindung aufbauen, das mit freier Software läuft. Artikel dieser Kategorie werden in Zukunft unter "c't Smart Home" laufen.

An erster Stelle des Projekts steht die Interoperabilität zwischen Komponenten verschiedener Hersteller – Ideen sollten nicht eingeschränkt werden, weil ein Hersteller ein bestimmtes Gerät nicht anbietet. Nachfolgend führen wir in das Anfangswissen ein, das Sie benötigen.

Komponenten sollen mit offenen Schnittstellen arbeiten, die im Idealfall die vollständige Steuerung des jeweiligen Gerätes ermöglichen. Ein ent-cloudetes Gerät sollte nicht an Funktionsumfang verlieren.

Es werden offene Protokolle benutzt, um Kompatibilität mit möglichst vielen Smart-Home-Zentralen zu erreichen und die Verarbeitung einfach zu gestalten. Darüber liegen Übertragungsstandards wie WLAN oder auch ZigBee oder Z-Wave. Letztere werden über Konverter integriert.

Im Idealfall kommt Open-Source-Firmware auf den Geräten zum Einsatz, die durch den Benutzer vollständig überprüf- und veränderbar ist.

Dienste sollen möglichst als Open-Source-Software lokal laufen. Für den Einstieg sollte ein Raspberry Pi als Zentrale ausreichen, um die Kosten gering zu halten.

Mit einem Raspi und dem abgebildeten Zigbee-Stick kann man praktisch jedes Zigbee-Gerät steuern. Egal ob Lampe oder Temperaturfühler.

Das Projekt ist kein fertiges Heimautomationsprodukt, das angeschlossen und in Betrieb genommen wird. Es lebt davon, dass der Nutzer nach seinen Vorstellungen Logiken erstellt und optimiert. Das bedeutet mehr Zeitaufwand als bei einer fertigen Lösung, aber auch mehr Freiheit.

Das Message Queue Telemetry Transport Protocol, kurz MQTT, ist ein robustes Telemetrieprotokoll. Sein primärer Zweck ist also, Text und Zahlen zuverlässig zu übertragen. Ursprünglich für Industriesteuerungen entwickelt eignet es sich wegen seiner Zuverlässigkeit und res­sour­cen­scho­nenden Arbeitsweise auch für kleine Mikroprozessoren, die in der Heimautomation zum Einsatz kommen.

Die Zentrale eines MQTT-Systems ist der Broker. Ein Server, der eingehende Nachrichten gezielt weiterverteilt. Sogenannte Topics gliedern die Nachrichten. Topics ähneln Dateisystempfaden wie zum Beispiel smarthome/steckdose1/relay/0, über die Informationen ausgetauscht werden. Grundsätzlich wird in diesen Pfaden jedoch nichts gespeichert – der Broker leitet die Nachrichten aus dem jeweiligen Pfad an die Clients weiter und löscht sie danach. Ist das Retain-Flag einer Nachricht gesetzt, behält der Broker die jeweils letzte Nachricht der Topics. Der beliebteste Open-Source-Broker ist Mosquitto von Eclipse. Er läuft zuverlässig auf einem Raspberry Pi.

Damit ein MQTT-Client Nachrichten erhält, muss er einen oder mehrere Topics abonnieren ("Subscribe"). Der Broker sendet dann die im Topic gesendeten Nachrichten und auch nur diese an den Client. Das macht das Protokoll besonders sparsam, weil Daten nur an die Clients versendet werden, wenn die das Topic auch abonniert haben. Fügt man an ein Topic eine Raute an: smarthome/#, sendet der Broker alle Nachrichten in den Topic-Ebenen darunter. Ein Plus dient als Platzhalter für eine Hierarchieebene: smarthome/+/relay/0 abbonniert beispielsweise alle dort hinterlegten Relaiszustände.

Die Gegenrichtung, also der Versand einer Nachricht an den Broker, geschieht über den Befehl "Publish". Im Paket enthalten sind dann unter anderem die Nutzdaten ("Payload"), das Topic, das Retain-Flag und das Quality-of-Service-Flag. MQTT erlaubt sowohl den unverschlüsselten Betrieb ohne Authentifizierung als auch mit Benutzerauthentifizierung und TLS-Verschlüsselung.

Jan Mahn erklärt Ihnen in c't 6/2018 ab Seite 164 die Funktionsweise von MQTT im Detail, wie Sie einen eigenen MQTT-Broker aufsetzen und absichern.

WLAN ist in vielen Fällen mit seinen hohen Datenraten und vergleichsweise komplexen Anmeldeverfahren ungeeignet für batteriebetriebene Geräte. ZigBee eignet sich besser, wenn beispielsweise einfache Schaltbefehle oder Sensordaten übertragen werden. Der Funkstandard bedient sich wie Bluetooth und WLAN dem lizenzfreien Frequenzbereich bei 2,4 GHz, jedoch mit einer Datenrate von "nur" 250 KBit/s bei 2 MHz Kanalbreite (WLAN: 20/40 MHz) und unter 10 mW (WLAN: 100 mW) Sendeleistung.

Die zentrale Stelle in einem ZigBee-Netz ist der Koordinator. Er teilt jedem ZigBee-Gerät im Netzwerk eine einmalige 16 Bit lange Adresse zu, über die das Gerät im Netzwerk angesprochen wird und Nachrichten versendet. Geräte, die immer erreichbar sind, also beispielsweise eine Lampe mit dauerhafter Stromversorgung, werden im ZigBee-Netz "Router" genannt. Sie arbeiten neben ihrer primären Funktion zusätzlich als Verstärker und leiten Pakete von Geräten weiter, die den Koordinator nicht direkt erreichen können. Bis zu 30 Router können zwischen Sender und Koordinator liegen, sodass über lange Kaskaden große Reichweiten entstehen können. ZigBee regelt dieses sogenannte "Meshing" ohne Zutun des Benutzers und deckt so auch große Häuser ab – sofern genug Router verteilt sind.

Wer bei ZigBee zuerst an Lampen von Philips oder Ikea und herstellergebundene Bridges mit gelegentlich schwieriger Interoperabilität denkt, liegt nicht ganz falsch. Viele Hersteller stricken an das Funkprotokoll Ihre eigenen Erweiterungen. Doch da mit ZigBee immer ein offenes Protokoll darunter liegt, ist es gar nicht so schwer, diese zu entschlüsseln. Der GitHub-Benutzer Koen Kanters (Koenkk) hat zigbee2mqtt geschaffen. Die JavaScript-Software übersetzt zwischen ZigBee und MQTT und beschränkt sich nicht auf einen Hersteller – die Liste der vom Projekt unterstützten Geräte ist lang. Fehlt ein Gerät, kann man sich selbst mit etwas Aufwand am Projekt beteiligen und einen passenden Konverter programmieren. Zigbee2mqtt benötigt lediglich einen günstigen USB-Stick mit passender Firmware.

In c't 24/2018 ab Seite 164 und online erfahren Sie, wie Sie zigbee2mqtt einrichten. Ausführlichere Grundlagen zu ZigBee finden Sie im selben Heft ab Seite 162. Bewegt sich Ihr ZigBee-Netz auf Konfrontationskurs mit Ihrem oder dem Nachbars-WLAN, zeigt Ihnen Andrijan Möcker in c't 25/2018 auf Seite 160 wie Sie die Störungen minimieren.

Eine simple Badlüftersteuerung in Node-Red.

Viele freie Smart-Home-Zentralen verstehen sich mit einer großen Anzahl von Geräten und binden diese über ein schickes Webinterface mit wenigen Klicks ein. Wenn es jedoch darum geht, Regeln für diese Geräte zu erstellen, muss man sich meist in den Code der Software reinfuchsen und viel Zeit investieren. Node-Red löst dieses Problem grafisch. Ursprünglich von IBM entwickelt und 2016 als Open-Source-Projekt veröffentlicht richtete sich die Software zuerst an industrielle Nutzer, die Vorgänge einfach und anschaulich umsetzen wollten – gerade deshalb erfreute sich die Software auch bei Privatnutzern schnell wachsender Beliebtheit.

Die Programmierung in Node-Red erfolgt als Flussdiagramm (Flow) mit sogenannten Nodes. Ein Node kann dabei eine oder mehrere Funktionen übernehmen. Den Anfang eines Flows bildet immer ein Input-Node. Das kann wie im Beispiel ein MQTT-Node sein, der sich bei eingehenden Nachrichten meldet oder auch ein einfacher Timer, der den Vorgang im Minutentakt auslöst. Zwischen den Nodes wird das Objekt "msg" weitergegeben, das die vom Input-Node eingespeisten Informationen enthält. Die Ausgabe eines MQTT-Nodes enthält beispielsweise die Nutzlast in msg.payload, den Topic in msg.topic. Das msg-Objekt kann im Laufe des Flows verändert, gelöscht oder erweitert werden. Die enthaltenen Daten müssen nicht zwangsläufig verarbeitet werden – erreicht das Objekt einen Node, wird dessen Funktion gestartet. Anschließend kann das msg-Objekt unverändert weitergegeben werden.

Das msg-Objekt ist immer exklusiv für einen Flow, auch wenn mehrere in einer Registerkarte laufen. Daten, die in mehreren Flows benötigt werden, können in flow- (innerhalb einer Registerkarte) und global-Variablen gespeichert werden. Sollen Aktionen über Registerkarten hinweg ausgelöst werden, helfen Links weiter. Als Output-Node erhält dieser eine eindeutige Bezeichnung, die am Link-Input-Node angeklickt wird.

Node-Red ist nicht auf die mitgelieferten Nodes beschränkt. Über die interne Paketverwaltung, genannt "Palette", installiert man mit wenigen Klicks neue Funktionen und Schnittstellen nach. Wer möchte, kann Node-Red auch selber in JavaScript erweitern.

In c't 15/2018 erklären wir ab Seite 142, wie Sie Node-Red einrichten und erste Flows erstellen.

Node-Red-Bilderstrecke (8 Bilder)

Badlüftersteuerung

Diese Badlüftersteuerung arbeitet sowohl automatisch nach gemessener Luftfeuchtigkeit, als auch manuell über einen ZigBee-Knopf. Eine globale Variable zeigt dazu an, dass der Lüfter manuell in Betrieb genommen wurde, damit andere automatische Logiken diesen nicht abschalten.

Die grafische Oberfläche liefert typischerweise das Node-Red-Dashboard. Das ist eine Sammlung von Nodes, mit denen es im Handumdrehen möglich ist, ein Webinterface für das Smart-Home zu bauen. Der Clou dabei ist, dass die Oberfläche auf jedem Gerät läuft und sich als "Progressive Web App" (PWA) auf Smartphones und Tablets wie eine native App verhält.

Die Widgets genannten Elemente kann man auf verschiedenen Unterseiten gruppieren und so für übersichtliche und logische Strukturen sorgen.

In c't 2/2019 erklärt Ihnen Merlin Schumacher ab Seite 160, wie Sie Node-Red-Dashboard einrichten und einsetzen.

Einen MQTT-Broker, Node Red und verschiedene Dienste, die mit Komponenten von anderen Anbietern sprechen – all diese Dienste kann man unter Linux installieren und aktuell halten. Muss man dieses Setup später mal neu aufsetzen, braucht man eine gute Dokumentation, um zahlreiche Konfigurationsdateien erneut anzupassen.

Wir haben uns deshalb entschieden, auf Docker-Container zu setzen. Installieren müssen Sie nur zwei Dinge: Docker und das Hilfsprogramm Docker-Compose. Im GitHub-Repository "node-red-pack" haben wir alle vorgestellten Komponenten als Container zusammengepackt. Dort gibt es auch eine Schnellstartanleitung. Mit einem Befehl auf der Kommandozeile startet die Zusammenstellung und ist bereit für Ihre Automations-Ideen. Docker-Experte müssen Sie für das Projekt nicht sein – in c't 26/2018 ab Seite 148 finden Sie eine Einführung in Docker-Compose.

Jedes vernetzte Zuhause ist anders – wenn Sie Node Red, MQTT und andere Komponenten im Einsatz und Fragen haben oder Ideen diskutieren möchten, können Sie das Forum unter dieser Projektseite nutzen.

Kommentare

Kommentare lesen (40 Beiträge)

Anzeige