Modul-Konzeption: Generic MQTT Bridge

Begonnen von hexenmeister, 21 Dezember 2017, 22:35:38

Vorheriges Thema - Nächstes Thema

hexenmeister

'n Abend zusammen!

Inspiriert durch ein Video (https://www.youtube.com/watch?v=AGn_QfPmk-g), das hier empfohlen wurde: https://forum.fhem.de/index.php/topic,78512.msg731365.html#msg731365 habe ich angefangen ein kleines Modul zu schreiben, dass so etwas bequemmer realisiert.
Die Idee dabei ist, keine einzelnen MQTT-Bridges für jedes zu übertragende Device erstellen zu müssen, sondern mit einem einzigen Gerät zu diesem Zweck auszukommen, die jeweiligen Einstellungen (Topics etc.) sollen dabei in den eigentlichen Quell-Geräten liegen. Letztendlich möchte ich sowohl publish, als auch subscribe unterstützen, aber soweit ist es noch lange nicht, ich bin mir nicht mal über das Format für die Attribute klar.

Hier biete ich eine erste Testversion als 'proof of concept'. Derzeit funktioniert das Publishen der Readings schon ganz gut, mit Subscribe habe ich noch gar nicht angefangen.

Definition Bridge:

defmod mqttGeneric MQTT_GENERIC_BRIDGE
attr mqttGeneric IODev mqtt
attr mqttGeneric mqttTopicPrefix /test/


Beispieldefinition Gerät:

defmod test dummy
attr test mqttPubNames myreading state
attr test mqttTopic topic
attr test readingList myreading
attr test setList myreading


Setzt man jetzt irgendwas in Device 'test' 'myreading' oder 'state', das werden die Werte unter '/test/totic/myreading' bzw. '/test/totic/state' übertragen.

Freiwilligen Tester bitte vor ;) Mich interessieren Meinungen, Kritik, Verbesserungsvorschläge. Aber bitte noch nicht für etwas produktives einsetzen, die Konfigurationsattribute werden sich recht wahrscheinlich noch ändern.

Viele Grüße

Alexander

Update: neue Version angehängt
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Shojo

Ja sehr cool! 8)

Werde ich spätestens morgen testen könne!
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Absolute Beginner

zwischen Weihnachten und Neujahr ist eine gute Zeit zum Testen!
Raspberry Pi 3 - CUL868 - Jessie - FHEM5.8 - MQTT - Node-RED
HM-TC-IT-WM-W-EU, HM-LC-BI1PBU-FM, HM-Sec-SCo, HM-WDS30-0T2-SM, SOMFY, Echo, ESP, SonOff

Shojo

So habe heute fleißig mit der Generic MQTT Bridge gespielt.

Was mir jetzt so noch so spontan fehlte:

  • mqttTopic die Variable $name nutzen könnte
  • ein autoPubReadings

Läuft sonst schon echt gut :)
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

hexenmeister

Kannst du deinen Anwendungsfall beschreiben? Das zweite verstehe ich leider nicht, das erste erscheint mir nicht sinnvoll, denn der Name (des Devices?) steht ja eindeutig fest.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Shojo

Zitat von: hexenmeister am 23 Dezember 2017, 15:59:43
Kannst du deinen Anwendungsfall beschreiben?
Klar, das ich bei diversen Devices das mqttTopic atrr setzten kann ohne jedes einzelnes separat zu setzt :)

Zitat von: hexenmeister am 23 Dezember 2017, 15:59:43
Das zweite verstehe ich leider nicht
Das optional alle Readings Publisht werden.

FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

hexenmeister

Ok, für das zweite würde ich eher den gleichen attr nehmen aber mit einem * anstatt Readingname. Lässt sich leicht realisieren. Das andere ist auch nicht schwer, ich würde aber irritierend finden, wenn sich bei Umbenennungen auch die topics mit ändern.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Shojo

Zitat von: hexenmeister am 23 Dezember 2017, 17:27:23Das andere ist auch nicht schwer, ich würde aber irritierend finden, wenn sich bei Umbenennungen auch die topics mit ändern.

Ja das ist ein Argument dagegen, aber wenn es nicht zu viel Arbeit macht könnte man das mit aufnehmen ;D
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

AndreasR

Hallo Hexenmeister,

ich habe es auch installiert ..

was mich verwundert ..

attr HausStromZaehler_IEC_01 mqttPubNames energy power statEnergyDay statEnergyDayLast

*bei anderen attr wird hier meist ein Komma erwartet ..

Kann an dieser Stelle auch mit .*  oder regex gearbeitet werden?

Ich würde es sinnvoll finden wenn die mqttTopic mit Variablen -> $room / $group / $model /$name und ähnlichem Zusammengesetz werden könnte. 
Die Probleme mit dem umbenennen oder umziehen sind nicht von der Hand zu weisen aber ich denke es ist dennoch sinnvoll da sich so jeder nach seinem Gusto die MQTT organisieren kann ..

Insgesamt super das ich nun die Readings mit viel weniger aufwand an MQTT übergeben kann da ich die "Statusanzeige" mit Node Red in Angriff genommen habe ..

Danke dir für die Arbeit die du reinsteckst  :)

Andreas


 



hexenmeister

Fhem kennt hier leider keinen Standard. Es gibt Leerzeichen, Kommas, Doppelpunkte als Trenner... Man muss sich halt für irgendwas entscheiden.
Room, Name, Group verstehe ich. Was ist das Model?

Regex gehen nicht. Ein * denke ich zu unterstützen, komplett finde ich übertrieben.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

AndreasR

Ja das mit den Standards bei der Benennung ist mir schon mehrfach aufgefallen - dann ist es hier halt mit Leerzeichen ..

Das Modell (attr HueKuecheDecke model LWB004) ist mir nur reingerutscht - und beim nachdenken halte ich es jetzt auch für Unsinn diese im Topic zu nutzen ..

Was mir noch eingefallen ist - ob es möglich ist auf der mqttGeneric device Seite eine Liste mit den Geräten zu machen die mit dem Modul assoziiert sind?

Gruß

Andreas

hexenmeister

Zitat von: AndreasR am 23 Dezember 2017, 23:44:14
Was mir noch eingefallen ist - ob es möglich ist auf der mqttGeneric device Seite eine Liste mit den Geräten zu machen die mit dem Modul assoziiert sind?

Das hatte ich bereits auf dem Schirm :)
Auch eine Möglichkeit, den Prefix für die Attribute (mqttTopic, mqttPubNames,..) anstatt 'mqtt' änderbar zu machen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Harst

Was spricht dagegen, alle fhem- Nachrichten zu mqtt zu übertragen? Mein Ziel wäre gerade, diese vielen Experten Definitionen von fhem nicht zu benötigen. GUI ist schöner und mit GUI meine ich nicht, im Webinterface zu programmieren.

Horst

dev0

Zitatvia Node Red eine aktuelle, attraktive und pflegeleichte Ansicht für das Tablett zu generieren
Kannst Du das bitte in einem neuen Thread zeigen/presentieren, um hier nicht offtopic zu werden?

hexenmeister

Zitat von: dev0 am 25 Dezember 2017, 11:59:19
Kannst Du das bitte in einem neuen Thread zeigen/presentieren, um hier nicht offtopic zu werden?
Habe so etwas auch noch vor, daher melde Interesse :)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy