(FHEM) MQTT: Unterschied zwischen den Versionen

Aus TippvomTibb
Zur Navigation springen Zur Suche springen
Zeile 147: Zeile 147:
 
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.
 
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.
  
==00_MQTT==
+
==00_MQTT [[#Module im Detail|Uebersicht]]==
  
 
A single MQTT device can serve multiple MQTT_DEVICE, MQTT_GENERIC_BRIDGE clients and (outdated) MQTT_BRIDGE clients.
 
A single MQTT device can serve multiple MQTT_DEVICE, MQTT_GENERIC_BRIDGE clients and (outdated) MQTT_BRIDGE clients.

Version vom 7. August 2022, 17:45 Uhr

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.

00_MQTT Uebersicht

A single MQTT device can serve multiple MQTT_DEVICE, MQTT_GENERIC_BRIDGE clients and (outdated) MQTT_BRIDGE clients. Each MQTT_DEVICE acts as a bridge in between an fhem-device and mqtt. Note: this module is based on Net::MQTT which needs to be installed from CPAN first.

define <name> MQTT <ip:port> [<username>] [<password>]
set <name> connect
set <name> disconnect
set <name> publish [qos:?] [retain:?] <topic> <message>
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

MQTT2_SERVER is a builtin/cleanroom implementation of an MQTT server using no external libraries. It serves as an IODev to MQTT2_DEVICES, but may be used as a replacement for standalone servers like mosquitto (with less features and performance). It is intended to simplify connecting MQTT devices to FHEM.

define <name> MQTT2_SERVER <tcp-portnr> [global|IP]
publish [-r] topic value
clearRetain
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

MQTT2_CLIENT is a cleanroom implementation of an MQTT client (which connects to an external server, like mosquitto) using no perl libraries. It serves as an IODev to 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

MQTT2_DEVICE is used to represent single devices connected to the MQTT2_SERVER. MQTT2_SERVER and MQTT2_DEVICE is intended to simplify connecting MQTT devices to FHEM.

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

acts as a fhem-device that is mapped to mqtt-topics.

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

This module is a MQTT bridge, which simultaneously collects data from several FHEM devices and passes their readings via MQTT, sets readings from incoming MQTT messages or executes incoming messages as a 'set' command for the configured FHEM device.

One for the device types could serve as IODev: MQTT, MQTT2_CLIENT or 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