Storing actual runtimes to NV store at heater off, resetting intermediates at same time.
Improved restart behaviour of persistent variable handling
This commit is contained in:
parent
2084c7d60c
commit
1dbfa67163
|
@ -458,11 +458,9 @@ void setup() {
|
|||
// bCyclicEngaged = RTC_Store.getCyclicEngaged();
|
||||
DebugPort.printf("Previous cyclic active = %d\r\n", RTC_Store.getCyclicEngaged()); // state flag required for cyclic mode to persist properly after a WD reboot :-)
|
||||
|
||||
pHourMeter = new CHourMeter(persistentRunTime, persistentGlowTime);
|
||||
if(bESP32PowerUpInit || RTC_Store.getBootInit()) { // ensure we reset out persistent vars on power up, or OTA update
|
||||
pHourMeter = new CHourMeter(persistentRunTime, persistentGlowTime); // persistent vars are only trustworthy with SW reboots
|
||||
pHourMeter->init(bESP32PowerUpInit || RTC_Store.getBootInit()); // ensure persistent memory variable are reset after powerup, or OTA update
|
||||
RTC_Store.setBootInit(false);
|
||||
pHourMeter->powerOnInit(); // ensure persistent memory variable are reset after powerup
|
||||
}
|
||||
|
||||
delay(1000); // just to hold the splash screeen for while
|
||||
}
|
||||
|
@ -1250,6 +1248,16 @@ void checkDebugCommands()
|
|||
else if(rxVal == 'r') {
|
||||
ESP.restart(); // reset the esp
|
||||
}
|
||||
else if(rxVal == ('h' & 0x1f)) { // CTRL-H hourmeter reset
|
||||
sHourMeter FLASHmem = NVstore.getHourMeter();
|
||||
FLASHmem.RunTime = 0;
|
||||
FLASHmem.GlowTime = 0;
|
||||
NVstore.setHourMeter(FLASHmem);
|
||||
RTC_Store.resetRunTime();
|
||||
RTC_Store.resetGlowTime();
|
||||
persistentRunTime = 0;
|
||||
persistentGlowTime = 0;
|
||||
}
|
||||
}
|
||||
#ifdef PROTOCOL_INVESTIGATION
|
||||
if(bSendVal) {
|
||||
|
|
|
@ -154,6 +154,19 @@ CRTC_Store::getDesiredPump()
|
|||
return _demandPump;
|
||||
}
|
||||
|
||||
void
|
||||
CRTC_Store::resetRunTime()
|
||||
{
|
||||
_RunTime = 0;
|
||||
_PackAndSaveByte6();
|
||||
}
|
||||
|
||||
void
|
||||
CRTC_Store::resetGlowTime()
|
||||
{
|
||||
_GlowTime = 0;
|
||||
_PackAndSaveByte6();
|
||||
}
|
||||
|
||||
bool
|
||||
CRTC_Store::incRunTime()
|
||||
|
|
|
@ -46,6 +46,8 @@ public:
|
|||
void setFuelGauge(float val);
|
||||
void setDesiredTemp(uint8_t val);
|
||||
void setDesiredPump(uint8_t val);
|
||||
void resetRunTime();
|
||||
void resetGlowTime();
|
||||
bool incRunTime();
|
||||
bool incGlowTime();
|
||||
void setCyclicEngaged(bool _CyclicEngaged);
|
||||
|
|
|
@ -30,11 +30,25 @@ const int baseSeconds = 60 * 15; // 15 minutes
|
|||
|
||||
|
||||
void
|
||||
CHourMeter::powerOnInit()
|
||||
CHourMeter::init(bool poweron)
|
||||
{
|
||||
if(poweron) {
|
||||
_RunTime = 0; // difinitely untrustworthy after power on or OTA updates
|
||||
_GlowTime = 0;
|
||||
}
|
||||
int rt = RTC_Store.getRunTime();
|
||||
int gt = RTC_Store.getGlowTime();
|
||||
if(rt || gt) {
|
||||
sHourMeter FLASHmem = NVstore.getHourMeter();
|
||||
FLASHmem.RunTime += _RunTime + baseSeconds * rt;
|
||||
FLASHmem.GlowTime += _GlowTime + baseSeconds * gt;
|
||||
NVstore.setHourMeter(FLASHmem);
|
||||
RTC_Store.resetRunTime();
|
||||
RTC_Store.resetGlowTime();
|
||||
_RunTime = 0;
|
||||
_GlowTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CHourMeter::monitor(const CProtocol& frame)
|
||||
|
@ -58,37 +72,55 @@ CHourMeter::monitor(const CProtocol& frame)
|
|||
_lastRunTime = now;
|
||||
sHourMeter FLASHmem = NVstore.getHourMeter();
|
||||
if(_RunTime > baseSeconds) {
|
||||
if(RTC_Store.incRunTime())
|
||||
FLASHmem.RunTime++;
|
||||
if(RTC_Store.incRunTime()) {
|
||||
// rolled RTC intermediate store - push into FLASH
|
||||
FLASHmem.RunTime += baseSeconds * RTC_Store.getMaxRunTime();
|
||||
}
|
||||
_RunTime -= baseSeconds;
|
||||
}
|
||||
if(_GlowTime > baseSeconds) {
|
||||
if(RTC_Store.incGlowTime())
|
||||
FLASHmem.GlowTime++;
|
||||
if(RTC_Store.incGlowTime()) {
|
||||
// rolled RTC intermediate store - push into FLASH
|
||||
FLASHmem.GlowTime += baseSeconds * RTC_Store.getMaxGlowTime(); // store whole seconds to flash memory
|
||||
}
|
||||
_GlowTime -= baseSeconds;
|
||||
}
|
||||
NVstore.setHourMeter(FLASHmem);
|
||||
}
|
||||
else {
|
||||
// heater has been stopped - save remant times to flash
|
||||
if(_lastRunTime) {
|
||||
sHourMeter FLASHmem = NVstore.getHourMeter();
|
||||
FLASHmem.RunTime += _RunTime + baseSeconds * RTC_Store.getRunTime();
|
||||
FLASHmem.GlowTime += _GlowTime + baseSeconds * RTC_Store.getGlowTime();
|
||||
NVstore.setHourMeter(FLASHmem);
|
||||
_RunTime = 0;
|
||||
_GlowTime = 0;
|
||||
RTC_Store.resetRunTime();
|
||||
RTC_Store.resetGlowTime();
|
||||
}
|
||||
_lastRunTime = 0;
|
||||
_lastGlowTime = 0;
|
||||
}
|
||||
DebugPort.printf("CHourMeter %f %f\r\n", _RunTime, _GlowTime);
|
||||
// DebugPort.printf("CHourMeter %f %f\r\n", _RunTime, _GlowTime);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
CHourMeter::getRunTime()
|
||||
{
|
||||
uint32_t rt = (uint32_t)_RunTime;
|
||||
DebugPort.printf("HrMtr: %d %d %d\r\n", rt, RTC_Store.getRunTime(), NVstore.getHourMeter().RunTime);
|
||||
DebugPort.printf("HrMtr Run: %d %d %d\r\n", rt, RTC_Store.getRunTime(), NVstore.getHourMeter().RunTime);
|
||||
|
||||
return rt + baseSeconds * RTC_Store.getRunTime() + baseSeconds * RTC_Store.getMaxRunTime() * NVstore.getHourMeter().RunTime;
|
||||
// return rt + baseSeconds * RTC_Store.getRunTime() + baseSeconds * RTC_Store.getMaxRunTime() * NVstore.getHourMeter().RunTime;
|
||||
return rt + baseSeconds * RTC_Store.getRunTime() + NVstore.getHourMeter().RunTime;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
CHourMeter::getGlowTime()
|
||||
{
|
||||
uint32_t gt = (uint32_t)_GlowTime;
|
||||
return gt + baseSeconds * RTC_Store.getGlowTime() + baseSeconds * RTC_Store.getMaxGlowTime() * NVstore.getHourMeter().GlowTime;
|
||||
// return gt + baseSeconds * RTC_Store.getGlowTime() + baseSeconds * RTC_Store.getMaxGlowTime() * NVstore.getHourMeter().GlowTime;
|
||||
DebugPort.printf("HrMtr Glow: %d %d %d\r\n", gt, RTC_Store.getGlowTime(), NVstore.getHourMeter().GlowTime);
|
||||
return gt + baseSeconds * RTC_Store.getGlowTime() + NVstore.getHourMeter().GlowTime;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
_RunTime = runtime;
|
||||
_GlowTime = glowtime;
|
||||
};
|
||||
void powerOnInit();
|
||||
void init(bool poweron);
|
||||
void monitor(const CProtocol& frame);
|
||||
uint32_t getRunTime();
|
||||
uint32_t getGlowTime();
|
||||
|
|
|
@ -464,6 +464,7 @@ sHourMeter::save()
|
|||
preferences.putULong("RunTime", RunTime);
|
||||
preferences.putULong("GlowTime", GlowTime);
|
||||
preferences.end();
|
||||
DebugPort.printf("Hourmeter NV save: Run=%d, Glow=%d\r\n", RunTime, GlowTime);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -474,4 +475,5 @@ sHourMeter::load()
|
|||
validatedLoad("RunTime", RunTime, 0, 0, 0xffffffffL);
|
||||
validatedLoad("GlowTime", GlowTime, 0, 0, 0xffffffffL);
|
||||
preferences.end();
|
||||
DebugPort.printf("Hourmeter NV read: Run=%d, Glow=%d\r\n", RunTime, GlowTime);
|
||||
}
|
Loading…
Reference in a new issue