diff --git a/src/CHANGES.md b/src/CHANGES.md index f248814e..8fb3e579 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,5 +1,9 @@ # Development Changes +## 0.8.118 - 2024-05-10 +* possible fix reset max values #1609 +* slightly improved WiFi reconnect + ## 0.8.117 - 2024-05-09 * fix reboot issue #1607 #1606 * fix max temperature tooltip if only one inverter is configured #1605 diff --git a/src/app.cpp b/src/app.cpp index a92a5f3c..b2f3c615 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -353,20 +353,9 @@ void app::tickMidnight(void) { // reset alarms if(InverterStatus::OFF == iv->getStatus()) iv->resetAlarms(); - - // clear max values - if(mConfig->inst.rstMaxValsMidNight) { - record_t<> *rec = iv->getRecordStruct(RealTimeRunData_Debug); - for(uint8_t i = 0; i <= iv->channels; i++) { - uint8_t pos = iv->getPosByChFld(i, FLD_MP, rec); - iv->setValue(pos, rec, 0.0f); - } - if(InverterStatus::OFF == iv->getStatus()) - iv->resetAlarms(true); - } } - if (mConfig->inst.rstYieldMidNight) { + if (mConfig->inst.rstValsAtMidNight) { zeroIvValues(!CHECK_AVAIL, !SKIP_YIELD_DAY); #if defined(ENABLE_MQTT) @@ -470,12 +459,15 @@ void app:: zeroIvValues(bool checkAvail, bool skipYieldDay) { pos = iv->getPosByChFld(ch, fld, rec); iv->setValue(pos, rec, 0.0f); } - // zero max power - if(!skipYieldDay) { + // zero max power and max temperature + if(mConfig->inst.rstIncludeMaxVals) { pos = iv->getPosByChFld(ch, FLD_MP, rec); iv->setValue(pos, rec, 0.0f); - } - iv->resetAlarms(true); + pos = iv->getPosByChFld(ch, FLD_MT, rec); + iv->setValue(pos, rec, 0.0f); + iv->resetAlarms(true); + } else + iv->resetAlarms(); iv->doCalculations(); } } diff --git a/src/config/settings.h b/src/config/settings.h index 9459b80b..25243fe7 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -185,11 +185,11 @@ typedef struct { cfgIv_t iv[MAX_NUM_INVERTERS]; uint16_t sendInterval; - bool rstYieldMidNight; + bool rstValsAtMidNight; bool rstValsNotAvail; bool rstValsCommStop; bool rstValsCommStart; - bool rstMaxValsMidNight; + bool rstIncludeMaxVals; bool startWithoutTime; bool readGrid; } cfgInst_t; @@ -488,12 +488,12 @@ class settings { mCfg.mqtt.enableRetain = true; mCfg.inst.sendInterval = SEND_INTERVAL; - mCfg.inst.rstYieldMidNight = false; + mCfg.inst.rstValsAtMidNight = false; mCfg.inst.rstValsNotAvail = false; mCfg.inst.rstValsCommStop = false; mCfg.inst.rstValsCommStart = false; mCfg.inst.startWithoutTime = false; - mCfg.inst.rstMaxValsMidNight = false; + mCfg.inst.rstIncludeMaxVals = false; mCfg.inst.readGrid = true; for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) { @@ -821,23 +821,23 @@ class settings { if(set) { obj[F("intvl")] = mCfg.inst.sendInterval; // obj[F("en")] = (bool)mCfg.inst.enabled; - obj[F("rstMidNight")] = (bool)mCfg.inst.rstYieldMidNight; + obj[F("rstMidNight")] = (bool)mCfg.inst.rstValsAtMidNight; obj[F("rstNotAvail")] = (bool)mCfg.inst.rstValsNotAvail; obj[F("rstComStop")] = (bool)mCfg.inst.rstValsCommStop; obj[F("rstComStart")] = (bool)mCfg.inst.rstValsCommStart; obj[F("strtWthtTime")] = (bool)mCfg.inst.startWithoutTime; - obj[F("rstMaxMidNight")] = (bool)mCfg.inst.rstMaxValsMidNight; + obj[F("rstMaxMidNight")] = (bool)mCfg.inst.rstIncludeMaxVals; obj[F("rdGrid")] = (bool)mCfg.inst.readGrid; } else { getVal(obj, F("intvl"), &mCfg.inst.sendInterval); // getVal(obj, F("en"), &mCfg.inst.enabled); - getVal(obj, F("rstMidNight"), &mCfg.inst.rstYieldMidNight); + getVal(obj, F("rstMidNight"), &mCfg.inst.rstValsAtMidNight); getVal(obj, F("rstNotAvail"), &mCfg.inst.rstValsNotAvail); getVal(obj, F("rstComStop"), &mCfg.inst.rstValsCommStop); getVal(obj, F("rstComStart"), &mCfg.inst.rstValsCommStart); getVal(obj, F("strtWthtTime"), &mCfg.inst.startWithoutTime); - getVal(obj, F("rstMaxMidNight"), &mCfg.inst.rstMaxValsMidNight); + getVal(obj, F("rstMaxMidNight"), &mCfg.inst.rstIncludeMaxVals); getVal(obj, F("rdGrid"), &mCfg.inst.readGrid); } diff --git a/src/defines.h b/src/defines.h index 2d3a5ad4..b68eabfd 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 117 +#define VERSION_PATCH 118 //------------------------------------- typedef struct { uint8_t ch; diff --git a/src/hm/hmInverter.h b/src/hm/hmInverter.h index 445a7bab..5a9f2130 100644 --- a/src/hm/hmInverter.h +++ b/src/hm/hmInverter.h @@ -239,15 +239,15 @@ class Inverter { uint8_t getPosByChFld(uint8_t channel, uint8_t fieldId, record_t<> *rec) { DPRINTLN(DBG_VERBOSE, F("hmInverter.h:getPosByChFld")); - if(NULL != rec) { - uint8_t pos = 0; - for(; pos < rec->length; pos++) { - if((rec->assign[pos].ch == channel) && (rec->assign[pos].fieldId == fieldId)) - break; - } - return (pos >= rec->length) ? 0xff : pos; - } else + if(nullptr == rec) return 0xff; + + uint8_t pos = 0; + for(; pos < rec->length; pos++) { + if((rec->assign[pos].ch == channel) && (rec->assign[pos].fieldId == fieldId)) + break; + } + return (pos >= rec->length) ? 0xff : pos; } byteAssign_t *getByteAssign(uint8_t pos, record_t<> *rec) { @@ -363,7 +363,7 @@ class Inverter { bool setValue(uint8_t pos, record_t<> *rec, REC_TYP val) { DPRINTLN(DBG_VERBOSE, F("hmInverter.h:setValue")); - if(NULL == rec) + if(nullptr == rec) return false; if(pos > rec->length) return false; @@ -585,7 +585,7 @@ class Inverter { } } - void resetAlarms(bool clear = false) { + void resetAlarms(bool clearTs = false) { lastAlarm.fill({0, 0, 0}); mAlarmNxtWrPos = 0; alarmCnt = 0; @@ -594,7 +594,7 @@ class Inverter { memset(mOffYD, 0, sizeof(float) * 6); memset(mLastYD, 0, sizeof(float) * 6); - if(clear) { + if(clearTs) { tsMaxAcPower = *Timestamp; tsMaxTemperature = *Timestamp; } diff --git a/src/web/html/setup.html b/src/web/html/setup.html index dbe88663..37193be1 100644 --- a/src/web/html/setup.html +++ b/src/web/html/setup.html @@ -142,7 +142,7 @@
-
{#INV_RESET_MAX_MIDNIGHT}
+
{#INV_RESET_MAX_VALUES}
diff --git a/src/web/lang.json b/src/web/lang.json index 0093cea9..535dfba1 100644 --- a/src/web/lang.json +++ b/src/web/lang.json @@ -339,9 +339,9 @@ "de": "Werte zurücksetzen, sobald der Wechselrichter nicht erreichbar ist" }, { - "token": "INV_RESET_MAX_MIDNIGHT", - "en": "Reset 'max' values at midnight", - "de": "Maximalwerte mitternachts zurücksetzen" + "token": "INV_RESET_MAX_VALUES", + "en": "Inlude reset 'max' values", + "de": "Maximalwerte auch zurücksetzen" }, { "token": "INV_START_WITHOUT_TIME",