mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 16:29:51 +03:00
add boiler ww-hysteresis, maintenance settings
This commit is contained in:
@@ -136,7 +136,6 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
||||
register_device_value(TAG_BOILER_DATA, &serviceCode_, DeviceValueType::TEXT, nullptr, FL_(serviceCode), DeviceValueUOM::NONE);
|
||||
register_device_value(TAG_BOILER_DATA, &serviceCodeNumber_, DeviceValueType::USHORT, nullptr, FL_(serviceCodeNumber), DeviceValueUOM::NONE);
|
||||
register_device_value(TAG_BOILER_DATA, &maintenanceMessage_, DeviceValueType::TEXT, nullptr, FL_(maintenanceMessage), DeviceValueUOM::NONE);
|
||||
register_device_value(TAG_BOILER_DATA, &maintenanceDate_, DeviceValueType::TEXT, nullptr, FL_(maintenanceDate), DeviceValueUOM::NONE);
|
||||
register_device_value(TAG_BOILER_DATA,
|
||||
&maintenanceType_,
|
||||
DeviceValueType::ENUM,
|
||||
@@ -144,7 +143,20 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
||||
FL_(maintenanceType),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_maintenance));
|
||||
register_device_value(TAG_BOILER_DATA, &maintenanceTime_, DeviceValueType::USHORT, nullptr, FL_(maintenanceTime), DeviceValueUOM::HOURS);
|
||||
register_device_value(TAG_BOILER_DATA,
|
||||
&maintenanceTime_,
|
||||
DeviceValueType::USHORT,
|
||||
nullptr,
|
||||
FL_(maintenanceTime),
|
||||
DeviceValueUOM::HOURS,
|
||||
MAKE_CF_CB(set_maintenancetime));
|
||||
register_device_value(TAG_BOILER_DATA,
|
||||
&maintenanceDate_,
|
||||
DeviceValueType::TEXT,
|
||||
nullptr,
|
||||
FL_(maintenanceDate),
|
||||
DeviceValueUOM::NONE,
|
||||
MAKE_CF_CB(set_maintenancedate));
|
||||
// heatpump info
|
||||
if (model() == EMS_DEVICE_FLAG_HEATPUMP) {
|
||||
register_device_value(TAG_BOILER_DATA, &upTimeControl_, DeviceValueType::TIME, FL_(div60), FL_(upTimeControl), DeviceValueUOM::MINUTES);
|
||||
@@ -192,6 +204,8 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
||||
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::NONE);
|
||||
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_,
|
||||
DeviceValueType::UINT,
|
||||
@@ -315,8 +329,8 @@ 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(wW?_, 3)); // Hyst on (default -5)
|
||||
// has_update(telegram->read_value(wW?_, 4)); // (0xFF) Maybe: Hyst off -1?
|
||||
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
|
||||
@@ -554,6 +568,8 @@ void Boiler::process_UBAParameterWWPlus(std::shared_ptr<const Telegram> telegram
|
||||
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));
|
||||
}
|
||||
|
||||
// 0xE9 - WW monitor ems+
|
||||
@@ -902,6 +918,42 @@ bool Boiler::set_max_power(const char * value, const int8_t id) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// set ww on hysteresis
|
||||
bool Boiler::set_ww_hyst_on(const char * value, const int8_t id) {
|
||||
int v = 0;
|
||||
if (!Helpers::value2number(value, v)) {
|
||||
LOG_WARNING(F("Set ww on hysteresis: Invalid value"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO(F("Setting ww on hysteresis on to %d C"), v);
|
||||
if (get_toggle_fetch(EMS_TYPE_UBAParameterWWPlus)) {
|
||||
write_command(EMS_TYPE_UBAParameterWWPlus, 7, v, EMS_TYPE_UBAParameterWWPlus);
|
||||
} else {
|
||||
write_command(EMS_TYPE_UBAParameterWW, 3, v, EMS_TYPE_UBAParameterWW);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// set ww off hysteresis
|
||||
bool Boiler::set_ww_hyst_off(const char * value, const int8_t id) {
|
||||
int v = 0;
|
||||
if (!Helpers::value2number(value, v)) {
|
||||
LOG_WARNING(F("Set ww off hysteresis: Invalid value"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO(F("Setting ww off hysteresis off to %d C"), v);
|
||||
if (get_toggle_fetch(EMS_TYPE_UBAParameterWWPlus)) {
|
||||
write_command(EMS_TYPE_UBAParameterWWPlus, 8, v, EMS_TYPE_UBAParameterWWPlus);
|
||||
} else {
|
||||
write_command(EMS_TYPE_UBAParameterWW, 4, v, EMS_TYPE_UBAParameterWW);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// set warm water max power
|
||||
bool Boiler::set_warmwater_maxpower(const char * value, const int8_t id) {
|
||||
int v = 0;
|
||||
@@ -1268,5 +1320,40 @@ bool Boiler::set_maintenance(const char * value, const int8_t id) {
|
||||
LOG_WARNING(F("Setting maintenance: wrong format"));
|
||||
return false;
|
||||
}
|
||||
//maintenance
|
||||
bool Boiler::set_maintenancetime(const char * value, const int8_t id) {
|
||||
int hrs;
|
||||
if (Helpers::value2number(value, hrs)) {
|
||||
if (hrs > 99 && hrs < 25600) {
|
||||
LOG_INFO(F("Setting maintenance time %d hours"), hrs);
|
||||
uint8_t data[2] = {1, (uint8_t)(hrs / 100)};
|
||||
write_command(0x15, 0, data, 2, 0x15);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
LOG_WARNING(F("Setting maintenance: wrong format"));
|
||||
return false;
|
||||
}
|
||||
|
||||
//maintenance
|
||||
bool Boiler::set_maintenancedate(const char * value, const int8_t id) {
|
||||
if (strlen(value) == 10) { // date
|
||||
uint8_t day = (value[0] - '0') * 10 + (value[1] - '0');
|
||||
uint8_t month = (value[3] - '0') * 10 + (value[4] - '0');
|
||||
uint8_t year = (uint8_t)(Helpers::atoint(&value[6]) - 2000);
|
||||
if (day > 0 && day < 32 && month > 0 && month < 13) {
|
||||
LOG_INFO(F("Setting maintenance date to %02d.%02d.%04d"), day, month, year + 2000);
|
||||
uint8_t data[5] = {2, (uint8_t)(maintenanceTime_ / 100), day, month, year};
|
||||
write_command(0x15, 0, data, 5, 0x15);
|
||||
} else {
|
||||
LOG_WARNING(F("Setting maintenance: wrong format %d.%d.%d"), day, month, year + 2000);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
LOG_WARNING(F("Setting maintenance: wrong format"));
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace emsesp
|
||||
|
||||
Reference in New Issue
Block a user