Zigbee2Tasmota-MQTT

Aus FHEMWiki


Clock - Under Construction.svg An dieser Seite wird momentan noch gearbeitet.


Einführung

zigbee2tasmota ist ein Gateway um Zigbee-Geräte in ein Heimnetzwerk zu bringen, ähnlich dem zigbee2mqtt Gateway. Vorteil von zigbee2tasmota ist die freie Platzierung im WLAN des Betreibers, da es anders als zigbee2Mqtt keinen Raspberry Pi oder ähnliches braucht. Das Gateway muss lediglich mit Strom versorgt werden. Außerdem sollte erwähnt werden, das sich das Projekt noch in einem frühen Stadium befindet und die Anzahl der unterstützten Geräte geringer ist als bei z.Bsp. zigbee2mqtt, sowie das der Befehlssyntax noch ständig erweitert bzw. leicht verändert wird. Es ist sicher auch eine gute Idee sich bei neuen Versionen auf der Tasmota Seite https://tasmota.github.io/docs/ das Changelog anzusehen. Ein guter Anlaufpunkt um herauszufinden ob und von welcher Plattform (nicht nur ZigBee) ein Gerät unterstützt wird sind die Seiten: https://blakadder.com/. Hier kann man entweder generell nach Geräten suchen, welche von Tasmota unterstützt werden oder nach ZigBee Geräten und welches Gateway sie unterstützt.

Installation

Mit der Sonoff Zigbee Bridge ist nur durch umflashen auf Tasmota eine cloudfreie Zigbee Anbindung an FHEM mit einem einzigen fertigen Gerät machbar. (Juli 2021)

Der Aufbau und die Inbetriebnahme des zigbee2tasmota Gateway ist der Tasmota Dokumentation zu entnehmen, eine Anleitung zum Hardwareaufbau und flashen der Coordinator-firmware ist hier zu finden. Bei der Inbetriebnahme, speziell im MQTT Bereich, wird man viele Parallelen zur Inbetriebnahme von klassischen Tasmota geflashten Geräten finden. So gilt das dort geschriebene bezüglich Topic Parameter auch hier. Als MQTT Broker sollte vorzugsweise MQTT2_SERVER zum Einsatz kommen, welcher die Inbetriebnahme neuer Geräte in FHEM stark vereinfacht. Aufgrund der sehr verschachtelten JSON-Strukturen, die das Gateway verwendet, ist in jedem Fall dringend anzuraten, MQTT2_DEVICE als Client-Modul zu verwenden.

Define eines MQTT2-Devices als "Bridge"

Nach Eingabe der MQTT Daten in die entsprechende Maske am zigbee2mqtt-Gateway wird das Gateway automatisch neu gestartet und wenn alles korrekt ist, wird vom MQTT2_Server ein neues MQTT2_DEVICE-Device im Raum MQTT2_DEVICE angelegt. Ähnlich wie bei zigbee2mqtt wird auf dieses Device das tasmota_zigbee2tasmota_bridge Template angewendet

set [Zigbee2tasmota] attrTemplate  tasmota_zigbee2tasmota_bridge

Dadurch werden mittels SetOption einige Einstellungen im Gateway gesetzt und die notwendigen Readings etc. erstellt. Um die neuen Einstellungen zu übernehmen erfolgt automatisch ein Neustart des Gateway. Außerdem wird die Liste der in FHEM zur Verfügung stehenden attrTemplates erweitert.Ob der Neustart erfolgreich durchgeführt wurde, lässt sich leicht anhand des Readings LWT ( dieses sollte auf Online stehen) und des dazugehörigen Timestamps überprüfen. Ist man nicht sicher, ob ein Neustart stattgefunden hat, kann der auch nochmal durch einen Aufruf des Webinterfaces und wählen des Buttons Restart/Neustart ausgelöst werden

Anlegen / Vereinzeln der Geräte

Neue Geräte lassen sich einfach über das Webinterface des Gateway anmelden. Dazu in einem Browserfenster das Hauptmenü und in einem 2.Fenster die Konsole aufrufen.Im Hauptmenü den Button Zigbee Permit Join wählen. Anschließend im Konsolenfenster kontrollieren ob neue Geräte angelernt werden können, dort sollte nun so etwas in der Art stehen, wie:

