From 9a775cd9d4de0a794bb48e52ffe16aa5f56842e6 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sun, 22 Mar 2020 01:50:31 +0100 Subject: [PATCH] fix mqtt bug --- Cmd.ino | 4 +- Init.ino | 7 +- Sensors.ino | 13 --- Upgrade.ino | 5 - data/config.json | 4 +- data/mqtt.json | 7 ++ ...2-esp8266_iot-manager_modules_firmware.ino | 5 +- main.ino | 2 +- mqtt.ino | 93 +++++++------------ set.h | 21 +++-- 10 files changed, 66 insertions(+), 95 deletions(-) diff --git a/Cmd.ino b/Cmd.ino index b19566ac..656539e3 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -604,7 +604,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri all_vigets += viget + "\r\n"; viget = ""; } -*/ + String vidgetConfigWrite(String viget, String key, String value) { if (viget == "") return ""; @@ -623,7 +623,7 @@ String vidgetConfigWrite(String viget, String key, String value) { } } } - +*/ diff --git a/Init.ino b/Init.ino index f0122913..ad8df97b 100644 --- a/Init.ino +++ b/Init.ino @@ -32,13 +32,16 @@ void All_init() { void Device_init() { - //SENSORS-SECTION ts.remove(ANALOG_); ts.remove(LEVEL); ts.remove(DALLAS); ts.remove(DHTT); ts.remove(DHTH); - //================ + ts.remove(DHTC); + ts.remove(DHTP); + ts.remove(DHTD); + ts.remove(STEPPER1); + ts.remove(STEPPER2); all_vigets = ""; txtExecution("firmware.config.txt"); diff --git a/Sensors.ino b/Sensors.ino index bdcb37da..c86bac79 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -36,7 +36,6 @@ void analog() { sendSTATUS("analog", String(analog)); if (client.connected()) { Serial.println("[i] sensor 'analog' send date " + String(analog)); - //web_print("sensor 'analog' send date " + String(analog)); } // } analog_old = analog; @@ -84,7 +83,6 @@ void level() { sendSTATUS("level", String(level)); if (client.connected()) { Serial.println("[i] sensor tank 'level' send date " + String(level)); - //web_print("sensor tank 'level' send date " + String(level)); } //} level_old = level; @@ -116,7 +114,6 @@ void dallas() { sendSTATUS("dallas", String(temp)); if (client.connected()) { Serial.println("[i] sensor 'dallas' send date " + String(temp)); - //web_print("sensor 'dallas' send date " + String(temp)); } //} temp_old = temp; @@ -156,7 +153,6 @@ void dhtT() { sendSTATUS("dhtT", String(value)); if (client.connected()) { Serial.println("[i] sensor 'dhtT' send date " + String(value)); - //web_print("sensor 'dhtT' send date " + String(value)); } //} value_old = value; @@ -195,7 +191,6 @@ void dhtH() { sendSTATUS("dhtH", String(value)); if (client.connected()) { Serial.println("[i] sensor 'dhtH' send date " + String(value)); - //web_print("sensor 'dhtH' send date " + String(value)); } //} value_old = value; @@ -370,14 +365,6 @@ void logging() { deleteOldDate("log.dallas.txt", jsonReadtoInt(optionJson, "dallas_logging_count"), jsonRead(configJson, "dallas"), false); }, nullptr, true); } - - if (sensor_name == "ph") { - flagLoggingPh = true; - ts.remove(PH_LOG); - ts.add(PH_LOG, period_min.toInt() * 1000 * 60, [&](void*) { - deleteOldDate("log.ph.txt", jsonReadtoInt(optionJson, "ph_logging_count"), jsonRead(configJson, "ph"), false); - }, nullptr, true); - } } void deleteOldDate(String file, int seted_number_of_lines, String date_to_add, boolean date_time) { diff --git a/Upgrade.ino b/Upgrade.ino index 953f9739..2bf9a25a 100644 --- a/Upgrade.ino +++ b/Upgrade.ino @@ -41,7 +41,6 @@ void upgrade_firmware() { configSetup_for_update = configSetup; Serial.println("Start upgrade SPIFFS, please wait..."); - //web_print("Start upgrade SPIFFS, please wait..."); WiFiClient client_for_upgrade; @@ -63,8 +62,6 @@ void upgrade_firmware() { Serial.println("SPIFFS upgrade done!"); Serial.println("Start upgrade BUILD, please wait..."); - //web_print("SPIFFS upgrade done!"); - //web_print("Start upgrade BUILD, please wait..."); #ifdef ESP32 //httpUpdate.rebootOnUpdate(true); @@ -76,8 +73,6 @@ void upgrade_firmware() { #endif if (ret == HTTP_UPDATE_OK) { - //web_print("BUILD upgrade done!"); - //web_print("Restart ESP...."); Serial.println("BUILD upgrade done!"); Serial.println("Restart ESP...."); ESP.restart(); diff --git a/data/config.json b/data/config.json index e42c39a4..e16986fa 100644 --- a/data/config.json +++ b/data/config.json @@ -3,8 +3,8 @@ "chipID": "", "ssidAP": "WiFi", "passwordAP": "", - "ssid": "MW40V_782C", - "password": "05978600", + "ssid": "rise", + "password": "hostel3333", "timezone": 3, "mqttServer": "m12.cloudmqtt.com", "mqttPort": 14053, diff --git a/data/mqtt.json b/data/mqtt.json index 44305aa0..e24ccac6 100644 --- a/data/mqtt.json +++ b/data/mqtt.json @@ -69,6 +69,13 @@ "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" diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino index 8382f383..db93b88d 100644 --- a/esp32-esp8266_iot-manager_modules_firmware.ino +++ b/esp32-esp8266_iot-manager_modules_firmware.ino @@ -59,7 +59,6 @@ void setup() { Push_init(); Serial.println("[V] Push_init"); //-------------------------------------------------------------- - Serial.print("[i] Date compiling: "); Serial.println(DATE_COMPILING); @@ -75,8 +74,7 @@ void setup() { Serial.print("[i] Last firmware version: "); Serial.println(new_version); - //Serial.println(scanWIFI()); - + just_load = false; } @@ -92,6 +90,7 @@ void loop() { #endif handleMQTT(); + handle_connection(); handleCMD_loop(); handleButton(); diff --git a/main.ino b/main.ino index 2cf38a1a..10810d35 100644 --- a/main.ino +++ b/main.ino @@ -271,7 +271,7 @@ void getMemoryLoad(String text) { if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!"); Serial.print(text + " memory used:"); Serial.print(String(memory_load) + "%; "); - Serial.print("memory remain:"); + Serial.print("memory remain: "); Serial.println(String(memory_remain) + " k bytes"); } diff --git a/mqtt.ino b/mqtt.ino index dc2e0248..3c9f86e5 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -1,8 +1,26 @@ //===============================================ИНИЦИАЛИЗАЦИЯ================================================ void MQTT_init() { - server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) { + ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) { + up_time(); + if (WiFi.status() == WL_CONNECTED) { + Serial.println("[V] WiFi-ok"); + if (client.connected()) { + Serial.println("[V] MQTT-ok"); + } else { + MQTT_Connecting(); + if (!just_load) mqtt_lost_error++; + } + } else { + Serial.println("[E] Lost WiFi connection"); + wifi_lost_error++; + ts.remove(WIFI_MQTT_CONNECTION_CHECK); + StartAPMode(); + } + }, nullptr, true); + + server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest * request) { if (request->hasArg("mqttServer")) { jsonWrite(configSetup, "mqttServer", request->getParam("mqttServer")->value()); } @@ -19,57 +37,25 @@ void MQTT_init() { if (request->hasArg("mqttPass")) { jsonWrite(configSetup, "mqttPass", request->getParam("mqttPass")->value()); } - saveConfig(); + start_connection = true; + request->send(200, "text/text", "ok"); + }); - - //client.disconnect(); - MQTT_Connecting(); - - /* - int i = 0; - while (!client.connected() && i <= 25) { - delay(1000); - Serial.print("."); - i++; - } - */ - + server.on("/mqttCheck", HTTP_GET, [](AsyncWebServerRequest * request) { String tmp = "{}"; jsonWrite(tmp, "title", "" + stateMQTT()); jsonWrite(tmp, "class", "pop-up"); - -#ifdef ESP8266 - request->send(200, "text/text", "ok"); -#endif - -#ifdef ESP32 request->send(200, "text/text", tmp); -#endif }); +} - MQTT_Connecting(); - - - //проверка подключения к серверу - ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) { - up_time(); - if (WiFi.status() == WL_CONNECTED) { - Serial.println("[V] WiFi-ok"); - if (client.connected()) { - Serial.println("[V] MQTT-ok"); - //web_print("MQTT-ok"); - } else { - MQTT_Connecting(); - mqtt_lost_error++; - } - } else { - Serial.println("[E] Lost WiFi connection"); - wifi_lost_error++; - ts.remove(WIFI_MQTT_CONNECTION_CHECK); - StartAPMode(); - } - }, nullptr, false); +void handle_connection() { + if (start_connection) { + start_connection = false; + client.disconnect(); + MQTT_Connecting(); + } } //================================================ОБНОВЛЕНИЕ==================================================== @@ -85,10 +71,7 @@ void handleMQTT() { boolean MQTT_Connecting() { String mqtt_server = jsonRead(configSetup, "mqttServer"); if ((mqtt_server != "")) { - static boolean first = true; - if (!first) Serial.println("[E] Lost MQTT connection, start reconnecting"); - //web_print("Lost MQTT connection, start reconnecting"); - first = false; + Serial.println("[E] Lost MQTT connection, start reconnecting"); //ssl//espClient.setCACert(local_root_ca1); client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort")); if (WiFi.status() == WL_CONNECTED) { @@ -96,16 +79,11 @@ boolean MQTT_Connecting() { Serial.println("[V] Connecting to MQTT server commenced"); if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) { Serial.println("[V] MQTT connected"); - //web_print("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 + "/test").c_str()); //Для приема получения work и подтверждения связи (для приложения mqtt IOT MQTT Panel) - client.subscribe((jsonRead(configSetup, "mqttPrefix") + "/ids").c_str()); // Подписываемся на топики ids - //sendMQTT("test", "work"); Serial.println("[V] Callback set, subscribe done"); - //web_print("Callback set, subscribe done"); return true; } else { Serial.println("[E] try again in " + String(wifi_mqtt_reconnecting / 1000) + " sec"); @@ -115,7 +93,6 @@ boolean MQTT_Connecting() { } } else { Serial.println("[E] No date for MQTT connection"); - //web_print("No date for MQTT connection"); return false; } } @@ -157,10 +134,10 @@ void outcoming_date() { sendAllWigets(); sendAllData(); - // if (flagLoggingAnalog) sendLogData("log.analog.txt", "loganalog"); - // if (flagLoggingPh) sendLogData("log.ph.txt", "logph"); - // if (flagLoggingDallas) sendLogData("log.dallas.txt", "logdallas"); - // if (flagLoggingLevel) sendLogData("log.level.txt", "loglevel"); + // if (flagLoggingAnalog) sendLogData("log.analog.txt", "loganalog"); + // if (flagLoggingPh) sendLogData("log.ph.txt", "logph"); + // if (flagLoggingDallas) sendLogData("log.dallas.txt", "logdallas"); + // if (flagLoggingLevel) sendLogData("log.level.txt", "loglevel"); Serial.println("[V] Sending all date to iot manager completed"); diff --git a/set.h b/set.h index 4322fb79..5d3fe3dd 100644 --- a/set.h +++ b/set.h @@ -1,6 +1,8 @@ String firmware_version = "2.3.1"; String new_version; +//23560 + //#define OTA_enable //#define MDNS_enable //#define WS_enable @@ -70,13 +72,16 @@ AsyncWebServer server(80); AsyncWebSocket ws("/ws"); #endif AsyncEventSource events("/events"); +//--------------------------------------------------------------- #include "time.h" +//--------------------------------------------------------------- #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, PH_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, 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, CMD, TIMER_COUNTDOWN, TIMERS, TIME, STATISTICS, TEST}; +//--------------------------------------------------------------- //ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure //#include "Ticker_for_TickerScheduler/Ticker/Ticker.h" +//--------------------------------------------------------------- #include WiFiClient espClient; //ssl//WiFiClientSecure espClient; @@ -101,11 +106,11 @@ DallasTemperature sensors; #include "DHTesp.h" DHTesp dht; //---------------------------------------------------------------- -#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021 -Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021(); +//#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021 +//Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021(); //----------------------------------------------------------------- - +boolean just_load = true; const char* hostName = "IoT Manager"; @@ -116,10 +121,8 @@ String optionJson = "{}"; String json = "{}"; String chipID = ""; -//String prefix; //= "/IoTmanager"; String prex; String ids; -//boolean busy; String all_vigets = ""; String scenario; @@ -143,7 +146,7 @@ int wifi_lost_error = 0; int mqtt_lost_error = 0; String var; - boolean upgrade_flag = false; - boolean get_url_flag = false; + +boolean start_connection = false;