diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 5600e1222..4ea9adad0 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -47,7 +47,9 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const s // HT3 if (flags == EMSdevice::EMS_DEVICE_FLAG_IPM) { - register_telegram_type(0x010C, F("IPMSetMessage"), false, MAKE_PF_CB(process_IPMStatusMessage)); + register_telegram_type(0x010C, F("IPMStatusMessage"), false, MAKE_PF_CB(process_IPMStatusMessage)); + register_telegram_type(0x001E, F("IPMTempMessage"), false, MAKE_PF_CB(process_IPMTempMessage)); + // register_telegram_type(0x0023, F("IPMSetMessage"), false, MAKE_PF_CB(process_IPMSetMessage)); } // register the device values and set hc_ and type_ @@ -60,6 +62,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const s register_device_value(tag, &flowTempHc_, DeviceValueType::USHORT, FL_(div10), F("flowTempHc"), F("flow temperature in assigned hc (TC1)"), DeviceValueUOM::DEGREES); register_device_value(tag, &pumpStatus_, DeviceValueType::BOOL, nullptr, F("pumpStatus"), F("pump status in assigned hc (PC1)"), DeviceValueUOM::PUMP); register_device_value(tag, &status_, DeviceValueType::INT, nullptr, F("valveStatus"), F("mixing valve actuator in assigned hc (VC1)"), DeviceValueUOM::PERCENT); + register_device_value(tag, &flowTempVf_, DeviceValueType::USHORT, FL_(div10), F("flowTempVf"), F("flow temperature in header (T0/Vf)"), DeviceValueUOM::DEGREES); } else { type_ = Type::WWC; hc_ = device_id - 0x28 + 1; @@ -135,7 +138,7 @@ void Mixer::process_MMPLUSStatusMessage_WWC(std::shared_ptr tele has_update(telegram->read_value(status_, 11)); // temp status } -// Mixer IMP - 0x010C +// Mixer IPM - 0x010C // e.g. A0 00 FF 00 00 0C 01 00 00 00 00 00 54 // A1 00 FF 00 00 0C 02 04 00 01 1D 00 82 void Mixer::process_IPMStatusMessage(std::shared_ptr telegram) { @@ -156,6 +159,13 @@ void Mixer::process_IPMStatusMessage(std::shared_ptr telegram) { has_update(telegram->read_value(flowSetTemp_, 5)); // flowSettemp is also in unmixed circuits, see #711 } +// Mixer IPM - 0x001E Temperature Message in unmixed circuits +// in unmixed circuits FlowTemp in 10C is zero, this is the measured flowtemp in header +void Mixer::process_IPMTempMessage(std::shared_ptr telegram) { + + has_update(telegram->read_value(flowTempVf_, 0)); // TC1, is * 10 +} + // Mixer on a MM10 - 0xAB // e.g. Mixer Module -> All, type 0xAB, telegram: 21 00 AB 00 2D 01 BE 64 04 01 00 (CRC=15) #data=7 // see also https://github.com/emsesp/EMS-ESP/issues/386 @@ -187,6 +197,12 @@ void Mixer::process_MMSetMessage(std::shared_ptr telegram) { // pos 1: position in % } +// Thermostat(0x10) -> Mixer(0x21), ?(0x23), data: 1A 64 00 90 21 23 00 1A 64 00 89 +void Mixer::process_IPMSetMessage(std::shared_ptr telegram) { + // pos 0: flowtemp setpoint 1A = 26°C + // pos 1: position in %? +} + #pragma GCC diagnostic pop } // namespace emsesp diff --git a/src/devices/mixer.h b/src/devices/mixer.h index c740f1449..d01240ee5 100644 --- a/src/devices/mixer.h +++ b/src/devices/mixer.h @@ -35,6 +35,8 @@ class Mixer : public EMSdevice { void process_MMPLUSStatusMessage_HC(std::shared_ptr telegram); void process_MMPLUSStatusMessage_WWC(std::shared_ptr telegram); void process_IPMStatusMessage(std::shared_ptr telegram); + void process_IPMTempMessage(std::shared_ptr telegram); + void process_IPMSetMessage(std::shared_ptr telegram); void process_MMStatusMessage(std::shared_ptr telegram); void process_MMConfigMessage(std::shared_ptr telegram); void process_MMSetMessage(std::shared_ptr telegram); @@ -47,6 +49,7 @@ class Mixer : public EMSdevice { private: uint16_t flowTempHc_; + uint16_t flowTempVf_; uint8_t pumpStatus_; int8_t status_; uint8_t flowSetTemp_;