mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
452 исправлен баг пропадания виджетов в приложении
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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,9 +117,10 @@ 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)
|
||||||
WiFi.macAddress(mac);
|
WiFi.macAddress(mac);
|
||||||
sprintf(buf, MACSTR, MAC2STR(mac));
|
sprintf(buf, MACSTR, MAC2STR(mac));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user