Neues Namensschema für MQTT

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:

  1. 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 :slight_smile:. 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 :rofl:.

String gMqttServer = „“; …
String gMqttUser = „“; // MQTT-user
String gMqttPassword = „“; // MQTT-password

  1. 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).

1 „Gefällt mir“

Sehr cool! Werde hoffentlich heute Abend dazu kommen. Hatte mich wohl zu sehr auf eine funktionierende Basis verlassen :slight_smile: .
Klasse, dass du das alles noch gefunden hast!

1 „Gefällt mir“

Ich glaube was auch noch gut wäre:

a) In der settings.h beschreiben, wofür diese „Teiltopics“ nun gut sind.
b) Im Webinterface so nen Tooltipp dranhängen, in dem steht, dass Änderungen erst nach Neustart aktiv werden.

Dann ist das Ganze aus meiner Sicht erstmal rund :+1:. Ich muss dann noch Doku schreiben/anpassen.

1 „Gefällt mir“

Hallo @Joe91 @biologist ich habe eben auch endlich getestet und finde das auch sehr gelungen. Die Feststellung dass ein Neustart notwendig ist habe ich auch gemacht. Danach haben beide meiner ESPuinos die erwarteten und erwartbaren Ergebnisse geliefert. Ich werde jetzt gleich noch die HA Integration mal rudimentär testen. Den Vorschlag zur Dokumentation in der settings.h finde ich sinnvoll, ich würde es aber vielleicht nicht für jedes Teiltopic speziell machen sondern nur generell scheiben wozu die gut sind und wie vor allem die Command Topics zu benutzen sind (vielleicht ein Beispiel zum setzen der Lautstärke). Den Tooltip fürs Webinterface finde ich ebenfalls sinnvoll. Daraus sollte hervorgehen ob die die einzige nutzbare gerätespezifische Konstante ist oder ob es weitere mögliche / sinnvolle gerätespezifischen Konstanten gibt

Genau, nur kurz schreiben, wofür diese „Gruppe“ dient.
Dokumentation passe ich dann hier an: 📗 ESPuino und MQTT. Vermutlich lasse ich den alten Teil da so stehen und füge „das Neue“ zusätzlich noch ein.

@Joe91 @biologist Also auch die Home Assistant Integration tut was Sie soll und soweit ich das bis jetzt testen konnte. Ich teste am Sonntag noch mal intensiver, aber bis jetzt schaut alles wunderbar funktional aus! Super Arbeit.

1 „Gefällt mir“

Hab’s gepusht. Hab jetzt auch gleich noch ne Meldung eingebaut, ob man direkt neu starten möchte, falls der Hinweis überlesen wird…
Die Doku in den settings und der readme hab ich mir von der KI helfen lassen, ist aber trotzdem ganz brauchbar geworden :wink:

2 „Gefällt mir“

So, das Thema ist nun vorerst abgeschlossen - wieder einen Haken mehr auf der Langzeit-Todo-Liste :smiley:

Vielen Dank @Joe91 für die Arbeit. Wenn jmd noch ein Problem findet… einfach hier reinschreiben. Die Doku muss ich noch aktualisieren hier im Forum.

2 „Gefällt mir“