From 9ccc2d4ff50c0100e74003d44a925a2697c0b843 Mon Sep 17 00:00:00 2001 From: cjkas Date: Sat, 21 Mar 2026 19:21:03 +0100 Subject: [PATCH] async server introduction --- minify.py | 8 ++++---- platformio.ini | 7 ++++--- src/SomfyController.ino | 34 ++++++++++++++++++++++++++++++++-- src/Web.cpp | 18 ++++++++++++++++++ 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/minify.py b/minify.py index bff2956..a5c581c 100644 --- a/minify.py +++ b/minify.py @@ -133,12 +133,12 @@ def minify_svg(text: str) -> str: MINIFIERS = { - ".html": minify_html, - ".htm": minify_html, - ".css": minify_css, + # ".html": minify_html, + # ".htm": minify_html, + # ".css": minify_css, # ".js": minify_js, # ".json": minify_json, - ".svg": minify_svg, + # ".svg": minify_svg, # ".xml": minify_svg, # same approach works for generic XML } diff --git a/platformio.ini b/platformio.ini index da43e41..f823a0d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,11 +20,12 @@ lib_deps = links2004/WebSockets@^2.7.3 lsatan/SmartRC-CC1101-Driver-Lib@^2.5.7 knolleary/PubSubClient@^2.8 + esp32async/ESPAsyncWebServer @ ^3.10.3 extra_scripts = pre:minify.py -board_build.partitions = min_spiffs.csv +board_build.partitions = huge_app.csv board_build.filesystem = littlefs build_flags = - -DCONFIG_ESP_COREDUMP_ENABLE_TO_FLASH=1 + -DCONFIG_ESP_COREDUMP_ENABLE_TO_FLASH=1 -DCONFIG_ESP_COREDUMP_ENABLE_TO_UART=1 -DCONFIG_ESP_COREDUMP_DATA_FORMAT_ELF=1 -DCONFIG_ESP_COREDUMP_CHECKSUM_CRC32=1 @@ -47,7 +48,7 @@ lib_deps = lsatan/SmartRC-CC1101-Driver-Lib@^2.5.7 knolleary/PubSubClient@^2.8 extra_scripts = pre:minify.py -board_build.partitions = min_spiffs.csv +board_build.partitions = huge_app.csv board_build.filesystem = littlefs [env:esp32c3dev] diff --git a/src/SomfyController.ino b/src/SomfyController.ino index 1afa189..9e0afe1 100644 --- a/src/SomfyController.ino +++ b/src/SomfyController.ino @@ -24,11 +24,41 @@ GitUpdater git; uint32_t oldheap = 0; +void listDir(const char *dirname, uint8_t levels) { + Serial.printf("Listing: %s\n", dirname); + File root = LittleFS.open(dirname); + if (!root || !root.isDirectory()) { + Serial.println("Failed to open directory"); + return; + } + File file = root.openNextFile(); + while (file) { + if (file.isDirectory()) { + Serial.printf(" DIR : %s\n", file.name()); + if (levels) listDir(file.path(), levels - 1); + } else { + Serial.printf(" FILE: %-30s %d bytes\n", file.name(), file.size()); + } + file = root.openNextFile(); + } +} + void setup() { Serial.begin(115200); Serial.println(); - log_i("Startup/Boot...."); - log_i("Mounting File System..."); + Serial.println("Startup/Boot...."); + Serial.println("Mounting File System..."); + + + if (LittleFS.begin()) { + Serial.printf("\nTotal: %d bytes\n", LittleFS.totalBytes()); + Serial.printf("Used: %d bytes\n", LittleFS.usedBytes()); + Serial.printf("Free: %d bytes\n", LittleFS.totalBytes() - LittleFS.usedBytes()); + Serial.println(); + listDir("/", 3); + } else { + Serial.println("LittleFS mount failed!"); + } if(LittleFS.begin()) Serial.println("File system mounted successfully"); else Serial.println("Error mounting file system"); diff --git a/src/Web.cpp b/src/Web.cpp index b5c148e..9f2492d 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -14,6 +14,8 @@ #include "MQTT.h" #include "GitOTA.h" #include "Network.h" +#include +#include extern ConfigSettings settings; extern SSDPClass SSDP; @@ -40,8 +42,24 @@ static const char _encoding_json[] = "application/json"; WebServer apiServer(8081); WebServer server(80); +AsyncWebServer aserver(81); void Web::startup() { Serial.println("Launching web server..."); + aserver.serveStatic("/", LittleFS, "/").setDefaultFile("index.html"); + + aserver.on("/loginContext", HTTP_GET, [](AsyncWebServerRequest *request) { + AsyncJsonResponse *response = new AsyncJsonResponse(); + JsonObject root = response->getRoot().to(); + root["type"] = static_cast(settings.Security.type); + root["permissions"] = settings.Security.permissions; + root["serverId"] = settings.serverId; + root["version"] = settings.fwVersion.name; + root["model"] = "ESPSomfyRTS"; + root["hostname"] = settings.hostname; + response->setLength(); + request->send(response); + }); + aserver.begin(); } void Web::loop() { server.handleClient();