From d3427011fb6d7d8ae9cbc262147219aeb8c92752 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 1 Jan 2020 14:58:39 +0100 Subject: [PATCH 1/2] added 0xAC for HC2 on switch and mixers --- src/ems_devices.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ems_devices.h b/src/ems_devices.h index 5a52eb7ba..3dc105356 100644 --- a/src/ems_devices.h +++ b/src/ems_devices.h @@ -198,7 +198,8 @@ const _EMS_Device_Types EMS_Devices_Types[] = { #define EMS_OFFSET_MMPLUSStatusMessage_valve_status 2 // valve in percent // MM10 -#define EMS_TYPE_MMStatusMessage 0xAB // mixer status +#define EMS_TYPE_MMStatusMessage_HC1 0xAB // mixer status HC1 +#define EMS_TYPE_MMStatusMessage_HC2 0xAC // mixer status HC2 #define EMS_OFFSET_MMStatusMessage_flow_set 0 // flow setpoint #define EMS_OFFSET_MMStatusMessage_flow_temp 1 // flow temperature #define EMS_OFFSET_MMStatusMessage_pump_mod 3 // pump modulation in percent From 2684ccc59401a1d19f5594a089abed2dc459db00 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 1 Jan 2020 14:59:11 +0100 Subject: [PATCH 2/2] any unsigned short >0x8000 is a non-value --- src/ems.cpp | 16 ++++++++++------ src/ems_utils.cpp | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/ems.cpp b/src/ems.cpp index 2b7dc589c..c6312a8b9 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -349,7 +349,7 @@ void _setValue(_EMS_RxTelegram * EMS_RxTelegram, uint16_t * param_op, uint8_t in uint16_t value = (EMS_RxTelegram->data[pos] << 8) + EMS_RxTelegram->data[pos + 1]; // check for undefined/unset values, 0x8000 - if (value == EMS_VALUE_USHORT_NOTSET) { + if (value >= EMS_VALUE_USHORT_NOTSET) { return; } @@ -1226,6 +1226,7 @@ void _process_EasyStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { _setValue(EMS_RxTelegram, &EMS_Thermostat.hc[hc].setpoint_roomTemp, EMS_OFFSET_EasyStatusMessage_setpoint); // is * 100 } +// 0x01D7, 0x01D8 void _process_MMPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { uint8_t hc = (EMS_RxTelegram->type - EMS_TYPE_MMPLUSStatusMessage_HC1); // 0 to 3 if (hc >= EMS_THERMOSTAT_MAXHC) { @@ -1238,17 +1239,19 @@ void _process_MMPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].valveStatus, EMS_OFFSET_MMPLUSStatusMessage_valve_status); } +// 0xAB, 0xAC - for MM10 HC1 and HC2 on a switch void _process_MMStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { - uint8_t hc = (EMS_RxTelegram->type - EMS_TYPE_MMStatusMessage); - if (hc != 0) { + uint8_t hc = (EMS_RxTelegram->type - EMS_TYPE_MMStatusMessage_HC1); // 0 to 3 + if (hc >= EMS_THERMOSTAT_MAXHC) { return; // invalid type } EMS_Mixing.hc[hc].active = true; _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].flowTemp, EMS_OFFSET_MMStatusMessage_flow_temp); _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].pumpMod, EMS_OFFSET_MMStatusMessage_pump_mod); - //_setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].valveStatus, EMS_OFFSET_MMStatusMessage_valve_status); _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].flowSetTemp, EMS_OFFSET_MMStatusMessage_flow_set); + + //_setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].valveStatus, EMS_OFFSET_MMStatusMessage_valve_status); } /** @@ -2718,10 +2721,11 @@ const _EMS_Type EMS_Types[] = { // Junkers FR10 {EMS_DEVICE_UPDATE_FLAG_THERMOSTAT, EMS_TYPE_JunkersStatusMessage, "JunkersStatusMessage", _process_JunkersStatusMessage}, - // Mixing devices + // Mixing devices MM10 - MM400 {EMS_DEVICE_UPDATE_FLAG_MIXING, EMS_TYPE_MMPLUSStatusMessage_HC1, "MMPLUSStatusMessage_HC1", _process_MMPLUSStatusMessage}, {EMS_DEVICE_UPDATE_FLAG_MIXING, EMS_TYPE_MMPLUSStatusMessage_HC2, "MMPLUSStatusMessage_HC2", _process_MMPLUSStatusMessage}, - {EMS_DEVICE_UPDATE_FLAG_MIXING, EMS_TYPE_MMStatusMessage, "MMStatusMessage", _process_MMStatusMessage} + {EMS_DEVICE_UPDATE_FLAG_MIXING, EMS_TYPE_MMStatusMessage_HC1, "MMStatusMessage", _process_MMStatusMessage}, + {EMS_DEVICE_UPDATE_FLAG_MIXING, EMS_TYPE_MMStatusMessage_HC2, "MMStatusMessage", _process_MMStatusMessage} }; diff --git a/src/ems_utils.cpp b/src/ems_utils.cpp index 4d61cdfef..46465fb86 100644 --- a/src/ems_utils.cpp +++ b/src/ems_utils.cpp @@ -76,11 +76,11 @@ char * _short_to_char(char * s, int16_t value, uint8_t decimals) { return s; } -// convert short (two bytes) to text string and prints it +// convert unsigned short (two bytes) to text string and prints it // decimals: 0 = no division, 1=divide value by 10, 2=divide by 2, 10=divide value by 100 char * _ushort_to_char(char * s, uint16_t value, uint8_t decimals) { // remove errors or invalid values - if (value == EMS_VALUE_USHORT_NOTSET) { + if (value >= EMS_VALUE_USHORT_NOTSET) { strlcpy(s, "?", 10); return (s); }