Autor Thema: Mqtt topic subscribe verständnis  (Gelesen 830 mal)

Offline lewej

  • Full Member
  • ***
  • Beiträge: 464
Mqtt topic subscribe verständnis
« am: 07 Januar 2019, 16:45:02 »
Hallo zusammen,

Ich habe eine Verständnis Frage zum subscribe eines Topics bei einem MQTT_ DEVICE.
Ich schreibe in ein TOPIC eine RFID Nr rein. Wenn ich fhem starte dann wird diese Topic subscribed und ebenfalls ein notify ausgeführt soweit so gut. Wenn ich ein rereadcfg ausführe, wird wieder das Topic subscribed und es wird wieder ein notify ausgeführt, obwohl es ja breits beim ersten Mal gelesen wurde.

Was muss ich machen, das die Message acknowledge wird?


Gruss

Offline lewej

  • Full Member
  • ***
  • Beiträge: 464
Antw:Mqtt topic subscribe verständnis
« Antwort #1 am: 08 Januar 2019, 17:12:40 »
Hat keiner einen Tipp?

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4640
    • tech_LogBuch
Antw:Mqtt topic subscribe verständnis
« Antwort #2 am: 08 Januar 2019, 18:52:44 »
Hat keiner einen Tipp?
Doch. Verwende niemals rereadcfg.

Außerdem verstehe ich dein Problem nicht. Was hast Du definiert? Wie? Welche Notify? Wozu überhaut rereadcfg (wie schon gesagt, vermeide es)? Wie ist das gewünschte Ergebnis? Was passiert tatsächlich? Versuchst etwas mit Retain-Flag? Mit QOS>0? Was bedeutet für dich 'message acknowledge'?

Ohne Glaskugel verstehe ich nur Bahnhof. Vermutlich geht das allen anderen auch so.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Offline lewej

  • Full Member
  • ***
  • Beiträge: 464
Antw:Mqtt topic subscribe verständnis
« Antwort #3 am: 10 Januar 2019, 19:11:28 »
Hallo,

wenn ich eine Konfig neu einlesen muss, dann muss ich ein restart oder rereadcfg ausführen, was anderes ist mir nicht bekannt.

Ich wollte nur wissen, wie ich auf ein Event das ins Topic geschrieben worden ist auch nur einmal reagieren kann. Im Topic steht eine RFID(4737474), jetzt hat fhem eine EVENT daraus generiert. Starte ich fhem neu oder mache ein rereadcfg, dann subscriped sich das Device das Topic und generiert schon wieder ein Event.

Ich weiss das ein Event wenn es ins topic geschrieben worden ist, das dieses Event auch abgeholt werden muss bzw. bestätigt werden muss, damit der broker das nicht immer wieder ausliefert.

Oder habe ich hier ein denkfehler?

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4640
    • tech_LogBuch
Antw:Mqtt topic subscribe verständnis
« Antwort #4 am: 10 Januar 2019, 21:50:32 »
wenn ich eine Konfig neu einlesen muss, dann muss ich ein restart oder rereadcfg ausführen, was anderes ist mir nicht bekannt.
Im Zweifel immer Restart. Rereadcfg hat bei mir oft sonderbaren Nebenwirkungen gezeigt. Ist an dieser Stelle jedoch irrelevant.

Ich wollte nur wissen, wie ich auf ein Event das ins Topic geschrieben worden ist auch nur einmal reagieren kann. Im Topic steht eine RFID(4737474), jetzt hat fhem eine EVENT daraus generiert. Starte ich fhem neu oder mache ein rereadcfg, dann subscriped sich das Device das Topic und generiert schon wieder ein Event.
Der größte Fehler ist derzeit hier nicht die Konfiguration zu posten. Wie schade, dass meine Glasskugel immer noch nicht vom Polieren zurück ist :/
Keine Ahnung, wie Dein Notify definiert ist. Vlt. hat es nur damit zu tun, dass bei FHEM-Start IMMER die alten Werte mit 'setreading' gesetzt werden. Somit werden alle Readings einmal 'geändert'. Das 'subscribe' alleine ändert nichts. Und wenn, dann wurde eine Wert mit Retain-Flag gesendet. Dann passiert das natürlich bei jedem Restart. Und auch beim Reconnect. Ist ja auch so gewollt.

Ich weiss das ein Event wenn es ins topic geschrieben worden ist, das dieses Event auch abgeholt werden muss bzw. bestätigt werden muss, damit der broker das nicht immer wieder ausliefert.
Nicht ganz sicher, wie genau Du das meinst, aber klingt nicht nach richtig. Ob eine Übertragung bestätigt werden muss, hängt von QOS-Level ab. Bei 0 wird gar nichts bestätigt. Bei 1 der Empfang (was jedoch im einem IP-Netz nicht wirklich eine Bedeutung hat). Bei 2 müssen beide Seiten quittieren. MQTT2*-Module unterstützen QOS2 gar nicht, MQTT-Modul - da bin ich mir auch nicht ganz sicher. Und wenn man ein Wert mit Retain-Flag schickt, wird dieser Wert immer (und immer wieder) neu versendet, bis ein anderer Wert an diesem Topic mit Retain(!) gesendet wird. Auch ein Senden am gleichen Topic ohne Retain ändert nichts daran. Erst ein Senden von NULL-Wert mit Retain löscht es weder.

Aber das ist alles nur die graue Theorie. Mangels Details weiß ich immer noch nicht, was das Problem ist. Ich bin zu müde zum Weiterraten...
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

 

decade-submarginal