From ea9783dbfc47f85c544f7b31dc3e2fe099825bcf Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 1 Nov 2025 19:22:32 +0100 Subject: [PATCH] use ems/ems+ telegrams for forceheatingoff, add fanspd #2702 --- src/core/locale_translations.h | 1 + src/devices/boiler.cpp | 19 ++++++++++--------- src/devices/boiler.h | 1 + 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index 588a11d56..bbbee17bb 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -547,6 +547,7 @@ MAKE_TRANSLATION(heatondelay, "heatondelay", "heat-on delay", "Einschaltverzöge MAKE_TRANSLATION(heatoffdelay, "heatoffdelay", "heat-off delay", "Ausschaltverzögerung Heizen", "", "Frånkopplingsfördröjning värme", "opóźnienie włączania ogrzewania", "", "", "", "", "Oneskorenie vypnutia kúrenia", "zpoždění vypnutí topení") // TODO translate MAKE_TRANSLATION(hpSetDiffPress, "hpsetdiffpress", "set differential pressure", "Pumpensolldruck", "", "VP Tryckskillnad", "różnica ciśnień", "", "", "", "", "nastaviť diferenčný tlak", "nastavení rozdílového tlaku") // TODO translate MAKE_TRANSLATION(hpFan, "fan", "fan", "Lüfter", "", "Fläkt", "wentylator", "", "", "", "", "ventilátor", "ventilátor") // TODO translate +MAKE_TRANSLATION(fanSpd, "fanspd", "fan speed", "Lüfter Geschw.", "", "Fläkt", "wentylator", "", "", "", "", "ventilátor", "ventilátor") // TODO translate MAKE_TRANSLATION(hpShutdown, "shutdown", "shutdown", "Abschalten", "", "Stäng av", "wyłączenie", "", "", "", "", "vypnutie", "vypnutí") // TODO translate MAKE_TRANSLATION(pc0Flow, "pc0flow", "Flow PC0", "Durchfluss PC0", "", "Flöde värmebärarpump", "", "", "", "", "", "prietok PC0", "průtok PC0") // TODO translate MAKE_TRANSLATION(pc1Flow, "pc1flow", "Flow PC1", "Durchfluss PC1", "", "Flöde cirkulationspump", "", "", "", "", "", "prietok PC1", "průtok PC1") // TODO translate diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 0e489f2a0..954b18491 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -887,6 +887,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::NONE, MAKE_CF_CB(set_hpPumpMode)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fan_, DeviceValueType::UINT8, FL_(hpFan), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fan), 20, 100); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fanspd_, DeviceValueType::UINT8, FL_(fanSpd), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpshutdown_, DeviceValueType::CMD, @@ -1215,10 +1216,9 @@ void Boiler::check_active() { if (has_telegram_id(0xE4)) { uint8_t data[] = {1, 0, 0, 1, 1}; write_command(EMS_TYPE_UBASetPoints2, 0, data, sizeof(data), 0); - } else { - uint8_t data[] = {0, 0, 0, 0}; - write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0); } + uint8_t data[] = {0, 0, 0, 0}; + write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0); } // calculate energy for boiler 0x08 from stored modulation an time in units of 0.01 Wh @@ -1733,6 +1733,7 @@ void Boiler::process_HpPower(std::shared_ptr telegram) { has_update(telegram, hpTargetSpd_, 22); has_update(telegram, receiverValveVr0_, 15); has_update(telegram, expansionValveVr1_, 16); + has_update(telegram, fanspd_, 19); // has_update(hpHeatingOn_, hpActivity_ == 1 ? 0xFF : 0); // has_update(hpCoolingOn_, hpActivity_ == 2 ? 0xFF : 0); @@ -2476,6 +2477,7 @@ bool Boiler::set_burn_power(const char * value, const int8_t id) { if (has_telegram_id(0xE4)) { write_command(EMS_TYPE_UBASetPoints2, 2, v); + write_command(EMS_TYPE_UBASetPoints, 1, v); } else { write_command(EMS_TYPE_UBASetPoints, 1, v); } @@ -3459,13 +3461,12 @@ bool Boiler::set_forceHeatingOff(const char * value, const int8_t id) { if (has_telegram_id(0xE4)) { uint8_t data[] = {1, heatingTemp_, (Helpers::hasValue(burnMaxPower_) ? burnMaxPower_ : (uint8_t)100), 1, 1}; write_command(EMS_TYPE_UBASetPoints2, 0, data, sizeof(data), 0); - } else { - uint8_t data[] = {heatingTemp_, - (Helpers::hasValue(burnMaxPower_) ? burnMaxPower_ : (uint8_t)100), - (Helpers::hasValue(pumpModMax_) ? pumpModMax_ : (uint8_t)100), - 0}; - write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0); } + uint8_t data[] = {heatingTemp_, + (Helpers::hasValue(burnMaxPower_) ? burnMaxPower_ : (uint8_t)100), + (Helpers::hasValue(pumpModMax_) ? pumpModMax_ : (uint8_t)100), + 0}; + write_command(EMS_TYPE_UBASetPoints, 0, data, sizeof(data), 0); } has_update(forceHeatingOff_, v); return true; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 17983ba38..34faffa64 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -245,6 +245,7 @@ class Boiler : public EMSdevice { uint8_t hpPumpMode_; uint8_t hpSetDiffPress_; uint8_t fan_; + uint8_t fanspd_; uint8_t hpshutdown_; uint8_t receiverValveVr0_; uint8_t expansionValveVr1_;