добавление кнопок в элемент

This commit is contained in:
Dmitry Borisenko
2022-12-14 00:56:25 +01:00
parent d2a615c9e5
commit 2db14ed21a
9 changed files with 67 additions and 36 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.4.3</title> <title>IoT Manager 4.4.4</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?443" /> <link rel="stylesheet" href="/build/bundle.css?444" />
<script defer src="/build/bundle.js?443"></script> <script defer src="/build/bundle.js?444"></script>
</head> </head>
<body></body> <body></body>

View File

@@ -62,7 +62,9 @@
"logid": "t", "logid": "t",
"points": 365, "points": 365,
"telegram": 0, "telegram": 0,
"test": 0 "test": 0,
"btn-defvalue": 0,
"btn-reset": "nil"
}, },
{ {
"global": 0, "global": 0,

View File

@@ -55,6 +55,7 @@ class IoTItem {
virtual void onRegEvent(IoTItem* item); virtual void onRegEvent(IoTItem* item);
virtual void onMqttRecive(String& topic, String& msg); virtual void onMqttRecive(String& topic, String& msg);
virtual void onMqttWsAppConnectEvent(); virtual void onMqttWsAppConnectEvent();
virtual void onModuleOrder(String& key, String& value);
// делаем доступным модулям отправку сообщений в телеграм // делаем доступным модулям отправку сообщений в телеграм
virtual void sendTelegramMsg(bool often, String msg); virtual void sendTelegramMsg(bool often, String msg);

View File

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

View File

@@ -178,6 +178,7 @@ void IoTItem::checkIntFromNet() {
void IoTItem::onRegEvent(IoTItem* item) {} void IoTItem::onRegEvent(IoTItem* item) {}
void IoTItem::onMqttRecive(String& topic, String& msg) {} void IoTItem::onMqttRecive(String& topic, String& msg) {}
void IoTItem::onMqttWsAppConnectEvent() {} void IoTItem::onMqttWsAppConnectEvent() {}
void IoTItem::onModuleOrder(String& key, String& value) {}
// делаем доступным модулям отправку сообщений в телеграм // делаем доступным модулям отправку сообщений в телеграм
void IoTItem::sendTelegramMsg(bool often, String msg) {} void IoTItem::sendTelegramMsg(bool often, String msg) {}

View File

@@ -240,6 +240,13 @@ class LogingDaily : public IoTItem {
int calculateMaxCount() { int calculateMaxCount() {
return 86400; return 86400;
} }
void onModuleOrder(String &key, String &value) {
if (key == "defvalue") {
} else if (key == "reset") {
}
SerialPrint("i", F("LogingDaily"), "key " + key + ", value " + value);
}
}; };
void *getAPI_LogingDaily(String subtype, String param) { void *getAPI_LogingDaily(String subtype, String param) {

View File

@@ -15,7 +15,9 @@
"logid": "t", "logid": "t",
"points": 365, "points": 365,
"telegram": 0, "telegram": 0,
"test": 0 "test": 0,
"btn-defvalue": 0,
"btn-reset": "nil"
} }
], ],
"about": { "about": {