MQTT

Aus FHEMWiki
Version vom 22. Juni 2019, 10:59 Uhr von Beta-User (Diskussion | Beiträge) (Kleinere Klarstellungen)

MQTT ist ein Protokoll ("Message Queue Telemetry Transport"), mit dem Daten und Befehle zwischen verschiedenen Geräten ausgetauscht werden. Die Kommunikation erfolgt dabei über einen Serverdienst, den so genannten MQTT-Broker.

MQTT wurde entwickelt, um möglichst effizient, sicher und mit wenig Datenlast zu kommunizieren.

Eine sehr kurze Einführung in MQTT

...ist auf dieser Seite hier zu finden.

FHEM und MQTT

X mark.svgBitte allgemein beachten: Bei Verwendung des MQTT-Protokolls zum Datenaustausch ist unbedingt darauf zu achten, dass die Topic-Struktur in Sende- und Empfangsrichtung unterschiedlich ausgestaltet ist. Andernfalls kommt es ggf. zu unbeabsichtigten Schleifen!

Für die Nutzung von MQTT muss ein zentraler MQTT-Server (Broker in alter Nomenklatur) verfügbar sein. Dies kann ein separater Serverdienst wie mosquitto sein, FHEM kann jedoch auch mit Hilfe des Moduls MQTT2_SERVER selbst die Funktion des Brokers übernehmen. Dieser bietet zwar weniger Optionen als ein vollwertiger MQTT-Server, ist jedoch für kleinere Installationen völlig ausreichend. Ein MQTT-Server kann eine Vielzahl von FHEM-Installationen bedienen[1].

MQTT2

Seit November 2018 ist es mit MQTT2_CLIENT[2] möglich, MQTT2 DEVICE-Geräte einzurichten, ohne dass MQTT2_SERVER auf derselben Installation vorhanden sein muss. MQTT2_CLIENT kann auch mit einem klassischen Broker wie mosquitto betrieben werden.

Kurzübersicht:

a) MQTT-Gerät, z.B. ein Shelly oder Sonoff <=> MQTT2_SERVER <=> MQTT2_DEVICE

b) MQTT-Gerät, z.B. ein Shelly oder Sonoff <=> (externer) MQTT-Server, z.B. mosquitto [3] <=> MQTT2_CLIENT <=> MQTT2_DEVICE

Weitere Hinweise zur Verwendung der MQTT2-Module sind in den Praxisbeispielen zu finden.

MQTT2_SERVER und MQTT2_CLIENT ermöglichen - im Unterschied zur klassischen Einbindung - passwortgeschütze Datenübertragungen zwischen den einzelnen Komponenten.

Klassische Einbindung

Wird in der MQTT Einführung beschrieben, Kurzübersicht: MQTT-Gerät, z.B. ein Sonoff <=> (externer) MQTT-Server, z.B. mosquitto [4] <=> MQTT (das IO-Modul 00_MQTT.pm)<=> MQTT_DEVICE

MQTT_GENERIC_BRIDGE

Das Modul MQTT_GENERIC_BRIDGE kann seit November 2018 mit allen drei IO-Modul-Varianten zusammen eingesetzt werden, also sowohl mit MQTT2_SERVER bzw. MQTT2_CLIENT oder MQTT (00_MQTT.pm).

Dabei sollte man jedoch beachten, dass zur Verwendung mit den MQTT2-IO's unbedingt die autocreate-Funktion des betreffenden IOs ausgeschaltet wird und dies auch bleibt[5]! Weiter wird das Perl-Modul libmodule-pluggable-perl benötigt[6], damit im Hintergrund auch das Modul MQTT geladen werden kann.

Anwendungsfälle und -beispiele für das Modul sind diesem Thread zu entnehmen.

Performancefragen...

...oder was sollte man als Lösung wählen, wenn man in die MQTT-Welt einsteigt[7]? Grundsätzlich sollte man davon ausgehen, dass innerhalb von FHEM die Verarbeitung derselben Daten näherungsweise denselben Aufwand bedeuten, unabhängig davon, welche der Implementierungen (MQTT2_CLIENT, MQTT oder MQTT2_SERVER) man konkret wählt. Ein externer Broker hat daher vor allem dann Vorteile, wenn die MQTT Daten überwiegend für was anderes (nicht FHEM) verwendet werden, oder MQTT zweckentfremdet wird (wie z.Bsp. für Musikübertragung). Nutzt man das MQTT-Protokoll dagegen vorwiegend innerhalb von FHEM, ist eher der Einsatz von MQTT2_SERVER in Betracht zu ziehen. Dieser soll Anfängern die Anbindung von MQTT Geraeten in FHEM einfacher machen. Wer später merkt, dass er doch einen externen Broker benötigt, kann dann immer noch auf MQTT2_CLIENT in Verbindung mit einem anderen Broker wechseln. Dagegen ist der Weg von MQTT_DEVICE zu MQTT2_DEVICE mit erheblich mehr Aufwand verbunden.

Links

Hinweise

  1. Dies gilt sowohl für einen klassichen Broker wie für einen MQTT2_SERVER.
  2. commandref
  3. oder auch ein MQTT2_SERVER in einer anderen FHEM-Installation
  4. oder auch ein MQTT2_SERVER in einer anderen FHEM-Installation
  5. siehe dazu diesen Thread zu den technischen Hintergründen
  6. Dieses kann über apt-get install libmodule-pluggable-perl installiert werden
  7. vgl. hierzu diesen Beitrag von Rudolf König