From ec25636d996b8589e2b3a4245419139f61103cdb Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 3 Feb 2020 23:35:35 +0100 Subject: [PATCH] some mixing minor changes --- src/ems-esp.cpp | 41 ++++++++++++------------- src/ems.cpp | 79 ++++++++++++++++++++++++------------------------- src/ems.h | 33 ++++++++++----------- 3 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/ems-esp.cpp b/src/ems-esp.cpp index 261ca69e6..774abcc26 100644 --- a/src/ems-esp.cpp +++ b/src/ems-esp.cpp @@ -479,32 +479,33 @@ void showInfo() { if (ems_getMixingDeviceEnabled()) { myDebug_P(PSTR("")); // newline myDebug_P(PSTR("%sMixing module data:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF); - // myDebug_P(PSTR(" Mixing: %s"), ems_getDeviceDescription(EMS_DEVICE_TYPE_MIXING, buffer_type,false)); - if (EMS_Boiler.switchTemp < EMS_VALUE_USHORT_NOTSET) + myDebug_P(PSTR(" Mixing Module: %s"), ems_getDeviceDescription(EMS_DEVICE_TYPE_MIXING, buffer_type, false)); + if ((EMS_Boiler.switchTemp < EMS_VALUE_USHORT_NOTSET) && (EMS_Boiler.switchTemp != 0)) { _renderUShortValue("Switch temperature", "C", EMS_Boiler.switchTemp); + } for (uint8_t hc_num = 1; hc_num <= EMS_THERMOSTAT_MAXHC; hc_num++) { - if (EMS_Mixing.hc[hc_num - 1].active) { + if (EMS_MixingModule.hc[hc_num - 1].active) { myDebug_P(PSTR(" Mixing Circuit %d"), hc_num); - if (EMS_Mixing.hc[hc_num - 1].flowTemp < EMS_VALUE_USHORT_NOTSET) - _renderUShortValue(" Current flow temperature", "C", EMS_Mixing.hc[hc_num - 1].flowTemp); - if (EMS_Mixing.hc[hc_num - 1].flowSetTemp != EMS_VALUE_INT_NOTSET) - _renderIntValue(" Setpoint flow temperature", "C", EMS_Mixing.hc[hc_num - 1].flowSetTemp); - if (EMS_Mixing.hc[hc_num - 1].pumpMod != EMS_VALUE_INT_NOTSET) - _renderIntValue(" Current pump modulation", "%", EMS_Mixing.hc[hc_num - 1].pumpMod); - if (EMS_Mixing.hc[hc_num - 1].valveStatus != EMS_VALUE_INT_NOTSET) - _renderIntValue(" Current valve status", "", EMS_Mixing.hc[hc_num - 1].valveStatus); + if (EMS_MixingModule.hc[hc_num - 1].flowTemp < EMS_VALUE_USHORT_NOTSET) + _renderUShortValue(" Current flow temperature", "C", EMS_MixingModule.hc[hc_num - 1].flowTemp); + if (EMS_MixingModule.hc[hc_num - 1].flowSetTemp != EMS_VALUE_INT_NOTSET) + _renderIntValue(" Setpoint flow temperature", "C", EMS_MixingModule.hc[hc_num - 1].flowSetTemp); + if (EMS_MixingModule.hc[hc_num - 1].pumpMod != EMS_VALUE_INT_NOTSET) + _renderIntValue(" Current pump modulation", "%", EMS_MixingModule.hc[hc_num - 1].pumpMod); + if (EMS_MixingModule.hc[hc_num - 1].valveStatus != EMS_VALUE_INT_NOTSET) + _renderIntValue(" Current valve status", "", EMS_MixingModule.hc[hc_num - 1].valveStatus); } } for (uint8_t wwc_num = 1; wwc_num <= EMS_THERMOSTAT_MAXWWC; wwc_num++) { - if (EMS_Mixing.wwc[wwc_num - 1].active) { + if (EMS_MixingModule.wwc[wwc_num - 1].active) { myDebug_P(PSTR(" Warm Water Circuit %d"), wwc_num); - if (EMS_Mixing.wwc[wwc_num - 1].flowTemp < EMS_VALUE_USHORT_NOTSET) - _renderUShortValue(" Current warm water temperature", "C", EMS_Mixing.wwc[wwc_num - 1].flowTemp); - if (EMS_Mixing.wwc[wwc_num - 1].pumpMod != EMS_VALUE_INT_NOTSET) - _renderIntValue(" Current pump status", "", EMS_Mixing.wwc[wwc_num - 1].pumpMod); - if (EMS_Mixing.wwc[wwc_num - 1].tempStatus != EMS_VALUE_INT_NOTSET) - _renderIntValue(" Current temp status", "", EMS_Mixing.wwc[wwc_num - 1].tempStatus); + if (EMS_MixingModule.wwc[wwc_num - 1].flowTemp < EMS_VALUE_USHORT_NOTSET) + _renderUShortValue(" Current warm water temperature", "C", EMS_MixingModule.wwc[wwc_num - 1].flowTemp); + if (EMS_MixingModule.wwc[wwc_num - 1].pumpMod != EMS_VALUE_INT_NOTSET) + _renderIntValue(" Current pump status", "", EMS_MixingModule.wwc[wwc_num - 1].pumpMod); + if (EMS_MixingModule.wwc[wwc_num - 1].tempStatus != EMS_VALUE_INT_NOTSET) + _renderIntValue(" Current temp status", "", EMS_MixingModule.wwc[wwc_num - 1].tempStatus); } } } @@ -779,7 +780,7 @@ void publishEMSValues(bool force) { JsonObject rootMixing = doc.to(); for (uint8_t hc_v = 1; hc_v <= EMS_THERMOSTAT_MAXHC; hc_v++) { - _EMS_Mixing_HC * mixing = &EMS_Mixing.hc[hc_v - 1]; + _EMS_MixingModule_HC * mixing = &EMS_MixingModule.hc[hc_v - 1]; // only send if we have an active Heating Circuit with real data if (mixing->active) { @@ -799,7 +800,7 @@ void publishEMSValues(bool force) { } } for (uint8_t wwc_v = 1; wwc_v <= EMS_THERMOSTAT_MAXWWC; wwc_v++) { - _EMS_Mixing_WWC * mixing = &EMS_Mixing.wwc[wwc_v - 1]; + _EMS_MixingModule_WWC * mixing = &EMS_MixingModule.wwc[wwc_v - 1]; // only send if we have an active Warm water Circuit with real data if (mixing->active) { // build new json object diff --git a/src/ems.cpp b/src/ems.cpp index c3b96ba3b..6144eec8b 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -27,11 +27,11 @@ uint8_t _EMS_Devices_max = ArraySize(EMS_Devices); uint8_t _EMS_Devices_Types_max = ArraySize(EMS_Devices_Types); // these structs contain the data we store from the specific EMS devices -_EMS_Boiler EMS_Boiler; // for boiler -_EMS_Thermostat EMS_Thermostat; // for thermostat -_EMS_SolarModule EMS_SolarModule; // for solar modules -_EMS_HeatPump EMS_HeatPump; // for heatpumps -_EMS_Mixing EMS_Mixing; // for mixing devices +_EMS_Boiler EMS_Boiler; // for boiler +_EMS_Thermostat EMS_Thermostat; // for thermostat +_EMS_SolarModule EMS_SolarModule; // for solar modules +_EMS_HeatPump EMS_HeatPump; // for heatpumps +_EMS_MixingModule EMS_MixingModule; // for mixing devices // CRC lookup table with poly 12 for faster checking const uint8_t ems_crc_table[] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x24, 0x26, @@ -119,20 +119,20 @@ void ems_init() { EMS_Thermostat.hc[i].curr_roomTemp = EMS_VALUE_SHORT_NOTSET; } - EMS_Mixing.detected = false; + EMS_MixingModule.device_id = EMS_ID_NONE; // init all mixing modules for (uint8_t i = 0; i < EMS_THERMOSTAT_MAXHC; i++) { - EMS_Mixing.hc[i].hc = i + 1; - EMS_Mixing.hc[i].flowTemp = EMS_VALUE_USHORT_NOTSET; - EMS_Mixing.hc[i].pumpMod = EMS_VALUE_INT_NOTSET; - EMS_Mixing.hc[i].valveStatus = EMS_VALUE_INT_NOTSET; - EMS_Mixing.hc[i].flowSetTemp = EMS_VALUE_INT_NOTSET; + EMS_MixingModule.hc[i].hc = i + 1; + EMS_MixingModule.hc[i].flowTemp = EMS_VALUE_USHORT_NOTSET; + EMS_MixingModule.hc[i].pumpMod = EMS_VALUE_INT_NOTSET; + EMS_MixingModule.hc[i].valveStatus = EMS_VALUE_INT_NOTSET; + EMS_MixingModule.hc[i].flowSetTemp = EMS_VALUE_INT_NOTSET; } for (uint8_t i = 0; i < EMS_THERMOSTAT_MAXWWC; i++) { - EMS_Mixing.wwc[i].wwc = i + 1; - EMS_Mixing.wwc[i].flowTemp = EMS_VALUE_USHORT_NOTSET; - EMS_Mixing.wwc[i].pumpMod = EMS_VALUE_INT_NOTSET; - EMS_Mixing.wwc[i].tempStatus = EMS_VALUE_INT_NOTSET; + EMS_MixingModule.wwc[i].wwc = i + 1; + EMS_MixingModule.wwc[i].flowTemp = EMS_VALUE_USHORT_NOTSET; + EMS_MixingModule.wwc[i].pumpMod = EMS_VALUE_INT_NOTSET; + EMS_MixingModule.wwc[i].tempStatus = EMS_VALUE_INT_NOTSET; } // UBAParameterWW @@ -238,7 +238,7 @@ bool ems_getThermostatEnabled() { } bool ems_getMixingDeviceEnabled() { - return EMS_Mixing.detected; + return EMS_MixingModule.device_id != EMS_ID_NONE; } bool ems_getSolarModuleEnabled() { @@ -1287,11 +1287,11 @@ void _process_MMPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { if (hc >= EMS_THERMOSTAT_MAXHC) { return; // invalid type } - EMS_Mixing.hc[hc].active = true; + EMS_MixingModule.hc[hc].active = true; - _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].flowTemp, EMS_OFFSET_MMPLUSStatusMessage_flow_temp); - _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].pumpMod, EMS_OFFSET_MMPLUSStatusMessage_pump_mod); - _setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].valveStatus, EMS_OFFSET_MMPLUSStatusMessage_valve_status); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].flowTemp, EMS_OFFSET_MMPLUSStatusMessage_flow_temp); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].pumpMod, EMS_OFFSET_MMPLUSStatusMessage_pump_mod); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].valveStatus, EMS_OFFSET_MMPLUSStatusMessage_valve_status); } // Mixer warm water loading - 0x0231, 0x0232 @@ -1300,25 +1300,25 @@ void _process_MMPLUSStatusMessageWW(_EMS_RxTelegram * EMS_RxTelegram) { if (wwc >= EMS_THERMOSTAT_MAXWWC) { return; // invalid type } - EMS_Mixing.wwc[wwc].active = true; + EMS_MixingModule.wwc[wwc].active = true; - _setValue(EMS_RxTelegram, &EMS_Mixing.wwc[wwc].flowTemp, EMS_OFFSET_MMPLUSStatusMessage_WW_flow_temp); - _setValue(EMS_RxTelegram, &EMS_Mixing.wwc[wwc].pumpMod, EMS_OFFSET_MMPLUSStatusMessage_WW_pump_mod); - _setValue(EMS_RxTelegram, &EMS_Mixing.wwc[wwc].tempStatus, EMS_OFFSET_MMPLUSStatusMessage_WW_temp_status); + _setValue(EMS_RxTelegram, &EMS_MixingModule.wwc[wwc].flowTemp, EMS_OFFSET_MMPLUSStatusMessage_WW_flow_temp); + _setValue(EMS_RxTelegram, &EMS_MixingModule.wwc[wwc].pumpMod, EMS_OFFSET_MMPLUSStatusMessage_WW_pump_mod); + _setValue(EMS_RxTelegram, &EMS_MixingModule.wwc[wwc].tempStatus, EMS_OFFSET_MMPLUSStatusMessage_WW_temp_status); } // Mixer - 0xAB // https://github.com/proddy/EMS-ESP/issues/270 // We assume MM10 is on HC2 and WM10 is using HC1 void _process_MMStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { - uint8_t hc = 1; // fixed to HC2 - EMS_Mixing.hc[hc].active = true; + uint8_t hc = 1; // fixed to HC2 + EMS_MixingModule.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].flowSetTemp, EMS_OFFSET_MMStatusMessage_flow_set); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].flowTemp, EMS_OFFSET_MMStatusMessage_flow_temp); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].pumpMod, EMS_OFFSET_MMStatusMessage_pump_mod); + _setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].flowSetTemp, EMS_OFFSET_MMStatusMessage_flow_set); - //_setValue(EMS_RxTelegram, &EMS_Mixing.hc[hc].valveStatus, EMS_OFFSET_MMStatusMessage_valve_status); + //_setValue(EMS_RxTelegram, &EMS_MixingModule.hc[hc].valveStatus, EMS_OFFSET_MMStatusMessage_valve_status); } /** @@ -1896,12 +1896,11 @@ void _process_Version(_EMS_RxTelegram * EMS_RxTelegram) { EMS_HeatPump.device_desc_p = device_desc_p; strlcpy(EMS_HeatPump.version, version, sizeof(EMS_HeatPump.version)); } else if (type == EMS_DEVICE_TYPE_MIXING) { - EMS_Mixing.device_id = device_id; - EMS_Mixing.product_id = product_id; - EMS_Mixing.device_desc_p = device_desc_p; - EMS_Mixing.device_flags = flags; - EMS_Mixing.detected = true; - strlcpy(EMS_Mixing.version, version, sizeof(EMS_Mixing.version)); + EMS_MixingModule.device_id = device_id; + EMS_MixingModule.product_id = product_id; + EMS_MixingModule.device_desc_p = device_desc_p; + EMS_MixingModule.device_flags = flags; + strlcpy(EMS_MixingModule.version, version, sizeof(EMS_MixingModule.version)); ems_doReadCommand(EMS_TYPE_MMPLUSStatusMessage_HC1, device_id); // fetch MM values } } @@ -2149,10 +2148,10 @@ char * ems_getDeviceDescription(_EMS_DEVICE_TYPE device_type, char * buffer, boo version = EMS_HeatPump.version; } else if (device_type == EMS_DEVICE_TYPE_MIXING) { enabled = ems_getMixingDeviceEnabled(); - device_id = EMS_Mixing.device_id; - product_id = EMS_Mixing.product_id; - device_desc_p = EMS_Mixing.device_desc_p; - version = EMS_Mixing.version; + device_id = EMS_MixingModule.device_id; + product_id = EMS_MixingModule.product_id; + device_desc_p = EMS_MixingModule.device_desc_p; + version = EMS_MixingModule.version; } if (!enabled) { diff --git a/src/ems.h b/src/ems.h index e0e7cc9ff..7e7ad1d67 100644 --- a/src/ems.h +++ b/src/ems.h @@ -345,7 +345,7 @@ typedef struct { uint8_t pumpMod; uint8_t valveStatus; uint8_t flowSetTemp; -} _EMS_Mixing_HC; +} _EMS_MixingModule_HC; // Mixing Module per WWC typedef struct { @@ -354,19 +354,18 @@ typedef struct { uint16_t flowTemp; uint8_t pumpMod; uint8_t tempStatus; -} _EMS_Mixing_WWC; +} _EMS_MixingModule_WWC; // Mixer data typedef struct { - uint8_t device_id; - uint8_t device_flags; - const char * device_desc_p; - uint8_t product_id; - char version[10]; - bool detected; - _EMS_Mixing_HC hc[EMS_THERMOSTAT_MAXHC]; // array for the 4 heating circuits - _EMS_Mixing_WWC wwc[EMS_THERMOSTAT_MAXWWC]; // array for the 2 ww circuits -} _EMS_Mixing; + uint8_t device_id; + uint8_t device_flags; + const char * device_desc_p; + uint8_t product_id; + char version[10]; + _EMS_MixingModule_HC hc[EMS_THERMOSTAT_MAXHC]; // array for the 4 heating circuits + _EMS_MixingModule_WWC wwc[EMS_THERMOSTAT_MAXWWC]; // array for the 2 ww circuits +} _EMS_MixingModule; // Solar Module - SM10/SM100/SM200/ISM1 typedef struct { @@ -491,11 +490,11 @@ void _removeTxQueue(); int8_t _getHeatingCircuit(_EMS_RxTelegram * EMS_RxTelegram); // global so can referenced in other classes -extern _EMS_Sys_Status EMS_Sys_Status; -extern _EMS_Boiler EMS_Boiler; -extern _EMS_Thermostat EMS_Thermostat; -extern _EMS_SolarModule EMS_SolarModule; -extern _EMS_HeatPump EMS_HeatPump; -extern _EMS_Mixing EMS_Mixing; +extern _EMS_Sys_Status EMS_Sys_Status; +extern _EMS_Boiler EMS_Boiler; +extern _EMS_Thermostat EMS_Thermostat; +extern _EMS_SolarModule EMS_SolarModule; +extern _EMS_HeatPump EMS_HeatPump; +extern _EMS_MixingModule EMS_MixingModule; extern std::list<_Detected_Device> Devices;