From f1111e528a6884e6c175d8bd94db75921e93035c Mon Sep 17 00:00:00 2001 From: Jan ten Hove Date: Mon, 19 Jun 2017 22:40:06 +0200 Subject: [PATCH] MQTT test if sending succeeded to avoid congestion --- GoodWeLogger.ino | 3 ++- MQTTPublisher.cpp | 48 +++++++++++++++++++++++++++-------------------- MQTTPublisher.h | 2 ++ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/GoodWeLogger.ino b/GoodWeLogger.ino index 9c48104..926fca2 100644 --- a/GoodWeLogger.ino +++ b/GoodWeLogger.ino @@ -1,6 +1,7 @@ + + #include #include -#include #include #include #include diff --git a/MQTTPublisher.cpp b/MQTTPublisher.cpp index 04be4e0..c9e2c52 100644 --- a/MQTTPublisher.cpp +++ b/MQTTPublisher.cpp @@ -100,6 +100,7 @@ void MQTTPublisher::handle() if (sendRegular || sendQuick) { + bool sendOk = true; //if a mqtt message fails, wait for retransmit at a later time auto inverters = goodweCommunicator->getInvertersInfo(); for (char cnt = 0; cnt < inverters.size(); cnt++) { @@ -111,43 +112,44 @@ void MQTTPublisher::handle() Serial.print("Publishing prepend topic for this inverter is: "); Serial.println(prependTopic); } - + if (inverters[cnt].isOnline) { if (sendQuick) { //send out fast changing values - client.publish((prependTopic.c_str() + String("/online")).c_str(), String(1).c_str()); - client.publish((prependTopic.c_str() + String("/vpv1")).c_str(), String(inverters[cnt].vpv1, 1).c_str()); - client.publish((prependTopic.c_str() + String("/vpv2")).c_str(), String(inverters[cnt].vpv2, 1).c_str()); - client.publish((prependTopic.c_str() + String("/ipv1")).c_str(), String(inverters[cnt].ipv1, 1).c_str()); - client.publish((prependTopic.c_str() + String("/ipv2")).c_str(), String(inverters[cnt].ipv2, 1).c_str()); - client.publish((prependTopic.c_str() + String("/vac1")).c_str(), String(inverters[cnt].vac1, 1).c_str()); - client.publish((prependTopic.c_str() + String("/iac1")).c_str(), String(inverters[cnt].iac1, 1).c_str()); - client.publish((prependTopic.c_str() + String("/fac1")).c_str(), String(inverters[cnt].fac1, 2).c_str()); - client.publish((prependTopic.c_str() + String("/pac")).c_str(), String(inverters[cnt].pac).c_str()); - client.publish((prependTopic.c_str() + String("/temp")).c_str(), String(inverters[cnt].temp, 1).c_str()); - client.publish((prependTopic.c_str() + String("/eday")).c_str(), String(inverters[cnt].eDay).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/online")).c_str(), String(1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/vpv1")).c_str(), String(inverters[cnt].vpv1, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/vpv2")).c_str(), String(inverters[cnt].vpv2, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/ipv1")).c_str(), String(inverters[cnt].ipv1, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/ipv2")).c_str(), String(inverters[cnt].ipv2, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/vac1")).c_str(), String(inverters[cnt].vac1, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/iac1")).c_str(), String(inverters[cnt].iac1, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/fac1")).c_str(), String(inverters[cnt].fac1, 2).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/pac")).c_str(), String(inverters[cnt].pac).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/temp")).c_str(), String(inverters[cnt].temp, 1).c_str()); + if (inverters[cnt].isDTSeries) { //also send tri fase info - client.publish((prependTopic.c_str() + String("/vac2")).c_str(), String(inverters[cnt].vac2, 1).c_str()); - client.publish((prependTopic.c_str() + String("/iac2")).c_str(), String(inverters[cnt].iac2, 1).c_str()); - client.publish((prependTopic.c_str() + String("/fac2")).c_str(), String(inverters[cnt].iac2, 2).c_str()); - client.publish((prependTopic.c_str() + String("/vac3")).c_str(), String(inverters[cnt].vac3, 1).c_str()); - client.publish((prependTopic.c_str() + String("/iac3")).c_str(), String(inverters[cnt].iac3, 1).c_str()); - client.publish((prependTopic.c_str() + String("/fac3")).c_str(), String(inverters[cnt].iac3, 2).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/vac2")).c_str(), String(inverters[cnt].vac2, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/iac2")).c_str(), String(inverters[cnt].iac2, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/fac2")).c_str(), String(inverters[cnt].iac2, 2).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/vac3")).c_str(), String(inverters[cnt].vac3, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/iac3")).c_str(), String(inverters[cnt].iac3, 1).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/fac3")).c_str(), String(inverters[cnt].iac3, 2).c_str()); } } else { //regular - client.publish((prependTopic.c_str() + String("/workmode")).c_str(), String(inverters[cnt].workMode).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/workmode")).c_str(), String(inverters[cnt].workMode).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/eday")).c_str(), String(inverters[cnt].eDay).c_str()); //TODO: Rest of data } } else if(sendRegular) //only send offline info on regular basis - client.publish((prependTopic.c_str() + String("/online")).c_str(), String(0).c_str()); + if (sendOk) sendOk = client.publish((prependTopic.c_str() + String("/online")).c_str(), String(0).c_str()); } } @@ -156,6 +158,12 @@ void MQTTPublisher::handle() lastSentQuickUpdate = millis(); if (sendRegular) lastSentRegularUpdate = millis(); + + if (debugMode) + { + Serial.print("MQTT send status: "); + Serial.println(sendOk); + } } diff --git a/MQTTPublisher.h b/MQTTPublisher.h index c6758b6..794d3c0 100644 --- a/MQTTPublisher.h +++ b/MQTTPublisher.h @@ -1,4 +1,5 @@ #pragma once +#define MQTT_SOCKET_TIMEOUT 5 #include #include #include "SettingsManager.h" @@ -9,6 +10,7 @@ #define RECONNECT_TIMEOUT 5000 + class MQTTPublisher { private: