«Ein SmartHome wäre schon toll…» – Ein Gedanke, der bei mir durch jeden gelesenen Fachzeitschriften-Artikel zum entsprechenden Thema wieder wachgerufen wurde. Aber einfach eines kaufen? Nein, das hätte dann doch einen faden Beigeschmack. Wenn also etwas bei mir installiert wird, dann ein SmartHome der Marke “Eigenbau”, bei dem ich alles genau so einrichten und konfigurieren kann, wie es mir beliebt.
Dieser Blog-Beitrag beschreibt den Aufbau und Betrieb eines SmartHomes mit HomeAssistant und ZigBee aus der Sicht eines Einsteigers (meine Wenigkeit). Beschrieben werden die verwendeten Technologien HomeAssistant, Zigbee und Zigbee2MQTT. Als Beispiel für eine ersten Automation wird gezeigt, wie mit einem Bewegungssensor die montierten “smarten” Leuchten ein- und ausgeschaltet werden können. Hier schonmal eine Warnung voraus: Meine Vorgehensweise ist bei weitem nicht die einzige Möglichkeit so etwas umzusetzen, und es gibt mit Sicherheit bessere und professionellere Wege zum Ziel. Mein SmartHome für Einsteiger ist genau das: Eine Hobby-Bastelei eines Einsteigers.
Technologien
Ein SmartHome besteht aus verschiedenen Komponenten, die alle zusammenspielen müssen. Als Basis dient dabei ein zentraler Knotenpunkt, an dem alle Informationen zusammenlaufen und von dem aus die Steuersignale kommen. In meinem Fall besteht dieser zentrale Knotenpunkt aus dem Framework «HomeAssistant», ein Open Source Tool, das sehr aktiv entwickelt wird und für das Anbindungen an viele verschiedene Anwendungen existieren.
Ein weiterer Teil eines SmartHomes sind die «Devices», also alle Geräte die Informationen liefern oder die gesteuert werden können (oder beides). Als typisches Einsteiger-Projekt verwende ich an dieser Stelle Lampen, wie weiter unten im Abschnitt «Komponente Licht» beschrieben.
Die Kommunikation zwischen HomeAssistant und diesen Devices kann über verschiedene Kanäle laufen. In meinem SmartHome werden dafür WLan und Zigbee verwendet. Die Einbindung von HomeAssistant ins heimische Netzwerk ist kein Problem, das Framework ist von Haus aus (no pun intended) darauf ausgelegt; so ist das Standard User-Interface eine Website und viele Funktionen können mit dem Browser bedient werden. Die Einbindung von Zigbee erfordert einen Hardware-Adapter, der die entsprechenden Funksignale empfängt. Zusätzlich wird ein Programm benötigt, das die Funksignale in von HomeAssistant interpretierbare Events umwandelt. Diese Funktionalität wird von Zigbee2MQTT zur Verfügung gestellt. Dieses Framework bringt auch bereits bereits Treiber für eine Vielzahl von Zigbee-Adapter mit, darunter auch für den von mir verwendeten CC2652-Usb Stick.
Kurz zusammengefasst, was wird hier verwendet, und was könnte stattdessen verwendet werden:
HomeAssistant
Was: Open Source Framework für Heim-Automation
Alternativen: Node-Red, Google Home, Alexa, OpenHab
Wieso: Kann lokal ohne Internetverbindung ausgeführt werden. Ist Open Source und damit Hersteller-unabhängig.
Zigbee
Was: Protokoll für eine Kommunikation über Funk. Der Schwerpunkt liegt dabei auf kleinen Datenmengen und geringem Stromverbrauch. Besonderheit des Protokolls ist die Möglichkeit der Kommunikation in einem Ad-hoc-Netz, wobei die Kommunikation zwischen Geräten über andere Geräte weitergeleitet werden kann.
Alternativen: WLan, Bluetooth
Wieso: Ermöglicht Einbindung von batteriebetriebenen Sensoren mit langer Laufzeit. Ist speziell ausgerichtet auf SmartHomes.
Zigbee2MQTT
Was: Programm, das als Übersetzer zwischen Zigbee-Funknachrichten und MQTT-Topics in einem Netzwerk dient.
Alternativen: ZHA (Zigbee Home Automation), deCONZ
Wieso: Sehr flexible Brücke zwischen Zigbee und MQTT. Kann Geräte unterschiedlicher Hersteller einbinden.
SmartHome – Zentrale
Was wäre ein Hobby-Bastelprojekt ohne einen Raspberry Pi? Sowohl für HomeAssistant als auch für Zigbee2MQTT wird ein Computer benötigt, der rund um die Uhr läuft. Da bietet sich ein (in meinem Fall sowieso schon im Schrank liegender) Raspberry Pi an. Um die einzelnen Software-Komponenten möglichst unabhängig zu halten, werden diese in Container verpackt und als Instanzen von Docker-Images laufen gelassen. Ein guter Einstiegspunkt für die Installation von Docker auf einem Raspberry Pi findet sich z.B. hier. Der Zigbee-Adapter wird per USB an den Rasbperry Pi angeschlossen und über docker compose wird das Zusammenspiel der Container und die Schnittstellen nach aussen konfiguriert.
version: '3' services: mqtt-broker: container_name: mosquitto image: eclipse-mosquitto:latest restart: always ports: - "1883:1883" - "9001:9001" volumes: - ./mosquitto/config:/mosquitto/config - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log networks: - main restart: always zigbee2mqtt: container_name: zigbee2mqtt image: koenkk/zigbee2mqtt:latest ports: - "8081:8080" depends_on: - mqtt-broker volumes: - ./zigbee2mqtt_data:/app/data - /run/udev:/run/udev:ro devices: - /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_22_98_89_FE-if00-port0:/dev/ttyACM0 restart: always environment: - TZ=Europe/Zurich networks: - main restart: always homeassistant: container_name: homeassistant image: homeassistant/raspberrypi4-homeassistant:stable volumes: - ./homeassistant_config:/config - /etc/localtime:/etc/localtime:ro restart: unless-stopped ports: - "80:8123" depends_on: - zigbee2mqtt - mqtt-broker networks: - main restart: always networks: main:
Komponente Licht
Als erstes Subprojekt beim «Smart machen» der eigenen Wohnung bietet sich die Steuerung von Lampen zum Herantasten an. Erstens sind die Konsequenzen von Fehlern relativ klein – im schlimmsten Fall hat man zu viel oder zu wenig Licht, oder die Lampen gehen zum falschen Zeitpunkt an oder aus. Zweitens ist das Feedback sehr direkt, ob eine Lampe leuchtet oder nicht merkt man sehr viel schneller, als ob z.B. die Heizung jetzt wärmer eingestellt ist.
In meinem Fall habe ich mich dazu entschieden, die Deckenleuchten im Flur durch «smarte» Versionen zu ersetzen. Diese werden mit Bewegungsmeldern und Lichtsensoren kombiniert, so dass das Licht im Flur bei Bewegung automatisch angeht. Beschränkt wird dieser Automatismus durch die Hintergrundhelligkeit, so dass die Leuchten am Tag bei Sonnenschein trotz Bewegung dunkel bleiben
Montage
Die Installation der Leuchten ist dabei schnell erledigt, bei mir habe ich die Glühbirnen durch Philipps Hue Deckenleuchten ersetzt. Wie bei jeder Arbeit am Stromnetz sollten dabei die Sicherheitsregeln (Wikipedia: Fünf Sicherheitsregeln) beachtet werden! Noch schneller ist die Installation der Sensoren. Die bei Alibaba bestellten Sonoff-Zigbee Bewegungssensoren und der Helligkeitssensor sind batteriebetrieben und können an die Decke geklebt bzw. an einem geeigneten Ort platziert werden.
Einrichtung
Wenn der Zigbee-Adapter korrekt eingerichtet ist und Zigbee2MQTT so konfiguriert ist, dass es neue Geräte akzeptiert, werden Geräte im Normalfall schnell und unkompliziert ins Zigbee-Netzwerk integriert. Voraussetzung ist, dass das Gerät sich im Paarungs-Modus befindet, was bei den meisten Sensoren durch das Betätigen des Reset-Schalters erreicht werden kann. Bei den Philipps-Leuchten kann der Modus durch das gleichzeitige Drücken von zwei Knöpfen auf der Fernbedienung gestartet werden, eine Beschreibung findet man in der Benutzeranleitung der Lampen. Bei Problemen (und idealerweise auch schon vor dem Bestellen) hilft ein Blick in die Liste der unterstützen Geräte (https://www.zigbee2mqtt.io/supported-devices/).
Dass ein neues Gerät erfolgreich ins Netzwerk aufgenommen wurde, ist in der Zigbee2MQTT Konfigurationsdatei erkennbar. Nachdem alle gewünschten Geräte im Netzwerk registriert wurden, sollte das Hinzufügen von neuen Geräten aus Sicherheitsgründen wieder deaktiviert werden. Nicht dass sich plötzlich Geräte aus dem Nachbarshaus im eigenen Zigbee-Netz tummeln.
Automation
Die automatische Steuerung von Geräten abhängig von Inputs, hier das Einschalten von Leuchten bei Bewegung, wird in HomeAssistant «automation» genannt. Das sind im Prinzip nichts anderes als «If this, then that» Logiken, die auch als Flussdiagramm dargestellt werden können. Eine gute Einführung findet sich auf der Website von HomeAssistant: https://www.home-assistant.io/docs/automation/basics/
Das von mir gewünschte Verhalten sieht dabei so aus:
Eine Automation besteht dabei immer aus einem Auslöser, dem Trigger, und einer Aktion. Optional können noch «Conditions» genannte Bedingungen dazwischengeschaltet werden, wie zum Beispiel mein Helligkeitssensor. Konfiguriert werden die Automationen mittels YAML-Dateien, der oben dargestellte Ablauf lässt sich dann so schreiben:
automation lights_hallway: - alias: "Bewegungsmelder Licht an" trigger: - platform: state entity_id: group.gang_motion from: "off" to: "on" condition: - condition: numeric_state entity_id: sensor.lichtsensor_gang_illuminance_lux below: 1 action: - service: light.turn_on target: entity_id: light.lichter_gang data: transition: 2 brightness: 255 - alias: "Bewegungsmelder Licht aus" trigger: - platform: state entity_id: group.gang_motion from: "on" to: "off" action: - service: light.turn_off target: entity_id: light.lichter_gang data: transition: 2
Bei der Erstellung von solchen Automationen kann im Prinzip der Kreativität freien Lauf gelassen werden. Auch sehr komplexe Abläufe können formuliert und in HomeAssistant eingepflegt werden. So ist der oben beschriebene Ablauf zwar sehr einfach, lässt beim Einsatz aber noch Wünsche offen: Soll das Licht unabhängig von der Tageszeit immer mit der gleichen Helligkeit angehen? Wie vermeide ich eine Beeinflussung des Helligkeitssensors durch die Leuchte selber? Was passiert, wenn ein Lichtschalter betätigt wird? Vor allem die Beantwortung der letzten Frage zieht erstaunlich viel Komplexität und die Installation von weiterer smarten Hardware (Stichwort: smart switch) nach sich.
Fazit
Ich verwende den in diesem Artikel beschriebenen Aufbau als Grundlage für mein inzwischen um einige Komponenten erweitertes SmartHome. Die verwendeten Technologien und Komponenten sind wunderbar geeignet für einen Einstieg in die SmartHome-Welt.
Der Ansatz “Eigenbau” ist eine gute Methode, sich selber weiterzubilden und herauszufordern. Eine gewisse Lernbereitschaft und Frust-Resistenz muss aber vorhanden sein: So habe ich zum Beispiel den Hinweis übersehen, dass der Zigbee-USB-Stick von Vorteil nicht direkt in den Raspberry Pi eingesteckt wird, sondern mit einem Verlängerungskabel in sichere Entfernung zur WLan-Antenne gebracht werden sollte. Die resultierende schlechte Verbindung der Zigbee-Komponenten war eine gute Lektion in Sachen Funk-Interferenz, die ich ganz sicher nie mehr vergessen werde.
Für Personen, die eine schnelle und immer funktionierende Lösung bevorzugen, ist ein kommerzielles System sicher die bessere Lösung. Allen anderen Interessenten an einem SmartHome an kann ich nur nahelegen: Einfach mal versuchen, so schwierig ist der Einstig nicht!
Schöne Zusammenstellung über Zigbee2Mqtt. Ich verwende das zusammen mit Home Assistant schon viele Jahre. Mein Setup inkl. Empfehlung für Zigbee Sensoren ist hier zusammengefasst: https://technikauswahl.de/2024/01/zigbee2mqtt-per-home-assistant-addon-installieren/