From 9527cf6abfb0ba4e33032e04bef621f5eb4809ea Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 3 Oct 2022 10:51:03 +0200 Subject: [PATCH] RC300 calinttemp and fix some other thermostat values --- src/devices/thermostat.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 9c8dd1797..585d0717c 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -522,7 +522,7 @@ void Thermostat::process_RC10Set(std::shared_ptr telegram) { if (hc == nullptr) { return; } - has_update(telegram, ibaClockOffset_, 0); + has_update(telegram, ibaCalIntTemperature_, 0); has_update(telegram, backlight_, 1); has_update(telegram, wwMode_, 2); has_update(telegram, hc->nighttemp, 3); @@ -1102,6 +1102,7 @@ void Thermostat::process_RC300OutdoorTemp(std::shared_ptr telegr // 0x240 RC300 parameter void Thermostat::process_RC300Settings(std::shared_ptr telegram) { + has_update(telegram, ibaCalIntTemperature_, 7); has_update(telegram, ibaDamping_, 8); has_enumupdate(telegram, ibaBuildingType_, 9, 1); // 1=light, 2=medium, 3=heavy has_update(telegram, ibaMinExtTemperature_, 10); @@ -1557,6 +1558,8 @@ bool Thermostat::set_calinttemp(const char * value, const int8_t id) { write_command(EMS_TYPE_RC30Settings, 1, t, EMS_TYPE_RC30Settings); } else if (model() == EMS_DEVICE_FLAG_RC100H) { write_command(0x273, 0, t, 0x273); + } else if (model() == EMS_DEVICE_FLAG_RC100 || model() == EMS_DEVICE_FLAG_RC300) { + write_command(0x240, 7, t, 0x240); } else { write_command(EMS_TYPE_IBASettings, 2, t, EMS_TYPE_IBASettings); } @@ -1564,10 +1567,10 @@ bool Thermostat::set_calinttemp(const char * value, const int8_t id) { return true; } -// 0xA5 - Set the display settings +// 0xA5 - Set the display settings, RC30_N bool Thermostat::set_display(const char * value, const int8_t id) { - int ds = 0; - if (!Helpers::value2number(value, ds)) { + uint8_t ds; + if (!Helpers::value2enum(value, ds, FL_(enum_ibaMainDisplay))) { return false; } @@ -3382,6 +3385,13 @@ void Thermostat::register_device_values() { FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &ibaCalIntTemperature_, + DeviceValueType::INT, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(ibaCalIntTemperature), + DeviceValueUOM::DEGREES_R, + MAKE_CF_CB(set_calinttemp)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &floordrystatus_, DeviceValueType::ENUM, @@ -3506,12 +3516,6 @@ void Thermostat::register_device_values() { FL_(ibaLanguage), DeviceValueUOM::NONE, MAKE_CF_CB(set_language)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, - &ibaMainDisplay_, - DeviceValueType::ENUM, - FL_(enum_ibaMainDisplay), - FL_(ibaMainDisplay), - DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &backlight_, DeviceValueType::BOOL, FL_(backlight), DeviceValueUOM::NONE, MAKE_CF_CB(set_backlight)); register_device_value( DeviceValueTAG::TAG_DEVICE_DATA, &brightness_, DeviceValueType::INT, FL_(brightness), DeviceValueUOM::NONE, MAKE_CF_CB(set_brightness), -15, 15); @@ -3599,13 +3603,15 @@ void Thermostat::register_device_values() { DeviceValueType::ENUM, FL_(enum_ibaMainDisplay), FL_(ibaMainDisplay), - DeviceValueUOM::NONE); + DeviceValueUOM::NONE, + MAKE_CF_CB(set_display)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaLanguage_, DeviceValueType::ENUM, FL_(enum_ibaLanguage), FL_(ibaLanguage), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaClockOffset_, DeviceValueType::INT, FL_(ibaClockOffset), - DeviceValueUOM::SECONDS); // offset (in sec) to clock, 0xff=-1s, 0x02=2s + DeviceValueUOM::SECONDS, + MAKE_CF_CB(set_clockoffset)); // offset (in sec) to clock, 0xff=-1s, 0x02=2s register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaCalIntTemperature_, DeviceValueType::INT,