fix(display): reinit() nach Display-Einschalten via MQTT und Web-Toggle (FR-018, v1.6.2)

This commit is contained in:
MaPaLo76 2026-04-01 23:50:55 +02:00
parent e964beab7c
commit a5717b2bc0
4 changed files with 16 additions and 1 deletions

View File

@ -23,6 +23,15 @@ Status: `[ ]` = offen · `[x]` = erledigt
## Erledigt
### Version 1.6.2
- [x] **FR-018** Bug: `display.reinit()` wird beim Display-Einschalten nicht aufgerufen ✅
- **Symptom**: Nach dem Einschalten des Displays per MQTT-Befehl (`{"display":true}`) oder Web-Toggle konnte das Display gestört sein (leere Module, keine Sekundenanzeige), weil die MAX7219-Kontrollregister nach einem EMV-Spike nicht neu gesetzt wurden.
- **Ursache**: In FR-014 (v1.5.2) wurde `display.reinit()` nur in `LaserTracker::onSessionStart()` und `onSessionEnd()` aufgerufen. Der MQTT-CMD-Handler (`{"display":true}`) und der Web-Toggle-Handler (`POST /display-toggle`) riefen nur `setEnabled(true)` auf, aber kein `reinit()`.
- **Fix**: `display.reinit()` nach `setEnabled(true)` in beiden Handlern ergänzt (MQTT-CMD und Web-Toggle).
- **Betroffene Dateien**: `src/mqtt_client.cpp`, `src/web_server.cpp`
- Commit: *(offen)*
### Version 1.6.1
- [x] **FR-017** Bug: Maschinenlaufzeit ist in HA nicht verfügbar (MQTT Discovery Sensor fehlt) ✅

View File

@ -23,7 +23,7 @@ build_flags =
-DCORE_DEBUG_LEVEL=1 ; 0=keine, 1=Fehler, 3=Info, 5=Verbose
-DARDUINO_LOOP_STACK_SIZE=8192
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
-DFIRMWARE_VERSION='"1.6.1"' ; Semantic Versioning hier erhöhen bei neuem Release
-DFIRMWARE_VERSION='"1.6.2"' ; Semantic Versioning hier erhöhen bei neuem Release
lib_deps =
majicDesigns/MD_Parola @ ^3.7.3
majicDesigns/MD_MAX72XX @ ^3.5.1

View File

@ -563,6 +563,9 @@ void MqttClient::onMessage(const char* topic, byte* payload, unsigned int length
if (!vDisplay.isNull()) {
bool on = vDisplay.as<bool>();
display.setEnabled(on);
if (on) {
display.reinit(); // FR-018: Kontrollregister nach EMV-Spike neu setzen
}
LOG_I("MQTT", "CMD display -> %s", on ? "an" : "aus");
// Sofortiges Feedback an HA (kein 60s warten auf naechsten Heartbeat)
mqttClient.publishHeartbeat();

View File

@ -262,6 +262,9 @@ void WebServerManager::registerRoutes() {
// --- POST /display-toggle Display ein-/ausschalten (öffentlich) ----------
_server->on("/display-toggle", HTTP_POST, [this](AsyncWebServerRequest* request) {
display.setEnabled(!display.isEnabled());
if (display.isEnabled()) {
display.reinit(); // FR-018: Kontrollregister nach EMV-Spike neu setzen
}
mqttClient.publishHeartbeat(); // FR-015+016: HA-Update + WS-Push
LOG_I("WEB", "Display %s", display.isEnabled() ? "an" : "aus");
request->send(204); // No Content Browser bleibt auf aktueller Seite