MQTT2 CLIENT: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
(Auf aktuelle General-Bridge-Fassung angepaßt)
Zeile 9: Zeile 9:


Das Modul {{Link2CmdRef|Anker=MQTT2_CLIENT|Lang=en|Label=MQTT2_CLIENT}} fungiert als [[Interface|Verbindung]] zwischen FHEM und einem externen MQTT Server (z.B. ''mosquitto'') und repräsentiert ein  '''''MQTT Gateway'''''. Die durch die Module [[MQTT2_DEVICE]] oder {{Link2CmdRef|Anker=MQTT_GENERAL_BRIDGE|Lang=en|Label=MQTT_GENERAL_BRIDGE}} repräsentierten Client-Geräte sind gesondert anzulegen.
Das Modul {{Link2CmdRef|Anker=MQTT2_CLIENT|Lang=en|Label=MQTT2_CLIENT}} fungiert als [[Interface|Verbindung]] zwischen FHEM und einem externen MQTT Server (z.B. ''mosquitto'') und repräsentiert ein  '''''MQTT Gateway'''''. Die durch die Module [[MQTT2_DEVICE]] oder {{Link2CmdRef|Anker=MQTT_GENERAL_BRIDGE|Lang=en|Label=MQTT_GENERAL_BRIDGE}} repräsentierten Client-Geräte sind gesondert anzulegen.
{{Hinweis|FHEM selbst kann ebenfalls mit {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} als MQTT-Server eingesetzt werden. In diesem Fall ist innerhalb dieser FHEM-Instanz kein MQTT2_CLIENT-Gerät erforderlich. Befindet sich ein MQTT2_SERVER in einer anderen FHEM-Instanz, kann dieser von dort aus mit MQTT2_CLÍENT verbunden werden.}}


== Voraussetzungen ==
== Voraussetzungen ==
Es muss für jedes MQTT-Gateway ein MQTT-Server eingerichtet und erreichbar sein.
Es muss für jedes MQTT-Gateway ein MQTT-Server eingerichtet und erreichbar sein.
Eine Anleitung zur Einrichtung eines Mosquitto-Brokers finden Sie z.B. im Artikel [[MQTT Einführung]].
Eine Anleitung zur Einrichtung eines Mosquitto-Brokers finden Sie z.B. im Artikel [[MQTT Einführung]].
{{Hinweis|FHEM selbst kann ebenfalls mit {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} als MQTT-Server eingesetzt werden. In diesem Fall ist innerhalb dieser FHEM-Instanz kein MQTT2_CLIENT-Gerät erforderlich. Befindet sich ein MQTT2_SERVER in einer anderen FHEM-Instanz, kann dieser von dort aus mit MQTT2_CLIENT verbunden werden.}}


== Kurzübersicht ==
== Kurzübersicht ==
Zeile 28: Zeile 28:
[[MQTT2 DEVICE|MQTT2_DEVICE]] wird verwendet, wenn das physikalische Device (Sensor oder Aktor) über mqtt kommuniziert, wie dieses z.B. bei vielen ESP8266-basierten Geräten der Fall ist.  
[[MQTT2 DEVICE|MQTT2_DEVICE]] wird verwendet, wenn das physikalische Device (Sensor oder Aktor) über mqtt kommuniziert, wie dieses z.B. bei vielen ESP8266-basierten Geräten der Fall ist.  


