Neue Module: MQTT2_SERVER und MQTT2_DEVICE

Begonnen von rudolfkoenig, 10 August 2018, 13:55:08

Vorheriges Thema - Nächstes Thema

rudolfkoenig

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.

betateilchen

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"...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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
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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Inspiriert durch die Diskussion hier, habe ich ein MQTT2_CLIENT Modul gebaut, fuer die, die einen externen MQTT2_SERVER bevorzugen.

hexenmeister

Finde ich gut. Da ist aber noch was zu testen, lief bei mir nicht auf anhieb. @Rudi machst Du 'nen neuen Thread für?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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.