====== ZIGBEE Sensor ======
===== Motivation =====
In der Heimautomatisierung ist ZIGBEE eine Alternative zur WiFi-basierten Kommunikation und bereits gut in [[https://www.home-assistant.io|Home Assistant]] integriert. Auch dank der niedrigen Leistungsaufnahme und der Mesh-Fähigkeiten findet man es in kommerziellen Produkten wie TRADFRI von IKEA oder HUE von Philips.
In der DIY-Welt ist es noch nicht so weit verbreitet wie WiFi (z. B. ESP8266- oder ESP32-Module). Aber ich konnte eine recht einfache und flexible Lösung finden und nutzen. Hier die Beschreibung...
Übrigens wurde die Idee zu diesem Projekt durch [[https://modkam.ru/2021/04/29/schetchik-impulsov-zigbee/|ZIGBEE-Impulszähler]] und [[https://github.com/dontsovcmc/waterius|WATERIUS]] angeregt.
===== Planung =====
Es gibt 3 Arten von ZigBee-Geräten:
- **ZigBee-Koordinator:** Er kommuniziert mit Routern. Dieses Gerät wird zum Verbinden der Geräte verwendet.
- **ZigBee-Router:** Er wird verwendet, um Daten zwischen Geräten weiterzuleiten.
- **ZigBee-Endgerät:** Das Gerät, das gesteuert werden soll.
Um ZIGBEE einzurichten, benötigt man mindestens ein **ZigBee-Koordinator**-Gerät. In meinem Fall verwende ich [[https://www.home-assistant.io/yellow|YELLOW]] von Home Assistant, bei dem ein ZIGBEE-Modul (Silicon Labs MGM210P Mighty Gecko) bereits verbaut ist. Ebenfalls gebräuchlich ist [[https://www.zigbee2mqtt.io|Zigbee2MQTT]] mit einem unterstützten ZIGBEE-Adapter der eigenen Wahl. Diesen Ansatz verwende ich nur zu Debug-Zwecken.
==== Module ====
Um ein DIY-Zigbee-Gerät (Endgerät oder Router) zu bauen, benötigen wir ein programmierbares Zigbee-Modul. Es gibt mehrere Module auf dem Markt, ich verwende jedoch [[https://wmsc.lcsc.com/wmsc/upload/file/pdf/v2/lcsc/2404011708_Chengdu-Ebyte-Elec-Tech-E18-MS1-PCB_C97344.pdf|E18-MS1-PCB]] von Chengdu Ebyte Elec Tech.
Es basiert auf dem CC2530 von Texas Instruments, etwas veraltet, aber günstig und leicht erhältlich.
{{ :media:tech:zigbeesensor:e18-ms1-pcb.png?direct&200 |E18-MS1-PCB}}
==== Macken & Co. ====
Für DIY-Geräte muss man der Koordinator-Software unter Umständen beibringen, wie sie mit den eigenen Zigbee-Daten umgehen soll. In Home Assistant überbrücken [[https://github.com/zigpy/zha-device-handlers|Quirks]] die funktionale Lücke, die entsteht, wenn ein DIY-Gerät von der ZCL-Spezifikation abweicht, indem sie Abweichungen und Ausnahmen durch das Parsen benutzerdefinierter Nachrichten zu und von Zigbee-Geräten behandeln.
Ein ähnlicher Ansatz existiert für Zigbee2MQTT durch Einbetten einer JavaScript-basierten [[https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html|externen Gerätebeschreibung]].
===== Hardware =====
Um eine Reihe von Anwendungen abzudecken, habe ich eine Standard-Platine entworfen, die den Anschluss von Sensoren und/oder Aktoren über GPIO, I²C oder UART ermöglicht. Meistens mit Pegelwandler, um 5V- und 3,3V-Schnittstellen zu ermöglichen.
{{ :media:tech:zigbeesensor:zigbee_sensor_sch.png?direct&400|Schaltplan}}
{{{{:media:tech:zigbeesensor:zigbee_sensor_pcb.png?direct&400 |Platine}}
Die fertige Platine ist mit einer Größe von 44,5 x 24mm sehr kompakt. Oben sieht man die Programmierschnittstelle (J1) und einen Taster (SW1). Die gelbe LED (LED1) dient als Anzeige. Eine 5V-Stromversorgung kann über einen 2-poligen JST-Stecker (J7) oder Micro-USB angeschlossen werden. Ein 3,3V-Regler ist ebenfalls verbaut. Die UART-Schnittstelle hat einen Signalpegel von 5V, der I²C-Bus ist standardmäßig 3,3V. Der Pegel der beiden zusätzlichen GPIOs kann per Jumper zwischen 3,3V und 5V ausgewählt werden. Alle 4-poligen XH-Anschlüsse (J3-J6) stellen einen Stromversorgungspin bereit, sodass ein Sensor direkt angeschlossen werden kann.
{{ :media:tech:zigbeesensor:pcb_pic.jpg?direct&400 | Fertig gelötete Platine}}
===== Software =====
Lange habe ich gezögert, auf ZIGBEE umzusteigen, da die Firmware-Entwicklung eine Herausforderung sein könnte. Es gibt viele öffentliche Schritt-für-Schritt-Anleitungen, aber es scheint keine Out-of-the-Box-Aufgabe zu sein. Ich konnte jedoch einige Projekte finden, die die [[https://ptvo.info|PTVO-Firmware]] nutzen. Das Firmware-Tool ermöglicht es, ein ZIGBEE-Gerät (muss auf einem TI-SOC basieren) mit einfach konfigurierbarer Funktionalität zu erstellen, einschließlich Ein-/Ausgängen, ADC, Impulszähler/-generator, I²C und externen Sensoren.
Nach einigen Tests war ich beeindruckt und überzeugt, wie einfach es ist, ein ZIGBEE-Gerät einzurichten. Dieses Tool erzeugt nicht nur die Binärdatei (.hex), die direkt auf das ZIGBEE-Modul programmiert werden kann, sondern generiert auch die benutzerdefinierten Dateien für den Koordinator der Wahl (z. B. Quirks für Home Assistant). Es muss keine einzige Codezeile programmiert werden.
Ein erstes Anwendungsbeispiel wird [[de:tech:zigbeesensor#erste_anwendung_wasserzaehler|hier]] beschrieben.
===== Programmierung =====
Um die Firmware auf das ZIGBEE-Modul zu programmieren, benötigen wir einen Programmieradapter wie den //SmartRF04EB// von Texas Instruments. Um Geld zu sparen, kann man auch eine der chinesischen Kopien im Online-Shop der Wahl kaufen.
{{ :media:tech:zigbeesensor:rf04eb.png?direct&300 |SmartRF04EB}}
Fünf Pins der DEBUG-Schnittstelle (Stecker J1) müssen einzeln mit dem Programmiergerät verbunden werden.
{{ :media:tech:zigbeesensor:smartrf04eb_connection.png?direct&300 |So wird der Programmer angeschlossen}}
Die Programmiersoftware //SmartRF Flash Programmer// kann von der [[https://www.ti.com/tool/FLASH-PROGRAMMER|TI-Webseite]] heruntergeladen werden (außerhalb der USA ist eine kurze Exportkontrolle erforderlich).
Die Software ist selbsterklärend.
{{ :media:tech:zigbeesensor:sw_rf04eb.png?direct&500 |Programmierung läuft...}}
===== Erste Anwendung: Wasserzähler =====
Wir sind nicht an das öffentliche Wassernetz angeschlossen, sondern nutzen eine eigene Tauchpumpe in Kombination mit einem 2000-Liter-Wassertank. Um den Wasserverbrauch zu messen, benötigen wir einen Wasserzähler. Eine ideale Herausforderung für das neue ZIGBEE-Modul.
{{ :media:tech:zigbeesensor:yf-b10-1-800x800.jpg?direct&200 |YF-B1 Hall-Effekt Durchflusssensor}}
Dieser Sensor sitzt in unserer 1/2"-Wasserleitung und enthält ein Flügelrad, das misst, wie viel Flüssigkeit hindurchgeflossen ist. Ein integrierter magnetischer Hall-Effekt-Sensor gibt bei jeder Umdrehung einen elektrischen Impuls aus. Die Sensorsignale können direkt an J3 angeschlossen werden.
{{ :media:tech:zigbeesensor:img_6497_2.jpeg?direct&300 |Kompletter Sensor im 3D-gedruckten Gehäuse}}
Die Einrichtung der PTVO-Firmware ist sehr einfach. Einfach P21 als Zähler definieren und das Intervall auf 60 Sekunden setzen. Jeder Impuls länger als 1ms an P21 wird gezählt.
{{ :media:tech:zigbeesensor:ptvo_counter.png?direct&600 |PTVO-Einrichtung}}
Nach dem Pairing sendet die PTVO-Firmware den Zählerwert an den Koordinator. In meinem Fall liefert der Sensor 360 Impulse pro Liter. Diese Berechnung sowie der Tagesverbrauch lassen sich leicht in Home Assistant durchführen. Die folgenden Beispiele zeigen die Ergebnisse:
{{:media:tech:zigbeesensor:water_consumption.png?direct&400|Wasserverbrauch in l/min}}
{{:media:tech:zigbeesensor:water_consumption_daily.png?direct&400|Wasserverbrauch pro Tag}}
Dieser Sensor ist nun seit mehr als 2 Monaten ohne Probleme installiert. Vielen Dank an [[https://ptvo.info/zigbee-configurable-firmware-features/|PTVO]] für sein großartiges Firmware-Tool.
===== Downloads =====
* {{ :media:tech:zigbeesensor:zigbeesensor_bom.txt.zip |}} Stückliste (BOM)
* {{ :media:tech:zigbeesensor:zigbeesensor.brd.zip |}} EAGLE-Board-Datei
=====Links=====
* [[https://www.home-assistant.io]] Home Assistant
* [[https://esphome.io]] ESPHome
* [[https://airbnb.com/h/villarollokohsamui]] Hier kannst du deinen Urlaub in unserem Haus in Thailand verbringen...
===== Spenden =====
Wenn dir meine Artikel gefallen, kannst du gerne einen Cappuccino oder Ähnliches spenden...