добавил 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*********************************************************/
//******************************************************************************************************************************/
let version = 404;
let version = 405;
let debug = true;
let LOG_MAX_MESSAGES = 10;
let reconnectTimeout = 20000;
@@ -33,8 +33,8 @@
//****************************************************variable section**********************************************************/
//******************************************************************************************************************************/
//let myip = document.location.hostname;
let myip = "192.168.88.224";
let myip = document.location.hostname;
//let myip = "192.168.8.127";
//Flags
let firstDevListRequest = true;
@@ -53,6 +53,10 @@
let listReady = false;
let systemReady = false;
//update esp
let versionsList = {};
let choosingVersion = undefined;
//configuration
let configJson = [];
let configJsonFlag = false;
@@ -459,8 +463,9 @@
if (debug) console.log("✔✔", "list data parced");
listReady = true;
}
if (currentPageName === "/system|" && errorsJsonParced) {
if (currentPageName === "/system|" && errorsJsonParced && settingsJsonParced) {
clearParcedFlags();
getVersionsList();
if (debug) console.log("✔✔", "system data parced");
systemReady = true;
}
@@ -850,14 +855,18 @@
}
async function getRequestJson(url) {
let res = await fetch(url, {
mode: "no-cors",
method: "GET",
});
if (res.ok) {
configSetupJson = await res.json();
} else {
console.log("error", res.status);
try {
let res = await fetch(url, {
mode: "no-cors",
method: "GET",
});
if (res.ok) {
configSetupJson = await res.json();
} else {
console.log("error", res.status);
}
} catch (e) {
console.log(e);
}
}
@@ -909,6 +918,52 @@
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********************************************************************/
onMount(async () => {
console.log("[i]", "mounted");
@@ -997,7 +1052,7 @@
<ListPage show={listReady} deviceList={deviceList} showInput={showInput} addDevInList={() => addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} />
</Route>
<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 path="/utilities">-->

View File

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

View File

@@ -63,6 +63,14 @@
<input bind:value={settingsJson.routerpass} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
</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}
<div class="grd-1col1">
<Alarm title="Введен неправильный пароль" />

View File

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

View File

@@ -123,8 +123,14 @@
export let version;
export let errorsJson;
export let rebootEsp = () => {};
export let versionsList;
export let choosingVersion;
export let startUpdate = () => {};
export let show;
export let cancelAlarm = (alarmKey) => {};
@@ -141,6 +147,20 @@
<p class="text-gray-500 font-bold">{errorsJson.bn}</p>
</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="w-3/4">
<p class="wgt-dscr-stl">Версия прошивки</p>
@@ -236,7 +256,10 @@
</div>
<div class="grd-1col1">
<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>
</div>
{:else}