добавил ota

This commit is contained in:
Dmitry Borisenko
2022-02-18 19:48:15 +01:00
parent bf060d4f6f
commit 45a9e34d16
5 changed files with 108 additions and 18 deletions

View File

@@ -23,7 +23,7 @@
//****************************************************constants section*********************************************************/ //****************************************************constants section*********************************************************/
//******************************************************************************************************************************/ //******************************************************************************************************************************/
let version = 404; let version = 405;
let debug = true; let debug = true;
let LOG_MAX_MESSAGES = 10; let LOG_MAX_MESSAGES = 10;
let reconnectTimeout = 20000; let reconnectTimeout = 20000;
@@ -33,8 +33,8 @@
//****************************************************variable section**********************************************************/ //****************************************************variable section**********************************************************/
//******************************************************************************************************************************/ //******************************************************************************************************************************/
//let myip = document.location.hostname; let myip = document.location.hostname;
let myip = "192.168.88.224"; //let myip = "192.168.8.127";
//Flags //Flags
let firstDevListRequest = true; let firstDevListRequest = true;
@@ -53,6 +53,10 @@
let listReady = false; let listReady = false;
let systemReady = false; let systemReady = false;
//update esp
let versionsList = {};
let choosingVersion = undefined;
//configuration //configuration
let configJson = []; let configJson = [];
let configJsonFlag = false; let configJsonFlag = false;
@@ -459,8 +463,9 @@
if (debug) console.log("✔✔", "list data parced"); if (debug) console.log("✔✔", "list data parced");
listReady = true; listReady = true;
} }
if (currentPageName === "/system|" && errorsJsonParced) { if (currentPageName === "/system|" && errorsJsonParced && settingsJsonParced) {
clearParcedFlags(); clearParcedFlags();
getVersionsList();
if (debug) console.log("✔✔", "system data parced"); if (debug) console.log("✔✔", "system data parced");
systemReady = true; systemReady = true;
} }
@@ -850,14 +855,18 @@
} }
async function getRequestJson(url) { async function getRequestJson(url) {
let res = await fetch(url, { try {
mode: "no-cors", let res = await fetch(url, {
method: "GET", mode: "no-cors",
}); method: "GET",
if (res.ok) { });
configSetupJson = await res.json(); if (res.ok) {
} else { configSetupJson = await res.json();
console.log("error", res.status); } else {
console.log("error", res.status);
}
} catch (e) {
console.log(e);
} }
} }
@@ -909,6 +918,52 @@
wsSendMsg(selectedWs, '/rorre|{"' + alarmKey + '":0}'); wsSendMsg(selectedWs, '/rorre|{"' + alarmKey + '":0}');
} }
//************************************************update esp firm************************************************************//
async function getVersionsList() {
try {
let url = settingsJson.serverip + "/iotm/ver.json";
console.log("url", url);
let res = await fetch(url, {
mode: "cors",
method: "GET",
});
if (res.ok) {
versionsList = await res.json();
versionsList = versionsList[errorsJson.bn];
choosingVersion = errorsJson.bver;
console.log(JSON.stringify(versionsList));
} else {
choosingVersion = undefined;
console.log("error, versions list not received", res.statusText);
}
} catch (e) {
choosingVersion = undefined;
console.log("error, versions list not received");
console.log(e);
}
}
function startUpdate() {
if (choosingVersion !== undefined) {
if (choosingVersion === errorsJson.bver) {
window.alert("Эта версия уже установленна");
} else {
if (confirm("Запустить обновление?")) {
console.log("start update...");
//запишем выбранную версию в файл на esp
wsSendMsg(selectedWs, '/rorre|{"chver":' + choosingVersion + "}");
//начнем обновление
wsSendMsg(selectedWs, "/update|");
} else {
console.log("update canceled");
}
}
} else {
window.alert("Версия не выбрана или сервер недоступен");
}
}
//*******************************************************initialisation********************************************************************/ //*******************************************************initialisation********************************************************************/
onMount(async () => { onMount(async () => {
console.log("[i]", "mounted"); console.log("[i]", "mounted");
@@ -997,7 +1052,7 @@
<ListPage show={listReady} deviceList={deviceList} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} /> <ListPage show={listReady} deviceList={deviceList} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} />
</Route> </Route>
<Route path="/system"> <Route path="/system">
<SystemPage show={systemReady} errorsJson={errorsJson} rebootEsp={() => rebootEsp()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} version={version} /> <SystemPage show={systemReady} errorsJson={errorsJson} rebootEsp={() => rebootEsp()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} version={version} versionsList={versionsList} bind:choosingVersion startUpdate={() => startUpdate()} />
</Route> </Route>
<!--<Route path="/utilities">--> <!--<Route path="/utilities">-->

View File

@@ -114,8 +114,10 @@
{/each} {/each}
</tbody> </tbody>
</table> </table>
<button class="btn-lg mb-2" on:click={() => saveConfig()}>{"Сохранить"}</button> <div class="grd-2col1">
<button class="btn-lg mb-2" on:click={() => rebootEsp()}>{"Перезагрузить"}</button> <button class="btn-lg" on:click={() => saveConfig()}>{"Сохранить"}</button>
<button class="btn-lg" on:click={() => rebootEsp()}>{"Перезагрузить"}</button>
</div>
</Card> </Card>
</div> </div>
{:else} {:else}

View File

@@ -63,6 +63,14 @@
<input bind:value={settingsJson.routerpass} class="ipt-rnd text-left focus:border-indigo-500" type="text" /> <input bind:value={settingsJson.routerpass} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
</div> </div>
</div> </div>
<div class="crd-itm-psn">
<div class="w-4/6">
<p class="wgt-dscr-stl">Сервер обновления</p>
</div>
<div class="flex justify-end w-3/6">
<input bind:value={settingsJson.serverip} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
</div>
</div>
{#if errorsJson.passer === 1} {#if errorsJson.passer === 1}
<div class="grd-1col1"> <div class="grd-1col1">
<Alarm title="Введен неправильный пароль" /> <Alarm title="Введен неправильный пароль" />

View File

@@ -62,8 +62,10 @@
{/if} {/if}
</tbody> </tbody>
</table> </table>
<button class="btn-lg mb-2" on:click={() => ((showInput = !showInput), addDevInList())}>{showInput ? "Сохранить" : "Добавить устройство"}</button> <div class="grd-2col1">
<button class="btn-lg" on:click={(msg) => sendToAllDevices("/reboot|")}>{"Перезагрузить все устройства"}</button> <button class="btn-lg" on:click={() => ((showInput = !showInput), addDevInList())}>{showInput ? "Сохранить" : "Добавить устройство"}</button>
<button class="btn-lg" on:click={(msg) => sendToAllDevices("/reboot|")}>{"Перезагрузить все устройства"}</button>
</div>
</Card> </Card>
<Alarm> <Alarm>
<p>Прошитые прошивкой IoT Manager устройства появятся в списке автоматически в течении минуты. Для обновления названий устройств нужно обновить страницу. Устройства должны быть подключены к одному wifi роутеру.</p> <p>Прошитые прошивкой IoT Manager устройства появятся в списке автоматически в течении минуты. Для обновления названий устройств нужно обновить страницу. Устройства должны быть подключены к одному wifi роутеру.</p>

View File

@@ -123,8 +123,14 @@
export let version; export let version;
export let errorsJson; export let errorsJson;
export let rebootEsp = () => {}; export let rebootEsp = () => {};
export let versionsList;
export let choosingVersion;
export let startUpdate = () => {};
export let show; export let show;
export let cancelAlarm = (alarmKey) => {}; export let cancelAlarm = (alarmKey) => {};
@@ -141,6 +147,20 @@
<p class="text-gray-500 font-bold">{errorsJson.bn}</p> <p class="text-gray-500 font-bold">{errorsJson.bn}</p>
</div> </div>
</div> </div>
<div class="crd-itm-psn">
<div class="w-3/4">
<p class="wgt-dscr-stl">Версии прошивки на сервере</p>
</div>
<div class="flex justify-center w-1/4">
<select class="border border-indigo-500 border-4" bind:value={choosingVersion}>
{#each Object.entries(versionsList) as [key, param]}
<option value={param}>
{param}
</option>
{/each}
</select>
</div>
</div>
<div class="crd-itm-psn"> <div class="crd-itm-psn">
<div class="w-3/4"> <div class="w-3/4">
<p class="wgt-dscr-stl">Версия прошивки</p> <p class="wgt-dscr-stl">Версия прошивки</p>
@@ -236,7 +256,10 @@
</div> </div>
<div class="grd-1col1"> <div class="grd-1col1">
<Card> <Card>
<button class="btn-lg" on:click={() => rebootEsp()}>{"Перезагрузить устройство"}</button> <div class="grd-2col1">
<button class="btn-lg" on:click={() => startUpdate()}>{"Обновить прошивку"}</button>
<button class="btn-lg" on:click={() => rebootEsp()}>{"Перезагрузить устройство"}</button>
</div>
</Card> </Card>
</div> </div>
{:else} {:else}