NodeMCU / MQTT / Verbindungsüberwachung / Keepalive

Hallo Forum,

ich habe hier gleich mehrere Projekte, bei denen ich „nicht-Tasmota-Geräte“ per MQTT einbinden möchte. Darunter ein per „PubSubClient“ eingebundener ESP8266 und einige Siemens S71200er mit „LMQTT“. Das funktioniert soweit einwandfrei, Daten werden empfangen und gesendet. der Pingreq kommt auch einwandfrei an. hier ein Debug-Auszug der Serverinstanz:

TXT: 17.02.2022, 08:24:05 | BUFFER IN [10.8.2.78:57200] | �<NUL>
HEX: 17.02.2022, 08:24:05 | BUFFER IN [10.8.2.78:57200] | C0 00 
TXT: 17.02.2022, 08:24:05 |      MQTT:RX:PINGREQ | 
HEX: 17.02.2022, 08:24:05 |      MQTT:RX:PINGREQ | 

Meine Frage ist, wie kann ich nun das Keepalive auswerten, um eine Onlinemeldung zu erhalten und diese auf False zu setzen wenn der Ping nicht mehr kommt?
Bei den Tasmotas funktioniert das ja auch irgendwie…

Danke schonmal!

Morgen
Ich mache es so das alle meine Nodes eine Art Heartbeat in ein Topic schreiben. Dafür nehme ich die Zeit seit Start des Node. Update je nach Bedarf, zb. alle 1min oder 5min für Batteriedevices auch länger.

Dieses Topic geht in eine Variable und wird dort mit dem Watchdog Modul ausgewertet.

schöne Grüße
Bernhard

Das ist schon mal eine (keine schlechte) Idee, für mich aber eher ein Workarround, da ich wegen Mobilfunkanbindung Daten sparen muss und das Keepalive-Paket ja schon ankommt.

Ich habe das Problem nun selbst gelöst:
Der Schlüssel war der „Last Will“. Wenn man beim Client den Login unter Angabe des last Will ausführt (funktioniert bei den ESP’s genau so wie bei Siemens (LMQTT), wird beim Login festgelegt, welches Topic bei Verbindungsabbruch benutzt und was geschrieben werden soll.
In meinem Fall war dann das Topic /Kunde/Device/online mit dem Payload „false“.

Nach dem Login publishe ich einmalig in dieses Topic den wert „true“. (Also Online)
Wenn die Verbindung unterbrochen ist und der eingestellte Keepalive abläuft, wird automatisch vom Broker der Wert auf „false“ gesetzt.

Vielleicht hilft der Ansatz jemandem weiter.

Vielen Dank für die Erklärung.
Kann das sicher mal brauchen.

schöne Grüße
Bernhard