From abbba0aa42e9783780672e8cc8992cde7ec4d421 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 13 Apr 2026 20:57:20 +0200 Subject: [PATCH] telegram length for fetched telegrams --- src/devices/boiler.cpp | 54 ++++++++++----------- src/devices/connect.cpp | 4 +- src/devices/extension.cpp | 2 +- src/devices/heatpump.cpp | 8 ++-- src/devices/heatsource.cpp | 2 +- src/devices/mixer.cpp | 2 +- src/devices/pool.cpp | 2 +- src/devices/solar.cpp | 31 +++++------- src/devices/thermostat.cpp | 94 ++++++++++++++++++------------------- src/devices/ventilation.cpp | 4 +- src/devices/water.cpp | 12 ++--- 11 files changed, 105 insertions(+), 110 deletions(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 66c9505d2..1c40b9ff3 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -35,7 +35,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x11, "UBAErrorMessage2", false, MAKE_PF_CB(process_UBAErrorMessage)); register_telegram_type(0xC2, "UBAErrorMessage3", false, MAKE_PF_CB(process_UBAErrorMessage2)); register_telegram_type(0xC6, "UBAErrorMessage3", false, MAKE_PF_CB(process_UBAErrorMessage3)); - register_telegram_type(0x14, "UBATotalUptime", true, MAKE_PF_CB(process_UBATotalUptime)); + register_telegram_type(0x14, "UBATotalUptime", true, MAKE_PF_CB(process_UBATotalUptime), 3); register_telegram_type(0x15, "UBAMaintenanceData", false, MAKE_PF_CB(process_UBAMaintenanceData)); register_telegram_type(0x1C, "UBAMaintenanceStatus", false, MAKE_PF_CB(process_UBAMaintenanceStatus)); @@ -46,13 +46,13 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x35, "UBAFlags", false, MAKE_PF_CB(process_UBAFlags)); // only EMS 1.0 - register_telegram_type(0x16, "UBAParameters", true, MAKE_PF_CB(process_UBAParameters)); - register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_UBAParameterWW)); + register_telegram_type(0x16, "UBAParameters", true, MAKE_PF_CB(process_UBAParameters), 27); + register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_UBAParameterWW), 11); register_telegram_type(0x34, "UBAMonitorWW", false, MAKE_PF_CB(process_UBAMonitorWW)); // not ems1.0, but HT3 if (model() != EMSdevice::EMS_DEVICE_FLAG_EMS) { - register_telegram_type(0x27, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW)); + register_telegram_type(0x27, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW), 11); register_telegram_type(0x2A, "MC110Status", false, MAKE_PF_CB(process_MC110Status)); } @@ -62,39 +62,39 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0xE3, "UBAMonitorSlowPlus2", false, MAKE_PF_CB(process_UBAMonitorSlowPlus2)); register_telegram_type(0xE4, "UBAMonitorFastPlus", false, MAKE_PF_CB(process_UBAMonitorFastPlus)); register_telegram_type(0xE5, "UBAMonitorSlowPlus", false, MAKE_PF_CB(process_UBAMonitorSlowPlus)); - register_telegram_type(0xE6, "UBAParametersPlus", true, MAKE_PF_CB(process_UBAParametersPlus)); + register_telegram_type(0xE6, "UBAParametersPlus", true, MAKE_PF_CB(process_UBAParametersPlus), 25); register_telegram_type(0xE9, "UBAMonitorWWPlus", false, MAKE_PF_CB(process_UBAMonitorWWPlus)); - register_telegram_type(0xEA, "UBAParameterWWPlus", true, MAKE_PF_CB(process_UBAParameterWWPlus)); - register_telegram_type(0xEB, "PumpKick", true, MAKE_PF_CB(process_PumpKick)); - register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp)); + register_telegram_type(0xEA, "UBAParameterWWPlus", true, MAKE_PF_CB(process_UBAParameterWWPlus), 28); + register_telegram_type(0xEB, "PumpKick", true, MAKE_PF_CB(process_PumpKick), 4); + register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp), 6); register_telegram_type(0x2E0, "UBASetPoints", false, MAKE_PF_CB(process_UBASetPoints2)); - register_telegram_type(0x2CC, "HPPressure", true, MAKE_PF_CB(process_HpPressure)); + register_telegram_type(0x2CC, "HPPressure", true, MAKE_PF_CB(process_HpPressure), 10); } if (isHeatPump()) { register_telegram_type(0x494, "UBAEnergySupplied", false, MAKE_PF_CB(process_UBAEnergySupplied)); register_telegram_type(0x495, "UBAInformation", false, MAKE_PF_CB(process_UBAInformation)); - register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower)); + register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower), 20); register_telegram_type(0x48F, "HpTemperatures", false, MAKE_PF_CB(process_HpTemperatures)); - register_telegram_type(0x48A, "HpPool", true, MAKE_PF_CB(process_HpPool)); + register_telegram_type(0x48A, "HpPool", true, MAKE_PF_CB(process_HpPool), 2); register_telegram_type(0x4A2, "HpInput", true, MAKE_PF_CB(process_HpInput)); - register_telegram_type(0x485, "HpCooling", true, MAKE_PF_CB(process_HpCooling)); - register_telegram_type(0x486, "HpInConfig", true, MAKE_PF_CB(process_HpInConfig)); + register_telegram_type(0x485, "HpCooling", true, MAKE_PF_CB(process_HpCooling), 22); + register_telegram_type(0x486, "HpInConfig", true, MAKE_PF_CB(process_HpInConfig), 53); - register_telegram_type(0x492, "HpHeaterConfig", true, MAKE_PF_CB(process_HpHeaterConfig)); - register_telegram_type(0x488, "HPValve", true, MAKE_PF_CB(process_HpValve)); + register_telegram_type(0x492, "HpHeaterConfig", true, MAKE_PF_CB(process_HpHeaterConfig), 5); + register_telegram_type(0x488, "HPValve", true, MAKE_PF_CB(process_HpValve), 14); register_telegram_type(0x484, "HPSilentMode", true, MAKE_PF_CB(process_HpSilentMode), 65); - register_telegram_type(0x48B, "HPPumps", true, MAKE_PF_CB(process_HpPumps)); - register_telegram_type(0x491, "HPAdditionalHeater", true, MAKE_PF_CB(process_HpAdditionalHeater)); - register_telegram_type(0x499, "HPDhwSettings", true, MAKE_PF_CB(process_HpDhwSettings)); - register_telegram_type(0x49C, "HPSettings2", true, MAKE_PF_CB(process_HpSettings2)); - register_telegram_type(0x49D, "HPSettings3", true, MAKE_PF_CB(process_HpSettings3)); - register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy)); - register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters)); - register_telegram_type(0x4A5, "HPFan", true, MAKE_PF_CB(process_HpFan)); - register_telegram_type(0x4AA, "HPPower2", true, MAKE_PF_CB(process_HpPower2)); - register_telegram_type(0x4A7, "HPPowerLimit", true, MAKE_PF_CB(process_HpPowerLimit)); - register_telegram_type(0x2D6, "HPPump2", true, MAKE_PF_CB(process_HpPump2)); + register_telegram_type(0x48B, "HPPumps", true, MAKE_PF_CB(process_HpPumps), 19); + register_telegram_type(0x491, "HPAdditionalHeater", true, MAKE_PF_CB(process_HpAdditionalHeater), 18); + register_telegram_type(0x499, "HPDhwSettings", true, MAKE_PF_CB(process_HpDhwSettings), 15); + register_telegram_type(0x49C, "HPSettings2", true, MAKE_PF_CB(process_HpSettings2), 4); + register_telegram_type(0x49D, "HPSettings3", true, MAKE_PF_CB(process_HpSettings3), 12); + register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy), 32); + register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters), 56); + register_telegram_type(0x4A5, "HPFan", true, MAKE_PF_CB(process_HpFan), 15); + register_telegram_type(0x4AA, "HPPower2", true, MAKE_PF_CB(process_HpPower2), 2); + register_telegram_type(0x4A7, "HPPowerLimit", true, MAKE_PF_CB(process_HpPowerLimit), 2); + register_telegram_type(0x2D6, "HPPump2", true, MAKE_PF_CB(process_HpPump2), 11); } // some gas boilers, see #1701 @@ -1139,7 +1139,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const if (!isHeatPump() && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { - register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory)); + register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory), 21); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nomPower_, DeviceValueType::UINT8, FL_(nomPower), DeviceValueUOM::KW, MAKE_CF_CB(set_nomPower)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgTotal_, diff --git a/src/devices/connect.cpp b/src/devices/connect.cpp index a3e22af38..068a91342 100644 --- a/src/devices/connect.cpp +++ b/src/devices/connect.cpp @@ -40,8 +40,8 @@ Connect::Connect(uint8_t device_type, uint8_t device_id, uint8_t product_id, con // Roomthermostats for (uint8_t i = 0; i < 16; i++) { register_telegram_type(0x0BDD + i, "Room", false, MAKE_PF_CB(process_roomThermostat)); // broadcasted - register_telegram_type(0x0B3D + i, "Roomname", false, MAKE_PF_CB(process_roomThermostatName)); // fetch for active circuits - register_telegram_type(0x0BB5 + i, "Roomsettings", false, MAKE_PF_CB(process_roomThermostatSettings)); // fetch for active circuits + register_telegram_type(0x0B3D + i, "Roomname", false, MAKE_PF_CB(process_roomThermostatName), 100); // fetch for active circuits + register_telegram_type(0x0BB5 + i, "Roomsettings", false, MAKE_PF_CB(process_roomThermostatSettings), 8); // fetch for active circuits register_telegram_type(0x1230 + i, "Roomparams", false, MAKE_PF_CB(process_roomThermostatParam)); // fetch for active circuits register_telegram_type(0x1244 + i, "Roomdata", false, MAKE_PF_CB(process_roomThermostatData)); // broadcasted } diff --git a/src/devices/extension.cpp b/src/devices/extension.cpp index f3475759b..be0f0c2e6 100644 --- a/src/devices/extension.cpp +++ b/src/devices/extension.cpp @@ -29,7 +29,7 @@ Extension::Extension(uint8_t device_type, uint8_t device_id, uint8_t product_id, return; } // Extension module EM100 device_id 0x12 - register_telegram_type(0x935, "EM100SetMessage", true, MAKE_PF_CB(process_EM100SetMessage)); + register_telegram_type(0x935, "EM100SetMessage", true, MAKE_PF_CB(process_EM100SetMessage), 5); register_telegram_type(0x936, "EM100OutMessage", false, MAKE_PF_CB(process_EM100OutMessage)); register_telegram_type(0x937, "EM100TempMessage", false, MAKE_PF_CB(process_EM100TempMessage)); register_telegram_type(0x938, "EM100InputMessage", false, MAKE_PF_CB(process_EM100InputMessage)); diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index 76dc4c1be..aa59ff97a 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -28,13 +28,13 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c // register_telegram_type(0x042B, "HP1", false, MAKE_PF_CB(process_HPMonitor1)); register_telegram_type(0x047B, "HP2", false, MAKE_PF_CB(process_HPMonitor2)); - register_telegram_type(0x998, "HPSettings", true, MAKE_PF_CB(process_HPSettings)); - register_telegram_type(0x999, "HPFunctionTest", true, MAKE_PF_CB(process_HPFunctionTest)); + register_telegram_type(0x998, "HPSettings", true, MAKE_PF_CB(process_HPSettings), 20); + register_telegram_type(0x999, "HPFunctionTest", true, MAKE_PF_CB(process_HPFunctionTest), 11); register_telegram_type(0x9A0, "HPTemperature", false, MAKE_PF_CB(process_HPTemperature)); register_telegram_type(0x99B, "HPFlowTemp", false, MAKE_PF_CB(process_HPFlowTemp)); register_telegram_type(0x99C, "HPComp", false, MAKE_PF_CB(process_HPComp)); - register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy)); - register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters)); + register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy), 32); + register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters), 56); register_telegram_type(0x99A, "HPStarts", false, MAKE_PF_CB(process_HpStarts)); register_telegram_type(0x12E, "HPEnergy1", false, MAKE_PF_CB(process_HpEnergy1)); register_telegram_type(0x13B, "HPEnergy2", false, MAKE_PF_CB(process_HpEnergy2)); diff --git a/src/devices/heatsource.cpp b/src/devices/heatsource.cpp index 292846da3..1487b5406 100644 --- a/src/devices/heatsource.cpp +++ b/src/devices/heatsource.cpp @@ -33,7 +33,7 @@ Heatsource::Heatsource(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x54E, "AmStatus", false, MAKE_PF_CB(process_amStatusMessage)); register_telegram_type(0x54F, "AmCommand", false, MAKE_PF_CB(process_amCommandMessage)); // not broadcasted, but actually not used register_telegram_type(0x550, "AmExtra", false, MAKE_PF_CB(process_amExtraMessage)); - register_telegram_type(0x54C, "AmSettings", true, MAKE_PF_CB(process_amSettingMessage)); // not broadcasted + register_telegram_type(0x54C, "AmSettings", true, MAKE_PF_CB(process_amSettingMessage), 23); // not broadcasted register_device_value(tag, &curFlowTemp_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(sysFlowTemp), DeviceValueUOM::DEGREES); register_device_value(tag, &retTemp_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(sysRetTemp), DeviceValueUOM::DEGREES); diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 4dccb32c8..4d521f90b 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -56,7 +56,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c // EMS 1.0 if (flags == EMSdevice::EMS_DEVICE_FLAG_MM10) { - register_telegram_type(0x00AA, "MMConfigMessage", true, MAKE_PF_CB(process_MMConfigMessage)); + register_telegram_type(0x00AA, "MMConfigMessage", true, MAKE_PF_CB(process_MMConfigMessage), 10); register_telegram_type(0x00AB, "MMStatusMessage", false, MAKE_PF_CB(process_MMStatusMessage)); register_telegram_type(0x00AC, "MMSetMessage", false, MAKE_PF_CB(process_MMSetMessage)); register_device_value(tag, &flowTempHc_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(flowTempHc), DeviceValueUOM::DEGREES); diff --git a/src/devices/pool.cpp b/src/devices/pool.cpp index 0cfc559fb..f3dc95e17 100644 --- a/src/devices/pool.cpp +++ b/src/devices/pool.cpp @@ -27,7 +27,7 @@ uuid::log::Logger Pool::logger_{F_(pool), uuid::log::Facility::CONSOLE}; Pool::Pool(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // Pool module - register_telegram_type(0x5BA, "HpPoolStatus", true, MAKE_PF_CB(process_HpPoolStatus)); + register_telegram_type(0x5BA, "HpPoolStatus", true, MAKE_PF_CB(process_HpPoolStatus), 4); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolTemp_, DeviceValueType::INT16, diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 4746487b5..8d40ca5ed 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -29,32 +29,32 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c // telegram handlers if (flags == EMSdevice::EMS_DEVICE_FLAG_SM10) { register_telegram_type(0x97, "SM10Monitor", false, MAKE_PF_CB(process_SM10Monitor)); - register_telegram_type(0x96, "SM10Config", true, MAKE_PF_CB(process_SM10Config)); + register_telegram_type(0x96, "SM10Config", true, MAKE_PF_CB(process_SM10Config), 15); EMSESP::send_read_request(0x97, device_id); } if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { // F9 is not a telegram type, it's a flag for configure // register_telegram_type(0xF9, "ParamCfg", false, MAKE_PF_CB(process_SM100ParamCfg)); - register_telegram_type(0x0358, "SM100SystemConfig", true, MAKE_PF_CB(process_SM100SystemConfig)); - register_telegram_type(0x035A, "SM100CircuitConfig", true, MAKE_PF_CB(process_SM100CircuitConfig)); - register_telegram_type(0x035D, "SM100Circuit2Config", true, MAKE_PF_CB(process_SM100Circuit2Config)); + register_telegram_type(0x0358, "SM100SystemConfig", true, MAKE_PF_CB(process_SM100SystemConfig), 32); + register_telegram_type(0x035A, "SM100CircuitConfig", true, MAKE_PF_CB(process_SM100CircuitConfig), 14); + register_telegram_type(0x035D, "SM100Circuit2Config", true, MAKE_PF_CB(process_SM100Circuit2Config), 12); register_telegram_type(0x0362, "SM100Monitor", false, MAKE_PF_CB(process_SM100Monitor)); register_telegram_type(0x0363, "SM100Monitor2", false, MAKE_PF_CB(process_SM100Monitor2)); register_telegram_type(0x0366, "SM100Config", false, MAKE_PF_CB(process_SM100Config)); register_telegram_type(0x0364, "SM100Status", false, MAKE_PF_CB(process_SM100Status)); register_telegram_type(0x036A, "SM100Status2", false, MAKE_PF_CB(process_SM100Status2)); - register_telegram_type(0x0380, "SM100CollectorConfig", true, MAKE_PF_CB(process_SM100CollectorConfig)); - register_telegram_type(0x038E, "SM100Energy", true, MAKE_PF_CB(process_SM100Energy)); - register_telegram_type(0x0391, "SM100Time", true, MAKE_PF_CB(process_SM100Time)); - register_telegram_type(0x035F, "SM100Config1", true, MAKE_PF_CB(process_SM100Config1)); - register_telegram_type(0x035C, "SM100HeatAssist", true, MAKE_PF_CB(process_SM100HeatAssist)); - register_telegram_type(0x0361, "SM100Differential", true, MAKE_PF_CB(process_SM100Differential)); + register_telegram_type(0x0380, "SM100CollectorConfig", true, MAKE_PF_CB(process_SM100CollectorConfig), 9); + register_telegram_type(0x038E, "SM100Energy", true, MAKE_PF_CB(process_SM100Energy), 12); + register_telegram_type(0x0391, "SM100Time", true, MAKE_PF_CB(process_SM100Time), 48); + register_telegram_type(0x035F, "SM100Config1", true, MAKE_PF_CB(process_SM100Config1), 11); + register_telegram_type(0x035C, "SM100HeatAssist", true, MAKE_PF_CB(process_SM100HeatAssist), 2); + register_telegram_type(0x0361, "SM100Differential", true, MAKE_PF_CB(process_SM100Differential), 1); } if (flags == EMSdevice::EMS_DEVICE_FLAG_ISM) { - register_telegram_type(0x0103, "ISM1StatusMessage", true, MAKE_PF_CB(process_ISM1StatusMessage)); - register_telegram_type(0x0101, "ISM1Set", true, MAKE_PF_CB(process_ISM1Set)); + register_telegram_type(0x0103, "ISM1StatusMessage", true, MAKE_PF_CB(process_ISM1StatusMessage), 14); + register_telegram_type(0x0101, "ISM1Set", true, MAKE_PF_CB(process_ISM1Set), 7); register_telegram_type(0x0104, "ISM2StatusMessage", false, MAKE_PF_CB(process_ISM2StatusMessage)); } @@ -190,12 +190,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueNumOp::DV_NUMOP_DIV10, FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, - &ts3_, - DeviceValueType::INT16, - DeviceValueNumOp::DV_NUMOP_DIV10, - FL_(ts3), - DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ts3_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(ts3), DeviceValueUOM::DEGREES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &retHeatAssist_, DeviceValueType::INT16, diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 95170fbb7..b2aec1186 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -36,11 +36,11 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x042B + device_id - 0x38, "RemoteTemp", false, MAKE_PF_CB(process_RemoteTemp)); if (product_id != Roomctrl::RC200) { register_telegram_type(0x047B + device_id - 0x38, "RemoteHumidity", false, MAKE_PF_CB(process_RemoteHumidity)); - register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection), 1); + register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery), 2); // maybe fixed type for these telegrams? - // register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - // register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + // register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection), 1); + // register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery), 2); } register_device_values(); // register device values for common values (not heating circuit) return; // no values to add @@ -78,8 +78,8 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(timer_typeids[i], "RC35Timer", false, MAKE_PF_CB(process_RC35Timer)); register_telegram_type(timer2_typeids[i], "RC35Timer2", false, MAKE_PF_CB(process_RC35Timer)); } - register_telegram_type(EMS_TYPE_IBASettings, "IBASettings", true, MAKE_PF_CB(process_IBASettings)); - register_telegram_type(EMS_TYPE_wwSettings, "WWSettings", true, MAKE_PF_CB(process_RC35wwSettings)); + register_telegram_type(EMS_TYPE_IBASettings, "IBASettings", true, MAKE_PF_CB(process_IBASettings), 22); + register_telegram_type(EMS_TYPE_wwSettings, "WWSettings", true, MAKE_PF_CB(process_RC35wwSettings), 10); register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer)); register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer)); @@ -123,22 +123,22 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i timer_typeids = {0x3F}; const size_t size = monitor_typeids.size(); for (uint8_t i = 0; i < size; i++) { - register_telegram_type(monitor_typeids[i], "RC30Monitor", false, MAKE_PF_CB(process_RC30Monitor)); - register_telegram_type(set_typeids[i], "RC30Set", false, MAKE_PF_CB(process_RC30Set)); - register_telegram_type(curve_typeids[i], "RC30Temp", false, MAKE_PF_CB(process_RC30Temp)); - register_telegram_type(timer_typeids[i], "RC30Timer", false, MAKE_PF_CB(process_RC35Timer)); + register_telegram_type(monitor_typeids[i], "RC30Monitor", false, MAKE_PF_CB(process_RC30Monitor), 14); + register_telegram_type(set_typeids[i], "RC30Set", false, MAKE_PF_CB(process_RC30Set), 31); + register_telegram_type(curve_typeids[i], "RC30Temp", false, MAKE_PF_CB(process_RC30Temp), 25); + register_telegram_type(timer_typeids[i], "RC30Timer", false, MAKE_PF_CB(process_RC35Timer), 99); } register_telegram_type(0xA9, "RC30Vacation", true, MAKE_PF_CB(process_RC30Vacation)); register_telegram_type(EMS_TYPE_RC30wwSettings, "RC30WWSettings", true, MAKE_PF_CB(process_RC30wwSettings)); - register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer)); - register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer)); + register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); + register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); // EASY } else if (model == EMSdevice::EMS_DEVICE_FLAG_EASY) { monitor_typeids = {0x0A}; set_typeids.clear(); - register_telegram_type(monitor_typeids[0], "EasyMonitor", true, MAKE_PF_CB(process_EasyMonitor)); - register_telegram_type(0x02A5, "EasyMonitor", false, MAKE_PF_CB(process_EasyMonitor)); + register_telegram_type(monitor_typeids[0], "EasyMonitor", true, MAKE_PF_CB(process_EasyMonitor), 12); + register_telegram_type(0x02A5, "EasyMonitor", false, MAKE_PF_CB(process_EasyMonitor), 7); // CRF } else if (model == EMSdevice::EMS_DEVICE_FLAG_CRF) { @@ -146,16 +146,16 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i set_typeids.clear(); const size_t size = monitor_typeids.size(); for (uint8_t i = 0; i < size; i++) { - register_telegram_type(monitor_typeids[i], "CRFMonitor", false, MAKE_PF_CB(process_CRFMonitor)); + register_telegram_type(monitor_typeids[i], "CRFMonitor", false, MAKE_PF_CB(process_CRFMonitor), 7); } } else if (model == EMSdevice::EMS_DEVICE_FLAG_CR11) { monitor_typeids = {0x02A5}; set_typeids = {0x02B9}; curve_typeids = {0x029B}; - register_telegram_type(monitor_typeids[0], "RC300Monitor", true, MAKE_PF_CB(process_CR11Monitor)); - register_telegram_type(set_typeids[0], "RC300Set", false, MAKE_PF_CB(process_RC300Set)); - register_telegram_type(curve_typeids[0], "RC300Curves", true, MAKE_PF_CB(process_RC300Curve)); + register_telegram_type(monitor_typeids[0], "RC300Monitor", true, MAKE_PF_CB(process_CR11Monitor), 7); + register_telegram_type(set_typeids[0], "RC300Set", false, MAKE_PF_CB(process_RC300Set), 29); + register_telegram_type(curve_typeids[0], "RC300Curves", true, MAKE_PF_CB(process_RC300Curve), 9); // RC300/RC100 variants } else if (isRC300() || (model == EMSdevice::EMS_DEVICE_FLAG_RC100)) { @@ -171,40 +171,40 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i hpmode_typeids = {0x0291, 0x0292, 0x0293, 0x0294}; const size_t monitor_size = monitor_typeids.size(); for (uint8_t i = 0; i < monitor_size; i++) { - register_telegram_type(monitor_typeids[i], "RC300Monitor", false, MAKE_PF_CB(process_RC300Monitor)); - register_telegram_type(set_typeids[i], "RC300Set", false, MAKE_PF_CB(process_RC300Set)); - register_telegram_type(summer_typeids[i], "RC300Summer", false, MAKE_PF_CB(process_RC300Summer)); - register_telegram_type(curve_typeids[i], "RC300Curves", false, MAKE_PF_CB(process_RC300Curve)); - register_telegram_type(summer2_typeids[i], "RC300Summer2", false, MAKE_PF_CB(process_RC300Summer2)); + register_telegram_type(monitor_typeids[i], "RC300Monitor", false, MAKE_PF_CB(process_RC300Monitor), 33); + register_telegram_type(set_typeids[i], "RC300Set", false, MAKE_PF_CB(process_RC300Set), 29); + register_telegram_type(summer_typeids[i], "RC300Summer", false, MAKE_PF_CB(process_RC300Summer), 13); + register_telegram_type(curve_typeids[i], "RC300Curves", false, MAKE_PF_CB(process_RC300Curve), 9); + register_telegram_type(summer2_typeids[i], "RC300Summer2", false, MAKE_PF_CB(process_RC300Summer2), 8); } const size_t set2_size = set2_typeids.size(); for (uint8_t i = 0; i < set2_size; i++) { // register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_RC300Set2)); - register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_PID)); - register_telegram_type(hp_typeids[i], "HPSet", false, MAKE_PF_CB(process_HPSet)); - register_telegram_type(hpmode_typeids[i], "HPMode", true, MAKE_PF_CB(process_HPMode)); + register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_PID), 4); + register_telegram_type(hp_typeids[i], "HPSet", false, MAKE_PF_CB(process_HPSet), 5); + register_telegram_type(hpmode_typeids[i], "HPMode", true, MAKE_PF_CB(process_HPMode), 6); } - register_telegram_type(0x2F5, "RC300WWmode", true, MAKE_PF_CB(process_RC300WWmode)); - register_telegram_type(0x2F6, "RC300WW2mode", true, MAKE_PF_CB(process_RC300WWmode)); - register_telegram_type(0x31B, "RC300WWtemp", true, MAKE_PF_CB(process_RC300WWtemp)); - register_telegram_type(0x31D, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2)); - register_telegram_type(0x31E, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2)); - register_telegram_type(0x23A, "RC300OutdoorTemp", true, MAKE_PF_CB(process_RC300OutdoorTemp)); - register_telegram_type(0x267, "RC300Floordry", false, MAKE_PF_CB(process_RC300Floordry)); + register_telegram_type(0x2F5, "RC300WWmode", true, MAKE_PF_CB(process_RC300WWmode), 21); + register_telegram_type(0x2F6, "RC300WW2mode", true, MAKE_PF_CB(process_RC300WWmode), 21); + register_telegram_type(0x31B, "RC300WWtemp", true, MAKE_PF_CB(process_RC300WWtemp), 2); + register_telegram_type(0x31D, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2), 9); + register_telegram_type(0x31E, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2), 9); + register_telegram_type(0x23A, "RC300OutdoorTemp", true, MAKE_PF_CB(process_RC300OutdoorTemp), 2); + register_telegram_type(0x267, "RC300Floordry", false, MAKE_PF_CB(process_RC300Floordry), 2); if (model == EMSdevice::EMS_DEVICE_FLAG_RC100) { - register_telegram_type(0x241, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings)); + register_telegram_type(0x241, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings), 23); } else { - register_telegram_type(0x240, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings)); + register_telegram_type(0x240, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings), 23); } - register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings)); - register_telegram_type(0x23E, "PVSettings", true, MAKE_PF_CB(process_PVSettings)); + register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings), 20); + register_telegram_type(0x23E, "PVSettings", true, MAKE_PF_CB(process_PVSettings), 6); if (model == EMSdevice::EMS_DEVICE_FLAG_RC100) { - register_telegram_type(0x43F, "CRHolidays", true, MAKE_PF_CB(process_RC300Holiday)); + register_telegram_type(0x43F, "CRHolidays", true, MAKE_PF_CB(process_RC300Holiday), 6); } else { - register_telegram_type(0x269, "RC300Holiday", true, MAKE_PF_CB(process_RC300Holiday)); + register_telegram_type(0x269, "RC300Holiday", true, MAKE_PF_CB(process_RC300Holiday), 6); } - register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent)); + register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent), 1); register_telegram_type(0xBF, "ErrorMessage", false, MAKE_PF_CB(process_ErrorMessageBF)); register_telegram_type(0xC0, "RCErrorMessage", false, MAKE_PF_CB(process_RCErrorMessage2)); EMSESP::send_read_request(0xC0, device_id, 0, 20); // read last errorcode on start (only published on errors) @@ -220,25 +220,25 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i monitor_typeids = {0x016F, 0x0170, 0x0171, 0x0172}; const size_t junkers_size = monitor_typeids.size(); for (uint8_t i = 0; i < junkers_size; i++) { - register_telegram_type(monitor_typeids[i], "JunkersMonitor", false, MAKE_PF_CB(process_JunkersMonitor)); + register_telegram_type(monitor_typeids[i], "JunkersMonitor", false, MAKE_PF_CB(process_JunkersMonitor), 8); } if (has_flags(EMSdevice::EMS_DEVICE_FLAG_JUNKERS_OLD)) { // FR120, FR100 set_typeids = {0x0179, 0x017A, 0x017B, 0x017C}; for (uint8_t i = 0; i < junkers_size; i++) { - register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet2)); + register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet2), 11); } } else { set_typeids = {0x0165, 0x0166, 0x0167, 0x0168}; for (uint8_t i = 0; i < junkers_size; i++) { - register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet)); + register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet), 20); } } - register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings)); - register_telegram_type(0x23, "JunkersSetMixer", true, MAKE_PF_CB(process_JunkersSetMixer)); - register_telegram_type(0x1D3, "JunkersDhw", true, MAKE_PF_CB(process_JunkersWW)); - register_telegram_type(0x11E, "JunkersDisp", true, MAKE_PF_CB(process_JunkersDisp)); + register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings), 20); + register_telegram_type(0x23, "JunkersSetMixer", true, MAKE_PF_CB(process_JunkersSetMixer), 1); + register_telegram_type(0x1D3, "JunkersDhw", true, MAKE_PF_CB(process_JunkersWW), 3); + register_telegram_type(0x11E, "JunkersDisp", true, MAKE_PF_CB(process_JunkersDisp), 18); } // register device values for common values (not heating circuit) diff --git a/src/devices/ventilation.cpp b/src/devices/ventilation.cpp index 9d3a142da..8473b123d 100644 --- a/src/devices/ventilation.cpp +++ b/src/devices/ventilation.cpp @@ -25,12 +25,12 @@ REGISTER_FACTORY(Ventilation, EMSdevice::DeviceType::VENTILATION); Ventilation::Ventilation(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // HRV176 module, device_id 0x51 - register_telegram_type(0x56B, "VentilationMode", true, MAKE_PF_CB(process_ModeMessage)); + register_telegram_type(0x56B, "VentilationMode", true, MAKE_PF_CB(process_ModeMessage), 1); register_telegram_type(0x585, "Blowerspeed", false, MAKE_PF_CB(process_BlowerMessage)); register_telegram_type(0x583, "VentilationMonitor", false, MAKE_PF_CB(process_MonitorMessage)); register_telegram_type(0x5D9, "Airquality", false, MAKE_PF_CB(process_VOCMessage)); register_telegram_type(0x587, "Bypass", false, MAKE_PF_CB(process_BypassMessage)); - register_telegram_type(0x55C, "VentilationSet", true, MAKE_PF_CB(process_SetMessage)); + register_telegram_type(0x55C, "VentilationSet", true, MAKE_PF_CB(process_SetMessage), 2); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &outFresh_, diff --git a/src/devices/water.cpp b/src/devices/water.cpp index 22f198289..17bcdf75f 100644 --- a/src/devices/water.cpp +++ b/src/devices/water.cpp @@ -32,13 +32,13 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c // telegram handlers register_telegram_type(0x07D6 + dhw_ - 2, "SM100wwTemperature", false, MAKE_PF_CB(process_SM100wwTemperature)); - register_telegram_type(0x07E0 + dhw_ - 2, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2)); - register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam)); // same telegram for all circuits + register_telegram_type(0x07E0 + dhw_ - 2, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2), 10); + register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam), 20); // same telegram for all circuits if (tag == DeviceValueTAG::TAG_DHW3) { register_telegram_type(0x07AA, "SM100wwStatus", false, MAKE_PF_CB(process_SM100wwStatus)); register_telegram_type(0x07AC, "SM100wwParam1", false, MAKE_PF_CB(process_SM100wwParam2)); - register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc)); - register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm)); + register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc), 5); + register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm), 1); register_telegram_type(0x07AD, "SM100ValveStatus", false, MAKE_PF_CB(process_SM100ValveStatus)); register_telegram_type(0x07AB, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); // command from thermostat } else if (tag == DeviceValueTAG::TAG_DHW4) { @@ -70,7 +70,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c } else if (flags == EMSdevice::EMS_DEVICE_FLAG_MMPLUS) { // dhw1 and dhw 2 register_telegram_type(0x331 + dhw_, "MMPLUSStatusMessage_WWC", false, MAKE_PF_CB(process_MMPLUSStatusMessage_WWC)); - register_telegram_type(0x313 + dhw_, "MMPLUSConfigMessage_WWC", true, MAKE_PF_CB(process_MMPLUSConfigMessage_WWC)); + register_telegram_type(0x313 + dhw_, "MMPLUSConfigMessage_WWC", true, MAKE_PF_CB(process_MMPLUSConfigMessage_WWC), 11); // register_telegram_type(0x33B + type_offset, "MMPLUSSetMessage_WWC", true, MAKE_PF_CB(process_MMPLUSSetMessage_WWC)); // device values... register_device_value(tag, &wwTemp_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwTemp), DeviceValueUOM::DEGREES); @@ -88,7 +88,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c tag = DeviceValueTAG::TAG_DHW1; register_telegram_type(0x34, "UBAMonitorWW", false, MAKE_PF_CB(process_IPMMonitorWW)); register_telegram_type(0x1E, "HydrTemp", false, MAKE_PF_CB(process_IPMHydrTemp)); - register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_IPMParameterWW)); + register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_IPMParameterWW), 12); // register_telegram_type(0x10D, "wwNTCStatus", false, MAKE_PF_CB(process_wwNTCStatus)); // device values... register_device_value(tag, &wwSelTemp_, DeviceValueType::UINT8, FL_(wwSelTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwSelTemp));