Habe das gestern mal getestet und keine Fehler gefunden - sehr fein.
Allerdings gibt’s noch Fehler, wenn man das Ganze frisch geflasht und in’s WLAN gebracht hat, wohingegen die MQTT-Konfiguration noch nicht erfolgt ist:
E (24568) esp-tls: [sock=48] select() timeout
E (24569) transport_base: Failed to open a new connection: 32774
E (24569) mqtt_client: Error transport connect
E [11908] MQTT_EVENT_ERROR. Last errno string (Success)
I [26919] Other event id:7
E (49587) esp-tls: [sock=48] select() timeout
E (49588) transport_base: Failed to open a new connection: 32774
E (49588) mqtt_client: Error transport connect
E [36927] MQTT_EVENT_ERROR. Last errno string (Success)
I [51938] Other event id:7
D [60007] RSSI: -72 dBm
E (74606) esp-tls: [sock=48] select() timeout
E (74606) transport_base: Failed to open a new connection: 32774
E (74606) mqtt_client: Error transport connect
E [61945] MQTT_EVENT_ERROR. Last errno string (Success)
I [76957] Other event id:7
E (99625) esp-tls: [sock=48] select() timeout
E (99625) transport_base: Failed to open a new connection: 32774
E (99626) mqtt_client: Error transport connect
E [86964] MQTT_EVENT_ERROR. Last errno string (Success)
I [101976] Other event id:7
E (124644) esp-tls: [sock=48] select() timeout
E (124644) transport_base: Failed to open a new connection: 32774
E (124645) mqtt_client: Error transport connect
E [111984] MQTT_EVENT_ERROR. Last errno string (Success)
Ich bin dann mal hingegangen und habe über das Webinterface MQTT deaktiviert. Tue ich das, so passiert das:
E (9995) mqtt_client: Client was not initialized
E (9996) mqtt_client: Client was not initialized
E (59996) mqtt_client: Client was not initialized
Folgende Anpassungen würde ich vornehmen:
- Zuerstmal glaube ich, dass wir Benutzer und Passwort leeren sollten. Wer stattdessen Auth nutzt, der konfiguriert es sich halt. Nutzt das jmd. nicht, dann muss es aktuell aktiv gelöscht werden - das ist (aus meiner Sicht) eher nicht das, was man erwartet. Diese Erkenntnis ist nicht neu für mich, aber jetzt sind wir eh gerade dran
. Und bei der Gelegenheit leeren wir auch gleich den Server, weil es gibt keine Notwendigkeit, dass die IP-Adresse, die für mich mal gepasst hat, auf Ewigkeiten hier im Code steckt
.
String gMqttServer = „“; …
String gMqttUser = „“; // MQTT-user
String gMqttPassword = „“; // MQTT-password
- Per default MQTT deaktivieren, so dass es nur diejenigen aktivieren, die es brauchen (über das Webinterface).
static bool Mqtt_Enabled = false;
Was dann aber weiterhin noch (zyklisch) bleibt, auch ohne konfiguriertes WLAN, ist:
mqtt_client: Client was not initialized
Das kriegt man weg, indem man in den publishMqtt()-Funktionen Folgendes an den Anfang setzt:
if (mqtt_client == NULL) {
return false;
}
Dann kommt die Meldung nur noch einmal nach dem Start und die kriegt man weg, indem man in Mqtt_OnWifiConnected() ganz oben quasi das Gleiche integriert:
if (mqtt_client == NULL) {
return;
}
Man könnte das über Statusflags und z.B. einer Mqtt_isConnected() auch schöner machen, aber vielleicht unterdrückt man damit (ungewollt) auch Meldungen im Fehlerfall. Daher: Vielleicht belässt man es bei der NULL-Prüfung, außer du hast ne bessere Idee.
Dann ist mir noch aufgefallen, dass das Event MQTT_EVENT_BEFORE_CONNECT aktuell nicht behandelt wird. Nicht, dass wir das unbedingt bräuchten, aber es verursacht „Other events“ im Log. Habe das auch noch eingefügt, so dass diese verschwinden.
Dann war bei „Other event id“ im Log für mich nicht so wirklich klar, woher dieses Event eigentlich kommt. Habe daher den Präfix "MQTT: " eingefügt.
Ich habe alles mal in ein gist gepackt (das ich wieder lösche irgendwann), damit du dir das einfach per C&P rausholen kannst:
Kannst einfach in deinen PR integrieren (soweit für dich sinnvoll).