diff --git a/include/Consts.h b/include/Consts.h index f4ccb825..7cd34240 100644 --- a/include/Consts.h +++ b/include/Consts.h @@ -61,25 +61,25 @@ //#define SSDP_ENABLED #ifdef ESP_MODE -//#define EnableButtonIn -//#define EnableButtonOut -//#define EnableCountDown -//#define EnableImpulsOut -//#define EnableInput -//#define EnableLogging -//#define EnableOutput -//#define EnablePwmOut -//#define EnableSensorAnalog -//#define EnableSensorBme280 -//#define EnableSensorBmp280 -//#define EnableSensorCcs811 -//#define EnableSensorDallas -//#define EnableSensorDht -//#define EnableSensorPzem -//#define EnableSensorUltrasonic -//#define EnableSensorUptime -//#define EnableTelegram -//#define EnableUart +#define EnableButtonIn +#define EnableButtonOut +#define EnableCountDown +#define EnableImpulsOut +#define EnableInput +#define EnableLogging +#define EnableOutput +#define EnablePwmOut +#define EnableSensorAnalog +#define EnableSensorBme280 +#define EnableSensorBmp280 +#define EnableSensorCcs811 +#define EnableSensorDallas +#define EnableSensorDht +#define EnableSensorPzem +#define EnableSensorUltrasonic +#define EnableSensorUptime +#define EnableTelegram +#define EnableUart #endif #ifdef GATE_MODE diff --git a/include/Global.h b/include/Global.h index d04f970f..994691ff 100644 --- a/include/Global.h +++ b/include/Global.h @@ -1,7 +1,6 @@ #pragma once //===================Libraries=================================================================================================================================================== #include -#include "CTBot.h" #include #include #include @@ -10,7 +9,7 @@ #include #include - +#include "CTBot.h" #include "Clock.h" #include "Consts.h" #include "ESP32.h" @@ -40,6 +39,7 @@ extern AsyncWebServer server; extern boolean just_load; extern boolean telegramInitBeen; extern boolean savedFromWeb; +extern boolean wsSetupFlag; // Json extern String configSetupJson; //все настройки @@ -68,6 +68,7 @@ extern int currentBroker; // orders and events extern String orderBuf; +extern String wsBuf; extern String eventBuf; extern String mysensorBuf; extern String itemsFile; diff --git a/include/WebSocket.h b/include/WebSocket.h index 4bed6b28..f70a4511 100644 --- a/include/WebSocket.h +++ b/include/WebSocket.h @@ -3,5 +3,7 @@ #include "Global.h" void wsInit(); void wsSendSetup(); +void wsSendSetupBuffer(); void wsPublishData(String topic, String data); void sendDataWs(); +void loopWsExecute(); diff --git a/src/Global.cpp b/src/Global.cpp index bd3f1a84..e7a6ac9f 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -18,6 +18,7 @@ AsyncWebServer server(80); boolean just_load = true; boolean telegramInitBeen = false; boolean savedFromWeb = false; +boolean wsSetupFlag = false; // Json String configSetupJson = "{}"; @@ -45,6 +46,7 @@ int currentBroker = 1; // orders and events String orderBuf = ""; +String wsBuf = ""; String eventBuf = ""; String mysensorBuf = ""; String itemsFile = ""; diff --git a/src/WebServer.cpp b/src/WebServer.cpp index f36459e9..10747b44 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -116,7 +116,8 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp Serial.printf("%s\n", msg.c_str()); if (msg.startsWith("/config")) { - myNotAsyncActions->make(do_webSocketSendSetup); + // myNotAsyncActions->make(do_webSocketSendSetup); + wsSetupFlag = true; } if (info->opcode == WS_TEXT) { diff --git a/src/WebSocket.cpp b/src/WebSocket.cpp index e0fc8943..2c90838d 100644 --- a/src/WebSocket.cpp +++ b/src/WebSocket.cpp @@ -1,84 +1,92 @@ #include "WebSocket.h" -#include - +#include "ArduinoJson.h" #include "Class/NotAsync.h" #include "Global.h" void wsInit() { - myNotAsyncActions->add( - do_webSocketSendSetup, [&](void*) { - wsSendSetup(); - }, - nullptr); + // myNotAsyncActions->add( + // do_webSocketSendSetup, [&](void*) { + // delay(100); + // wsSendSetup(); + // }, + // nullptr); } +void wsPublishData(String topic, String data) { + if (ws.enabled()) { + // if (ws.availableForWriteAll()) { + data = "[" + topic + "]" + data; + ws.textAll(data); + //} + } +} + +//отправка setup массива в sockets способом через string void wsSendSetup() { File file = seekFile("/setup.json"); - DynamicJsonDocument doc(2048); - + AsyncWebSocketMessageBuffer(20480); int i = 0; - file.find("["); - SerialPrint("I", F("WS"), F("start send config")); do { i++; + deserializeJson(doc, file); + wsBuf += doc.as() + "\n"; + // wsPublishData("config", doc.as()); + // Serial.println(doc.as()); + } while (file.findUntil(",", "]")); + SerialPrint("I", F("WS"), F("completed send config")); +} - // static bool flag = false; +void loopWsExecute() { + if (wsBuf.length()) { + if (ws.availableForWriteAll()) { + String tmp = selectToMarker(wsBuf, "\n"); + wsPublishData("config", tmp); + wsBuf = deleteBeforeDelimiter(wsBuf, "\n"); + } + } +} + +//отправка setup массива в sockets способом прямой загрузки в ws buffer +void wsSendSetupBuffer() { + File file = seekFile("/setup.json"); + DynamicJsonDocument doc(2048); + int i = 0; + file.find("["); + SerialPrint("I", F("WS"), F("start send config")); + do { + i++; deserializeJson(doc, file); size_t len = measureJson(doc); AsyncWebSocketMessageBuffer* buffer = ws.makeBuffer(len); if (buffer) { serializeJson(doc, (char*)buffer->get(), len); if (ws.enabled()) { - while (!ws.availableForWriteAll()) { - Serial.println(String(i) + ") not ready"); + if (ws.availableForWriteAll()) { + ws.textAll(buffer); } - ws.textAll(buffer); - Serial.println(String(i) + ") ready"); - - // if (ws.availableForWriteAll()) { - // ws.textAll(buffer); - // Serial.println(String(i) + ") ready"); - // } else { - // Serial.println(String(i) + ") not ready"); - // delay(100); - // } } } - //Serial.println(doc.as()); - + // Serial.println(doc.as()); } while (file.findUntil(",", "]")); - SerialPrint("I", F("WS"), F("completed send config")); } -void wsPublishData(String topic, String data) { - if (ws.enabled()) { - data = "[" + topic + "]" + data; - ws.textAll(data); +//Пример прямого доступа к web socket buffer переделанный для arduino json 6 +void sendDataWs() { + DynamicJsonDocument doc(1024); + doc["a"] = "abc"; + doc["b"] = "abcd"; + doc["c"] = "abcde"; + doc["d"] = "abcdef"; + doc["e"] = "abcdefg"; + size_t len = measureJson(doc); + AsyncWebSocketMessageBuffer* buffer = ws.makeBuffer(len); + if (buffer) { + serializeJson(doc, (char*)buffer->get(), len); + ws.textAll(buffer); } } - -// wsPublishData(F("config"), doc.as()); -// if (ws.enabled()) { -//} -// if (ws.enabled()) Serial.println("on"); - -// void sendDataWs() { -// DynamicJsonDocument doc(1024); -// -// doc["a"] = "abc"; -// doc["b"] = "abcd"; -// doc["c"] = "abcde"; -// doc["d"] = "abcdef"; -// doc["e"] = "abcdefg"; -// size_t len = measureJson(doc); -// AsyncWebSocketMessageBuffer* buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. -// if (buffer) { -// serializeJson(doc, (char*)buffer->get(), len); -// ws.textAll(buffer); -// } -// } diff --git a/src/main.cpp b/src/main.cpp index 5e03534a..aa4d1df7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -109,6 +109,13 @@ void loop() { return; } + if (wsSetupFlag) { + wsSetupFlag = false; + wsSendSetup(); + } + + loopWsExecute(); + #ifdef OTA_UPDATES_ENABLED ArduinoOTA.handle(); #endif