diff --git a/GoodWeCommunicator.cpp b/GoodWeCommunicator.cpp index 69fe0d8..ddb17d3 100644 --- a/GoodWeCommunicator.cpp +++ b/GoodWeCommunicator.cpp @@ -138,6 +138,7 @@ void GoodWeCommunicator::checkIncomingData() { //packet start received startPacketReceived = true; + lastReceived = millis(); curReceivePtr = 0; numToRead = 0; lastReceivedByte = 0x00; //reset last received for next packet @@ -172,9 +173,9 @@ void GoodWeCommunicator::checkIncomingData() lastReceivedByte = incomingData; //keep track of the last incoming byte so we detect the packet start } - lastReceived = millis(); + } - else if (startPacketReceived && millis() - lastReceived > PACKET_TIMEOUT) // 0.5 sec timoeut + if (startPacketReceived && millis() - lastReceived > PACKET_TIMEOUT) // 0.5 sec timoeut { //there is an open packet timeout. startPacketReceived = false; //wait for start packet again diff --git a/GoodWeCommunicator.h b/GoodWeCommunicator.h index 91c2615..871844e 100644 --- a/GoodWeCommunicator.h +++ b/GoodWeCommunicator.h @@ -5,7 +5,7 @@ #include "SettingsManager.h" #define GOODWE_COMMS_ADDRES 0xAB -#define PACKET_TIMEOUT 500 //0.5 sec packet timeout +#define PACKET_TIMEOUT 5000 //5 sec packet timeout #define OFFLINE_TIMEOUT 30000 //30 seconds no data -> inverter offline #define DISCOVERY_INTERVAL 10000 //10 secs between discovery #define INFO_INTERVAL 1000 //get inverter info every second diff --git a/GoodWeLogger.ino b/GoodWeLogger.ino index 05979fc..84cb80c 100644 --- a/GoodWeLogger.ino +++ b/GoodWeLogger.ino @@ -1,5 +1,3 @@ - - #include #include #include @@ -11,18 +9,17 @@ #include "SettingsManager.h" #include "MQTTPublisher.h" #include "PVOutputPublisher.h" -#include "ESP8266mDNS.h" #include "Settings.h" //change and then rename Settings.example.h to Settings.h to compile SettingsManager settingsManager; -GoodWeCommunicator goodweComms(&settingsManager, true); -MQTTPublisher mqqtPublisher(&settingsManager, &goodweComms, true); -PVOutputPublisher pvoutputPublisher(&settingsManager, &goodweComms, true); +GoodWeCommunicator goodweComms(&settingsManager, false); +MQTTPublisher mqqtPublisher(&settingsManager, &goodweComms, false); +PVOutputPublisher pvoutputPublisher(&settingsManager, &goodweComms, false); WiFiUDP ntpUDP; - NTPClient timeClient(ntpUDP, "pool.ntp.org"); bool validTimeSet =false; +int reconnectCounter = 0; void setup() { @@ -62,7 +59,7 @@ void setup() Serial.println("Connected!"); timeClient.begin(); - + ArduinoOTA.setHostname("GoodWeLogger"); ArduinoOTA.onStart([]() { @@ -94,6 +91,30 @@ void setup() timeClient.setTimeOffset(settings->timezone * 60 * 60); } +bool checkConnectToWifi() +{ + //check for wifi connection + while (WiFi.status() != WL_CONNECTED || WiFi.localIP() == IPAddress(0, 0, 0, 0)) + { + Serial.println("Connecting to WIFI..."); + reconnectCounter++; + if (reconnectCounter > 60) + return false; + auto settings = settingsManager.GetSettings(); + WiFi.disconnect(); + WiFi.begin(settings->wifiSSID.c_str(), settings->wifiPassword.c_str()); + delay(2000); + + if (WiFi.status() == WL_CONNECTED) + { + Serial.println("Connected to the WiFi network"); + reconnectCounter = 0; + } + else + delay(5000);//further delay + } + return true; +} void loop() { @@ -110,6 +131,10 @@ void loop() setTime(timeClient.getEpochTime()); } + //check wifi connection + if (!checkConnectToWifi()) + ESP.restart(); + ArduinoOTA.handle(); yield(); goodweComms.handle(); diff --git a/GoodWeLogger.vcxproj.user b/GoodWeLogger.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/GoodWeLogger.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MQTTPublisher.cpp b/MQTTPublisher.cpp index 7c54d7e..dbc98aa 100644 --- a/MQTTPublisher.cpp +++ b/MQTTPublisher.cpp @@ -93,6 +93,7 @@ void MQTTPublisher::handle() if (!client.connected() && millis() - lastConnectionAttempt > RECONNECT_TIMEOUT) { if (!reconnect()) return; } + //got a valid mqtt connection. Loop through the inverts and send out the data if needed client.loop();