===== ZigBee2Tasmota CC2530+ESP8266 FHEM Konfiguration ===== **Ebay Artikel:** [[https://www.ebay.de/itm/264755506031|264755506031]]\\ Original englische Doku: [[https://tasmota.github.io/docs/Zigbee/]]\\ \\ **TASMOTA D1-Mini:**\\ Neue Firmware downloaden: [[https://wiki.gorjup.de/lib/exe/fetch.php?media=public:flashtool.zip|flashtool.zip]] \\ Neue Firmware kompilieren: [[https://github.com/arendst/Tasmota/blob/development/BUILDS.md]] \\ Anleitung Online Compiler (GitHub Account erforderlich): [[https://www.youtube.com/watch?v=WashxTcHiDc]] \\ \\ GitHub Compile your Build: [[https://tasmota.github.io/docs/Compile-your-build/]] \\ GitPod (Easy-Compiler): https://tasmota.github.io/docs/Gitpod/ \\ GitHub Login: [[https://github.com/login]] \\ \\ //Enable serial communication with Zigbee CC2530// file: my_user_config.h #define APP_TIMEZONE 99 #undef MY_LANGUAGE #define MY_LANGUAGE de_DE #define USE_ZIGBEE #define USE_ZIGBEE_ZNP Kommando zum Kompilieren: platformio run -e tasmota \\ **ZigBee CC2530:**\\ Neue Firmware downloaden: [[https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default]]\\ \\ {{:public:zigbee2tasmoata_device.jpg?600|}}\\ \\ \\ Anschluß der Pins:\\ ^CC2530^D1-Mini^ |GND|G| |VCC|3v3| |P02|D8| |P03|D7| \\ Die Einbindung in das lokale Netzwerk wird so durchgeführt, wie hier im Wiki an anderer Stelle beschrieben (Nur bis zum finden der IP-Adresse befolgen, dann wieder hierher zurück kehren)\\ [[public:fhem_blitzwolf_shp6|Tasmota ins WLAN einbinden]] \\ \\ Nachdem Tasmota für das lokale WLAN konfiguriert ist und über den Webbrowser erreichbar ist, muss zunächst die richtige Vorlage eingestellt werden:\\ Bitte folgende Vorlage kopieren und unter **Sonstige Konfiguration** aktivieren.\\ {"NAME":"Zigbee","GPIO":[0,0,0,0,0,0,0,0,0,166,0,165,0],"FLAG":0,"BASE":18} {{:public:zigbee2tasmoata_mqtt3.jpg?400|}}\\ \\ Danach startet der Coordinator neu und in der Konsole wird in etwas folgendes angezeigt:\\ 00:00:00 Projekt tasmota ZigBee2Tasmota Version 8.3.1.2(tasmota)-2_7_1 00:00:00 WIF: verbinden mit AP1 Dantooine Channel 6 BSSId XX:XX:XX:XX:XX:XX in Modus 11N als ZigBee2MQTT-0189... 00:00:01 WIF: verbunden 00:00:01 HTP: Web-Server aktiv bei ZigBee2MQTT-0189 mit IP-Adresse 10.4.70.189 14:36:12 MQT: Verbindungsversuch... 14:36:17 MQT: verbunden 14:36:17 MQT: tele/ZigBee2MQTT/LWT = Online (beibehalten) 14:36:17 MQT: cmnd/ZigBee2MQTT/POWER = 14:36:17 MQT: tele/ZigBee2MQTT/INFO1 = {"Module":"Zigbee","Version":"8.3.1.2(tasmota)","FallbackTopic":"cmnd/ZigBee2MQTT_fb/","GroupTopic":"cmnd/tasmotas/"} 14:36:17 MQT: tele/ZigBee2MQTT/INFO2 = {"WebServerMode":"Admin","Hostname":"ZigBee2MQTT-0189","IPAddress":"10.4.70.189"} 14:36:17 MQT: tele/ZigBee2MQTT/INFO3 = {"RestartReason":"Software/System restart"} 14:36:20 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":1,"Message":"CC2530 booted","RestartReason":"Watchdog","MajorRel":2,"MinorRel":6}} 14:36:20 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":50,"MajorRel":2,"MinorRel":6,"MaintRel":3,"Revision":20190608}} 14:36:20 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":3,"Message":"Configured, starting coordinator"}} 14:36:21 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":40,"NewState":9,"Message":"Started as coordinator"}} 14:36:21 MQT: tele/ZigBee2MQTT/STATE = {"Time":"2020-06-06T14:36:21","Uptime":"0T00:00:14","UptimeSec":14,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":26,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Dantooine","BSSId":"E8:DF:70:70:43:85","Channel":6,"RSSI":100,"Signal":-44,"LinkCount":1,"Downtime":"0T00:00:03"}} 14:36:21 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":51,"IEEEAddr":"0x00124B001EFE7D5B","ShortAddr":"0x0000","DeviceType":7,"DeviceState":9,"NumAssocDevices":0}} 14:36:21 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":0,"Message":"Started"}} 14:36:21 ZIG: Zigbee started 14:36:21 ZIG: No zigbee devices data in Flash Hierbei ist in diesem Beispiel **ZigBee2MQTT-0189** der Name im Netzwerk und **10.4.70.189** die IP-Adresse.\\ Die Ausgabe **Zigbee started** zeigt, dass der CC2530 als Coordinator erfolgreich gestartet wurde.\\ Die Ausgabe **No zigbee devices data in Flash** bedeutet, dass noch keine weiteren ZigBee Geräte vorhanden sind.\\ \\ ==== MQTT Konfiguration TASMOTA ==== Damit TASMOATA sich mit dem FHEM-Server verbindet, müssen folgende Einstellung in den **MQTT Einstellungen** vorgenommen werden.\\ {{:public:zigbee2tasmoata_mqtt1.jpg?400|}} \\ \\ ==== Konfiguration in FHEM ==== In FHEM ist dann noch das einmalige Anlegen eines Brokers erforderlich.\\ define myBroker MQTT2_SERVER 1883 global Anschließend sollte sich der Coordinator in FHEM nach kurzer Zeit folgendermaßen melden (autocreate muss aktiviert sein):\\ {{:public:zigbee2tasmoata_mqtt2.jpg?400|}} \\ \\ ==== Pairing Zigbee Devices ==== Standardmäßig und aus Sicherheitsgründen akzeptiert der ZigBee-Coordinator neue Geräte nicht automatisch. Er muss also in den Pairing-Modus versetzt werden:\\ Dazu in der TASMOTA Konsole folgendes eingeben um neue Geräte zu koppeln:\\ ZbPermitJoin 1 \\ Sobald sich Zigbee2Tasmota im Pairing-Modus befindet, muss das zu koppelnde Zigbee-Gerät ebenfalls in den Pairing-Modus versetzt werden.\\ Dies wird normalerweise durch Drücken der Taste am Gerät für 5 Sekunden oder länger erreicht. Der Pairing Modus des Coordinator wird folendermaßen beendet:\\ ZbPermitJoin 0 **Hier ein Beispiel eines Xiaomi Aqara Cube:**\\ 15:34:51 CMD: ZbPermitJoin 1 15:34:51 MQT: stat/ZigBee2MQTT/RESULT = {"ZbPermitJoin":"Done"} 15:34:51 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":21,"Message":"Enable Pairing mode for 60 seconds"}} 15:35:00 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":34,"IEEEAddr":"0x00158D0002794B29","ShortAddr":"0xEB45","ParentNetwork":"0x0000"}} 15:35:08 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":30,"IEEEAddr":"0x00158D0002794B29","ShortAddr":"0xEB45","PowerSource":false,"ReceiveWhenIdle":false,"Security":false}} 15:35:08 MQT: tele/ZigBee2MQTT/SENSOR = {"ZbReceived":{"0xEB45":{"Device":"0xEB45","ModelId":"lumi.sensor_cube.aqgl01","AppVersion":5,"Endpoint":1,"LinkQuality":162}}} 15:35:09 MQT: tele/ZigBee2MQTT/SENSOR = {"ZbReceived":{"0xEB45":{"Device":"0xEB45","Voltage":2.825,"Battery":31,"Xiaomi_97":0,"Xiaomi_98":0,"Xiaomi_99":0,"Xiaomi_9A":4,"Endpoint":1,"LinkQuality":160}}} 15:35:09 MQT: tele/ZigBee2MQTT/RESULT = {"ZbState":{"Status":32,"ActiveEndpoints":["0x01","0x02","0x03"]}} 15:35:11 ZIG: Zigbee Devices Data store in Flash (0x402FF800 - 55 bytes) 15:35:16 MQT: tele/ZigBee2MQTT/RESULT = {"ZbConfirm":{"Endpoint":1,"Status":240,"StatusMessage":""}} Anschließend werden in FHEM im ZigBee2Tasmoate Device folgende Readings automatisch ergänzt:\\ ZbReceived_0xEB45_AppVersion ZbReceived_0xEB45_AqaraCube ZbReceived_0xEB45_AqaraCubeFromSide ZbReceived_0xEB45_AqaraCubeSide ZbReceived_0xEB45_AqaraRotate ZbReceived_0xEB45_Aqara_FF05 ZbReceived_0xEB45_Battery ZbReceived_0xEB45_Device ZbReceived_0xEB45_Endpoint ZbReceived_0xEB45_LinkQuality ZbReceived_0xEB45_ModelId ZbReceived_0xEB45_MultiInValue ZbReceived_0xEB45_Voltage ZbReceived_0xEB45_Xiaomi_97 ZbReceived_0xEB45_Xiaomi_98 ZbReceived_0xEB45_Xiaomi_99 ZbReceived_0xEB45_Xiaomi_9A Den Namen **0xEB45** sollte man sinnvoll umbenennen, z.B. in **Cube1**. Das geht so in der TASMOTA Konsole:\\ SetOption83 1 ZbName 0xEB45,Cube1 Die alten Readings löscht man dann per FHEM Konsole: deletereading MQTT2_ZigBee2MQTT ZbReceived_0xEB45_.* Danach sieht es schon besser aus:\\ {{:public:zigbee2tasmoata_mqtt4.jpg?600|}}\\ \\ **Tabelle der Funktionen des Cube:** ^Reading^Wert^Bedeutung^ |ZbReceived_Cube1_AqaraCube | tap / shake / flip90 / flip180 | klopfen / schütteln / umdrehen 90° / umdrehen 180° | |ZbReceived_Cube1_AqaraRotate | xx.xx / -xx.xx | rotieren rechts/links | \\ Ableitend der o.g. **Readings** können jetzt Funktionen z.B. mittels **DOIF** ausgeführt werden.\\ \\ **Beispiel Licht einschalten:**\\ define Lightstrip_Shake_Cube DOIF ([MQTT2_ZigBee2MQTT:ZbReceived_Cube1_AqaraCube] eq "shake" and [HUEDevice5] eq "off") (set HUEDevice5 on)\ DOELSEIF ([MQTT2_ZigBee2MQTT:ZbReceived_Cube1_AqaraCube] eq "shake" and [HUEDevice5] ne "off") (set HUEDevice5 off) attr Lightstrip_Shake_Cube do always