Seit ich gestern auf das aktuelle Nightly umgestellt habe, häufen sich die Verbindungsprobleme mit meinem mosquitto Broker. Meine vorherige Version war auch das nighly (0.8.0-27xx). Dadurch gehen massiv mqtt-Nachrichten verloren.
10/10/19 11:59:08.551 Node-BLUE (1926): Node 5cf6d1d3.6e689: Warning: Connection to MQTT server closed.
10/10/19 11:59:13.551 Node-BLUE (1926): Node 5cf6d1d3.6e689: Error: No response received to packet: 3A090000506C66616C7365
10/10/19 11:59:13.551 Node-BLUE (1926): Node 5cf6d1d3.6e689: Warning: No PUBACK received.
Die Node ist meine mqtt-Broker Konfigurations-Node.
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
password_file /etc/mosquitto/passwd
allow_anonymous false
Ich habe einen nagelneuen Raspberry Pi 4 mit mosquitto broker aufgesetzt. Node-Blue habe ich dann umkonfigueriert, diesen zu benutzen.
Es gab exakt das gleiche Problem. @sathya, kannst du nachvollziehen, was zwischen 2731 und 2735 bezüglich mqtt passiert ist? Im Quellcode finde ich nichts, was darauf hindeutet.
Oder kann es sein, dass das Upgrade auf 2803 die mqtt-Nodes verändert hat, so dass diese nicht mehr zuverlässig funktionieren?
Ich habe das Problem weiter eingegrenzt und es tritt nur bei der mqtt-out Node auf.
Da das Downgrade nichts gebracht hat, bin ich jetzt wieder auf das aktuelle nightly 0.8.0-2808 gegangen.
Im aktuellen Quellcode (Zeilen 54-55) ist mir folgendes aufgefallen:
Meiner Ansicht nach, bedeutet das, dass _retain nur einen sinnvollen Inhalt hat, wenn retain in der Info-Struktur vorhanden ist. Ansonsten ist es undefiniert. Allerdings ist mein C-Wissen etwas eingerostet, und das mag auch irrelevant sein.
In der Dokumentation ist beschrieben, dass man topic/retain leer lassen soll, wenn man das topic/retain über die Message-Struktur setzen will. So wie ich das interpretiere, wird aber immer das topic aus der Message genommen, falls es vorhanden ist. Nur wenn in der Message kein topic ist, wird das aus der nodeinfo-Struktur genommen.
Der Code müsste meiner Ansicht nach so lauten. damit es wie in der Hilfe beschrieben steht funktioniert. Es fehlt noch eine Prüfung, ob in der Message der Topic gesetzt ist und etwas Fehlerhandling. :
Durch einen dummen Zufall war bei meiner Heizungssteuerung in einigen Fällen das topic = "" und genau das bringt die Konfigurationsnode zum Absturz und Verlust der Verbindung zum Broker. Alles was auch an dieser Konfigurationsnode hängt funktioniert dann ca. 10-20 Minuten nicht mehr.
die entsprechende Änderung habe ich gepushed. Vielen Dank! Aber bist du dir sicher, dass das das Problem löst? Wenn es im Nachrichtenobjekt ein leerer String ist, sollte retain einfach false sein. Das dürfte der Verbindung nichts ausmachen…