исправлено много багов

This commit is contained in:
Dmitry Borisenko
2022-02-15 15:22:54 +01:00
parent aff2374644
commit c9753fb9a7

View File

@@ -23,7 +23,7 @@
//****************************************************constants section*********************************************************/ //****************************************************constants section*********************************************************/
//******************************************************************************************************************************/ //******************************************************************************************************************************/
let version = 401; let version = 403;
let debug = true; let debug = true;
let LOG_MAX_MESSAGES = 10; let LOG_MAX_MESSAGES = 10;
let reconnectTimeout = 20000; let reconnectTimeout = 20000;
@@ -224,7 +224,7 @@
} else { } else {
socket[ws] = new WebSocket("ws://" + ip + ":81"); socket[ws] = new WebSocket("ws://" + ip + ":81");
socket.binaryType = "blob"; socket.binaryType = "blob";
if (debug) console.log("[i]", ip, "started connecting..."); if (debug) console.log("[i]", ip, ws, "started connecting...");
} }
} }
@@ -241,191 +241,200 @@
function wsEventAdd(ws) { function wsEventAdd(ws) {
if (socket[ws]) { if (socket[ws]) {
let ip = getIP(ws); let ip = getIP(ws);
if (debug) console.log("[i]", ip, "web socket events added"); if (debug) console.log("[i]", ip, ws, "web socket events added");
socket[ws].addEventListener("open", function (event) { socket[ws].addEventListener("open", function (event) {
if (debug) console.log("[i]", ip, "completed connecting"); if (debug) console.log("[i]", ip, ws, "completed connecting");
markDeviceStatus(ws, true); markDeviceStatus(ws, true);
if (firstDevListRequest) wsSendMsg(0, "/list|"); if (firstDevListRequest) wsSendMsg(0, "/list|");
sendCurrentPageName(); //отправим запрос только выбранному устройству
if (ws === selectedWs) {
sendCurrentPageName();
}
}); });
socket[ws].addEventListener("message", function (event) { socket[ws].addEventListener("message", function (event) {
if (typeof event.data === "string") { if (typeof event.data === "string") {
let data = event.data; let data = event.data;
//if (debug) console.log("[i]", getIP(ws), "msg received", data); // //if (debug) console.log("[i]", getIP(ws), "msg received", data); //
//сборщик deviceList сообщений====================================== //принимаем данные только для выбранного устройства
if (data.includes("devicelist")) { if (ws === selectedWs) {
if (IsJsonParse(data)) { //сборщик deviceList сообщений======================================
incDeviceList = JSON.parse(data); if (data.includes("devicelist")) {
incDeviceList = incDeviceList; if (IsJsonParse(data)) {
incDeviceListParced = true; incDeviceList = JSON.parse(data);
if (debug) console.log("✔", "incDeviceList json parced"); incDeviceList = incDeviceList;
onParced("devicelist"); incDeviceListParced = true;
if (firstDevListRequest) { if (debug) console.log("✔", "incDeviceList json parced");
deviceList = incDeviceList; onParced("devicelist");
deviceList[0].status = true; if (firstDevListRequest) {
} else { deviceList = incDeviceList;
deviceList = combineArrays(deviceList, incDeviceList); deviceList[0].status = true;
} else {
deviceList = combineArrays(deviceList, incDeviceList);
}
firstDevListRequest = false;
deviceList = deviceList;
whenDeviceListWasUpdated();
connectToAllDevices();
} }
firstDevListRequest = false;
deviceList = deviceList;
whenDeviceListWasUpdated();
connectToAllDevices();
} }
} //сборщик statusJson сообщений======================================
//сборщик statusJson сообщений====================================== if (data.includes("status")) {
if (data.includes("status")) { if (IsJsonParse(data)) {
if (IsJsonParse(data)) { let statusJson = JSON.parse(data);
let statusJson = JSON.parse(data); udateStatusOfWidget(statusJson);
udateStatusOfWidget(statusJson);
wigetsUpdate();
if (debug) console.log("✔", "statusJson parced");
statusJsonParced = true;
onParced("status");
}
}
//сборщик paramsJson сообщений======================================
//if (ws === 0) {
if (data.includes("params")) {
if (IsJsonParse(data)) {
paramsJson = JSON.parse(data);
if (debug) console.log("✔", "paramsJson parced", ws);
paramsJsonParced = true;
onParced("params");
}
}
//}
//сборщик ssidJson сообщений======================================
if (data.includes("ssid")) {
if (IsJsonParse(data)) {
ssidJson = JSON.parse(data);
ssidJson = ssidJson;
if (debug) console.log("✔", "ssidJson parced");
ssidJsonParced = true;
onParced("ssid");
}
}
//сборщик errorsJson сообщений======================================
if (data.includes("errors")) {
if (IsJsonParse(data)) {
errorsJson = JSON.parse(data);
errorsJson = errorsJson;
errorsJsonParced = true;
if (debug) console.log("✔", "errorsJson json parced");
onParced("errors");
}
}
//сборщик 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("config");
}
};
}
//сборщик 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("widgets");
}
};
}
//сборщик 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("items");
}
};
}
//сборщик layoutJson пакетов========================================
//if (ws === 0) {
if (data === "/st/layout.json") {
layoutJsonFlag = true;
}
if (data === "/end/layout.json") {
layoutJsonFlag = false;
var bb = layoutJsonBlob.getBlob();
let layoutJsonReader = new FileReader();
layoutJsonReader.readAsText(bb);
layoutJsonReader.onload = () => {
let layoutJsonResult = layoutJsonReader.result;
if (IsJsonParse(layoutJsonResult)) {
layoutJson = JSON.parse(layoutJsonResult);
layoutJson = layoutJson;
wigetsUpdate(); wigetsUpdate();
layoutJsonParced = true; if (debug) console.log("✔", "statusJson parced");
if (debug) console.log("✔", "layoutJson parced", ws); statusJsonParced = true;
onParced("layout"); onParced("status");
} }
}; }
} //сборщик paramsJson сообщений======================================
//} //if (ws === 0) {
//сборщик settingsJson пакетов======================================== if (data.includes("params")) {
if (data === "/st/settings.json") { if (IsJsonParse(data)) {
settingsJsonFlag = true; paramsJson = JSON.parse(data);
} if (debug) console.log("✔", "paramsJson parced", ws);
if (data === "/end/settings.json") { paramsJsonParced = true;
settingsJsonFlag = false; onParced("params");
var bb = settingsJsonBlob.getBlob();
let settingsJsonReader = new FileReader();
settingsJsonReader.readAsText(bb);
settingsJsonReader.onload = () => {
let settingsJsonResult = settingsJsonReader.result;
if (IsJsonParse(settingsJsonResult)) {
settingsJson = JSON.parse(settingsJsonResult);
settingsJson = settingsJson;
wigetsUpdate();
//updateThisDeviceInList();
settingsJsonParced = true;
if (debug) console.log("✔", "settingsJson parced");
onParced("settings");
} }
}; }
//}
//сборщик ssidJson сообщений======================================
if (data.includes("ssid")) {
if (IsJsonParse(data)) {
ssidJson = JSON.parse(data);
ssidJson = ssidJson;
if (debug) console.log("✔", "ssidJson parced");
ssidJsonParced = true;
onParced("ssid");
}
}
//сборщик errorsJson сообщений======================================
if (data.includes("errors")) {
if (IsJsonParse(data)) {
errorsJson = JSON.parse(data);
errorsJson = errorsJson;
errorsJsonParced = true;
if (debug) console.log("✔", "errorsJson json parced");
onParced("errors");
}
}
//сборщик 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("config");
}
};
}
//сборщик 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("widgets");
}
};
}
//сборщик 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("items");
}
};
}
//сборщик layoutJson пакетов========================================
//if (ws === 0) {
if (data === "/st/layout.json") {
layoutJsonFlag = true;
}
if (data === "/end/layout.json") {
layoutJsonFlag = false;
var bb = layoutJsonBlob.getBlob();
let layoutJsonReader = new FileReader();
layoutJsonReader.readAsText(bb);
layoutJsonReader.onload = () => {
let layoutJsonResult = layoutJsonReader.result;
if (IsJsonParse(layoutJsonResult)) {
layoutJson = JSON.parse(layoutJsonResult);
layoutJson = layoutJson;
wigetsUpdate();
layoutJsonParced = true;
if (debug) console.log("✔", "layoutJson parced", ws);
onParced("layout");
}
};
}
//}
//сборщик settingsJson пакетов========================================
if (data === "/st/settings.json") {
settingsJsonFlag = true;
}
if (data === "/end/settings.json") {
settingsJsonFlag = false;
var bb = settingsJsonBlob.getBlob();
let settingsJsonReader = new FileReader();
settingsJsonReader.readAsText(bb);
settingsJsonReader.onload = () => {
let settingsJsonResult = settingsJsonReader.result;
if (IsJsonParse(settingsJsonResult)) {
settingsJson = JSON.parse(settingsJsonResult);
settingsJson = settingsJson;
wigetsUpdate();
//updateThisDeviceInList();
settingsJsonParced = true;
if (debug) console.log("✔", "settingsJson parced");
onParced("settings");
}
};
}
} }
} }
if (event.data instanceof Blob) { if (event.data instanceof Blob) {
if (configJsonFlag) configJsonBlob.append(event.data); //принимаем данные только для выбранного устройства
if (widgetsJsonFlag) widgetsJsonBlob.append(event.data); if (ws === selectedWs) {
if (itemsJsonFlag) itemsJsonBlob.append(event.data); if (configJsonFlag) configJsonBlob.append(event.data);
if (layoutJsonFlag) layoutJsonBlob.append(event.data); if (widgetsJsonFlag) widgetsJsonBlob.append(event.data);
if (settingsJsonFlag) settingsJsonBlob.append(event.data); if (itemsJsonFlag) itemsJsonBlob.append(event.data);
if (layoutJsonFlag) layoutJsonBlob.append(event.data);
if (settingsJsonFlag) settingsJsonBlob.append(event.data);
}
} }
}); });
socket[ws].addEventListener("close", (event) => { socket[ws].addEventListener("close", (event) => {
@@ -482,6 +491,8 @@
var size = Object.keys(settingsJson).length; var size = Object.keys(settingsJson).length;
console.log("[i]", "settingsJson length: " + size); console.log("[i]", "settingsJson length: " + size);
if (size > 5) { if (size > 5) {
jsonArrWrite(deviceList, "ip", getIP(selectedWs), "name", settingsJson.name);
deviceList = deviceList;
wsSendMsg(selectedWs, "/sgnittes|" + JSON.stringify(settingsJson)); wsSendMsg(selectedWs, "/sgnittes|" + JSON.stringify(settingsJson));
} else { } else {
window.alert("Ошибка"); window.alert("Ошибка");
@@ -620,9 +631,9 @@
function wsSendMsg(ws, msg) { function wsSendMsg(ws, msg) {
if (socket[ws] && socket[ws].readyState === 1) { if (socket[ws] && socket[ws].readyState === 1) {
socket[ws].send(msg); socket[ws].send(msg);
if (debug) console.log("[i]", getIP(ws), "msg send success", msg); if (debug) console.log("[i]", getIP(ws), ws, "msg send success", msg);
} else { } else {
if (debug) console.log("[e]", getIP(ws), "msg not send", msg); if (debug) console.log("[e]", getIP(ws), ws, "msg not send", msg);
} }
} }
@@ -781,7 +792,7 @@
JSON.parse(str); JSON.parse(str);
} catch (e) { } catch (e) {
oneOfJsonPackageError = true; oneOfJsonPackageError = true;
if (debug) console.log("[e]", "json error"); if (debug) console.log("[e]", "json parce error");
return false; return false;
} }
oneOfJsonPackageError = false; oneOfJsonPackageError = false;
@@ -801,6 +812,18 @@
if (debug) console.log("[i]", widgetsDropdown); if (debug) console.log("[i]", widgetsDropdown);
} }
function jsonArrWrite(jsonArr, idKey, idValue, paramKey, paramValue) {
for (let i = 0; i < jsonArr.length; i++) {
let obj = jsonArr[i];
for (const [key, value] of Object.entries(obj)) {
if (key == idKey && value == idValue) {
obj[paramKey] = paramValue;
break;
}
}
}
}
//**********************************************************post and get*****************************************************************/ //**********************************************************post and get*****************************************************************/
//editRequest("192.168.88.235", "data data data data", "file.json") //editRequest("192.168.88.235", "data data data data", "file.json")
@@ -989,7 +1012,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} settingsJson={settingsJson} errorsJson={errorsJson} rebootEsp={() => rebootEsp()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} version={version} /> <SystemPage show={systemReady} errorsJson={errorsJson} rebootEsp={() => rebootEsp()} cancelAlarm={(alarmKey) => cancelAlarm(alarmKey)} version={version} />
</Route> </Route>
<!--<Route path="/utilities">--> <!--<Route path="/utilities">-->