jomjol / AI-on-the-edge-device

Easy to use device for connecting "old" measuring units (water, power, gas, ...) to the digital world
https://jomjol.github.io/AI-on-the-edge-device-docs/
5.89k stars 640 forks source link

Make LWT retained #226

Closed syssi closed 3 years ago

syssi commented 3 years ago

Es waere toll, wenn alle Nachrichten auf dem Topic "error" retained waeren (inkl. LWT):

https://docs.espressif.com/projects/esp-idf/en/v3.3/api-reference/protocols/mqtt.html#_CPPv4N24esp_mqtt_client_config_t10lwt_retainE https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/mqtt.html#_CPPv423esp_mqtt_client_publish24esp_mqtt_client_handle_tPKcPKciii

jomjol commented 3 years ago

Gute Idee, ich werde es in die nächste Version mit aufnehmen. Momentan kämpfe ich gerade mit einem Update auf eine höhere Programmierumgebung (ESP-IDF v4.2.1). Dort läuft leider die Kamera nicht stabil genug. Sobald ich das gelöst habe (oder aufgegeben ;-)), geht es weiter.

jomjol commented 3 years ago

Habe das jetzt in die Rolling eingestellt, bin mir aber nicht sicher, woran ich in iobroker erkennen kann, ob es auch funktioniert. Bitte gerne testen und RM (wie gesagt Branch "rolling").

syssi commented 3 years ago

Ich muss zugeben, dass ich bisher immer so faul war und das Binary aufgespielt habe. Beim Rolling-Release bin ich gezwungen selbst zu bauen, richtig?

jomjol commented 3 years ago

Nein - auch dort findest du die Binary im Firmwareverzeichnis. Full Service ;-)

syssi commented 3 years ago

Oooh, du checkst alles ein. Perfekt! Ich dachte bisher, dass nur die Bundles in der Release-Section das Rundum-sorglos-Paket sind.

syssi commented 3 years ago

Testen koenntest du es z.B. per mosquitto_sub. Sobald du dich an den MQTT-Broker anmeldest solltest du bereits mit einer Nachricht auf dem Topic "error" empfangen werden. In anderen Worten: Beim Login bekommt der Client alle Retained-Nachrichten präsentiert. Dann gilt es nur noch zu testen, ob du alle Publish-Calls auf dem Topic erwischt hast oder ob einer vergessen wurde.

syssi commented 3 years ago

Ich vermisse im Code das Retained-Flag an diesen beiden Stellen:

https://github.com/jomjol/AI-on-the-edge-device/blob/rolling/code/components/jomjol_mqtt/interface_mqtt.cpp#L72 https://github.com/jomjol/AI-on-the-edge-device/blob/rolling/code/components/jomjol_mqtt/interface_mqtt.cpp#L91

Meines Erachtens müsste die esp_mqtt_client_config_t um die Setting lwt_retain erweitert werden:

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/mqtt.html#last-will-and-testament

In Zweile 91 fehlt der 3. Parameter.

jomjol commented 3 years ago

Danke für den Hinweis, bin kein MQTT-Experte. Den Vorschlag habe ich gerade eingearbeitet und hochgeladen (inkl. firmware.bin). Ich weiss selber nicht genau, wie ich erkennen kann, ob das mit dem retain_flag jetzt funktioniert, da ich außer dem iobroker keinen mqtt-broker verwende. Bitte gerne testen und RM.

jomjol commented 3 years ago

Umgesetzt, keine weiteren Aktivitäten. Bitte gerne wieder öffnen.

syssi commented 3 years ago

Getestet. Funktioniert perfekt! Danke!!