From 7472863b05b5785d7c0d98dc3bf41d27ba263819 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Fri, 2 Oct 2020 01:14:45 +0300 Subject: [PATCH] wifi reconnection bug fixed --- data/set.device.json | 2 +- include/Consts.h | 2 +- include/MqttClient.h | 16 ++- include/Utils/WiFiUtils.h | 4 +- include/items/ButtonInClass.h | 2 +- include/items/ButtonOutClass.h | 2 +- include/items/InputClass.h | 4 +- include/items/OutputTextClass.h | 2 +- include/items/PwmOutClass.h | 2 +- include/items/SensorAnalogClass.h | 2 +- include/items/SensorBme280Class.h | 6 +- include/items/SensorBmp280Class.h | 4 +- include/items/SensorDallasClass.h | 2 +- include/items/SensorDhtClass.h | 4 +- include/items/SensorModbusClass.h | 2 +- include/items/SensorUltrasonicClass.h | 2 +- src/ItemsCmd.cpp | 4 +- src/Logging.cpp | 2 +- src/MqttClient.cpp | 97 ++++++----------- src/Sensors.cpp | 32 +++--- src/Utils/WiFiUtils.cpp | 143 ++++++++++++-------------- src/Web.cpp | 2 +- src/main.cpp | 4 +- 23 files changed, 150 insertions(+), 192 deletions(-) diff --git a/data/set.device.json b/data/set.device.json index 68c1369c..85288925 100644 --- a/data/set.device.json +++ b/data/set.device.json @@ -43,7 +43,7 @@ }, { "type": "h4", - "title": "LittleFS version: 245" + "title": "LittleFS version: 246" }, { "type": "hr" diff --git a/include/Consts.h b/include/Consts.h index 89db66f1..69438976 100644 --- a/include/Consts.h +++ b/include/Consts.h @@ -2,7 +2,7 @@ //=================Firmeare================= #define FIRMWARE_NAME "esp8266-iotm" -#define FIRMWARE_VERSION 245 +#define FIRMWARE_VERSION 246 #define FLASH_4MB true //=================System=================== diff --git a/include/MqttClient.h b/include/MqttClient.h index 74977ef6..7656ced5 100644 --- a/include/MqttClient.h +++ b/include/MqttClient.h @@ -2,14 +2,12 @@ #include -namespace MqttClient { -void init(); -boolean connect(); -void reconnect(); -void loop(); - -void subscribe(); +void mqttInit(); +boolean mqttConnect(); +void mqttReconnect(); +void mqttLoop(); +void mqttSubscribe(); boolean publish(const String& topic, const String& data); boolean publishData(const String& topic, const String& data); @@ -21,7 +19,5 @@ boolean publishStatus(const String& topic, const String& data); void publishWidgets(); void publishState(); -void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length); +void mqttCallback(char* topic, uint8_t* payload, size_t length); const String getStateStr(); - -} // namespace MqttClient diff --git a/include/Utils/WiFiUtils.h b/include/Utils/WiFiUtils.h index da020af4..ef2c9379 100644 --- a/include/Utils/WiFiUtils.h +++ b/include/Utils/WiFiUtils.h @@ -4,9 +4,9 @@ boolean isNetworkActive(); -void startSTAMode(); +void routerConnect(); bool startAPMode(); -boolean scanWiFi(String ssid); +boolean RouterFind(String ssid); diff --git a/include/items/ButtonInClass.h b/include/items/ButtonInClass.h index 75575cd2..4d6e959c 100644 --- a/include/items/ButtonInClass.h +++ b/include/items/ButtonInClass.h @@ -47,7 +47,7 @@ class ButtonInClass : public LineParsing { void switchChangeVirtual(String key, String state) { eventGen(key, ""); jsonWriteInt(configLiveJson, key, state.toInt()); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } }; diff --git a/include/items/ButtonOutClass.h b/include/items/ButtonOutClass.h index 4a891573..46590814 100644 --- a/include/items/ButtonOutClass.h +++ b/include/items/ButtonOutClass.h @@ -33,7 +33,7 @@ class ButtonOutClass : public LineParsing { } eventGen(key, ""); jsonWriteInt(configLiveJson, key, state.toInt()); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } }; diff --git a/include/items/InputClass.h b/include/items/InputClass.h index 4e7690fe..7d072423 100644 --- a/include/items/InputClass.h +++ b/include/items/InputClass.h @@ -18,13 +18,13 @@ class InputClass : public LineParsing { void inputSetFloat(String key, String state) { eventGen(key, ""); jsonWriteFloat(configLiveJson, key, state.toFloat()); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } void inputSetStr(String key, String state) { eventGen(key, ""); jsonWriteStr(configLiveJson, key, state); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } }; diff --git a/include/items/OutputTextClass.h b/include/items/OutputTextClass.h index b3220f5d..c52cd54c 100644 --- a/include/items/OutputTextClass.h +++ b/include/items/OutputTextClass.h @@ -17,7 +17,7 @@ class OutputTextClass : public LineParsing { state.replace("#", " "); eventGen(key, ""); jsonWriteStr(configLiveJson, key, state); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } }; extern OutputTextClass myOutputText; \ No newline at end of file diff --git a/include/items/PwmOutClass.h b/include/items/PwmOutClass.h index e56090eb..807762d6 100644 --- a/include/items/PwmOutClass.h +++ b/include/items/PwmOutClass.h @@ -24,7 +24,7 @@ class PwmOutClass : public LineParsing { analogWrite(pinInt, state.toInt()); eventGen(key, ""); jsonWriteInt(configLiveJson, key, state.toInt()); - MqttClient::publishStatus(key, state); + publishStatus(key, state); } }; diff --git a/include/items/SensorAnalogClass.h b/include/items/SensorAnalogClass.h index 59724c31..2a5c601b 100644 --- a/include/items/SensorAnalogClass.h +++ b/include/items/SensorAnalogClass.h @@ -30,7 +30,7 @@ class SensorAnalogClass : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); return value; } diff --git a/include/items/SensorBme280Class.h b/include/items/SensorBme280Class.h index 418e9d9d..35641652 100644 --- a/include/items/SensorBme280Class.h +++ b/include/items/SensorBme280Class.h @@ -27,7 +27,7 @@ class SensorBme280Class : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } @@ -37,7 +37,7 @@ class SensorBme280Class : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } @@ -48,7 +48,7 @@ class SensorBme280Class : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } }; diff --git a/include/items/SensorBmp280Class.h b/include/items/SensorBmp280Class.h index e4b78cf4..438258fc 100644 --- a/include/items/SensorBmp280Class.h +++ b/include/items/SensorBmp280Class.h @@ -28,7 +28,7 @@ class SensorBmp280Class : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } @@ -41,7 +41,7 @@ class SensorBmp280Class : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } }; diff --git a/include/items/SensorDallasClass.h b/include/items/SensorDallasClass.h index 9b5c16b4..ff7e11bf 100644 --- a/include/items/SensorDallasClass.h +++ b/include/items/SensorDallasClass.h @@ -36,7 +36,7 @@ class SensorDallasClass : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } } diff --git a/include/items/SensorDhtClass.h b/include/items/SensorDhtClass.h index 3c9cb77a..bea2edb9 100644 --- a/include/items/SensorDhtClass.h +++ b/include/items/SensorDhtClass.h @@ -43,7 +43,7 @@ class SensorDhtClass : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } else { Serial.println("[E] sensor '" + key); @@ -67,7 +67,7 @@ class SensorDhtClass : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } else { Serial.println("[E] sensor '" + key); diff --git a/include/items/SensorModbusClass.h b/include/items/SensorModbusClass.h index bf58792b..27f36c66 100644 --- a/include/items/SensorModbusClass.h +++ b/include/items/SensorModbusClass.h @@ -37,7 +37,7 @@ // int valueFl = this->correction(key, value); // eventGen(key, ""); // jsonWriteStr(configLiveJson, key, String(valueFl)); -// MqttClient::publishStatus(key, String(valueFl)); +// publishStatus(key, String(valueFl)); // Serial.println("I sensor '" + key + "' data: " + String(valueFl) + ", Slave dev addr: " + String(slaveAddress) + ", Register: " + String(regAddress)); // } // diff --git a/include/items/SensorUltrasonicClass.h b/include/items/SensorUltrasonicClass.h index 4a7ed1a2..d0eb76fe 100644 --- a/include/items/SensorUltrasonicClass.h +++ b/include/items/SensorUltrasonicClass.h @@ -34,7 +34,7 @@ class SensorUltrasonic : public SensorConvertingClass { float valueFl = this->correction(key, value); eventGen(key, ""); jsonWriteStr(configLiveJson, key, String(valueFl)); - MqttClient::publishStatus(key, String(valueFl)); + publishStatus(key, String(valueFl)); Serial.println("I sensor '" + key + "' data: " + String(valueFl)); } }; diff --git a/src/ItemsCmd.cpp b/src/ItemsCmd.cpp index 86868304..5521806c 100644 --- a/src/ItemsCmd.cpp +++ b/src/ItemsCmd.cpp @@ -122,7 +122,7 @@ void cmd_init() { // } // // jsonWriteStr(configLiveJson, "text" + number, text); -// MqttClient::publishStatus("text" + number, text); +// publishStatus("text" + number, text); //} //===================================================================================================================================== ////=========================================Модуль шагового мотора====================================================================== @@ -243,7 +243,7 @@ void cmd_init() { // // eventGen("servo", number); // jsonWriteInt(configLiveJson, "servo" + number, value); -// MqttClient::publishStatus("servo" + number, String(value, DEC)); +// publishStatus("servo" + number, String(value, DEC)); //} //#endif ////==================================================================================================================================================== diff --git a/src/Logging.cpp b/src/Logging.cpp index bb76371a..9c974dad 100644 --- a/src/Logging.cpp +++ b/src/Logging.cpp @@ -137,7 +137,7 @@ void sendLogData(String file, String topic) { json_array = "{\"status\":[" + json_array + "]}"; SerialPrint("I","module",json_array); - MqttClient::publishChart(topic, json_array); + publishChart(topic, json_array); } } diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp index dcb571eb..5d726c00 100644 --- a/src/MqttClient.cpp +++ b/src/MqttClient.cpp @@ -6,75 +6,58 @@ #include "Global.h" #include "Init.h" - - -namespace MqttClient { - -// Errors -int wifi_lost_error = 0; -int mqtt_lost_error = 0; -bool connected = false; - -// Session params String mqttPrefix; String mqttRootDevice; -void init() { - +void mqttInit() { myNotAsincActions->add( do_MQTTPARAMSCHANGED, [&](void*) { - reconnect(); + mqttReconnect(); }, nullptr); - mqtt.setCallback(handleSubscribedUpdates); + mqtt.setCallback(mqttCallback); ts.add( WIFI_MQTT_CONNECTION_CHECK, MQTT_RECONNECT_INTERVAL, [&](void*) { - if (isNetworkActive()) { + if (WiFi.status() == WL_CONNECTED) { + SerialPrint("I", "WIFI", "OK"); if (mqtt.connected()) { - if (!connected) { - SerialPrint("I","MQTT","OK"); - setLedStatus(LED_OFF); - connected = true; - } + SerialPrint("I", "MQTT", "OK"); + setLedStatus(LED_OFF); } else { - connect(); - if (!just_load) mqtt_lost_error++; + SerialPrint("E", "MQTT", "lost connection"); + mqttConnect(); } } else { - if (connected) { - SerialPrint("[E]","MQTT","connection lost"); - connected = false; - } + SerialPrint("E", "WIFI", "Lost WiFi connection"); ts.remove(WIFI_MQTT_CONNECTION_CHECK); - wifi_lost_error++; startAPMode(); } }, nullptr, true); } -void disconnect() { - SerialPrint("I","MQTT","disconnect"); +void mqttDisconnect() { + SerialPrint("I", "MQTT", "disconnect"); mqtt.disconnect(); } -void reconnect() { - disconnect(); - connect(); +void mqttReconnect() { + mqttDisconnect(); + mqttConnect(); } -void loop() { +void mqttLoop() { if (!isNetworkActive() || !mqtt.connected()) { return; } mqtt.loop(); } -void subscribe() { - SerialPrint("I","MQTT","subscribe"); +void mqttSubscribe() { + SerialPrint("I", "MQTT", "subscribe"); mqtt.subscribe(mqttPrefix.c_str()); mqtt.subscribe((mqttRootDevice + "/+/control").c_str()); mqtt.subscribe((mqttRootDevice + "/order").c_str()); @@ -83,59 +66,50 @@ void subscribe() { mqtt.subscribe((mqttRootDevice + "/devs").c_str()); } -boolean connect() { - SerialPrint("I","MQTT","connect"); - +boolean mqttConnect() { + SerialPrint("I", "MQTT", "start connection"); String addr = jsonReadStr(configSetupJson, "mqttServer"); if (!addr) { - SerialPrint("[E]","MQTT","no broker address"); + SerialPrint("E", "MQTT", "no broker address"); return false; } - int port = jsonReadInt(configSetupJson, "mqttPort"); String user = jsonReadStr(configSetupJson, "mqttUser"); String pass = jsonReadStr(configSetupJson, "mqttPass"); - - //Session params mqttPrefix = jsonReadStr(configSetupJson, "mqttPrefix"); mqttRootDevice = mqttPrefix + "/" + chipId; - - SerialPrint("I","MQTT","broker " + addr + ":" + String(port, DEC)); - SerialPrint("I","MQTT","topic " + mqttRootDevice); - + SerialPrint("I", "MQTT", "broker " + addr + ":" + String(port, DEC)); + SerialPrint("I", "MQTT", "topic " + mqttRootDevice); setLedStatus(LED_FAST); mqtt.setServer(addr.c_str(), port); bool res = false; if (!mqtt.connected()) { if (mqtt.connect(chipId.c_str(), user.c_str(), pass.c_str())) { - SerialPrint("I","MQTT","connected"); + SerialPrint("I", "MQTT", "connected"); setLedStatus(LED_OFF); - subscribe(); + mqttSubscribe(); res = true; } else { - SerialPrint("[E]","MQTT","could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s"); + SerialPrint("E", "MQTT", "could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s"); setLedStatus(LED_FAST); } } return res; } -void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) { +void mqttCallback(char* topic, uint8_t* payload, size_t length) { String topicStr = String(topic); - - SerialPrint("I","MQTT",topicStr); - + SerialPrint("I", "MQTT", topicStr); String payloadStr; - payloadStr.reserve(length + 1); for (size_t i = 0; i < length; i++) { payloadStr += (char)payload[i]; } - SerialPrint("I","MQTT",payloadStr); + SerialPrint("I", "MQTT", payloadStr); if (payloadStr.startsWith("HELLO")) { - SerialPrint("I","MQTT","Full update"); + SerialPrint("I", "MQTT", "Full update"); publishWidgets(); publishState(); #ifdef LOGGING_ENABLED @@ -143,7 +117,6 @@ void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) { #endif } else if (topicStr.indexOf("control")) { - //iotTeam/12882830-1458415/light 1 String key = selectFromMarkerToMarker(topicStr, "/", 3); @@ -184,7 +157,7 @@ boolean publish(const String& topic, const String& data) { boolean publishData(const String& topic, const String& data) { String path = mqttRootDevice + "/" + topic; if (!publish(path, data)) { - SerialPrint("[E]","MQTT","on publish data"); + SerialPrint("[E]", "MQTT", "on publish data"); return false; } return true; @@ -193,7 +166,7 @@ boolean publishData(const String& topic, const String& data) { boolean publishChart(const String& topic, const String& data) { String path = mqttRootDevice + "/" + topic + "/status"; if (!publish(path, data)) { - SerialPrint("[E]","MQTT","on publish chart"); + SerialPrint("[E]", "MQTT", "on publish chart"); return false; } return true; @@ -244,12 +217,12 @@ void publishWidgets() { void publishWidgets() { auto file = seekFile("layout.txt"); if (!file) { - SerialPrint("[E]","MQTT","no file layout.txt"); + SerialPrint("[E]", "MQTT", "no file layout.txt"); return; } while (file.available()) { String payload = file.readStringUntil('\n'); - SerialPrint("I","MQTT","widgets: " + payload); + SerialPrint("I", "MQTT", "widgets: " + payload); publishData("config", payload); } file.close(); @@ -319,5 +292,3 @@ const String getStateStr() { break; } } - -} // namespace MqttClient \ No newline at end of file diff --git a/src/Sensors.cpp b/src/Sensors.cpp index 1ba131ad..a4fe9bf1 100644 --- a/src/Sensors.cpp +++ b/src/Sensors.cpp @@ -48,7 +48,7 @@ // float value = 0; // static int counter; // if (dht.getStatus() != 0 && counter < 5) { -// //MqttClient::publishStatus(dhtT_value_name, String(dht.getStatusString())); +// // publishStatus(dhtT_value_name, String(dht.getStatusString())); // counter++; // } else { // counter = 0; @@ -56,7 +56,7 @@ // if (String(value) != "nan") { // //eventGen(dhtT_value_name, ""); // //jsonWriteStr(configLiveJson, dhtT_value_name, String(value)); -// //MqttClient::publishStatus(dhtT_value_name, String(value)); +// // publishStatus(dhtT_value_name, String(value)); // //Serial.println("I sensor '" + dhtT_value_name + "' data: " + String(value)); // } // } @@ -86,7 +86,7 @@ // float value = 0; // static int counter; // if (dht.getStatus() != 0 && counter < 5) { -// //MqttClient::publishStatus(dhtH_value_name, String(dht.getStatusString())); +// // publishStatus(dhtH_value_name, String(dht.getStatusString())); // counter++; // } else { // counter = 0; @@ -94,7 +94,7 @@ // if (String(value) != "nan") { // //eventGen(dhtH_value_name, ""); // //jsonWriteStr(configLiveJson, dhtH_value_name, String(value)); -// //MqttClient::publishStatus(dhtH_value_name, String(value)); +// // publishStatus(dhtH_value_name, String(value)); // //Serial.println("I sensor '" + dhtH_value_name + "' data: " + String(value)); // } // } @@ -112,13 +112,13 @@ //void dhtP_reading() { // byte value; // if (dht.getStatus() != 0) { -// MqttClient::publishStatus("dhtPerception", String(dht.getStatusString())); +// publishStatus("dhtPerception", String(dht.getStatusString())); // } else { // //value = dht.computePerception(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false); // String final_line = perceptionStr(value); // jsonWriteStr(configLiveJson, "dhtPerception", final_line); // eventGen("dhtPerception", ""); -// MqttClient::publishStatus("dhtPerception", final_line); +// publishStatus("dhtPerception", final_line); // if (mqtt.connected()) { // Serial.println("I sensor 'dhtPerception' data: " + final_line); // } @@ -137,13 +137,13 @@ //void dhtC_reading() { // ComfortState cf; // if (dht.getStatus() != 0) { -// MqttClient::publishStatus("dhtComfort", String(dht.getStatusString())); +// publishStatus("dhtComfort", String(dht.getStatusString())); // } else { // //dht.getComfortRatio(cf, jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false); // String final_line = comfortStr(cf); // jsonWriteStr(configLiveJson, "dhtComfort", final_line); // eventGen("dhtComfort", ""); -// MqttClient::publishStatus("dhtComfort", final_line); +// publishStatus("dhtComfort", final_line); // Serial.println("I sensor 'dhtComfort' send date " + final_line); // } //} @@ -230,12 +230,12 @@ //void dhtD_reading() { // float value; // if (dht.getStatus() != 0) { -// MqttClient::publishStatus("dhtDewpoint", String(dht.getStatusString())); +// publishStatus("dhtDewpoint", String(dht.getStatusString())); // } else { // //value = dht.computeDewPoint(jsonReadStr(configLiveJson, dhtT_value_name).toFloat(), jsonReadStr(configLiveJson, dhtH_value_name).toFloat(), false); // jsonWriteInt(configLiveJson, "dhtDewpoint", value); // eventGen("dhtDewpoint", ""); -// MqttClient::publishStatus("dhtDewpoint", String(value)); +// publishStatus("dhtDewpoint", String(value)); // Serial.println("I sensor 'dhtDewpoint' data: " + String(value)); // } //} @@ -271,7 +271,7 @@ // value = temp_event.temperature; // //jsonWriteStr(configLiveJson, bmp280T_value_name, String(value)); // //eventGen(bmp280T_value_name, ""); -// //MqttClient::publishStatus(bmp280T_value_name, String(value)); +// // publishStatus(bmp280T_value_name, String(value)); // //Serial.println("I sensor '" + bmp280T_value_name + "' data: " + String(value)); //} // @@ -303,7 +303,7 @@ // value = value / 1.333224; // //jsonWriteStr(configLiveJson, bmp280P_value_name, String(value)); // //eventGen(bmp280P_value_name, ""); -// //MqttClient::publishStatus(bmp280P_value_name, String(value)); +// // publishStatus(bmp280P_value_name, String(value)); // //Serial.println("I sensor '" + bmp280P_value_name + "' data: " + String(value)); //} // @@ -328,7 +328,7 @@ // value = bme.readTemperature(); // //jsonWriteStr(configLiveJson, bme280T_value_name, String(value)); // //eventGen(bme280T_value_name, ""); -// //MqttClient::publishStatus(bme280T_value_name, String(value)); +// // publishStatus(bme280T_value_name, String(value)); // //Serial.println("I sensor '" + bme280T_value_name + "' data: " + String(value)); //} // @@ -352,7 +352,7 @@ // value = value / 1.333224 / 100; // //jsonWriteStr(configLiveJson, bme280P_value_name, String(value)); // //eventGen(bme280P_value_name, ""); -// //MqttClient::publishStatus(bme280P_value_name, String(value)); +// // publishStatus(bme280P_value_name, String(value)); // //Serial.println("I sensor '" + bme280P_value_name + "' data: " + String(value)); //} // @@ -375,7 +375,7 @@ // value = bme.readHumidity(); // //jsonWriteStr(configLiveJson, bme280H_value_name, String(value)); // //eventGen(bme280H_value_name, ""); -// //MqttClient::publishStatus(bme280H_value_name, String(value)); +// // publishStatus(bme280H_value_name, String(value)); // //Serial.println("I sensor '" + bme280H_value_name + "' data: " + String(value)); //} // @@ -399,7 +399,7 @@ // // //eventGen(bme280A_value_name, ""); // -// //MqttClient::publishStatus(bme280A_value_name, String(value)); +// // publishStatus(bme280A_value_name, String(value)); // // //Serial.println("I sensor '" + bme280A_value_name + "' data: " + String(value)); //} diff --git a/src/Utils/WiFiUtils.cpp b/src/Utils/WiFiUtils.cpp index b8538172..f0c66eae 100644 --- a/src/Utils/WiFiUtils.cpp +++ b/src/Utils/WiFiUtils.cpp @@ -1,115 +1,106 @@ #include "Utils/WiFiUtils.h" - - -void startSTAMode() { +void routerConnect() { setLedStatus(LED_SLOW); - SerialPrint("I","WIFI","STA Mode"); - - String ssid = jsonReadStr(configSetupJson, "routerssid"); - String passwd = jsonReadStr(configSetupJson, "routerpass"); - WiFi.mode(WIFI_STA); - if (ssid == "" && passwd == "") { + byte tries = 20; + + String _ssid = jsonReadStr(configSetupJson, "routerssid"); + String _password = jsonReadStr(configSetupJson, "routerpass"); + //WiFi.persistent(false); + + if (_ssid == "" && _password == "") { WiFi.begin(); } else { - if (WiFi.begin(ssid.c_str(), passwd.c_str()) == WL_CONNECT_FAILED) { - SerialPrint("[E]","WIFI","failed on start"); - } + WiFi.begin(_ssid.c_str(), _password.c_str()); + SerialPrint("I", "WIFI", "ssid: " + _ssid); } - bool keepConnecting = true; - uint8_t tries = 20; - sint8_t connRes; - do { -#ifdef ESP8266 - connRes = WiFi.waitForConnectResult(1000); -#else - byte connRes = WiFi.waitForConnectResult(); -#endif - switch (connRes) { - case WL_NO_SSID_AVAIL: { - SerialPrint("[E]","WIFI","no network"); - keepConnecting = false; - } break; - case WL_CONNECTED: { - String hostIpStr = WiFi.localIP().toString(); - SerialPrint("I","WIFI","http://" + hostIpStr); - jsonWriteStr(configSetupJson, "ip", hostIpStr); - keepConnecting = false; - } break; - case WL_CONNECT_FAILED: { - SerialPrint("[E]","WIFI","check credentials"); - jsonWriteInt(configOptionJson, "pass_status", 1); - keepConnecting = false; - } break; - default: - break; + while (--tries && WiFi.status() != WL_CONNECTED) { + if (WiFi.status() == WL_CONNECT_FAILED) { + SerialPrint("E", "WIFI", "password is not correct"); + tries = 1; + jsonWriteInt(configOptionJson, "pass_status", 1); } - } while (keepConnecting && tries--); + Serial.print("."); + delay(1000); + } - if (isNetworkActive()) { - MqttClient::init(); - setLedStatus(LED_OFF); - } else { - SerialPrint("[E]","WIFI","failed: " + String(connRes, DEC)); + if (WiFi.status() != WL_CONNECTED) { + Serial.println(""); startAPMode(); - }; + } else { + Serial.println(""); + SerialPrint("I", "WIFI", "http://" + WiFi.localIP().toString()); + jsonWriteStr(configSetupJson, "ip", WiFi.localIP().toString()); + setLedStatus(LED_OFF); + mqttInit(); + } } bool startAPMode() { setLedStatus(LED_ON); - SerialPrint("I","WIFI","AP Mode"); - - String ssid = jsonReadStr(configSetupJson, "apssid"); - String passwd = jsonReadStr(configSetupJson, "appass"); + SerialPrint("I", "WIFI", "AP Mode"); + WiFi.disconnect(); WiFi.mode(WIFI_AP); - WiFi.softAP(ssid.c_str(), passwd.c_str()); - String hostIpStr = WiFi.softAPIP().toString(); - SerialPrint("I","WIFI","Host IP: " + hostIpStr); - jsonWriteStr(configSetupJson, "ip", hostIpStr); + String _ssidAP = jsonReadStr(configSetupJson, "apssid"); + String _passwordAP = jsonReadStr(configSetupJson, "appass"); + WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str()); + IPAddress myIP = WiFi.softAPIP(); + + SerialPrint("I", "WIFI", "AP IP: " + myIP.toString()); + jsonWriteStr(configSetupJson, "ip", myIP.toString()); + + //if (jsonReadInt(configOptionJson, "pass_status") != 1) { ts.add( - WIFI_SCAN, 10 * 1000, - [&](void*) { + WIFI_SCAN, 10 * 1000, [&](void*) { String sta_ssid = jsonReadStr(configSetupJson, "routerssid"); - SerialPrint("I","WIFI","scanning for " + sta_ssid); - if (scanWiFi(sta_ssid)) { + + SerialPrint("I", "WIFI", "scanning for " + sta_ssid); + + if (RouterFind(sta_ssid)) { ts.remove(WIFI_SCAN); - startSTAMode(); + WiFi.scanDelete(); + routerConnect(); } }, nullptr, true); - + //} return true; } -boolean scanWiFi(String ssid) { + +boolean RouterFind(String ssid) { bool res = false; - int8_t n = WiFi.scanComplete(); - SerialPrint("I","WIFI","scan result: " + String(n, DEC)); - if (n == -2) { - // не было запущено, запускаем - SerialPrint("I","WIFI","start scanning"); - // async, show_hidden + int n = WiFi.scanComplete(); + SerialPrint("I", "WIFI", "scan result: " + String(n, DEC)); + + if (n == -2) { //Сканирование не было запущено, запускаем + SerialPrint("I", "WIFI", "start scanning"); + WiFi.scanNetworks(true, false); //async, show_hidden + } + + else if (n == -1) { //Сканирование все еще выполняется + SerialPrint("I", "WIFI", "scanning in progress"); + } + + else if (n == 0) { //ни одна сеть не найдена + SerialPrint("I", "WIFI", "no networks found"); WiFi.scanNetworks(true, false); - } else if (n == -1) { - // все еще выполняется - SerialPrint("I","WIFI","scanning in progress"); - } else if (n == 0) { - // не найдена ни одна сеть - SerialPrint("I","WIFI","no networks found"); - WiFi.scanNetworks(true, false); - } else if (n > 0) { + } + + else if (n > 0) { for (int8_t i = 0; i < n; i++) { if (WiFi.SSID(i) == ssid) { res = true; } - SerialPrint("I","WIFI",(res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i)); + SerialPrint("I", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i)); } } + WiFi.scanDelete(); return res; } diff --git a/src/Web.cpp b/src/Web.cpp index 20d13cd9..a584e1f6 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -209,7 +209,7 @@ void web_init() { } if (request->hasArg("mqttcheck")) { - String buf = "" + MqttClient::getStateStr(); + String buf = "" + getStateStr(); String payload = "{}"; jsonWriteStr(payload, "title", buf); diff --git a/src/main.cpp b/src/main.cpp index 6cee0056..6c761f93 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,7 +55,7 @@ void setup() { all_init(); SerialPrint("I","WIFI","Network Init"); - startSTAMode(); + routerConnect(); SerialPrint("I","Uptime","Uptime Init"); uptime_init(); @@ -105,7 +105,7 @@ void loop() { ws.cleanupClients(); #endif timeNow->loop(); - MqttClient::loop(); + mqttLoop(); myButtonIn.loop(); myScenario->loop(); loopCmdExecute();