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