diff --git a/src/device_library.h b/src/device_library.h index 6cf068e3f..16cfc3f5d 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -68,13 +68,13 @@ {203, DeviceType::THERMOSTAT, F("EasyControl CT200"), DeviceFlags::EMS_DEVICE_FLAG_EASY | DeviceFlags::EMS_DEVICE_FLAG_NO_WRITE}, // 0x18, cannot write // Thermostat - Buderus/Nefit/Bosch specific - 0x17 / 0x10 / 0x18 / 0x19 / 0x38 -{ 67, DeviceType::THERMOSTAT, F("RC30"), DeviceFlags::EMS_DEVICE_FLAG_RC30_1},// 0x10 - based on RC35 +{ 67, DeviceType::THERMOSTAT, F("RC30"), DeviceFlags::EMS_DEVICE_FLAG_RC30_N},// 0x10 - based on RC35 { 77, DeviceType::THERMOSTAT, F("RC20/Moduline 300"), DeviceFlags::EMS_DEVICE_FLAG_RC20},// 0x17 { 78, DeviceType::THERMOSTAT, F("Moduline 400"), DeviceFlags::EMS_DEVICE_FLAG_RC30}, // 0x10 { 79, DeviceType::THERMOSTAT, F("RC10/Moduline 100"), DeviceFlags::EMS_DEVICE_FLAG_RC10},// 0x17 { 80, DeviceType::THERMOSTAT, F("Moduline 200"), DeviceFlags::EMS_DEVICE_FLAG_RC10}, // 0x17 { 86, DeviceType::THERMOSTAT, F("RC35"), DeviceFlags::EMS_DEVICE_FLAG_RC35}, // 0x10 -{ 90, DeviceType::THERMOSTAT, F("RC10/Moduline 100"), DeviceFlags::EMS_DEVICE_FLAG_RC20_2}, // 0x17 +{ 90, DeviceType::THERMOSTAT, F("RC10/Moduline 100"), DeviceFlags::EMS_DEVICE_FLAG_RC20_N}, // 0x17 { 93, DeviceType::THERMOSTAT, F("RC20RF"), DeviceFlags::EMS_DEVICE_FLAG_RC20}, // 0x19 { 94, DeviceType::THERMOSTAT, F("RFM20 Remote"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x18 {157, DeviceType::THERMOSTAT, F("RC200/CW100"), DeviceFlags::EMS_DEVICE_FLAG_RC100}, // 0x18 @@ -82,9 +82,9 @@ {165, DeviceType::THERMOSTAT, F("RC100/Moduline 1000/1010"), DeviceFlags::EMS_DEVICE_FLAG_RC100}, // 0x18, 0x38 // Thermostat - Sieger - 0x10 / 0x17 -{ 66, DeviceType::THERMOSTAT, F("ES72/RC20"), DeviceFlags::EMS_DEVICE_FLAG_RC20_2}, // 0x17 or remote +{ 66, DeviceType::THERMOSTAT, F("ES72/RC20"), DeviceFlags::EMS_DEVICE_FLAG_RC20_N}, // 0x17 or remote { 76, DeviceType::THERMOSTAT, F("ES73"), DeviceFlags::EMS_DEVICE_FLAG_RC35}, // 0x10 -{113, DeviceType::THERMOSTAT, F("ES72/RC20"), DeviceFlags::EMS_DEVICE_FLAG_RC20_2}, // 0x17 +{113, DeviceType::THERMOSTAT, F("ES72/RC20"), DeviceFlags::EMS_DEVICE_FLAG_RC20_N}, // 0x17 // Thermostat - Junkers - 0x10 {105, DeviceType::THERMOSTAT, F("FW100"), DeviceFlags::EMS_DEVICE_FLAG_JUNKERS}, diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 3941bdc3b..41cf7bb28 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -73,29 +73,29 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x495, F("UBAInformation"), false, MAKE_PF_CB(process_UBAInformation)); // MQTT commands for boiler topic - register_mqtt_cmd(MQTT_TOPIC(wWComfort), MAKE_CF_CB(set_warmwater_mode)); - register_mqtt_cmd(MQTT_TOPIC(wWActivated), MAKE_CF_CB(set_warmwater_activated)); - register_mqtt_cmd(F_(wwtapactivated), MAKE_CF_CB(set_tapwarmwater_activated)); - register_mqtt_cmd(MQTT_TOPIC(wWFlowTempOffset), MAKE_CF_CB(set_wWFlowTempOffset)); - register_mqtt_cmd(MQTT_TOPIC(wWMaxPower), MAKE_CF_CB(set_warmwater_maxpower)); - register_mqtt_cmd(MQTT_TOPIC(wWOneTime), MAKE_CF_CB(set_warmwater_onetime)); - register_mqtt_cmd(MQTT_TOPIC(wWCircPump), MAKE_CF_CB(set_warmwater_circulation_pump)); - register_mqtt_cmd(MQTT_TOPIC(wWCirc), MAKE_CF_CB(set_warmwater_circulation)); - register_mqtt_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_warmwater_circulation_mode)); - register_mqtt_cmd(MQTT_TOPIC(selFlowTemp), MAKE_CF_CB(set_flow_temp)); - register_mqtt_cmd(MQTT_TOPIC(wWSetTemp), MAKE_CF_CB(set_warmwater_temp)); - register_mqtt_cmd(MQTT_TOPIC(heatingActivated), MAKE_CF_CB(set_heating_activated)); - register_mqtt_cmd(MQTT_TOPIC(heatingTemp), MAKE_CF_CB(set_heating_temp)); - register_mqtt_cmd(MQTT_TOPIC(burnMaxPower), MAKE_CF_CB(set_max_power)); - register_mqtt_cmd(MQTT_TOPIC(burnMinPower), MAKE_CF_CB(set_min_power)); - register_mqtt_cmd(MQTT_TOPIC(boilHystOn), MAKE_CF_CB(set_hyst_on)); - register_mqtt_cmd(MQTT_TOPIC(boilHystOff), MAKE_CF_CB(set_hyst_off)); - register_mqtt_cmd(MQTT_TOPIC(burnPeriod), MAKE_CF_CB(set_burn_period)); - register_mqtt_cmd(MQTT_TOPIC(pumpDelay), MAKE_CF_CB(set_pump_delay)); - register_mqtt_cmd(F_(maintenance), MAKE_CF_CB(set_maintenance)); - register_mqtt_cmd(MQTT_TOPIC(pumpModMax), MAKE_CF_CB(set_max_pump)); - register_mqtt_cmd(MQTT_TOPIC(pumpModMin), MAKE_CF_CB(set_min_pump)); - register_mqtt_cmd(F_(reset), MAKE_CF_CB(set_reset)); + register_cmd(MQTT_TOPIC(wWComfort), MAKE_CF_CB(set_warmwater_mode)); + register_cmd(MQTT_TOPIC(wWActivated), MAKE_CF_CB(set_warmwater_activated)); + register_cmd(F_(wwtapactivated), MAKE_CF_CB(set_tapwarmwater_activated)); + register_cmd(MQTT_TOPIC(wWFlowTempOffset), MAKE_CF_CB(set_wWFlowTempOffset)); + register_cmd(MQTT_TOPIC(wWMaxPower), MAKE_CF_CB(set_warmwater_maxpower)); + register_cmd(MQTT_TOPIC(wWOneTime), MAKE_CF_CB(set_warmwater_onetime)); + register_cmd(MQTT_TOPIC(wWCircPump), MAKE_CF_CB(set_warmwater_circulation_pump)); + register_cmd(MQTT_TOPIC(wWCirc), MAKE_CF_CB(set_warmwater_circulation)); + register_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_warmwater_circulation_mode)); + register_cmd(MQTT_TOPIC(selFlowTemp), MAKE_CF_CB(set_flow_temp)); + register_cmd(MQTT_TOPIC(wWSetTemp), MAKE_CF_CB(set_warmwater_temp)); + register_cmd(MQTT_TOPIC(heatingActivated), MAKE_CF_CB(set_heating_activated)); + register_cmd(MQTT_TOPIC(heatingTemp), MAKE_CF_CB(set_heating_temp)); + register_cmd(MQTT_TOPIC(burnMaxPower), MAKE_CF_CB(set_max_power)); + register_cmd(MQTT_TOPIC(burnMinPower), MAKE_CF_CB(set_min_power)); + register_cmd(MQTT_TOPIC(boilHystOn), MAKE_CF_CB(set_hyst_on)); + register_cmd(MQTT_TOPIC(boilHystOff), MAKE_CF_CB(set_hyst_off)); + register_cmd(MQTT_TOPIC(burnPeriod), MAKE_CF_CB(set_burn_period)); + register_cmd(MQTT_TOPIC(pumpDelay), MAKE_CF_CB(set_pump_delay)); + register_cmd(F_(maintenance), MAKE_CF_CB(set_maintenance)); + register_cmd(MQTT_TOPIC(pumpModMax), MAKE_CF_CB(set_max_pump)); + register_cmd(MQTT_TOPIC(pumpModMin), MAKE_CF_CB(set_min_pump)); + register_cmd(F_(reset), MAKE_CF_CB(set_reset)); // add values reserve_device_values(50); diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 9cf01e47e..6ba0a67f5 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -51,7 +51,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const s register_telegram_type(0x038E, F("SM100Energy"), true, MAKE_PF_CB(process_SM100Energy)); register_telegram_type(0x0391, F("SM100Time"), true, MAKE_PF_CB(process_SM100Time)); - register_mqtt_cmd(F("SM100TankBottomMaxTemp"), MAKE_CF_CB(set_SM100TankBottomMaxTemp)); + register_cmd(F("SM100TankBottomMaxTemp"), MAKE_CF_CB(set_SM100TankBottomMaxTemp)); } } diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 3b8c58293..c4ff87729 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -59,7 +59,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i } // RC35 - } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC35) || (model == EMSdevice::EMS_DEVICE_FLAG_RC30_1)) { + } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC35) || (model == EMSdevice::EMS_DEVICE_FLAG_RC30_N)) { monitor_typeids = {0x3E, 0x48, 0x52, 0x5C}; set_typeids = {0x3D, 0x47, 0x51, 0x5B}; timer_typeids = {0x3F, 0x49, 0x53, 0x5D}; @@ -84,7 +84,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0xAF, F("RC20Remote"), false, MAKE_PF_CB(process_RC20Remote)); } // RC20 newer - } else if (model == EMSdevice::EMS_DEVICE_FLAG_RC20_2) { + } else if (model == EMSdevice::EMS_DEVICE_FLAG_RC20_N) { monitor_typeids = {0xAE}; set_typeids = {0xAD}; if (actual_master_thermostat == device_id) { @@ -513,7 +513,7 @@ uint8_t Thermostat::HeatingCircuit::get_mode_type() const { } else if (modetype == 1) { return HeatingCircuit::Mode::NOFROST; } - } else if ((model == EMS_DEVICE_FLAG_RC35) || (model == EMS_DEVICE_FLAG_RC30_1)) { + } else if ((model == EMS_DEVICE_FLAG_RC35) || (model == EMS_DEVICE_FLAG_RC30_N)) { if (modetype == 0) { return HeatingCircuit::Mode::NIGHT; } else if (modetype == 1) { @@ -1503,7 +1503,7 @@ bool Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) { offset = EMS_OFFSET_RC20Set_mode; validate_typeid = set_typeids[hc_p]; break; - case EMSdevice::EMS_DEVICE_FLAG_RC20_2: // ES72 + case EMSdevice::EMS_DEVICE_FLAG_RC20_N: // ES72 offset = EMS_OFFSET_RC20_2_Set_mode; validate_typeid = set_typeids[hc_p]; break; @@ -1512,7 +1512,7 @@ bool Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) { validate_typeid = set_typeids[hc_p]; break; case EMSdevice::EMS_DEVICE_FLAG_RC35: - case EMSdevice::EMS_DEVICE_FLAG_RC30_1: + case EMSdevice::EMS_DEVICE_FLAG_RC30_N: offset = EMS_OFFSET_RC35Set_mode; validate_typeid = set_typeids[hc_p]; break; @@ -1608,7 +1608,7 @@ bool Thermostat::set_controlmode(const char * value, const int8_t id) { write_command(curve_typeids[hc->hc_num() - 1], 0, set, curve_typeids[hc->hc_num() - 1]); return true; } - } else if (model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_1) { + } else if (model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_N) { if (Helpers::value2enum(value, set, FL_(enum_controlmode2))) { LOG_INFO(F("Setting control mode to %d for heating circuit %d"), set, hc->hc_num()); write_command(set_typeids[hc->hc_num() - 1], 33, set, set_typeids[hc->hc_num() - 1]); @@ -1658,7 +1658,7 @@ bool Thermostat::set_switchtime(const char * value, const int8_t id) { return false; } - if ((model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_1)) { + if ((model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_N)) { write_command(timer_typeids[hc->hc_num() - 1], no * 2, (uint8_t *)&data, 2, timer_typeids[hc->hc_num() - 1]); } else { LOG_WARNING(F("Setting switchtime: thermostat not supported")); @@ -1687,9 +1687,9 @@ bool Thermostat::set_program(const char * value, const int8_t id) { return false; } - if (model() == EMS_DEVICE_FLAG_RC20_2 && set > 0 && set < 10) { + if (model() == EMS_DEVICE_FLAG_RC20_N && set > 0 && set < 10) { write_command(set_typeids[hc->hc_num() - 1], 11, set, set_typeids[hc->hc_num() - 1]); - } else if ((model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_1) && set < 11) { + } else if ((model() == EMS_DEVICE_FLAG_RC35 || model() == EMS_DEVICE_FLAG_RC30_N) && set < 11) { write_command(timer_typeids[hc->hc_num() - 1], 84, set, timer_typeids[hc->hc_num() - 1]); } else if ((model() == EMS_DEVICE_FLAG_RC300 || model() == EMS_DEVICE_FLAG_RC100) && (set == 1 || set == 2)) { write_command(set_typeids[hc->hc_num() - 1], 11, set, set_typeids[hc->hc_num() - 1]); @@ -1804,7 +1804,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co break; } - } else if (model == EMS_DEVICE_FLAG_RC20_2) { + } else if (model == EMS_DEVICE_FLAG_RC20_N) { switch (mode) { case HeatingCircuit::Mode::NIGHT: // change the night temp offset = EMS_OFFSET_RC20_2_Set_temp_night; @@ -1819,7 +1819,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co break; } - } else if ((model == EMS_DEVICE_FLAG_RC35) || (model == EMS_DEVICE_FLAG_RC30_1)) { + } else if ((model == EMS_DEVICE_FLAG_RC35) || (model == EMS_DEVICE_FLAG_RC30_N)) { validate_typeid = set_typeids[hc->hc_num() - 1]; switch (mode) { case HeatingCircuit::Mode::NIGHT: // change the night temp @@ -2050,77 +2050,77 @@ void Thermostat::add_commands() { } // common to all thermostats (like temp and mode) - register_mqtt_cmd(F_(temp), MAKE_CF_CB(set_temp), FLAG_HC); // for backwards compatibility - register_mqtt_cmd(MQTT_TOPIC(setpoint_roomTemp), MAKE_CF_CB(set_temp), FLAG_HC); // new naming - register_mqtt_cmd(MQTT_TOPIC(mode), MAKE_CF_CB(set_mode), FLAG_HC); + register_cmd(F_(temp), MAKE_CF_CB(set_temp), FLAG_HC); // for backwards compatibility + register_cmd(MQTT_TOPIC(setpoint_roomTemp), MAKE_CF_CB(set_temp), FLAG_HC); // new naming + register_cmd(MQTT_TOPIC(mode), MAKE_CF_CB(set_mode), FLAG_HC); switch (model()) { case EMS_DEVICE_FLAG_RC100: case EMS_DEVICE_FLAG_RC300: - register_mqtt_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); - register_mqtt_cmd(MQTT_TOPIC(manualtemp), MAKE_CF_CB(set_manualtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(ecotemp), MAKE_CF_CB(set_ecotemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(comforttemp), MAKE_CF_CB(set_comforttemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(summermode), MAKE_CF_CB(set_summermode), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(summertemp), MAKE_CF_CB(set_summertemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(wwMode), MAKE_CF_CB(set_wwmode)); - register_mqtt_cmd(MQTT_TOPIC(wwSetTemp), MAKE_CF_CB(set_wwtemp)); - register_mqtt_cmd(MQTT_TOPIC(wwSetTempLow), MAKE_CF_CB(set_wwtemplow)); - register_mqtt_cmd(MQTT_TOPIC(wWOneTime), MAKE_CF_CB(set_wwonetime)); - register_mqtt_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_wwcircmode)); - register_mqtt_cmd(MQTT_TOPIC(ibaBuildingType), MAKE_CF_CB(set_building)); - register_mqtt_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(designtemp), MAKE_CF_CB(set_designtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(offsettemp), MAKE_CF_CB(set_offsettemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(minflowtemp), MAKE_CF_CB(set_minflowtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(maxflowtemp), MAKE_CF_CB(set_maxflowtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(ibaMinExtTemperature), MAKE_CF_CB(set_minexttemp)); - register_mqtt_cmd(MQTT_TOPIC(roominfluence), MAKE_CF_CB(set_roominfluence), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(controlmode), MAKE_CF_CB(set_controlmode), FLAG_HC); + register_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); + register_cmd(MQTT_TOPIC(manualtemp), MAKE_CF_CB(set_manualtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(ecotemp), MAKE_CF_CB(set_ecotemp), FLAG_HC); + register_cmd(MQTT_TOPIC(comforttemp), MAKE_CF_CB(set_comforttemp), FLAG_HC); + register_cmd(MQTT_TOPIC(summermode), MAKE_CF_CB(set_summermode), FLAG_HC); + register_cmd(MQTT_TOPIC(summertemp), MAKE_CF_CB(set_summertemp), FLAG_HC); + register_cmd(MQTT_TOPIC(wwMode), MAKE_CF_CB(set_wwmode)); + register_cmd(MQTT_TOPIC(wwSetTemp), MAKE_CF_CB(set_wwtemp)); + register_cmd(MQTT_TOPIC(wwSetTempLow), MAKE_CF_CB(set_wwtemplow)); + register_cmd(MQTT_TOPIC(wWOneTime), MAKE_CF_CB(set_wwonetime)); + register_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_wwcircmode)); + register_cmd(MQTT_TOPIC(ibaBuildingType), MAKE_CF_CB(set_building)); + register_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); + register_cmd(MQTT_TOPIC(designtemp), MAKE_CF_CB(set_designtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(offsettemp), MAKE_CF_CB(set_offsettemp), FLAG_HC); + register_cmd(MQTT_TOPIC(minflowtemp), MAKE_CF_CB(set_minflowtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(maxflowtemp), MAKE_CF_CB(set_maxflowtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(ibaMinExtTemperature), MAKE_CF_CB(set_minexttemp)); + register_cmd(MQTT_TOPIC(roominfluence), MAKE_CF_CB(set_roominfluence), FLAG_HC); + register_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program), FLAG_HC); + register_cmd(MQTT_TOPIC(controlmode), MAKE_CF_CB(set_controlmode), FLAG_HC); break; - case EMS_DEVICE_FLAG_RC20_2: - register_mqtt_cmd(MQTT_TOPIC(nighttemp), MAKE_CF_CB(set_nighttemp)); - register_mqtt_cmd(MQTT_TOPIC(daytemp), MAKE_CF_CB(set_daytemp)); - register_mqtt_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program)); + case EMS_DEVICE_FLAG_RC20_N: + register_cmd(MQTT_TOPIC(nighttemp), MAKE_CF_CB(set_nighttemp)); + register_cmd(MQTT_TOPIC(daytemp), MAKE_CF_CB(set_daytemp)); + register_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program)); break; - case EMS_DEVICE_FLAG_RC30_1: // only RC30_1 - register_mqtt_cmd(MQTT_TOPIC(ibaClockOffset), MAKE_CF_CB(set_clockoffset)); - register_mqtt_cmd(MQTT_TOPIC(ibaLanguage), MAKE_CF_CB(set_language)); - register_mqtt_cmd(MQTT_TOPIC(ibaMainDisplay), MAKE_CF_CB(set_display)); + case EMS_DEVICE_FLAG_RC30_N: // only RC30_1 + register_cmd(MQTT_TOPIC(ibaClockOffset), MAKE_CF_CB(set_clockoffset)); + register_cmd(MQTT_TOPIC(ibaLanguage), MAKE_CF_CB(set_language)); + register_cmd(MQTT_TOPIC(ibaMainDisplay), MAKE_CF_CB(set_display)); case EMS_DEVICE_FLAG_RC35: // RC30 and RC35 - register_mqtt_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); - register_mqtt_cmd(MQTT_TOPIC(nighttemp), MAKE_CF_CB(set_nighttemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(daytemp), MAKE_CF_CB(set_daytemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); - register_mqtt_cmd(F_(remoteTemp), MAKE_CF_CB(set_remotetemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(ibaMinExtTemperature), MAKE_CF_CB(set_minexttemp)); - register_mqtt_cmd(MQTT_TOPIC(ibaCalIntTemperature), MAKE_CF_CB(set_calinttemp)); - register_mqtt_cmd(MQTT_TOPIC(ibaBuildingType), MAKE_CF_CB(set_building)); - register_mqtt_cmd(MQTT_TOPIC(control), MAKE_CF_CB(set_control), FLAG_HC); - register_mqtt_cmd(F_(pause), MAKE_CF_CB(set_pause), FLAG_HC); - register_mqtt_cmd(F_(party), MAKE_CF_CB(set_party), FLAG_HC); - register_mqtt_cmd(F_(holiday), MAKE_CF_CB(set_holiday), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(summertemp), MAKE_CF_CB(set_summertemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(designtemp), MAKE_CF_CB(set_designtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(offsettemp), MAKE_CF_CB(set_offsettemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(holidaytemp), MAKE_CF_CB(set_holidaytemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(wwMode), MAKE_CF_CB(set_wwmode)); - register_mqtt_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_wwcircmode)); - register_mqtt_cmd(MQTT_TOPIC(roominfluence), MAKE_CF_CB(set_roominfluence), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(flowtempoffset), MAKE_CF_CB(set_flowtempoffset), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(minflowtemp), MAKE_CF_CB(set_minflowtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(maxflowtemp), MAKE_CF_CB(set_maxflowtemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(reducemode), MAKE_CF_CB(set_reducemode), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program), FLAG_HC); - register_mqtt_cmd(F_(switchtime), MAKE_CF_CB(set_switchtime), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(controlmode), MAKE_CF_CB(set_controlmode), FLAG_HC); + register_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); + register_cmd(MQTT_TOPIC(nighttemp), MAKE_CF_CB(set_nighttemp), FLAG_HC); + register_cmd(MQTT_TOPIC(daytemp), MAKE_CF_CB(set_daytemp), FLAG_HC); + register_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); + register_cmd(F_(remoteTemp), MAKE_CF_CB(set_remotetemp), FLAG_HC); + register_cmd(MQTT_TOPIC(ibaMinExtTemperature), MAKE_CF_CB(set_minexttemp)); + register_cmd(MQTT_TOPIC(ibaCalIntTemperature), MAKE_CF_CB(set_calinttemp)); + register_cmd(MQTT_TOPIC(ibaBuildingType), MAKE_CF_CB(set_building)); + register_cmd(MQTT_TOPIC(control), MAKE_CF_CB(set_control), FLAG_HC); + register_cmd(F_(pause), MAKE_CF_CB(set_pause), FLAG_HC); + register_cmd(F_(party), MAKE_CF_CB(set_party), FLAG_HC); + register_cmd(F_(holiday), MAKE_CF_CB(set_holiday), FLAG_HC); + register_cmd(MQTT_TOPIC(summertemp), MAKE_CF_CB(set_summertemp), FLAG_HC); + register_cmd(MQTT_TOPIC(designtemp), MAKE_CF_CB(set_designtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(offsettemp), MAKE_CF_CB(set_offsettemp), FLAG_HC); + register_cmd(MQTT_TOPIC(holidaytemp), MAKE_CF_CB(set_holidaytemp), FLAG_HC); + register_cmd(MQTT_TOPIC(wwMode), MAKE_CF_CB(set_wwmode)); + register_cmd(MQTT_TOPIC(wWCircMode), MAKE_CF_CB(set_wwcircmode)); + register_cmd(MQTT_TOPIC(roominfluence), MAKE_CF_CB(set_roominfluence), FLAG_HC); + register_cmd(MQTT_TOPIC(flowtempoffset), MAKE_CF_CB(set_flowtempoffset), FLAG_HC); + register_cmd(MQTT_TOPIC(minflowtemp), MAKE_CF_CB(set_minflowtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(maxflowtemp), MAKE_CF_CB(set_maxflowtemp), FLAG_HC); + register_cmd(MQTT_TOPIC(reducemode), MAKE_CF_CB(set_reducemode), FLAG_HC); + register_cmd(MQTT_TOPIC(program), MAKE_CF_CB(set_program), FLAG_HC); + register_cmd(F_(switchtime), MAKE_CF_CB(set_switchtime), FLAG_HC); + register_cmd(MQTT_TOPIC(controlmode), MAKE_CF_CB(set_controlmode), FLAG_HC); break; case EMS_DEVICE_FLAG_JUNKERS: - register_mqtt_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); - register_mqtt_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(ecotemp), MAKE_CF_CB(set_ecotemp), FLAG_HC); - register_mqtt_cmd(MQTT_TOPIC(heattemp), MAKE_CF_CB(set_heattemp), FLAG_HC); + register_cmd(MQTT_TOPIC(dateTime), MAKE_CF_CB(set_datetime)); + register_cmd(MQTT_TOPIC(nofrosttemp), MAKE_CF_CB(set_nofrosttemp), FLAG_HC); + register_cmd(MQTT_TOPIC(ecotemp), MAKE_CF_CB(set_ecotemp), FLAG_HC); + register_cmd(MQTT_TOPIC(heattemp), MAKE_CF_CB(set_heattemp), FLAG_HC); break; default: break; @@ -2128,24 +2128,17 @@ void Thermostat::add_commands() { } // register main device values, top level for all thermostats (excluding heating circuits) +// as these are done in void Thermostat::register_device_values_hc() void Thermostat::register_device_values() { - uint8_t model = this->model(); - // Common for all thermostats register_device_value(TAG_THERMOSTAT_DATA, &id_, DeviceValueType::UINT, nullptr, F("id"), nullptr, DeviceValueUOM::NONE); // empty full name to prevent being shown in web or console - register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &errorCode_, DeviceValueType::TEXT, nullptr, FL_(errorCode), DeviceValueUOM::NONE); register_device_value(TAG_THERMOSTAT_DATA, &lastCode_, DeviceValueType::TEXT, nullptr, FL_(lastCode), DeviceValueUOM::NONE); - // RC30 only - if (model == EMSdevice::EMS_DEVICE_FLAG_RC30_1) { - register_device_value(TAG_THERMOSTAT_DATA, &ibaMainDisplay_, DeviceValueType::ENUM, FL_(enum_ibaMainDisplay), FL_(ibaMainDisplay), DeviceValueUOM::NONE); - register_device_value(TAG_THERMOSTAT_DATA, &ibaLanguage_, DeviceValueType::ENUM, FL_(enum_ibaLanguage), FL_(ibaLanguage), DeviceValueUOM::NONE); - register_device_value(TAG_THERMOSTAT_DATA, &ibaClockOffset_, DeviceValueType::UINT, nullptr, FL_(ibaClockOffset), DeviceValueUOM::NONE); // offset (in sec) to clock, 0xff=-1s, 0x02=2s - } - - // RC300 and RC100 - if (model == EMS_DEVICE_FLAG_RC300 || model == EMS_DEVICE_FLAG_RC100) { + switch (this->model()) { + case EMS_DEVICE_FLAG_RC100: + case EMS_DEVICE_FLAG_RC300: + register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &floordrystatus_, DeviceValueType::ENUM, FL_(enum_floordrystatus), FL_(floordrystatus), DeviceValueUOM::NONE); register_device_value(TAG_THERMOSTAT_DATA, &dampedoutdoortemp2_, DeviceValueType::SHORT, FL_(div10), FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); register_device_value(TAG_THERMOSTAT_DATA, &floordrytemp_, DeviceValueType::UINT, nullptr, FL_(floordrytemp), DeviceValueUOM::DEGREES); @@ -2156,10 +2149,19 @@ void Thermostat::register_device_values() { register_device_value(TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode), FL_(wWCircMode), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra1_, DeviceValueType::UINT, nullptr, FL_(wwExtra1), DeviceValueUOM::DEGREES); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra2_, DeviceValueType::UINT, nullptr, FL_(wwExtra2), DeviceValueUOM::DEGREES); - } - - // RC30 and RC35 - if (model == EMS_DEVICE_FLAG_RC35 || model == EMS_DEVICE_FLAG_RC30_1) { + break; + case EMS_DEVICE_FLAG_RC20_N: + case EMS_DEVICE_FLAG_RC20: + register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, false); // can't set datetime + break; + case EMS_DEVICE_FLAG_RC30_N: // only RC30_1 + register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, true); + register_device_value(TAG_THERMOSTAT_DATA, &ibaMainDisplay_, DeviceValueType::ENUM, FL_(enum_ibaMainDisplay), FL_(ibaMainDisplay), DeviceValueUOM::NONE); + register_device_value(TAG_THERMOSTAT_DATA, &ibaLanguage_, DeviceValueType::ENUM, FL_(enum_ibaLanguage), FL_(ibaLanguage), DeviceValueUOM::NONE); + register_device_value(TAG_THERMOSTAT_DATA, &ibaClockOffset_, DeviceValueType::UINT, nullptr, FL_(ibaClockOffset), DeviceValueUOM::NONE); // offset (in sec) to clock, 0xff=-1s, 0x02=2s + break; + case EMS_DEVICE_FLAG_RC35: // RC30 and RC35 + register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div2), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES, true); register_device_value(TAG_THERMOSTAT_DATA, &ibaMinExtTemperature_, DeviceValueType::INT, nullptr, FL_(ibaMinExtTemperature), DeviceValueUOM::DEGREES, true); register_device_value(TAG_THERMOSTAT_DATA, &tempsensor1_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor1), DeviceValueUOM::DEGREES); @@ -2168,6 +2170,12 @@ void Thermostat::register_device_values() { register_device_value(TAG_THERMOSTAT_DATA, &ibaBuildingType_, DeviceValueType::ENUM, FL_(enum_ibaBuildingType2), FL_(ibaBuildingType), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode2), FL_(wwMode), DeviceValueUOM::NONE, true); register_device_value(TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wWCircMode), DeviceValueUOM::NONE, true); + break; + case EMS_DEVICE_FLAG_JUNKERS: + register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, true); + break; + default: + break; } } @@ -2242,7 +2250,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrmode, DeviceValueType::ENUM, FL_(enum_mode2), FL_(mode), DeviceValueUOM::NONE, true); } - if (model == EMS_DEVICE_FLAG_RC20_2) { + if (model == EMS_DEVICE_FLAG_RC20_N) { register_device_value(tag, &hc->mode, DeviceValueType::ENUM, FL_(enum_mode2), FL_(mode), DeviceValueUOM::NONE, true); register_device_value(tag, &hc->modetype, DeviceValueType::ENUM, FL_(enum_modetype2), FL_(modetype), DeviceValueUOM::NONE); register_device_value(tag, &hc->daytemp, DeviceValueType::UINT, FL_(div2), FL_(daytemp), DeviceValueUOM::DEGREES, true); @@ -2250,7 +2258,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrprogram, DeviceValueType::UINT, nullptr, FL_(program), DeviceValueUOM::NONE, true); } - if (model == EMS_DEVICE_FLAG_RC35 || model == EMS_DEVICE_FLAG_RC30_1) { + if (model == EMS_DEVICE_FLAG_RC35 || model == EMS_DEVICE_FLAG_RC30_N) { register_device_value(tag, &hc->mode, DeviceValueType::ENUM, FL_(enum_mode3), FL_(mode), DeviceValueUOM::NONE, true); register_device_value(tag, &hc->modetype, DeviceValueType::ENUM, FL_(enum_modetype3), FL_(modetype), DeviceValueUOM::NONE); register_device_value(tag, &hc->daytemp, DeviceValueType::UINT, FL_(div2), FL_(daytemp), DeviceValueUOM::DEGREES, true); diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 92be57414..a9e6931f8 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -405,7 +405,7 @@ void EMSdevice::register_mqtt_topic(const std::string & topic, mqtt_subfunction_ } // add command to library -void EMSdevice::register_mqtt_cmd(const __FlashStringHelper * cmd, cmdfunction_p f, uint8_t flag) { +void EMSdevice::register_cmd(const __FlashStringHelper * cmd, cmdfunction_p f, uint8_t flag) { Command::add(device_type_, cmd, f, flag); } diff --git a/src/emsdevice.h b/src/emsdevice.h index 7a6debb67..fafc43811 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -279,7 +279,7 @@ class EMSdevice { void read_command(const uint16_t type_id, uint8_t offset = 0, uint8_t length = 0); void register_mqtt_topic(const std::string & topic, mqtt_subfunction_p f); - void register_mqtt_cmd(const __FlashStringHelper * cmd, cmdfunction_p f, uint8_t flag = 0); + void register_cmd(const __FlashStringHelper * cmd, cmdfunction_p f, uint8_t flag = 0); void publish_mqtt_ha_sensor(); @@ -354,8 +354,8 @@ class EMSdevice { static constexpr uint8_t EMS_DEVICE_FLAG_EASY = 1; static constexpr uint8_t EMS_DEVICE_FLAG_RC10 = 2; static constexpr uint8_t EMS_DEVICE_FLAG_RC20 = 3; - static constexpr uint8_t EMS_DEVICE_FLAG_RC20_2 = 4; // Variation on RC20, Older, like ES72 - static constexpr uint8_t EMS_DEVICE_FLAG_RC30_1 = 5; // variation on RC30, Newer models + static constexpr uint8_t EMS_DEVICE_FLAG_RC20_N = 4; // Variation on RC20, Older, like ES72 + static constexpr uint8_t EMS_DEVICE_FLAG_RC30_N = 5; // variation on RC30, Newer models static constexpr uint8_t EMS_DEVICE_FLAG_RC30 = 6; static constexpr uint8_t EMS_DEVICE_FLAG_RC35 = 7; static constexpr uint8_t EMS_DEVICE_FLAG_RC300 = 8; diff --git a/src/test/test.cpp b/src/test/test.cpp index c065e47f6..2134daaec 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -404,8 +404,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd) { run_test("boiler"); - DynamicJsonDocument doc(EMSESP_JSON_SIZE_LARGE_DYN); - JsonObject json = doc.to(); // device type, command, data Command::call(EMSdevice::DeviceType::BOILER, "wwtapactivated", "false"); }