From 75914da36a27446a0aedde53494e34313a9ede0d Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 10 Apr 2022 14:35:55 +0200 Subject: [PATCH] thermostat switchpoints allow T1-T4 --- src/devices/thermostat.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 48253bb2b..23bce8656 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1148,12 +1148,14 @@ void Thermostat::process_RC35Timer(std::shared_ptr telegram) { char data[sizeof(hc->switchtime1)]; uint8_t no = telegram->offset / 2; uint8_t day = telegram->message_data[0] >> 5; - uint8_t on = telegram->message_data[0] & 1; + uint8_t on = telegram->message_data[0] & 0x07; uint8_t time = telegram->message_data[1]; std::string sday = read_flash_string(FL_(enum_dayOfWeek)[day]); if (day == 7) { snprintf(data, sizeof(data), "%02d not_set", no); + } else if (model() == EMS_DEVICE_FLAG_RC30_N) { + snprintf(data, sizeof(data), "%02d %s %02d:%02d T%d", no, sday.c_str(), time / 6, 10 * (time % 6), on); } else { snprintf(data, sizeof(data), "%02d %s %02d:%02d %s", no, sday.c_str(), time / 6, 10 * (time % 6), on ? "on" : "off"); } @@ -1306,6 +1308,12 @@ void Thermostat::process_RCErrorMessage(std::shared_ptr telegram } } +/* + * + * *** settings *** + * + */ + // 0xA5 - Set minimum external temperature bool Thermostat::set_minexttemp(const char * value, const int8_t id) { int mt = 0; @@ -2352,6 +2360,8 @@ bool Thermostat::set_switchtime(const char * value, const uint16_t type_id, char } if (strlen(value) > 13 && value[12] == 'o') { on = value[13] == 'n' ? 1 : 0; + } else if (strlen(value) > 13 && value[12] == 'T') { + on = value[13] - '0'; } else if (strlen(value) == 13) { on = value[12] - '0'; } @@ -2369,7 +2379,7 @@ bool Thermostat::set_switchtime(const char * value, const uint16_t type_id, char } uint8_t max_on = 3; - if ((model() == EMS_DEVICE_FLAG_RC35) || (model() == EMS_DEVICE_FLAG_RC30_N)) { + if (model() == EMS_DEVICE_FLAG_RC35) { max_on = 1; } if (no > 41 || time > 0x90 || (on > max_on && on != 7)) { @@ -2379,8 +2389,10 @@ bool Thermostat::set_switchtime(const char * value, const uint16_t type_id, char } if (data[0] != 0xE7) { std::string sday = read_flash_string(FL_(enum_dayOfWeek)[day]); - if ((model() == EMS_DEVICE_FLAG_RC35) || (model() == EMS_DEVICE_FLAG_RC30_N)) { + if (model() == EMS_DEVICE_FLAG_RC35) { snprintf(out, len, "%02d %s %02d:%02d %s", no, sday.c_str(), time / 6, 10 * (time % 6), on ? "on" : "off"); + } else if (model() == EMS_DEVICE_FLAG_RC30_N) { + snprintf(out, len, "%02d %s %02d:%02d T%d", no, sday.c_str(), time / 6, 10 * (time % 6), on + 1); } else if (model() == EMS_DEVICE_FLAG_RC20) { snprintf(out, len, "%02d %s %02d:%02d T%d", no, sday.c_str(), time / 6, 10 * (time % 6), on); } else {