MQTT_GENERIC_BRIDGE ignoriert mqttPublish bei einzelnen Devices ?

Begonnen von gadget, 07 März 2022, 16:37:55

Vorheriges Thema - Nächstes Thema

gadget

Hallo,

Ich verwende die MQTT_GENERIC_BRIDGE mit einem globalen publish:


defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=MQB
attr mqttGeneric userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
attr mqttGeneric IODev ha_MQTT
attr mqttGeneric globalDefaults sub:qos=2 pub:qos=0 retain=1 base={"fhem/$device"}
attr mqttGeneric globalPublish *:topic={"$base/$reading"}
attr mqttGeneric icon mqtt_bridge_2
attr mqttGeneric room MQTT


Die Devices, die etwas publishen sollen, packe ich zusätzlich in einen Raum MQB und bei der Bridge-Definition wird auf diesen Raum gefiltert. Das läuft hier schon seit geraumer Zeit einwandfrei.
Die Devices, die ich da bisher drin hatte waren nicht allzu geschwätzig und liefern nur wenige Readings, daher war es mir egal, dass ich ein paar Sachen mehr zum Broker schicke als ich auf der anderen Seite konsumiere.

Jetzt ist aber ein sehr auskunftsfreudiges Device dazu gekommen (eine Wetterstation) und die hat 76 Readings und aktualisiert diese alle 60 Sekunden. Daher dachte ich mir ich reduziere die Nachrichtenmenge auf die Readings, die ich wirklich auf der Gegenseite zur Visualisierung verwende und mache bei dem Wetterstation-Device ein


attr Wetterstation mqttPublish temperature|humidity|pressureRel|brightness|rainRate|rainPerDay|rainPerWeek|rainPerMonth|rainPerYear|wind|windGusts:topic={"$base/$reading"} *:retain=0


Klappt aber nicht, es werden weiterhin alle 76 Readings als MQTT-Nachrichten gesendet. Wenn ich das Template bei der Wetterstation ändere (z.B. auf topic={"test/$reading"} ) dann bekommen ich auf dem Broker unter "test" die 11 ausgewählten aber trotzdem unter {"$base/$reading"} noch alle 76 Stück.

Ich hatte die Doku eigentlich so verstanden, dass ein mqttPublish bei einem Einzeldevice das globalPublish bei der Bridge übersteuert.  Ist die Doku falsch, ist das Bug oder ein Denkfehler bei mir ?

Grüße, gadget

Beta-User

Zitat von: gadget am 07 März 2022, 16:37:55
Ist die Doku falsch, ist das Bug oder ein Denkfehler bei mir ?
Vermutlich ist es ein Doku-Thema, nach meiner Kenntnis war das mit dem globalPublish eher ein "unerwünschtes Stiefkind" - ganz praktisch zum Testen, aber eigentlich nicht zur größeren Verbreitung gedacht, und das publishen an verschiedene Topics ist an sich auch ein feature, das auch im "Device-publish" möglich wäre...
Was jeweils alles an publishes pro Device stattfinden soll, ist im list der MGB zu sehen, eventuell kann es helfen, bei dem einen Device "expression" zu setzen für * und da dann "nichts" zurückzugeben.
Ansonsten würde vermutlich event-on-change-reading (etc.) bei der Wetterstation auch nicht schaden...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

gadget

Zitat von: Beta-User am 07 März 2022, 18:06:17
Was jeweils alles an publishes pro Device stattfinden soll, ist im list der MGB zu sehen


Im List der MGB ist bei dem Device folgendes drin:


Wetterstation:
       :alias:
       :publish:
         *:
           retain     0
         brightness:
           last       1646672909.04921
           mode       R
           topic      {"$base/$reading"}
         humidity:
           last       1646672908.5088
           mode       R
           topic      {"$base/$reading"}
         pressureRel:
           last       1646672908.61876
           mode       R
           topic      {"$base/$reading"}
         rainPerDay:
           last       1646672908.83211
           mode       R
           topic      {"$base/$reading"}
         rainPerMonth:
           last       1646672908.91512
           mode       R
           topic      {"$base/$reading"}
         rainPerWeek:
           last       1646672908.8736
           mode       R
           topic      {"$base/$reading"}
         rainPerYear:
           last       1646672908.9568
           mode       R
           topic      {"$base/$reading"}
         rainRate:
           last       1646672908.79062
           mode       R
           topic      {"$base/$reading"}
         temperature:
           last       1646672908.15469
           mode       R
           topic      {"$base/$reading"}
         wind:
           last       1646672908.70212
           mode       R
           topic      {"$base/$reading"}
         windGusts:
           last       1646672908.7474
           mode       R
           topic      {"$base/$reading"}


also eigentlich nur die 11 Werte, die ich haben will.

Andere Devices, die nur in Richtung Broker senden und kein eigenes mqttPublish haben, kommen im List der MGB überhaupt nicht vor. Auch nicht im get devlist oder get devinfo.



[/quote]
Zitat von: Beta-User am 07 März 2022, 18:06:17
Was jeweils alles an publishes pro Device stattfinden soll, ist im list der MGB zu sehen, eventuell kann es helfen, bei dem einen Device "expression" zu setzen für * und da dann "nichts" zurückzugeben.

Ich hab mal versucht in das mqttPublish am Anfang ein *.:  einzufügen, hat aber nichts verändert. Meinst Du das ?


attr Wetterstation mqttPublish *.: temperature|humidity|pressureRel|brightness|rainRate|rainPerDay|rainPerWeek|rainPerMonth|rainPerYear|wind|windGusts:topic={"$base/$reading"} *:retain=0


event-on-change-reading wäre ne Notlösung, da ich andere Readings, die ich nicht zum Broker schicken will auch in die Logs schreibe und in der fhem-Automatisierung nutze. Das wird dann unübersichtlich. Da
würde ich mir dann vielleicht lieber Readingsproxys machen, das artet bei 11 Werten dann aber auch wieder aus.

Grüße, gadget