From dbb4a7d70240fbd8ea257d6ad1b6e1fab84914ba Mon Sep 17 00:00:00 2001
From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com>
Date: Sun, 25 Sep 2022 17:49:24 +0200
Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?=
=?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE=D0=B4=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/App.svelte | 502 +++++++++++++++++-----------------------
src/pages/Config.svelte | 3 +-
2 files changed, 209 insertions(+), 296 deletions(-)
diff --git a/src/App.svelte b/src/App.svelte
index 6b06897..194fd59 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -54,18 +54,29 @@
let rebootingUpdatingInProgress = false;
const myTimeout = undefined;
- let additionalParams = false;
-
//dashboard
let pages = [];
- //ready flags
- let dashReady = false;
- let configReady = false;
- let connectionReady = false;
- let listReady = false;
+ //ready
+ let pageReady = {
+ dash: false,
+ config: false,
+ connection: false,
+ list: false,
+ system: false,
+ dev: false,
+ };
+
+ let parcedFlags = {
+ deviceListJson: false,
+ ssidJson: false,
+ errorsJson: false,
+ settingsJson: false,
+ statusJson: false,
+ paramsJson: false,
+ };
+
let systemReady = false;
- let devReady = false;
//update esp
let versionsList = {};
@@ -73,47 +84,19 @@
//JSON Files====================================
let configJson = [];
- let configJsonFlag = false;
- let configJsonParced = false;
-
let widgetsJson = [];
- let widgetsJsonFlag = false;
- let widgetsJsonParced = false;
-
let itemsJson = [];
- let itemsJsonFlag = false;
- let itemsJsonParced = false;
-
- let chartJson = {};
- let chartJsonFlag = false;
- let chartTopic;
- let chartJsonParced = false;
-
let scenarioJson = {};
- let scenarioJsonFlag = false;
- let scenarioJsonParced = false;
+ let chartJsonFlag = false;
//===============================================
let layoutJson = [];
- let layoutJsonArrayParced = false;
- let layoutReceivingCompleted = false;
-
let settingsJson = {};
- let settingsJsonParced = false;
-
let errorsJson = {};
- let errorsJsonParced = false;
-
let ssidJson = {};
- let ssidJsonParced = false;
-
let paramsJson = {};
- let paramsJsonParced = false;
-
let incDeviceList = [];
- let deviceListParced = false;
-
let deviceList = [];
deviceList = [
{
@@ -160,13 +143,80 @@
//***********************************************************navigation********************************************************/
let currentPageName = undefined;
- var configJsonBlob = new MyBlobBuilder();
- var widgetsJsonBlob = new MyBlobBuilder();
- var itemsJsonBlob = new MyBlobBuilder();
- var scenarioTxtBlob = new MyBlobBuilder();
var chartJsonBlob = new MyBlobBuilder();
- var layoutJsonArray = [];
+ var layoutJsonBlobArray = [];
+
+ class blobToJson {
+ constructor(st, end, logMsg) {
+ this.st = st;
+ this.end = end;
+ this.logMsg = logMsg;
+ this.flag = false;
+ this.parced = false;
+ this.blob = new MyBlobBuilder();
+ this.out;
+ this.ws = 0;
+ }
+
+ handle(data) {
+ this.data = data;
+ this.stEvent();
+ this.endEvent();
+ }
+
+ stEvent() {
+ if (this.data === this.st) {
+ this.flag = true;
+ }
+ }
+
+ endEvent() {
+ if (this.data === this.end) {
+ this.flag = false;
+ var bb = this.blob.getBlob();
+ let reader = new FileReader();
+ reader.readAsText(bb);
+ reader.onload = () => {
+ let result = reader.result;
+ if (IsJsonParse(result)) {
+ this.out = JSON.parse(result);
+ if (debug) console.log("✔", this.logMsg + " blob parced");
+ this.parced = true;
+ onParced();
+ }
+ };
+ this.blob.clear();
+ }
+ }
+
+ setAsNotParced() {
+ this.parced = false;
+ }
+
+ get isParced() {
+ return this.parced;
+ }
+
+ //после того как забрали данные класс более считается как не parced
+ get getData() {
+ this.parced = false;
+ return this.out;
+ }
+
+ append(data) {
+ if (this.flag) this.blob.append(data);
+ }
+
+ //set setWs(ws) {
+ // this.ws = ws;
+ //}
+ }
+
+ let configJsonPacket = new blobToJson("/st/config.json", "/end/config.json", "config.json");
+ let itemsJsonPacket = new blobToJson("/st/items.json", "/end/items.json", "items.json");
+ let widgetsJsonPacket = new blobToJson("/st/widgets.json", "/end/widgets.json", "widgets.json");
+ let scenarioJsonPacket = new blobToJson("/st/scenario.json", "/end/scenario.json", "scenario.json");
router.subscribe(handleNavigation);
@@ -203,49 +253,6 @@
sortingLayout();
});
- class blobToJson {
- constructor(data, st, end) {
- this.data = data;
- this.st = st;
- this.end = end;
- this.flag = true;
- this.blob = new MyBlobBuilder();
- }
-
- stEvent() {
- if (this.data === st) {
- this.flag = true;
- }
- }
-
- endEvent() {
- if (this.data === end) {
- this.flag = false;
- var bb = blob.getBlob();
- let reader = new FileReader();
- reader.readAsText(bb);
- reader.onload = () => {
- let result = reader.result;
- if (IsJsonParse(result)) {
- let out = JSON.parse(result);
- if (debug) console.log("✔", "chartJson parced", out);
- //дергаем функцию из класса
- }
- };
- this.blob.clear();
- }
- }
-
- //сборщик данных
- append(data) {
- if (this.flag) this.blob.append(data);
- }
- }
-
- // Использование:
- //let chartJson = new blobToJson();
- //user.sayHi();
-
//****************************************************web sockets section******************************************************/
function connectToAllDevices() {
//closeAllConnection();
@@ -356,23 +363,22 @@
deviceList = combineArrays(deviceList, incDeviceList);
}
firstDevListRequest = false;
-
deviceList = deviceList;
- deviceListParced = true;
+ parcedFlags.deviceListJson = true;
if (debug) console.log("✔", "deviceList parced");
onParced();
whenDeviceListWasUpdated();
connectToAllDevices();
}
}
-
//сборщик ssidJson сообщений
if (data.includes('ssid":"')) {
if (IsJsonParse(data)) {
ssidJson = JSON.parse(data);
ssidJson = ssidJson;
if (debug) console.log("✔", "ssidJson parced");
- ssidJsonParced = true;
+ parcedFlags.ssidJson = true;
+
onParced();
}
}
@@ -381,7 +387,7 @@
if (IsJsonParse(data)) {
errorsJson = JSON.parse(data);
errorsJson = errorsJson;
- errorsJsonParced = true;
+ parcedFlags.errorsJson = true;
if (debug) console.log("✔", "errorsJson parced");
onParced();
}
@@ -392,120 +398,24 @@
settingsJson = JSON.parse(data);
settingsJson = settingsJson;
//sortingLayout();
- settingsJsonParced = true;
+ parcedFlags.settingsJson = true;
if (debug) console.log("✔", "settingsJson parced");
onParced();
}
}
-
//сборщик log сообщений
if (data.includes("/log|")) {
data = data.replace("/log|", "");
//let msg = data.toString();
addCoreMsg(data);
}
-
//метки начала конца пакетов для Blob--------------------------------------------------------------------------//
- //сборщик scenarioJson пакетов
- if (data === "/st/scenario.json") {
- scenarioJsonFlag = true;
- }
- if (data === "/end/scenario.json") {
- scenarioJsonFlag = false;
- var bb = scenarioTxtBlob.getBlob();
- let scenarioJsonReader = new FileReader();
- scenarioJsonReader.readAsText(bb);
- scenarioJsonReader.onload = () => {
- let scenarioJsonResult = scenarioJsonReader.result;
-
- if (IsJsonParse(scenarioJsonResult)) {
- scenarioJson = JSON.parse(scenarioJsonResult);
- scenarioJson = scenarioJson;
- scenarioJsonParced = true;
- if (debug) console.log("✔", "scenarioJson parced");
- onParced();
- }
- };
- scenarioTxtBlob.clear();
- }
- //сборщик configJson пакетов
- if (data === "/st/config.json") {
- configJsonFlag = true;
- }
- if (data === "/end/config.json") {
- configJsonFlag = false;
- var bb = configJsonBlob.getBlob();
- let configJsonReader = new FileReader();
- configJsonReader.readAsText(bb);
- configJsonReader.onload = () => {
- let configJsonResult = configJsonReader.result;
-
- if (IsJsonParse(configJsonResult)) {
- configJson = JSON.parse(configJsonResult);
- configJson = configJson;
- configJsonParced = true;
- if (debug) console.log("✔", "configJson parced");
- onParced();
- }
- };
- configJsonBlob.clear();
- }
- //сборщик widgetsJson пакетов
- if (data === "/st/widgets.json") {
- widgetsJsonFlag = true;
- }
- if (data === "/end/widgets.json") {
- widgetsJsonFlag = false;
- var bb = widgetsJsonBlob.getBlob();
- let widgetsJsonReader = new FileReader();
- widgetsJsonReader.readAsText(bb);
- widgetsJsonReader.onload = () => {
- let widgetsJsonResult = widgetsJsonReader.result;
-
- if (IsJsonParse(widgetsJsonResult)) {
- widgetsJson = JSON.parse(widgetsJsonResult);
- widgetsJson = widgetsJson;
- widgetsJsonParced = true;
- if (debug) console.log("✔", "widgetsJson parced");
- onParced();
- }
- };
- widgetsJsonBlob.clear();
- }
- //сборщик itemsJson пакетов
- if (data === "/st/items.json") {
- itemsJsonFlag = true;
- }
- if (data === "/end/items.json") {
- itemsJsonFlag = false;
- var bb = itemsJsonBlob.getBlob();
- let itemsJsonReader = new FileReader();
- itemsJsonReader.readAsText(bb);
- itemsJsonReader.onload = () => {
- let itemsJsonResult = itemsJsonReader.result;
-
- if (IsJsonParse(itemsJsonResult)) {
- itemsJson = JSON.parse(itemsJsonResult);
- itemsJson = itemsJson;
- itemsJsonParced = true;
- if (debug) console.log("✔", "itemsJson parced");
- onParced();
- }
- };
- itemsJsonBlob.clear();
- }
+ configJsonPacket.handle(data);
+ itemsJsonPacket.handle(data);
+ widgetsJsonPacket.handle(data);
+ scenarioJsonPacket.handle(data);
}
//прием от всех учтройств
- //сборщик layoutJson пакетов
- if (data === "/st/layout.json") {
- layoutReceivingCompleted = false;
- }
- if (data === "/end/layout.json") {
- console.log("[1]", ws, "blob package received");
- //как только прилетел весь блоб мы начнем его читать ридером и заодно запросим json-ы всех параметров
- combineLayoutsInOne(ws);
- wsSendMsg(ws, "/params|");
- }
//сборщик paramsJson сообщений
if (data.includes('"params":"')) {
if (IsJsonParse(data)) {
@@ -520,6 +430,15 @@
onParced();
}
}
+ //сборщик layoutJson пакетов
+ if (data === "/st/layout.json") {
+ }
+ if (data === "/end/layout.json") {
+ console.log("[1]", ws, "blob package received");
+ //как только прилетел весь блоб мы начнем его читать ридером и заодно запросим json-ы всех параметров
+ combineLayoutsInOne(ws);
+ wsSendMsg(ws, "/params|");
+ }
//сборщик chartJson пакетов
if (data === "/st/chart.json") {
chartJsonFlag = true;
@@ -552,23 +471,21 @@
if (debug) console.log("[i] status (dgt)", ws, JSON.stringify(statusJson));
}
}
- //если сообщение является массивом
}
}
-
//сообщения типа Blob-------------------------------------------------------------------------------------//
if (event.data instanceof Blob) {
//принимаем данные только для выбранного устройства
if (ws === selectedWs) {
- if (configJsonFlag) configJsonBlob.append(event.data);
- if (widgetsJsonFlag) widgetsJsonBlob.append(event.data);
- if (itemsJsonFlag) itemsJsonBlob.append(event.data);
- if (scenarioJsonFlag) scenarioTxtBlob.append(event.data);
+ if (configJsonPacket) configJsonPacket.append(event.data);
+ if (itemsJsonPacket) itemsJsonPacket.append(event.data);
+ if (widgetsJsonPacket) widgetsJsonPacket.append(event.data);
+ if (scenarioJsonPacket) scenarioJsonPacket.append(event.data);
}
//принимаем данные от всех устройств
if (chartJsonFlag) chartJsonBlob.append(event.data);
- if (!layoutJsonArray[ws]) layoutJsonArray[ws] = new MyBlobBuilder();
- layoutJsonArray[ws].append(event.data);
+ if (!layoutJsonBlobArray[ws]) layoutJsonBlobArray[ws] = new MyBlobBuilder();
+ layoutJsonBlobArray[ws].append(event.data);
}
});
socket[ws].addEventListener("close", (event) => {
@@ -584,11 +501,61 @@
}
}
+ async function onParced() {
+ if (currentPageName === "/|") {
+ clearParcedFlags();
+ if (debug) console.log("✔", "dashboard data received");
+ pageReady.dash = true;
+ }
+ if (currentPageName === "/config|") {
+ if (configJsonPacket.isParced && itemsJsonPacket.isParced && widgetsJsonPacket.isParced && scenarioJsonPacket.isParced) {
+ clearParcedFlags();
+ configJson = configJsonPacket.getData;
+ itemsJson = itemsJsonPacket.getData;
+ widgetsJson = widgetsJsonPacket.getData;
+ scenarioJson = scenarioJsonPacket.getData;
+ if (debug) console.log("✔✔", "config data parced");
+ pageReady.config = true;
+ }
+ }
+ if (currentPageName === "/connection|") {
+ if (parcedFlags.ssidJson && parcedFlags.settingsJson && parcedFlags.errorsJson) {
+ clearParcedFlags();
+ if (debug) console.log("✔✔", "connection data parced");
+ pageReady.connection = true;
+ }
+ }
+ if (currentPageName === "/list|") {
+ if (parcedFlags.deviceListJson) {
+ clearParcedFlags();
+ if (debug) console.log("✔✔", "list data parced");
+ pageReady.list = true;
+ }
+ }
+ if (currentPageName === "/system|") {
+ if (parcedFlags.errorsJson && parcedFlags.settingsJson) {
+ clearParcedFlags();
+ getVersionsList();
+ if (debug) console.log("✔✔", "system data parced");
+ pageReady.system = true;
+ }
+ }
+ if (currentPageName === "/dev|") {
+ if (parcedFlags.errorsJson && parcedFlags.settingsJson && configJsonPacket.isParced && itemsJsonPacket.isParced && parcedFlags.paramsJson) {
+ clearParcedFlags();
+ configJson = configJsonPacket.getData;
+ itemsJson = itemsJsonPacket.getData;
+ if (debug) console.log("✔✔", "dev data parced");
+ pageReady.dev = true;
+ }
+ }
+ }
+
//***********************************************************dashboard***************************************************************/
//слияние layout-ов всех устройств в общий layout
async function combineLayoutsInOne(ws) {
- var bb = layoutJsonArray[ws].getBlob();
+ var bb = layoutJsonBlobArray[ws].getBlob();
let reader = new FileReader();
reader.readAsText(bb);
@@ -637,7 +604,7 @@
}
return 0;
});
- layoutReceivingCompleted = true;
+
layoutJson = layoutJson;
console.log("[3]", "layout sort");
}
@@ -720,41 +687,6 @@
return o1;
}
- async function onParced() {
- if (currentPageName === "/|") {
- clearParcedFlags();
- if (debug) console.log("✔", "dashboard data received");
- dashReady = true;
- }
- if (currentPageName === "/config|" && itemsJsonParced && widgetsJsonParced && configJsonParced && settingsJsonParced && scenarioJsonParced) {
- clearParcedFlags();
- if (debug) console.log("✔✔", "config data parced");
- configReady = true;
- }
- if (currentPageName === "/connection|" && ssidJsonParced && settingsJsonParced && errorsJsonParced) {
- clearParcedFlags();
- if (debug) console.log("✔✔", "connection data parced");
- connectionReady = true;
- }
- if (currentPageName === "/list|" && deviceListParced) {
- clearParcedFlags();
- if (debug) console.log("✔✔", "list data parced");
- listReady = true;
- }
- if (currentPageName === "/system|" && errorsJsonParced && settingsJsonParced) {
- clearParcedFlags();
- getVersionsList();
- if (debug) console.log("✔✔", "system data parced");
- systemReady = true;
- }
- if (currentPageName === "/dev|" && errorsJsonParced && settingsJsonParced && configJsonParced && itemsJsonParced && paramsJsonParced) {
- clearParcedFlags();
- getVersionsList();
- if (debug) console.log("✔✔", "dev data parced");
- devReady = true;
- }
- }
-
function saveConfig() {
wsSendMsg(selectedWs, "/tuoyal|" + JSON.stringify(generateLayout()));
modify();
@@ -852,50 +784,32 @@
function clearData() {
configJson = [];
- configJsonBlob.clear();
-
widgetsJson = [];
- widgetsJsonBlob.clear();
-
itemsJson = [];
- itemsJsonBlob.clear();
-
- chartJsonBlob.clear();
-
layoutJson = [];
- layoutJsonArray = [];
+ layoutJsonBlobArray = [];
- scenarioJson = "";
- scenarioTxtBlob.clear();
+ scenarioJson = {};
settingsJson = {};
errorsJson = {};
//coreMessages = [];
- dashReady = false;
- configReady = false;
- connectionReady = false;
- listReady = false;
- systemReady = false;
+ for (const [key, value] of Object.entries(pageReady)) {
+ pageReady[key] = false;
+ }
clearParcedFlags();
- //if (debug) console.log("[i]", "all app data cleared");
+ if (debug) console.log("[i]", "all app data cleared");
}
function clearParcedFlags() {
- configJsonParced = false;
- widgetsJsonParced = false;
- itemsJsonParced = false;
- chartJsonParced = false;
- layoutJsonArrayParced = false;
- layoutReceivingCompleted = false;
- settingsJsonParced = false;
- errorsJsonParced = false;
- ssidJsonParced = false;
- paramsJsonParced = false;
- deviceListParced = false;
- scenarioJsonParced = false;
+ //chartJsonParced = false;
+
+ for (const [key, value] of Object.entries(parcedFlags)) {
+ parcedFlags[key] = false;
+ }
clearFlags();
}
@@ -1154,11 +1068,6 @@
}
}
- function showAdditionalParams(id) {
- additionalParams = true;
- if (debug) console.log("[i]", "user open add params ", id);
- }
-
//**********************************************************modal*************************************************************************/
function showModal() {
showModalFlag = !showModalFlag;
@@ -1203,26 +1112,31 @@
//************************************************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 {
+ versionsList = {};
+ if (settingsJson.serverip) {
+ 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", res.statusText);
+ console.log("error, versions list not received");
+ console.log(e);
}
- } catch (e) {
- choosingVersion = undefined;
- console.log("error, versions list not received");
- console.log(e);
+ } else {
+ console.log("error, server missing");
}
}
@@ -1314,23 +1228,23 @@
{:else}
- wsPush(ws, topic, status)} />
+ wsPush(ws, topic, status)} />
- saveConfig()} cleanLogs={() => cleanLogs()} rebootEsp={() => rebootEsp()} scenarioJson={scenarioJson} />
+ saveConfig()} cleanLogs={() => cleanLogs()} rebootEsp={() => rebootEsp()} scenarioJson={scenarioJson} />
- rebootEsp()} ssidClick={() => ssidClick()} saveSett={() => saveSett()} saveMqtt={() => saveMqtt()} settingsJson={settingsJson} errorsJson={errorsJson} ssidJson={ssidJson} />
+ rebootEsp()} ssidClick={() => ssidClick()} saveSett={() => saveSett()} saveMqtt={() => saveMqtt()} settingsJson={settingsJson} errorsJson={errorsJson} ssidJson={ssidJson} />
- addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} />
+ addDevInList()} newDevice={newDevice} sendToAllDevices={(msg) => sendToAllDevices(msg)} />
- saveSett()} cleanLogs={() => cleanLogs()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} versionsList={versionsList} bind:choosingVersion startUpdate={() => startUpdate()} coreMessages={coreMessages} />
+ saveSett()} cleanLogs={() => cleanLogs()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} versionsList={versionsList} bind:choosingVersion startUpdate={() => startUpdate()} coreMessages={coreMessages} />
{#if devMode}
-
+
diff --git a/src/pages/Config.svelte b/src/pages/Config.svelte
index deb0258..e2768c8 100644
--- a/src/pages/Config.svelte
+++ b/src/pages/Config.svelte
@@ -7,11 +7,10 @@
export let configJson;
export let widgetsJson;
export let itemsJson;
+ export let scenarioJson;
export let show;
- export let scenarioJson;
-
let itemsJsonBind = 0;
let debug = true;