Frage zum Retain Flag

Begonnen von Rampler, 02 Dezember 2025, 21:20:58

Vorheriges Thema - Nächstes Thema

Rampler

Hallo zusammen,
bin gerade dabei von MQTT auf MQTT2 zu migrieren.
Ich habe ein paar Devices, welche via MQTT_GENERIC_BRIDGE bestimmte Werte publishen sollen.
Das funktioniert auch soweit, doch leider werden die Messages nicht mit Retain geflagt.

Im Device habe ich folgendes codiert:
attr GoodWe mqttPublish AC_ActivePower:topic={"/FHEM/GoodWe/AC_ActivePower"} AC_ActivePower:retain=1\
                              LC_Mode:topic={"/FHEM/GoodWe/LC_Mode"} LC_Mode:retain=1

Ein Mitschnitt zeigt folgendes:
Client (null) received PUBLISH (d0, q0, r0, m0, '/FHEM/GoodWe/AC_ActivePower', ... (1 bytes))
/FHEM/GoodWe/AC_ActivePower 4
Client (null) received PUBLISH (d0, q0, r0, m0, '/FHEM/GoodWe/LC_Mode', ... (7 bytes))
/FHEM/GoodWe/LC_Mode Manuell


Das Flag r0 sagt aus, das kein Retain gesetzt ist. (mosuqitto client)
Habe es auch mit dem MQTT-Explorer-0.4.0-beta.6.exe sozusagen getraced, auch hier kein Retain Flag.

Muss ich noch etwas im MQTT_Server oder im MQTT_GENERIC_BRIDGE ändern ?

Im MQTT_Server habe ich mal testweise diese beiden Attribute gesetzt:
hideRetain 0
respectRetain 1
Leider ohne Erfolg..


3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

TomLee

Hallo,

ohne es selbst nachvollzogen zu haben: Hast du nach dem Setzen des Attributs respectRetain einen Neustart von FHEM durchgeführt? Es kann sein, dass dieser nötig ist, damit das Attribut wirksam wird.

Gruß Thomas

Rampler

#2
Nach Restart habe ich jetzt ein Reading Retain im MQTT_SERVER Device.
Meine Monitore  zeigen allerdings trotzdem noch keine Retain Flags...
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

betateilchen

Der MQTT2_SERVER verschickt grundsätzlich keine retain flags.

Siehe commandref:

Zitat
MQTT2_SERVER
MQTT2_SERVER is a builtin/cleanroom implementation of an MQTT server using no external libraries. It serves as an IODev to MQTT2_DEVICES, but may be used as a replacement for standalone servers like mosquitto (with less features and performance). It is intended to simplify connecting MQTT devices to FHEM.

...

Notes:
...
the retain flag is not propagated by publish
only QOS 0 and 1 is implemented

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Rampler

#4
Weiter unten in der commandref steht aber auch:

MQTT2_SERVER
...
Set
    publish [-r] topic value
    publish a message, -r denotes setting the retain flag.
...
respectRetain [1|0]
As storing messages with the retain flag can take up considerable space and it has no use in a FHEM only environment,
it is by default disabled for featurelevel > 6.1. Set this attribute to 1 if you have external devices relying on this feature.


Scheinbar kann der MQTT2_SERVER doch mit Retain flags umgehen, jedenfalls tut es jetzt.
Mit diesem Command:
mosquitto_sub -h 192.168.1.100 -t  /FHEM/GoodWe/AC_ActivePower lässt sich leicht prüfen ob für eine topic das retain flag gesetzt ist.
Wenn es gesetzt ist, kommt sofort ein Wert.
Bei fehlendem Retain Flag kommt der Wert nur eben dann, wenn er auch gerade puplished wurde.

