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.
Funktioniert erstmal nicht.
2018.08.10 17:53:08 1: reload: Error:Modul 00_MQTT2_SERVER deactivated:
Experimental keys on scalar is now forbidden at ./FHEM/00_MQTT2_SERVER.pm line 75.
2018.08.10 17:53:08 0: Experimental keys on scalar is now forbidden at ./FHEM/00_MQTT2_SERVER.pm line 75.
patch gibts hier: https://forum.fhem.de/index.php/topic,90145.0.html
Und auf der ganzen Welt, heißt die zentrale MQTT Instanz "Broker" und nicht "Server"...
ZitatFunktioniert erstmal nicht.
Haengt vom Perl version wohl ab, 5.18 meldet keine Fehler, 5.26 mag tatsaechlich nicht.
Zitatpatch gibts hier: https://forum.fhem.de/index.php/topic,90145.0.html (https://forum.fhem.de/index.php/topic,90145.0.html)
Danke, habs eingecheckt.
ZitatUnd auf der ganzen Welt, heißt die zentrale MQTT Instanz "Broker" und nicht "Server"...
In der aktuellen spec (http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) gibt es keinen broker mehr, nur noch server.
Alles in allem: Gute Arbeit! Danke!
Das wird in der Mehrzahl der Fälle, in denen MQTT innerhalb einer einzelnen FHEM Installation verwendet werden soll, völlig ausreichen.
Zitat von: betateilchen am 10 August 2018, 20:27:01
Alles in allem: Gute Arbeit! Danke!
Das wird in der Mehrzahl der Fälle, in denen MQTT innerhalb einer einzelnen FHEM Installation verwendet werden soll, völlig ausreichen.
Ich gebe Udo da Recht. Wirklich gute Arbeit. Danke Rudi.
MQTT ist/war unter FHEM bisher Kraut und Rüben
Zitat von: CoolTux am 10 August 2018, 20:31:32
MQTT ist/war unter FHEM bisher Kraut und Rüben
Nein. Aber es war nicht komplett in FHEM lösbar, ohne externe Ressourcen zu brauchen.
Inspiriert durch die Diskussion hier (https://forum.fhem.de/index.php/topic,92888.0.html), habe ich ein MQTT2_CLIENT Modul gebaut, fuer die, die einen externen MQTT2_SERVER bevorzugen.
Finde ich gut. Da ist aber noch was zu testen, lief bei mir nicht auf anhieb. @Rudi machst Du 'nen neuen Thread für?
Wieso muss man den user als Attribut setzen und das password mit set? Das ist doch völlig unlogisch, da die credentials ohnehin zusammengehören.
Damit beim versehentlichen Posten des fhem.cfg das Passwort nicht angezeigt wird.
Und damit ich keine leidige Diskussion ueber Passwort in Klartext fuehren muss. Derjenige, der das Passwort findet, stellt die Frage vmtl. nicht :)
Wird bei den anderen Modulen (z.Bsp. FBAHAHTTP) auch so gemacht.
Die Frage ist doch eher: warum wird nicht auch der Username in die Schlüsseldatei geschrieben, wie es viele andere Module, die nicht von Rudi stammen, auch tun?
Dann könnte man username:password direkt beim erstmaligen define angeben.
Und wo wir gerade beim Thema sind: Wenn man ein mqtt2_client aus FHEM löscht, sollten auch die credentials aus der Schlüsseldatei gelöscht werden.
ZitatWenn man ein mqtt2_client aus FHEM löscht, sollten auch die credentials aus der Schlüsseldatei gelöscht werden.
Habs gefixt.
Bitte Diskussion und Fehlermeldungen in den passenden Forumsbereich fuehren, Ankuendigungen ist nicht fuer sowas da.