|
|
|
|
@@ -92,7 +92,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
|
|
|
|
|
|
|
|
|
// first commands
|
|
|
|
|
register_device_value(TAG_BOILER_DATA,
|
|
|
|
|
&wWTapActivated_,
|
|
|
|
|
&wwTapActivated_,
|
|
|
|
|
DeviceValueType::CMD,
|
|
|
|
|
FL_(enum_bool),
|
|
|
|
|
FL_(wwtapactivated),
|
|
|
|
|
@@ -187,55 +187,55 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// warm water - boiler_data_ww topic
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWSelTemp_, DeviceValueType::UINT, nullptr, FL_(wWSelTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWSetTemp_, DeviceValueType::UINT, nullptr, FL_(wWSetTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_warmwater_temp));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWType_, DeviceValueType::ENUM, FL_(enum_flow), FL_(wWType), DeviceValueUOM::NONE);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwSelTemp_, DeviceValueType::UINT, nullptr, FL_(wwSelTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwSetTemp_, DeviceValueType::UINT, nullptr, FL_(wwSetTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_warmwater_temp));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwType_, DeviceValueType::ENUM, FL_(enum_flow), FL_(wwType), DeviceValueUOM::NONE);
|
|
|
|
|
register_device_value(
|
|
|
|
|
TAG_BOILER_DATA_WW, &wWComfort_, DeviceValueType::ENUM, FL_(enum_comfort), FL_(wWComfort), DeviceValueUOM::LIST, MAKE_CF_CB(set_warmwater_mode));
|
|
|
|
|
TAG_BOILER_DATA_WW, &wwComfort_, DeviceValueType::ENUM, FL_(enum_comfort), FL_(wwComfort), DeviceValueUOM::LIST, MAKE_CF_CB(set_warmwater_mode));
|
|
|
|
|
register_device_value(
|
|
|
|
|
TAG_BOILER_DATA_WW, &wWFlowTempOffset_, DeviceValueType::UINT, nullptr, FL_(wWFlowTempOffset), DeviceValueUOM::NONE, MAKE_CF_CB(set_wWFlowTempOffset));
|
|
|
|
|
TAG_BOILER_DATA_WW, &wwFlowTempOffset_, DeviceValueType::UINT, nullptr, FL_(wwFlowTempOffset), DeviceValueUOM::NONE, MAKE_CF_CB(set_wWFlowTempOffset));
|
|
|
|
|
register_device_value(
|
|
|
|
|
TAG_BOILER_DATA_WW, &wWMaxPower_, DeviceValueType::UINT, nullptr, FL_(wWMaxPower), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_warmwater_maxpower));
|
|
|
|
|
TAG_BOILER_DATA_WW, &wwMaxPower_, DeviceValueType::UINT, nullptr, FL_(wwMaxPower), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_warmwater_maxpower));
|
|
|
|
|
register_device_value(
|
|
|
|
|
TAG_BOILER_DATA_WW, &wWCircPump_, DeviceValueType::BOOL, nullptr, FL_(wWCircPump), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_circulation_pump));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWChargeType_, DeviceValueType::ENUM, FL_(enum_charge), FL_(wWChargeType), DeviceValueUOM::LIST);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWHystOn_, DeviceValueType::INT, nullptr, FL_(wWHystOn), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_hyst_on));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWHystOff_, DeviceValueType::INT, nullptr, FL_(wWHystOff), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_hyst_off));
|
|
|
|
|
TAG_BOILER_DATA_WW, &wwCircPump_, DeviceValueType::BOOL, nullptr, FL_(wwCircPump), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_circulation_pump));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWChargeType_, DeviceValueType::ENUM, FL_(enum_charge), FL_(wwChargeType), DeviceValueUOM::LIST);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwHystOn_, DeviceValueType::INT, nullptr, FL_(wwHystOn), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_hyst_on));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwHystOff_, DeviceValueType::INT, nullptr, FL_(wwHystOff), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_ww_hyst_off));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW,
|
|
|
|
|
&wWDisinfectionTemp_,
|
|
|
|
|
&wwDisinfectionTemp_,
|
|
|
|
|
DeviceValueType::UINT,
|
|
|
|
|
nullptr,
|
|
|
|
|
FL_(wWDisinfectionTemp),
|
|
|
|
|
FL_(wwDisinfectionTemp),
|
|
|
|
|
DeviceValueUOM::DEGREES,
|
|
|
|
|
MAKE_CF_CB(set_disinfect_temp));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW,
|
|
|
|
|
&wWCircMode_,
|
|
|
|
|
&wwCircMode_,
|
|
|
|
|
DeviceValueType::ENUM,
|
|
|
|
|
FL_(enum_freq),
|
|
|
|
|
FL_(wWCircMode),
|
|
|
|
|
FL_(wwCircMode),
|
|
|
|
|
DeviceValueUOM::LIST,
|
|
|
|
|
MAKE_CF_CB(set_warmwater_circulation_mode));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWCirc_, DeviceValueType::BOOL, nullptr, FL_(wWCirc), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_circulation));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wWCurTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wWCurTemp2), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWCurFlow_, DeviceValueType::UINT, FL_(div10), FL_(wWCurFlow), DeviceValueUOM::LMIN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp1_, DeviceValueType::USHORT, FL_(div10), FL_(wWStorageTemp1), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wWStorageTemp2), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwCirc_, DeviceValueType::BOOL, nullptr, FL_(wwCirc), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_circulation));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwCurTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwCurTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwCurTemp2), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwCurFlow_, DeviceValueType::UINT, FL_(div10), FL_(wwCurFlow), DeviceValueUOM::LMIN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwStorageTemp1_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp1), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwStorageTemp2_, DeviceValueType::USHORT, FL_(div10), FL_(wwStorageTemp2), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(
|
|
|
|
|
TAG_BOILER_DATA_WW, &wWActivated_, DeviceValueType::BOOL, nullptr, FL_(wWActivated), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_activated));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWOneTime_, DeviceValueType::BOOL, nullptr, FL_(wWOneTime), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_onetime));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWDisinfecting_, DeviceValueType::BOOL, nullptr, FL_(wWDisinfecting), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWCharging_, DeviceValueType::BOOL, nullptr, FL_(wWCharging), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWRecharging_, DeviceValueType::BOOL, nullptr, FL_(wWRecharging), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWTempOK_, DeviceValueType::BOOL, nullptr, FL_(wWTempOK), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWActive_, DeviceValueType::BOOL, nullptr, FL_(wWActive), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWHeat_, DeviceValueType::BOOL, nullptr, FL_(wWHeat), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWSetPumpPower_, DeviceValueType::UINT, nullptr, FL_(wWSetPumpPower), DeviceValueUOM::PERCENT);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &mixerTemp_, DeviceValueType::USHORT, FL_(div10), FL_(mixerTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &tankMiddleTemp_, DeviceValueType::USHORT, FL_(div10), FL_(tankMiddleTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWStarts_, DeviceValueType::ULONG, nullptr, FL_(wWStarts), DeviceValueUOM::NUM);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWStarts2_, DeviceValueType::ULONG, nullptr, FL_(wWStarts2), DeviceValueUOM::NUM);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWWorkM_, DeviceValueType::TIME, nullptr, FL_(wWWorkM), DeviceValueUOM::MINUTES);
|
|
|
|
|
TAG_BOILER_DATA_WW, &wwActivated_, DeviceValueType::BOOL, nullptr, FL_(wwActivated), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_activated));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwOneTime_, DeviceValueType::BOOL, nullptr, FL_(wwOneTime), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_onetime));
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwDisinfecting_, DeviceValueType::BOOL, nullptr, FL_(wwDisinfecting), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwCharging_, DeviceValueType::BOOL, nullptr, FL_(wwCharging), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwRecharging_, DeviceValueType::BOOL, nullptr, FL_(wwRecharging), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwTempOK_, DeviceValueType::BOOL, nullptr, FL_(wwTempOK), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwActive_, DeviceValueType::BOOL, nullptr, FL_(wwActive), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwHeat_, DeviceValueType::BOOL, nullptr, FL_(wwHeat), DeviceValueUOM::BOOLEAN);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwSetPumpPower_, DeviceValueType::UINT, nullptr, FL_(wwSetPumpPower), DeviceValueUOM::PERCENT);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwMixerTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwMixerTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwTankMiddleTemp_, DeviceValueType::USHORT, FL_(div10), FL_(wwTankMiddleTemp), DeviceValueUOM::DEGREES);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wWStarts_, DeviceValueType::ULONG, nullptr, FL_(wwStarts), DeviceValueUOM::NUM);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwStarts2_, DeviceValueType::ULONG, nullptr, FL_(wwStarts2), DeviceValueUOM::NUM);
|
|
|
|
|
register_device_value(TAG_BOILER_DATA_WW, &wwWorkM_, DeviceValueType::TIME, nullptr, FL_(wwWorkM), DeviceValueUOM::MINUTES);
|
|
|
|
|
|
|
|
|
|
// fetch some initial data
|
|
|
|
|
EMSESP::send_read_request(0x10,
|
|
|
|
|
@@ -259,7 +259,7 @@ bool Boiler::publish_ha_config() {
|
|
|
|
|
doc["stat_t"] = stat_t;
|
|
|
|
|
|
|
|
|
|
char name_s[40];
|
|
|
|
|
snprintf_P(name_s, sizeof(name_s), PSTR("* %s Product ID"), device_type_name().c_str());
|
|
|
|
|
snprintf(name_s, sizeof(name_s), FSTR_(productid_fmt), device_type_name().c_str());
|
|
|
|
|
doc["name"] = name_s;
|
|
|
|
|
|
|
|
|
|
doc["val_tpl"] = FJSON("{{value_json.id}}");
|
|
|
|
|
@@ -299,18 +299,18 @@ void Boiler::check_active(const bool force) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// check if we can use tapactivated in flow systems
|
|
|
|
|
if ((wWType_ == 1) && !Helpers::hasValue(wWTapActivated_, EMS_VALUE_BOOL)) {
|
|
|
|
|
wWTapActivated_ = 1;
|
|
|
|
|
if ((wwType_ == 1) && !Helpers::hasValue(wwTapActivated_, EMS_VALUE_BOOL)) {
|
|
|
|
|
wwTapActivated_ = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// check if tap water is active, bits 1 and 4 must be set
|
|
|
|
|
// also check if there is a flowsensor and flow-type
|
|
|
|
|
static bool flowsensor = false;
|
|
|
|
|
if (Helpers::hasValue(wWCurFlow_) && (wWCurFlow_ > 0) && (wWType_ == 1)) {
|
|
|
|
|
if (Helpers::hasValue(wwCurFlow_) && (wwCurFlow_ > 0) && (wwType_ == 1)) {
|
|
|
|
|
flowsensor = true;
|
|
|
|
|
}
|
|
|
|
|
if (flowsensor) {
|
|
|
|
|
b = ((wWCurFlow_ > 0) && ((boilerState_ & 0x0A) == 0x0A));
|
|
|
|
|
b = ((wwCurFlow_ > 0) && ((boilerState_ & 0x0A) == 0x0A));
|
|
|
|
|
} else {
|
|
|
|
|
b = ((boilerState_ & 0x0A) == 0x0A);
|
|
|
|
|
}
|
|
|
|
|
@@ -327,25 +327,25 @@ void Boiler::check_active(const bool force) {
|
|
|
|
|
// 0x33
|
|
|
|
|
void Boiler::process_UBAParameterWW(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
// has_update(telegram->read_bitvalue(wwEquipt_,0,3)); // 8=boiler has ww
|
|
|
|
|
has_update(telegram->read_value(wWActivated_, 1)); // 0xFF means on
|
|
|
|
|
has_update(telegram->read_value(wWSelTemp_, 2));
|
|
|
|
|
has_update(telegram->read_value(wWHystOn_, 3)); // Hyst on (default -5)
|
|
|
|
|
has_update(telegram->read_value(wWHystOff_, 4)); // Hyst off (default -1)
|
|
|
|
|
has_update(telegram->read_value(wWFlowTempOffset_, 5)); // default 40
|
|
|
|
|
has_update(telegram->read_value(wWCircPump_, 6)); // 0xFF means on
|
|
|
|
|
has_update(telegram->read_value(wWCircMode_, 7)); // 1=1x3min 6=6x3min 7=continuous
|
|
|
|
|
has_update(telegram->read_value(wWDisinfectionTemp_, 8));
|
|
|
|
|
has_update(telegram->read_value(wwActivated_, 1)); // 0xFF means on
|
|
|
|
|
has_update(telegram->read_value(wwSelTemp_, 2));
|
|
|
|
|
has_update(telegram->read_value(wwHystOn_, 3)); // Hyst on (default -5)
|
|
|
|
|
has_update(telegram->read_value(wwHystOff_, 4)); // Hyst off (default -1)
|
|
|
|
|
has_update(telegram->read_value(wwFlowTempOffset_, 5)); // default 40
|
|
|
|
|
has_update(telegram->read_value(wwCircPump_, 6)); // 0xFF means on
|
|
|
|
|
has_update(telegram->read_value(wwCircMode_, 7)); // 1=1x3min 6=6x3min 7=continuous
|
|
|
|
|
has_update(telegram->read_value(wwDisinfectionTemp_, 8));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWChargeType_, 10, 0)); // 0 = charge pump, 0xff = 3-way valve
|
|
|
|
|
|
|
|
|
|
telegram->read_value(wWComfort_, 9);
|
|
|
|
|
if (wWComfort_ == 0x00) {
|
|
|
|
|
wWComfort_ = 0; // Hot
|
|
|
|
|
} else if (wWComfort_ == 0xD8) {
|
|
|
|
|
wWComfort_ = 1; // Eco
|
|
|
|
|
} else if (wWComfort_ == 0xEC) {
|
|
|
|
|
wWComfort_ = 2; // Intelligent
|
|
|
|
|
telegram->read_value(wwComfort_, 9);
|
|
|
|
|
if (wwComfort_ == 0x00) {
|
|
|
|
|
wwComfort_ = 0; // Hot
|
|
|
|
|
} else if (wwComfort_ == 0xD8) {
|
|
|
|
|
wwComfort_ = 1; // Eco
|
|
|
|
|
} else if (wwComfort_ == 0xEC) {
|
|
|
|
|
wwComfort_ = 2; // Intelligent
|
|
|
|
|
} else {
|
|
|
|
|
wWComfort_ = EMS_VALUE_UINT_NOTSET;
|
|
|
|
|
wwComfort_ = EMS_VALUE_UINT_NOTSET;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -361,13 +361,13 @@ void Boiler::process_UBAMonitorFast(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_bitvalue(fanWork_, 7, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(ignWork_, 7, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(heatingPump_, 7, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWHeat_, 7, 6));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWCirc_, 7, 7));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwHeat_, 7, 6));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwCirc_, 7, 7));
|
|
|
|
|
|
|
|
|
|
// warm water storage sensors (if present)
|
|
|
|
|
// wWStorageTemp2 is also used by some brands as the boiler temperature - see https://github.com/emsesp/EMS-ESP/issues/206
|
|
|
|
|
has_update(telegram->read_value(wWStorageTemp1_, 9)); // 0x8300 if not available
|
|
|
|
|
has_update(telegram->read_value(wWStorageTemp2_,
|
|
|
|
|
has_update(telegram->read_value(wwStorageTemp1_, 9)); // 0x8300 if not available
|
|
|
|
|
has_update(telegram->read_value(wwStorageTemp2_,
|
|
|
|
|
11)); // 0x8000 if not available - this is boiler temp
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_value(retTemp_, 13));
|
|
|
|
|
@@ -421,7 +421,7 @@ void Boiler::process_UBAParameters(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
* Boiler(0x08) -> Me(0x0B), ?(0x26), data: 01 05 00 0F 00 1E 58 5A
|
|
|
|
|
*/
|
|
|
|
|
void Boiler::process_UBASettingsWW(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(wWMaxPower_, 7));
|
|
|
|
|
has_update(telegram->read_value(wwMaxPower_, 7));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
@@ -430,21 +430,21 @@ void Boiler::process_UBASettingsWW(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
* Boiler(0x08) -> Me(0x0B), UBAMonitorWW(0x34), data: 30 01 BA 7D 00 21 00 00 03 00 01 22 2B 00 19 5B
|
|
|
|
|
*/
|
|
|
|
|
void Boiler::process_UBAMonitorWW(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(wWSetTemp_, 0));
|
|
|
|
|
has_update(telegram->read_value(wWCurTemp_, 1));
|
|
|
|
|
has_update(telegram->read_value(wWCurTemp2_, 3));
|
|
|
|
|
has_update(telegram->read_value(wwSetTemp_, 0));
|
|
|
|
|
has_update(telegram->read_value(wwCurTemp_, 1));
|
|
|
|
|
has_update(telegram->read_value(wwCurTemp2_, 3));
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_value(wWType_, 8));
|
|
|
|
|
has_update(telegram->read_value(wWCurFlow_, 9));
|
|
|
|
|
has_update(telegram->read_value(wWWorkM_, 10, 3)); // force to 3 bytes
|
|
|
|
|
has_update(telegram->read_value(wwType_, 8));
|
|
|
|
|
has_update(telegram->read_value(wwCurFlow_, 9));
|
|
|
|
|
has_update(telegram->read_value(wwWorkM_, 10, 3)); // force to 3 bytes
|
|
|
|
|
has_update(telegram->read_value(wWStarts_, 13, 3)); // force to 3 bytes
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_bitvalue(wWOneTime_, 5, 1));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWDisinfecting_, 5, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWCharging_, 5, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWRecharging_, 5, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWTempOK_, 5, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWActive_, 5, 6));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwOneTime_, 5, 1));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwDisinfecting_, 5, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwCharging_, 5, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwRecharging_, 5, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwTempOK_, 5, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwActive_, 5, 6));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
@@ -459,7 +459,7 @@ void Boiler::process_UBAMonitorFastPlus(std::shared_ptr<const Telegram> telegram
|
|
|
|
|
has_update(telegram->read_value(selFlowTemp_, 6));
|
|
|
|
|
has_update(telegram->read_bitvalue(burnGas_, 11, 0));
|
|
|
|
|
// has_update(telegram->read_bitvalue(heatingPump_, 11, 1)); // heating active? see SlowPlus
|
|
|
|
|
has_update(telegram->read_bitvalue(wWHeat_, 11, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwHeat_, 11, 2));
|
|
|
|
|
has_update(telegram->read_value(curBurnPow_, 10));
|
|
|
|
|
has_update(telegram->read_value(selBurnPow_, 9));
|
|
|
|
|
has_update(telegram->read_value(curFlowTemp_, 7));
|
|
|
|
|
@@ -526,7 +526,7 @@ void Boiler::process_UBAMonitorSlowPlus(std::shared_ptr<const Telegram> telegram
|
|
|
|
|
has_update(telegram->read_bitvalue(fanWork_, 2, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(ignWork_, 2, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(heatingPump_, 2, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWCirc_, 2, 7));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwCirc_, 2, 7));
|
|
|
|
|
has_update(telegram->read_value(exhaustTemp_, 6));
|
|
|
|
|
has_update(telegram->read_value(burnStarts_, 10, 3)); // force to 3 bytes
|
|
|
|
|
has_update(telegram->read_value(burnWorkMin_, 13, 3)); // force to 3 bytes
|
|
|
|
|
@@ -559,36 +559,36 @@ void Boiler::process_UBAParametersPlus(std::shared_ptr<const Telegram> telegram)
|
|
|
|
|
|
|
|
|
|
// 0xEA
|
|
|
|
|
void Boiler::process_UBAParameterWWPlus(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(wWActivated_, 5)); // 0x01 means on
|
|
|
|
|
has_update(telegram->read_value(wWCircPump_, 10)); // 0x01 means yes
|
|
|
|
|
has_update(telegram->read_value(wWCircMode_,
|
|
|
|
|
has_update(telegram->read_value(wwActivated_, 5)); // 0x01 means on
|
|
|
|
|
has_update(telegram->read_value(wwCircPump_, 10)); // 0x01 means yes
|
|
|
|
|
has_update(telegram->read_value(wwCircMode_,
|
|
|
|
|
11)); // 1=1x3min... 6=6x3min, 7=continuous
|
|
|
|
|
// has_update(telegram->read_value(wWDisinfectTemp_, 12)); // settings, status in E9
|
|
|
|
|
// has_update(telegram->read_value(wWSelTemp_, 6)); // settings, status in E9
|
|
|
|
|
has_update(telegram->read_value(wWHystOn_, 7));
|
|
|
|
|
has_update(telegram->read_value(wWHystOff_, 8));
|
|
|
|
|
has_update(telegram->read_value(wwHystOn_, 7));
|
|
|
|
|
has_update(telegram->read_value(wwHystOff_, 8));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 0xE9 - WW monitor ems+
|
|
|
|
|
// e.g. 08 00 E9 00 37 01 F6 01 ED 00 00 00 00 41 3C 00 00 00 00 00 00 00 00 00 00 00 00 37 00 00 00 (CRC=77) #data=27
|
|
|
|
|
void Boiler::process_UBAMonitorWWPlus(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(wWSetTemp_, 0));
|
|
|
|
|
has_update(telegram->read_value(wWCurTemp_, 1));
|
|
|
|
|
has_update(telegram->read_value(wWCurTemp2_, 3));
|
|
|
|
|
has_update(telegram->read_value(wwSetTemp_, 0));
|
|
|
|
|
has_update(telegram->read_value(wwCurTemp_, 1));
|
|
|
|
|
has_update(telegram->read_value(wwCurTemp2_, 3));
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_value(wWWorkM_, 14, 3)); // force to 3 bytes
|
|
|
|
|
has_update(telegram->read_value(wwWorkM_, 14, 3)); // force to 3 bytes
|
|
|
|
|
has_update(telegram->read_value(wWStarts_, 17, 3)); // force to 3 bytes
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_bitvalue(wWOneTime_, 12, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWDisinfecting_, 12, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWCharging_, 12, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWRecharging_, 13, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWTempOK_, 13, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wWCirc_, 13, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwOneTime_, 12, 2));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwDisinfecting_, 12, 3));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwCharging_, 12, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwRecharging_, 13, 4));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwTempOK_, 13, 5));
|
|
|
|
|
has_update(telegram->read_bitvalue(wwCirc_, 13, 2));
|
|
|
|
|
|
|
|
|
|
// has_update(telegram->read_value(wWActivated_, 20)); // Activated is in 0xEA, this is something other 0/100%
|
|
|
|
|
has_update(telegram->read_value(wWSelTemp_, 10));
|
|
|
|
|
has_update(telegram->read_value(wWDisinfectionTemp_, 9));
|
|
|
|
|
has_update(telegram->read_value(wwSelTemp_, 10));
|
|
|
|
|
has_update(telegram->read_value(wwDisinfectionTemp_, 9));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
@@ -608,7 +608,7 @@ void Boiler::process_UBAInformation(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_value(heatingStarts_, 28));
|
|
|
|
|
has_update(telegram->read_value(coolingStarts_, 36));
|
|
|
|
|
has_update(telegram->read_value(wWStarts2_, 24));
|
|
|
|
|
has_update(telegram->read_value(wwStarts2_, 24));
|
|
|
|
|
|
|
|
|
|
has_update(telegram->read_value(nrgConsTotal_, 64));
|
|
|
|
|
|
|
|
|
|
@@ -660,8 +660,8 @@ void Boiler::process_HpOutdoor(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
// e.g. 88 00 2A 00 00 00 00 00 00 00 00 00 D2 00 00 80 00 00 01 08 80 00 02 47 00
|
|
|
|
|
// see https://github.com/emsesp/EMS-ESP/issues/397
|
|
|
|
|
void Boiler::process_MC110Status(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(mixerTemp_, 14));
|
|
|
|
|
has_update(telegram->read_value(tankMiddleTemp_, 18));
|
|
|
|
|
has_update(telegram->read_value(wwMixerTemp_, 14));
|
|
|
|
|
has_update(telegram->read_value(wwTankMiddleTemp_, 18));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
@@ -676,7 +676,7 @@ void Boiler::process_UBASetPoints(std::shared_ptr<const Telegram> telegram) {
|
|
|
|
|
has_update(telegram->read_value(setFlowTemp_,
|
|
|
|
|
0)); // boiler set temp from thermostat
|
|
|
|
|
has_update(telegram->read_value(setBurnPow_, 1)); // max json power in %
|
|
|
|
|
has_update(telegram->read_value(wWSetPumpPower_, 2)); // ww pump speed/power?
|
|
|
|
|
has_update(telegram->read_value(wwSetPumpPower_, 2)); // ww pump speed/power?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 0x6DC, ff for cascaded heatsources (hs)
|
|
|
|
|
@@ -1147,11 +1147,11 @@ bool Boiler::set_tapwarmwater_activated(const char * value, const int8_t id) {
|
|
|
|
|
message_data[1] = 0x00; // burner output 0%
|
|
|
|
|
message_data[3] = 0x64; // boiler pump capacity 100%
|
|
|
|
|
message_data[4] = 0xFF; // 3-way valve hot water only
|
|
|
|
|
wWTapActivated_ = 0;
|
|
|
|
|
wwTapActivated_ = 0;
|
|
|
|
|
} else {
|
|
|
|
|
// get out of test mode. Send all zeros.
|
|
|
|
|
// telegram: 0B 08 1D 00 00
|
|
|
|
|
wWTapActivated_ = 1;
|
|
|
|
|
wwTapActivated_ = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
write_command(EMS_TYPE_UBAFunctionTest, 0, message_data, sizeof(message_data), 0);
|
|
|
|
|
|