Wie kann ich einen MQTT Client per API sauber reconnecten?

Hi,
ich habe eine Frage zum MQTT Client und einem möglichen programmatischen Reconnect.

Ich habe ein Modul, das an einen MQTT Client als Parent angebunden ist und MQTT-Discovery-Daten aus homeassistant/…/config Topics einsammelt. Für Diagnose- und Exportzwecke möchte ich gezielt einen frischen Reconnect des MQTT-Clients auslösen, damit die retained Topics vom Broker erneut eingelesen werden.

Mein bisheriger Versuch war, den MQTT-Client per

IPS_DisconnectInstance($mqttClientId);
IPS_ConnectInstance($mqttClientId, $ioParentId);

neu zu verbinden.

Das scheint aber keinen echten MQTT-Reconnect mit erneutem retained Replay auszulösen, zumindest nicht so, wie ich es erwartet hätte.

Wie wäre die empfohlene Vorgehensweise?

Burkhard

Reconnect wäre, wenn du den IO schließt und öffnest.

Allerding fehlt mir das Verhalten auch.
Ich hätte mehrere Ideen, aber @paresy ist da noch nicht drauf eingeganen :wink:

  • Der MQTT Client merkt sich alle Retain Messages, wie auch der Server, und lässt eine Abfrage per PHP Befehl zu.
  • Besser noch er sendet dieser automatisch an eine sich neu verbindende Instanz.
  • Oder man kann diese sogar über den Datenfluss anfordern, was auch beim Server super wär.
  • Auch das der Server automatisch retain Nachrichten verwirft, ist irgendwie doof. Das gibt es imho erst mit MQTT 5 (MQTT 5.0 allows setting a Message Expiry)

Edit: Und ja, MQTT 5 wäre auch fein :laughing:

2 „Gefällt mir“

Alles klar, dann gibt es wohl nichts „eleganteres“. So habe ich es nun gemacht und es funktioniert auch :slight_smile:

Willkommen im Club :slight_smile:

1 „Gefällt mir“