Compare commits

...

4 Commits

Author SHA1 Message Date
fe7b57fe0e docs: update changelog for version 1.3.58
All checks were successful
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 2m25s
2025-02-22 17:59:59 +01:00
c1ae6b7295 docs: update webpages for version v1.3.58 2025-02-22 17:59:59 +01:00
9eee89fac7 feat: implement backup and restore functionality for Bambu credentials and Spoolman URL 2025-02-22 17:58:20 +01:00
8c5e7e26ac docs: update upgrade page message and improve progress display logic 2025-02-22 17:53:51 +01:00
4 changed files with 61 additions and 19 deletions

View File

@ -1,5 +1,14 @@
# Changelog # Changelog
## [1.3.58] - 2025-02-22
### Added
- implement backup and restore functionality for Bambu credentials and Spoolman URL
### Changed
- update webpages for version v1.3.58
- update upgrade page message and improve progress display logic
## [1.3.57] - 2025-02-22 ## [1.3.57] - 2025-02-22
### Changed ### Changed
- update webpages for version v1.3.57 - update webpages for version v1.3.57

View File

@ -206,10 +206,10 @@
progress.textContent = '100%'; progress.textContent = '100%';
// Automatischer Neustart nach erfolgreicher Aktualisierung // Automatischer Neustart nach erfolgreicher Aktualisierung
status.textContent = "Update successful! Restarting device..."; status.textContent = "Update successful! Restarting device... The page will reload in 30 seconds.";
setTimeout(() => { setTimeout(() => {
window.location.reload(); window.location.href = '/';
}, 5000); }, 30000);
} else { } else {
document.querySelectorAll('form input[type=submit]').forEach(btn => btn.disabled = false); document.querySelectorAll('form input[type=submit]').forEach(btn => btn.disabled = false);
} }

View File

@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[common] [common]
version = "1.3.57" version = "1.3.58"
#test #test

View File

@ -23,6 +23,10 @@ AsyncWebSocket ws("/ws");
uint8_t lastSuccess = 0; uint8_t lastSuccess = 0;
uint8_t lastHasReadRfidTag = 0; uint8_t lastHasReadRfidTag = 0;
// Globale Variablen für Config Backups hinzufügen
String bambuCredentialsBackup;
String spoolmanUrlBackup;
void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
if (type == WS_EVT_CONNECT) { if (type == WS_EVT_CONNECT) {
Serial.println("Neuer Client verbunden!"); Serial.println("Neuer Client verbunden!");
@ -438,12 +442,17 @@ void setupWebserver(AsyncWebServer &server) {
return; return;
} }
// Update OLED Display alle 25% // Update OLED Display alle 5% und Webseite bei jeder Änderung
static int lastProgress = -1; static int lastProgress = -1;
int currentProgress = (index + len) * 100 / updateSize; int currentProgress = (index + len) * 100 / updateSize;
if (currentProgress % 25 == 0 && currentProgress != lastProgress) { if (currentProgress != lastProgress) {
// OLED nur alle 5% aktualisieren
if (currentProgress % 5 == 0) {
oledShowMessage(String(currentProgress) + "% complete");
}
// Webseite bei jeder Änderung aktualisieren
lastProgress = currentProgress; lastProgress = currentProgress;
oledShowMessage(String(currentProgress) + "% complete"); ws.textAll("{\"type\":\"updateProgress\",\"progress\":" + String(currentProgress) + "}");
} }
} }
@ -485,23 +494,47 @@ void setupWebserver(AsyncWebServer &server) {
void backupJsonConfigs() { void backupJsonConfigs() {
const char* configs[] = {"/bambu_credentials.json", "/spoolman_url.json"}; // Bambu Credentials backup
for (const char* config : configs) { if (SPIFFS.exists("/bambu_credentials.json")) {
if (SPIFFS.exists(config)) { File file = SPIFFS.open("/bambu_credentials.json", "r");
String backupPath = String(config) + ".bak"; if (file) {
SPIFFS.remove(backupPath); bambuCredentialsBackup = file.readString();
SPIFFS.rename(config, backupPath); file.close();
Serial.println("Bambu credentials backed up");
}
}
// Spoolman URL backup
if (SPIFFS.exists("/spoolman_url.json")) {
File file = SPIFFS.open("/spoolman_url.json", "r");
if (file) {
spoolmanUrlBackup = file.readString();
file.close();
Serial.println("Spoolman URL backed up");
} }
} }
} }
void restoreJsonConfigs() { void restoreJsonConfigs() {
const char* configs[] = {"/bambu_credentials.json", "/spoolman_url.json"}; // Restore Bambu credentials
for (const char* config : configs) { if (bambuCredentialsBackup.length() > 0) {
String backupPath = String(config) + ".bak"; File file = SPIFFS.open("/bambu_credentials.json", "w");
if (SPIFFS.exists(backupPath)) { if (file) {
SPIFFS.remove(config); file.print(bambuCredentialsBackup);
SPIFFS.rename(backupPath, config); file.close();
Serial.println("Bambu credentials restored");
} }
bambuCredentialsBackup = ""; // Clear backup
}
// Restore Spoolman URL
if (spoolmanUrlBackup.length() > 0) {
File file = SPIFFS.open("/spoolman_url.json", "w");
if (file) {
file.print(spoolmanUrlBackup);
file.close();
Serial.println("Spoolman URL restored");
}
spoolmanUrlBackup = ""; // Clear backup
} }
} }