|
|
|
|
@@ -34,7 +34,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
|
|
|
|
|
case WStype_TEXT: {
|
|
|
|
|
bool endOfHeaderFound = false;
|
|
|
|
|
size_t maxAllowedHeaderSize = 15; //максимальное количество символов заголовка
|
|
|
|
|
size_t maxAllowedHeaderSize = 15; // максимальное количество символов заголовка
|
|
|
|
|
size_t headerLenth = 0;
|
|
|
|
|
String headerStr;
|
|
|
|
|
for (size_t i = 0; i <= maxAllowedHeaderSize; i++) {
|
|
|
|
|
@@ -54,13 +54,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// Страница веб интерфейса dashboard
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//публикация всех виджетов
|
|
|
|
|
// публикация всех виджетов
|
|
|
|
|
if (headerStr == "/|") {
|
|
|
|
|
sendFileToWsByFrames("/layout.json", "layout", "", num, WEB_SOCKETS_FRAME_SIZE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (headerStr == "/params|") {
|
|
|
|
|
//публикация всех статус сообщений при подключении svelte приложения
|
|
|
|
|
// публикация всех статус сообщений при подключении svelte приложения
|
|
|
|
|
String params = "{}";
|
|
|
|
|
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
|
|
|
|
if ((*it)->getSubtype() != "Loging") {
|
|
|
|
|
@@ -69,21 +69,21 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
}
|
|
|
|
|
sendStringToWs("params", params, num);
|
|
|
|
|
|
|
|
|
|
//генерация события подключения в модулях
|
|
|
|
|
// генерация события подключения в модулях
|
|
|
|
|
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
|
|
|
|
if ((*it)->iAmLocal) (*it)->onMqttWsAppConnectEvent();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//отвечаем на запрос графиков
|
|
|
|
|
// отвечаем на запрос графиков
|
|
|
|
|
if (headerStr == "/charts|") {
|
|
|
|
|
//обращение к логированию из ядра
|
|
|
|
|
//отправка данных графиков только в выбранный сокет
|
|
|
|
|
// обращение к логированию из ядра
|
|
|
|
|
// отправка данных графиков только в выбранный сокет
|
|
|
|
|
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
|
|
|
|
//сбрасываем даты графиков
|
|
|
|
|
// if ((*it)->getID().endsWith("-date")) {
|
|
|
|
|
// (*it)->setTodayDate();
|
|
|
|
|
//}
|
|
|
|
|
// сбрасываем даты графиков
|
|
|
|
|
// if ((*it)->getID().endsWith("-date")) {
|
|
|
|
|
// (*it)->setTodayDate();
|
|
|
|
|
// }
|
|
|
|
|
if ((*it)->getSubtype() == "Loging" || "LogingDaily") {
|
|
|
|
|
(*it)->setPublishDestination(TO_WS, num);
|
|
|
|
|
(*it)->publishValue();
|
|
|
|
|
@@ -95,7 +95,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// Страница веб интерфейса configutation
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//отвечаем данными на запрос страницы
|
|
|
|
|
// отвечаем данными на запрос страницы
|
|
|
|
|
if (headerStr == "/config|") {
|
|
|
|
|
sendFileToWsByFrames("/items.json", "itemsj", "", num, WEB_SOCKETS_FRAME_SIZE);
|
|
|
|
|
sendFileToWsByFrames("/widgets.json", "widget", "", num, WEB_SOCKETS_FRAME_SIZE);
|
|
|
|
|
@@ -104,7 +104,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
sendStringToWs("settin", settingsFlashJson, num);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//обработка кнопки сохранить
|
|
|
|
|
// обработка кнопки сохранить
|
|
|
|
|
if (headerStr == "/gifnoc|") {
|
|
|
|
|
writeFileUint8tByFrames("config.json", payload, length, headerLenth, 256);
|
|
|
|
|
}
|
|
|
|
|
@@ -124,7 +124,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// Страница веб интерфейса connection
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//отвечаем данными на запрос страницы
|
|
|
|
|
// отвечаем данными на запрос страницы
|
|
|
|
|
if (headerStr == "/connection|") {
|
|
|
|
|
sendStringToWs("settin", settingsFlashJson, num);
|
|
|
|
|
sendStringToWs("ssidli", ssidListHeapJson, num);
|
|
|
|
|
@@ -133,7 +133,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//обработка кнопки сохранить настройки wifi
|
|
|
|
|
// обработка кнопки сохранить настройки wifi
|
|
|
|
|
if (headerStr == "/sgnittes|") {
|
|
|
|
|
writeUint8tToString(payload, length, headerLenth, settingsFlashJson);
|
|
|
|
|
writeFileUint8tByFrames("settings.json", payload, length, headerLenth, 256);
|
|
|
|
|
@@ -141,16 +141,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
addThisDeviceToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//обработка кнопки сохранить настройки mqtt
|
|
|
|
|
// обработка кнопки сохранить настройки mqtt
|
|
|
|
|
if (headerStr == "/mqtt|") {
|
|
|
|
|
sendStringToWs("settin", settingsFlashJson, num); //отправляем в ответ новые полученные настройки
|
|
|
|
|
handleMqttStatus(false, 8); //меняем статус на неопределенный
|
|
|
|
|
mqttReconnect(); //начинаем переподключение
|
|
|
|
|
sendStringToWs("errors", errorsHeapJson, num); //отправляем что статус неопределен
|
|
|
|
|
sendStringToWs("settin", settingsFlashJson, num); // отправляем в ответ новые полученные настройки
|
|
|
|
|
handleMqttStatus(false, 8); // меняем статус на неопределенный
|
|
|
|
|
mqttReconnect(); // начинаем переподключение
|
|
|
|
|
sendStringToWs("errors", errorsHeapJson, num); // отправляем что статус неопределен
|
|
|
|
|
sendStringToWs("ssidli", ssidListHeapJson, num);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
|
|
|
|
|
// запуск асинхронного сканирования wifi сетей при нажатии выпадающего списка
|
|
|
|
|
if (headerStr == "/scan|") {
|
|
|
|
|
RouterFind(jsonReadStr(settingsFlashJson, F("routerssid")));
|
|
|
|
|
sendStringToWs("ssidli", ssidListHeapJson, num);
|
|
|
|
|
@@ -160,7 +160,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// Страница веб интерфейса list
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//отвечаем данными на запрос страницы
|
|
|
|
|
// отвечаем данными на запрос страницы
|
|
|
|
|
if (headerStr == "/list|") {
|
|
|
|
|
sendStringToWs("devlis", devListHeapJson, num);
|
|
|
|
|
}
|
|
|
|
|
@@ -169,7 +169,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// Страница веб интерфейса system
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//отвечаем данными на запрос страницы
|
|
|
|
|
// отвечаем данными на запрос страницы
|
|
|
|
|
if (headerStr == "/system|") {
|
|
|
|
|
sendStringToWs("errors", errorsHeapJson, num);
|
|
|
|
|
sendStringToWs("settin", settingsFlashJson, num);
|
|
|
|
|
@@ -193,27 +193,27 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
// отдельные команды веб интерфейса
|
|
|
|
|
//----------------------------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
//переписать любое поле в errors json
|
|
|
|
|
// переписать любое поле в errors json
|
|
|
|
|
if (headerStr == "/rorre|") {
|
|
|
|
|
writeUint8tValueToJsonString(payload, length, headerLenth, errorsHeapJson);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//команда перезагрузки esp
|
|
|
|
|
// команда перезагрузки esp
|
|
|
|
|
if (headerStr == "/reboot|") {
|
|
|
|
|
ESP.restart();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//команда очистки всех логов esp
|
|
|
|
|
// команда очистки всех логов esp
|
|
|
|
|
if (headerStr == "/clean|") {
|
|
|
|
|
cleanLogs();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//команда обновления прошивки esp
|
|
|
|
|
// команда обновления прошивки esp
|
|
|
|
|
if (headerStr == "/update|") {
|
|
|
|
|
upgrade_firmware(3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Прием команд control c dashboard
|
|
|
|
|
// Прием команд control c dashboard
|
|
|
|
|
if (headerStr == "/control|") {
|
|
|
|
|
String msg;
|
|
|
|
|
writeUint8tToString(payload, length, headerLenth, msg);
|
|
|
|
|
@@ -227,6 +227,24 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
standWebSocket.sendTXT(num, "/tstr|");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// получаем команду посланную из модуля
|
|
|
|
|
if (headerStr == "/order|") {
|
|
|
|
|
SerialPrint("i", F("=>WS"), "Msg from module");
|
|
|
|
|
String json;
|
|
|
|
|
writeUint8tToString(payload, length, headerLenth, json);
|
|
|
|
|
|
|
|
|
|
String id, key, value;
|
|
|
|
|
jsonRead(json, "id", id);
|
|
|
|
|
jsonRead(json, "key", key);
|
|
|
|
|
jsonRead(json, "value", value);
|
|
|
|
|
|
|
|
|
|
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
|
|
|
|
if ((*it)->getID() == id) {
|
|
|
|
|
(*it)->onModuleOrder(key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} break;
|
|
|
|
|
|
|
|
|
|
case WStype_BIN: {
|
|
|
|
|
@@ -265,7 +283,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//публикация статус сообщений в ws (недостаток в том что делаем бродкаст всем клиентам поднятым в свелте!!!)
|
|
|
|
|
// публикация статус сообщений в ws (недостаток в том что делаем бродкаст всем клиентам поднятым в свелте!!!)
|
|
|
|
|
void publishStatusWs(const String& topic, const String& data) {
|
|
|
|
|
String path = mqttRootDevice + "/" + topic;
|
|
|
|
|
String json = "{}";
|
|
|
|
|
@@ -274,7 +292,7 @@ void publishStatusWs(const String& topic, const String& data) {
|
|
|
|
|
sendStringToWs("status", json, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//публикация дополнительных json сообщений в ws
|
|
|
|
|
// публикация дополнительных json сообщений в ws
|
|
|
|
|
void publishJsonWs(const String& topic, String& json) {
|
|
|
|
|
String path = mqttRootDevice + "/" + topic;
|
|
|
|
|
jsonWriteStr(json, "topic", path);
|
|
|
|
|
@@ -282,7 +300,7 @@ void publishJsonWs(const String& topic, String& json) {
|
|
|
|
|
// sendStringToWs("status", json, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//данные которые мы отправляем в сокеты переодически
|
|
|
|
|
// данные которые мы отправляем в сокеты переодически
|
|
|
|
|
void periodicWsSend() {
|
|
|
|
|
sendStringToWs("ssidli", ssidListHeapJson, -1);
|
|
|
|
|
sendStringToWs("errors", errorsHeapJson, -1);
|
|
|
|
|
|