добавлена кнопка перезагрузки

This commit is contained in:
Dmitry Borisenko
2022-02-08 16:47:17 +01:00
parent 57bd78ad90
commit 45c5681dc6
16 changed files with 105 additions and 42 deletions

View File

@@ -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);
}

View File

@@ -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() {

View File

@@ -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 = "";

View File

@@ -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
View 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);
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}