Möchte man ''autocreate'' verwenden, um automatisiert MQTT2_DEVICE-Geräte anlegen zu lassen, empfiehlt es sich, auf das erste automatisch angelegte Gerät das [[MQTT2-Module - Praxisbeispiele#attrTemplate_2|template]] ''A_00_MQTT2_CLIENT_general_bridge'' anzuwenden. Dadurch werden alle eingehenden MQTT-Messages, die auf unterschiedlichen Topics empfangen werden, in separate, automatisch angelegte MQTT2_DEVICE-Geräte umgeleitet, sofern sie sich in den ersten beiden Teilen der Topic-Struktur unterscheiden.
{{Randnotiz|RNTyp=g|RNText=Die Empfehlung, eine Kopie und nicht das erste automatisch erstellte Device für das attrTemplate ''A_00_MQTT2_CLIENT_general_bridge'' zu nutzen, hat folgenden Hintergrund: Dieses kann zwar auch auf das erste angelegte MQTT2-Device angewendet werden, allerdings erweitert sich die readingList des Geräts mit derselben CID wie das MQTT2_CLIENT-Gerät auch wieder, sobald weitere MQTT-Nachrichten eingehen, die nicht über einen readingList-Eintrag in irgendeinem MQTT2_DEVICE zugeordnet werden können und auch nicht den definierten bridgeRegexp-Ausdrücken entsprechen. Es empfiehlt sich daher, beide Funktionen - "Sammeldevice" für alle nicht zuordenbaren Nachrichten und "bridgeRegexp-Gerät" für bekannte Gerätetypen - zu trennen. Man sollte im laufenden Betrieb jedoch beachten, dass beides separate Funktionen sind, und ggf. Einträge in der readingList wieder zu löschen, sobald diese für andere Geräte verwendet werden bzw. verwendet werden sollen.
Dies muß nur einmalig erfolgen, für alle weiteren Geräte gilt dann das allgemeine Vorgehen für MQTT2_DEVICE, z.B. auch die Festlegung weiterer Geräten mit ''bridgeRegexp''-Attributen wie in den [[MQTT2-Module - Praxisbeispiele|Praxisbeispielen]] beschrieben.
Ohne weiteres kann man dazu auch eine Kopie des "Sammeldevice" nutzen, um z.B. weitere bridge-Geräte wie den ebusd-splitter, eine Zigbee-Bridge oder eine MiLight-Bridge daraus zu erstellen. Hat man neue Geräte mit bridgeRegexp-Einträgen erstellt oder die bridgeRegexp-Einträge verändert, kann in der Regel gefahrlos zunächst die readingList am "Sammeldevice" gelöscht werden, so dass dann eingehende Nachrichten auch tatsächlich gegen die bridgeRegexp geprüft werden müssen.}}Möchte man ''autocreate'' verwenden, um automatisiert MQTT2_DEVICE-Geräte anlegen zu lassen, empfiehlt es sich, das erste automatisch angelegte Gerät zu kopieren, die DEF der Kopie zu ändern (z.B. auf ''MQTT2_Bridge'') und darauf dann das [[MQTT2-Module - Praxisbeispiele#attrTemplate_2|template]] ''A_00_MQTT2_CLIENT_general_bridge'' anzuwenden. Dadurch werden bestimmte eingehenden MQTT-Messages für eine Anzahl häufig anzutreffender Gerätetypen in separate, automatisch angelegte MQTT2_DEVICE-Geräte umgeleitet<ref>Näheres zur Entstehung der derzeitigen bridgeRegexp des templates ''A_00_MQTT2_CLIENT_general_bridge'' sind diesem {{Link2Forum|Topic=98126|LinkText=Forenthread}} zu entnehmen.</ref>.


Will man Geräte unterscheiden, die sich nur z.B im ersten Teil der Topic-Struktur unterscheiden, kann man dies durch Anpassung der bridgeRegexp erreichen oder dadurch, dass man die betreffenden Geräte manuell anlegt<ref>z.B. aus einer Kopie des A_00_MQTT2_CLIENT_general_bridge-Geräts im [[Import von Code Snippets|RAW-Editor]]</ref>.
{{Randnotiz|RNTyp=g|RNText=Für weitere bridge-Geräte, die als Kopie aus dem "sammeldevice" erstellt werden, gilt ebenfalls die Empfehlung, jeweils die CID auf einen anderen Wert festzulegen als die ClientID des MQTT2_CLIENT-Geräts!}}Dies muß nur einmalig erfolgen, für alle weiteren - mittels bridgeRegexp erstellten - Geräte gilt dann das allgemeine Vorgehen für MQTT2_DEVICE, z.B. auch die Festlegung weiterer Geräten mit ''bridgeRegexp''-Attributen wie in den [[MQTT2-Module - Praxisbeispiele|Praxisbeispielen]] beschrieben.
 
 
Will man Geräte unterscheiden, die sich nur z.B im ersten Teil der Topic-Struktur unterscheiden, kann man dies durch Anpassung der bridgeRegexp erreichen oder dadurch, dass man die betreffenden Geräte manuell anlegt<ref>z.B. aus einer Kopie des A_00_MQTT2_CLIENT_general_bridge-Geräts im [[Import von Code Snippets|RAW-Editor]], beachten Sie hierzu aber die Hinweise zur Änderung der CID!</ref>.


== Anmerkungen ==
== Anmerkungen ==

Version vom 18. März 2019, 16:12 Uhr

MQTT2_CLIENT
Zweck / Funktion
Stellt als Gateway die Verbindung zu einem MQTT-Broker her
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) MQTT
Modulname 10_MQTT2_CLIENT.pm
Ersteller rudolfkoenig (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Das Modul MQTT2_CLIENT ermöglicht es, Geräte einzubinden, die über eine MQTT-Schnittstelle verfügen.

Das Modul MQTT2_CLIENT fungiert als Verbindung zwischen FHEM und einem externen MQTT Server (z.B. mosquitto) und repräsentiert ein MQTT Gateway. Die durch die Module MQTT2_DEVICE oder MQTT_GENERAL_BRIDGE repräsentierten Client-Geräte sind gesondert anzulegen.

Voraussetzungen

Es muss für jedes MQTT-Gateway ein MQTT-Server eingerichtet und erreichbar sein. Eine Anleitung zur Einrichtung eines Mosquitto-Brokers finden Sie z.B. im Artikel MQTT Einführung.

Info blue.png
FHEM selbst kann ebenfalls mit MQTT2_SERVER als MQTT-Server eingesetzt werden. In diesem Fall ist innerhalb dieser FHEM-Instanz kein MQTT2_CLIENT-Gerät erforderlich. Befindet sich ein MQTT2_SERVER in einer anderen FHEM-Instanz, kann dieser von dort aus mit MQTT2_CLIENT verbunden werden.


Kurzübersicht

Info blue.png
Eine Übersicht über die verschiedenen Möglichkeiten, MQTT in FHEM zu nutzen, ist in MQTT#FHEM und MQTT zu finden.


Define

Das MQTT Gateway wird angelegt mit define 'meinMQTT2Client MQTT2_CLIENT <host>:<port>


Info blue.png
Sofern der MQTT-Server mit FEHM über localhost kommunizieren kann, sollte als IP 127.0.0.1 verwendet werden.


Anwendung

Danach können entsprechende Client-Devices angelegt werden, MQTT2_DEVICE wird verwendet, wenn das physikalische Device (Sensor oder Aktor) über mqtt kommuniziert, wie dieses z.B. bei vielen ESP8266-basierten Geräten der Fall ist.

Info green.pngDie Empfehlung, eine Kopie und nicht das erste automatisch erstellte Device für das attrTemplate A_00_MQTT2_CLIENT_general_bridge zu nutzen, hat folgenden Hintergrund: Dieses kann zwar auch auf das erste angelegte MQTT2-Device angewendet werden, allerdings erweitert sich die readingList des Geräts mit derselben CID wie das MQTT2_CLIENT-Gerät auch wieder, sobald weitere MQTT-Nachrichten eingehen, die nicht über einen readingList-Eintrag in irgendeinem MQTT2_DEVICE zugeordnet werden können und auch nicht den definierten bridgeRegexp-Ausdrücken entsprechen. Es empfiehlt sich daher, beide Funktionen - "Sammeldevice" für alle nicht zuordenbaren Nachrichten und "bridgeRegexp-Gerät" für bekannte Gerätetypen - zu trennen. Man sollte im laufenden Betrieb jedoch beachten, dass beides separate Funktionen sind, und ggf. Einträge in der readingList wieder zu löschen, sobald diese für andere Geräte verwendet werden bzw. verwendet werden sollen. Ohne weiteres kann man dazu auch eine Kopie des "Sammeldevice" nutzen, um z.B. weitere bridge-Geräte wie den ebusd-splitter, eine Zigbee-Bridge oder eine MiLight-Bridge daraus zu erstellen. Hat man neue Geräte mit bridgeRegexp-Einträgen erstellt oder die bridgeRegexp-Einträge verändert, kann in der Regel gefahrlos zunächst die readingList am "Sammeldevice" gelöscht werden, so dass dann eingehende Nachrichten auch tatsächlich gegen die bridgeRegexp geprüft werden müssen.

Möchte man autocreate verwenden, um automatisiert MQTT2_DEVICE-Geräte anlegen zu lassen, empfiehlt es sich, das erste automatisch angelegte Gerät zu kopieren, die DEF der Kopie zu ändern (z.B. auf MQTT2_Bridge) und darauf dann das template A_00_MQTT2_CLIENT_general_bridge anzuwenden. Dadurch werden bestimmte eingehenden MQTT-Messages für eine Anzahl häufig anzutreffender Gerätetypen in separate, automatisch angelegte MQTT2_DEVICE-Geräte umgeleitet[1].

Info green.pngFür weitere bridge-Geräte, die als Kopie aus dem "sammeldevice" erstellt werden, gilt ebenfalls die Empfehlung, jeweils die CID auf einen anderen Wert festzulegen als die ClientID des MQTT2_CLIENT-Geräts!

Dies muß nur einmalig erfolgen, für alle weiteren - mittels bridgeRegexp erstellten - Geräte gilt dann das allgemeine Vorgehen für MQTT2_DEVICE, z.B. auch die Festlegung weiterer Geräten mit bridgeRegexp-Attributen wie in den Praxisbeispielen beschrieben.


Will man Geräte unterscheiden, die sich nur z.B im ersten Teil der Topic-Struktur unterscheiden, kann man dies durch Anpassung der bridgeRegexp erreichen oder dadurch, dass man die betreffenden Geräte manuell anlegt[2].

Anmerkungen

  1. Näheres zur Entstehung der derzeitigen bridgeRegexp des templates A_00_MQTT2_CLIENT_general_bridge sind diesem Forenthread zu entnehmen.
  2. z.B. aus einer Kopie des A_00_MQTT2_CLIENT_general_bridge-Geräts im RAW-Editor, beachten Sie hierzu aber die Hinweise zur Änderung der CID!