452 исправлен баг пропадания виджетов в приложении

This commit is contained in:
IoT Manager
2023-10-07 02:01:15 +02:00
parent 57ac9738dd
commit 9eb6122fe1
6 changed files with 367 additions and 351 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -4,12 +4,12 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" /> <meta name="viewport" content="width=device-width,initial-scale=1" />
<title>IoT Manager 4.5.1</title> <title>IoT Manager 4.5.2</title>
<link rel="icon" type="image/png" href="/favicon.ico" /> <link rel="icon" type="image/png" href="/favicon.ico" />
<link rel="stylesheet" href="/build/bundle.css?4511" /> <link rel="stylesheet" href="/build/bundle.css?4520" />
<script defer src="/build/bundle.js?4511"></script> <script defer src="/build/bundle.js?4520"></script>
</head> </head>
<body></body> <body></body>

View File

@@ -2,7 +2,7 @@
#include "BuildTime.h" #include "BuildTime.h"
// Версия прошивки // Версия прошивки
#define FIRMWARE_VERSION 451 #define FIRMWARE_VERSION 452
#ifdef esp8266_1mb_ota #ifdef esp8266_1mb_ota
#define FIRMWARE_NAME "esp8266_1mb_ota" #define FIRMWARE_NAME "esp8266_1mb_ota"

View File