So sieht der Server aus:
Internals:
   CFGFN     
   CONNECTS   15
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        1883 global
   FD         80
   FUUID      69302014-f33f-b6d9-842e-259717a8f1cda30f
   NAME       MQTT_SERVER
   NR         742
   PORT       1883
   STATE      Initialized
   TYPE       MQTT2_SERVER
   eventCount 3
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2025-12-03 12:41:13   RETAIN          {"/FHEM/GoodWe/AC_ActivePower":"-220","/FHEM/Wetterstation/humidity":"91","/FHEM/Wetterstation/temperature":"1.5","tasmota/discovery/4831B7ABCEEC/config":"{\u0022ip\u0022:\u0022192.168.1.18\u0022,\u0022dn\u0022:\u0022SmartMeter\u0022,\u0022fn\u0022:[\u0022SM-Main\u0022,null,null,null,null,null,null,null],\u0022hn\u0022:\u0022SmartMeter\u0022,\u0022mac\u0022:\u00224831B7ABCEEC\u0022,\u0022md\u0022:\u0022ESP32C3\u0022,\u0022ty\u0022:0,\u0022if\u0022:0,\u0022cam\u0022:0,\u0022ofln\u0022:\u0022Offline\u0022,\u0022onln\u0022:\u0022Online\u0022,\u0022state\u0022:[\u0022OFF\u0022,\u0022ON\u0022,\u0022TOGGLE\u0022,\u0022HOLD\u0022],\u0022sw\u0022:\u002215.1.0\u0022,\u0022t\u0022:\u0022/SM_Main/\u0022,\u0022ft\u0022:\u0022%prefix%/%topic%/\u0022,\u0022tp\u0022:[\u0022cmnd\u0022,\u0022stat\u0022,\u0022tele\u0022],\u0022rl\u0022:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\u0022swc\u0022:[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],\u0022swn\u0022:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\u0022btn\u0022:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\u0022so\u0022:{\u00224\u0022:0,\u002211\u0022:0,\u002213\u0022:0,\u002217\u0022:0,\u002220\u0022:0,\u002230\u0022:0,\u002268\u0022:0,\u002273\u0022:0,\u002282\u0022:0,\u0022114\u0022:0,\u0022117\u0022:0},\u0022lk\u0022:0,\u0022lt_st\u0022:0,\u0022bat\u0022:0,\u0022dslp\u0022:0,\u0022sho\u0022:[],\u0022sht\u0022:[],\u0022ver\u0022:1}","tasmota/discovery/4831B7ABCEEC/sensors":"{\u0022sn\u0022:{\u0022Time\u0022:\u00222025-12-03T12:33:58\u0022,\u0022SM\u0022:{\u0022Energy_total_in\u0022:405,\u0022Energy_total_out\u0022:671,\u0022Power\u0022:272,\u0022Power_L1\u0022:54,\u0022Power_L2\u0022:137,\u0022Power_L3\u0022:81,\u0022Volt_L1\u0022:226.0,\u0022Volt_L2\u0022:226.5,\u0022Volt_L3\u0022:226.5,\u0022F\u0022:50.00}},\u0022ver\u0022:1}","tasmota/discovery/485519541801/config":"{\u0022ip\u0022:\u0022192.168.1.13\u0022,\u0022dn\u0022:\u0022Heizung-Zirkulationspumpe\u0022,\u0022fn\u0022:[\u0022Heizung-Zirkulationspumpe\u0022,null,null,null,null,null,null,null],\u0022hn\u0022:\u0022Heizraum-Sonoff\u0022,\u0022mac\u0022:\u0022485519541801\u0022,\u0022md\u0022:\u0022Sonoff Basic\u0022,\u0022ty\u0022:0,\u0022if\u0022:0,\u0022cam\u0022:0,\u0022ofln\u0022:\u0022Offline\u0022,\u0022onln\u0022:\u0022Online\u0022,\u0022state\u0022:[\u0022OFF\u0022,\u0022ON\u0022,\u0022TOGGLE\u0022,\u0022HOLD\u0022],\u0022sw\u0022:\u002215.1.0\u0022,\u0022t\u0022:\u0022/Heizung-Zirkulation/\u0022,\u0022ft\u0022:\u0022%prefix%/%topic%/\u0022,\u0022tp\u0022:[\u0022cmnd\u0022,\u0022stat\u0022,\u0022tele\u0022],\u0022rl\u0022:[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\u0022swc\u0022:[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],\u0022swn\u0022:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\u0022btn\u0022:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\u0022so\u0022:{\u00224\u0022:0,\u002211\u0022:0,\u002213\u0022:0,\u002217\u0022:0,\u002220\u0022:0,\u002230\u0022:0,\u002268\u0022:0,\u002273\u0022:0,\u002282\u0022:0,\u0022114\u0022:0,\u0022117\u0022:0},\u0022lk\u0022:0,\u0022lt_st\u0022:0,\u0022bat\u0022:0,\u0022dslp\u0022:0,\u0022sho\u0022:[],\u0022sht\u0022:[],\u0022ver\u0022:1}","tasmota/discovery/485519541801/sensors":"{\u0022sn\u0022:{\u0022Time\u0022:\u00222025-12-03T12:33:58\u0022},\u0022ver\u0022:1}","tele/Heizung-Zirkulation/LWT":"Online","tele/SM_Main/LWT":"Online"}
     2025-12-03 12:34:32   nrclients       14
     2025-12-03 12:33:40   state           Initialized
   clients:
     MQTT_SERVER_127.0.0.1_56856 1
     MQTT_SERVER_192.168.1.100_41440 1
     MQTT_SERVER_192.168.1.10_49824 1
     MQTT_SERVER_192.168.1.11_61855 1
     MQTT_SERVER_192.168.1.12_50752 1
     MQTT_SERVER_192.168.1.13_49400 1
     MQTT_SERVER_192.168.1.17_53291 1
     MQTT_SERVER_192.168.1.18_65088 1
     MQTT_SERVER_192.168.1.24_52764 1
     MQTT_SERVER_192.168.1.27_59518 1
     MQTT_SERVER_192.168.1.28_52444 1
     MQTT_SERVER_192.168.1.30_65064 1
     MQTT_SERVER_192.168.1.34_54551 1
     MQTT_SERVER_192.168.1.5_58958 1
   retain:
     /FHEM/GoodWe/AC_ActivePower:
       ts         1764762073.87916
       val        -220
     /FHEM/Wetterstation/humidity:
       ts         1764762046.44613
       val        91
     /FHEM/Wetterstation/temperature:
       ts         1764762046.47497
       val        1.5
     tasmota/discovery/4831B7ABCEEC/config:
       ts         1764761639.27505
       val        {"ip":"192.168.1.18","dn":"SmartMeter","fn":["SM-Main",null,null,null,null,null,null,null],"hn":"SmartMeter","mac":"4831B7ABCEEC","md":"ESP32C3","ty":0,"if":0,"cam":0,"ofln":"Offline","onln":"Online","state":["OFF","ON","TOGGLE","HOLD"],"sw":"15.1.0","t":"/SM_Main/","ft":"%prefix%/%topic%/","tp":["cmnd","stat","tele"],"rl":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"swc":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],"swn":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"btn":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"so":{"4":0,"11":0,"13":0,"17":0,"20":0,"30":0,"68":0,"73":0,"82":0,"114":0,"117":0},"lk":0,"lt_st":0,"bat":0,"dslp":0,"sho":[],"sht":[],"ver":1}
     tasmota/discovery/4831B7ABCEEC/sensors:
       ts         1764761639.32944
       val        {"sn":{"Time":"2025-12-03T12:33:58","SM":{"Energy_total_in":405,"Energy_total_out":671,"Power":272,"Power_L1":54,"Power_L2":137,"Power_L3":81,"Volt_L1":226.0,"Volt_L2":226.5,"Volt_L3":226.5,"F":50.00}},"ver":1}
     tasmota/discovery/485519541801/config:
       ts         1764761639.51865
       val        {"ip":"192.168.1.13","dn":"Heizung-Zirkulationspumpe","fn":["Heizung-Zirkulationspumpe",null,null,null,null,null,null,null],"hn":"Heizraum-Sonoff","mac":"485519541801","md":"Sonoff Basic","ty":0,"if":0,"cam":0,"ofln":"Offline","onln":"Online","state":["OFF","ON","TOGGLE","HOLD"],"sw":"15.1.0","t":"/Heizung-Zirkulation/","ft":"%prefix%/%topic%/","tp":["cmnd","stat","tele"],"rl":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"swc":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],"swn":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"btn":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"so":{"4":0,"11":0,"13":0,"17":0,"20":0,"30":0,"68":0,"73":0,"82":0,"114":0,"117":0},"lk":0,"lt_st":0,"bat":0,"dslp":0,"sho":[],"sht":[],"ver":1}
     tasmota/discovery/485519541801/sensors:
       ts         1764761639.5501
       val        {"sn":{"Time":"2025-12-03T12:33:58"},"ver":1}

     tele/Heizung-Zirkulation/LWT:
       ts         1764761638.9136
       val        Online
     tele/SM_Main/LWT:
       ts         1764761639.21521
       val        Online
