diff --git a/Init.ino b/Init.ino index 44c68d88..ace8b18b 100644 --- a/Init.ino +++ b/Init.ino @@ -1,24 +1,33 @@ void All_init() { - server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) { - Device_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении - }); - server.on("/scenario", HTTP_GET, [](AsyncWebServerRequest * request) { - if (request->hasArg("status")) { - jsonWriteStr(configSetup, "scenario", request->getParam("status")->value()); + server.on("/init", HTTP_GET, [](AsyncWebServerRequest * request) { + String value; + if (request->hasArg("arg")) { + value = request->getParam("arg")->value(); + } + if (value == "0") { + jsonWriteStr(configSetup, "scenario", value); + saveConfig(); + Scenario_init(); + } + if (value == "1") { + jsonWriteStr(configSetup, "scenario", value); + saveConfig(); + Scenario_init(); + } + if (value == "2") { + Device_init(); + } + if (value == "3") { + clean_log_date(); + } + if (value == "4") { + Scenario_init(); } - saveConfig(); - Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении - }); - server.on("/cleanlog", HTTP_GET, [](AsyncWebServerRequest * request) { - clean_log_date(); request->send(200, "text/text", "OK"); // отправляем ответ о выполнении }); prsets_init(); - Device_init(); Scenario_init(); Timer_countdown_init(); @@ -134,7 +143,7 @@ void prsets_init() { } Device_init(); Scenario_init(); - request->redirect("/page.htm?configuration"); + request->redirect("/?configuration"); }); } diff --git a/SSDP.ino b/SSDP.ino deleted file mode 100644 index 2638e15a..00000000 --- a/SSDP.ino +++ /dev/null @@ -1,49 +0,0 @@ -void SSDP_init() { - server.on("/ssdp", HTTP_GET, [](AsyncWebServerRequest * request) { - if (request->hasArg("ssdp")) { - jsonWriteStr(configSetup, "SSDP", request->getParam("ssdp")->value()); - jsonWriteStr(configJson, "SSDP", request->getParam("ssdp")->value()); - } - saveConfig(); - request->send(200, "text/text", "OK"); - }); -} - -/* - // --------------------Получаем ssdp со страницы - server.on("/ssdp", HTTP_GET, [](AsyncWebServerRequest * request) { - if (request->hasArg("ssdp")) { - jsonWriteStr(configSetup, "SSDP", request->getParam("ssdp")->value()); - jsonWriteStr(configJson, "SSDP", request->getParam("ssdp")->value()); - SSDP.setName(jsonRead(configSetup, "SSDP")); - } - saveConfig(); - request->send(200, "text/text", "OK"); - }); - - // SSDP дескриптор - server.on("/description.xml", [](AsyncWebServerRequest * request) { - //SSDP.schema(http.client()); - request->send(200, "text/text", "OK"); - }); - - - if (WiFi.status() == WL_CONNECTED) { - //Если версия 2.0.0 закаментируйте следующую строчку - SSDP.setDeviceType("upnp:rootdevice"); - SSDP.setSchemaURL("description.xml"); - SSDP.setHTTPPort(80); - SSDP.setName(jsonRead(configSetup, "SSDP")); - SSDP.setSerialNumber(chipID); - SSDP.setURL("/"); - SSDP.setModelName("tech"); - SSDP.setModelNumber(chipID + "/" + jsonRead(configSetup, "SSDP")); - - - SSDP.setModelURL("https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware"); - SSDP.setManufacturer("Borisenko Dmitry"); - SSDP.setManufacturerURL("https://www.instagram.com/rriissee3"); - SSDP.begin(); - } - } -*/ diff --git a/Upgrade.ino b/Upgrade.ino index 90094ddf..daf6043e 100644 --- a/Upgrade.ino +++ b/Upgrade.ino @@ -10,29 +10,20 @@ void initUpgrade() { Serial.print("[i] Last firmware version: "); Serial.println(last_version); - server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) { - - start_check_version = true; - + server.on("/check", HTTP_GET, [](AsyncWebServerRequest * request) { + upgrade_url = true; Serial.print("[i] Last firmware version: "); Serial.println(last_version); -#ifdef ESP8266 - int ChipRealSize = ESP.getFlashChipRealSize() / 1048576; -#endif -#ifdef ESP32 - int ChipRealSize = 4; -#endif String tmp = "{}"; if (WiFi.status() == WL_CONNECTED) { - if (ChipRealSize >= 4) { + if (mb_4_of_memory) { if (last_version != "") { if (last_version != "error") { if (last_version == firmware_version) { jsonWriteStr(tmp, "title", "Последняя версия прошивки уже установлена."); jsonWriteStr(tmp, "class", "pop-up"); - } else { - upgrade_flag = true; - jsonWriteStr(tmp, "title", "Идет обновление прошивки... После завершения устройство перезагрузится. Подождите одну минуту!!!"); + } else { + jsonWriteStr(tmp, "title", "Имеется новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить"); jsonWriteStr(tmp, "class", "pop-up"); } } else { @@ -53,11 +44,18 @@ void initUpgrade() { } request->send(200, "text/text", tmp); }); + + server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) { + upgrade = true; + String tmp = "{}"; + //jsonWriteStr(tmp, "title", "Есть новая версия Установить?"); + request->send(200, "text/text", "ok"); + }); } -void handle_get_url() { - if (start_check_version) { - start_check_version = false; +void do_upgrade_url() { + if (upgrade_url) { + upgrade_url = false; #ifdef ESP32 last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt"); jsonWriteStr(configSetup, "last_version", last_version); @@ -118,9 +116,9 @@ void upgrade_firmware() { } } -void handle_upgrade() { - if (upgrade_flag) { - upgrade_flag = false; +void do_upgrade() { + if (upgrade) { + upgrade = false; upgrade_firmware(); } } diff --git a/WiFi.ino b/WiFi.ino index 20f9f44c..622f748c 100644 --- a/WiFi.ino +++ b/WiFi.ino @@ -1,5 +1,5 @@ void WIFI_init() { - + // --------------------Получаем ssid password со страницы server.on("/ssid", HTTP_GET, [](AsyncWebServerRequest * request) { if (request->hasArg("ssid")) { @@ -42,12 +42,12 @@ void WIFI_init() { } request->send(200, "text/text", "OK"); // отправляем ответ о выполнении }); + ROUTER_Connecting(); +} - - // Попытка подключения к точке доступа +void ROUTER_Connecting() { WiFi.mode(WIFI_STA); - // WiFi.mode(WIFI_NONE_SLEEP); byte tries = 20; String _ssid = jsonRead(configSetup, "ssid"); @@ -92,6 +92,8 @@ void WIFI_init() { Serial.print(WiFi.localIP()); Serial.println(""); jsonWriteStr(configJson, "ip", WiFi.localIP().toString()); + + //add_dev_in_list("dev.txt", chipID, WiFi.localIP().toString()); } } @@ -115,8 +117,8 @@ bool StartAPMode() { Serial.println("->try find router"); if (RouterFind(jsonRead(configSetup, "ssid"))) { ts.remove(ROUTER_SEARCHING); - WIFI_init(); - MQTT_init(); + ROUTER_Connecting(); + MQTT_Connecting(); } }, nullptr, true); } @@ -164,8 +166,9 @@ boolean RouterFind(String ssid) { return false; } } + /* -String scanWIFI() { + String scanWIFI() { uint8_t n = WiFi.scanNetworks(); DynamicJsonBuffer jsonBuffer; JsonObject& json = jsonBuffer.createObject(); @@ -184,7 +187,7 @@ String scanWIFI() { String root; json.printTo(root); return root; -} + } */ /* { diff --git a/data/config-all.json b/data/config-all.json new file mode 100644 index 00000000..0f09cde1 --- /dev/null +++ b/data/config-all.json @@ -0,0 +1,18 @@ +{ + "name": "IoTmanager", + "chipID": "", + "ssidAP": "WiFi", + "passwordAP": "", + "ssid": "your_ssid", + "password": "your_password", + "timezone": 3, + "mqttServer": "", + "mqttPort": 0, + "mqttPrefix": "/IoTmanager", + "mqttUser": "", + "mqttPass": "", + "scenario": "1", + "pushingbox_id": "", + "web_login": "admin", + "web_pass": "admin" +} \ No newline at end of file diff --git a/data/config-my.json b/data/config-my.json deleted file mode 100644 index 345fd0cc..00000000 --- a/data/config-my.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "SSDP": "IoTmanager", - "chipID": "", - "ssidAP": "WiFi", - "passwordAP": "", - "ssid": "rise", - "password": "hostel3333", - "timezone": 2, - "mqttServer": "mqtt.ioty.ru", - "mqttPort": 1883, - "mqttPrefix": "/rise", - "mqttUser": "test", - "mqttPass": "test", - "scenario": "1", - "pushingbox_id": "", - "web_login": "admin", - "web_pass": "admin" -} \ No newline at end of file diff --git a/data/config.json b/data/config.json index 6d81dee4..9ce5891e 100644 --- a/data/config.json +++ b/data/config.json @@ -1,16 +1,16 @@ { - "SSDP": "MODULES", + "name": "IoTmanager", "chipID": "", "ssidAP": "WiFi", "passwordAP": "", - "ssid": "your_ssid", - "password": "your_password", - "timezone": 3, - "mqttServer": "", - "mqttPort": 0, - "mqttPrefix": "/IoTmanager", - "mqttUser": "", - "mqttPass": "", + "ssid": "rise", + "password": "hostel3333", + "timezone": 2, + "mqttServer": "mqtt.ioty.ru", + "mqttPort": 1883, + "mqttPrefix": "/rise", + "mqttUser": "test", + "mqttPass": "test", "scenario": "1", "pushingbox_id": "", "web_login": "admin", diff --git a/data/configuration.json b/data/configuration.json index 5cd91f1e..c4a132ce 100644 --- a/data/configuration.json +++ b/data/configuration.json @@ -8,7 +8,7 @@ "content": [ { "type": "h5", - "title": "{{SSDP}}", + "title": "{{name}}", "class": "alert-warning" }, { @@ -62,7 +62,7 @@ "state": "firmware.c.txt", "style": "width:100%;height:400px", "title": "Сохранить", - "action": "/all_modules_init", + "action": "/init?arg=2", "class": "btn btn-block btn-success" }, { @@ -79,7 +79,7 @@ "type": "checkbox", "name": "scenario", "title": "Включить сценарии", - "action": "/scenario?status=[[scenario]]", + "action": "/init?arg=[[scenario]]", "state": "{{scenario}}" }, { @@ -90,8 +90,8 @@ "type": "file", "state": "firmware.s.txt", "style": "width:100%;height:400px", - "title": "Сохранить и включить", - "action": "/scenario?status=1", + "title": "Сохранить", + "action": "/init?arg=4", "class": "btn btn-block btn-success" }, { @@ -100,13 +100,13 @@ { "type": "link", "title": "Очистить логи сенсоров", - "action": "/cleanlog", + "action": "/init?arg=3", "class": "btn btn-block btn-success" }, { "type": "link", "title": "Главная", - "action": "/page.htm?index", + "action": "/", "class": "btn btn-block btn-danger btn-sm" } ] diff --git a/data/dev.json b/data/dev.json new file mode 100644 index 00000000..dc1ad578 --- /dev/null +++ b/data/dev.json @@ -0,0 +1,65 @@ +{ + "configs": [ + "/config.live.json", + "/config.setup.json" + ], + "title": "Главная", + "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", + "content": [ + { + "type": "h5", + "title": "{{name}}", + "class": "alert-warning" + }, + { + "type": "h3", + "title": "Список других устройств в сети:" + }, + { + "type": "hr" + }, + { + "type": "csv", + "title": [ + "html", + "html", + "html" + ], + "state": "dev.csv", + "style": "width:100%;", + "class": "nan" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Переформировать список устройств", + "action": "udp?arg=2", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Обновить страницу", + "action": "udp?arg=3", + "class": "btn btn-block btn-success" + }, + { + "type": "hr" + }, + { + "type": "text", + "class": "alert alert-warning", + "title": "После нажатия на кнопку 'Переформировать список устройств' ждите примерно минуту, а затем обновите страницу и список появится вновь" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Главная", + "action": "/", + "class": "btn btn-block btn-danger" + } + ] +} \ No newline at end of file diff --git a/data/favicon.ico b/data/favicon.ico index 198474d2..50d908fa 100644 Binary files a/data/favicon.ico and b/data/favicon.ico differ diff --git a/data/index.htm.gz b/data/index.htm.gz index dda5d5da..6aba3a8c 100644 Binary files a/data/index.htm.gz and b/data/index.htm.gz differ diff --git a/data/index.json b/data/index.json index 05e0aba7..4ac58fd4 100644 --- a/data/index.json +++ b/data/index.json @@ -8,7 +8,7 @@ "content": [ { "type": "h5", - "title": "{{SSDP}}", + "title": "{{name}}", "class": "alert-warning" }, { @@ -37,28 +37,37 @@ { "type": "link", "title": "Конфигурация устройства", - "action": "/page.htm?configuration", + "action": "/?configuration", "class": "btn btn-block btn-primary" }, { "type": "hr" }, + { + "type": "link", + "title": "Список других устройств в сети", + "action": "/?dev", + "class": "btn btn-block btn-warning" + }, + { + "type": "hr" + }, { "type": "link", "title": "Конфигурация WIFI", - "action": "/page.htm?setup", + "action": "/?setup", "class": "btn btn-block btn-success" }, { "type": "link", "title": "Конфигурация MQTT", - "action": "/page.htm?mqtt", + "action": "/?mqtt", "class": "btn btn-block btn-success" }, { "type": "link", "title": "Конфигурация push", - "action": "/page.htm?pushingbox", + "action": "/?pushingbox", "class": "btn btn-block btn-success" }, { @@ -73,7 +82,7 @@ { "type": "button", "title": "Обновить прошивку", - "action": "/upgrade", + "action": "/check", "response": "[[my-block]]", "class": "btn btn-block btn-success" }, diff --git a/data/js/build.chart.js.gz b/data/js/build.chart.js.gz index 49d8ad0b..68e9791c 100644 Binary files a/data/js/build.chart.js.gz and b/data/js/build.chart.js.gz differ diff --git a/data/js/function.js.gz b/data/js/function.js.gz index 571ba85a..2c3d7bbf 100644 Binary files a/data/js/function.js.gz and b/data/js/function.js.gz differ diff --git a/data/mqtt.json b/data/mqtt.json index e24ccac6..da2a8476 100644 --- a/data/mqtt.json +++ b/data/mqtt.json @@ -1,96 +1,106 @@ { - "configs": [ -"/config.setup.json" - ], - "class":"col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", - "content": [ - { - "type": "h5", - "title": "{{SSDP}}", - "class":"alert-warning" - }, - { - "type": "h4", - "title": "Server name:" - }, -{ - "type": "input", - "title": "", - "name":"1", - "state": "{{mqttServer}}" - }, -{ - "type": "h4", - "title": "Port:" - }, -{ - "type": "input", - "title": "", - "name":"2", - "state": "{{mqttPort}}" - }, -{ - "type": "h4", - "title": "Prefix:" - }, -{ - "type": "input", - "title": "", - "name":"3", - "state": "{{mqttPrefix}}" - }, -{ - "type": "h4", - "title": "User name:" - }, -{ - "type": "input", - "title": "", - "name":"4", - "state": "{{mqttUser}}" - }, -{ - "type": "h4", - "title": "Password:" - }, -{ - "type": "input", - "title": "", - "name":"5", - "state": "{{mqttPass}}" - }, -{ - "type":"h3", - "name":"my-block", -"style":"position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;", - "class":"hidden" - }, -{ - "type": "button", - "title":"Сохранить", - "action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]", - "class": "btn btn-block btn-success", - "style": "width:100%;display:inline" - }, -{ - "type": "button", - "title":"Проверить соединение с MQTT", - "action": "mqttCheck", - "response":"[[my-block]]", - "class": "btn btn-block btn-success", - "style": "width:100%;display:inline" - }, - { - "type": "link", - "title": "Перезагрузить устройство", - "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}", - "class": "btn btn-block btn-warning" - }, - { - "type": "link", - "title": "Главная", - "action": "/page.htm?index", - "class": "btn btn-block btn-danger btn-sm" - } - ] -} + "configs": [ + "/config.setup.json" + ], + "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", + "content": [ + { + "type": "h5", + "title": "{{name}}", + "class": "alert-warning" + }, + { + "type": "h4", + "title": "Server name:" + }, + { + "type": "input", + "title": "", + "name": "1", + "state": "{{mqttServer}}" + }, + { + "type": "h4", + "title": "Port:" + }, + { + "type": "input", + "title": "", + "name": "2", + "state": "{{mqttPort}}" + }, + { + "type": "h4", + "title": "Prefix:" + }, + { + "type": "input", + "title": "", + "name": "3", + "state": "{{mqttPrefix}}" + }, + { + "type": "h4", + "title": "User name:" + }, + { + "type": "input", + "title": "", + "name": "4", + "state": "{{mqttUser}}" + }, + { + "type": "h4", + "title": "Password:" + }, + { + "type": "input", + "title": "", + "name": "5", + "state": "{{mqttPass}}" + }, + { + "type": "h3", + "name": "my-block", + "style": "position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;", + "class": "hidden" + }, + { + "type": "text", + "class": "alert alert-warning", + "title": "Прежде чем нажимать на кнопку 'Отправить настройки MQTT' сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети" + }, + { + "type": "button", + "title": "Сохранить", + "action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]", + "class": "btn btn-block btn-success" + }, + { + "type": "button", + "title": "Отправить настройки MQTT с этого устройства на все остальные", + "action": "udp?arg=1", + "class": "btn btn-block btn-success" + }, + + { + "type": "button", + "title": "Проверить соединение с MQTT", + "action": "mqttCheck", + "response": "[[my-block]]", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Перезагрузить устройство", + "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Главная", + "action": "/", + "class": "btn btn-block btn-danger btn-sm" + } + ] +} \ No newline at end of file diff --git a/data/pushingbox.json b/data/pushingbox.json index 0679489a..eac5a080 100644 --- a/data/pushingbox.json +++ b/data/pushingbox.json @@ -6,7 +6,7 @@ "content": [ { "type": "h5", - "title": "{{SSDP}}", + "title": "{{name}}", "class":"alert-warning" }, { @@ -39,7 +39,7 @@ { "type": "link", "title": "Главная", - "action": "/page.htm?index", + "action": "/", "class": "btn btn-block btn-danger btn-sm" } ] diff --git a/data/setup.json b/data/setup.json index 2b998ff4..7425c4d9 100644 --- a/data/setup.json +++ b/data/setup.json @@ -7,7 +7,7 @@ "content": [ { "type": "h5", - "title": "{{SSDP}}", + "title": "{{name}}", "class":"alert-warning" }, { @@ -26,14 +26,14 @@ { "type": "input", "title": "Имя устройства", - "name":"ssdp", - "state": "{{SSDP}}", + "name":"dev_name", + "state": "{{name}}", "pattern": "[0-9a-zA-Zа-яА-Я.\\- ]{1,20}" }, { "type": "button", "title": "Сохранить", - "action": "ssdp?ssdp=[[ssdp]]", + "action": "name?arg=[[dev_name]]", "class": "btn btn-block btn-success" }, { diff --git a/date_excess/favicon.ico b/date_excess/favicon.ico new file mode 100644 index 00000000..198474d2 Binary files /dev/null and b/date_excess/favicon.ico differ diff --git a/data/page.htm.gz b/date_excess/page.htm.gz similarity index 100% rename from data/page.htm.gz rename to date_excess/page.htm.gz diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino index 838a5908..6ba65886 100644 --- a/esp32-esp8266_iot-manager_modules_firmware.ino +++ b/esp32-esp8266_iot-manager_modules_firmware.ino @@ -32,14 +32,22 @@ void setup() { Push_init(); Serial.println("[V] Push_init"); //-------------------------------------------------------------- - SSDP_init(); - Serial.println("[V] SSDP_init"); + UDP_init(); + Serial.println("[V] UDP_init"); //-------------------------------------------------------------- - ts.add(TEST, 10000, [&](void*) { + + + ts.add(TEST, 5000, [&](void*) { + getMemoryLoad("[i] periodic check of"); + //String json = "{}"; + //jsonWriteStr(json, "test6", GetTime()); + //ws.textAll(json); + }, nullptr, true); + just_load = false; } @@ -54,15 +62,21 @@ void loop() { ws.cleanupClients(); #endif + not_async_actions(); + handleMQTT(); - - handle_connection(); - handle_get_url(); - handleCMD_loop(); handleButton(); handleScenario(); + handleUdp(); ts.update(); - handle_upgrade(); +} + +void not_async_actions() { + do_mqtt_connection(); + do_upgrade_url(); + do_upgrade(); + do_udp_data_parse(); + do_mqtt_send_settings_to_udp(); } diff --git a/mqtt.ino b/mqtt.ino index 6bdd5dc4..68a408e6 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -38,7 +38,7 @@ void MQTT_init() { jsonWriteStr(configSetup, "mqttPass", request->getParam("mqttPass")->value()); } saveConfig(); - start_connecting_to_mqtt = true; + mqtt_connection = true; request->send(200, "text/text", "ok"); }); @@ -49,11 +49,20 @@ void MQTT_init() { jsonWriteStr(tmp, "class", "pop-up"); request->send(200, "text/text", tmp); }); + + } -void handle_connection() { - if (start_connecting_to_mqtt) { - start_connecting_to_mqtt = false; +void do_mqtt_send_settings_to_udp() { + if (mqtt_send_settings_to_udp) { + mqtt_send_settings_to_udp = false; + send_mqtt_to_udp(); + } +} + +void do_mqtt_connection() { + if (mqtt_connection) { + mqtt_connection = false; client.disconnect(); MQTT_Connecting(); } @@ -76,14 +85,14 @@ boolean MQTT_Connecting() { //ssl//espClient.setCACert(local_root_ca1); client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort")); if (WiFi.status() == WL_CONNECTED) { - if (!client.connected()) { + if (!client.connected()) { Serial.println("[V] Connecting to MQTT server commenced"); - if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) { + if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) { Serial.println("[V] MQTT connected"); client.setCallback(callback); client.subscribe(jsonRead(configSetup, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control - client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order + client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order Serial.println("[V] Callback set, subscribe done"); return true; } else { @@ -99,7 +108,7 @@ boolean MQTT_Connecting() { } //=====================================================ВХОДЯЩИЕ ДАННЫЕ======================================================== -void callback(char* topic, byte* payload, unsigned int length) { +void callback(char* topic, byte * payload, unsigned int length) { Serial.print("[MQTT] "); Serial.print(topic); String topic_str = String(topic); @@ -228,7 +237,7 @@ void sendAllData() { //берет строку json и ключи превра topic.replace("\"", ""); String state = selectToMarkerLast (tmp, ":"); state.replace("\"", ""); - if (topic != ssdpS && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) { + if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) { sendSTATUS(topic, state); //Serial.println("-->" + topic + " " + state); } diff --git a/set.h b/set.h index bf10a2b1..76630a71 100644 --- a/set.h +++ b/set.h @@ -1,7 +1,8 @@ -String firmware_version = "2.3.2"; +String firmware_version = "2.3.1"; //----------------------------------------------------------------- +boolean mb_4_of_memory = true; String last_version; -boolean start_check_version = false; + //#define OTA_enable //#define MDNS_enable @@ -79,11 +80,14 @@ AsyncEventSource events("/events"); //--------------------------------------------------------------- #include TickerScheduler ts(30); -enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, STEPPER1, STEPPER2, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, dhtT_LOG, dhtH_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, TIME_SYNC, STATISTICS, TEST}; +enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, STEPPER1, STEPPER2, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, dhtT_LOG, dhtH_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, TIME_SYNC, STATISTICS, UDP, UDP_DB, TEST}; //--------------------------------------------------------------- //ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure //#include "Ticker_for_TickerScheduler/Ticker/Ticker.h" //--------------------------------------------------------------- +#include +WiFiUDP Udp; +//--------------------------------------------------------------- #include WiFiClient espClient; //ssl//WiFiClientSecure espClient; @@ -145,7 +149,6 @@ const char* ntpServer = "pool.ntp.org"; const long gmtOffset_sec = 3600; const int daylightOffset_sec = 3600; -const String ssdpS = "SSDP"; String current_time; int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; @@ -154,11 +157,25 @@ int wifi_lost_error = 0; int mqtt_lost_error = 0; String var; -boolean upgrade_flag = false; -boolean get_url_flag = false; -boolean start_connecting_to_mqtt = false; +//flags for not async actions +boolean upgrade_url = false; +boolean upgrade = false; +boolean mqtt_connection = false; +boolean udp_data_parse = false; +boolean mqtt_send_settings_to_udp = false; + +boolean udp_busy = false; + String test; boolean chart_data_in_solid_array; + + +unsigned int udp_port = 4210; +char udp_incomingPacket[255]; +//char udp_replyPacket[] = "Multicast packet 1"; +IPAddress udp_multicastIP (255, 255, 255, 255); +String received_ip; +String received_udp_line; diff --git a/udp.ino b/udp.ino new file mode 100644 index 00000000..a85052f1 --- /dev/null +++ b/udp.ino @@ -0,0 +1,122 @@ +void UDP_init() { + server.on("/udp", HTTP_GET, [](AsyncWebServerRequest * request) { + String value; + if (request->hasArg("arg")) { + value = request->getParam("arg")->value(); + } + if (value == "1") { + mqtt_send_settings_to_udp = true; + request->send(200, "text/text", "ok"); + } + if (value == "2") { + SPIFFS.remove("/dev.csv"); + request->redirect("/?dev"); + } + if (value == "3") { + request->redirect("/?dev"); + } + }); + server.on("/name", HTTP_GET, [](AsyncWebServerRequest * request) { + if (request->hasArg("arg")) { + jsonWriteStr(configSetup, "name", request->getParam("arg")->value()); + jsonWriteStr(configJson, "name", request->getParam("arg")->value()); + saveConfig(); + } + request->send(200, "text/text", "OK"); + }); + + SPIFFS.remove("/dev.csv"); + + Udp.begin(udp_port); + + ts.add(UDP, 30000, [&](void*) { + if (WiFi.status() == WL_CONNECTED) { + if (!udp_busy) { + String line_to_send = chipID + ";" + jsonRead(configSetup, "SSDP"); +#ifdef ESP8266 + Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP()); + Udp.write(line_to_send.c_str()); +#endif +#ifdef ESP32 + Udp.beginMulticast(udp_multicastIP, udp_port); +#endif + Udp.endPacket(); + Serial.println("[UDP<=] dev info send"); + } + } + }, nullptr, false); +} + +void add_dev_in_list(String fileName, String id, String dev_name, String ip) { + File configFile = SPIFFS.open("/" + fileName, "r"); + if (!configFile) { + addFile(fileName, "device id;device name;ip adress"); + } + if (!configFile.find(id.c_str())) { + addFile(fileName, id + ";" + dev_name + "; " + ip + ""); + } +} + +void handleUdp() { + if (WiFi.status() == WL_CONNECTED) { + int packetSize = Udp.parsePacket(); + if (packetSize) { + //Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort()); + received_ip = Udp.remoteIP().toString(); + int len = Udp.read(udp_incomingPacket, 255); + if (len > 0) { + udp_incomingPacket[len] = 0; + } + received_udp_line = String(udp_incomingPacket); + udp_data_parse = true; + } + } +} + +void do_udp_data_parse() { + if (udp_data_parse) { + udp_data_parse = false; + Serial.print("[UDP=>] " + received_ip); + Serial.print(" "); + Serial.println(received_udp_line); + if (received_udp_line.indexOf("mqttServer") > 0) { + jsonWriteStr(configSetup, "mqttServer", jsonRead(received_udp_line, "mqttServer")); + jsonWriteInt(configSetup, "mqttPort", jsonReadtoInt(received_udp_line, "mqttPort")); + jsonWriteStr(configSetup, "mqttPrefix", jsonRead(received_udp_line, "mqttPrefix")); + jsonWriteStr(configSetup, "mqttUser", jsonRead(received_udp_line, "mqttUser")); + jsonWriteStr(configSetup, "mqttPass", jsonRead(received_udp_line, "mqttPass")); + saveConfig(); + Serial.println("[V] new mqtt setting received from udp and saved"); + mqtt_connection = true; + } else { + add_dev_in_list("dev.csv", selectFromMarkerToMarker(received_udp_line, ";", 0), selectFromMarkerToMarker(received_udp_line, ";", 1), received_ip); + } + } +} + +void send_mqtt_to_udp() { + if (WiFi.status() == WL_CONNECTED) { + udp_busy = true; + String mqtt_data = "{}"; + jsonWriteStr(mqtt_data, "mqttServer", jsonRead(configSetup, "mqttServer")); + jsonWriteInt(mqtt_data, "mqttPort", jsonReadtoInt(configSetup, "mqttPort")); + jsonWriteStr(mqtt_data, "mqttPrefix", jsonRead(configSetup, "mqttPrefix")); + jsonWriteStr(mqtt_data, "mqttUser", jsonRead(configSetup, "mqttUser")); + jsonWriteStr(mqtt_data, "mqttPass", jsonRead(configSetup, "mqttPass")); + Serial.println(mqtt_data); +#ifdef ESP8266 + Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP()); + Udp.write(mqtt_data.c_str()); +#endif +#ifdef ESP32 + Udp.beginMulticast(udp_multicastIP, udp_port); + int size_of = sizeof(mqtt_data); + uint8_t msg[10] = (uint8_t)atoi(mqtt_data.c_str()); + //Udp.write(msg, sizeof(mqtt_data)); + //Udp.write(mqtt_data.c_str(), strlen(mqtt_data.c_str())); +#endif + Udp.endPacket(); + Serial.println("[UDP<=] mqtt info send"); + udp_busy = false; + } +}