@@ -29,16 +29,21 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c
2929 dhw_ = device_id - EMSdevice::EMS_DEVICE_ID_DHW1;
3030 int8_t tag = DeviceValueTAG::TAG_DHW1 + dhw_;
3131 if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { // device_id 0x2A, DHW3
32+
3233 // telegram handlers
33- register_telegram_type (0x07D6 , " SM100wwTemperature" , false , MAKE_PF_CB (process_SM100wwTemperature));
34- register_telegram_type (0x07AA , " SM100wwStatus" , false , MAKE_PF_CB (process_SM100wwStatus));
35- register_telegram_type (0x07AB , " SM100wwCommand" , false , MAKE_PF_CB (process_SM100wwCommand));
36- register_telegram_type (0x07AC , " SM100wwParam1" , false , MAKE_PF_CB (process_SM100wwParam2));
37- register_telegram_type (0x07A5 , " SM100wwCirc" , true , MAKE_PF_CB (process_SM100wwCirc));
38- register_telegram_type (0x07A6 , " SM100wwParam" , true , MAKE_PF_CB (process_SM100wwParam));
39- register_telegram_type (0x07AE , " SM100wwKeepWarm" , true , MAKE_PF_CB (process_SM100wwKeepWarm));
40- register_telegram_type (0x07E0 , " SM100wwStatus2" , true , MAKE_PF_CB (process_SM100wwStatus2));
41- register_telegram_type (0x07AD , " SM100ValveStatus" , false , MAKE_PF_CB (process_SM100ValveStatus));
34+ register_telegram_type (0x07D6 + dhw_ - 2 , " SM100wwTemperature" , false , MAKE_PF_CB (process_SM100wwTemperature));
35+ register_telegram_type (0x07E0 + dhw_ - 2 , " SM100wwStatus2" , true , MAKE_PF_CB (process_SM100wwStatus2));
36+ register_telegram_type (0x07A6 , " SM100wwParam" , true , MAKE_PF_CB (process_SM100wwParam)); // same telegram for all circuits
37+ if (tag == DeviceValueTAG::TAG_DHW3) {
38+ register_telegram_type (0x07AA , " SM100wwStatus" , false , MAKE_PF_CB (process_SM100wwStatus));
39+ register_telegram_type (0x07AC , " SM100wwParam1" , false , MAKE_PF_CB (process_SM100wwParam2));
40+ register_telegram_type (0x07A5 , " SM100wwCirc" , true , MAKE_PF_CB (process_SM100wwCirc));
41+ register_telegram_type (0x07AE , " SM100wwKeepWarm" , true , MAKE_PF_CB (process_SM100wwKeepWarm));
42+ register_telegram_type (0x07AD , " SM100ValveStatus" , false , MAKE_PF_CB (process_SM100ValveStatus));
43+ register_telegram_type (0x07AB , " SM100wwCommand" , false , MAKE_PF_CB (process_SM100wwCommand)); // command from thermostat
44+ } else if (tag == DeviceValueTAG::TAG_DHW4) {
45+ register_telegram_type (0x07C3 , " SM100wwCommand" , false , MAKE_PF_CB (process_SM100wwCommand)); // command from dhw3->dhw4
46+ }
4247 // device values...
4348 register_device_value (tag, &wwTemp_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_ (wwTemp), DeviceValueUOM::DEGREES);
4449 register_device_value (tag, &wwTemp2_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_ (wwStorageTemp1), DeviceValueUOM::DEGREES);
@@ -100,7 +105,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c
100105 }
101106}
102107
103- // SM100wwTemperature - 0x07D6
108+ // SM100wwTemperature - 0x07D6, dhw4: 0x07D7
104109// Solar Module(0x2A) -> (0x00), (0x7D6), data: 01 C1 00 00 02 5B 01 AF 01 AD 80 00 01 90
105110void Water::process_SM100wwTemperature (std::shared_ptr<const Telegram> telegram) {
106111 has_update (telegram, wwTemp_, 0 ); // is *10 TS17
@@ -156,12 +161,10 @@ void Water::process_SM100ValveStatus(std::shared_ptr<const Telegram> telegram) {
156161 has_update (telegram, wwRetValve_, 1 );
157162}
158163
159- /*
160- // SM100ww? - 0x7E0, some kind of status
164+ // SM100ww? - 0x7E0, some kind of status, dhw4: 0x7E1
161165// data: 00 00 46 00 00 01 06 0E 06 0E 00 00 00 00 00 03 03 03 03
162166// publishes single values offset 1/2(16bit), offset 5, offset 6, offset 7, offset 8, offset 9,
163167// status2 = 03:"no heat", 06:"heat request", 08:"disinfecting", 09:"hold"
164- */
165168void Water::process_SM100wwStatus2 (std::shared_ptr<const Telegram> telegram) {
166169 // has_update(telegram, wwFlow_, 7); // single byte, wrong see #1387
167170 has_update (telegram, wwStatus2_, 8 );
@@ -170,6 +173,7 @@ void Water::process_SM100wwStatus2(std::shared_ptr<const Telegram> telegram) {
170173
171174// SM100wwCommand - 0x07AB
172175// Thermostat(0x10) -> Solar Module(0x2A), (0x7AB), data: 01 00 01
176+ // or dhw3 module (0x2A) -> dhw4 module(0x2B), (0x7C3), data: 01 01 00
173177void Water::process_SM100wwCommand (std::shared_ptr<const Telegram> telegram) {
174178 // not implemented yet
175179}
0 commit comments