Forum: Mikrocontroller und Digitale Elektronik ESP8266 PubSubClient spinnt


von ESPler (Gast)


Lesenswert?

Hallo zusammen

Ich versuche mithilfe des PubSubClients mit einem MQTT Broker zu 
kommunizieren. Dies klappt auch grundsätzlich ganz gut.

https://github.com/knolleary/pubsubclient

Nun zum Problem. Wenn ich einen Disconnect mache und diesen dann prüfe 
um daraufhin erneut zu verbinden, bekomme ich immer nur -2 (No Internet) 
als Antwort zurück.
1
void reconnect()
2
{
3
  Serial.println("Connecting to MQTT...");
4
  client.disconnect(); 
5
  if(!client.connected())
6
  {
7
     char tmpString[100];
8
     client.connect(.....);
9
  }
10
}

Wenn ich nun aber die reconnect funktion durch einen callback meines 
WebServers aufrufe, klappt der Reconnect. Wirklich sehr paradox.

Ich habe auf dem ESP noch einen Webserver am laufen
1
ESP8266WebServer server(80);

mit diesem höre ich mittels .on auf verschiedene adressen.
1
server.on("/connectMQTT", reconnect);

Wird der reconnect vom server aufgerufen, klappts. Wird der Reconnect 
mittels eines SW-Timers im Callback aufgerufen, klappts nicht!

Fehlermeldung:
1
Connecting to MQTT...
2
:ref 1
3
:ctmo
4
:abort
5
:ur 1
6
:del
7
failed with state -2

Hat jemand eine Idee, wo zu suchen ist?
Danke

von Stefan F. (Gast)


Lesenswert?

Hast du den Autor von PubSubClient gefragt?

Ich würde mich an deiner Stelle an diesen Bug Report anhängen: 
https://github.com/knolleary/pubsubclient/issues/619

Während du auf die Antwort wartest, probiere eine ältere Version vom 
ESP8266 Core. Ich bin mit Version 2.3.0 gut zurecht gekommen, mit 2.4.x 
und 2.5.0 hingegen nicht. Von da an habe ich aufgegeben, auf eine 
funktionierendeneue Version zu warten. Ich nutze wieder 2.3.0.

von ESPler (Gast)


Lesenswert?

Danke für den Tipp
Hab mich soeben an den Bug Report gehängt.

Zudem hab ich versucht von 2.4.1 auf 2.3.0 abzustufen.
Leider kann ich dann nicht mehr kompilieren....

von ESPler (Gast)


Lesenswert?

Ok Problem erkannt!

Ich darf den reconnect nicht aus dem Timer Callback heraus aufrufen!
Dann gehts

von Stefan F. (Gast)


Lesenswert?

ESPler schrieb:
> Hab mich soeben an den Bug Report gehängt.

Du solltest das nochmal ordentlich formatieren und tmpString raus nehmen 
oder klarstellen, was du mit tmpString anstellst.

Überhaupt finde ich, dass dein Codeschnipsel zum Nachvollziehen nicht 
ausreicht. Du musst dem Autor schon etwas compilierbares bieten, womit 
er das Problem nachvollziehen kann.

von Stefan F. (Gast)


Lesenswert?

ESPler schrieb:
> Ok Problem erkannt!
> Ich darf den reconnect nicht aus dem Timer Callback heraus aufrufen!

Warum schreibst du das dann nicht in den Bug Report? Soll die Lösung 
(bzw. Erklärung) dein persönliches Geheimnis bleiben? Möchtest du, dass 
der Autor der Bibliothek jetzt seine Wertvolle Zeit damit vergeudetet, 
das Problem zu untersuchen und eine Lösung für dich zu finden?

Du willst doch kein Arsch sein - hoffe ich mal.

von ESPler (Gast)


Lesenswert?

Danke.

Habs in meinen Comment hinzugefügt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.