11:43:10.647 MQT: stat/tasmota_3809AB/RESULT = {"ZbPermitJoin":"Done"}
11:43:10.756 MQT: tele/tasmota_3809AB/RESULT = {"ZbState":{"Status":21,"Message":"Enable Pairing mode for 60 seconds"}

Jetzt das neue Gerät nach Herstellerangaben in den Pairingmodus bringen und dabei das Konsolenfenster beobachten, dort sollte nach erfolgreichem Anlernen in den letzten Zeilen so etwas in der Art stehen, wie:

12:49:44.237 MQT: tele/tasmota_3809AB/RESULT = {"ZbBind":{"Device":"0x1DD1","Status":0,"StatusMessage":"SUCCESS"}}

Im Hauptmenü Fenster sollte jetzt oberhalb der Befehlsschaltflächen eine neue Zeile erscheinen, zum Beispiel:

Device 0x1DD1

Jetzt das Webinterface von FHEM aufrufen, dort sollte jetzt im Raum MQTT2_DEVICE ein neues Device entstanden sein.Auf dieses Device dann wieder das passende attrTemplate auswählen und ausführen. z.Bsp.:

set [MQTT2_z2t_WXYZ] attrTemplate tasmota_zigbee2tasmota_light_dimmer

Grundlegende Informationen zu attrTemplate im MQTT2-Kontext sind bei MQTT2_DEVICE zu finden, die Namenskonvention für verschiedene Leuchtmitteltypen orientiert sich an den Gepflogenheiten bei zigbee2mqtt. Im Idealfall war das alles und das neu angelegte Gerät sollte über FHEM steuerbar sein bzw. Werte empfangen.

Bei batteriebetriebenen Geräten (Fernbedienungen, Fenster/Türkontakte usw.) kann es sinnvoll sein, während des Anlernvorganges den sogenannten Schlafmodus des Gerätes zu verhindern z.Bsp.: durch drücken einer Taste oder auslösen einer Meldung.

Sollte per autocreate kein Gerät automatisch angelegt werden bitte als erstes überprüfen ob autocreate in FHEM auf active steht. Ansonsten bitte die hier genannten Punkte überprüfen. Da jetzt jedoch kein neues Gerät in die Datenbank des zigbee2tasmota mehr eingetragen wird bzw. es schon eingetragen ist, muss das Anlegen eines Devices in FHEM entweder von Hand angestoßen werden (bei Geräten die nicht zyklisch senden) oder es muss abgewartet werden bis ein Sensor oder ein ähnliches Gerät, (welches zyklisch Werte sendet) wieder Werte sendet.

Hierbei kann es hilfreich sein in FHEM den Event Monitor zu beobachten. Das Anlegen eines Devices von Hand anzustoßen funktioniert bei Schaltern meistens durch Drücken einer beliebigen Taste. Ansonsten muss das Webinterface des zibee2tasmota Gateways durch z.b. Eingabe der IP-Adresse aufgerufen werden. Im Hauptmenü dann Konsole auswählen. In die Zeile Befehl eingeben folgenden Befehl eingeben:

ZbInfo

Jetzt werden im Terminalfenster alle bereits im Gateway angelegten Devices angezeigt:

12:04:32.180 MQT: tele/tasmota_3809AB/6B3E/SENSOR = {"ZbInfo":{"0x6B3E":{"Device":"0x6B3E","IEEEAddr":"0x680AE2FFFE7F1E1E","ModelId":"TRADFRI bulb GU10 WW 400lm","Manufacturer":"IKEA of Sweden","Endpoints":[1],"Config":["O01","L01"],"Power":0,"Dimmer":155,"Reachable":true,"LastSeen":860,"LastSeenEpoch":1609930212,"LinkQuality":144}}}
  12:04:32.186 MQT: stat/tasmota_3809AB/RESULT = {"ZbInfo":"Done"}


Hierbei ist die Zahlen/Buchstaben Kombi hinter dem Wort Device von Interesse. Im obigen Beispiel die 0x6B3E als sogenannte Short adresse der IKEA Tradfri bulb. Dieses Device schaltet man mithilfe des Befehls

ZbSend { "device":"0x1234", "send":{"Power":"ON"} }

bzw.

ZbSend { "device":"0x1234", "send":{"Power":"OFF"} }

einmal ein und wieder aus. Wobei 0x1234 der jeweiligen Short Adresse des Zigbee Gerätes entsprechen muss. Jetzt sollte in FHEM per autocreate ein neues Device im Raum MQTT2-Devices angelegt worden sein. Es ist auch möglich aus FHEM heraus im Bridge-Device die nötigen Befehle ZbInfo und ZbSend einzugeben. Da hier aber keine Rückmeldung, insbesondere über die Schaltbefehle zu sehen ist, sollte die Zigbee2Tasmota Konsole zu Kontrollzwecken trotzdem geöffnet sein.

Groups and Binding

etwas frei übersetzt: Gruppen und (Direkt-) Verbindungen.

Gruppen

Zigbee2tasmota unterstützt das Zigbee Feature der sogenannten Gruppen d.h. man kann mehrere (steuerbare-) Geräte zu einer Gruppe zusammenfassen und diese Geräte über einen neuen (Gruppen-) Namen ansprechen und steuern. Gruppen werden in Zigbee2tasmota über den Befehl ZbSend angelegt und Lampen hinzugefügt. z.Bsp.:

ZbSend {"device":"0xF6F8","Send":{"AddGroup":100}}

fügt dieser Befehl das Gerät 0xF6F8 zur Gruppe mit dem Namen 100 hinzu. Sollte die Gruppe noch nicht existieren wird sie angelegt. Der Befehl:

ZbSend {"device":"0xF5A6","Send":{"AddGroup":100}}

fügt das Gerät 0xF5A6 als 2.Gerät zur bestehenden Gruppe 100 hinzu. Es ist nicht möglich leere Gruppen anzulegen In den Readings des Gerätes gibt es, wenn das Gerät erfolgreich zu einer Gruppe hinzugefügt wurde 3 neue Readings: AddGroup, AddGroupStatus, AddGroupStatusMsg hier im Auszug aus einer RAW-Defintion:

setstate MQTT2_z2t_F5A6 off
setstate MQTT2_z2t_F5A6 2020-08-08 15:04:14 0004_00 006400
setstate MQTT2_z2t_F5A6 2020-08-10 16:05:45 0004_02 0602F0006400
setstate MQTT2_z2t_F5A6 2020-08-08 15:04:14 AddGroup 100
setstate MQTT2_z2t_F5A6 2020-08-08 15:04:14 AddGroupStatus 0
setstate MQTT2_z2t_F5A6 2020-08-08 15:04:14 AddGroupStatusMsg SUCCESS

Die Gruppe kann unter ihrem Gruppennamen angesprochen und geschaltet werden, also z.Bsp.:

ZbSend { "group":"100", "send":{"Power":"ON"} }

An einer Implementierung der Gruppenfunktion von Zigbee2Tasmota in FHEM wird momentan gearbeitet.

Binding

Als Binding in de Zigbee2Tasmota Welt wird die direkte Verbindung (ohne über eine Zentrale, wie FHEM zu laufen) eines Schalters (Fernbedienung) an ein zu schaltendes Gerät (Lampe) bzw. an eine Gruppe (s.o. Groups) bezeichnet. Mit Hilfe des Befehles ZbBind wird ein Schaltgerät (Fernbedienung) direkt mit einem schaltbaren Gerät verbunden um für dieses Gerät rudimäre Schalthandlungen zu ermöglichen. Meistens gehen an/aus und dimmen.

So bindet beispielsweise der Befehl

ZbBind {"Device":"0xA5A6","ToGroup":100,"Endpoint":1,"Cluster":6}

die Fernbedienung mit der Shortadress 0xA5A6 an die oben schon erwähnte Gruppe 100.Der genaue Syntax und die Bedeutung der einzelnen Befehlsteile ist bitte der Zigbee2Tasmota Dokumentation (https://tasmota.github.io/docs/Zigbee/) zuentnehmen. Bindings haben den Vorteil der direkten Kommunikation zu steuerndem Gerät und steuerndem Gerät, so dass die Zentrale nicht zwingend benötigt wird und sogar aus sein kann. Nachteilig ist, dass die Zentrale nicht ohne weiteres von der Schalthandlung erfährt.

Bindings werden in den Readings des Bridge-devices angezeigt. Sie sind ansonsten für FHEM nicht sichtbar und auch nicht direkt beeinflussbar.

Beispieldefinitionen verschiedener Geräte

Alle Devices wurden nach dem Zurücksetzen auf Werkseinstellung (siehe jeweilige Bedienungsanleitung) wie oben beschrieben über die Zigbee2tasmota Konsole mit dem Befehl ZbSend { "device":"0x1234", "send":{"Power":"ON"} } geschaltet und auch erfolgreich automatisch in FHEM im Raum MQTT2_DEVICE erstellt.

Müller Licht: tint smart switch

Gerätebeschreibung beim blakadder.com. Das dann angewendete attrTemplate trägt die Bezeichnung tasmota_zigbee2tasmota_single_switch. Daraus ergibt sich folgende Definition:

defmod MQTT2_z2t_0187 MQTT2_DEVICE z2t_0187
attr MQTT2_z2t_0187 IODev MQTT2server
attr MQTT2_z2t_0187 icon light_light
attr MQTT2_z2t_0187 jsonMap Power:state Device:0
attr MQTT2_z2t_0187 readingList tele/zb2tasmota/0187/SENSOR:.* { $EVENT =~ s/"Power":1/"Power":"on"/g;; $EVENT =~ s/"Power":0/"Power":"off"/g;; $EVENT =~ m,^.*(..Device.+)..$, ?  json2nameValue($1,'',$JSONMAP) : $EVENT =~ m,0x0187.:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef  }
attr MQTT2_z2t_0187 room MQTT2_DEVICE
attr MQTT2_z2t_0187 setExtensionsEvent 1
attr MQTT2_z2t_0187 setList on cmnd/zb2tasmota/ZbSend {"device":"0x0187","send":{"Power":"On"}}\
  off cmnd/zb2tasmota/ZbSend {"device":"0x0187","send":{"Power":"Off"}}
attr MQTT2_z2t_0187 setStateList on off

Bitte Beachten: Das Standard Icon der dimmbaren Lampe wurde durch ein einfaches Lampen Icon ersetzt. Genauso können auch andere Geräteattribute nachträglich verändert werden. Bitte Vorsicht walten lassen, durch falsches Setzen von Attributen kann ein Device unbrauchbar werden.

Müller Licht: tint GU10 Spot warm- bis tageslichtweiß 350lm

Gerätebeschreibung beim blakadder.com. Das dann angewendete template trägt die Bezeichnung tasmota_zigbee2tasmota_light_cct. Daraus ergibt sich folgende Definition:

defmod MQTT2_z2t_6301 MQTT2_DEVICE z2t_6301
attr MQTT2_z2t_6301 IODev MQTTBroker
attr MQTT2_z2t_6301 alias Deckenlampe1
attr MQTT2_z2t_6301 devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_z2t_6301 group Zigbee2Tasmotagroup100
attr MQTT2_z2t_6301 icon light_control
attr MQTT2_z2t_6301 jsonMap Dimmer:brightness Power:state Device:0 Hue:hue Sat:saturation CT:ct
attr MQTT2_z2t_6301 model tasmota_zigbee2tasmota_light_cct
attr MQTT2_z2t_6301 readingList tele/zb2tasmota/6301/SENSOR:.* { $EVENT =~ s/"Power":1/"Power":"on"/g;; $EVENT =~ s/"Power":0/"Power":"off"/g;; $EVENT =~ m,^.*(..Device.+)..$, ?  json2nameValue($1,'',$JSONMAP) : $EVENT =~ m,0x6301.:(.*).., ?  json2nameValue($1,'',$JSONMAP) : undef  }
attr MQTT2_z2t_6301 room MQTT2_DEVICE
attr MQTT2_z2t_6301 setExtensionsEvent 1
attr MQTT2_z2t_6301 setList on cmnd/zb2tasmota/ZbSend {"device":"0x6301","send":{"Power":"On"}}\
  off cmnd/zb2tasmota/ZbSend {"device":"0x6301","send":{"Power":"Off"}}\
  brightness:colorpicker,BRI,0,5,254 cmnd/zb2tasmota/ZbSend { "device":"0x6301", "send":{"Dimmer":$EVTPART1} }\
  dimup:noArg cmnd/zb2tasmota/ZbSend { "device":"0x6301", "send":{"DimmerUp":""} }\
  dimdown:noArg cmnd/zb2tasmota/ZbSend { "device":"0x6301", "send":{"DimmerDown":""} }\
  ct:colorpicker,CT,153,5,370 cmnd/zb2tasmota/ZbSend { "device":"0x6301", "send":{"CT":$EVTPART1} }
attr MQTT2_z2t_6301 setStateList on off
attr MQTT2_z2t_6301 webCmd on:off:brightness:ct

Hier wurde das Attribut webCmd um die Befehle brightness und ct erweitert. 3 dieser Lampen wurden mittels des Befehls

 ZbSend {"device":"0x6301",,"Send":{"AddGroup":100}}

zu einer Gruppe (group:100) zusammengefasst und haben deshalb die Readings: AddGroup, AddGroupStatus, AddGroupStatusMessage und das Attribut group.

Verschiedenes

tbd


Links

Hinweise