(FHEM) MQTT

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

Allgemeines

Eigentlich bin euphorisch gestartet. Die MQTT-Kommunikation zwischen den (Mikrocontroller-)CLients und Mosquitto klappte perfekt und nun ging es um die Integration in FHEM. Und dann fingen die Probleme an. Das Beschriebene oft veraltet, Infos ueber Foren verteilt und und und ... Schade.

Erst mal alle die Lage checken.

Google Suche: MQTT OR mqtt site:fhem.de

13.330 Ergebnisse! Ich bin erstaunt. Dann mal differenzierter.

MQTT OR mqtt site:wiki.fhem.de
MQTT OR mqtt site:forum.fhem.de

89:12900

MQTT OR mqtt site:fhem.de -site:wiki.fhem.de -site:forum.fhem.de

0

Wo jetzt die restlichen 13330 - 12900 - 89 noch stecken habe ich keine Ahnung.

Aber bringe ich erstmal Ordnung in die 89 Wiki-Ergebnisse (https://wiki.fhem.de/wiki/Spezial:Alle_Seiten) rein.

  • MQTT (erstellt: 16.11.2018 bearbeitet: 22.06.2020)
  • MQTT2-Module - Praxisbeispiele (erstellt: 2.11.2018 bearbeitet: 19.07.2022)
  • MQTT2 CLIENT (erstellt: 23.01.2019 bearbeitet: 20.05.2022)
  • MQTT2 DEVICE (erstellt: 23.01.2019 bearbeitet: 12.01.2022)
  • MQTT2 DEVICE - Schritt für Schritt (erstellt: 10.01.2022 bearbeitet: 13.04.2022)
  • MQTT (Modul) (erstellt: 28.03.2018 bearbeitet: 30.09.2021)
  • MQTT DEVICE (erstellt: 28.03.2018 bearbeitet: 18.11.2018)
  • MQTT Einführung (erstellt: 21.03.2019 bearbeitet: 20.09.2021)
  • MQTT Einführung Teil 2 (erstellt: 27.03.2017 bearbeitet: 23.11.2018)
  • MQTT Einführung Teil 3 (erstellt: 01.04.2017 bearbeitet: 23.11.2018)
  • MQTT GENERIC BRIDGE (erstellt: 28.01.2021 bearbeitet: 31.05.2022)
  • EBUS-MQTT2
  • IR-MQTT-Gateway

Ob sich alle Suchergebnisse auf diese 13 Seiten verteilen wird sich zeigen.

https://fhem.de/commandref.html#MQTT2_SERVER https://fhem.de/commandref.html#MQTT_GENERIC_BRIDGE ...

Inspektion

Was zu Beginn auffaellt und oft thematisiert und auch oft fuer Verwirrung sorgt ist die Unterscheidung MQTT und MQTT2. Was man gut an den Bearbeitungszeiten ablesen kann ist, dass es 2018/2019 einen Wechsel von MQTT nach MQTT2 gab.

find /opt/fhem -type f -exec grep -l mqtt {} \; > mqtt_filelist.txt
for file in $(cat mqtt_filelist.txt); do ll $file;  done;

Versionsänderungen bis 6.0 vom 26.01.2020:

- change:  dummy/MQTT2_DEVICE/ZWave: setExtensionsEvent attr (Forum #95581)
- feature: mqtt2.template: A_00_MQTT2_CLIENT_general_bridge revised for better
 - feature: 00_10_MQTT2_CLIENT added (Forum #92888)
 - new:     10_MQTT_GENERIC_BRIDGE an MQTT bridge, which simultaneously
            their readings via MQTT or set readings from
            the incoming MQTT messages or executes them
 - added:   00_MQTT: ability for client notifications: on connect,
 - fixed:   00_MQTT: failure on handling with mqtt-devices without
 - change:  maintainer change for 00_MQTT, 10_MQTT_DEVICE, 10_MQTT_BRIDGE
 - new:     00_MQTT2_SERVER / 10_MQTT2_DEVICE
 - bugfix:  00_MQTT: topics and payload patch
 - feature: 00_MQTT: topic with space or colon
 - feature: 10_MQTT_DEVICE: add SetExtensions
 - bugfix:  00_MQTT: small bugfix
 - feature: 00_MQTT: new attribute "client-id"
 - bugfix: 31_Nello: updated MQTT IP
 - bugfix:  10_MQTT_DEVICE: fix set arguments
 - bugfix:  10_MQTT_BRIDGE: fix comandref $device
 - bugfix:  00_MQTT: fix event-on-change Reading
 - bugfix:  00_MQTT: fix Undef
 - bugfix:  00_MQTT: added delete
 - feature: 00_MQTT: OnMessageFn, last-will, onConnect/onDisconnect
 - feature: 10_MQTT_DEVICE: improved publishSet, retain, subscribeReadings
 - feature: 10_MQTT_BRIDGE: improved retain, subscribeSet
 - bugfix:  MQTT: undef patch
 - bugfix:  MQTT_DEVICE: publishSet patch (Forum #msg648963)
 - feature: MQTT_DEVICE: publishSet patch (Forum #msg648596)
 - bufix:   00_MQTT: fixed delete MQTT_DEVICE
 - bufix:   00_MQTT: fixed delete MQTT device
 - feature: 00_MQTT: Added username password (optional).
 - added: MQTT: connect fhem with mqtt
 - added: MQTT_BRIDGE: bidirectional mapping of existing fhem-device to
 - added: MQTT_DEVICE: fhem-device that can be controlled by and publishes to

MQTT steckt in FHEM anfolgenden Stellen drin:

-rw-rw-r-- 1 501 20 50419 26. Jan 2020  ./FHEM/lib/AttrTemplate/httpmod.template
-rw-rw-r-- 1 501 20 157694 26. Jan 2020  ./FHEM/lib/AttrTemplate/mqtt2.template
-rw-rw-r-- 1 501 20 1078 26. Jan 2020  ./FHEM/lib/Net/MQTT.pod
-rw-rw-r-- 1 501 20 5874 26. Jan 2020  ./FHEM/lib/Net/MQTT/Message.pm
-rw-rw-r-- 1 501 20 11022 26. Jan 2020  ./FHEM/10_MQTT_BRIDGE.pm
-rw-rw-r-- 1 501 20 32299 26. Jan 2020  ./FHEM/10_MQTT2_DEVICE.pm
-rw-rw-r-- 1 501 20 19950 26. Jan 2020  ./FHEM/00_MQTT2_SERVER.pm
-rw-rw-r-- 1 501 20 167185 26. Jan 2020  ./FHEM/10_MQTT_GENERIC_BRIDGE.pm
-rw-rw-r-- 1 501 20 17653 26. Jan 2020  ./FHEM/00_MQTT2_CLIENT.pm
-rw-rw-r-- 1 501 20 22207 26. Jan 2020  ./FHEM/31_Nello.pm
-rw-rw-r-- 1 501 20 31183 26. Jan 2020  ./FHEM/00_MQTT.pm
-rw-rw-r-- 1 501 20 13548 26. Jan 2020  ./FHEM/10_MQTT_DEVICE.pm

-rw-rw-r-- 1 501 20 1636 26. Jan 2020  ./contrib/AttrTemplate/99_attrTmqtt2_ebus_Utils.pm
-rw-rw-r-- 1 501 20 48673 26. Jan 2020  ./contrib/AttrTemplate/mqtt2.ebus.template
-rw-rw-r-- 1 501 20 1804 26. Jan 2020  ./contrib/AttrTemplate/99_attrTmqtt2_roborock_Utils.pm

Irgendwie faellt mir gerade auf, dass mein fhemuser und fhemgroup nicht mehr da sind.

Bei der Liste der beteiligten Dateien fallen ein paar aus dem Rahmen (.pm).

  • .template: AttrTemplate ist ein Hilfsmodul, mit dessen Hilfe Geräte auf einfache Weise mit einer passenden Konfiguration versehen lassen. Der Befehl attrTemplate ist in einer Vielzahl von Modulen verfuegbar.
  • .pod: Plain Old Documenation Ist eine Dokumentationsmethode in Perl [1]

Module im Detail

Dateiname Modul Kurzbeschreibung Dateigroesze Codezeilen Maintainer
00_MQTT.pm fhem Verbindung (bridge) zu mqtt 30,5 KiB 958 Codezeilen 2019-02-24 20:20:51Z hexenmeister
00_MQTT2_SERVER.pm Standalone MQTT message broker (ist der alte Name fuer Server) 19,5 KiB 565 Codezeilen 2019-11-04 10:37:40Z rudolfkoenig
00_MQTT2_CLIENT.pm Verbindung zu einem externen MQTT Server 17,2 KiB 488 Codezeilen 2019-09-17 16:25:01Z rudolfkoenig
10_MQTT_DEVICE.pm MQTT_DEVICE agiert als ein fhem-device das mqtt-topics 'gemapt' ist 13,2 KiB 258 Codezeilen 2018-09-17 12:57:29Z hexenmeister
10_MQTT2_DEVICE.pm Ueber den MQTT2_SERVER oder MQTT2_CLIENT kommunizierende Geraete 31,5 KiB 804 Codezeilen 2020-01-13 17:02:05Z rudolfkoenig
10_MQTT_BRIDGE.pm MQTT_BRIDGE dient/agiert als bridge zwischen einem fhem-device und mqtt-topics 10,8 KiB 217 Codezeilen 2018-09-17 12:57:29Z hexenmeister
10_MQTT_GENERIC_BRIDGE.pm MQTT_GENERIC_BRIDGE dient/agiert fuer alle fhem-devices und mqtt-topics 163,3 KiB 2884 Codezeilen 2019-06-28 15:56:35Z hexenmeister (Alexander Schulz)

Neben message.pm befinden sich noch weitere Dateien in /opt/fhem-6.0/FHEM/lib/Net/MQTT/.

Dateiname eines FHEM-Moduls
Ein FHEM-Modul wird als Perl-Modul mit der Dateiendung *.pm abgespeichert. Der Dateiname folgt dabei folgendem Schema:
   [Schlüsselnummer]_[Modulname].pm
   Schlüsselnummer - Eine zweistellige Zahl zwischen 00 - 99. Die Schlüsselnummer hat aktuell keine technische Relevanz mehr. In früheren FHEM-Versionen ist sie relevant für zweistufige Module (Reihenfolge für Dispatch() um logische Module zu prüfen). Die allgemeine Empfehlung ist hierbei eine Schlüsselnummer eines Moduls zu verwenden, welches eine ähnliche Funktionalität bietet. Die Schlüsselnummer 99 hat hierbei eine besondere Bedeutung, da alle Module mit dieser Schlüsselnummer beim Start von FHEM automatisch geladen werden, selbst, wenn sie in der Konfiguration nicht verwendet werden. Daher wird für myUtils 99 als Schlüsselnummer verwendet (99_myUtils.pm). Module mit der Schlüsselnummer 99 werden im SVN nicht akzeptiert (siehe SVN Nutzungsregeln)
   Modulname - Der Name des Moduls wie er in FHEM bei dem Anlegen einer Gerätedefinition zu verwenden ist. Der Modulname sollte nur aus den folgenden möglichen Zeichen bestehen: Groß-/Kleinbuchstaben, Zahlen sowie Unterstrich (_)

Der offensichtlichste Unterschied zwischen MQTT- und MQTT2-Modulen ist die Herkunft. Wie aus der o.g. Tabelle zu lesen ist, werden die MQTT_Module von hexemeister und die MQTT2-Module von rudolgfkoenig unterhalten.

Die Inhalte der Commandref sind aus dem 'Pidgin-English' auf deutsch uebersetzt und ggf. durch mich ergaenzt.

00_MQTT

Zurueck Uebersicht

Ein einzelnes MQTT-Gerät kann mehrere MQTT_DEVICE, MQTT_GENERIC_BRIDGE Clients und (veraltete) MQTT_BRIDGE Clients bedienen.  Jedes MQTT_DEVICE fungiert als Brücke zwischen einem Fhem-Gerät und mqtt. 
Hinweis: Dieses Modul basiert auf Net::MQTT, das zuerst von CPAN installiert werden muss.

Define

define <name> MQTT <ip:port> [<username>] [<password>]

Set

set <name> connect
set <name> disconnect
set <name> publish [qos:?] [retain:?] <topic> <message>

Get

 

Readings

  

Attributes

keep-alive
attr <name> last-will [qos:?] [retain:?] <topic> <message>
attr <name> client-id client id
on-connect, on-disconnect
on-timeout

00_MQTT2_SERVER

Zurueck Uebersicht

MQTT2_SERVER ist eine integrierte 'Reinraumimplementierung' eines MQTT-Servers, die keine externen Bibliotheken verwendet. Es dient als IODev für MQTT2_DEVICES, kann aber als Ersatz für eigenständige Server wie mosquitto (mit weniger Funktionen und Leistung) verwendet werden. Es soll den Anschluss von MQTT-Geräten an FHEM vereinfachen.

Define

define <name> MQTT2_SERVER <tcp-portnr> [global|IP]

Set

publish [-r] topic value
clearRetain

Get

 

Readings

  

Attributes

allowfrom
autocreate [no|simple|complex]
binaryTopicRegexp <regular-expression>
clientId <name>
clientOrder [MQTT2_DEVICE] [MQTT_GENERIC_BRIDGE]
disable
hideRetain [0|1]
ignoreRegexp
keepaliveFactor
rawEvents <topic-regexp>
rePublish
SSL
sslVersion
sslCertPrefix

00_MQTT2_CLIENT

Zurueck Uebersicht

 MQTT2_CLIENT ist eine Reinraumimplementierung eines MQTT-Clients (der eine Verbindung zu einem externen Server wie mosquitto herstellt) ohne Perl-Bibliotheken. Es dient als IODev für MQTT2_DEVICES..
define <name> MQTT2_CLIENT <host>:<port>
publish -r topic value
password <password> value
connect
autocreate [no|simple|complex]
binaryTopicRegexp <regular-expression>
clientId <name>
clientOrder [MQTT2_DEVICE] [MQTT_GENERIC_BRIDGE]
connectTimeout <seconds>
disable
disabledForIntervals
disconnectAfter <seconds>
keepaliveTimeout <seconds;>
lwtRetain
mqttVersion 3.1,3.1.1
msgAfterConnect [-r] topic message
msgBeforeDisconnect [-r] topic message
qosMaxQueueLength <number>
rawEvents <topic-regexp>
subscriptions <subscriptions>
SSL
sslargs
username <username>

10_MQTT2_DEVICE

Zurueck Uebersicht

MQTT2_DEVICE wird verwendet, um einzelne Geräte darzustellen, die mit dem MQTT2_SERVER verbunden sind. MQTT2_SERVER und  MQTT2_DEVICE soll den Anschluss von MQTT-Geräten an FHEM vereinfachen.
define <name> MQTT2_DEVICE [clientId]
<set setList attribute>
<get getList attribute>
 autocreate {0|1}
bridgeRegexp <regexp> newClientId ...
devicetopic value
devPos value
disable
getList cmd reading [topic|perl-Expression]...
imageLink href
jsonMap oldReading1:newReading1 oldReading2:newReading2...
periodicCmd <cmd1>:<period1> <cmd2>:<period2>...
readingList <regexp> [readingName|perl-Expression] ...
setExtensionsEvent
setList cmd [topic|perl-Expression] ...
setStateList command command ...

10_MQTT_DEVICE

Zurueck Uebersicht

Ein MQTT_DEVICE fungiert als fhem-device, das mqtt-topics zugeordnet ist.
define <name> MQTT_DEVICE
set <name> <command>
set <name> <reading> <value>
set extensions
attr <name> publishSet [[<reading>:]<commands_or_options>] <topic>
attr <name> publishSet_<reading> [<values>]* <topic>
attr <name> autoSubscribeReadings <topic>
attr <name> subscribeReading_<reading> [{Perl-expression}] [qos:?] [retain:?] <topic>
attr <name> retain <flags> ...
attr <name> qos <flags> ...
attr <name> useSetExtensions <flags>

10_MQTT_GENERIC_BRIDGE

Zurueck Uebersicht

Dieses Modul ist eine MQTT-Brücke, die gleichzeitig Daten von mehreren FHEM-Geräten sammelt und deren Messwerte über MQTT weitergibt, Messwerte von eingehenden MQTT-Nachrichten festlegt oder eingehende Nachrichten als "Set" -Befehl für das konfigurierte FHEM-Gerät ausführt. Einer für die Gerätetypen könnte als IODev dienen: MQTT, MQTT2_CLIENT oder MQTT2_SERVER.
defmod mqttGeneric MQTT_GENERIC_BRIDGE [prefix] [devspec,[devspec]
version
devlist [<name (regex)>]
devinfo [<name (regex)>]
device-count
incoming-count
outgoing-count
updated-reading-count
updated-set-count
transmission-state
IODev (zwingend erforderlich)
disable 
globalDefaults

globalAlias globalPublish globalTypeExclude globalDeviceExclude forceNEXT mqttDefaults mqttAlias mqttPublish mqttSubscribe mqttForward mqttDisable

Links

Ein Exkurs von Heise mit Beispielen, deutsch, sehr lesenswert MQTT FX - ein sehr praktisches Analysetool