diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index c72983e4..62636ff0 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -390,7 +390,7 @@ void app::processPayload(bool retransmit) { // MQTT send out if(mMqttActive) { record_t<> *recRealtime = iv->getRecordStruct(RealTimeRunData_Debug); - char topic[30], val[10]; + char topic[32 + MAX_NAME_LENGTH], val[32]; float total[4]; memset(total, 0, sizeof(float) * 4); for (uint8_t id = 0; id < mSys->getNumInverters(); id++) { @@ -398,7 +398,7 @@ void app::processPayload(bool retransmit) { if (NULL != iv) { if (iv->isAvailable(mTimestamp, rec)) { for (uint8_t i = 0; i < rec->length; i++) { - snprintf(topic, 30, "%s/ch%d/%s", iv->name, rec->assign[i].ch, fields[rec->assign[i].fieldId]); + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/ch%d/%s", iv->name, rec->assign[i].ch, fields[rec->assign[i].fieldId]); snprintf(val, 10, "%.3f", iv->getValue(i, rec)); mMqtt.sendMsg(topic, val); if(recRealtime == rec) { @@ -411,10 +411,31 @@ void app::processPayload(bool retransmit) { } } } + + if(iv->isProducing(mTimestamp, rec)){ + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available_text", iv->name); + snprintf(val, 32, DEF_MQTT_IV_MESSAGE_INVERTER_AVAIL_AND_PRODUCED); + mMqtt.sendMsg(topic, val); + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available", iv->name); + snprintf(val, 32, "2"); + mMqtt.sendMsg(topic, val); + } else { + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available_text", iv->name); + snprintf(val, 32, DEF_MQTT_IV_MESSAGE_INVERTER_AVAIL_AND_NOT_PRODUCED); + mMqtt.sendMsg(topic, val); + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available", iv->name); + snprintf(val, 32, "1"); + mMqtt.sendMsg(topic, val); + } + + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/last_success", iv->name); + snprintf(val, 48, "%i", iv->getLastTs(rec) * 1000); + mMqtt.sendMsg(topic, val); + yield(); } - } - } + } + } } // total values (sum of all inverters) @@ -428,7 +449,7 @@ void app::processPayload(bool retransmit) { case 2: fieldId = FLD_YD; break; case 3: fieldId = FLD_PDC; break; } - snprintf(topic, 30, "total/%s", fields[fieldId]); + snprintf(topic, 32 + MAX_NAME_LENGTH, "total/%s", fields[fieldId]); snprintf(val, 10, "%.3f", total[i]); mMqtt.sendMsg(topic, val); } @@ -446,6 +467,20 @@ void app::processPayload(bool retransmit) { #endif } } + + if(mMqttActive) { + record_t<> *rec = iv->getRecordStruct(RealTimeRunData_Debug); + char topic[32 + MAX_NAME_LENGTH], val[32]; + if (!iv->isAvailable(mTimestamp, rec) && !iv->isProducing(mTimestamp, rec)){ + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available_text", iv->name); + snprintf(val, 32, DEF_MQTT_IV_MESSAGE_NOT_AVAIL_AND_NOT_PRODUCED); + mMqtt.sendMsg(topic, val); + snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available", iv->name); + snprintf(val, 32, "0"); + mMqtt.sendMsg(topic, val); + } + } + yield(); } } diff --git a/tools/esp8266/config.h b/tools/esp8266/config.h index 26ff32c5..99e0e16e 100644 --- a/tools/esp8266/config.h +++ b/tools/esp8266/config.h @@ -108,6 +108,11 @@ // default MQTT topic #define DEF_MQTT_TOPIC "inverter" +//default MQTT Message Inverter Status +#define DEF_MQTT_IV_MESSAGE_NOT_AVAIL_AND_NOT_PRODUCED "not available and not producing" // STATUS 0 +#define DEF_MQTT_IV_MESSAGE_INVERTER_AVAIL_AND_NOT_PRODUCED "available and not producing" // STATUS 1 +#define DEF_MQTT_IV_MESSAGE_INVERTER_AVAIL_AND_PRODUCED "available and producing" // STATUS 2 + #if __has_include("config_override.h") #include "config_override.h" #endif