Attributes:
   autocreate no
   event-on-change-reading no
   icon       mqtt
   respectRetain 1
   room       FHEM

Und das Reading, für publishen:

defmod GoodWe ModbusAttr 247 60 192.168.1.20:502 TCP
...
attr GoodWe mqttPublish AC_ActivePower:topic={"/FHEM/GoodWe/AC_ActivePower"} AC_ActivePower:retain=1\
LC_Mode:topic={"/FHEM/GoodWe/LC_Mode"} LC_Mode:retain=1
...

Und zu guter letzt die Bridge:

Internals:
   DEF        mqtt Gartenhaus,Wetterstation,GA.tor,SolvisBen,GoodWe
   FUUID      692d98b6-f33f-b6d9-a267-3914d2a01897aaf6
   IODev      MyBroker
   NAME       MQTT_GENERIC_BRIDGE
   NR         714
   NTFY_ORDER 70-MQTT_GENERIC_BRIDGE
   STATE      Publish: 57 Devices: 5
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    Gartenhaus,Wetterstation,GA.tor,SolvisBen,GoodWe
   prefix     mqtt
   READINGS:
     2025-12-03 12:02:01   IODev           MyBroker
     2025-12-03 12:02:01   device-count    5
     2025-12-03 12:01:38   incoming-count  0
     2025-12-03 12:48:43   outgoing-count  57
     2025-12-03 12:48:43   transmission-state outgoing publish sent
     2025-12-03 12:01:38   updated-reading-count 0
     2025-12-03 12:01:38   updated-set-count 0
   devices:
     GA.tor:
       :publish:
         autoclose:
           mode       R
           retain     1
           topic      {"/FHEM/GA.tor/autoclose"}
     Gartenhaus:
       :alias:
       :publish:
         Pressure:
           last       1764762191.06537
           mode       R
           retain     1
           topic      {"/FHEM/Gartenhaus/Pressure"}
         Raintoday:
           mode       R
           retain     1
           topic      {"/FHEM/Gartenhaus/Raintoday"}
         Windspeed:
           mode       R
           retain     1
           topic      {"/FHEM/Gartenhaus/Windspeed"}
         statPressureTendency3h:
           mode       R
           topic      {"/FHEM/Gartenhaus/statPressureTendency"}
     GoodWe:
       :alias:
       :publish:
         AC_ActivePower:
           last       1764762493.57558
           mode       R
           retain     1
           topic      {"/FHEM/GoodWe/AC_ActivePower"}
         LC_Mode:
           mode       R
           retain     1
           topic      {"/FHEM/GoodWe/LC_Mode"}
     SolvisBen:
       :alias:
       :publish:
         Speicher_oben:
           last       1764761603.48695
           mode       R
           retain     1
           topic      {"/FHEM/SolvisBen/Speicher_oben"}
     Wetterstation:
       :alias:
       :publish:
         humidity:
           last       1764762523.13093
           mode       R
           retain     1
           topic      {"/FHEM/Wetterstation/humidity"}
         temperature:
           last       1764762523.13325
           mode       R
           retain     1
           topic      {"/FHEM/Wetterstation/temperature"}
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
Attributes:
   event-on-change-reading no
   icon       mqtt_bridge_1
   room       FHEM
   stateFormat Publish: outgoing-count Devices: device-count