@@ -1,7 +1,8 @@
#include "EspFileSystem.h" #include "EspFileSystem.h"
#include "Global.h" #include "Global.h"
bool fileSystemInit() { bool fileSystemInit()
{
if (!FileFS.begin()) { if (!FileFS.begin()) {
SerialPrint(F("E"), F("FS"), F("Init ERROR, may be FS was not flashed")); SerialPrint(F("E"), F("FS"), F("Init ERROR, may be FS was not flashed"));
return false; return false;
@@ -10,7 +11,8 @@ bool fileSystemInit() {
return true; return true;
} }
void globalVarsSync() { void globalVarsSync()
{
settingsFlashJson = readFile(F("settings.json"), 4096); settingsFlashJson = readFile(F("settings.json"), 4096);
settingsFlashJson.replace("\r\n", ""); settingsFlashJson.replace("\r\n", "");
@@ -18,44 +20,42 @@ void globalVarsSync() {
valuesFlashJson.replace("\r\n", ""); valuesFlashJson.replace("\r\n", "");
mqttPrefix = jsonReadStr(settingsFlashJson, F("mqttPrefix")); mqttPrefix = jsonReadStr(settingsFlashJson, F("mqttPrefix"));
mqttRootDevice = mqttPrefix + "/" + chipId;
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
jsonWriteStr_(settingsFlashJson, "id", chipId); jsonWriteStr_(settingsFlashJson, "id", chipId);
// jsonWriteStr_(errorsHeapJson, "errors_", ""); //метка для парсинга удалить mqttRootDevice = mqttPrefix + "/" + chipId;
// jsonWriteStr_(ssidListHeapJson, "ssids_", ""); //метка для парсинга удалить
// это не используется - удалить в последствии
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
} }
// к удалению. не используется void syncSettingsFlashJson()
// String getParamsJson() { {
// String json;
// serializeJson(*getLocalItemsAsJSON(), json);
// jsonWriteStr_(json, "params", "");
// return json;
// }
void syncSettingsFlashJson() {
writeFile(F("settings.json"), settingsFlashJson); writeFile(F("settings.json"), settingsFlashJson);
} }
void syncValuesFlashJson() { void syncValuesFlashJson()
{
writeFile(F("values.json"), valuesFlashJson); writeFile(F("values.json"), valuesFlashJson);
} }
const String getChipId() { const String getChipId()
{
return String(ESP_getChipId()) + "-" + String(getFlashChipIdNew()); // + "v" + String(FIRMWARE_VERSION); return String(ESP_getChipId()) + "-" + String(getFlashChipIdNew()); // + "v" + String(FIRMWARE_VERSION);
} }
void setChipId() { void setChipId()
{
chipId = getChipId(); chipId = getChipId();
SerialPrint("i", "System", "id: " + chipId); SerialPrint("i", "System", "id: " + chipId);
} }
const String getUniqueId(const char* name) { const String getUniqueId(const char* name)
{
return String(name) + getMacAddress(); return String(name) + getMacAddress();
} }
const String getWebVersion() { const String getWebVersion()
{
String text = readFile("/index.html", 2000); String text = readFile("/index.html", 2000);
text = selectFromMarkerToMarker(text, "title", 1); text = selectFromMarkerToMarker(text, "title", 1);
text = selectFromMarkerToMarker(text, " ", 2); text = selectFromMarkerToMarker(text, " ", 2);
@@ -64,7 +64,8 @@ const String getWebVersion() {
return text; return text;
} }
uint32_t ESP_getChipId(void) { uint32_t ESP_getChipId(void)
{
#ifdef ESP32 #ifdef ESP32
uint32_t id = 0; uint32_t id = 0;
for (uint32_t i = 0; i < 17; i = i + 8) { for (uint32_t i = 0; i < 17; i = i + 8) {
@@ -78,7 +79,8 @@ uint32_t ESP_getChipId(void) {
// устарела используем новую функцию ниже // устарела используем новую функцию ниже
#ifndef esp32s2_4mb #ifndef esp32s2_4mb
uint32_t ESP_getFlashChipId(void) { uint32_t ESP_getFlashChipId(void)
{
#ifdef ESP32 #ifdef ESP32
// Нет аналогичной (без доп.кода) функций в 32 // Нет аналогичной (без доп.кода) функций в 32
// надо использовать другой id - варианты есть // надо использовать другой id - варианты есть
@@ -92,7 +94,8 @@ uint32_t ESP_getFlashChipId(void) {
// https://github.com/espressif/arduino-esp32/issues/6945#issuecomment-1199900892 // https://github.com/espressif/arduino-esp32/issues/6945#issuecomment-1199900892
// получение flash ch id из проекта esp easy // получение flash ch id из проекта esp easy
uint32_t getFlashChipIdNew() { uint32_t getFlashChipIdNew()
{
// Cache since size does not change // Cache since size does not change
static uint32_t flashChipId = 0; static uint32_t flashChipId = 0;
@@ -114,7 +117,8 @@ uint32_t getFlashChipIdNew() {
return flashChipId; return flashChipId;
} }
const String getMacAddress() { const String getMacAddress()
{
uint8_t mac[6]; uint8_t mac[6];
char buf[13] = { 0 }; char buf[13] = { 0 };
#if defined(ESP8266) #if defined(ESP8266)

View File

@@ -3,14 +3,16 @@
extern IoTScenario iotScen; extern IoTScenario iotScen;
#ifdef STANDARD_WEB_SOCKETS #ifdef STANDARD_WEB_SOCKETS
void standWebSocketsInit() { void standWebSocketsInit()
{
standWebSocket.begin(); standWebSocket.begin();
standWebSocket.onEvent(webSocketEvent); standWebSocket.onEvent(webSocketEvent);
SerialPrint("i", "WS", "WS server initialized"); SerialPrint("i", "WS", "WS server initialized");
} }
void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload,
size_t length) { size_t length)
{
switch (type) { switch (type) {
case WStype_ERROR: { case WStype_ERROR: {
Serial.printf("[%u] Error!\n", num); Serial.printf("[%u] Error!\n", num);
@@ -78,7 +80,8 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload,
// генерация события подключения в модулях // генерация события подключения в модулях
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); for (std::list<IoTItem*>::iterator it = IoTItems.begin();
it != IoTItems.end(); ++it) { it != IoTItems.end(); ++it) {
if ((*it)->iAmLocal) (*it)->onMqttWsAppConnectEvent(); if ((*it)->iAmLocal)
(*it)->onMqttWsAppConnectEvent();
} }
} }
@@ -138,6 +141,8 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload,
// отвечаем данными на запрос страницы // отвечаем данными на запрос страницы
if (headerStr == "/connection|") { if (headerStr == "/connection|") {
sendFileToWsByFrames("/widgets.json", "widget", "", num, WEB_SOCKETS_FRAME_SIZE);
sendFileToWsByFrames("/config.json", "config", "", num, WEB_SOCKETS_FRAME_SIZE);
sendStringToWs("settin", settingsFlashJson, num); sendStringToWs("settin", settingsFlashJson, num);
sendStringToWs("ssidli", ssidListHeapJson, num); sendStringToWs("ssidli", ssidListHeapJson, num);
sendStringToWs("errors", errorsHeapJson, num); sendStringToWs("errors", errorsHeapJson, num);
@@ -149,8 +154,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload,
// обработка кнопки сохранить settings.json // обработка кнопки сохранить settings.json
if (headerStr == "/sgnittes|") { if (headerStr == "/sgnittes|") {
writeUint8tToString(payload, length, headerLenth, settingsFlashJson); writeUint8tToString(payload, length, headerLenth, settingsFlashJson);
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
256);
sendStringToWs("errors", errorsHeapJson, num); sendStringToWs("errors", errorsHeapJson, num);
// если не было создано приема данных по udp - то создадим его // если не было создано приема данных по udp - то создадим его
addThisDeviceToList(); addThisDeviceToList();
@@ -330,7 +334,8 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload,
// публикация статус сообщений в ws (недостаток в том что делаем бродкаст всем // публикация статус сообщений в ws (недостаток в том что делаем бродкаст всем
// клиентам поднятым в свелте!!!) // клиентам поднятым в свелте!!!)
void publishStatusWs(const String& topic, const String& data) { void publishStatusWs(const String& topic, const String& data)
{
String path = mqttRootDevice + "/" + topic; String path = mqttRootDevice + "/" + topic;
String json = "{}"; String json = "{}";
jsonWriteStr(json, "status", data); jsonWriteStr(json, "status", data);
@@ -339,7 +344,8 @@ void publishStatusWs(const String& topic, const String& data) {
} }
// публикация дополнительных json сообщений в ws // публикация дополнительных json сообщений в ws
void publishJsonWs(const String& topic, String& json) { void publishJsonWs(const String& topic, String& json)
{
String path = mqttRootDevice + "/" + topic; String path = mqttRootDevice + "/" + topic;
jsonWriteStr(json, "topic", path); jsonWriteStr(json, "topic", path);
// TO DO отправка полей в веб // TO DO отправка полей в веб
@@ -347,7 +353,8 @@ void publishJsonWs(const String& topic, String& json) {
} }
// данные которые мы отправляем в сокеты переодически // данные которые мы отправляем в сокеты переодически
void periodicWsSend() { void periodicWsSend()
{
sendStringToWs("ssidli", ssidListHeapJson, -1); sendStringToWs("ssidli", ssidListHeapJson, -1);
sendStringToWs("errors", errorsHeapJson, -1); sendStringToWs("errors", errorsHeapJson, -1);
// отправляем переодичестки только в авто режиме // отправляем переодичестки только в авто режиме
@@ -357,7 +364,8 @@ void periodicWsSend() {
} }
#ifdef ESP32 #ifdef ESP32
void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) { void hexdump(const void* mem, uint32_t len, uint8_t cols = 16)
{
const uint8_t* src = (const uint8_t*)mem; const uint8_t* src = (const uint8_t*)mem;
Serial.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, Serial.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src,
len, len); len, len);
@@ -374,7 +382,8 @@ void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {
#endif #endif
void sendFileToWsByFrames(const String& filename, const String& header, void sendFileToWsByFrames(const String& filename, const String& header,
const String& json, int client_id, size_t frameSize) { const String& json, int client_id, size_t frameSize)
{
if (header.length() != 6) { if (header.length() != 6) {
SerialPrint("E", "FS", F("wrong header size")); SerialPrint("E", "FS", F("wrong header size"));
return; return;
@@ -447,7 +456,8 @@ void sendFileToWsByFrames(const String& filename, const String& header,
file.close(); file.close();
} }
void sendStringToWs(const String& header, String& payload, int client_id) { void sendStringToWs(const String& header, String& payload, int client_id)
{
if ((!getNumAPClients() && !isNetworkActive()) || !getNumWSClients()) { if ((!getNumAPClients() && !isNetworkActive()) || !getNumWSClients()) {
// standWebSocket.disconnect(); // это и ниже надо сделать при - // standWebSocket.disconnect(); // это и ниже надо сделать при -
// standWebSocket.close(); // - отключении AP И WiFi(STA), надо менять ядро WiFi. Сейчас не закрывается сессия клиента при пропаже AP И WiFi(STA) // standWebSocket.close(); // - отключении AP И WiFi(STA), надо менять ядро WiFi. Сейчас не закрывается сессия клиента при пропаже AP И WiFi(STA)
@@ -471,7 +481,8 @@ void sendStringToWs(const String& header, String& payload, int client_id) {
} }
} }
void sendDeviceList(uint8_t num) { void sendDeviceList(uint8_t num)
{
if (jsonReadInt(settingsFlashJson, F("udps")) != 0) { if (jsonReadInt(settingsFlashJson, F("udps")) != 0) {
// если включен автопоиск то отдаем список из оперативной памяти // если включен автопоиск то отдаем список из оперативной памяти
SerialPrint("i", "FS", "heap list"); SerialPrint("i", "FS", "heap list");
@@ -484,6 +495,7 @@ void sendDeviceList(uint8_t num) {
} }
} }
int getNumWSClients() { int getNumWSClients()
{
return standWebSocket.connectedClients(false); return standWebSocket.connectedClients(false);
} }