Merge branch 'dev' into dev2

This commit is contained in:
MichaelDvP
2024-02-29 14:38:47 +01:00
12 changed files with 287 additions and 156 deletions

View File

@@ -64,6 +64,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
register_telegram_type(0xE6, "UBAParametersPlus", true, MAKE_PF_CB(process_UBAParametersPlus));
register_telegram_type(0xE9, "UBAMonitorWWPlus", false, MAKE_PF_CB(process_UBAMonitorWWPlus));
register_telegram_type(0xEA, "UBAParameterWWPlus", true, MAKE_PF_CB(process_UBAParameterWWPlus));
register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp));
}
if (model() == EMSdevice::EMS_DEVICE_FLAG_HEATPUMP) {
@@ -241,6 +242,16 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
MAKE_CF_CB(set_hyst2_off),
0,
20);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &curveOn_, DeviceValueType::BOOL, FL_(curveOn), DeviceValueUOM::NONE, MAKE_CF_CB(set_curveOn));
register_device_value(
DeviceValueTAG::TAG_DEVICE_DATA, &curveBase_, DeviceValueType::UINT, FL_(curveBase), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_curveBase), 20, 90);
register_device_value(
DeviceValueTAG::TAG_DEVICE_DATA, &curveEnd_, DeviceValueType::UINT, FL_(curveEnd), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_curveEnd), 20, 90);
register_device_value(
DeviceValueTAG::TAG_DEVICE_DATA, &summerTemp_, DeviceValueType::UINT, FL_(summertemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_summerTemp), 0, 30);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nofrost_, DeviceValueType::BOOL, FL_(nofrostmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_nofrost));
register_device_value(
DeviceValueTAG::TAG_DEVICE_DATA, &nofrostTemp_, DeviceValueType::UINT, FL_(nofrosttemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_nofrostTemp), 0, 10);
}
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
&heatingActivated_,
@@ -2023,6 +2034,17 @@ void Boiler::process_HIUSettings(std::shared_ptr<const Telegram> telegram) {
has_update(telegram, setReturnTemp_, 2);
}
// Weather compensation, #1642
// boiler(0x08) -W-> Me(0x0B), ?(0x28), data: 00 3C 32 10 00 05
void Boiler::process_WeatherComp(std::shared_ptr<const Telegram> telegram) {
has_update(telegram, curveOn_, 0);
has_update(telegram, curveEnd_, 1);
has_update(telegram, curveBase_, 2);
has_update(telegram, summerTemp_, 3);
has_update(telegram, nofrost_, 4);
has_update(telegram, nofrostTemp_, 5);
}
// HIU Settings
bool Boiler::set_keepWarmTemp(const char * value, const int8_t id) {
int v;
@@ -3167,4 +3189,58 @@ bool Boiler::set_nomPower(const char * value, const int8_t id) {
return true;
}
bool Boiler::set_curveOn(const char * value, const int8_t id) {
bool v;
if (Helpers::value2bool(value, v)) {
write_command(0x28, 0, v ? 0xFF : 0);
return true;
}
return false;
}
bool Boiler::set_curveBase(const char * value, const int8_t id) {
int v;
if (!Helpers::value2temperature(value, v)) {
return false;
}
write_command(0x28, 2, v);
return true;
}
bool Boiler::set_curveEnd(const char * value, const int8_t id) {
int v;
if (!Helpers::value2temperature(value, v)) {
return false;
}
write_command(0x28, 1, v);
return true;
}
bool Boiler::set_summerTemp(const char * value, const int8_t id) {
int v;
if (!Helpers::value2temperature(value, v)) {
return false;
}
write_command(0x28, 3, v);
return true;
}
bool Boiler::set_nofrost(const char * value, const int8_t id) {
bool v;
if (Helpers::value2bool(value, v)) {
write_command(0x28, 4, v ? 0xFF : 0);
return true;
}
return false;
}
bool Boiler::set_nofrostTemp(const char * value, const int8_t id) {
int v;
if (!Helpers::value2temperature(value, v)) {
return false;
}
write_command(0x28, 5, v);
return true;
}
} // namespace emsesp

View File

@@ -155,6 +155,14 @@ class Boiler : public EMSdevice {
uint16_t headertemp_; // see #1317
uint16_t heatblock_; // see #1317
// weather compensation, see #1642
uint8_t curveOn_;
uint8_t curveBase_;
uint8_t curveEnd_;
uint8_t summerTemp_;
uint8_t nofrost_;
uint8_t nofrostTemp_;
// info
uint32_t upTimeTotal_; // Operating time
uint32_t upTimeControl_; // Operating time control
@@ -355,6 +363,7 @@ class Boiler : public EMSdevice {
void process_HpSettings3(std::shared_ptr<const Telegram> telegram);
void process_HpEnergy(std::shared_ptr<const Telegram> telegram);
void process_HpMeters(std::shared_ptr<const Telegram> telegram);
void process_WeatherComp(std::shared_ptr<const Telegram> telegram);
// HIU
void process_HIUSettings(std::shared_ptr<const Telegram> telegram);
void process_HIUMonitor(std::shared_ptr<const Telegram> telegram);
@@ -536,6 +545,12 @@ class Boiler : public EMSdevice {
bool set_delayBoiler(const char * value, const int8_t id);
bool set_tempDiffBoiler(const char * value, const int8_t id);
*/
bool set_curveOn(const char * value, const int8_t id);
bool set_curveBase(const char * value, const int8_t id);
bool set_curveEnd(const char * value, const int8_t id);
bool set_summerTemp(const char * value, const int8_t id);
bool set_nofrost(const char * value, const int8_t id);
bool set_nofrostTemp(const char * value, const int8_t id);
bool set_nrgHeat(const char * value, const int8_t id);
bool set_nrgWw(const char * value, const int8_t id);