Mein erster Eindruck ist, dass der Server nicht so stabil läuft, wie der Mosquitto.
Naja villeicht war er aber auch gestresst, mit dem vielen Testen, ist noch zu früh für ein Fazit.

BTW:

Wollte die merkwürdigen Tasmota Topics im RETAIN Reading los werden, dachte das geht damit:
ignoreRegexp
if $topic:$message matches ignoreRegexp, then it will be silently ignored. For general purpose servers, it is a good idea to set it e.g. to

    homeassistant/[^:"]+/config|tasmota/discovery/[^/:]+/(config|sensors)

Doch leider scheint das nicht zu greifen, das Topic kommt immer wieder.
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

rudolfkoenig

ZitatScheinbar kann der MQTT2_SERVER doch mit Retain flags umgehen, jedenfalls tut es jetzt.
Es geht darum, dass die retain Meldungen nicht mit retain Flag verteilt werden.
Bist Du sicher, dass du das retain Flag haben willst?
retain ist in MQTT2_SERVER per Voreinstellung deaktiviert, weil es hauptsaechlich Probleme macht.

ZitatMein erster Eindruck ist, dass der Server nicht so stabil läuft, wie der Mosquitto.
Probleme gerne melden, insb. wenn man sie nachstellen kann.
Alternativ kann man mosquitto mit MQTT2_CLIENT weiternutzen, ist aber mehr Konfigurationsaufwand in FHEM, wenn man autocreate haben will.

ZitatDoch leider scheint das nicht zu greifen, das Topic kommt immer wieder.
Kannst du uns das nicht ignorierte Topic zeigen?

Rampler

#6
ZitatKannst du uns das nicht ignorierte Topic zeigen?

Zum Beispiel sowas:
tasmota/discovery/4831B7ABCEEC/config {"ip":"192.168.1.18","dn":"SmartMeter","fn":["SM-Main",null,null,null,null,null,null,null],"hn":"SmartMeter","mac":"4831B7ABCEEC","md":"ESP32C3","ty":0,"if":0,"cam":0,"ofln":"Offline","onln":"Online","state":["OFF","ON","TOGGLE","HOLD"],"sw":"15.1.0","t":"/SM_Main/","ft":"%prefix%/%topic%/","tp":["cmnd","stat","tele"],"rl":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"swc":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],"swn":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"btn":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"so":{"4":0,"11":0,"13":0,"17":0,"20":0,"30":0,"68":0,"73":0,"82":0,"114":0,"117":0},"lk":0,"lt_st":0,"bat":0,"dslp":0,"sho":[],"sht":[],"ver":1}

Wenn der IGNOREREGEXP greift, dann sollte dieser topic nicht mehr im Reading RETAIN sein, richtig ?

ZitatBist Du sicher, dass du das retain Flag haben willst?
Jetzt evtl nicht mehr so richtig ..
Hier ein Beispiel, ich publishe z.B  eine Aussentemperatur alle Stunde mit reatin=1.
Jetzt schalte ich das Gerät ein, welches die Aussentemperatur anzeigen/subscriben soll, und müsste ohne Retain im schlimmsten Fall eine Stunde warten..

Merkwürdig finde ich, dass man das Flag nicht sieht. Das Verhalten ist aber so, als wäre es an.
Oder habe ich das mit dem Retain falsch verstanden ?
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!