- ArduinoOTA in web_server.cpp integriert (Hostname: lasercutter-display) - WebServerManager::loop() hinzugefuegt -> ArduinoOTA.handle() - webServer.loop() in main.cpp aufgerufen - platformio.ini: gemeinsamer [env]-Basisblock (lib_deps einmalig) - Neues env az-delivery-devkit-v4-ota (espota, upload_flags --auth Anleitung) - Neues env az-delivery-devkit-v4-ota-http (ElegantOTA HTTP Fallback) - upload_ota.py: HTTP-Multipart-Upload Script fuer ElegantOTA - README.md: Abschnitt Via WiFi (OTA) mit Passwort-Anleitung - Implementation-Plan.md: Task 9.9 dokumentiert
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#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)
|
||
//
|
||
// 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 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
|
||
|
||
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();
|
||
};
|
||
|
||
// Globale Instanz
|
||
extern WebServerManager webServer;
|