From df3504a2f85b9f3ebc49b1db48d2961634c72cd8 Mon Sep 17 00:00:00 2001 From: Mariusz Wasiluk Date: Sat, 3 Jan 2026 22:12:57 +0100 Subject: [PATCH] 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);