#ifndef WEB_SERVER_H #define WEB_SERVER_H #include #include #include #include "config_manager.h" #include "wifi_manager.h" #include "gsm_manager.h" #include "transport_manager.h" #include "mqtt_client.h" #include "acuvim_reader.h" #include "sd_manager.h" #include "ota_manager.h" class WebPortal { public: WebPortal(); void begin(ConfigManager& config, WifiManager& wifi, MqttClient& mqtt, AcuvimReader& acuvim, GsmManager& gsm, TransportManager& transport, SdManager& sd, OtaManager& ota); void loop(); void stop(); void setLatestData(const AcuvimData& data) { _lastData = data; } private: AsyncWebServer _server; DNSServer _dns; ConfigManager* _config; WifiManager* _wifi; GsmManager* _gsm; TransportManager* _transport; MqttClient* _mqtt; AcuvimReader* _acuvim; SdManager* _sd; OtaManager* _ota; AcuvimData _lastData; void setupRoutes(); void setupCaptivePortal(); void sendJsonResponse(AsyncWebServerRequest* req, int code, const String& json); void sendSuccess(AsyncWebServerRequest* req, const char* message); void sendError(AsyncWebServerRequest* req, int code, const char* message); void handleStatus(AsyncWebServerRequest* req); void handleDeviceInfo(AsyncWebServerRequest* req); void handleLatestTelemetry(AsyncWebServerRequest* req); void handleWifiScan(AsyncWebServerRequest* req); void handleGetWifiConfig(AsyncWebServerRequest* req); void handlePostWifiConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleWifiDisconnect(AsyncWebServerRequest* req); void handleGetMqttConfig(AsyncWebServerRequest* req); void handlePostMqttConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetSleepConfig(AsyncWebServerRequest* req); void handlePostSleepConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetConsoleConfig(AsyncWebServerRequest* req); void handlePostConsoleConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetModbusConfig(AsyncWebServerRequest* req); void handlePostModbusConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetGsmConfig(AsyncWebServerRequest* req); void handlePostGsmConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetGsmStatus(AsyncWebServerRequest* req); void handleGetTransportConfig(AsyncWebServerRequest* req); void handlePostTransportConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleGetSdStatus(AsyncWebServerRequest* req); void handlePostSdDrain(AsyncWebServerRequest* req); void handlePostSdCleanup(AsyncWebServerRequest* req); void handleGetOtaStatus(AsyncWebServerRequest* req); void handlePostOtaCheck(AsyncWebServerRequest* req); void handlePostOtaInstall(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleOtaUpload(AsyncWebServerRequest* req, const String& filename, size_t index, uint8_t* data, size_t len, bool final); void handlePostOtaRollback(AsyncWebServerRequest* req); void handleGetOtaConfig(AsyncWebServerRequest* req); void handlePostOtaConfig(AsyncWebServerRequest* req, uint8_t* data, size_t len); void handleRestart(AsyncWebServerRequest* req); void handleFactoryReset(AsyncWebServerRequest* req); }; #endif