NEWS
[Problem] MQTT ECONNRESET Fehler
-
Hallo iobroker Community,
ich nutze nun seit längerer Zeit Iobroker und bin sehr zufrieden damit.
Nun habe ich jedoch leider ein Problem mit dem MQTT Adapter womit ich selbst nicht mehr weiter komme, daher hoffe ich hier hat jemand vielleicht eine Idee oder kennt das Problem.
Das Problem sieht wie folgt aus:
Ich habe in meiner Wohnung mehrere Sonoff Produkte (Basic, Touch) und selbst gebaute Temperatursensoren auf ESP8266 Basis. All diese Module sind von mir selbst in der Arduino IDE programmiert worden.
Immer mal wieder wenn sich eines der Module neu verbindet mit dem MQTT Broker kommt folgende Fehlermeldung:
!
mqtt.0 2018-02-05 16:27:51.973 error Closed because of error mqtt.0 2018-02-05 16:27:51.972 warn Client error [ESP8266Client]: Error: read ECONNRESET mqtt.0 2018-02-05 16:27:51.295 info publishOnSubscribe mqtt.0 2018-02-05 16:27:51.294 info Client [ESP8266Client] subscribes on "mqtt.0.inTopic" mqtt.0 2018-02-05 16:27:51.269 info Client [ESP8266Client] connected !
Danach lassen sich keine Werte mehr an das Modul senden, das Modul selbst kann aber noch Werte an den Broker schicken, somit ist es noch verbunden.Nun habe ich mit einem Testprogramm versucht das Problem reproduzierbar zu machen. Hier der Code:
! ```
#include <esp8266wifi.h>#include <pubsubclient.h>const char* ssid = "*****"; const char* password = "***************"; const char* mqtt_server = "*******"; ! WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; ! void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } ! void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); if (now - lastMsg > 10000) { lastMsg = now; client.publish("outTopic", "hello world"); ESP.reset(); } } ! void setup_wifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } } ! void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ! void reconnect() { while (!client.connected()) { if (client.connect("ESP8266Client")) { client.publish("outTopic", "hello world"); client.subscribe("inTopic"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } }</pubsubclient.h></esp8266wifi.h>
! Das Modul verbindet sich, publish an outTopic, subsribe auf inTopic, 10s warten, publish an outTopic, Neustart.
! Dabei habe ich herausgefunden, dass der Fehler meist dann auftritt wenn der Datenpunkt von inTopic verändert wird währen das Modul gerade nicht an ist.
! Wurde an diesem Datenpunkt nichts verändert hat es sich immer wieder verbunden ohne Fehler.
! Nun weis ich nur nicht weshalb das so ist und wie ich es beheben könnte :?
! Vielen Dank schonmal an jeden der eine Idee hat.
! Iobroker läuft bei mir auf einem Raspberry Pi 3.
! MQTT version 1.4.1
! In einem anderen Thread habe ich gelesen, dass jemand den gleichen Fehler hat und dieser durch aktivieren des Patch für Chunking behoben wurde, dies brachte bei mir allerdings keinerlei Änderung.
! Zuletzt hier noch meine MQTT Einstellungen:
[/i]