BUG FIXES:

Repeating timers were being cancelled!
Set time always advanced by one day upon entry.
Desired temperature was incorrect when using enhanced thermostat modes in Detailed menu
This commit is contained in:
rljonesau 2019-04-18 21:02:39 +10:00
parent 1819a244f9
commit 9a36df14ec
6 changed files with 66 additions and 19 deletions

View file

@ -93,7 +93,7 @@ CDetailedScreen::show()
float desiredT = 0; float desiredT = 0;
if((runstate && (runstate <= 5)) || _showTarget) { if((runstate && (runstate <= 5)) || _showTarget) {
if(getThermostatModeActive()) if(getThermostatModeActive())
desiredT = getHeaterInfo().getTemperature_Desired(); desiredT = getTemperatureDesired();
else else
desiredT = -getHeaterInfo().getPump_Fixed(); desiredT = -getHeaterInfo().getPump_Fixed();
} }

View file

@ -188,10 +188,13 @@ CSetClockScreen::keyHandler(uint8_t event)
} }
// press UP // press UP
if(event & key_Up) { if(event & key_Up) {
if(_rowSel == 0) if(_rowSel == 0) {
_rowSel = 1; _rowSel = 1;
}
else {
_adjTimeDate(+1); _adjTimeDate(+1);
} }
}
// press DOWN // press DOWN
if(event & key_Down) { if(event & key_Down) {
if(_rowSel == 0) { if(_rowSel == 0) {

View file

@ -63,6 +63,7 @@ CThermostatModeScreen::_initUI()
{ {
_rowSel = 0; _rowSel = 0;
_animateCount = 0; _animateCount = 0;
_keyRepeat = -1;
} }
bool bool
@ -156,6 +157,7 @@ bool
CThermostatModeScreen::keyHandler(uint8_t event) CThermostatModeScreen::keyHandler(uint8_t event)
{ {
if(event & keyPressed) { if(event & keyPressed) {
_keyRepeat = 0; // unlock hold function
// press LEFT to select previous screen // press LEFT to select previous screen
if(event & key_Left) { if(event & key_Left) {
switch(_rowSel) { switch(_rowSel) {
@ -192,7 +194,7 @@ CThermostatModeScreen::keyHandler(uint8_t event)
} }
if(event & key_Down) { if(event & key_Down) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI); // _ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI);
} }
else { else {
_rowSel--; _rowSel--;
@ -235,6 +237,18 @@ CThermostatModeScreen::keyHandler(uint8_t event)
} }
_ScreenManager.reqUpdate(); _ScreenManager.reqUpdate();
} }
if(event & keyRepeat) {
_keyRepeat++;
if((event & key_Down) && (keyRepeat >= 4)) {
_keyRepeat = -1;
if(_rowSel == 0) {
_ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI);
}
}
}
if(event & keyReleased) {
_keyRepeat = -1;
}
return true; return true;
} }

View file

@ -31,6 +31,7 @@ class CScreenManager;
class CThermostatModeScreen : public CPasswordScreen class CThermostatModeScreen : public CPasswordScreen
{ {
int _rowSel; int _rowSel;
int _keyRepeat;
void _adjust(int dir); void _adjust(int dir);
float _window; float _window;
int _thermoMode; int _thermoMode;

View file

@ -219,29 +219,58 @@ CTimerManager::manageTime(int _hour, int _minute, int _dow)
int retval = 0; int retval = 0;
int dayMinute = (hour * 60) + minute; int dayMinute = (hour * 60) + minute;
int lookup = weekTimerIDs[dow][dayMinute]; int newID = weekTimerIDs[dow][dayMinute];
int newID = lookup & 0x0f;
if(activeTimer != newID) { if(activeTimer != newID) {
if(newID) {
requestOn(); DebugPort.print("Timer ID change detected ");
activeDow = dow; // dow when timer interval started DebugPort.print(activeTimer & 0x0f);
retval = 1; if(activeTimer & 0x80) DebugPort.print("(repeating)");
DebugPort.print(" -> ");
DebugPort.print(newID & 0x0f);
if(newID & 0x80) DebugPort.print("(repeating)");
DebugPort.println("");
if(activeTimer) {
// deal with expired timer
DebugPort.println("Handling expired timer cleanup");
if(activeTimer & 0x80) {
DebugPort.println("Expired timer repeats, leaving definition alone");
} }
else { else { // non repeating timer
requestOff();
// delete one shot timer - note that this may require ticking off each day as they appear // delete one shot timer - note that this may require ticking off each day as they appear
if((lookup & 0x80) == 0) { // non repeating timer DebugPort.print("Expired timer does not repeat - Cancelling"); DebugPort.println(activeTimer);
int ID = activeTimer & 0x0f;
if(ID) {
ID--;
sTimer timer; sTimer timer;
// get timer settings // get timer settings
NVstore.getTimerInfo(activeTimer-1, timer); NVstore.getTimerInfo(ID, timer);
if(timer.enabled & 0x80) if(timer.enabled & 0x80) {
DebugPort.println("Cancelling next day");
timer.enabled = 0; // ouright cancel anyday timer timer.enabled = 0; // ouright cancel anyday timer
else }
else {
DebugPort.print("Cancelling specific day idx"); DebugPort.println(activeDow);
timer.enabled &= ~(0x01 << activeDow); // cancel specific day that started the timer timer.enabled &= ~(0x01 << activeDow); // cancel specific day that started the timer
NVstore.setTimerInfo(activeTimer-1, timer); }
NVstore.setTimerInfo(ID, timer);
NVstore.save(); NVstore.save();
createMap(); createMap();
} }
}
}
if(newID) {
DebugPort.println("Start of timer interval, starting heater");
requestOn();
activeDow = dow; // dow when timer interval started
// activeRepeat = lookup & 0x80;
retval = 1;
}
else {
DebugPort.println("End of timer interval, stopping heater");
requestOff();
retval = 2; retval = 2;
} }
activeTimer = newID; activeTimer = newID;

Binary file not shown.