Compare commits
34 Commits
v1.3.43
...
807eca3c43
Author | SHA1 | Date | |
---|---|---|---|
807eca3c43 | |||
b52730bf67 | |||
9a59b91e88 | |||
a5af4013d8 | |||
e54ce58ec4 | |||
142eafd232 | |||
63ab9e0993 | |||
aaa5506d40 | |||
8037adc045 | |||
6e7c728cd8 | |||
3fe8271344 | |||
f2bc6eab92 | |||
37df492339 | |||
c4b425403f | |||
73244689dd | |||
27296104d2 | |||
5f99773897 | |||
7416285fb9 | |||
85928e358d | |||
092b4fd8ec | |||
399645a2b3 | |||
164bb241b7 | |||
e564c6eeae | |||
4288dd0cd4 | |||
37d43b2d7d | |||
adb354ddcd | |||
15d5e5edce | |||
c6edf30245 | |||
65ac207f36 | |||
698abbd669 | |||
04a7c2cce3 | |||
78f54b72fd | |||
f4eee9af91 | |||
cad14b3bc2 |
4
.github/workflows/gitea-release.yml
vendored
4
.github/workflows/gitea-release.yml
vendored
@ -40,8 +40,8 @@ jobs:
|
||||
# Copy firmware binary
|
||||
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
|
||||
|
||||
# Create SPIFFS binary (without header)
|
||||
cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
# Create SPIFFS binary without header
|
||||
cp .pio/build/esp32dev/spiffs.bin .pio.build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
|
||||
# Create full binary
|
||||
(cd .pio/build/esp32dev &&
|
||||
|
2
.github/workflows/github-release.yml
vendored
2
.github/workflows/github-release.yml
vendored
@ -47,7 +47,7 @@ jobs:
|
||||
# Copy firmware binary
|
||||
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
|
||||
|
||||
# Create SPIFFS binary (without header)
|
||||
# Create SPIFFS binary without header
|
||||
cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
|
||||
# Create full binary (always)
|
||||
|
66
CHANGELOG.md
66
CHANGELOG.md
@ -1,5 +1,71 @@
|
||||
# Changelog
|
||||
|
||||
## [1.3.54] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.54
|
||||
- workflow: update SPIFFS binary creation to exclude header
|
||||
|
||||
|
||||
## [1.3.53] - 2025-02-22
|
||||
### Changed
|
||||
- version: update to version 1.3.53
|
||||
- update changelog for version 1.3.51
|
||||
- update changelog for version 1.3.51
|
||||
- workflow: update SPIFFS binary magic byte and revert version to 1.3.51
|
||||
|
||||
|
||||
## [1.3.52] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.52
|
||||
- workflow: update SPIFFS binary creation to use correct chip revision (0xEB for Rev 3)
|
||||
|
||||
|
||||
## [1.3.51] - 2025-02-22
|
||||
### Changed
|
||||
- update changelog for version 1.3.51
|
||||
- workflow: update SPIFFS binary magic byte and revert version to 1.3.51
|
||||
|
||||
## [1.3.50] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.50
|
||||
|
||||
|
||||
## [1.3.49] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.49
|
||||
- workflow: update SPIFFS binary header to use correct chip revision
|
||||
|
||||
|
||||
## [1.3.48] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.48
|
||||
- workflow: update SPIFFS binary header for firmware release
|
||||
|
||||
|
||||
## [1.3.47] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.47
|
||||
- workflow: optimize firmware and SPIFFS update process, improve progress handling and logging
|
||||
|
||||
|
||||
## [1.3.46] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.46
|
||||
|
||||
|
||||
## [1.3.45] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.45
|
||||
- workflow: update SPIFFS binary creation to include minimal header and adjust update validation logic
|
||||
|
||||
|
||||
## [1.3.44] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.44
|
||||
- update header title to 'Hollo Lollo Trollo'
|
||||
- update header title to 'Filament Management Tool' and improve update response messages
|
||||
|
||||
|
||||
## [1.3.43] - 2025-02-22
|
||||
### Changed
|
||||
- update webpages for version v1.3.43
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
@ -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) {
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
|
@ -24,7 +24,7 @@
|
||||
<img src="/logo.png" alt="FilaMan Logo" class="logo">
|
||||
<div class="logo-text">
|
||||
<h1>FilaMan<span class="version"></span></h1>
|
||||
<h4>Filament Management Tool</h4>
|
||||
<h4>Hollo Lollo Trollo</h4>
|
||||
</div>
|
||||
</div>
|
||||
<nav style="display: flex; gap: 1rem;">
|
||||
|
@ -9,7 +9,7 @@
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[common]
|
||||
version = "1.3.43"
|
||||
version = "1.3.54"
|
||||
|
||||
#test
|
||||
|
||||
|
@ -165,6 +165,9 @@ void sendAmsData(AsyncWebSocketClient *client) {
|
||||
}
|
||||
|
||||
void setupWebserver(AsyncWebServer &server) {
|
||||
// Deaktiviere alle Debug-Ausgaben
|
||||
Serial.setDebugOutput(false);
|
||||
|
||||
// WebSocket-Optimierungen
|
||||
ws.onEvent(onWsEvent);
|
||||
ws.enable(true);
|
||||
@ -368,11 +371,11 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
[](AsyncWebServerRequest *request) {
|
||||
// Nach Update-Abschluss
|
||||
bool success = !Update.hasError();
|
||||
String message = success ? "Update successful" : String("Update failed: ") + Update.errorString();
|
||||
AsyncWebServerResponse *response = request->beginResponse(
|
||||
success ? 200 : 400,
|
||||
"application/json",
|
||||
success ? "{\"success\":true,\"message\":\"Update successful\"}"
|
||||
: "{\"success\":false,\"message\":\"Update failed\"}"
|
||||
"{\"success\":" + String(success ? "true" : "false") + ",\"message\":\"" + message + "\"}"
|
||||
);
|
||||
response->addHeader("Connection", "close");
|
||||
request->send(response);
|
||||
@ -390,35 +393,43 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
static size_t updateSize = 0;
|
||||
static int command = 0;
|
||||
|
||||
oledShowMessage("Upgrade please wait");
|
||||
|
||||
// TODO: Backup
|
||||
//oledShowMessage("Upgrade please wait");
|
||||
|
||||
if (!index) {
|
||||
updateSize = request->contentLength();
|
||||
command = (filename.indexOf("spiffs") > -1) ? U_SPIFFS : U_FLASH;
|
||||
command = (filename.indexOf("website") > -1) ? U_SPIFFS : U_FLASH;
|
||||
|
||||
if (command == U_SPIFFS) {
|
||||
// Backup JSON config files before SPIFFS update
|
||||
oledShowMessage("SPIFFS Update...");
|
||||
backupJsonConfigs();
|
||||
}
|
||||
|
||||
// Setze spezifische Update-Flags für SPIFFS-Updates
|
||||
if (!Update.begin(updateSize, command, command == U_SPIFFS ? true : false, command == U_SPIFFS ? 0 : -1)) {
|
||||
if (command == U_SPIFFS) {
|
||||
// Restore JSON config files if update fails at start
|
||||
|
||||
// SPIFFS update with pure binary data
|
||||
if (!Update.begin((updateSize - 4), command)) { // Exclude header size
|
||||
restoreJsonConfigs();
|
||||
String errorMsg = String("Update begin failed: ") + Update.errorString();
|
||||
request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip initial header completely for SPIFFS update
|
||||
if (index == 0 && len >= 4) {
|
||||
data += 4;
|
||||
len -= 4;
|
||||
updateSize -= 4;
|
||||
}
|
||||
} else {
|
||||
oledShowMessage("Firmware Update...");
|
||||
if (!Update.begin(updateSize, command)) {
|
||||
String errorMsg = String("Update begin failed: ") + Update.errorString();
|
||||
request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}");
|
||||
return;
|
||||
}
|
||||
String errorMsg = String("Update begin failed: ") + Update.errorString();
|
||||
request->send(400, "application/json", "{\"success\":false,\"message\":\"" + errorMsg + "\"}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (len) {
|
||||
if (Update.write(data, len) != len) {
|
||||
if (command == U_SPIFFS) {
|
||||
// Restore JSON config files if update fails during write
|
||||
restoreJsonConfigs();
|
||||
}
|
||||
String errorMsg = String("Write failed: ") + Update.errorString();
|
||||
@ -426,15 +437,18 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Sende den Fortschritt als JSON, um unerwünschte Zeilenumbrüche zu vermeiden
|
||||
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)) {
|
||||
if (command == U_SPIFFS) {
|
||||
// Restore JSON config files if update fails at end
|
||||
restoreJsonConfigs();
|
||||
}
|
||||
String errorMsg = String("Update end failed: ") + Update.errorString();
|
||||
|
Reference in New Issue
Block a user