From 87ce6d949d7b28c52580bafc7d19c6fb9c369798 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 28 Mar 2025 10:47:48 +0100 Subject: [PATCH] OTA update tweaks --- ESP32_AP-Flasher/data/update_actions.json | 1 + ESP32_AP-Flasher/data/www/index.html.gz | Bin 6642 -> 6779 bytes ESP32_AP-Flasher/data/www/main.js.gz | Bin 16281 -> 16292 bytes ESP32_AP-Flasher/data/www/ota.js.gz | Bin 6508 -> 6502 bytes ESP32_AP-Flasher/wwwroot/index.html | 3 + ESP32_AP-Flasher/wwwroot/main.js | 6 + ESP32_AP-Flasher/wwwroot/ota.js | 147 +++++++++++----------- 7 files changed, 85 insertions(+), 72 deletions(-) diff --git a/ESP32_AP-Flasher/data/update_actions.json b/ESP32_AP-Flasher/data/update_actions.json index 4714fa81..851d9a19 100644 --- a/ESP32_AP-Flasher/data/update_actions.json +++ b/ESP32_AP-Flasher/data/update_actions.json @@ -10,6 +10,7 @@ "/www/painter.js", "/www/setup.html", "/www/setup.js", + "/www/flash.js", "/www/upload-demo.html" ] } diff --git a/ESP32_AP-Flasher/data/www/index.html.gz b/ESP32_AP-Flasher/data/www/index.html.gz index e90b918061abb7a88151d73bb966f564a2d343ce..38d885983a98c6f29cd81987efbd5885daaf108e 100644 GIT binary patch literal 6779 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 literal 6642 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%0DjeI@dZYak94*ArQaE<1_2!G((ncI@g<}_R?7RdA zj-&dP!m(Gaw_ebeW?hXk?3cZIE9sZpLDBjRtlv=ecanA#uiwP_*dKe1Mzy}xes291 z)^Dl$pcA{T=hkmy{kE#VSA{Y6-1=yLR3Gd$Th&HucXR#X#^f0AheE()=JoM;|9fjy zs^k)81%zoJ6@Bq>5-2-dRS zQ87;er&#~TJg^pyx2;^T2Kcf>Xj}Ps8+(9wCm(ThOY!*>;Y&Io9EWN7-JIS$L-*S@B? z;wW|ApOg0tCOYVh+35!BG%0&)6cX~}u1M2EHfa zxOvcfz{<~L0F20cnjdX|xPK%k)XNtMP6PTkq|ao?U*G{xnBD3LC~>N9=43XFH-bP} zx-eTtZB~_WsR*W)FxltAkz_t)9`S_PvjA=`VDWO9f`9FDaCQ`D)r^?^{@sIq5ze|W&<|$YZlRZ zKjr05uTvVZcq;4-BGkWx#0O47;mc%vgv3KnsuR>|^-iZ%Ri;icuBCaRTW!W9v^)x+ zD^y)I9?Ck(#7u3#9cGi{g@=v8gnl3yyF(VvpYDQM60xnfBmuJ!WRkV&R7nK@#``0N z8M}j02ilum5?Y10`2_JQ?Yvfzv?S2k!NSM{1l!u*+E!^m8PXwldAQivcz2;Aa*%<3 zH4%D&_9s>UZ*(kP*pC7avwQ>S`l0^YJn#B%nb4T5vnS^OeTfo{EWf*Ph@$Wk3bRnG*{qGk4d~C zgL`OMM1bo~P}IHBb`BSg6jGg{SK}CyOlpP8#T@?vv11j?E92IL>Z?=GQBTaXn81O< z-+LUm;P~e(P)TdRjJritH^BfM(MT=0pc!Gzk!Ekpm_LGXFm!YV%dWF&Yogq(A_MIl z!nAIovQ(%Wy3#lb!N9C{vLKC8=N$fKg^}ZCRjmR(w#Zn){e}0;**EToIu5atDGK1X1XSq@Cwt}q}g2mj~ZZW*u$iq%Cyec@^Dh9iSdBj#R*f#RpCu!%U)E!aXp+FT7;K=pos2#=_}x60v@PwK?LYTZKs{rx;!VYB`v)zS^n2Ow0v zqms^qrgs};o7n5$R2seh;HJ_nU$m+qm|DHLU$4Wz<%>pL7qoOis#|(sW&&VTqo-c7 zHwDiNJ(24&)jm*d_K|8UrrKJj+BQ@>T`+_mnAx`hW21cJZ!d1%)XxBSBgWlW#@)2I zPa-@^Tqb7$b5$htMLB=RT*q@CR#2RD1&A5U&@-IB_CTCCdD;AZy1ipR&Q{#-9ut_{1zLngPW~B*6ORxEo(R|(q-L9 zhU$b1bR2FA{>Uhfiqa<1l|~(iR~n5c8oE3HL59p7g4y+87B*No9$Vy(Hy{9J{)z?R zw1^-os7x>vlEp8&HRb0&VCzV2QX>961;<8qB#@ko}Y}8ygvU2LWji z=3;&S5z#i^e?+`6#P_Q04BECP6QfP_`^$7l@(siN2NX)Fb0h8-BER#`jw>*VexUcz zP+G`%Ld^363nEEfHp{Irc&n6a0I@6eMUda6x944`0e=&t*+hw|hf?R(rPLczn6Ct7 zav{8lfT8pvA=>ee$&P`D!YS#_U}iJgAlc*V!Off2@%0G^L1_P~vEwo@0U}aSfc!j#Z*-k8%;kQ8R3&d&zrY7LWfuPO^Po2TcJW|^M zDVarX$jJwO%5h34SqM^8GZRNJy=&j@b~t-`0RSE!kJX``)uEm`s*U*(wK+L{BQq9G zg|j){OVuqfdAmTyu{8zeaB<6D5a{Y{>MCZHA)Wa)%OOVro@7v&=yr7g{H12N&r1R=?Qhcine2uzYZ<6Ls;0M`P<2!-bzut>&ZIiZluFH| zs7za(3zaTfy$#FkM$6Jxr@vHw%#?I=!VdI0-i}6)Gim$l*V?NwW$`q%?I>$ZQ_=Zb#Cv=?ju>%^|Q`bKupsLu*{JRorYo?hme7 z%_170jAya|+Ptoiqq4SkVS#oC?zG0O8kic=cl~GqBHSwtXZDTBP0|XUu=Lzb-l^T& z9%f75s(K^~ge-pvVzoKH=gSncARqx;5>3;Ko4$I-XR5b1?)W^lovf8W7C0B7Q7;{g zuyh%fi#3M}r)?NGzK~pJF4ynXO`lhV3MEx7J`0sL5^DRX8Mgo!-{&4%rA+y? zLa8Le^K8i`289^pwBF6pPAGC{rV4U8QW zdjPn@1G}ESo8f_x$crR%VmcTc$(3z<(l6jpP$ zwTIG5sddbHd}t+taC#=}O;9P(#s`X>2XrZpg|Q}P%5ay!K1rRx1c7u7v<)GX2r3RD zv(gHLzE1O6{p$7g?8J0QWVV7GBu^I0>oBM%FkN1rXD$gak1-eKLY?#5n~lsUptYQ= zIOFn6CU6lt01{{Fm#F*CL4@e)IO-BE|ai+=KsSr66ywtw47pl zm)JEOQDBx}NbP0=?c<6inUWOKN@s|!NCZh&&?SS2ZtStSb=*5xOG!D{SJfR%I zV_1QCM5OL@UyAXF3i61W`2dA|LWk$ZoD-S9i1P|3iWQ1=&%#^J-uK0H{LI*Z=?k diff --git a/ESP32_AP-Flasher/data/www/main.js.gz b/ESP32_AP-Flasher/data/www/main.js.gz index 8f86170003497b4012c5792bc436d2d4e941bf30..40a0ce7774678e50703442c7aac6f1372e82bcb7 100644 GIT binary patch literal 16292 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 amU^PtAv-#IbIzC=$o~ZsJu*d{1pxrXnWTmQ literal 16281 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 S=|hiaOaBkr=xOptbN~QA0>Bdh diff --git a/ESP32_AP-Flasher/wwwroot/index.html b/ESP32_AP-Flasher/wwwroot/index.html index c92e86a6..2a893a23 100644 --- a/ESP32_AP-Flasher/wwwroot/index.html +++ b/ESP32_AP-Flasher/wwwroot/index.html @@ -530,6 +530,9 @@ options:

Releases

+ To update to the latest version, use the big 'update now' button if it is shown on top of this screen.
+ To up/downgrade to other versions: for the smoothest experience, first update the ESP32 part and
+ without rebooting, update the filesystem, then reboot the AP and reload the webpage.

diff --git a/ESP32_AP-Flasher/wwwroot/main.js b/ESP32_AP-Flasher/wwwroot/main.js index 803e9298..dd200f7f 100644 --- a/ESP32_AP-Flasher/wwwroot/main.js +++ b/ESP32_AP-Flasher/wwwroot/main.js @@ -494,6 +494,12 @@ function updatecards() { } else { // $('#tag' + tagmac + ' .nextcheckin').innerHTML = ""; } + + if (item.dataset.nextupdate < (Date.now() / 1000) - servertimediff) { + $('#tag' + tagmac + ' .waitingicon').style.display = 'inline-block'; + } else { + $('#tag' + tagmac + ' .waitingicon').style.display = 'none'; + } }) $('#dashboardTagCount').innerHTML = tagcount; diff --git a/ESP32_AP-Flasher/wwwroot/ota.js b/ESP32_AP-Flasher/wwwroot/ota.js index 4ecfde0c..4fddfde3 100644 --- a/ESP32_AP-Flasher/wwwroot/ota.js +++ b/ESP32_AP-Flasher/wwwroot/ota.js @@ -19,7 +19,7 @@ export async function initUpdate() { gModuleType = "ESP32-C6"; gShortName = "C6"; } - else if(apConfig?.H2 && apConfig.H2 == 1) { + else if (apConfig?.H2 && apConfig.H2 == 1) { gIsH2 = true; gModuleType = "ESP32-H2"; gShortName = "H2"; @@ -71,13 +71,15 @@ export async function initUpdate() { print(`current env: ${sdata.env}`); print(`build date: ${formatEpoch(sdata.buildtime)}`); print(`esp32 version: ${sdata.buildversion}`); - if(gModuleType != '') { - var hex_ver = '0000' + sdata.ap_version.toString(16); - print(`${gModuleType} version: ${hex_ver.slice(-4)}`); - } print(`filesystem version: ${filesystemversion}`); print(`psram size: ${sdata.psramsize}`); print(`flash size: ${sdata.flashsize}`); + if (gModuleType !== '') { + let hex_ver = sdata.ap_version && !isNaN(sdata.ap_version) + ? ('0000' + sdata.ap_version.toString(16)).slice(-4) + : 'unknown'; + print(`${gModuleType} version: ${hex_ver}`); + } print("--------------------------", "gray"); env = apConfig.env || sdata.env; if (sdata.env != env) { @@ -90,7 +92,7 @@ export async function initUpdate() { $('#environment').value = env; } - const rdata = await fetch(repoUrl).then(response => response.json()) + const rdata = await fetch(repoUrl).then(response => response.json()) const JsonName = 'firmware_' + gShortName + '.json'; const releaseDetails = rdata.map(release => { const assets = release.assets; @@ -137,7 +139,7 @@ export async function initUpdate() { releaseDetails.forEach(release => { if (rowCounter < 4 && release?.html_url) { const tableRow = document.createElement('tr'); - let tablerow = `${release.tag_name}${release.date}${release.name}`; + let tablerow = `${release.tag_name}${release.date}${release.name}`; if (release.tag_name == currentVer) { tablerow += "current version"; } else if (release.date < formatEpoch(currentBuildtime)) { @@ -150,85 +152,86 @@ export async function initUpdate() { rowCounter++; } if (release?.firmware_url) { - radioFwCounter++; + radioFwCounter++; } }); $('#releasetable').innerHTML = ""; $('#releasetable').appendChild(table); - if(radioFwCounter > 0) { - const table1 = document.createElement('table'); - const tableHeader1 = document.createElement('tr'); + if (radioFwCounter > 0) { + const table1 = document.createElement('table'); + const tableHeader1 = document.createElement('tr'); - tableHeader1.innerHTML = 'ReleaseDateName
Update
VersionRemark'; - table1.appendChild(tableHeader1); + tableHeader1.innerHTML = 'ReleaseDateName
Update
VersionRemark'; + table1.appendChild(tableHeader1); - rowCounter = 0; - for (const release of releaseDetails) { - if (rowCounter < 4 && release?.firmware_url) { - const tableRow = document.createElement('tr'); - var tablerow; - var firmwareVer = "unknown"; - var release_url = release.firmware_url; + rowCounter = 0; + for (const release of releaseDetails) { + if (rowCounter < 4 && release?.firmware_url) { + const tableRow = document.createElement('tr'); + var tablerow; + var firmwareVer = "unknown"; + var release_url = release.firmware_url; tablerow = `${release.tag_name}${release.date}${release.name}`; tablerow += ``; const firmwareUrl = 'http://proxy.openepaperlink.org/proxy.php?url=' + release.firmware_url; - firmwareVer = await fetch(firmwareUrl, { method: 'GET'}) + firmwareVer = await fetch(firmwareUrl, { method: 'GET' }) .then(function (response) { return response.json(); }) - .then(function (response) { - return response[2]['version']; }) - .catch(error => { - print('Error fetching releases:' + error, "red"); - }); - tablerow += '' + firmwareVer + ''; - if(firmwareVer != 'unknown') { - let Ver = Number('0x' + firmwareVer); - if(Ver > gCurrentRfVer) { - tablerow += 'newer'; - } - else if (Ver < gCurrentRfVer) { - tablerow += 'older'; - } - else if(!Number.isNaN(Ver)){ - tablerow += 'current version'; - } - } - tablerow += ''; - tableRow.innerHTML = tablerow; - table1.appendChild(tableRow); - rowCounter++; - } - }; + .then(function (response) { + return response[2]['version']; + }) + .catch(error => { + print('Error fetching releases:' + error, "red"); + }); + tablerow += '' + firmwareVer + ''; + if (firmwareVer != 'unknown') { + let Ver = Number('0x' + firmwareVer); + if (Ver > gCurrentRfVer) { + tablerow += 'newer'; + } + else if (Ver < gCurrentRfVer) { + tablerow += 'older'; + } + else if (!Number.isNaN(Ver)) { + tablerow += 'current version'; + } + } + tablerow += ''; + tableRow.innerHTML = tablerow; + table1.appendChild(tableRow); + rowCounter++; + } + }; - $('#radio_releasetable').innerHTML = ""; - $('#radio_releasetable').appendChild(table1); + $('#radio_releasetable').innerHTML = ""; + $('#radio_releasetable').appendChild(table1); } - const table2 = document.createElement('table'); - { - const tableHeader2 = document.createElement('tr'); - tableHeader2.innerHTML = 'Firmware
Update
'; - table2.appendChild(tableHeader2); - const tableRow = document.createElement('tr'); + const table2 = document.createElement('table'); + { + const tableHeader2 = document.createElement('tr'); + tableHeader2.innerHTML = 'Firmware
Update
'; + table2.appendChild(tableHeader2); + const tableRow = document.createElement('tr'); tablerow = 'Binaries from file system'; - tablerow += ``; - tableRow.innerHTML = tablerow; - table2.appendChild(tableRow); - } - { - const tableRow = document.createElement('tr'); - const Url = "https://raw.githubusercontent.com/" + repo + - "/master/binaries/ESP32-" + gShortName + - "/firmware_" + gShortName + ".json"; + tablerow += ``; + tableRow.innerHTML = tablerow; + table2.appendChild(tableRow); + } + { + const tableRow = document.createElement('tr'); + const Url = "https://raw.githubusercontent.com/" + repo + + "/master/binaries/ESP32-" + gShortName + + "/firmware_" + gShortName + ".json"; tablerow = `Latest version from repo`; - tablerow += ``; - tableRow.innerHTML = tablerow; - table2.appendChild(tableRow); - } - $('#radio_releasetable1').innerHTML = ""; - $('#radio_releasetable1').appendChild(table2); + tablerow += ``; + tableRow.innerHTML = tablerow; + table2.appendChild(tableRow); + } + $('#radio_releasetable1').innerHTML = ""; + $('#radio_releasetable1').appendChild(table2); disableButtons(buttonState); } @@ -454,7 +457,7 @@ export async function updateC6H2(Url) { disableButtons(true); running = true; errors = 0; - const ReleaseUrl = Url.substring(0,Url.lastIndexOf('/')); + const ReleaseUrl = Url.substring(0, Url.lastIndexOf('/')); const consoleDiv = document.getElementById('updateconsole'); consoleDiv.scrollTop = consoleDiv.scrollHeight; const formData = new FormData(); @@ -495,7 +498,7 @@ $('#selectRepo').onclick = function (event) { return fetch(updateUrl); } else { throw new Error("Json file binaries.json and/or filesystem.json not found in the release assets"); - } + } }; }) .then(updateResponse => { @@ -529,7 +532,7 @@ $('#selectRepo').onclick = function (event) { }) .catch(error => { print('Error fetching releases:' + error, "red"); - }); + }); } $('#cancelSelectRepo').onclick = function (event) { @@ -708,7 +711,7 @@ async function fetchAndCheckTagtypes(cleanup) { check = false; } } - + if (check) { let githubUrl = "https://raw.githubusercontent.com/" + repo + "/master/resources/tagtypes/" + filename;