mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
добавлена кнопка перезагрузки
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
#include "DeviceList.h"
|
||||
|
||||
void addThisDeviceToList() {
|
||||
jsonWriteStr_(devListJson, "devicelist", ""); //метка для парсинга
|
||||
jsonWriteStr_(devListJson, "ip", jsonReadStr(settingsFlashJson, "ip"));
|
||||
jsonWriteStr_(devListJson, "id", jsonReadStr(settingsFlashJson, "id"));
|
||||
jsonWriteStr_(devListJson, "name", jsonReadStr(settingsFlashJson, "name"));
|
||||
jsonWriteStr_(devListHeapJson, "devicelist", ""); //метка для парсинга
|
||||
jsonWriteStr_(devListHeapJson, "ip", jsonReadStr(settingsFlashJson, "ip"));
|
||||
jsonWriteStr_(devListHeapJson, "id", jsonReadStr(settingsFlashJson, "id"));
|
||||
jsonWriteStr_(devListHeapJson, "name", jsonReadStr(settingsFlashJson, "name"));
|
||||
|
||||
// для проверки
|
||||
// devListJson = devListJson + ",";
|
||||
// devListHeapJson = devListHeapJson + ",";
|
||||
// String test;
|
||||
// jsonWriteStr_(test, "ip", "192.168.88.88");
|
||||
// jsonWriteStr_(test, "id", "123456789");
|
||||
// jsonWriteStr_(test, "name", "test");
|
||||
// devListJson = devListJson + test;
|
||||
// devListHeapJson = devListHeapJson + test;
|
||||
|
||||
devListJson = "[" + devListJson + "]";
|
||||
Serial.println(devListJson);
|
||||
devListHeapJson = "[" + devListHeapJson + "]";
|
||||
Serial.println(devListHeapJson);
|
||||
}
|
||||
@@ -17,9 +17,12 @@ void globalVarsSync() {
|
||||
mqttRootDevice = mqttPrefix + "/" + chipId;
|
||||
jsonWriteStr_(settingsFlashJson, "root", mqttRootDevice);
|
||||
jsonWriteStr_(settingsFlashJson, "id", chipId);
|
||||
|
||||
saveSettingsFlashJson();
|
||||
jsonWriteStr_(ssidListJson, "ssid", ""); //метка для парсинга
|
||||
jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга
|
||||
|
||||
jsonWriteStr_(errorsHeapJson, "errors", ""); //метка для парсинга
|
||||
jsonWriteStr_(ssidListHeapJson, "ssid", ""); //метка для парсинга
|
||||
jsonWriteStr(paramsHeapJson, "params", ""); //метка для парсинга
|
||||
}
|
||||
|
||||
void saveSettingsFlashJson() {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*****************************************глобальные объекты классов***************************************************
|
||||
**********************************************************************************************************************/
|
||||
|
||||
TickerScheduler ts(MYTEST + 1);
|
||||
TickerScheduler ts(PTASK + 1);
|
||||
WiFiClient espClient;
|
||||
PubSubClient mqtt(espClient);
|
||||
StringCommand sCmd;
|
||||
@@ -31,17 +31,19 @@ WebSocketsServer standWebSocket = WebSocketsServer(81);
|
||||
**********************************************************************************************************************/
|
||||
|
||||
String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти и синхронизированна с flash памятью
|
||||
String paramsFlashJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти и синхронизированна с flash памятью
|
||||
String paramsHeapJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти только
|
||||
String errorsHeapJson = "{}"; //переменная в которой хранятся все ошибки, находится в оперативной памяти только
|
||||
|
||||
String paramsFlashJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти и синхронизированна с flash памятью
|
||||
String paramsHeapJson = "{}"; //переменная в которой хранятся все параметры, находится в оперативной памяти только
|
||||
|
||||
// buf
|
||||
String orderBuf = "";
|
||||
String eventBuf = "";
|
||||
|
||||
// wifi
|
||||
String ssidListJson = "{}";
|
||||
String ssidListHeapJson = "{}";
|
||||
|
||||
String devListJson;
|
||||
String devListHeapJson;
|
||||
|
||||
// Mqtt
|
||||
String mqttServer = "";
|
||||
|
||||
@@ -48,13 +48,8 @@ void setup() {
|
||||
|
||||
configure("/config.json");
|
||||
|
||||
//задачи редкого выполнения
|
||||
ts.add(
|
||||
MYTEST, 1000 * 30, [&](void*) {
|
||||
SerialPrint(F("i"), F("HEAP"), prettyBytes(ESP.getFreeHeap()));
|
||||
standWebSocket.broadcastTXT(devListJson);
|
||||
},
|
||||
nullptr, true);
|
||||
//инициализация задач переодического выполнения
|
||||
periodicTasksInit();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
11
src/PeriodicTasks.cpp
Normal file
11
src/PeriodicTasks.cpp
Normal file
@@ -0,0 +1,11 @@
|
||||
#include "PeriodicTasks.h"
|
||||
|
||||
void periodicTasksInit() {
|
||||
//задачи редкого выполнения
|
||||
ts.add(
|
||||
PTASK, 1000 * 30, [&](void*) {
|
||||
SerialPrint(F("i"), F("HEAP"), prettyBytes(ESP.getFreeHeap()));
|
||||
periodicWsSend();
|
||||
},
|
||||
nullptr, true);
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
void standWebSocketsInit() {
|
||||
standWebSocket.begin();
|
||||
standWebSocket.onEvent(webSocketEvent);
|
||||
SerialPrint("i", "WS", "WS server initialized");
|
||||
}
|
||||
|
||||
void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
|
||||
@@ -16,9 +17,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
||||
} break;
|
||||
|
||||
case WStype_CONNECTED: {
|
||||
IPAddress ip = standWebSocket.remoteIP(num);
|
||||
Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
|
||||
standWebSocket.sendTXT(num, "Connected");
|
||||
// IPAddress ip = standWebSocket.remoteIP(num);
|
||||
SerialPrint("i", "WS " + String(num), "WS client connected");
|
||||
if (num > 3) {
|
||||
SerialPrint("E", "WS", "Too many clients, connection closed!!!");
|
||||
jsonWriteInt(errorsHeapJson, "wscle", 1);
|
||||
standWebSocket.close();
|
||||
standWebSocketsInit();
|
||||
}
|
||||
// Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
|
||||
// standWebSocket.sendTXT(num, "Connected");
|
||||
} break;
|
||||
|
||||
case WStype_TEXT: {
|
||||
@@ -29,42 +37,63 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
||||
for (size_t i = 0; i < headerLenth; i++) {
|
||||
headerStr += (char)payload[i];
|
||||
}
|
||||
//отправка данных которые нужны для всех страниц веб интерфейса
|
||||
//эти данные мы отправляем в двух случаях:
|
||||
// 1 пользователь перешел на новую страницу
|
||||
// 2 каждые 30 секунд
|
||||
// all pages===================================================================
|
||||
//**отправка**//
|
||||
if (headerStr == ("/all")) {
|
||||
standWebSocket.sendTXT(num, ssidListHeapJson);
|
||||
standWebSocket.broadcastTXT(errorsHeapJson);
|
||||
}
|
||||
// dashboard===================================================================
|
||||
//**отправка**//
|
||||
if (headerStr == "/") {
|
||||
sendFileToWs("/layout.json", num, 1024);
|
||||
standWebSocket.sendTXT(num, paramsHeapJson);
|
||||
}
|
||||
//**сохранение**//
|
||||
if (headerStr == "/tuoyal") {
|
||||
writeFileUint8tByFrames("layout.json", payload, length, headerLenth, 256);
|
||||
}
|
||||
// configutation===============================================================
|
||||
//**отправка**//
|
||||
if (headerStr == "/config") {
|
||||
sendFileToWs("/items.json", num, 1024);
|
||||
sendFileToWs("/widgets.json", num, 1024);
|
||||
sendFileToWs("/config.json", num, 1024);
|
||||
sendFileToWs("/settings.json", num, 1024);
|
||||
// sendFileToWs("/settings.json", num, 1024);
|
||||
}
|
||||
//**сохранение**//
|
||||
if (headerStr == "/gifnoc") {
|
||||
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
|
||||
}
|
||||
// connection===================================================================
|
||||
//**отправка**//
|
||||
if (headerStr == "/connec") {
|
||||
sendFileToWs("/settings.json", num, 1024);
|
||||
//запуск асинхронного сканирования wifi сетей при переходе на страницу соединений
|
||||
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
||||
standWebSocket.sendTXT(num, ssidListJson);
|
||||
}
|
||||
//**отправка**//
|
||||
if (headerStr == "/scan") {
|
||||
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
|
||||
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
||||
standWebSocket.sendTXT(num, ssidListJson);
|
||||
}
|
||||
//**сохранение**//
|
||||
if (headerStr == "/cennoc") {
|
||||
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
|
||||
settingsFlashJson = readFile(F("settings.json"), 4096);
|
||||
}
|
||||
// list ===================================================================
|
||||
//**отправка**//
|
||||
if (headerStr == "/list") {
|
||||
standWebSocket.sendTXT(num, devListJson);
|
||||
sendFileToWs("/settings.json", num, 1024);
|
||||
standWebSocket.sendTXT(num, devListHeapJson);
|
||||
}
|
||||
// orders ===================================================================
|
||||
if (headerStr == "/reboot") {
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
} break;
|
||||
@@ -105,6 +134,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
||||
}
|
||||
}
|
||||
|
||||
//данные которые мы отправляем в сокеты переодически
|
||||
void periodicWsSend() {
|
||||
standWebSocket.broadcastTXT(devListHeapJson);
|
||||
standWebSocket.broadcastTXT(ssidListHeapJson);
|
||||
standWebSocket.broadcastTXT(errorsHeapJson);
|
||||
}
|
||||
|
||||
#ifdef ESP32
|
||||
void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {
|
||||
const uint8_t* src = (const uint8_t*)mem;
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
#include "Utils/FileUtils.h"
|
||||
|
||||
void writeStrValueToJsonFile(const String& filename, String key, String value) {
|
||||
String tmp = readFile(filename, 4096);
|
||||
if (!jsonWriteStr_(tmp, key, value)) {
|
||||
Serial.println(F("failed write json value to file"));
|
||||
}
|
||||
writeFile(filename, tmp);
|
||||
}
|
||||
|
||||
//данная функция записывает файл из буфера страницами указанного размера
|
||||
void writeFileUint8tByFrames(const String& filename, uint8_t*& big_buf, size_t length, size_t headerLenth, size_t frameSize) {
|
||||
String path = filepath(filename);
|
||||
|
||||
@@ -27,7 +27,7 @@ void routerConnect() {
|
||||
if (WiFi.status() == WL_CONNECT_FAILED) {
|
||||
SerialPrint("E", "WIFI", "password is not correct");
|
||||
tries = 1;
|
||||
jsonWriteInt(settingsFlashJson, "pass_status", 1);
|
||||
jsonWriteInt(errorsHeapJson, "passer", 1);
|
||||
}
|
||||
Serial.print(".");
|
||||
delay(1000);
|
||||
@@ -61,7 +61,7 @@ bool startAPMode() {
|
||||
SerialPrint("i", "WIFI", "AP IP: " + myIP.toString());
|
||||
jsonWriteStr(settingsFlashJson, "ip", myIP.toString());
|
||||
|
||||
if (jsonReadInt(settingsFlashJson, "pass_status") != 1) {
|
||||
if (jsonReadInt(errorsHeapJson, "passer") != 1) {
|
||||
ts.add(
|
||||
WIFI_SCAN, 10 * 1000, [&](void*) {
|
||||
String sta_ssid = jsonReadStr(settingsFlashJson, "routerssid");
|
||||
@@ -104,12 +104,12 @@ boolean RouterFind(String ssid) {
|
||||
res = true;
|
||||
}
|
||||
// SerialPrint("i", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i));
|
||||
jsonWriteStr_(ssidListJson, String(i), WiFi.SSID(i));
|
||||
jsonWriteStr_(ssidListHeapJson, String(i), WiFi.SSID(i));
|
||||
|
||||
// String(WiFi.RSSI(i)
|
||||
}
|
||||
}
|
||||
SerialPrint("i", "WIFI", ssidListJson);
|
||||
SerialPrint("i", "WIFI", ssidListHeapJson);
|
||||
WiFi.scanDelete();
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user