Ziel: Anbindung von MQTT Geraeten an FHEM zu vereinfachen.
MQTT2_SERVER: eine "cleanroom" Implementierung eines MQTT Servers in FHEM, ersetzt (mit weniger Features) einen externen Server wie mosquitto.
MQTT2_DEVICE: Geraeterepresentation von angeschlossenen Geraeten.
Beispiel (Anbindung eines Sonoff TH10 mit Tasmota Firmware):
define m2s MQTT2_SERVER 1883 global
define sonoff_th10 MQTT2_DEVICE
attr sonoff_th10 readingList tele/sonoff/S.* { MQTT2_JSON($EVENT) }
attr sonoff_th10 setList\
on tasmota/sonoff/cmnd/Power1 on\
off tasmota/sonoff/cmnd/Power1 off
Zu meinem bedauern konnte ich MQTT_DEVICE nicht verwenden, da es viel zu stark mit den externen Bibliotheken und den anderen MQTT Modulen zusammenhaengt.
Ich habe einige "Labortests" durchgefuehrt, aber mit wenig "echten" Geraeten getestet, am Anfang ist also mit Problemen zu rechnen. Probleme/Feedback/etc bitte im MQTT Bereich des Forums kundtun.
Nebeneffekte der Implementierung:
- Dispatch in fhem.pl hat einen zusaetzlichen optionalen Parameter ($nounknown), falls gesetzt, werden nicht automatisch Geraete angelegt.
- die allowed Anbindung ist generischer geworden: ein Modul signalisiert mit gesetztem CanAuthenticate, dass es kompatibel ist (MQTT2_SERVER ist kompatibel), was eine Warnung erzeugt, falls kein Passwort gesetzt ist. Der Wert 1 veranlasst FHEMWEB passwort vorzuschlagen (telnet), bei 2 wird basicAuth vorgeschlagen (FHEMWEB und MQTT2_SERVER).
Nachtrag:
Inzwischen hat MQTT2_SERVER ein autocreate Attribut bekommen, damit sollte das Anlegen einfacher gehen. D.h. erst Server anlegen:
define m2s MQTT2_SERVER 1883 global
attr m2s autocreate
Danach MQTT Endgeraet fuer diesen Host+Port konfigurieren. Die MQTT2_DEVICE Instanzen werden in FHEM damit automatisch angelegt, und auch das readingList Attribut wird automatisch ergaenzt beim ersten Eintreffen eines Nachrichtentyps. Man muss nur noch setList per Hand setzen.