Hallo allerseits,
ich habe Probleme mit der MQTT Verbindung eines WemosD1mini (ESP8266).
Beim booten stellt dieser immer sofort erfolgreich eine Verbindung zum
Wifi und MQTT auf, doch die MQTT Vebindung bricht regelmäßig alle paar
minuten ab.
Ich habe einen MQTT-Reconnect eingerichtet, der diese Situationen
erkennt und eigentlich für einen Reconnect sorgen soll, damit nicht bei
jedem MQTT verbindungsabbruch ein Neustart ausgeführt wird.
Allerdings ist es dem Wemos noch nie gelungen, in den 90 Sekunden, in
denen der Reconnect läuft, auch tatsächlich die Verbindung wieder
aufzubauen.
Der Abbruch der Verbindung muss gleichzeitig vom Wemos selbst kommen, da
alle anderen Geräte eine konstante Verbindung beibehalten (die
Entfernung zum Router beträgt ca. 2Meter).
Besonders fällt mir dabei auf, dass hingegen ein NodeMCU (welcher auch
einen ESP8266 nutzt), keine Probleme hat den Reconnect auszuführen.
Ich musste ihn für Tests sogar zwingen, die MQTT-Verbindung zu
unterbrechen (habe den Broker kurz vom Strom genommen). Die
Reconnect-Schleife hatte aber sofort erfolg!
Hat vielleicht jemand von euch Erfahrungen/Ideen, wieso der Wemos
ständig selbstverschuldete MQTT-Abbrüche hat (die WLAN verbindung behält
er stattdessen konstant) und warum der Reconnect einfach nicht klappt?
Der exakt gleiche Code beim ja an sich recht gleichen NodeMCU läuft ja
perfekt und es kommt sogar garnicht zu regelmäßigen abbrüchen..
Die Reconnect-Schleife:
1 | void mqttReconnect() {
|
2 | if (!MQTTclient.connected()) {
|
3 | Serial.print("\nAttempting to connect to MQTT broker at ");
|
4 | Serial.print(mqtt_server);
|
5 |
|
6 | MQTTclient.connect(deviceID);
|
7 | unsigned long currentF = millis();
|
8 | unsigned long previousF = currentF;
|
9 | while (!MQTTclient.connected() && currentF - previousF <= 90000) { //90 sekunden = 90000
|
10 | delay(1000);
|
11 | Serial.print("-");
|
12 | currentF = millis();
|
13 | }
|
14 | if (!MQTTclient.connected()) {
|
15 | Serial.write("\nMQTT-Reconnect fehlgeschlagen. Automatischer Neustart in 3 sek!\n");
|
16 | delay(3000);
|
17 | ESP.restart();
|
18 | }
|
19 | else {
|
20 | Serial.println("\nConnected to MQTT broker\n");
|
21 | }
|
22 | }
|
23 | }
|