Guten Tag,
auf Basis der heutigen Templates von Beta-User (Danke) habe ich folgendes Konstrukt erstellt:
defmod mosquitto MQTT2_CLIENT mosquitto:1883
attr mosquitto autocreate simple
attr mosquitto clientId fhem
attr mosquitto keepaliveTimeout 60
attr mosquitto msgAfterConnect -r fhem/connection/status connected
attr mosquitto msgBeforeDisconnect -r fhem/connection/status disconnected
attr mosquitto qosMaxQueueLength 100
attr mosquitto username myusername
MGB
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=System->MQTT-Bridge
attr mqttGeneric IODev mosquitto
attr mqttGeneric disable 0
attr mqttGeneric globalDefaults sub:base={"fhem/set"} pub:base={"fhem"} pub:qos=0 sub:qos=2 retain=0
attr mqttGeneric stateFormat in: incoming-count out: outgoing-count devices: device-count
Das Device
attr mydevice mqttPublish *:topic={"$base/$device/$name"}
attr mydevice mqttSubscribe :stopic={"$base/$device/$name"}
Das Autocreate vom M2C erstellt mir nun jedoch leider ein neuen M2D mitsamt alle Readings aus allen Geräten, die über die Bridge laufen.
defmod MQTT2_fhem MQTT2_DEVICE fhem
attr MQTT2_fhem IODev mosquitto
attr MQTT2_fhem readingList fhem:fhem/mydevice/energy:.* energy\
fhem:fhem/mydevice/power:.* power\
...
attr MQTT2_fhem room MQTT2_DEVICE
Kann mir jemand einen Tipp geben, wie man das vermeiden kann?
Danke.
Vorab mal Danke für's austesten!
Da sind jetzt bei aktiviertem autocreate am IO noch zwei Punkte verbesserungsfähig, an die ich in dem MQTT2_CLIENT-setting auch erst mal noch nicht gedacht hatte, und dann ist da noch "clientOrder"...
Letzteres ist bereits in der Doku:
attr MQTT2_CLIENT clientOrder MQTT_GENERIC_BRIDGE MQTT2_DEVICE
Die anderen beiden bisher nicht berücksichtigten Punkte braucht man nur, wenn man autocreate im M2_CLIENT haben will:
Zum einen sollte man "normale messages", die aus FHEM rausgehen ignorieren. Dazu muss man das "ignoreRegexp" erweitern, um einen Anteil, der nur die "set"-Topics durchläßt. Hier wäre das der Teil:
fhem/(?!set/)
Da gehört unbedingt noch mehr rein als nur der obige Teil, und meine Empfehlung ist auch, das direkt am IO abzufangen! Beispiel für eine vollständige ignoreRegexp:
attr MQTT2_CLIENT ignoreRegexp fhem/(?!set/)|milight/0x[0-9a-fA-F]{1,4}/.*/[0-8]|shellies/[^/]+/command|cmnd/[^/]+/|homeassistant/.*/config
Zum anderen will man in der Regel ja die eigenen Readings nicht wieder haben, was vielleicht über subscriptions im M2_CLIENT geregelt werden kann. Da ich aber das grade nicht vertiefen kann, wäre mein hotfix-Vorschlag, das über das bridgeRegexp zu lösen an dem MQTT2_DEVICE mit dem attrTemplate "MQTT2_CLIENT_general_bridge". Dort musst du die passend erweitern, dass das auf eine ClientID "" umgeleitet wird, was auf "fhem/.*" kommt, so wie es bisher im Wiki schon beschrieben war.
Zur Klarstellung, weil wir das bisher unvollendete Thema Zwave2MQTT-BridgeExpression? (https://forum.fhem.de/index.php/topic,117824.0.html) neulich hatten: Dafür braucht man mAn. keine MQTT_GENERIC_BRIDGE, das geht auch auf alleiniger Basis von MQTT2_DEVICE und einer passenden (separaten) bridgeRegexp.
Ich danke dir, wieder einmal, für deine Mühe.
Ich wollte eigentlich gerade schreiben, dass ich hier https://forum.fhem.de/index.php/topic,116162.msg1104338.html#msg1104338 etwas zu meiner Frage gefunden habe und ich habe im IODev mit ignoreRegexp ausprobiert. Nur habe ich einfach nur "fhem" eingegeben. Was natürlich keine Sinn macht; wie ich jetzt weiß.
Diese Antwort hier ist detaillierter und ich probiere mal herum. Danke.
Zitat von: Beta-User am 23 Januar 2021, 06:28:10
Zur Klarstellung, weil wir das bisher unvollendete Thema Zwave2MQTT-BridgeExpression? (https://forum.fhem.de/index.php/topic,117824.0.html) neulich hatten: Dafür braucht man mAn. keine MQTT_GENERIC_BRIDGE, das geht auch auf alleiniger Basis von MQTT2_DEVICE und einer passenden (separaten) bridgeRegexp.
Das war mir ausnahmsweise sogar klar. Ich hatte den Bridge-Begriff immer nur auf die bridgeRegexp bezogen. Ähnlich ebusd,OpenMQTTGateway, etc.
Eine MGB wollte ich dafür nicht nehmen.
Ich bin hiermit nur nicht so schnell, weil ich dafür den Zwave-Stick umhängen muss und dann mein Produktivsystem "down" ist.