-
Notifications
You must be signed in to change notification settings - Fork 670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Failed to publish topic - MQTT #1990
Comments
Aus welchen Gründen auch immer scheint der MQTT Service nicht der stabilste zu sein. Ein automatischer Reconnect ist bereits implementiert. Der Dienst versucht sich alle 15s neu zu verbinden. In der Regel klappt das bisher auch immer, wodurch die Daten in der Folgerunde wieder übermittelt werden. Warum dies bei dir nicht passiert ist, ist schwer zu sagen. Gab es im Log irgendwelche weitere Fehlermeldungen bzw. sonstiges Auffälligkeiten? Ist die WLAN Verbindung stabil? |
Ich habe das Verhalten jetzt einen Tag lang beobachtet. Die WLAN-Verbindung ist stabil. Ich habe einen AP direkt neben das Modul gehängt, um Verbindungsprobleme auszuschließen. Ich habe im Protokoll allerdings in der Tat eine Auffälligkeit gefunden. Der MQTT Fehler tritt immer dann auf, wenn der aktuell gelesene Wert kleiner als der vorherige Wert war und "negative Werte nicht zulassen" eingestellt ist. Schaut man sich aber händisch den aktuell gelesenen Wert an, ist er wieder höher und wird auch richtig erkannt. Es scheint aber einen Zusammenhang zwischen dem Abfangen des negativen Wertes und dem MQTT Service zu geben. |
Meinst du hierbei Fehler im Sinne des Fehlers im Log wie oben beschrieben |
Es tritt in der Tat beides ein. Die Zeile mit dem steht im Log und danach werden auch keine Werte mehr gesendet. Ich lasse parallel den MQTT Explorer mitlaufen und auch der sieht keine Übergabe der Werte mehr. |
Ich habe jetzt noch ein bisschen gespielt. Wenn ich beim MQTT Dienst alles abstelle, das ich abstellen kann (z.B. HA Pakete) und im HA die Definition des Sensors händisch in die configuration.yaml eintrage, läuft das System signifikant stabiler. Dann funktioniert auch der Neustart des MQTT Dienstes. Zumindest läuft er jetzt schon seit 12 Stunden, was vorher nicht möglich war. Kann es sein, dass das Device einfach zu viele MQTT Informationen im Standard schickt? Könnte man einstellbar machen, wie das MQTT Paket aussehen soll? |
raebbaer: Danke für die weitere Investigation. Es ist in der Tat so, dass bei aktiviertem HA Discovery aktuell bei jedem MQTT Verbindungsaufbau sehr viele MQTT Pakete gesendet werden. Dies kannst du nur unterbinden, indem, wie bereits getan hast, das HA Discovery in der Config deaktivierst. Mit deaktivertem Discovery werden nur noch die Resultate und Systeminfos nach erfolger Auswertung in jeder Runde einmalig gesendet. Hier sollte die "Systemlast" nicht allzu hoch sein und vor allem es wird deterministisch immer erst nach der Bildauswertung gesendet. @jomjol: FYI |
@Slider0007: Sehr gerne. Ich habe heute weiter beobachtet. Das System läuft jetzt sehr stabil. Ab und zu fehlt ein Messwert - aber das kann auch an veränderten Lichtbedingungen liegen. Das System läuft aber bereits seit über einem Tag stabil durch. Aus meiner Sicht ist das ein sehr guter Ansatz: Ein Knopf mit dem man die HA Anmeldung senden kann. Ansonsten raus aus dem Speicher. Herzlichen Dank für dieses tolle Projekt! |
@Slider0007 Ja, die HA Discovery Pakete braucht es eigentlich nur beim Einrichten. Es macht aus meiner Sicht Sinn, dass wir das so umbauen, dass es nur nach dem ersten Connect gesendet wird und danach vom Anwende rgetriggert werden muss. Dazu hat es ja schon einen Link in der Config. Das könnte man sicher noch schöner machen mit einem Button. Grundsätzlich gilt: Wenn HA das Gerät mal discovered hat, braucht es die Discovery Topics nicht mehr..
Wie kommst Du auf diese Werte? Die HA Discovery Topics werden doch on-the-fly generiert! |
Ich denke auch, dass dies für das System sicher besser wäre. Der Nachteil sollte dadurch nicht allzu groß sein. Ich würde empfehlen das manuelle Antriggern zusätzlich noch so verriegeln, dass dies nicht bei aktivem Flow ausgelöst werden kann, z.B. nur im State "Flow finished", um das System während des Processings nicht unnötig zu belasten.
Es ist richtig, dass die Pakete in der Applikationsschicht on-the-fly generiert werden. Die Daten müssen aber noch versandt werden (durch IP und Wifi Layer Schicht). Dort wird der notwendige RAM teilweise dynamisch im DMA Bereich allokiert. Zusätzlich kommt worst case noch die Protokollierung der Pakete im DEBUG Level dazu, welches auch zusätzlich DMA benötigt, um über die Schnittstelle zur SD zu gelangen. Eine grobe Abschätzung des RAM Einsatzes kannst du durch Aufruf von http://IP/heap jederzeit zur Laufzeit anschauen (hier interessant -> Int Min Free). Hierbei ergibt es bei mir ein Delta von ca. 12-15kB bei aktiviertem HA Discovery und dann deaktivierter Funktion (restliche Konfig unverändert, DEBUG level). Inkl. Sicherheitsmarge ergibt sich somit der hier genannte Wert von 15kB-20kB. Details sind hier zu finden: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html |
Habe das gleiche oder ein ähnliches Problem, lief tagelang problemlos, dann ab 19:00 Uhr ging das Device bei HA offline. Neustart von HA hat nicht geholfen. Mit dem Reboot des Aiontheedge-ESP32 ging es gleich wieder. Release: v14.0.3 (Commit: 6c891ab+). Errorlog auf dem AIOTE: Interessanterweise werden die Daten weiter erkannt und auch bei mqtt hochgeladen, wenn auch der status auf "connection lost" bleibt, vielleicht liegt das Problem am fehlenden status update?: bei Grafana wird auch der Wert weiter registriert (über Telegraf): |
Kannst Du das etwas genauer erläutern? |
Tatsächlich ist das die Ursache, das Problem ist zumindest zum Teil reproduzierbar: Wenn ich connection auf "connection lost" setze, geht das Gerät bei Home Assistant auf "nicht verfügbar", sobald ich "connected" publishe, werden wieder sämtliche Werte bei HA angezeigt. |
Zeig doch bitte mal das DEBUG Log von der Situation. |
Log war nur auf error level gesetzt in der configuration. Mehr als den einen Eintrag gibt es somit leider nicht. Die connect message scheint ja beim reconnect nicht gesendet worden zu sein, jedenfalls nicht angekommen zu sein? Ein Update des connection status erfolgte dann über Stunden nicht. Der reconnect muss ja inklusive Authentifizierung erfolgt sein, sonst können doch keine Daten hochgeladen werden? Den Fehler müsste man doch durch eine Kontrollabfrage oder (blindes) Updaten korrigieren können? |
Ich habe schon Tage und Abende investiert um MQTT besser zum laufen zu kriegen. Irgendwie scheint in der Bibliothek der Hund drin zu sein. |
Ich habe das Phänomen auch gerade bei 14.0.3. Ich habe ziemlich schlechtes WLAN Signal am Wasserzähler. Hatte es zum Teil darauf geschoben. Mit 13.0.8 lief das aber noch runder. Es kommt aktuell in jeder Runde ca. 40 Sekunden nach der Statusmeldung "Digitalization of ROIs" ein "connection lost". Ich habe jetzt seit fast einer Stunde den Loglevel auf DEBUG stehen. Log hängt an. |
@simonwes: Es scheint, dass du kurzzeitig kein WIFI hast, daher ggf. auch der Verbindungsabbruch von MQTT 0dBm --> keine Wifi Verbindung Vermutung: |
Das Problem ist ja oben benannt. Der connection status wird nicht zuverlässig aktualisiert. Da dieser bei manueller Definition der Sensoren in der config.yaml nicht beachtet wird, kommt es bei dieser auch nicht zu Fehlern. Nur HA auto discovery mqtt führt zu dem beschriebenen 'Nicht verfügbar'. Ansonsten funktioniert mqtt grundsätzlich ja und der Wert wird weiter aktualisiert, mal schauen wie häufig das Problem auftritt. |
@friedpa: Ich habe einen FRITZ!Repeater 1200 AX im Einsatz. Vielleicht liegt es ja an dem Modell? Was verwendest Du denn für einen Typ? Mit der LAN-Brücke funktioniert es: @fhb: Ja, korrekt. Allerdings hat er bei mir mit aktivierter HomeassistantDiscovery nicht wirklich funktioniert. Da sendet der ESP32 schlichtweg keine bzw. nur sehr selten MQTT Pakete. Ich habe parallel den MQTT Explorer mitlaufen lassen, um das unabhängig von der HA-Visualisierung zu prüfen. |
Das eine Gerät hängt an einem 310er der andere an einem 600er. Nicht vergessen, dass man das 2,4Ghz Band aufdreht. |
Gemäss #2020 (comment) funktioniert das Wifi Roaming noch gar nicht! @Slider0007 schaut sich das mal noch an. |
Es wurde bis jetzt nur nach dem connect aktualisiert. Falls das schief lief, wurde es später nicht mehr aktualisiert. Da dieser bei manueller Definition der Sensoren in der config.yaml nicht beachtet wird, kommt es bei dieser auch nicht zu Fehlern. Nur HA auto discovery mqtt führt zu dem beschriebenen 'Nicht verfügbar'. Ansonsten funktioniert mqtt grundsätzlich ja und der Wert wird weiter aktualisiert, mal schauen wie häufig das Problem auftritt. HA verwendet den status nur mit dem Discovery. Ich schliesse diesen issue daher mal. Die ganze Problematik mit dem Wifi Roaming sollten wir in einem separaten issue diskutieren: #2092. Resp. es ist schon bekannt, dass es noch nicht funktioniert. |
Hello. |
@mihail4anov this issue is quite old and related to an older version. Please create a a separate bug with additional information. Eg. is the wifi link stable? Whats the RSSI? |
The Problem
Das ESP32 Modul läuft ohne Probleme, setzt die aufgenommenen Bilder auch 100% korrekt in Zahlenwerte um und bringt nach einer Zeit X (und ich habe noch keinen zeitlichen Zusammenhang feststellen können) folgende Fehlermeldung:
[0d21h46m41s] 2023-02-06T18:40:18 [MQTT IF] Failed to publish topic 'gas/freeMem', skipping all MQTT publishings in this round!
Danach bleiben die MQTT Pakete aus, auch wenn der ESP32 nach wie vor Bilder macht und digitalisiert. Von daher bekommt der Home Assistant keine neuen Daten mehr geliefert. Ich verwende die neuste HA-Version mit mosquitto broker.
Herzlichen Dank im Voraus.
Version
14.0.3
Logfile
Expected Behavior
Der ESP32 sollte seinen Dienst im Bereich MQTT nicht nach einer undefinierten Zeit einstellen. Und wenn der Fehler auftritt, sollte der MQTT-Dienst automatisiert neugestartet werden. Ich muss allerdings händisch rebooten, um wieder neue Pakete zu erhalten.
Screenshots
No response
Additional Context
No response
The text was updated successfully, but these errors were encountered: