(FHEM) MQTT
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]
- 31_Nello: Ist eine Haustuer-Freisprecheinrichtung (nello.io) Implementation von Oskar Neummann (Hat auf github auch ein cooles Powermeter https://github.com/oskarn97/Powermeter)
Module im Detail
| Dateiname Modul | Kurzbeschreibung | Dateigroesze | Codezeilen | Maintainer |
|---|---|---|---|---|
| 00_MQTT.pm | fhem bridge to 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_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_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_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) |
| 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 |
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 werden die MQTT_Module von hexemeister und die MQTT2-Module von rudolgfkoenig unterhalten.
Links
Ein Exkurs von Heise mit Beispielen, deutsch, sehr lesenswert MQTT FX - ein sehr praktisches Analysetool