diff --git a/Implementation-Plan.md b/Implementation-Plan.md index ac967d6..88fb07c 100644 --- a/Implementation-Plan.md +++ b/Implementation-Plan.md @@ -169,25 +169,27 @@ ## Phase 7 – Webinterface (`WebServer`) -- [ ] **7.1** `include/web_server.h` + `src/web_server.cpp` erstellen +- [x] **7.1** `include/web_server.h` + `src/web_server.cpp` erstellen Basierend auf `ESPAsyncWebServer` -- [ ] **7.2** Route `GET /` – Statusseite (HTML): - - Aktuelle Laserzeit (Minuten) - - Letzter Session-Wert (Sekunden) - - WLAN-Status, MQTT-Status - - IP-Adresse +- [x] **7.2** Route `GET /` – Statusseite (HTML): + - Session-Minuten, Gesamtzeit, letzter Burst + - WLAN-Status (IP), MQTT-Status (verbunden/getrennt) + - Broker-Info, Gratiszeit + - Auto-Reload alle 10 s -- [ ] **7.3** Route `GET /config` – Konfigurationsformular (HTML): +- [x] **7.3** Route `GET /config` – Konfigurationsformular (HTML): - MQTT Broker IP, Port, User, Passwort - Gratiszeit (Slider 0–120 s) - Signal-Polarität (Radio-Button) -- [ ] **7.4** Route `POST /config` – Konfiguration speichern (via `Settings`, NVS) +- [x] **7.4** Route `POST /config` – Konfiguration speichern (via `Settings`, NVS) + Redirect + Hinweis „Neustart für MQTT-Änderungen" -- [ ] **7.5** Route `POST /reset` – Laserzeit zurücksetzen (Button auf Statusseite) +- [x] **7.5** Route `POST /reset` – Gesamtzeit zurücksetzen (`laserTracker.resetTotal()`) -- [ ] **7.6** ElegantOTA unter `/update` einbinden +- [x] **7.6** ElegantOTA unter `/update` einbinden + Flag `ELEGANTOTA_USE_ASYNC_WEBSERVER=1` in `platformio.ini` - [ ] **7.7** Test: Alle Seiten im Browser aufrufen, Konfiguration ändern und nach Neustart prüfen diff --git a/README.md b/README.md index 3279604..cdf93e9 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,8 @@ MQTT-Display-LaserCutter/ │ ├── laser_tracker.cpp # Signal-Detektion, Burst-Logik, Zeiterfassung │ ├── settings.cpp # NVS-Persistenz (Preferences) │ ├── wifi_connector.cpp # WiFiManager-Wrapper -│ └── mqtt_client.cpp # MQTT-Wrapper (PubSubClient, TLS, Phase 6) +│ ├── mqtt_client.cpp # MQTT-Wrapper (PubSubClient, TLS, Phase 6) +│ └── web_server.cpp # Webinterface (ESPAsyncWebServer, Phase 7) ├── include/ │ ├── config.h # Pin-Definitionen, Konstanten │ ├── display_manager.h # Display-API (showLaserTime, showCountdown, ...) @@ -331,6 +332,7 @@ MQTT-Display-LaserCutter/ │ ├── test_display_manager.cpp # 4.3 - DisplayManager │ ├── test_laser_tracker.cpp # 5.6 - LaserTracker │ ├── test_mqtt_client.cpp # 6.5 - MqttClient (TLS, Session, Heartbeat) +│ ├── test_web_server.cpp # 7.7 - WebServer (Routen, Config, OTA) │ └── mqtt_test_secrets.h # (gitignoriert) persönliche Broker-Credentials ├── platformio.ini └── README.md @@ -352,6 +354,7 @@ Alle Tests sind Hardware-Tests (kein Unit-Test-Framework). Sie werden als separa | 4.3 | `test-display-mgr` | `test_display_manager.cpp` | DisplayManager API (alle show*-Methoden) | | 5.6 | `test-laser-tracker` | `test_laser_tracker.cpp` | LaserTracker Burst-Logik, Gratiszeit, Session/NVS | | 6.5 | `test-mqtt` | `test_mqtt_client.cpp` | MqttClient TLS, Heartbeat, Session-Publish, JSON-Reset, LWT | +| 7.7 | `test-web` | `test_web_server.cpp` | WebServer Routen, Config-Formular, Reset, ElegantOTA OTA | ### Test 1.4 – Display Verdrahtungstest @@ -449,6 +452,27 @@ pio device monitor -e test-mqtt **Status:** ✅ Verbindung, Heartbeat, Session-Publish, JSON-Reset, LWT getestet ⚠️ **Ungetestet:** MQTT-Error Modul 5 bei Verbindungsverlust, Reconnect nach WiFi-Ausfall +### Test 7.7 – WebServer (Phase 7) + +```bash +pio run -e test-web --target upload +pio device monitor -e test-web +``` + +IP-Adresse aus Serial Monitor ablesen, dann im Browser: + +| URL | Erwartetes Verhalten | +|---|---| +| `http:///` | Statusseite: Session, Gesamtzeit, WLAN-IP, MQTT-Status, Broker | +| `http:///config` | Formular: Broker, Port, User, PW, Gratiszeit, Polarität | +| POST `/config` | Werte in NVS speichern, nach Neustart prüfen | +| Button „Gesamtzeit löschen" | `resetTotal()` → 0.00 min auf Statusseite | +| `http:///update` | ElegantOTA-Seite erreichbar | + +Statusseite aktualisiert sich automatisch alle 10 s. + +**Status:** ⏳ Hardware-Test ausstehend + --- ## Implementierungsstand @@ -461,7 +485,7 @@ pio device monitor -e test-mqtt | 4 | DisplayManager | ✅ abgeschlossen | | 5 | LaserTracker (Burst-Logik, Zeiterfassung) | ✅ abgeschlossen | | 6 | MqttClient (PubSubClient, TLS, Heartbeat, Session) | ✅ implementiert / ⚠️ 2 Punkte ungetestet | -| 7 | WebServer (ESPAsyncWebServer, Config-UI, OTA) | ⏳ ausstehend | +| 7 | WebServer (ESPAsyncWebServer, Config-UI, OTA) | ✅ implementiert / ⏳ Hardware-Test ausstehend | | 8 | Integrationstest (Display + MQTT + Web) | ⏳ ausstehend | | 9 | Gehäuse / Hardware-Finish | ⏳ ausstehend | | 10 | Produktiv-Deployment, Dokumentation final | ⏳ ausstehend |