diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index b128f1fab..46d66b897 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -74,6 +74,7 @@ - Wired renamed to Ethernet - removed system/pin command, new commands in analogsensors - system/info device-info split to name/version/brand +- remove master-thermostat - exclude list uses short-names, possible flags for web/api/mqtt excludes, readonly and favorite (selection not yet implemented) - thermostat clock formate date-time: dd.mm.yyyy hh:mm - RC300 summermode as other thermostats `winter/summer` instead of `off/on` diff --git a/interface/src/project/types.ts b/interface/src/project/types.ts index 9c1cfecef..b34c7b106 100644 --- a/interface/src/project/types.ts +++ b/interface/src/project/types.ts @@ -6,7 +6,6 @@ export interface Settings { syslog_mark_interval: number; syslog_host: string; syslog_port: number; - master_thermostat: number; shower_timer: boolean; shower_alert: boolean; shower_alert_coldshot: number; diff --git a/lib_standalone/ESP8266React.h b/lib_standalone/ESP8266React.h index d8c9a52d0..30557ba01 100644 --- a/lib_standalone/ESP8266React.h +++ b/lib_standalone/ESP8266React.h @@ -26,7 +26,6 @@ class DummySettings { uint32_t syslog_mark_interval = 0; String syslog_host = "192.168.1.4"; uint16_t syslog_port = 514; - uint8_t master_thermostat = 0; bool shower_timer = true; bool shower_alert = false; uint8_t shower_alert_coldshot = 10; diff --git a/mock-api/server.js b/mock-api/server.js index 9f3666962..29664d520 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -314,7 +314,6 @@ settings = { syslog_mark_interval: 0, syslog_host: '192.168.1.4', syslog_port: 514, - master_thermostat: 0, shower_timer: true, shower_alert: true, shower_alert_trigger: 7, diff --git a/src/console.cpp b/src/console.cpp index 9a08fe2e6..096052954 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -227,10 +227,6 @@ void EMSESPShell::add_console_commands() { EMSESP::webSettingsService.read([&](WebSettings & settings) { shell.printfln(F_(tx_mode_fmt), settings.tx_mode); shell.printfln(F_(bus_id_fmt), settings.ems_bus_id); - char buffer[4]; - shell.printfln(F_(master_thermostat_fmt), - settings.master_thermostat == 0 ? read_flash_string(F_(auto)).c_str() - : Helpers::hextoa(buffer, settings.master_thermostat)); shell.printfln(F_(board_profile_fmt), settings.board_profile.c_str()); }); }); @@ -261,23 +257,6 @@ void EMSESPShell::add_console_commands() { } }); - commands->add_command(ShellContext::MAIN, - CommandFlags::ADMIN, - flash_string_vector{F_(set), F_(master), F_(thermostat)}, - flash_string_vector{F_(deviceid_mandatory)}, - [](Shell & shell, const std::vector & arguments) { - uint8_t value = Helpers::hextoint(arguments.front().c_str()); - EMSESP::webSettingsService.update( - [&](WebSettings & settings) { - settings.master_thermostat = value; - EMSESP::actual_master_thermostat(value); // set the internal value too - char buffer[5]; - shell.printfln(F_(master_thermostat_fmt), !value ? read_flash_string(F_(auto)).c_str() : Helpers::hextoa(buffer, value)); - return StateUpdateResult::CHANGED; - }, - "local"); - }); - #ifndef EMSESP_STANDALONE commands->add_command(ShellContext::MAIN, CommandFlags::USER, diff --git a/src/default_settings.h b/src/default_settings.h index 134ff4dc8..a596a7e79 100644 --- a/src/default_settings.h +++ b/src/default_settings.h @@ -52,10 +52,6 @@ #define EMSESP_DEFAULT_TRACELOG_RAW false #endif -#ifndef EMSESP_DEFAULT_MASTER_THERMOSTAT -#define EMSESP_DEFAULT_MASTER_THERMOSTAT 0 // not set -#endif - #ifndef EMSESP_DEFAULT_SHOWER_TIMER #define EMSESP_DEFAULT_SHOWER_TIMER false #endif diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 1b2d89588..4a211d162 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -99,14 +99,14 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const } */ // reset is a command uses a dummy variable which is always zero, shown as blank, but provides command enum options - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &reset_, DeviceValueType::CMD, FL_(enum_reset), FL_(reset), DeviceValueUOM::NONE, MAKE_CF_CB(set_reset)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &reset_, DeviceValueType::CMD, FL_(enum_reset), FL_(reset), DeviceValueUOM::NONE, MAKE_CF_CB(set_reset)); has_update(reset_, 0); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingActive_, DeviceValueType::BOOL, nullptr, FL_(heatingActive), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &tapwaterActive_, DeviceValueType::BOOL, nullptr, FL_(tapwaterActive), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingActive_, DeviceValueType::BOOL, nullptr, FL_(heatingActive), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tapwaterActive_, DeviceValueType::BOOL, nullptr, FL_(tapwaterActive), DeviceValueUOM::NONE); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &selFlowTemp_, DeviceValueType::UINT, nullptr, FL_(selFlowTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flow_temp)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &selFlowTemp_, DeviceValueType::UINT, nullptr, FL_(selFlowTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flow_temp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &selBurnPow_, DeviceValueType::UINT, nullptr, @@ -115,30 +115,30 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_burn_power), 0, 130); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingPumpMod_, DeviceValueType::UINT, nullptr, FL_(heatingPumpMod), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingPump2Mod_, DeviceValueType::UINT, nullptr, FL_(heatingPump2Mod), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &outdoorTemp_, DeviceValueType::SHORT, FL_(div10), FL_(outdoorTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &curFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(curFlowTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &retTemp_, DeviceValueType::USHORT, FL_(div10), FL_(retTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &switchTemp_, DeviceValueType::USHORT, FL_(div10), FL_(switchTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &sysPress_, DeviceValueType::UINT, FL_(div10), FL_(sysPress), DeviceValueUOM::BAR); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &boilTemp_, DeviceValueType::USHORT, FL_(div10), FL_(boilTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &exhaustTemp_, DeviceValueType::USHORT, FL_(div10), FL_(exhaustTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &burnGas_, DeviceValueType::BOOL, nullptr, FL_(burnGas), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &burnGas2_, DeviceValueType::BOOL, nullptr, FL_(burnGas2), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &flameCurr_, DeviceValueType::USHORT, FL_(div10), FL_(flameCurr), DeviceValueUOM::UA); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingPump_, DeviceValueType::BOOL, nullptr, FL_(heatingPump), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &fanWork_, DeviceValueType::BOOL, nullptr, FL_(fanWork), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &ignWork_, DeviceValueType::BOOL, nullptr, FL_(ignWork), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &oilPreHeat_, DeviceValueType::BOOL, nullptr, FL_(oilPreHeat), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingPumpMod_, DeviceValueType::UINT, nullptr, FL_(heatingPumpMod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingPump2Mod_, DeviceValueType::UINT, nullptr, FL_(heatingPump2Mod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &outdoorTemp_, DeviceValueType::SHORT, FL_(div10), FL_(outdoorTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &curFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(curFlowTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &retTemp_, DeviceValueType::USHORT, FL_(div10), FL_(retTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &switchTemp_, DeviceValueType::USHORT, FL_(div10), FL_(switchTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &sysPress_, DeviceValueType::UINT, FL_(div10), FL_(sysPress), DeviceValueUOM::BAR); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &boilTemp_, DeviceValueType::USHORT, FL_(div10), FL_(boilTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &exhaustTemp_, DeviceValueType::USHORT, FL_(div10), FL_(exhaustTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnGas_, DeviceValueType::BOOL, nullptr, FL_(burnGas), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnGas2_, DeviceValueType::BOOL, nullptr, FL_(burnGas2), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &flameCurr_, DeviceValueType::USHORT, FL_(div10), FL_(flameCurr), DeviceValueUOM::UA); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingPump_, DeviceValueType::BOOL, nullptr, FL_(heatingPump), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fanWork_, DeviceValueType::BOOL, nullptr, FL_(fanWork), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ignWork_, DeviceValueType::BOOL, nullptr, FL_(ignWork), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &oilPreHeat_, DeviceValueType::BOOL, nullptr, FL_(oilPreHeat), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingActivated_, DeviceValueType::BOOL, nullptr, FL_(heatingActivated), DeviceValueUOM::NONE, MAKE_CF_CB(set_heating_activated)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingTemp_, DeviceValueType::UINT, nullptr, @@ -146,12 +146,12 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::DEGREES, MAKE_CF_CB(set_heating_temp)); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &pumpModMax_, DeviceValueType::UINT, nullptr, FL_(pumpModMax), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_max_pump)); + DeviceValueTAG::TAG_DEVICE_DATA, &pumpModMax_, DeviceValueType::UINT, nullptr, FL_(pumpModMax), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_max_pump)); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &pumpModMin_, DeviceValueType::UINT, nullptr, FL_(pumpModMin), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_min_pump)); + DeviceValueTAG::TAG_DEVICE_DATA, &pumpModMin_, DeviceValueType::UINT, nullptr, FL_(pumpModMin), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_min_pump)); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &pumpDelay_, DeviceValueType::UINT, nullptr, FL_(pumpDelay), DeviceValueUOM::MINUTES, MAKE_CF_CB(set_pump_delay)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &pumpDelay_, DeviceValueType::UINT, nullptr, FL_(pumpDelay), DeviceValueUOM::MINUTES, MAKE_CF_CB(set_pump_delay)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnMinPeriod_, DeviceValueType::UINT, nullptr, @@ -159,8 +159,8 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::MINUTES, MAKE_CF_CB(set_burn_period)); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &burnMinPower_, DeviceValueType::UINT, nullptr, FL_(burnMinPower), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_min_power)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &burnMinPower_, DeviceValueType::UINT, nullptr, FL_(burnMinPower), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_min_power)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnMaxPower_, DeviceValueType::UINT, nullptr, @@ -170,36 +170,35 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const 0, 130); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &boilHystOn_, DeviceValueType::INT, nullptr, FL_(boilHystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_on)); + DeviceValueTAG::TAG_DEVICE_DATA, &boilHystOn_, DeviceValueType::INT, nullptr, FL_(boilHystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_on)); register_device_value( - DeviceValueTAG::TAG_BOILER_DATA, &boilHystOff_, DeviceValueType::INT, nullptr, FL_(boilHystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_off)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &setFlowTemp_, DeviceValueType::UINT, nullptr, FL_(setFlowTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &setBurnPow_, DeviceValueType::UINT, nullptr, FL_(setBurnPow), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &curBurnPow_, DeviceValueType::UINT, nullptr, FL_(curBurnPow), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &burnStarts_, DeviceValueType::ULONG, nullptr, FL_(burnStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &burnWorkMin_, DeviceValueType::TIME, nullptr, FL_(burnWorkMin), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &burn2WorkMin_, DeviceValueType::TIME, nullptr, FL_(burn2WorkMin), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatWorkMin_, DeviceValueType::TIME, nullptr, FL_(heatWorkMin), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &UBAuptime_, DeviceValueType::TIME, nullptr, FL_(UBAuptime), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &serviceCode_, DeviceValueType::STRING, nullptr, FL_(serviceCode), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &serviceCodeNumber_, DeviceValueType::USHORT, nullptr, FL_(serviceCodeNumber), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &maintenanceMessage_, DeviceValueType::STRING, nullptr, FL_(maintenanceMessage), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &boilHystOff_, DeviceValueType::INT, nullptr, FL_(boilHystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_off)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &setFlowTemp_, DeviceValueType::UINT, nullptr, FL_(setFlowTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &setBurnPow_, DeviceValueType::UINT, nullptr, FL_(setBurnPow), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &curBurnPow_, DeviceValueType::UINT, nullptr, FL_(curBurnPow), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnStarts_, DeviceValueType::ULONG, nullptr, FL_(burnStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnWorkMin_, DeviceValueType::TIME, nullptr, FL_(burnWorkMin), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatWorkMin_, DeviceValueType::TIME, nullptr, FL_(heatWorkMin), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &UBAuptime_, DeviceValueType::TIME, nullptr, FL_(UBAuptime), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &serviceCode_, DeviceValueType::STRING, nullptr, FL_(serviceCode), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &serviceCodeNumber_, DeviceValueType::USHORT, nullptr, FL_(serviceCodeNumber), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &maintenanceMessage_, DeviceValueType::STRING, nullptr, FL_(maintenanceMessage), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &maintenanceType_, DeviceValueType::ENUM, FL_(enum_off_time_date_manual), FL_(maintenanceType), DeviceValueUOM::NONE, MAKE_CF_CB(set_maintenance)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &maintenanceTime_, DeviceValueType::USHORT, nullptr, FL_(maintenanceTime), DeviceValueUOM::HOURS, MAKE_CF_CB(set_maintenancetime)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &maintenanceDate_, DeviceValueType::STRING, FL_(tpl_date), @@ -214,14 +213,14 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const * // Hybrid Heatpump if (model() == EMSdevice::EMS_DEVICE_FLAG_HYBRID) { - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hybridStrategy_, DeviceValueType::ENUM, FL_(enum_hybridStrategy), FL_(hybridStrategy), DeviceValueUOM::NONE, MAKE_CF_CB(set_hybridStrategy)); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &switchOverTemp_, DeviceValueType::INT, nullptr, @@ -230,7 +229,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_switchOverTemp), -20, 20); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyCostRatio_, DeviceValueType::UINT, FL_(div10), @@ -239,7 +238,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_energyCostRatio), 0, 19.9); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fossileFactor_, DeviceValueType::UINT, FL_(div10), @@ -248,7 +247,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_fossileFactor), 0, 5); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &electricFactor_, DeviceValueType::UINT, FL_(div10), @@ -257,7 +256,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_electricFactor), 0, 5); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &delayBoiler_, DeviceValueType::UINT, nullptr, @@ -266,7 +265,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_delayBoiler), 5, 120); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempDiffBoiler_, DeviceValueType::UINT, nullptr, @@ -279,78 +278,78 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const */ // heatpump info if (model() == EMS_DEVICE_FLAG_HEATPUMP) { - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &upTimeControl_, DeviceValueType::TIME, FL_(div60), FL_(upTimeControl), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &upTimeCompHeating_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompHeating), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &upTimeCompCooling_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompCooling), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &upTimeCompWw_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompWw), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &upTimeCompPool_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompPool), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &totalCompStarts_, DeviceValueType::ULONG, nullptr, FL_(totalCompStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &heatingStarts_, DeviceValueType::ULONG, nullptr, FL_(heatingStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &coolingStarts_, DeviceValueType::ULONG, nullptr, FL_(coolingStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwStarts2_, DeviceValueType::ULONG, nullptr, FL_(wwStarts2), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &poolStarts_, DeviceValueType::ULONG, nullptr, FL_(poolStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgConsTotal), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsCompTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompTotal), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsCompHeating_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompHeating), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsCompWw_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompWw), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsCompCooling_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompCooling), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgConsCompPool_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompPool), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &upTimeControl_, DeviceValueType::TIME, FL_(div60), FL_(upTimeControl), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &upTimeCompHeating_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompHeating), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &upTimeCompCooling_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompCooling), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &upTimeCompWw_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompWw), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &upTimeCompPool_, DeviceValueType::TIME, FL_(div60), FL_(upTimeCompPool), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &totalCompStarts_, DeviceValueType::ULONG, nullptr, FL_(totalCompStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingStarts_, DeviceValueType::ULONG, nullptr, FL_(heatingStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &coolingStarts_, DeviceValueType::ULONG, nullptr, FL_(coolingStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &wwStarts2_, DeviceValueType::ULONG, nullptr, FL_(wwStarts2), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolStarts_, DeviceValueType::ULONG, nullptr, FL_(poolStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgConsTotal), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompTotal), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompHeating_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompHeating), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompWw_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompWw), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompCooling_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompCooling), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompPool_, DeviceValueType::ULONG, nullptr, FL_(nrgConsCompPool), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxElecHeatNrgConsTotal_, DeviceValueType::ULONG, nullptr, FL_(auxElecHeatNrgConsTotal), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxElecHeatNrgConsHeating_, DeviceValueType::ULONG, nullptr, FL_(auxElecHeatNrgConsHeating), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxElecHeatNrgConsWW_, DeviceValueType::ULONG, nullptr, FL_(auxElecHeatNrgConsWW), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &auxElecHeatNrgConsPool_, DeviceValueType::ULONG, nullptr, FL_(auxElecHeatNrgConsPool), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgSuppTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppTotal), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgSuppHeating_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppHeating), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgSuppWw_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppWw), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgSuppCooling_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppCooling), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &nrgSuppPool_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppPool), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpPower_, DeviceValueType::UINT, FL_(div10), FL_(hpPower), DeviceValueUOM::KW); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpCompOn_, DeviceValueType::BOOL, nullptr, FL_(hpCompOn), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpActivity_, DeviceValueType::ENUM, FL_(enum_hpactivity), FL_(hpActivity), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpHeatingOn_, DeviceValueType::BOOL, nullptr, FL_(hpHeatingOn), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpCoolingOn_, DeviceValueType::BOOL, nullptr, FL_(hpCoolingOn), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpWwOn_, DeviceValueType::BOOL, nullptr, FL_(hpWwOn), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpPoolOn_, DeviceValueType::BOOL, nullptr, FL_(hpPoolOn), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpBrinePumpSpd_, DeviceValueType::UINT, nullptr, FL_(hpBrinePumpSpd), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpSwitchValve_, DeviceValueType::BOOL, nullptr, FL_(hpSwitchValve), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpCompSpd_, DeviceValueType::UINT, nullptr, FL_(hpCompSpd), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpCircSpd_, DeviceValueType::UINT, nullptr, FL_(hpCircSpd), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpBrineIn_, DeviceValueType::SHORT, FL_(div10), FL_(hpBrineIn), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpBrineOut_, DeviceValueType::SHORT, FL_(div10), FL_(hpBrineOut), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpSuctionGas_, DeviceValueType::SHORT, FL_(div10), FL_(hpSuctionGas), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpHotGas_, DeviceValueType::SHORT, FL_(div10), FL_(hpHotGas), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTc0_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc0), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTc1_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc1), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTc3_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc3), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTr3_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr3), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTr4_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr4), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTr5_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr5), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTr6_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr6), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTr7_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr7), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpTl2_, DeviceValueType::SHORT, FL_(div10), FL_(hpTl2), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpPl1_, DeviceValueType::SHORT, FL_(div10), FL_(hpPl1), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, &hpPh1_, DeviceValueType::SHORT, FL_(div10), FL_(hpPh1), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_BOILER_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgSuppTotal_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppTotal), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgSuppHeating_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppHeating), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgSuppWw_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppWw), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgSuppCooling_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppCooling), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgSuppPool_, DeviceValueType::ULONG, nullptr, FL_(nrgSuppPool), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpPower_, DeviceValueType::UINT, FL_(div10), FL_(hpPower), DeviceValueUOM::KW); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpCompOn_, DeviceValueType::BOOL, nullptr, FL_(hpCompOn), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpActivity_, DeviceValueType::ENUM, FL_(enum_hpactivity), FL_(hpActivity), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpHeatingOn_, DeviceValueType::BOOL, nullptr, FL_(hpHeatingOn), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpCoolingOn_, DeviceValueType::BOOL, nullptr, FL_(hpCoolingOn), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpWwOn_, DeviceValueType::BOOL, nullptr, FL_(hpWwOn), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpPoolOn_, DeviceValueType::BOOL, nullptr, FL_(hpPoolOn), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpBrinePumpSpd_, DeviceValueType::UINT, nullptr, FL_(hpBrinePumpSpd), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpSwitchValve_, DeviceValueType::BOOL, nullptr, FL_(hpSwitchValve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpCompSpd_, DeviceValueType::UINT, nullptr, FL_(hpCompSpd), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpCircSpd_, DeviceValueType::UINT, nullptr, FL_(hpCircSpd), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpBrineIn_, DeviceValueType::SHORT, FL_(div10), FL_(hpBrineIn), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpBrineOut_, DeviceValueType::SHORT, FL_(div10), FL_(hpBrineOut), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpSuctionGas_, DeviceValueType::SHORT, FL_(div10), FL_(hpSuctionGas), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpHotGas_, DeviceValueType::SHORT, FL_(div10), FL_(hpHotGas), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTc0_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc0), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTc1_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc1), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTc3_, DeviceValueType::SHORT, FL_(div10), FL_(hpTc3), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTr3_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr3), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTr4_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr4), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTr5_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr5), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTr6_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr6), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTr7_, DeviceValueType::SHORT, FL_(div10), FL_(hpTr7), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpTl2_, DeviceValueType::SHORT, FL_(div10), FL_(hpTl2), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpPl1_, DeviceValueType::SHORT, FL_(div10), FL_(hpPl1), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpPh1_, DeviceValueType::SHORT, FL_(div10), FL_(hpPh1), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolSetTemp_, DeviceValueType::UINT, FL_(div2), @@ -359,48 +358,48 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_pool_temp)); } - // dhw - boiler_data_ww topic - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + // dhw - DEVICE_DATA_ww topic + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwTapActivated_, DeviceValueType::BOOL, nullptr, FL_(wwtapactivated), DeviceValueUOM::NONE, MAKE_CF_CB(set_tapwarmwater_activated)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwSetTemp_, DeviceValueType::UINT, nullptr, FL_(wwSetTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSetTemp_, DeviceValueType::UINT, nullptr, FL_(wwSetTemp), DeviceValueUOM::DEGREES); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwSelTemp_, DeviceValueType::UINT, nullptr, FL_(wwSelTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_temp)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSelTemp_, DeviceValueType::UINT, nullptr, FL_(wwSelTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_temp)); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSelTempLow_, DeviceValueType::UINT, nullptr, FL_(wwSelTempLow), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_temp_low)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwSelTempOff_, DeviceValueType::UINT, nullptr, FL_(wwSelTempOff), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSelTempOff_, DeviceValueType::UINT, nullptr, FL_(wwSelTempOff), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSelTempSingle_, DeviceValueType::UINT, nullptr, FL_(wwSelTempSingle), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_temp_single)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwType_, DeviceValueType::ENUM, FL_(enum_flow), FL_(wwType), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwType_, DeviceValueType::ENUM, FL_(enum_flow), FL_(wwType), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwComfort_, DeviceValueType::ENUM, FL_(enum_comfort), FL_(wwComfort), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_mode)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwFlowTempOffset_, DeviceValueType::UINT, nullptr, FL_(wwFlowTempOffset), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_ww_flowTempOffset)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwMaxPower_, DeviceValueType::UINT, nullptr, @@ -409,26 +408,26 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_ww_maxpower), 0, 130); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCircPump_, DeviceValueType::BOOL, nullptr, FL_(wwCircPump), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_circulation_pump)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwChargeType_, DeviceValueType::ENUM, FL_(enum_charge), FL_(wwChargeType), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwChargeType_, DeviceValueType::ENUM, FL_(enum_charge), FL_(wwChargeType), DeviceValueUOM::NONE); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwHystOn_, DeviceValueType::INT, nullptr, FL_(wwHystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_ww_hyst_on)); + DeviceValueTAG::TAG_BOILER_DATA_WW, &wwHystOn_, DeviceValueType::INT, nullptr, FL_(wwHystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_ww_hyst_on)); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwHystOff_, DeviceValueType::INT, nullptr, FL_(wwHystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_ww_hyst_off)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + DeviceValueTAG::TAG_BOILER_DATA_WW, &wwHystOff_, DeviceValueType::INT, nullptr, FL_(wwHystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_ww_hyst_off)); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwDisinfectionTemp_, DeviceValueType::UINT, nullptr, FL_(wwDisinfectionTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_disinfect_temp)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_freq), @@ -436,13 +435,13 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_circulation_mode)); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCirc_, DeviceValueType::BOOL, nullptr, FL_(wwCirc), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_circulation)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCurTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCurTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp2), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCurFlow_, DeviceValueType::UINT, FL_(div10), FL_(wwCurFlow), DeviceValueUOM::LMIN); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwStorageTemp1_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp1), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwStorageTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp2), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCirc_, DeviceValueType::BOOL, nullptr, FL_(wwCirc), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_circulation)); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCurTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCurTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp2), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCurFlow_, DeviceValueType::UINT, FL_(div10), FL_(wwCurFlow), DeviceValueUOM::LMIN); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwStorageTemp1_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp1), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwStorageTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp2), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwActivated_, DeviceValueType::BOOL, nullptr, @@ -450,24 +449,24 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_activated)); register_device_value( - DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwOneTime_, DeviceValueType::BOOL, nullptr, FL_(wwOneTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_onetime)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + DeviceValueTAG::TAG_BOILER_DATA_WW, &wwOneTime_, DeviceValueType::BOOL, nullptr, FL_(wwOneTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_onetime)); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwDisinfect_, DeviceValueType::BOOL, nullptr, FL_(wwDisinfecting), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_disinfect)); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCharging_, DeviceValueType::BOOL, nullptr, FL_(wwCharging), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwRecharging_, DeviceValueType::BOOL, nullptr, FL_(wwRecharging), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwTempOK_, DeviceValueType::BOOL, nullptr, FL_(wwTempOK), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwActive_, DeviceValueType::BOOL, nullptr, FL_(wwActive), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &ww3wayValve_, DeviceValueType::BOOL, nullptr, FL_(ww3wayValve), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwSetPumpPower_, DeviceValueType::UINT, nullptr, FL_(wwSetPumpPower), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwMixerTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwMixerTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwCylMiddleTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwCylMiddleTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwStarts_, DeviceValueType::ULONG, nullptr, FL_(wwStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwWorkM_, DeviceValueType::TIME, nullptr, FL_(wwWorkM), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCharging_, DeviceValueType::BOOL, nullptr, FL_(wwCharging), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwRecharging_, DeviceValueType::BOOL, nullptr, FL_(wwRecharging), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwTempOK_, DeviceValueType::BOOL, nullptr, FL_(wwTempOK), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwActive_, DeviceValueType::BOOL, nullptr, FL_(wwActive), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &ww3wayValve_, DeviceValueType::BOOL, nullptr, FL_(ww3wayValve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwSetPumpPower_, DeviceValueType::UINT, nullptr, FL_(wwSetPumpPower), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwMixerTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwMixerTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCylMiddleTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwCylMiddleTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwStarts_, DeviceValueType::ULONG, nullptr, FL_(wwStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwWorkM_, DeviceValueType::TIME, nullptr, FL_(wwWorkM), DeviceValueUOM::MINUTES); // fetch some initial data EMSESP::send_read_request(0x10, device_id); // read last errorcode on start (only published on errors) diff --git a/src/devices/generic.cpp b/src/devices/generic.cpp index d5a5a72c6..c992195ac 100644 --- a/src/devices/generic.cpp +++ b/src/devices/generic.cpp @@ -29,7 +29,7 @@ Generic::Generic(uint8_t device_type, uint8_t device_id, uint8_t product_id, con // RF-Sensor 0x40 sending temperature in telegram 0x435, see https://github.com/emsesp/EMS-ESP32/issues/103 if (device_id == 0x40) { register_telegram_type(0x435, F("RFSensorMessage"), false, MAKE_PF_CB(process_RFSensorMessage)); - register_device_value(DeviceValueTAG::TAG_NONE, &rfTemp_, DeviceValueType::SHORT, FL_(div10), FL_(RFTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &rfTemp_, DeviceValueType::SHORT, FL_(div10), FL_(RFTemp), DeviceValueUOM::DEGREES); } } diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index 274441ccc..9e1136a8a 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -29,8 +29,8 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c register_telegram_type(0x047B, F("HP2"), true, MAKE_PF_CB(process_HPMonitor2)); // device values - register_device_value(DeviceValueTAG::TAG_NONE, &airHumidity_, DeviceValueType::UINT, FL_(div2), FL_(airHumidity), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_NONE, &dewTemperature_, DeviceValueType::UINT, nullptr, FL_(dewTemperature), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &airHumidity_, DeviceValueType::UINT, FL_(div2), FL_(airHumidity), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dewTemperature_, DeviceValueType::UINT, nullptr, FL_(dewTemperature), DeviceValueUOM::DEGREES); } /* diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 794fac20a..b6954880b 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -30,9 +30,9 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c if (flags == EMSdevice::EMS_DEVICE_FLAG_MP) { register_telegram_type(0x5BA, F("HpPoolStatus"), true, MAKE_PF_CB(process_HpPoolStatus)); type_ = Type::MP; - register_device_value(DeviceValueTAG::TAG_NONE, &poolTemp_, DeviceValueType::SHORT, FL_(div10), FL_(poolTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &poolShuntStatus_, DeviceValueType::ENUM, FL_(enum_shunt), FL_(poolShuntStatus), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &poolShunt_, DeviceValueType::UINT, nullptr, FL_(poolShunt), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolTemp_, DeviceValueType::SHORT, FL_(div10), FL_(poolTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolShuntStatus_, DeviceValueType::ENUM, FL_(enum_shunt), FL_(poolShuntStatus), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolShunt_, DeviceValueType::UINT, nullptr, FL_(poolShunt), DeviceValueUOM::PERCENT); } // EMS+ diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 55c2a5bd6..186b06f90 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -134,37 +134,43 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c } // common solar values for all modules (except dhw) - register_device_value(DeviceValueTAG::TAG_NONE, &collectorTemp_, DeviceValueType::SHORT, FL_(div10), FL_(collectorTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &cylBottomTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylBottomTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &solarPump_, DeviceValueType::BOOL, nullptr, FL_(solarPump), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &pumpWorkTime_, DeviceValueType::TIME, nullptr, FL_(pumpWorkTime), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorTemp_, DeviceValueType::SHORT, FL_(div10), FL_(collectorTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylBottomTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylBottomTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump_, DeviceValueType::BOOL, nullptr, FL_(solarPump), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &pumpWorkTime_, DeviceValueType::TIME, nullptr, FL_(pumpWorkTime), DeviceValueUOM::MINUTES); register_device_value( - DeviceValueTAG::TAG_NONE, &cylMaxTemp_, DeviceValueType::UINT, nullptr, FL_(cylMaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_cylMaxTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, &collectorShutdown_, DeviceValueType::BOOL, nullptr, FL_(collectorShutdown), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &cylHeated_, DeviceValueType::BOOL, nullptr, FL_(cylHeated), DeviceValueUOM::NONE); + DeviceValueTAG::TAG_DEVICE_DATA, &cylMaxTemp_, DeviceValueType::UINT, nullptr, FL_(cylMaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_cylMaxTemp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorShutdown_, DeviceValueType::BOOL, nullptr, FL_(collectorShutdown), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylHeated_, DeviceValueType::BOOL, nullptr, FL_(cylHeated), DeviceValueUOM::NONE); // values per device flag if (flags == EMSdevice::EMS_DEVICE_FLAG_SM10) { - register_device_value(DeviceValueTAG::TAG_NONE, &solarPumpMod_, DeviceValueType::UINT, nullptr, FL_(solarPumpMod), DeviceValueUOM::PERCENT); - register_device_value( - DeviceValueTAG::TAG_NONE, &solarPumpMinMod_, DeviceValueType::UINT, nullptr, FL_(pumpMinMod), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_PumpMinMod)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpMod_, DeviceValueType::UINT, nullptr, FL_(solarPumpMod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &solarPumpMinMod_, + DeviceValueType::UINT, + nullptr, + FL_(pumpMinMod), + DeviceValueUOM::PERCENT, + MAKE_CF_CB(set_PumpMinMod)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpTurnonDiff_, DeviceValueType::UINT, nullptr, FL_(solarPumpTurnonDiff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_TurnonDiff)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpTurnoffDiff_, DeviceValueType::UINT, nullptr, FL_(solarPumpTurnoffDiff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_TurnoffDiff)); - register_device_value(DeviceValueTAG::TAG_NONE, &solarPower_, DeviceValueType::SHORT, nullptr, FL_(solarPower), DeviceValueUOM::W); - register_device_value(DeviceValueTAG::TAG_NONE, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); - register_device_value(DeviceValueTAG::TAG_NONE, &maxFlow_, DeviceValueType::UINT, FL_(div10), FL_(maxFlow), DeviceValueUOM::LMIN, MAKE_CF_CB(set_SM10MaxFlow)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPower_, DeviceValueType::SHORT, nullptr, FL_(solarPower), DeviceValueUOM::W); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); + register_device_value( + DeviceValueTAG::TAG_DEVICE_DATA, &maxFlow_, DeviceValueType::UINT, FL_(div10), FL_(maxFlow), DeviceValueUOM::LMIN, MAKE_CF_CB(set_SM10MaxFlow)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwMinTemp_, DeviceValueType::UINT, @@ -172,7 +178,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c FL_(wwMinTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwMinTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarIsEnabled_, DeviceValueType::BOOL, nullptr, @@ -182,102 +188,122 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c /* unknown values for testing and logging. Used by MichaelDvP register_device_value( - DeviceValueTAG::TAG_NONE, &setting3_, DeviceValueType::UINT, nullptr, FL_(setting3), DeviceValueUOM::NONE, MAKE_CF_CB(set_CollectorMaxTemp)); + DeviceValueTAG::TAG_DEVICE_DATA, &setting3_, DeviceValueType::UINT, nullptr, FL_(setting3), DeviceValueUOM::NONE, MAKE_CF_CB(set_CollectorMaxTemp)); register_device_value( - DeviceValueTAG::TAG_NONE, &setting4_, DeviceValueType::UINT, nullptr, FL_(setting4), DeviceValueUOM::NONE, MAKE_CF_CB(set_CollectorMinTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, &data11_, DeviceValueType::UINT, nullptr, FL_(data11), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &data12_, DeviceValueType::UINT, nullptr, FL_(data12), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &data1_, DeviceValueType::UINT, nullptr, FL_(data1), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &data0_, DeviceValueType::UINT, nullptr, FL_(data0), DeviceValueUOM::NONE); + DeviceValueTAG::TAG_DEVICE_DATA, &setting4_, DeviceValueType::UINT, nullptr, FL_(setting4), DeviceValueUOM::NONE, MAKE_CF_CB(set_CollectorMinTemp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &data11_, DeviceValueType::UINT, nullptr, FL_(data11), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &data12_, DeviceValueType::UINT, nullptr, FL_(data12), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &data1_, DeviceValueType::UINT, nullptr, FL_(data1), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &data0_, DeviceValueType::UINT, nullptr, FL_(data0), DeviceValueUOM::NONE); */ } if (flags == EMSdevice::EMS_DEVICE_FLAG_ISM) { - register_device_value(DeviceValueTAG::TAG_NONE, &cylMiddleTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &retHeatAssist_, DeviceValueType::SHORT, FL_(div10), FL_(retHeatAssist), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &m1Valve_, DeviceValueType::BOOL, nullptr, FL_(m1Valve), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylMiddleTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &retHeatAssist_, DeviceValueType::SHORT, FL_(div10), FL_(retHeatAssist), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &m1Valve_, DeviceValueType::BOOL, nullptr, FL_(m1Valve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); } if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { - register_device_value(DeviceValueTAG::TAG_NONE, &solarPumpMod_, DeviceValueType::UINT, nullptr, FL_(solarPumpMod), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpMod_, DeviceValueType::UINT, nullptr, FL_(solarPumpMod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpMinMod_, DeviceValueType::UINT, FL_(mul5), FL_(pumpMinMod), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_PumpMinMod)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpTurnonDiff_, DeviceValueType::UINT, FL_(div10), FL_(solarPumpTurnonDiff), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_TurnonDiff)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpTurnoffDiff_, DeviceValueType::UINT, FL_(div10), FL_(solarPumpTurnoffDiff), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_TurnoffDiff)); - register_device_value(DeviceValueTAG::TAG_NONE, &collector2Temp_, DeviceValueType::SHORT, FL_(div10), FL_(collector2Temp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &cylMiddleTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &retHeatAssist_, DeviceValueType::SHORT, FL_(div10), FL_(retHeatAssist), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &m1Valve_, DeviceValueType::BOOL, nullptr, FL_(m1Valve), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &m1Power_, DeviceValueType::UINT, nullptr, FL_(m1Power), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_NONE, &solarPump2_, DeviceValueType::BOOL, nullptr, FL_(solarPump2), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &solarPump2Mod_, DeviceValueType::UINT, nullptr, FL_(solarPump2Mod), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_NONE, &cylBottomTemp2_, DeviceValueType::SHORT, FL_(div10), FL_(cyl2BottomTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &heatExchangerTemp_, DeviceValueType::SHORT, FL_(div10), FL_(heatExchangerTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &cylPumpMod_, DeviceValueType::UINT, nullptr, FL_(cylPumpMod), DeviceValueUOM::PERCENT); - register_device_value(DeviceValueTAG::TAG_NONE, &valveStatus_, DeviceValueType::BOOL, nullptr, FL_(valveStatus), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &cylHeated_, DeviceValueType::BOOL, nullptr, FL_(cylHeated), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &collectorShutdown_, DeviceValueType::BOOL, nullptr, FL_(collectorShutdown), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collector2Temp_, DeviceValueType::SHORT, FL_(div10), FL_(collector2Temp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylMiddleTemp_, DeviceValueType::SHORT, FL_(div10), FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &retHeatAssist_, DeviceValueType::SHORT, FL_(div10), FL_(retHeatAssist), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &m1Valve_, DeviceValueType::BOOL, nullptr, FL_(m1Valve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &m1Power_, DeviceValueType::UINT, nullptr, FL_(m1Power), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2_, DeviceValueType::BOOL, nullptr, FL_(solarPump2), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2Mod_, DeviceValueType::UINT, nullptr, FL_(solarPump2Mod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylBottomTemp2_, DeviceValueType::SHORT, FL_(div10), FL_(cyl2BottomTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &heatExchangerTemp_, + DeviceValueType::SHORT, + FL_(div10), + FL_(heatExchangerTemp), + DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylPumpMod_, DeviceValueType::UINT, nullptr, FL_(cylPumpMod), DeviceValueUOM::PERCENT); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &valveStatus_, DeviceValueType::BOOL, nullptr, FL_(valveStatus), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylHeated_, DeviceValueType::BOOL, nullptr, FL_(cylHeated), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorShutdown_, DeviceValueType::BOOL, nullptr, FL_(collectorShutdown), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorMaxTemp_, DeviceValueType::UINT, nullptr, FL_(collectorMaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_CollectorMaxTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorMinTemp_, DeviceValueType::UINT, nullptr, FL_(collectorMinTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_CollectorMinTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); - register_device_value(DeviceValueTAG::TAG_NONE, &energyToday_, DeviceValueType::ULONG, nullptr, FL_(energyToday), DeviceValueUOM::WH); - register_device_value(DeviceValueTAG::TAG_NONE, &energyTotal_, DeviceValueType::ULONG, FL_(div10), FL_(energyTotal), DeviceValueUOM::KWH); - register_device_value(DeviceValueTAG::TAG_NONE, &pump2WorkTime_, DeviceValueType::TIME, nullptr, FL_(pump2WorkTime), DeviceValueUOM::MINUTES); - register_device_value(DeviceValueTAG::TAG_NONE, &m1WorkTime_, DeviceValueType::TIME, nullptr, FL_(m1WorkTime), DeviceValueUOM::MINUTES); - // register_device_value(DeviceValueTAG::TAG_NONE, &cyl2MaxTemp_, DeviceValueType::UINT, nullptr, FL_(cyl2MaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_cyl2MaxTemp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyLastHour_, DeviceValueType::ULONG, FL_(div10), FL_(energyLastHour), DeviceValueUOM::WH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyToday_, DeviceValueType::ULONG, nullptr, FL_(energyToday), DeviceValueUOM::WH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyTotal_, DeviceValueType::ULONG, FL_(div10), FL_(energyTotal), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &pump2WorkTime_, DeviceValueType::TIME, nullptr, FL_(pump2WorkTime), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &m1WorkTime_, DeviceValueType::TIME, nullptr, FL_(m1WorkTime), DeviceValueUOM::MINUTES); + // register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cyl2MaxTemp_, DeviceValueType::UINT, nullptr, FL_(cyl2MaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_cyl2MaxTemp)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatTransferSystem_, DeviceValueType::BOOL, nullptr, FL_(heatTransferSystem), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatTransferSystem)); - register_device_value( - DeviceValueTAG::TAG_NONE, &externalCyl_, DeviceValueType::BOOL, nullptr, FL_(externalCyl), DeviceValueUOM::NONE, MAKE_CF_CB(set_externalCyl)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &externalCyl_, + DeviceValueType::BOOL, + nullptr, + FL_(externalCyl), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_externalCyl)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &thermalDisinfect_, DeviceValueType::BOOL, nullptr, FL_(thermalDisinfect), DeviceValueUOM::NONE, MAKE_CF_CB(set_thermalDisinfect)); - register_device_value( - DeviceValueTAG::TAG_NONE, &heatMetering_, DeviceValueType::BOOL, nullptr, FL_(heatMetering), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatMetering)); - register_device_value( - DeviceValueTAG::TAG_NONE, &solarIsEnabled_, DeviceValueType::BOOL, nullptr, FL_(activated), DeviceValueUOM::NONE, MAKE_CF_CB(set_solarEnabled)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &heatMetering_, + DeviceValueType::BOOL, + nullptr, + FL_(heatMetering), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_heatMetering)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &solarIsEnabled_, + DeviceValueType::BOOL, + nullptr, + FL_(activated), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_solarEnabled)); // telegram 0x035A - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpMode_, DeviceValueType::ENUM, FL_(enum_solarmode), @@ -285,7 +311,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueUOM::NONE, MAKE_CF_CB(set_solarMode)); register_device_value( // pump kick for vacuum collector, 00=off - DeviceValueTAG::TAG_NONE, + DeviceValueTAG::TAG_DEVICE_DATA, &solarPumpKick_, DeviceValueType::BOOL, nullptr, @@ -293,7 +319,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueUOM::NONE, MAKE_CF_CB(set_solarPumpKick)); register_device_value( // system does not use antifreeze, 00=off - DeviceValueTAG::TAG_NONE, + DeviceValueTAG::TAG_DEVICE_DATA, &plainWaterMode_, DeviceValueType::BOOL, nullptr, @@ -301,7 +327,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueUOM::NONE, MAKE_CF_CB(set_plainWaterMode)); register_device_value( // double Match Flow, 00=off - DeviceValueTAG::TAG_NONE, + DeviceValueTAG::TAG_DEVICE_DATA, &doubleMatchFlow_, DeviceValueType::BOOL, nullptr, @@ -309,21 +335,21 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueUOM::NONE, MAKE_CF_CB(set_doubleMatchFlow)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2MinMod_, DeviceValueType::UINT, nullptr, FL_(pump2MinMod), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_Pump2MinMod)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2TurnonDiff_, DeviceValueType::UINT, FL_(div10), FL_(solarPump2TurnonDiff), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_TurnonDiff2)); - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2TurnoffDiff_, DeviceValueType::UINT, FL_(div10), @@ -331,7 +357,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueUOM::DEGREES, MAKE_CF_CB(set_TurnoffDiff2)); register_device_value( // pump kick for vacuum collector, 00=off - DeviceValueTAG::TAG_NONE, + DeviceValueTAG::TAG_DEVICE_DATA, &solarPump2Kick_, DeviceValueType::BOOL, nullptr, @@ -340,53 +366,53 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c MAKE_CF_CB(set_solarPump2Kick)); // telegram 0x380 - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &climateZone_, DeviceValueType::UINT, nullptr, FL_(climateZone), DeviceValueUOM::NONE, MAKE_CF_CB(set_climateZone)); // climate zone identifier - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collector1Area_, DeviceValueType::USHORT, FL_(div10), FL_(collector1Area), DeviceValueUOM::SQM, MAKE_CF_CB(set_collector1Area)); // Area of collector field 1 - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collector1Type_, DeviceValueType::ENUM, FL_(enum_collectortype), FL_(collector1Type), DeviceValueUOM::NONE, MAKE_CF_CB(set_collector1Type)); // Type of collector field 1, 01=flat, 02=vacuum - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collector2Area_, DeviceValueType::USHORT, FL_(div10), FL_(collector2Area), DeviceValueUOM::SQM, MAKE_CF_CB(set_collector2Area)); // Area of collector field 2 - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collector2Type_, DeviceValueType::ENUM, FL_(enum_collectortype), FL_(collector2Type), DeviceValueUOM::NONE, MAKE_CF_CB(set_collector2Type)); // Type of collector field 2, 01=flat, 02=vacuum - register_device_value(DeviceValueTAG::TAG_NONE, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylPriority_, DeviceValueType::ENUM, FL_(enum_cylprio), FL_(cylPriority), DeviceValueUOM::NONE, MAKE_CF_CB(set_cylPriority)); - register_device_value(DeviceValueTAG::TAG_NONE, &heatCntFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(heatCntFlowTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &heatCntRetTemp_, DeviceValueType::USHORT, FL_(div10), FL_(heatCntRetTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &heatCnt_, DeviceValueType::UINT, nullptr, FL_(heatCnt), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &swapFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(swapFlowTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &swapRetTemp_, DeviceValueType::USHORT, FL_(div10), FL_(swapRetTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatCntFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(heatCntFlowTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatCntRetTemp_, DeviceValueType::USHORT, FL_(div10), FL_(heatCntRetTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatCnt_, DeviceValueType::UINT, nullptr, FL_(heatCnt), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &swapFlowTemp_, DeviceValueType::USHORT, FL_(div10), FL_(swapFlowTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &swapRetTemp_, DeviceValueType::USHORT, FL_(div10), FL_(swapRetTemp), DeviceValueUOM::DEGREES); } } diff --git a/src/devices/switch.cpp b/src/devices/switch.cpp index 0b1f14fce..5c9ebcadd 100644 --- a/src/devices/switch.cpp +++ b/src/devices/switch.cpp @@ -28,9 +28,9 @@ Switch::Switch(uint8_t device_type, uint8_t device_id, uint8_t product_id, const register_telegram_type(0x9D, F("WM10SetMessage"), false, MAKE_PF_CB(process_WM10SetMessage)); register_telegram_type(0x1E, F("WM10TempMessage"), false, MAKE_PF_CB(process_WM10TempMessage)); - register_device_value(DeviceValueTAG::TAG_NONE, &activated_, DeviceValueType::BOOL, nullptr, FL_(activated), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_NONE, &flowTempHc_, DeviceValueType::USHORT, FL_(div10), FL_(flowTempHc), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_NONE, &status_, DeviceValueType::INT, nullptr, FL_(status), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &activated_, DeviceValueType::BOOL, nullptr, FL_(activated), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &flowTempHc_, DeviceValueType::USHORT, FL_(div10), FL_(flowTempHc), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &status_, DeviceValueType::INT, nullptr, FL_(status), DeviceValueUOM::NONE); } // message 0x9D switch on/off diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index f2dc222a4..addead251 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -26,30 +26,13 @@ uuid::log::Logger Thermostat::logger_{F_(thermostat), uuid::log::Facility::CONSO Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const std::string & name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { - uint8_t actual_master_thermostat = EMSESP::actual_master_thermostat(); // what we're actually using - uint8_t master_thermostat = EMSESP_DEFAULT_MASTER_THERMOSTAT; - EMSESP::webSettingsService.read([&](WebSettings & settings) { - master_thermostat = settings.master_thermostat; // what the user has defined - }); - uint8_t model = this->model(); - // if we're on auto mode, register this thermostat if it has a device id of 0x10, 0x17 or 0x18 - // or if its the master thermostat we defined - // see https://github.com/emsesp/EMS-ESP/issues/362#issuecomment-629628161 - if ((master_thermostat == device_id) - || ((master_thermostat == EMSESP_DEFAULT_MASTER_THERMOSTAT) && (device_id < 0x19) - && ((actual_master_thermostat == EMSESP_DEFAULT_MASTER_THERMOSTAT) || (device_id < actual_master_thermostat)))) { - EMSESP::actual_master_thermostat(device_id); - actual_master_thermostat = device_id; - // reserve_telegram_functions(20); // reserve some space for the telegram registries, to avoid memory fragmentation - - // common telegram handlers - register_telegram_type(EMS_TYPE_RCOutdoorTemp, F("RCOutdoorTemp"), false, MAKE_PF_CB(process_RCOutdoorTemp)); - register_telegram_type(EMS_TYPE_RCTime, F("RCTime"), false, MAKE_PF_CB(process_RCTime)); - register_telegram_type(0xA2, F("RCError"), false, MAKE_PF_CB(process_RCError)); - register_telegram_type(0x12, F("RCErrorMessage"), false, MAKE_PF_CB(process_RCErrorMessage)); - } + // common telegram handlers + register_telegram_type(EMS_TYPE_RCOutdoorTemp, F("RCOutdoorTemp"), false, MAKE_PF_CB(process_RCOutdoorTemp)); + register_telegram_type(EMS_TYPE_RCTime, F("RCTime"), false, MAKE_PF_CB(process_RCTime)); + register_telegram_type(0xA2, F("RCError"), false, MAKE_PF_CB(process_RCError)); + register_telegram_type(0x12, F("RCErrorMessage"), false, MAKE_PF_CB(process_RCErrorMessage)); // RC10 if (model == EMSdevice::EMS_DEVICE_FLAG_RC10) { monitor_typeids = {0xB1}; @@ -82,25 +65,21 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i set_typeids = {0xA8}; curve_typeids = {0x90}; timer_typeids = {0x8F}; - if (actual_master_thermostat == device_id) { - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], F("RC20Monitor"), false, MAKE_PF_CB(process_RC20Monitor)); - register_telegram_type(set_typeids[i], F("RC20Set"), false, MAKE_PF_CB(process_RC20Set)); - register_telegram_type(curve_typeids[i], F("RC20Temp"), false, MAKE_PF_CB(process_RC20Temp)); - register_telegram_type(timer_typeids[i], F("RC20Timer"), false, MAKE_PF_CB(process_RC20Timer)); - } + for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + register_telegram_type(monitor_typeids[i], F("RC20Monitor"), false, MAKE_PF_CB(process_RC20Monitor)); + register_telegram_type(set_typeids[i], F("RC20Set"), false, MAKE_PF_CB(process_RC20Set)); + register_telegram_type(curve_typeids[i], F("RC20Temp"), false, MAKE_PF_CB(process_RC20Temp)); + register_telegram_type(timer_typeids[i], F("RC20Timer"), false, MAKE_PF_CB(process_RC20Timer)); } - // remote thermostat uses only 0xAF, register it also for master (in case of early detect) + // remote thermostat uses only 0xAF register_telegram_type(0xAF, F("RC20Remote"), false, MAKE_PF_CB(process_RC20Remote)); // RC20 newer } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC20_N) || (model == EMSdevice::EMS_DEVICE_FLAG_RC25)) { monitor_typeids = {0xAE}; set_typeids = {0xAD}; - if (actual_master_thermostat == device_id) { - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], F("RC20Monitor"), false, MAKE_PF_CB(process_RC20Monitor_2)); - register_telegram_type(set_typeids[i], F("RC20Set"), false, MAKE_PF_CB(process_RC20Set_2)); - } + for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + register_telegram_type(monitor_typeids[i], F("RC20Monitor"), false, MAKE_PF_CB(process_RC20Monitor_2)); + register_telegram_type(set_typeids[i], F("RC20Set"), false, MAKE_PF_CB(process_RC20Set_2)); } register_telegram_type(0xAF, F("RC20Remote"), false, MAKE_PF_CB(process_RC20Remote)); // RC30 @@ -155,23 +134,21 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // JUNKERS/HT3 } else if (model == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { - if (actual_master_thermostat == device_id) { - monitor_typeids = {0x016F, 0x0170, 0x0171, 0x0172}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], F("JunkersMonitor"), false, MAKE_PF_CB(process_JunkersMonitor)); - } + monitor_typeids = {0x016F, 0x0170, 0x0171, 0x0172}; + for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + register_telegram_type(monitor_typeids[i], F("JunkersMonitor"), false, MAKE_PF_CB(process_JunkersMonitor)); + } - if (has_flags(EMS_DEVICE_FLAG_JUNKERS_OLD)) { - // FR120, FR100 - set_typeids = {0x0179, 0x017A, 0x017B, 0x017C}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(set_typeids[i], F("JunkersSet"), false, MAKE_PF_CB(process_JunkersSet2)); - } - } else { - set_typeids = {0x0165, 0x0166, 0x0167, 0x0168}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(set_typeids[i], F("JunkersSet"), false, MAKE_PF_CB(process_JunkersSet)); - } + if (has_flags(EMS_DEVICE_FLAG_JUNKERS_OLD)) { + // FR120, FR100 + set_typeids = {0x0179, 0x017A, 0x017B, 0x017C}; + for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + register_telegram_type(set_typeids[i], F("JunkersSet"), false, MAKE_PF_CB(process_JunkersSet2)); + } + } else { + set_typeids = {0x0165, 0x0166, 0x0167, 0x0168}; + for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + register_telegram_type(set_typeids[i], F("JunkersSet"), false, MAKE_PF_CB(process_JunkersSet)); } } register_telegram_type(0xBB, F("HybridSettings"), true, MAKE_PF_CB(process_JunkersHybridSettings)); @@ -179,19 +156,10 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x123, F("JunkersRemote"), false, MAKE_PF_CB(process_JunkersRemoteMonitor)); } - if (actual_master_thermostat != device_id) { - return; // don't fetch data if more than 1 thermostat - } - - // - // this next section is only for the master thermostat.... - // - LOG_DEBUG(F("Setting this thermostat (device ID 0x%02X) to be the master"), device_id); - // register device values for common values (not heating circuit) register_device_values(); - // only for for the master-thermostat, go a query all the heating circuits. This is only done once. + // query all the heating circuits. This is only done once. // The automatic fetch will from now on only update the active heating circuits for (uint8_t i = 0; i < monitor_typeids.size(); i++) { EMSESP::send_read_request(monitor_typeids[i], device_id); @@ -353,11 +321,6 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // register the device values register_device_values_hc(new_hc); - // don't fetch telegrams if not the master - if (device_id() != EMSESP::actual_master_thermostat()) { - return new_hc; - } - // set the flag saying we want its data during the next auto fetch // monitor is broadcasted, but not frequently in some thermostats (IVT, #356) toggle_fetch(monitor_typeids[hc_num - 1], toggle_); @@ -1595,7 +1558,6 @@ bool Thermostat::set_remotetemp(const char * value, const int8_t id) { } Roomctrl::set_remotetemp(hc->hc(), hc->remotetemp); - has_update(hc->remotetemp); return true; } @@ -3218,40 +3180,40 @@ bool Thermostat::set_roominfluence(const char * value, const int8_t id) { // as these are done in void Thermostat::register_device_values_hc() void Thermostat::register_device_values() { // Common for all thermostats - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &errorCode_, DeviceValueType::STRING, nullptr, FL_(errorCode), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &errorCode_, DeviceValueType::STRING, nullptr, FL_(errorCode), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE); switch (this->model()) { case EMS_DEVICE_FLAG_RC100: case EMS_DEVICE_FLAG_RC300: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, FL_(tpl_datetime), FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &floordrystatus_, DeviceValueType::ENUM, FL_(enum_floordrystatus), FL_(floordrystatus), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp2_, DeviceValueType::SHORT, FL_(div10), FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &floordrytemp_, DeviceValueType::UINT, nullptr, FL_(floordrytemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &floordrytemp_, DeviceValueType::UINT, nullptr, FL_(floordrytemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaBuildingType_, DeviceValueType::ENUM, FL_(enum_ibaBuildingType), FL_(ibaBuildingType), DeviceValueUOM::NONE, MAKE_CF_CB(set_building)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMinExtTemperature_, DeviceValueType::INT, nullptr, @@ -3312,14 +3274,14 @@ void Thermostat::register_device_values() { 1431); break; case EMS_DEVICE_FLAG_RC10: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_calinttemp)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingpid_, DeviceValueType::ENUM, FL_(enum_PID), @@ -3327,14 +3289,14 @@ void Thermostat::register_device_values() { DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingpid)); register_device_value( - DeviceValueTAG::TAG_THERMOSTAT_DATA, &backlight_, DeviceValueType::BOOL, nullptr, FL_(backlight), DeviceValueUOM::NONE, MAKE_CF_CB(set_backlight)); + DeviceValueTAG::TAG_DEVICE_DATA, &backlight_, DeviceValueType::BOOL, nullptr, FL_(backlight), DeviceValueUOM::NONE, MAKE_CF_CB(set_backlight)); register_device_value( DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode3), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); break; case EMS_DEVICE_FLAG_RC20_N: case EMS_DEVICE_FLAG_RC25: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMinExtTemperature_, DeviceValueType::INT, nullptr, @@ -3343,35 +3305,34 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_minexttemp)); break; case EMS_DEVICE_FLAG_RC20: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime break; case EMS_DEVICE_FLAG_RC30: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaClockOffset_, DeviceValueType::INT, nullptr, FL_(ibaClockOffset), DeviceValueUOM::SECONDS, MAKE_CF_CB(set_clockoffset)); // offset (in sec) to clock, 0xff=-1s, 0x02=2s - register_device_value( - DeviceValueTAG::TAG_THERMOSTAT_DATA, &autodst_, DeviceValueType::BOOL, nullptr, FL_(autodst), DeviceValueUOM::NONE, MAKE_CF_CB(set_autodst)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &autodst_, DeviceValueType::BOOL, nullptr, FL_(autodst), DeviceValueUOM::NONE, MAKE_CF_CB(set_autodst)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaLanguage_, DeviceValueType::ENUM, FL_(enum_ibaLanguage_RC30), FL_(ibaLanguage), DeviceValueUOM::NONE, MAKE_CF_CB(set_language)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMainDisplay_, DeviceValueType::ENUM, FL_(enum_ibaMainDisplay), FL_(ibaMainDisplay), DeviceValueUOM::NONE); register_device_value( - DeviceValueTAG::TAG_THERMOSTAT_DATA, &backlight_, DeviceValueType::BOOL, nullptr, FL_(backlight), DeviceValueUOM::NONE, MAKE_CF_CB(set_backlight)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &backlight_, DeviceValueType::BOOL, nullptr, FL_(backlight), DeviceValueUOM::NONE, MAKE_CF_CB(set_backlight)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &brightness_, DeviceValueType::INT, nullptr, @@ -3380,7 +3341,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_brightness), -15, 15); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &mixingvalves_, DeviceValueType::UINT, nullptr, @@ -3389,43 +3350,31 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_mixingvalves), 0, 2); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaBuildingType_, DeviceValueType::ENUM, FL_(enum_ibaBuildingType), FL_(ibaBuildingType), DeviceValueUOM::NONE, MAKE_CF_CB(set_building)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingpid_, DeviceValueType::ENUM, FL_(enum_PID), FL_(heatingPID), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingpid)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, - &preheating_, - DeviceValueType::BOOL, - nullptr, - FL_(preheating), - DeviceValueUOM::NONE, - MAKE_CF_CB(set_preheating)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value( + DeviceValueTAG::TAG_DEVICE_DATA, &preheating_, DeviceValueType::BOOL, nullptr, FL_(preheating), DeviceValueUOM::NONE, MAKE_CF_CB(set_preheating)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_calinttemp)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, - &offtemp_, - DeviceValueType::UINT, - FL_(div2), - FL_(offtemp), - DeviceValueUOM::DEGREES, - MAKE_CF_CB(set_offtemp), - 5, - 30); + register_device_value( + DeviceValueTAG::TAG_DEVICE_DATA, &offtemp_, DeviceValueType::UINT, FL_(div2), FL_(offtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_offtemp), 5, 30); register_device_value( DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode3), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, @@ -3460,41 +3409,36 @@ void Thermostat::register_device_values() { 23); break; case EMS_DEVICE_FLAG_RC30_N: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMainDisplay_, DeviceValueType::ENUM, FL_(enum_ibaMainDisplay), FL_(ibaMainDisplay), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, - &ibaLanguage_, - DeviceValueType::ENUM, - FL_(enum_ibaLanguage), - FL_(ibaLanguage), - DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + 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, nullptr, FL_(ibaClockOffset), DeviceValueUOM::SECONDS); // offset (in sec) to clock, 0xff=-1s, 0x02=2s - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_calinttemp)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMinExtTemperature_, DeviceValueType::INT, nullptr, FL_(ibaMinExtTemperature), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_minexttemp)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaBuildingType_, DeviceValueType::ENUM, FL_(enum_ibaBuildingType), @@ -3577,14 +3521,14 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_wwCircSwitchTime)); break; case EMS_DEVICE_FLAG_RC35: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, FL_(tpl_datetime), FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), @@ -3593,19 +3537,19 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_calinttemp), -5, 5); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaMinExtTemperature_, DeviceValueType::INT, nullptr, FL_(ibaMinExtTemperature), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_minexttemp)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &tempsensor1_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor1), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &tempsensor2_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor2), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor1_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor1), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor2_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor2), DeviceValueUOM::DEGREES); register_device_value( - DeviceValueTAG::TAG_THERMOSTAT_DATA, &ibaDamping_, DeviceValueType::BOOL, nullptr, FL_(damping), DeviceValueUOM::NONE, MAKE_CF_CB(set_damping)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + DeviceValueTAG::TAG_DEVICE_DATA, &ibaDamping_, DeviceValueType::BOOL, nullptr, FL_(damping), DeviceValueUOM::NONE, MAKE_CF_CB(set_damping)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaBuildingType_, DeviceValueType::ENUM, FL_(enum_ibaBuildingType), @@ -3688,21 +3632,21 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_wwCircSwitchTime)); break; case EMS_DEVICE_FLAG_JUNKERS: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, FL_(tpl_datetime), FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hybridStrategy_, DeviceValueType::ENUM, FL_(enum_hybridStrategy), FL_(hybridStrategy), DeviceValueUOM::NONE, MAKE_CF_CB(set_hybridStrategy)); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &switchOverTemp_, DeviceValueType::INT, nullptr, @@ -3711,7 +3655,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_switchOverTemp), -20, 20); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &energyCostRatio_, DeviceValueType::UINT, FL_(div10), @@ -3720,7 +3664,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_energyCostRatio), 0, 19.9); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fossileFactor_, DeviceValueType::UINT, FL_(div10), @@ -3729,7 +3673,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_fossileFactor), 0, 5); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &electricFactor_, DeviceValueType::UINT, FL_(div10), @@ -3738,7 +3682,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_electricFactor), 0, 5); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &delayBoiler_, DeviceValueType::UINT, nullptr, @@ -3747,7 +3691,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_delayBoiler), 5, 120); - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempDiffBoiler_, DeviceValueType::UINT, nullptr, @@ -3759,11 +3703,11 @@ void Thermostat::register_device_values() { break; case EMS_DEVICE_FLAG_EASY: // Easy TC100 have no date/time, see issue #100, not sure about CT200, so leave it. - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime break; case EMS_DEVICE_FLAG_CRF: default: - register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); // can't set datetime break; } } @@ -3789,16 +3733,12 @@ void Thermostat::register_device_values_hc(std::shared_ptrselTemp, DeviceValueType::SHORT, seltemp_divider, FL_(selRoomTemp), DeviceValueUOM::DEGREES); } else { register_device_value(tag, &hc->selTemp, DeviceValueType::SHORT, seltemp_divider, FL_(selRoomTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_temp), 0, 29); } register_device_value(tag, &hc->roomTemp, DeviceValueType::SHORT, roomtemp_divider, FL_(roomTemp), DeviceValueUOM::DEGREES); - - if (device_id() != EMSESP::actual_master_thermostat()) { - return; - } register_device_value(tag, &hc->climate, DeviceValueType::ENUM, FL_(enum_climate), FL_(climate), DeviceValueUOM::NONE); switch (model) { diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index a1465ee47..981b4f9cd 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -244,6 +244,16 @@ bool EMSdevice::is_fetch(uint16_t telegram_id) const { return false; } +// check for a tag to create a nest +bool EMSdevice::has_tag(const uint8_t tag) { + for (const auto & dv : devicevalues_) { + if (dv.tag == tag && tag >= DeviceValueTAG::TAG_HC1) { + return true; + } + } + return false; +} + // list of registered device entries // called from the command 'entities' void EMSdevice::list_device_entries(JsonObject & output) const { @@ -469,7 +479,7 @@ void EMSdevice::register_device_value(uint8_t tag, flags |= CommandFlag::MQTT_SUB_FLAG_HC; } else if (tag >= DeviceValueTAG::TAG_WWC1 && tag <= DeviceValueTAG::TAG_WWC10) { flags |= CommandFlag::MQTT_SUB_FLAG_WWC; - } else if (tag == DeviceValueTAG::TAG_DEVICE_DATA_WW) { + } else if (tag == DeviceValueTAG::TAG_DEVICE_DATA_WW || tag == DeviceValueTAG::TAG_BOILER_DATA_WW) { flags |= CommandFlag::MQTT_SUB_FLAG_WW; } @@ -541,7 +551,7 @@ void EMSdevice::publish_value(void * value_p) const { if (dv.value_p == value_p && !dv.has_state(DeviceValueState::DV_API_MQTT_EXCLUDE)) { char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; if (Mqtt::publish_single2cmd()) { - if (dv.tag >= DeviceValueTAG::TAG_HC1 && dv.tag <= DeviceValueTAG::TAG_WWC10) { + if (dv.tag >= DeviceValueTAG::TAG_HC1) { snprintf(topic, sizeof(topic), "%s/%s/%s", @@ -902,11 +912,9 @@ bool EMSdevice::get_value_info(JsonObject & output, const char * cmd, const int8 JsonObject json = output; int8_t tag = id; - // check if we have hc or wwc - if (id >= 1 && id <= 8) { + // check if we have hc or wwc or hs + if (id >= 1 && id <= 34) { tag = DeviceValueTAG::TAG_HC1 + id - 1; - } else if (id >= 9 && id <= 19) { - tag = DeviceValueTAG::TAG_WWC1 + id - 9; } // make a copy of the string command for parsing diff --git a/src/emsdevice.h b/src/emsdevice.h index 3da12a4e3..b311b3337 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -52,6 +52,8 @@ class EMSdevice { static std::string tag_to_string(uint8_t tag); static std::string tag_to_mqtt(uint8_t tag); + bool has_tag(const uint8_t tag); + inline uint8_t device_id() const { return device_id_; } diff --git a/src/emsdevicevalue.cpp b/src/emsdevicevalue.cpp index d1a2ffe41..e4d601f33 100644 --- a/src/emsdevicevalue.cpp +++ b/src/emsdevicevalue.cpp @@ -53,45 +53,45 @@ const __FlashStringHelper * DeviceValue::DeviceValueUOM_s[] __attribute__((__ali // must be an int of 4 bytes, 32bit aligned const __FlashStringHelper * const DeviceValue::DeviceValueTAG_s[] PROGMEM = { - F_(tag_none), // "" - F_(tag_heartbeat), // "" - F_(tag_boiler_data), // "" - F_(tag_device_data_ww), // "ww" - F_(tag_thermostat_data), // "" - F_(tag_hc1), // "hc1" - F_(tag_hc2), // "hc2" - F_(tag_hc3), // "hc3" - F_(tag_hc4), // "hc4" - F_(tag_hc5), // "hc5" - F_(tag_hc6), // "hc6" - F_(tag_hc7), // "hc7" - F_(tag_hc8), // "hc8" - F_(tag_wwc1), // "wwc1" - F_(tag_wwc2), // "Wwc2" - F_(tag_wwc3), // "wwc3" - F_(tag_wwc4), // "wwc4" - F_(tag_wwc5), // "wwc5" - F_(tag_wwc6), // "wwc6" - F_(tag_wwc7), // "wwc7" - F_(tag_wwc8), // "wwc8" - F_(tag_wwc9), // "wwc9" - F_(tag_wwc10), // "wwc10" - F_(tag_hs1), // "hs1" - F_(tag_hs2), // "hs2" - F_(tag_hs3), // "hs3" - F_(tag_hs4), // "hs4" - F_(tag_hs5), // "hs5" - F_(tag_hs6), // "hs6" - F_(tag_hs7), // "hs7" - F_(tag_hs8), // "hs8" - F_(tag_hs9), // "hs9" - F_(tag_hs10), // "hs10" - F_(tag_hs11), // "hs11" - F_(tag_hs12), // "hs12" - F_(tag_hs13), // "hs13" - F_(tag_hs14), // "hs14" - F_(tag_hs15), // "hs15" - F_(tag_hs16) // "hs16" + F_(tag_none), // "" + F_(tag_heartbeat), // "" + F_(tag_boiler_data_ww), // "dhw" + F_(tag_device_data), // "" + F_(tag_device_data_ww), // "dhw" + F_(tag_hc1), // "hc1" + F_(tag_hc2), // "hc2" + F_(tag_hc3), // "hc3" + F_(tag_hc4), // "hc4" + F_(tag_hc5), // "hc5" + F_(tag_hc6), // "hc6" + F_(tag_hc7), // "hc7" + F_(tag_hc8), // "hc8" + F_(tag_wwc1), // "wwc1" + F_(tag_wwc2), // "Wwc2" + F_(tag_wwc3), // "wwc3" + F_(tag_wwc4), // "wwc4" + F_(tag_wwc5), // "wwc5" + F_(tag_wwc6), // "wwc6" + F_(tag_wwc7), // "wwc7" + F_(tag_wwc8), // "wwc8" + F_(tag_wwc9), // "wwc9" + F_(tag_wwc10), // "wwc10" + F_(tag_hs1), // "hs1" + F_(tag_hs2), // "hs2" + F_(tag_hs3), // "hs3" + F_(tag_hs4), // "hs4" + F_(tag_hs5), // "hs5" + F_(tag_hs6), // "hs6" + F_(tag_hs7), // "hs7" + F_(tag_hs8), // "hs8" + F_(tag_hs9), // "hs9" + F_(tag_hs10), // "hs10" + F_(tag_hs11), // "hs11" + F_(tag_hs12), // "hs12" + F_(tag_hs13), // "hs13" + F_(tag_hs14), // "hs14" + F_(tag_hs15), // "hs15" + F_(tag_hs16) // "hs16" }; @@ -100,9 +100,9 @@ const __FlashStringHelper * const DeviceValue::DeviceValueTAG_mqtt[] PROGMEM = { F_(tag_none), // "" F_(heartbeat), // "heartbeat" - F_(tag_boiler_data_mqtt), // "" - F_(tag_device_data_ww_mqtt), // "ww" - F_(tag_thermostat_data), // "" + F_(tag_boiler_data_ww_mqtt), // "ww" + F_(tag_device_data), // "" + F_(tag_device_data_ww_mqtt), // "" F_(tag_hc1), // "hc1" F_(tag_hc2), // "hc2" F_(tag_hc3), // "hc3" diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 5f88b9de5..b1e77ccf1 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -75,9 +75,9 @@ class DeviceValue { enum DeviceValueTAG : uint8_t { TAG_NONE = 0, // wild card TAG_HEARTBEAT, - TAG_BOILER_DATA, + TAG_BOILER_DATA_WW, + TAG_DEVICE_DATA, TAG_DEVICE_DATA_WW, - TAG_THERMOSTAT_DATA, TAG_HC1, TAG_HC2, TAG_HC3, diff --git a/src/emsesp.cpp b/src/emsesp.cpp index fcf5e289b..c8a75d50d 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -60,19 +60,18 @@ AnalogSensor EMSESP::analogsensor_; // Analog sensors Shower EMSESP::shower_; // Shower logic // static/common variables -uint8_t EMSESP::actual_master_thermostat_ = EMSESP_DEFAULT_MASTER_THERMOSTAT; // which thermostat leads when multiple found -uint16_t EMSESP::watch_id_ = WATCH_ID_NONE; // for when log is TRACE. 0 means no trace set -uint8_t EMSESP::watch_ = 0; // trace off -uint16_t EMSESP::read_id_ = WATCH_ID_NONE; -bool EMSESP::read_next_ = false; -uint16_t EMSESP::publish_id_ = 0; -bool EMSESP::tap_water_active_ = false; // for when Boiler states we having running warm water. used in Shower() -uint32_t EMSESP::last_fetch_ = 0; -uint8_t EMSESP::publish_all_idx_ = 0; -uint8_t EMSESP::unique_id_count_ = 0; -bool EMSESP::trace_raw_ = false; -uint16_t EMSESP::wait_validate_ = 0; -bool EMSESP::wait_km_ = true; +uint16_t EMSESP::watch_id_ = WATCH_ID_NONE; // for when log is TRACE. 0 means no trace set +uint8_t EMSESP::watch_ = 0; // trace off +uint16_t EMSESP::read_id_ = WATCH_ID_NONE; +bool EMSESP::read_next_ = false; +uint16_t EMSESP::publish_id_ = 0; +bool EMSESP::tap_water_active_ = false; // for when Boiler states we having running warm water. used in Shower() +uint32_t EMSESP::last_fetch_ = 0; +uint8_t EMSESP::publish_all_idx_ = 0; +uint8_t EMSESP::unique_id_count_ = 0; +bool EMSESP::trace_raw_ = false; +uint16_t EMSESP::wait_validate_ = 0; +bool EMSESP::wait_km_ = true; // for a specific EMS device go and request data values // or if device_id is 0 it will fetch from all our known and active devices @@ -168,63 +167,6 @@ void EMSESP::scan_devices() { EMSESP::send_read_request(EMSdevice::EMS_TYPE_UBADevices, EMSdevice::EMS_DEVICE_ID_BOILER); } -/** -* if thermostat master is 0x18 it handles only ww and hc1, hc2..hc8 handled by devices 0x19..0x1F -* we send to right device and match all reads to 0x18 -*/ -uint8_t EMSESP::check_master_device(const uint8_t device_id, const uint16_t type_id, const bool read) { - if (device_id != 0x10 && (device_id < 0x18 || device_id > 0x1F)) { - return device_id; - } - if (actual_master_thermostat_ == 0x18) { - uint16_t mon_ids[] = {0x02A5, 0x02A6, 0x02A7, 0x02A8, 0x02A9, 0x02AA, 0x02AB, 0x02AC}; - uint16_t set_ids[] = {0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF, 0x02C0}; - uint16_t summer_ids[] = {0x02AF, 0x02B0, 0x02B1, 0x02B2, 0x02B3, 0x02B4, 0x02B5, 0x02B6}; - uint16_t curve_ids[] = {0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x02A0, 0x02A1, 0x02A2}; - uint16_t summer2_ids[] = {0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478}; - uint16_t master_ids[] = {0x02F5, 0x031B, 0x031D, 0x031E, 0x023A, 0x0267, 0x0240}; - // look for heating circuits - for (uint8_t i = 0; i < sizeof(mon_ids) / 2; i++) { - if (type_id == mon_ids[i] || type_id == set_ids[i] || type_id == summer_ids[i] || type_id == curve_ids[i] || type_id == summer2_ids[i]) { - if (read) { - // receiving telegrams and map all to master thermostat at 0x18 (src manipulated) - return 0x18; - } else { - // sending telegrams to the individual thermostats (dst manipulated) - return 0x18 + i; - } - } - } - // look for ids that are only handled by master - for (uint8_t i = 0; i < sizeof(master_ids) / 2; i++) { - if (type_id == master_ids[i]) { - return 0x18; - } - } - } else if (actual_master_thermostat_ == 0x10) { - // Junkers FW200 supports hc1/hc2, hc3/hc4 handled by devices 0x1A... - // see https://github.com/emsesp/EMS-ESP32/issues/336 - uint16_t mon_ids[] = {0x0171, 0x0172}; - uint16_t set_ids[] = {0x0167, 0x0168}; - for (uint8_t i = 0; i < sizeof(mon_ids) / 2; i++) { - if (type_id == mon_ids[i] || type_id == set_ids[i]) { - // reads to master thermostat, writes to remote thermostats - return (read ? actual_master_thermostat_ : 0x1A + i); - } - } - } - - return device_id; -} - -void EMSESP::actual_master_thermostat(const uint8_t device_id) { - actual_master_thermostat_ = device_id; -} - -uint8_t EMSESP::actual_master_thermostat() { - return actual_master_thermostat_; -} - // to watch both type IDs and deviceIDs void EMSESP::watch_id(uint16_t watch_id) { watch_id_ = watch_id; @@ -560,13 +502,13 @@ void EMSESP::publish_device_values(uint8_t device_type) { bool nested = (Mqtt::is_nested()); // group by device type - for (const auto & emsdevice : emsdevices) { - if (emsdevice && (emsdevice->device_type() == device_type)) { - // specially for MQTT Discovery - // we may have some RETAINED /config topics that reference fields in the data payloads that no longer exist - // remove them immediately to prevent HA from complaining - // we need to do this first before the data payload is published, and only done once! - if (Mqtt::ha_enabled()) { + if (Mqtt::ha_enabled()) { + for (const auto & emsdevice : emsdevices) { + if (emsdevice && (emsdevice->device_type() == device_type)) { + // specially for MQTT Discovery + // we may have some RETAINED /config topics that reference fields in the data payloads that no longer exist + // remove them immediately to prevent HA from complaining + // we need to do this first before the data payload is published, and only done once! if (emsdevice->ha_config_firstrun()) { emsdevice->ha_config_clear(); emsdevice->ha_config_firstrun(false); @@ -575,79 +517,40 @@ void EMSESP::publish_device_values(uint8_t device_type) { emsdevice->mqtt_ha_entity_config_remove(); } } - - // if its a boiler, generate json for each group and publish it directly. not nested - if (device_type == DeviceType::BOILER) { - json = doc.to(); - if (emsdevice->generate_values(json, DeviceValueTAG::TAG_BOILER_DATA, false, EMSdevice::OUTPUT_TARGET::MQTT)) { - Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_BOILER_DATA), json); - } - json = doc.to(); - if (emsdevice->generate_values(json, DeviceValueTAG::TAG_DEVICE_DATA_WW, false, EMSdevice::OUTPUT_TARGET::MQTT)) { - Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_DEVICE_DATA_WW), json); - } - need_publish = false; - } - - // Thermostat - else if (device_type == DeviceType::THERMOSTAT) { - // only publish the single master thermostat - if (emsdevice->device_id() == EMSESP::actual_master_thermostat()) { - if (nested) { - json = doc.to(); - need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested - } else { - json = doc.to(); - need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_THERMOSTAT_DATA, false, EMSdevice::OUTPUT_TARGET::MQTT); // not nested - need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_DEVICE_DATA_WW, false, EMSdevice::OUTPUT_TARGET::MQTT); - if (need_publish) { - Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_NONE), json); - } - for (uint8_t hc_tag = DeviceValueTAG::TAG_HC1; hc_tag <= DeviceValueTAG::TAG_HC8; hc_tag++) { - json = doc.to(); - if (emsdevice->generate_values(json, hc_tag, false, EMSdevice::OUTPUT_TARGET::MQTT)) { // not nested - Mqtt::publish(Mqtt::tag_to_topic(device_type, hc_tag), json); - } - } - need_publish = false; - } - } - } - - // Mixer - else if (device_type == DeviceType::MIXER) { - if (nested) { - need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested - } else { - for (uint8_t hc_tag = DeviceValueTAG::TAG_HC1; hc_tag <= DeviceValueTAG::TAG_WWC10; hc_tag++) { - json = doc.to(); - if (emsdevice->generate_values(json, hc_tag, false, EMSdevice::OUTPUT_TARGET::MQTT)) { // not nested - Mqtt::publish(Mqtt::tag_to_topic(device_type, hc_tag), json); - } - } - need_publish = false; - } - - } else { - // for all other devices add the values to the json - need_publish |= emsdevice->generate_values(json, DeviceValueTAG::TAG_NONE, true, EMSdevice::OUTPUT_TARGET::MQTT); // nested - } - - // we want to create the /config topic after the data payload to prevent HA from throwing up a warning - if (Mqtt::ha_enabled()) { - emsdevice->mqtt_ha_entity_config_create(); - } } } - - // publish it under a single topic, only if we have data to publish + for (uint8_t tag = DeviceValueTAG::TAG_BOILER_DATA_WW; tag <= DeviceValueTAG::TAG_HS16; tag++) { + JsonObject json_hc = json; + bool nest_created = false; + for (const auto & emsdevice : emsdevices) { + if (emsdevice && (emsdevice->device_type() == device_type)) { + if (nested && !nest_created && emsdevice->has_tag(tag)) { + json_hc = doc.createNestedObject(EMSdevice::tag_to_string(tag)); + nest_created = true; + } + need_publish |= emsdevice->generate_values(json_hc, tag, false, EMSdevice::OUTPUT_TARGET::MQTT); + } + } + if (need_publish && ((!nested && tag >= DeviceValueTAG::TAG_DEVICE_DATA_WW) || (tag == DeviceValueTAG::TAG_BOILER_DATA_WW))) { + Mqtt::publish(Mqtt::tag_to_topic(device_type, tag), json); + json = doc.to(); + need_publish = false; + } + } if (need_publish) { if (doc.overflowed()) { LOG_WARNING(F("MQTT buffer overflow, please use individual topics")); } - char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; - snprintf(topic, sizeof(topic), "%s_data", EMSdevice::device_type_2_device_name(device_type).c_str()); - Mqtt::publish(topic, json); + Mqtt::publish(Mqtt::tag_to_topic(device_type, DeviceValueTAG::TAG_NONE), json); + } + + // we want to create the /config topic after the data payload to prevent HA from throwing up a warning + if (Mqtt::ha_enabled()) { + for (const auto & emsdevice : emsdevices) { + if (emsdevice && (emsdevice->device_type() == device_type)) { + emsdevice->mqtt_ha_entity_config_create(); + } + } } } @@ -1007,10 +910,6 @@ void EMSESP::show_devices(uuid::console::Shell & shell) { for (const auto & emsdevice : emsdevices) { if (emsdevice && (emsdevice->device_type() == device_class.first)) { shell.printf(F("%s: %s"), emsdevice->device_type_name().c_str(), emsdevice->to_string().c_str()); - if ((num_thermostats > 1) && (emsdevice->device_type() == EMSdevice::DeviceType::THERMOSTAT) - && (emsdevice->device_id() == actual_master_thermostat())) { - shell.printf(F(" **master device**")); - } shell.println(); emsdevice->show_telegram_handlers(shell); @@ -1203,23 +1102,36 @@ bool EMSESP::command_commands(uint8_t device_type, JsonObject & output, const in bool EMSESP::command_info(uint8_t device_type, JsonObject & output, const int8_t id, const uint8_t output_target) { bool has_value = false; uint8_t tag; - if (id >= 1 && id <= 8) { - tag = DeviceValueTAG::TAG_HC1 + id - 1; - } else if (id >= 9 && id <= 19) { - tag = DeviceValueTAG::TAG_WWC1 + id - 9; + if (id >= 1 && id <= 34) { + tag = DeviceValueTAG::TAG_HC1 + id - 1; // this sets also WWC and HS } else if (id == -1 || id == 0) { tag = DeviceValueTAG::TAG_NONE; } else { return false; } - for (const auto & emsdevice : emsdevices) { - if (emsdevice && (emsdevice->device_type() == device_type) - && ((device_type != DeviceType::THERMOSTAT) || (emsdevice->device_id() == EMSESP::actual_master_thermostat()))) { - has_value |= emsdevice->generate_values(output, tag, (id < 1), output_target); // use nested for id -1 and 0 + if (id > 0 || output_target == EMSdevice::OUTPUT_TARGET::API_VERBOSE) { + for (const auto & emsdevice : emsdevices) { + if (emsdevice && (emsdevice->device_type() == device_type)) { + has_value |= emsdevice->generate_values(output, tag, (id < 1), output_target); // use nested for id -1 and 0 + } + } + return has_value; + } + // for nested output add for each tag + for (tag = DeviceValueTAG::TAG_BOILER_DATA_WW; tag <= DeviceValueTAG::TAG_HS16; tag++) { + JsonObject output_hc = output; + bool nest_created = false; + for (const auto & emsdevice : emsdevices) { + if (emsdevice && (emsdevice->device_type() == device_type)) { + if (!nest_created && emsdevice->has_tag(tag)) { + output_hc = output.createNestedObject(EMSdevice::tag_to_string(tag)); + nest_created = true; + } + has_value |= emsdevice->generate_values(output_hc, tag, true, output_target); // use nested for id -1 and 0 + } } } - return has_value; } diff --git a/src/emsesp.h b/src/emsesp.h index 37d6053d8..1098a10d0 100644 --- a/src/emsesp.h +++ b/src/emsesp.h @@ -134,10 +134,6 @@ class EMSESP { static uint8_t count_devices(); static uint8_t device_index(const uint8_t device_type, const uint8_t unique_id); - static uint8_t actual_master_thermostat(); - static void actual_master_thermostat(const uint8_t device_id); - static uint8_t check_master_device(const uint8_t device_id, const uint16_t type_id, const bool read); - static bool get_device_value_info(JsonObject & root, const char * cmd, const int8_t id, const uint8_t devicetype); static void show_device_values(uuid::console::Shell & shell); @@ -261,7 +257,6 @@ class EMSESP { }; static std::vector device_library_; - static uint8_t actual_master_thermostat_; static uint16_t watch_id_; static uint8_t watch_; static uint16_t read_id_; diff --git a/src/helpers.cpp b/src/helpers.cpp index b06d0265c..5058d0938 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -52,7 +52,6 @@ char * Helpers::hextoa(char * result, const uint16_t value) { return result; } - // same as above but to a hex string std::string Helpers::hextoa(const uint16_t value, bool prefix) { char buf[5]; diff --git a/src/locale_DE.h b/src/locale_DE.h index 7a668d1c2..340cc52a3 100644 --- a/src/locale_DE.h +++ b/src/locale_DE.h @@ -65,8 +65,6 @@ MAKE_PSTR_WORD(reconnect) MAKE_PSTR_WORD(ssid) MAKE_PSTR_WORD(heartbeat) MAKE_PSTR_WORD(users) -MAKE_PSTR_WORD(master) -MAKE_PSTR_WORD(pin) MAKE_PSTR_WORD(publish) MAKE_PSTR_WORD(timeout) MAKE_PSTR_WORD(board_profile) @@ -105,7 +103,6 @@ MAKE_PSTR_WORD(unknown) MAKE_PSTR_WORD(dallassensor) // format strings -MAKE_PSTR(master_thermostat_fmt, "Master Thermostat Device ID: %s") MAKE_PSTR(host_fmt, "Host: %s") MAKE_PSTR(port_fmt, "Port: %d") MAKE_PSTR(hostname_fmt, "Hostname: %s") @@ -206,9 +203,9 @@ MAKE_PSTR(l, "l") // mqtt tags must not have spaces MAKE_PSTR(tag_none, "") MAKE_PSTR(tag_heartbeat, "") -MAKE_PSTR(tag_boiler_data, "") -MAKE_PSTR(tag_device_data_ww, "Warmwasser") -MAKE_PSTR(tag_thermostat_data, "") +MAKE_PSTR(tag_boiler_data_ww, "ww") +MAKE_PSTR(tag_device_data, "") +MAKE_PSTR(tag_device_data_ww, "ww") MAKE_PSTR(tag_hc1, "hc1") MAKE_PSTR(tag_hc2, "hc2") MAKE_PSTR(tag_hc3, "hc3") @@ -246,8 +243,8 @@ MAKE_PSTR(tag_hs16, "hs16") // MQTT topic names // MAKE_PSTR(tag_heartbeat_mqtt, "heartbeat") -MAKE_PSTR(tag_boiler_data_mqtt, "") -MAKE_PSTR(tag_device_data_ww_mqtt, "ww") +MAKE_PSTR(tag_boiler_data_ww_mqtt, "ww") +MAKE_PSTR(tag_device_data_ww_mqtt, "") // boiler MAKE_PSTR(time, "Zeit") diff --git a/src/locale_EN.h b/src/locale_EN.h index 677a3e104..91972d680 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -65,8 +65,6 @@ MAKE_PSTR_WORD(reconnect) MAKE_PSTR_WORD(ssid) MAKE_PSTR_WORD(heartbeat) MAKE_PSTR_WORD(users) -MAKE_PSTR_WORD(master) -MAKE_PSTR_WORD(pin) MAKE_PSTR_WORD(publish) MAKE_PSTR_WORD(timeout) MAKE_PSTR_WORD(board_profile) @@ -105,7 +103,6 @@ MAKE_PSTR_WORD(unknown) MAKE_PSTR_WORD(dallassensor) // format strings -MAKE_PSTR(master_thermostat_fmt, "Master Thermostat device ID: %s") MAKE_PSTR(host_fmt, "Host: %s") MAKE_PSTR(port_fmt, "Port: %d") MAKE_PSTR(hostname_fmt, "Hostname: %s") @@ -206,9 +203,9 @@ MAKE_PSTR(l, "l") // mqtt tags must not have spaces MAKE_PSTR(tag_none, "") MAKE_PSTR(tag_heartbeat, "") -MAKE_PSTR(tag_boiler_data, "") +MAKE_PSTR(tag_boiler_data_ww, "dhw") +MAKE_PSTR(tag_device_data, "") MAKE_PSTR(tag_device_data_ww, "dhw") -MAKE_PSTR(tag_thermostat_data, "") MAKE_PSTR(tag_hc1, "hc1") MAKE_PSTR(tag_hc2, "hc2") MAKE_PSTR(tag_hc3, "hc3") @@ -246,8 +243,9 @@ MAKE_PSTR(tag_hs16, "hs16") // MQTT topic names // MAKE_PSTR(tag_heartbeat_mqtt, "heartbeat") -MAKE_PSTR(tag_boiler_data_mqtt, "") -MAKE_PSTR(tag_device_data_ww_mqtt, "ww") +// MAKE_PSTR(tag_boiler_data_mqtt, "") +MAKE_PSTR(tag_boiler_data_ww_mqtt, "ww") +MAKE_PSTR(tag_device_data_ww_mqtt, "") // boiler MAKE_PSTR_WORD(time) diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 8096285f9..547dcf8e2 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -1329,8 +1329,7 @@ std::string Mqtt::tag_to_topic(uint8_t device_type, uint8_t tag) { } // if there is a tag add it - if (!EMSdevice::tag_to_mqtt(tag).empty() - && ((device_type == EMSdevice::DeviceType::BOILER && tag == DeviceValueTAG::TAG_DEVICE_DATA_WW) || (!is_nested() && tag >= DeviceValueTAG::TAG_HC1))) { + if (!EMSdevice::tag_to_mqtt(tag).empty() && ((tag == DeviceValueTAG::TAG_BOILER_DATA_WW) || (!is_nested() && tag >= DeviceValueTAG::TAG_HC1))) { return EMSdevice::device_type_2_device_name(device_type) + "_data_" + EMSdevice::tag_to_mqtt(tag); } else { return EMSdevice::device_type_2_device_name(device_type) + "_data"; diff --git a/src/system.cpp b/src/system.cpp index 4f20bd4a6..dbbb132ea 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -995,8 +995,6 @@ bool System::command_settings(const char * value, const int8_t id, JsonObject & node["syslog_host"] = settings.syslog_host; node["syslog_port"] = settings.syslog_port; - node["master_thermostat"] = settings.master_thermostat; - node["shower_timer"] = settings.shower_timer; node["shower_alert"] = settings.shower_alert; if (settings.shower_alert) { diff --git a/src/telegram.cpp b/src/telegram.cpp index 6e2ae85f2..5624ead2a 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -221,9 +221,6 @@ void RxService::add(uint8_t * data, uint8_t length) { return; } - // if we receive a hc2.. telegram from 0x19.. match it to master_thermostat if master is 0x18 - src = EMSESP::check_master_device(src, type_id, true); - // create the telegram auto telegram = std::make_shared(operation, src, dest, type_id, offset, message_data, message_length); @@ -312,9 +309,6 @@ void TxService::send_telegram(const QueuedTxTelegram & tx_telegram) { // fix the READ or WRITE depending on the operation uint8_t dest = telegram->dest; - // check if we have to manipulate the id for thermostats > 0x18 - dest = EMSESP::check_master_device(dest, telegram->type_id, false); - if (telegram->operation == Telegram::Operation::TX_READ) { dest |= 0x80; // read has 8th bit set for the destination } diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index c167406dc..46b0a98bd 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -45,7 +45,6 @@ void WebSettings::read(WebSettings & settings, JsonObject & root) { root["syslog_mark_interval"] = settings.syslog_mark_interval; root["syslog_host"] = settings.syslog_host; root["syslog_port"] = settings.syslog_port; - root["master_thermostat"] = settings.master_thermostat; root["shower_timer"] = settings.shower_timer; root["shower_alert"] = settings.shower_alert; root["shower_alert_coldshot"] = settings.shower_alert_coldshot; @@ -204,10 +203,6 @@ StateUpdateResult WebSettings::update(JsonObject & root, WebSettings & settings) settings.low_clock = root["low_clock"] | false; check_flag(prev, settings.low_clock, ChangeFlags::RESTART); - prev = settings.master_thermostat; - settings.master_thermostat = root["master_thermostat"] | EMSESP_DEFAULT_MASTER_THERMOSTAT; - check_flag(prev, settings.master_thermostat, ChangeFlags::RESTART); - // // without checks... // diff --git a/src/web/WebSettingsService.h b/src/web/WebSettingsService.h index 2530bd4ac..299f4a428 100644 --- a/src/web/WebSettingsService.h +++ b/src/web/WebSettingsService.h @@ -31,7 +31,6 @@ class WebSettings { public: uint8_t tx_mode; uint8_t ems_bus_id; - uint8_t master_thermostat; bool shower_timer; bool shower_alert; uint8_t shower_alert_trigger;