MQTT-Display-LaserCutter/Feature-Requests.md
MaPaLo76 4dd4ce0620 feat(FR-002): Web Console via HTTP-Polling (/log + /log-data) -- v1.1.0
- Ring-Buffer _logBuf in web_server.cpp: webLogForward() schreibt auf Core 1
- GET /log-data liefert Puffer als Plain-Text (kein WebSocket, kein Core-Konflikt)
- Browser pollt alle 2 s, Auto-Scroll, dunkles Terminal-Theme
- LOG_I/LOG_E/LOG_D: Timestamp (HH:MM:SS nach NTP, sonst +Xs), webLogForward()
- Alle Serial.* in laser_tracker.cpp, mqtt_client.cpp, web_server.cpp auf LOG_I/LOG_E
- main.cpp: esp_reset_reason() beim Booten loggen (POWER_ON / WATCHDOG / PANIC...)
- telnet_logger.h entfernt (war nur noch Deprecated-Stub)
- Feature-Requests.md: FR-002 abgeschlossen
2026-02-28 17:24:56 +01:00

2.7 KiB
Raw Blame History

Feature Requests & Bug Fixes

Dieses Dokument verfolgt laufende Bug Fixes und kleinere Feature Requests nach Abschluss der Hauptentwicklungsphasen (Implementation-Plan.md Phase 19).
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

  • 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:
  • 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
  • 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
  • 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