From 82ed21ae90f82e4e3acf5bc306d371a459d879ca Mon Sep 17 00:00:00 2001 From: Mariusz Wasiluk Date: Thu, 1 Jan 2026 22:28:02 +0100 Subject: [PATCH 1/3] Send total when reset at midnight --- src/publisher/pubMqttIvData.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/publisher/pubMqttIvData.h b/src/publisher/pubMqttIvData.h index 5ba21f6d..6b91f444 100644 --- a/src/publisher/pubMqttIvData.h +++ b/src/publisher/pubMqttIvData.h @@ -171,8 +171,26 @@ class PubMqttIvData { mTotal[3] += mIv->getValue(mPos, rec); break; } - } else + } else if (mIv->GeneralConfig->rstValsAtMidNight) { + switch (rec->assign[mPos].fieldId) { + case FLD_YT: + DPRINT_IVID(DBG_INFO, mPos); + DBGPRINT(F("Inverter OFF - YT: ")); + DBGPRINTLN(String(mIv->getValue(mPos, rec))); + mTotal[1] += mIv->getValue(mPos, rec); + break; + case FLD_YD: { + DPRINT_IVID(DBG_INFO, mPos); + DBGPRINT(F("Inverter OFF - YD: ")); + DBGPRINTLN(String(mIv->getValue(mPos, rec))); + mTotal[2] += mIv->getValue(mPos, rec); + break; + } + } + } + else { mAllTotalFound = false; + } } } From 3e2951b5f9936857fdc97443cf5dcd95567a2c3b Mon Sep 17 00:00:00 2001 From: Mariusz Wasiluk Date: Fri, 2 Jan 2026 12:08:12 +0100 Subject: [PATCH 2/3] Add comments, rework dbg prints --- src/publisher/pubMqttIvData.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/publisher/pubMqttIvData.h b/src/publisher/pubMqttIvData.h index 6b91f444..d6a1c0e0 100644 --- a/src/publisher/pubMqttIvData.h +++ b/src/publisher/pubMqttIvData.h @@ -172,16 +172,19 @@ class PubMqttIvData { break; } } else if (mIv->GeneralConfig->rstValsAtMidNight) { + // Inverter is OFF - use last stored YT/YD values for total calculation. + // It is safe to use them when values are reset at midnight. + // This helps in having correct total values during daytime even when some inverters are OFF switch (rec->assign[mPos].fieldId) { case FLD_YT: - DPRINT_IVID(DBG_INFO, mPos); - DBGPRINT(F("Inverter OFF - YT: ")); + DPRINT_IVID(DBG_DEBUG, mPos); + DBGPRINT(F("Inverter is OFF - Using last YT: ")); DBGPRINTLN(String(mIv->getValue(mPos, rec))); mTotal[1] += mIv->getValue(mPos, rec); break; case FLD_YD: { - DPRINT_IVID(DBG_INFO, mPos); - DBGPRINT(F("Inverter OFF - YD: ")); + DPRINT_IVID(DBG_DEBUG, mPos); + DBGPRINT(F("Inverter is OFF - Using last YD: ")); DBGPRINTLN(String(mIv->getValue(mPos, rec))); mTotal[2] += mIv->getValue(mPos, rec); break; From df3504a2f85b9f3ebc49b1db48d2961634c72cd8 Mon Sep 17 00:00:00 2001 From: Mariusz Wasiluk Date: Sat, 3 Jan 2026 22:12:57 +0100 Subject: [PATCH 3/3] Use histrical total values only when an iverter was seen at least once seen power up --- src/publisher/pubMqttIvData.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/publisher/pubMqttIvData.h b/src/publisher/pubMqttIvData.h index d6a1c0e0..aafcf779 100644 --- a/src/publisher/pubMqttIvData.h +++ b/src/publisher/pubMqttIvData.h @@ -171,19 +171,20 @@ class PubMqttIvData { mTotal[3] += mIv->getValue(mPos, rec); break; } - } else if (mIv->GeneralConfig->rstValsAtMidNight) { + } else if (mIv->GeneralConfig->rstValsAtMidNight && rec->ts > 0) { // Inverter is OFF - use last stored YT/YD values for total calculation. // It is safe to use them when values are reset at midnight. + // Timestap check is to avoid wrong totals after restart (lower than before restart). // This helps in having correct total values during daytime even when some inverters are OFF switch (rec->assign[mPos].fieldId) { case FLD_YT: - DPRINT_IVID(DBG_DEBUG, mPos); + DPRINT_IVID(DBG_DEBUG, mIv->id); DBGPRINT(F("Inverter is OFF - Using last YT: ")); DBGPRINTLN(String(mIv->getValue(mPos, rec))); mTotal[1] += mIv->getValue(mPos, rec); break; case FLD_YD: { - DPRINT_IVID(DBG_DEBUG, mPos); + DPRINT_IVID(DBG_DEBUG, mIv->id); DBGPRINT(F("Inverter is OFF - Using last YD: ")); DBGPRINTLN(String(mIv->getValue(mPos, rec))); mTotal[2] += mIv->getValue(mPos, rec);