diff --git a/.github/workflows/gitea-release.yml b/.github/workflows/gitea-release.yml index 986faac..871fe58 100644 --- a/.github/workflows/gitea-release.yml +++ b/.github/workflows/gitea-release.yml @@ -41,7 +41,7 @@ jobs: cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin # Create SPIFFS binary with minimal header - ( printf '\xe9\x01\x00\x00' && cat .pio/build/esp32dev/spiffs.bin ) > .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin + ( printf '\xe9' && cat .pio/build/esp32dev/spiffs.bin ) > .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin # Create full binary (cd .pio/build/esp32dev && diff --git a/html/upgrade.html b/html/upgrade.html index a13281a..e35e495 100644 --- a/html/upgrade.html +++ b/html/upgrade.html @@ -189,13 +189,6 @@ const xhr = new XMLHttpRequest(); xhr.open('POST', '/update', true); - xhr.upload.onprogress = (e) => { - if (e.lengthComputable) { - const percentComplete = (e.loaded / e.total) * 100; - progress.style.width = percentComplete + '%'; - progress.textContent = Math.round(percentComplete) + '%'; - } - }; xhr.onload = function() { try { @@ -203,41 +196,27 @@ try { const jsonResponse = JSON.parse(response); - // Handle progress updates - if (jsonResponse.progress !== undefined) { - const percent = jsonResponse.progress; - progress.style.width = percent + '%'; - progress.textContent = Math.round(percent) + '%'; - return; - } + // Zeige finale Nachricht + status.textContent = jsonResponse.message || "Update complete"; + status.classList.add(jsonResponse.success ? 'success' : 'error'); + status.style.display = 'block'; - // Handle success/error messages - response = jsonResponse.message; - - if (jsonResponse.restart) { - status.textContent = response + " Redirecting in 20 seconds..."; - let countdown = 20; - const timer = setInterval(() => { - countdown--; - if (countdown <= 0) { - clearInterval(timer); - window.location.href = '/'; - } else { - status.textContent = response + ` Redirecting in ${countdown} seconds...`; - } - }, 1000); + if (jsonResponse.success) { + progress.style.width = '100%'; + progress.textContent = '100%'; + + // Automatischer Neustart nach erfolgreicher Aktualisierung + status.textContent = "Update successful! Restarting device..."; + setTimeout(() => { + window.location.reload(); + }, 5000); + } else { + document.querySelectorAll('form input[type=submit]').forEach(btn => btn.disabled = false); } } catch (e) { console.error('JSON parse error:', e); status.textContent = 'Update failed: Invalid response from server'; status.classList.add('error'); - } - - status.textContent = response; - status.classList.add(xhr.status === 200 ? 'success' : 'error'); - status.style.display = 'block'; - - if (xhr.status !== 200) { document.querySelectorAll('form input[type=submit]').forEach(btn => btn.disabled = false); } } catch (error) { diff --git a/src/website.cpp b/src/website.cpp index 5413d82..585cada 100644 --- a/src/website.cpp +++ b/src/website.cpp @@ -7,6 +7,7 @@ #include "nfc.h" #include "scale.h" #include "esp_task_wdt.h" +#include "esp_log.h" #include #include "display.h" @@ -393,28 +394,31 @@ void setupWebserver(AsyncWebServer &server) { oledShowMessage("Upgrade please wait"); if (!index) { + // Reduziere Debug-Level während des Updates + esp_log_level_set("*", ESP_LOG_ERROR); + updateSize = request->contentLength(); command = (filename.indexOf("spiffs") > -1) ? U_SPIFFS : U_FLASH; - Serial.printf("Update Start: %s\nSize: %u\nCommand: %d\n", filename.c_str(), updateSize, command); if (command == U_SPIFFS) { - Serial.println("Backup JSON configs..."); + oledShowMessage("SPIFFS Update..."); backupJsonConfigs(); - // Deaktiviere alle Validierungen für SPIFFS-Updates - if (!Update.begin(UPDATE_SIZE_UNKNOWN, command)) { - Serial.printf("Update Begin Error: %s\n", Update.errorString()); + if (!Update.begin(updateSize, command)) { restoreJsonConfigs(); String errorMsg = String("Update begin failed: ") + Update.errorString(); request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}"); + // Stelle Debug-Level wieder her + esp_log_level_set("*", ESP_LOG_INFO); return; } } else { - // Normale Validierung für Firmware-Updates + oledShowMessage("Firmware Update..."); if (!Update.begin(updateSize, command)) { - Serial.printf("Update Begin Error: %s\n", Update.errorString()); String errorMsg = String("Update begin failed: ") + Update.errorString(); request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}"); + // Stelle Debug-Level wieder her + esp_log_level_set("*", ESP_LOG_INFO); return; } } @@ -422,7 +426,6 @@ void setupWebserver(AsyncWebServer &server) { if (len) { if (Update.write(data, len) != len) { - Serial.printf("Update Write Error: %s\n", Update.errorString()); if (command == U_SPIFFS) { restoreJsonConfigs(); } @@ -431,23 +434,28 @@ void setupWebserver(AsyncWebServer &server) { return; } - // Sende den Fortschritt als JSON - String progress = "{\"progress\":" + String((index + len) * 100 / updateSize) + "}"; - request->send(200, "application/json", progress); + // Update OLED Display alle 25% + static int lastProgress = -1; + int currentProgress = (index + len) * 100 / updateSize; + if (currentProgress % 25 == 0 && currentProgress != lastProgress) { + lastProgress = currentProgress; + oledShowMessage(String(currentProgress) + "% complete"); + } } if (final) { if (!Update.end(true)) { - Serial.printf("Update End Error: %s\n", Update.errorString()); if (command == U_SPIFFS) { - Serial.println("Restoring JSON configs..."); restoreJsonConfigs(); } String errorMsg = String("Update end failed: ") + Update.errorString(); request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}"); + // Stelle Debug-Level wieder her + esp_log_level_set("*", ESP_LOG_INFO); return; } - Serial.println("Update Success!"); + // Stelle Debug-Level wieder her + esp_log_level_set("*", ESP_LOG_INFO); } } );