===== 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