diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index d2710b230..8abcc4781 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -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 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 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 telegram) { * Boiler(0x08) -> Me(0x0B), ?(0x26), data: 01 05 00 0F 00 1E 58 5A */ void Boiler::process_UBASettingsWW(std::shared_ptr 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 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 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 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 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 telegram) // 0xEA void Boiler::process_UBAParameterWWPlus(std::shared_ptr 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 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 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 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 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 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); diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 766e7ebd8..b183ebae3 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -55,40 +55,39 @@ class Boiler : public EMSdevice { static constexpr uint8_t EMS_BOILER_SELFLOWTEMP_HEATING = 20; // was originally 70, changed to 30 for issue #193, then to 20 with issue #344 // ww - uint8_t wWSetTemp_; // Warm Water set temperature - uint8_t wWSelTemp_; // Warm Water selected temperature - uint8_t wWType_; // 0-off, 1-flow, 2-flowbuffer, 3-buffer, 4-layered buffer - uint8_t wWComfort_; // WW comfort mode - uint8_t wWCircPump_; // Warm Water circulation pump available + uint8_t wwSetTemp_; // Warm Water set temperature + uint8_t wwSelTemp_; // Warm Water selected temperature + uint8_t wwType_; // 0-off, 1-flow, 2-flowbuffer, 3-buffer, 4-layered buffer + uint8_t wwComfort_; // WW comfort mode + uint8_t wwCircPump_; // Warm Water circulation pump available uint8_t wWChargeType_; // Warm Water charge type (pump or 3-way-valve) - uint8_t wWDisinfectionTemp_; // Warm Water disinfection temperature to prevent infection - uint8_t wWCircMode_; // Warm Water circulation pump mode - uint8_t wWCirc_; // Circulation on/off - uint16_t wWCurTemp_; // Warm Water current temperature - uint16_t wWCurTemp2_; // Warm Water current temperature storage - uint8_t wWCurFlow_; // Warm Water current flow temp in l/min - uint16_t wWStorageTemp1_; // warm water storage temp 1 - uint16_t wWStorageTemp2_; // warm water storage temp 2 - uint8_t wWActivated_; // Warm Water activated - uint8_t wWOneTime_; // Warm Water one time function on/off - uint8_t wWDisinfecting_; // Warm Water disinfection on/off - uint8_t wWCharging_; // Warm Water charging on/off - uint8_t wWRecharging_; // Warm Water recharge on/off - uint8_t wWTempOK_; // Warm Water temperature ok on/off - uint8_t wWActive_; // - uint8_t wWHeat_; // 3-way valve on WW - uint8_t wWSetPumpPower_; // ww pump speed/power? - uint8_t wWFlowTempOffset_; // Boiler offset for ww heating - uint8_t wWMaxPower_; // Warm Water maximum power + uint8_t wwDisinfectionTemp_; // Warm Water disinfection temperature to prevent infection + uint8_t wwCircMode_; // Warm Water circulation pump mode + uint8_t wwCirc_; // Circulation on/off + uint16_t wwCurTemp_; // Warm Water current temperature + uint16_t wwCurTemp2_; // Warm Water current temperature storage + uint8_t wwCurFlow_; // Warm Water current flow temp in l/min + uint16_t wwStorageTemp1_; // warm water storage temp 1 + uint16_t wwStorageTemp2_; // warm water storage temp 2 + uint8_t wwActivated_; // Warm Water activated + uint8_t wwOneTime_; // Warm Water one time function on/off + uint8_t wwDisinfecting_; // Warm Water disinfection on/off + uint8_t wwCharging_; // Warm Water charging on/off + uint8_t wwRecharging_; // Warm Water recharge on/off + uint8_t wwTempOK_; // Warm Water temperature ok on/off + uint8_t wwActive_; // + uint8_t wwHeat_; // 3-way valve on WW + uint8_t wwSetPumpPower_; // ww pump speed/power? + uint8_t wwFlowTempOffset_; // Boiler offset for ww heating + uint8_t wwMaxPower_; // Warm Water maximum power uint32_t wWStarts_; // Warm Water # starts - uint32_t wWStarts2_; // Warm water control starts - uint32_t wWWorkM_; // Warm Water # minutes - int8_t wWHystOn_; - int8_t wWHystOff_; - uint8_t wWTapActivated_; // maintenance-mode to switch DHW off - - uint16_t mixerTemp_; // mixing temperature - uint16_t tankMiddleTemp_; // Tank middle temperature (TS3) + uint32_t wwStarts2_; // Warm water control starts + uint32_t wwWorkM_; // Warm Water # minutes + int8_t wwHystOn_; + int8_t wwHystOff_; + uint8_t wwTapActivated_; // maintenance-mode to switch DHW off + uint16_t wwMixerTemp_; // mixing temperature + uint16_t wwTankMiddleTemp_; // Tank middle temperature (TS3) // main uint8_t id_; // product id diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index 7e1075a0b..bae1338d0 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -51,7 +51,7 @@ bool Heatpump::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}}"); diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 2339c61c8..afe53d9b4 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -193,7 +193,7 @@ bool Solar::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}}"); diff --git a/src/devices/switch.cpp b/src/devices/switch.cpp index 3163fe89f..b6fab4883 100644 --- a/src/devices/switch.cpp +++ b/src/devices/switch.cpp @@ -57,7 +57,7 @@ bool Switch::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_P(name_s, sizeof(name_s), FSTR_(productid_fmt), device_type_name().c_str()); doc["name"] = name_s; doc["val_tpl"] = FJSON("{{value_json.id}}"); diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 03425e53e..3bb3b9dfb 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -204,7 +204,7 @@ bool Thermostat::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}}"); @@ -2185,7 +2185,7 @@ void Thermostat::register_device_values() { register_device_value( TAG_THERMOSTAT_DATA, &wwSetTempLow_, DeviceValueType::UINT, nullptr, FL_(wwSetTempLow), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwtemplow)); register_device_value( - TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode), FL_(wWCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); + TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode), FL_(wwCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra1_, DeviceValueType::UINT, nullptr, FL_(wwExtra1), DeviceValueUOM::DEGREES); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra2_, DeviceValueType::UINT, nullptr, FL_(wwExtra2), DeviceValueUOM::DEGREES); break; @@ -2227,7 +2227,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_building)); register_device_value(TAG_THERMOSTAT_DATA, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode2), FL_(wwMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwmode)); register_device_value( - TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wWCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); + TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wwCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); break; case EMS_DEVICE_FLAG_RC35: register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); @@ -2257,7 +2257,7 @@ void Thermostat::register_device_values() { MAKE_CF_CB(set_building)); register_device_value(TAG_THERMOSTAT_DATA, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode2), FL_(wwMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwmode)); register_device_value( - TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wWCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); + TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wwCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); break; case EMS_DEVICE_FLAG_JUNKERS: register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime));