diff --git a/data_full/build/bundle.css.gz b/data_full/build/bundle.css.gz index 3e925814..cb7a83a5 100644 Binary files a/data_full/build/bundle.css.gz and b/data_full/build/bundle.css.gz differ diff --git a/data_full/build/bundle.js.gz b/data_full/build/bundle.js.gz index 4a1fc2b5..e8df792b 100644 Binary files a/data_full/build/bundle.js.gz and b/data_full/build/bundle.js.gz differ diff --git a/data_svelte/build/bundle.css.gz b/data_svelte/build/bundle.css.gz index 3e925814..cb7a83a5 100644 Binary files a/data_svelte/build/bundle.css.gz and b/data_svelte/build/bundle.css.gz differ diff --git a/data_svelte/build/bundle.js.gz b/data_svelte/build/bundle.js.gz index 4a1fc2b5..e8df792b 100644 Binary files a/data_svelte/build/bundle.js.gz and b/data_svelte/build/bundle.js.gz differ diff --git a/include/StandWebServer.h b/include/StandWebServer.h index 419a4538..db177ca2 100644 --- a/include/StandWebServer.h +++ b/include/StandWebServer.h @@ -10,6 +10,8 @@ extern void handleFileUpload(); extern void handleFileDelete(); extern void handleFileCreate(); extern void handleLocalOTA(); +extern void handleUpdateOTA(); +extern void handleCors(); extern void handleLocalOTA_Handler(); extern void handleFileList(); //void printDirectory(File dir, String& out); diff --git a/src/StandWebServer.cpp b/src/StandWebServer.cpp index f28ed01d..79be8f59 100644 --- a/src/StandWebServer.cpp +++ b/src/StandWebServer.cpp @@ -92,6 +92,11 @@ void standWebServerInit() { HTTP.on("/localota", HTTP_GET, handleLocalOTA); HTTP.on("/localota_handler", HTTP_GET, handleLocalOTA_Handler); + HTTP.on("/update", HTTP_POST, []() { + HTTP.send(200); // Для CORS + }, handleUpdateOTA); + + HTTP.on("/update", HTTP_OPTIONS, handleCors); // Default handler for all URIs not defined above // Use it to read files from filesystem @@ -164,6 +169,42 @@ void handleLocalOTA() { String page = "
"; HTTP.send(200, "text/html", page);} + +void handleCors() { + HTTP.sendHeader("Access-Control-Allow-Origin", "*"); + HTTP.send(200); + } + + void handleUpdateOTA() { + HTTPUpload& upload = HTTP.upload(); + + if (upload.status == UPLOAD_FILE_START) { + Serial.print("Начало загрузки: "); + Serial.println(upload.filename); + if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { + Update.end(); + HTTP.send(500, "text/plain", "Ошибка: Недостаточно памяти"); + return; + } + } + else if (upload.status == UPLOAD_FILE_WRITE) { + if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { + Update.end(); + HTTP.send(500, "text/plain", "Ошибка записи данных"); + return; + } + } + else if (upload.status == UPLOAD_FILE_END) { + if (Update.end(true)) { // true - перезагрузка после обновления + HTTP.send(200, "text/plain", "Обновление успешно"); + Serial.println("Обновление завершено"); + ESP.restart(); + } else { + Update.end(); + HTTP.send(500, "text/plain", "Ошибка завершения обновления"); + } + } + } void handleLocalOTA_Handler() { String serverValue = HTTP.arg("server"); upgrade_firmware(3,serverValue); diff --git a/src/WsServer.cpp b/src/WsServer.cpp index 7cb72fb0..7a27698b 100644 --- a/src/WsServer.cpp +++ b/src/WsServer.cpp @@ -233,6 +233,40 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) sendStringToWs("settin", settingsFlashJson, num); } + if (headerStr == "/localt|") { + String timeStr = String((char*)payload + 8); + Serial.println("Время с фронта: /localt|" + timeStr); + + // Обрезаем дробную часть, если есть + int dotIndex = timeStr.indexOf('.'); + if (dotIndex != -1) { + timeStr = timeStr.substring(0, dotIndex); + } + + // Парсим UNIX-время в секундах + time_t unixTime = (time_t)timeStr.toInt(); + + // Создаём структуру timeval + timeval tv; + tv.tv_sec = unixTime; // Секунды эпохи + tv.tv_usec = 0; // Микросекунды + + // Устанавливаем время + if (settimeofday(&tv, NULL) == 0) { + Serial.printf("Время установлено: %ld\n", unixTime); + } else { + Serial.printf("Ошибка установки времени: %ld\n", unixTime); + } + // timeval tv2{0, 0}; + // timezone tz = timezone{0, 0}; + // time_t epoch = 0; + // if (gettimeofday(&tv2, &tz) != -1) { + // epoch = tv2.tv_sec; + // } + // unixTime = epoch; + // SerialPrint("I", F("NTP"), "TIME " + String(unixTime)); + } + //----------------------------------------------------------------------// // Страница веб интерфейса dev //----------------------------------------------------------------------//