MQTT-Display-LaserCutter/include/web_server.h
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

59 lines
2.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
// =============================================================================
// web_server.h HTTP-Webinterface für Statusanzeige und Konfiguration
// Projekt: MQTT-Display LaserCutter
//
// Basierend auf ESPAsyncWebServer (non-blocking, Task-safe).
//
// Routen:
// GET / Statusseite (Session, Gesamtzeit, WLAN/MQTT-Status)
// GET /config Konfigurationsformular (MQTT, Gratiszeit, Polarität)
// POST /config Konfiguration speichern (NVS via SettingsManager)
// POST /reset Gesamtzeit zurücksetzen (laserTracker.resetTotal())
// GET /update OTA-Update-Seite (ElegantOTA)
// POST /update Firmware-Upload (ElegantOTA)
// GET /log Web-Log-Console (WebSocket-Empfänger)
// WS /log-ws WebSocket-Endpunkt für Live-Log-Streaming
//
// Verwendung:
// webServer.begin(); // einmalig in setup(), nach WiFi-Connect
// // kein loop() nötig ESPAsyncWebServer ist vollständig async
// =============================================================================
#include <Arduino.h>
// Forward-Declarations: ESPAsyncWebServer.h nur in web_server.cpp einbinden
// (verhindert HTTP_GET/POST-Enum-Konflikt mit WiFiManager in main.cpp)
class AsyncWebServer;
class AsyncWebServerRequest;
class AsyncWebSocket;
class WebServerManager {
public:
WebServerManager();
// Routen registrieren und Server starten (einmalig nach WiFi-Connect)
void begin();
// ArduinoOTA verarbeiten in jedem loop()-Durchlauf aufrufen
void loop();
private:
AsyncWebServer* _server; // PIMPL: Pointer, full type only in web_server.cpp
AsyncWebSocket* _ws; // WebSocket-Endpunkt /log-ws
void registerRoutes();
// HTTP-Basic-Auth pruefen; gibt false zurueck und sendet 401 wenn nicht autorisiert
bool requireAuth(AsyncWebServerRequest* request);
// HTML-Seiten als Strings aufbauen
String buildStatusPage();
String buildConfigPage();
String buildLogPage();
};
// Globale Instanz
extern WebServerManager webServer;