74 lines
3.7 KiB
Markdown
74 lines
3.7 KiB
Markdown
# Feature Requests & Bug Fixes
|
||
|
||
> Dieses Dokument verfolgt laufende Bug Fixes und kleinere Feature Requests nach Abschluss der Hauptentwicklungsphasen (Implementation-Plan.md Phase 1–9).
|
||
> Größere Änderungen (neue Module, neue Architektur) werden weiterhin im `Implementation-Plan.md` dokumentiert.
|
||
|
||
---
|
||
|
||
## Format
|
||
|
||
```
|
||
- [ ] **FR-NNN** Kurzbeschreibung
|
||
- Details, Kontext, betroffene Dateien
|
||
- Commit: `<hash>` (wird nach Erledigung eingetragen)
|
||
```
|
||
|
||
Status: `[ ]` = offen · `[x]` = erledigt
|
||
|
||
---
|
||
|
||
## Offen
|
||
|
||
*– keine –*
|
||
|
||
---
|
||
|
||
## Erledigt
|
||
|
||
- [x] **FR-005** Bug: WDT-Crash + Display-/Browser-Freeze durch blockierenden TLS-Handshake ✅
|
||
- MQTT `reconnect()` mit TLS (Port 8883) blockiert `loop()` auf Core 1 bis zu 15 s
|
||
- Folge: Task-Watchdog (30 s) feuert wenn zwei Reconnect-Versuche in einem 30s-Fenster → Neustart mit `WATCHDOG (Task)`
|
||
- Zusätzlich: Display-Updates, WebServer-Responses und WiFi-Stack auf Core 1 eingefroren während TLS-Handshake
|
||
- Fix: `MqttClient` komplett auf FreeRTOS-Task (Core 0) ausgelagert
|
||
- `begin()` startet nur Task (`xTaskCreatePinnedToCore`, Stack 16 KB), kein Netzwerk-Zugriff auf Core 1
|
||
- `WiFiClientSecure`/mbedtls wird **ausschließlich auf Core 0** initialisiert und verwendet (Cross-Core-Heap-Korruption vermieden)
|
||
- `mqttClient.loop()` in `main.cpp` ist No-Op – alle MQTT-Arbeit im Task
|
||
- `publishSession()` von Core 1 safe: setzt nur `volatile`-Flags, Task auf Core 0 führt den Publish aus
|
||
- Version: 1.1.0 → 1.1.1
|
||
- Commit: `a7c6edb` (Task auf Core 0), `b91b3ca` (Heap-Fix: Objekte per new auf Core 0)
|
||
|
||
- [x] **FR-002** Web Console – serieller Monitor über Browser (WebSocket) ✅
|
||
- Route `/log` liefert HTML-Seite mit automatisch scrollendem Terminal (dunkles Theme)
|
||
- WebSocket-Endpunkt `/log-ws` via `AsyncWebSocket` im bestehenden ESPAsyncWebServer
|
||
- `LOG_I`/`LOG_E`/`LOG_D` in `config.h` formatieren in lokalen Puffer und rufen `webLogForward()` auf
|
||
- `webLogForward()` sendet per `ws.textAll()` – läuft nativ in AsyncTCP, kein Konflikt
|
||
- "Log Console"-Button auf Statusseite / automatischer WebSocket-Reconnect nach Trennung
|
||
- Commit: `4dd4ce0`
|
||
|
||
- [x] **FR-004** Bug: `session_sum` im MQTT-Heartbeat falsch (Binärzahl statt Dezimal) ✅
|
||
- `serialized(String(getAllSessionsSumMinutes(), 2))` → `String(int, basis)` interpretiert 2. Argument als **Basis**, nicht Dezimalstellen
|
||
- Beispiel: 18 Min → `"10010"` (18 in Binär), 20 Min → `"10100"`
|
||
- Fix: `doc["session_sum"] = laserTracker.getAllSessionsSumMinutes()` – direkt als JSON-Integer, kein `serialized()` nötig
|
||
- `machine_running_time_min` war korrekt: `String(float, 2)` = 2 Dezimalstellen – anderer Overload
|
||
- Version: 1.0.1 → 1.0.2
|
||
- Commit: `83537e3`
|
||
|
||
- [x] **FR-003** Bug: NTP Zeitzone falsch (UTC statt CET/CEST) ✅
|
||
- `configTime(0, 0, ...)` lieferte UTC → Anzeige 1h zu früh (CET) / 2h zu früh (CEST)
|
||
- `wifi_connector.cpp`: `configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "pool.ntp.org", "time.nist.gov")` – automatische Sommerzeit
|
||
- `mqtt_client.cpp`: `gmtime()` → `localtime()`, `Z`-Suffix entfernt – Payload zeigt Lokalzeit
|
||
- Version: 1.0.0 → 1.0.1
|
||
- Commit: `3a31082`
|
||
|
||
- [x] **FR-001** Firmware-Version auf Webseite und im MQTT-Status-Payload
|
||
- Definition: `FIRMWARE_VERSION` als `build_flags` in `platformio.ini` `[env]`-Basisblock (Single Source of Truth)
|
||
- Fallback `#define FIRMWARE_VERSION "0.0.0"` in `config.h` (Arduino IDE ohne build_flags)
|
||
- Format: `1.0.0 (Feb 26 2026)` – Version + C++-Makro `__DATE__` (Compile-Zeitpunkt)
|
||
- Web: Firmware-Zeile in der Statustabelle auf `/` + Footer auf `/config`
|
||
- MQTT: `"firmware_version": "1.0.0 (Feb 26 2026)"` im `lasercutter/status`-Payload
|
||
- Commit: `46a8c59`
|
||
|
||
---
|
||
|
||
*Erstellt: 26. Februar 2026*
|