MQTT2-Module - Praxisbeispiele

Aus FHEMWiki
Version vom 1. Oktober 2018, 13:29 Uhr von Beta-User (Diskussion | Beiträge) (Erste Version)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Einführung: MQTT2 vs. MQTT

Zur Einbindung von Geräten, welche mit einem MQTT-Server (früher: Broker) kommunizieren können, stehen unter FHEM zwei Optionen zur Verfügung: Man kann entweder einen dedizierten Server (wie z.B. mosquitto) nutzen, der dann über das Modul MQTT eingebunden wird und zu dem die Module MQTT_DEVICE und MQTT_BRIDGE gehören (bzw. noch MQTT_GENERIC_BRIDGE), oder man kann mit Hilfe des Moduls MQTT2_SERVER FHEM selbst zum MQTT-Server machen.

Info blue.png
Man kann auch beide Ansätze gleichzeitig nutzen, sollte dann aber darauf achten, dass man an dem MQTT-Device eine client-ID vergibt.


Gegenstand dieses Artikels sind Beispiele, wie MQTT-Client-Geräte mit Hilfe der MQTT2-Implementierung ohne einen weiteren Server wie mosquitto genutzt werden können.

Für alle Beispiele wird vorausgesetzt, dass ein MQTT2_SERVER-Device als Server definiert wurde. Es wird in einer Installation nur ein eiziger MQTT2_SERVER benötigt.

zigbee2mqtt

zigbee2mqtt ist ein open-source Projekt, mit dem zigbee-Geräte über MQTT direkt angesprochen werden können, ohne dass hierfür eine Bridge eines Herstellers benötigt wird.

Installation von zigbee2mqtt

Die Installation ist auf der Homepage des Projekts beschrieben. Ergänzend muß in der configuration.yaml eine "client_id" unter "mqtt" (z.B. zigbee_pi) vergeben werden.

Define eines MQTT2-Devices als "Bridge"

Dann kann eine Art "Grund-Device" angelegt werden, über das die gesamte Kommunikation zu allen angeschlossenen Zigbee-Geräten dann läuft:

defmod MQTT2_zigbee_pi MQTT2_DEVICE zigbee_pi
attr MQTT2_zigbee_pi IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_pi setList permit_join {"zigbee2mqtt/bridge/config/permit_join $EVTPART1"}\
remove {"zigbee2mqtt/bridge/config/remove $EVTPART1"}\
log_level {"zigbee2mqtt/bridge/config/log_level $EVTPART1"}\
rename {"zigbee2mqtt/bridge/config/rename  { \"old\":\"$EVTPART1\",\"new\":\"$EVTPART2\"}"}\
network_map {"zigbee2mqtt/bridge/networkmap  $EVTPART1"}\
devicelist {"zigbee2mqtt/bridge/config/devices"}
attr MQTT2_zigbee_pi widgetOverride permit_join:true,false rename:textField remove:textField log_level:debug,info,warn,error network_map:raw,graphviz devicelist:noArg

Ist dieses angelegt, kann zigbee2mqtt mit set MQTT2_zigbee_pi permit_join true in den Anlernmodus versetzt werden; anzulerndende Geräte müssen dann nach Bedienungsanleitung in den Anlernmodus gebracht werden.

Nach einem Browser-refresh sollte dann das neue Device zusätzliche Readings in MQTT2_zigbee_pi erzeugt haben. Wer möchte, kann die Devices dann umbenennen; da diese in FHEM aber nachfolgend sowieso eigene Namen erhalten, kann dieses auch unterbleiben.

Vereinzeln der eigentlichen Geräte

Anschließend kann man - am einfachsten über die Anpassung der RAW-Definition des "Bridge"-Devices neue MQTT2_DEVICE-Geräte ableiten, die dann jeweils nur den Teil der readingList abbilden, der zu einem einzelnen pysischen Gerät gehört. Beispiele:

IKEA-Tradfri-Birne

defmod IKEA_Bulb2 MQTT2_DEVICE attr IKEA_Bulb2 IODev MQTT2_FHEM_Server attr IKEA_Bulb2 eventMap on:ON:off off:OFF:on attr IKEA_Bulb2 icon light_control attr IKEA_Bulb2 readingList zigbee_pi:zigbee2mqtt/Kueche_Durchgang_A2:.* { json2nameValue($EVENT) } attr IKEA_Bulb2 setList on {'zigbee2mqtt/Kueche_Durchgang_A2/set {"state":"ON"}'}\ off {'zigbee2mqtt/Kueche_Durchgang_A2/set {"state":"OFF"}'}\ brightness {"zigbee2mqtt/Kueche_Durchgang_A2/set {\"$EVTPART0\":\"$EVTPART1\"}"}\

attr IKEA_Bulb2 webCmd brightness attr IKEA_Bulb2 widgetOverride brightness:colorpicker,BRI,0,15,255

Temp/Hum. Sensor

tbd


Tasmota

tbd

Milight-Bridge

tbd

Links

Hinweise