Modul-Konzeption: Generic MQTT Bridge

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

Vorheriges Thema - Nächstes Thema

hexenmeister

Prima!
Danke fürs Testen :)
So werden wir das nach und nach fertigstellen ;D
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Master_Nick

Find ich mega!

Vielen vielen Dank für deine Zeit und Arbeit!
Ich schätze diese Bridge sehr!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

SamNitro

kann ich auf 2 topics lauschen frei nach dem motto
state:stopic={"/input/$device/state"}; pct:stopic={"/input/$device/pct"}
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

hexenmeister

Klar, beliebig viele. Aber leerzeichengetrennt, also ohne ';'
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

SamNitro

Zitat von: hexenmeister am 01 Mai 2018, 21:11:18
Klar, beliebig viele. Aber leerzeichengetrennt, also ohne ';'

Ja Mega :)


Mobil unterwegs!
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

hexenmeister

Neue Version mit halbwegs funbktionierenden Wildcards.

Also so wie das hier: *:topic={"/TEST/$reading/set"}

Was an der Stelle ($reading) im Topic gefunden wird, wird als Reading-Name verwendet. Nicht vorhandenen Readings werden ggf. angelegt.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

cpramhofer

WOW!!! Genau das was ich suche!
So kann ich endlich FHEM und ZWay "paaren"

Ich möchte nicht auf ZWay verzichten und gleichzeitig die Flexibilität von FHEM nutzen.
Habe daher zwei Raspberry 3B+ am laufen. Auf einem läuft ein Mosquitto den ich hauptsächlich für die Kommunikation mit ESP Devices nutze (auch über mehrere Immobilien hinweg).
Ich bin absolut überzeugt von MQTT umso besser wenn es jetzt auch generisch läuft!

cpramhofer

Endlosschleife:

Liebe Community, hat jemand eine Idee zu folgendem Problem.
Wenn ich Publish allein verwende kann ich den Status setzen,
Wenn ich Subscribe allein verwende kann ich den Status lesen.
Wenn ich beides Verwende komme ich in eine Endlosschleife:
mqttPublish state:topic=pramNet/vorzimmerOG/galerie/set
mqttSubscribe state:topic=pramNet/vorzimmerOG/galerie

Ich verwende verschiedene Topics aber leider löst das Publish eine Message auch wieder ein Subscribe Event aus was wiederum zu einer Stateänderung (zumindest im Timestamp) führt und damit wieder ein Publish Event auslöst - eine klassische Endlosschleife. Gibt es eine Möglichkeit das Publish nur auszulösen wenn es eine Änderung der State-Value gibt?

SamNitro

Ein und Ausgang dürfen nicht gleich heißen,
ich habe bei mir ein input und ein output hinzugefügt

z.B.
mqttPublish state:topic=out/pramNet/vorzimmerOG/galerie/set
mqttSubscribe state:topic=in/pramNet/vorzimmerOG/galerie
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

hexenmeister

Die Parameter sind schon unterschiedlich. Aber eine Schleife kann ich nicht nachstellen.
Beim publishen auf pramNet/vorzimmerOG/galerie wird natürlich im Device state entsprechend gesetzt un gleih postwendent auf pramNet/vorzimmerOG/galerie/set gepublisht. Wenn bei DIr dabei eine Endlosschleife entsteht, dann hast Du noch weitere Teilnehmer im Netzt die dabei beteiligt sind.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

cpramhofer

Ja bei mir ist noch ein ZWay Client im Einsatz der auf PREFIX/%RoomName%/%Device%/set reagiert und auf PREFIX/%RoomName%/%Device%/ postet.
Also genau Vice Versa.
Resultat ist dass nach einem Set der ZWay Client auch wiederum ein Publish aufgrund des veränderten Status macht.

Lösen könnte man den ganzen Loop indem die FHEM Bridge das Publish nur dann ausführt wenn sich STATE ändert.
Ich denke dieses Problem könnten mehr haben die die Bridge als Schnittstelle zwischen zwei Frontends verwenden.

Liebe Grüsse und einen schönen Sonntag!

hexenmeister

Ich halte so eine 'über-Kreuz'-Verschränkung für ein Design-Problem. Warum muss denn das genau so sein?
Dennoch kannst Du natürlich Dein Vorschlag umsetzen, dafür ist jedoch nicht die Bridge zuständig, die verhält sich völlig korrekt und FHEM-konform. Schau Dir mal das Attribut 'event-on-change-reading' an.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

cpramhofer

Hallo,

du hast natürlich recht! Die Bridge und MQTT sollte völlig "rein" implementiert sein.
Wollte dich da nicht in negativer weise beeinflussen ;)
Mit event-on-change funktioniert es des Loop zu durchbrechen, ich weiss nur noch nicht ob das nicht noch weitere Nebenwirkungen hat aber bisher schaut es gut aus.

Nochmal ein herzliches Danke für die Arbeit die du hier als Entwickler aber auch in der Community leistest!

Liebe Grüsse
Christoph

Billy

@hexenmeister
Da ich mehr und mehr auf mqtt umsteige beobachte ich schon länger diesen Thread.
Im Zusammenhang mit der Android APP "MQTT Dash" habe ich gestern das Modul "Generic MQTT Bridge" aktiviert
und bin begeistert. :) :) :)
Es hat zwar ein Weilchen gedauert, aber ich möchte mich ganz offiziell für deine tolle Arbeit bedanken.

Gruß Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Master_Nick

#134
Moin Hexenmeister :-)

Ich hab nun noch NICHT die Version vom 01.05. bei mir  - sehe die gerade erst.

Habe aber mit der davor was entdecken können.
Starte ich FHEM neu spammt FHEM einmal mit den Devices den Broker zu wo die MQTTBridge arbeitet - aber nicht einfach einmal jeder Wert sondern x fach.
Und es handelt sich nicht um eine Schleife da ich es gemäß MQTT Standart mache:
Status selber wird nur von FHEM befüllt: homeland/haushalt/heizung/Heizungssteuerung/state
Schaltbefehle Node-Red und wer weiß was: homeland/haushalt/heizung/Heizungssteuerung/state/set

homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/heizung/Heizungssteuerung/state on
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Streifen/state off
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Spot/state off
homeland/haushalt/elektrik/wohnzimmer/Spot/state off


Das war mir aufgefallen, weil "Spot" nach einem Reboot einfach immer mal an ging (oder nach Stromverlust).
Mittlerweile macht er es nun auf off - schon mal angenehmer - aber generell sollte ja gar nichts gemacht werden da ich QOS 2 und Retain 1 nutze.
Somit sollte es schweigen beim Reboot wäre mein Gedanke :-) FHEM intern darf es gern was es will - aber nicht auf MQTT :-D Oder  8) ;D :D

Beste Grüße und ich teste es nun direkt mit der neusten Version erneut.


Die besten Fehler, sind die, die mit der Version die man beim Reporten eines Fehlers vorfindet, gefixed sind :-D GEIL!
Kann es nicht mehr nachstellen.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)