mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-25 23:06:11 +02:00
0.8.118
* possible fix reset max values #1609 * slightly improved WiFi reconnect
This commit is contained in:
parent
bf78c6ab0d
commit
d43ebc6c5a
7 changed files with 36 additions and 40 deletions
|
@ -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
|
||||
|
|
22
src/app.cpp
22
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);
|
||||
}
|
||||
pos = iv->getPosByChFld(ch, FLD_MT, rec);
|
||||
iv->setValue(pos, rec, 0.0f);
|
||||
iv->resetAlarms(true);
|
||||
} else
|
||||
iv->resetAlarms();
|
||||
iv->doCalculations();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<uint16_t>(obj, F("intvl"), &mCfg.inst.sendInterval);
|
||||
// getVal<bool>(obj, F("en"), &mCfg.inst.enabled);
|
||||
getVal<bool>(obj, F("rstMidNight"), &mCfg.inst.rstYieldMidNight);
|
||||
getVal<bool>(obj, F("rstMidNight"), &mCfg.inst.rstValsAtMidNight);
|
||||
getVal<bool>(obj, F("rstNotAvail"), &mCfg.inst.rstValsNotAvail);
|
||||
getVal<bool>(obj, F("rstComStop"), &mCfg.inst.rstValsCommStop);
|
||||
getVal<bool>(obj, F("rstComStart"), &mCfg.inst.rstValsCommStart);
|
||||
getVal<bool>(obj, F("strtWthtTime"), &mCfg.inst.startWithoutTime);
|
||||
getVal<bool>(obj, F("rstMaxMidNight"), &mCfg.inst.rstMaxValsMidNight);
|
||||
getVal<bool>(obj, F("rstMaxMidNight"), &mCfg.inst.rstIncludeMaxVals);
|
||||
getVal<bool>(obj, F("rdGrid"), &mCfg.inst.readGrid);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
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;
|
||||
} else
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@
|
|||
<div class="col-4"><input type="checkbox" name="invRstNotAvail"/></div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-8">{#INV_RESET_MAX_MIDNIGHT}</div>
|
||||
<div class="col-8">{#INV_RESET_MAX_VALUES}</div>
|
||||
<div class="col-4"><input type="checkbox" name="invRstMaxMid"/></div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue