ESP8266 PubSubClient spinnt

Gast #6020835
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
Gast
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.
Gast
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....
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.