From 2508a30b79bd37194470f959287a91c98b093594 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 18 Nov 2024 16:30:30 +0100 Subject: [PATCH 1/5] add solar #2212, rename dhw/startshp #2217 --- src/devices/boiler.cpp | 4 ++-- src/devices/boiler.h | 2 +- src/devices/solar.cpp | 38 ++++++++++++++++++++++++-------- src/devices/solar.h | 5 +++++ src/locale_translations.h | 6 ++++- src/modbus_entity_parameters.hpp | 2 +- 6 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 3beccfd44..c48e08e86 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -520,7 +520,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &totalCompStarts_, DeviceValueType::UINT24, FL_(totalCompStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingStarts_, DeviceValueType::UINT24, FL_(heatingStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &coolingStarts_, DeviceValueType::UINT24, FL_(coolingStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DHW1, &wwStarts2_, DeviceValueType::UINT24, FL_(wwStarts2), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DHW1, &wwStartsHp_, DeviceValueType::UINT24, FL_(wwStartsHp), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolStarts_, DeviceValueType::UINT24, FL_(poolStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsTotal_, DeviceValueType::UINT24, FL_(nrgConsTotal), DeviceValueUOM::KWH); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompTotal_, DeviceValueType::UINT24, FL_(nrgConsCompTotal), DeviceValueUOM::KWH); @@ -1615,7 +1615,7 @@ void Boiler::process_UBAInformation(std::shared_ptr telegram) { has_update(telegram, totalCompStarts_, 20); has_update(telegram, heatingStarts_, 28); has_update(telegram, coolingStarts_, 36); - has_update(telegram, wwStarts2_, 24); + has_update(telegram, wwStartsHp_, 24); has_update(telegram, poolStarts_, 32); has_update(telegram, nrgConsTotal_, 64); diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 2879e90d9..88b23f582 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -85,7 +85,7 @@ class Boiler : public EMSdevice { uint8_t wwMaxPower_; // DHW maximum power uint8_t wwMaxTemp_; // DHW maximum temperature uint32_t wwStarts_; // DHW starts - uint32_t wwStarts2_; // DHW control starts + uint32_t wwStartsHp_; // DHW starts Heatpump uint32_t wwWorkM_; // DHW minutes int8_t wwHystOn_; int8_t wwHystOff_; diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 5e7d5dcf3..3592dead0 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -206,6 +206,18 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueNumOp::DV_NUMOP_DIV10, FL_(cyl2BottomTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &cylBottomTemp3_, + DeviceValueType::INT16, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(cyl3BottomTemp), + DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &cylTopTemp_, + DeviceValueType::INT16, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(cylTopTemp), + DeviceValueUOM::DEGREES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatExchangerTemp_, DeviceValueType::INT16, @@ -215,6 +227,9 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylPumpMod_, DeviceValueType::UINT8, FL_(cylPumpMod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &valveStatus_, DeviceValueType::BOOL, FL_(valveStatus), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &vs1Status_, DeviceValueType::BOOL, FL_(vs1Status), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &vs3Status_, DeviceValueType::BOOL, FL_(vs3Status), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &transferPump_, DeviceValueType::BOOL, FL_(transferPump), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &transferPumpMod_, DeviceValueType::UINT8, FL_(transferPumpMod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorMaxTemp_, DeviceValueType::UINT8, @@ -580,20 +595,22 @@ void Solar::process_SM100Monitor(std::shared_ptr telegram) { has_update(telegram, cylBottomTemp2_, 16); // is *10 - TS5: Temperature sensor 2 cylinder, bottom, or swimming pool has_update(telegram, heatExchangerTemp_, 20); // is *10 - TS6: Heat exchanger temperature sensor - has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 - has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature - has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 + has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature + has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, cylBottomTemp3_, 24); // is *10 - TS5: Temperature sensor cylinder 3, bottom } // SM100Monitor2 - 0x0363 Heatcounter // e.g. B0 00 FF 00 02 63 80 00 80 00 00 00 80 00 80 00 80 00 00 80 00 5A // Solar(0x30) -> All(0x00), SM100Monitor2(0x363), data: 01 E1 01 6B 00 00 01 5D 02 8E 80 00 0F 80 00 void Solar::process_SM100Monitor2(std::shared_ptr telegram) { - has_update(telegram->read_value(heatCntFlowTemp_, 0)); // is *10 - has_update(telegram->read_value(heatCntRetTemp_, 2)); // is *10 - has_update(telegram->read_value(heatCnt_, 12)); - has_update(telegram->read_value(swapRetTemp_, 6)); // is *10 - has_update(telegram->read_value(swapFlowTemp_, 8)); // is *10 + has_update(telegram, heatCntFlowTemp_, 0); // is *10 + has_update(telegram, heatCntRetTemp_, 2); // is *10 + has_update(telegram, heatCnt_, 12); + has_update(telegram, swapRetTemp_, 6); // is *10 + has_update(telegram, swapFlowTemp_, 8); // is *10 + has_update(telegram, cylTopTemp_, 10); // is *10 - TS10: cylinder top temperature } // SM100Config - 0x0366 @@ -607,7 +624,7 @@ void Solar::process_SM100Config(std::shared_ptr telegram) { // SM100Config1 - 0x035F // e.g. Solar(0x30) -> Me(0x0B), ?(0x35F), data: 00 00 41 01 1E 0A 0C 19 00 3C 19 void Solar::process_SM100Config1(std::shared_ptr telegram) { - has_update(telegram->read_value(cylPriority_, 3)); + has_update(telegram, cylPriority_, 3); } /* @@ -644,6 +661,8 @@ void Solar::process_SM100Status(std::shared_ptr telegram) { solarpumpmod = solarPumpMinMod_ * 5; // set to minimum } has_update(solarPump2Mod_, solarpumpmod); + + has_update(telegram, transferPumpMod_, 14); } /* @@ -658,6 +677,7 @@ void Solar::process_SM100Status2(std::shared_ptr telegram) { has_bitupdate(telegram, solarPump_, 10, 2); // on if bit 2 set has_bitupdate(telegram, solarPump2_, 1, 2); // on if bit 2 set has_bitupdate(telegram, m1Valve_, 7, 2); // values 8/4 seen + has_bitupdate(telegram, transferPump_, 11, 2); // #2212 } /* diff --git a/src/devices/solar.h b/src/devices/solar.h index 84311ee97..0a696f1b9 100644 --- a/src/devices/solar.h +++ b/src/devices/solar.h @@ -33,6 +33,8 @@ class Solar : public EMSdevice { int16_t collectorTemp_; // TS1: Temperature sensor for collector array 1 int16_t cylBottomTemp_; // TS2: Temperature sensor 1 cylinder, bottom cyl (solar thermal system) int16_t cylBottomTemp2_; // TS5: Temperature sensor 2 cylinder, bottom cyl, or swimming pool (solar thermal system) + int16_t cylBottomTemp3_; // TS11: Temperature sensor 3. cylinder + int16_t cylTopTemp_; // TS10: Temperature sensor 1 cylinder, Top int16_t heatExchangerTemp_; // TS6: Heat exchanger temperature sensor int16_t collector2Temp_; // TS7: Temperature sensor for collector array 2 int16_t cylMiddleTemp_; // TS14: Cylinder middle temp @@ -46,6 +48,9 @@ class Solar : public EMSdevice { uint8_t m1Valve_; // M1: heat assistance valve uint8_t m1Power_; // M1: heat assistance valve uint8_t vs1Status_; // VS1: status + uint8_t vs3Status_; // VS3: status + uint8_t transferPump_; + uint8_t transferPumpMod_; // 0x363 heat counter uint16_t heatCntFlowTemp_; diff --git a/src/locale_translations.h b/src/locale_translations.h index fc16b9611..50db65304 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -623,7 +623,7 @@ MAKE_TRANSLATION(wwActive, "active", "active", "aktiv", "Actief", "Aktiv", "akty MAKE_TRANSLATION(ww3wayValve, "3wayvalve", "3-way valve active", "3-Wege-Ventil aktiv", "3-wegklep actief", "Trevägsventil aktiv", "zawór 3-drogowy aktywny", "aktiv trevisventil", "vanne 3 voies active", "3 yollu vana", "valvola 3-vie", "3-cestný ventil aktívny", "aktivní 3-cestný ventil") MAKE_TRANSLATION(wwMixerTemp, "mixertemp", "mixer temperature", "Mischertemperatur", "Mixertemperatuur", "Blandningsventil-tempertur", "temperatura mieszacza", "temperatur blandeventil", "température mélangeur", "karıştırıcı sıcaklığı", "temperatura miscelatore", "teplota mixéra", "teplota směšovače") MAKE_TRANSLATION(wwStarts, "starts", "starts", "Anzahl Starts", "Aantal starts", "Antal starter", "liczba załączeń", "antall starter", "démarrages", "başlıyor", "avvii", "Počet štartov", "Počet startů") -MAKE_TRANSLATION(wwStarts2, "starts2", "control starts2", "Anzahl Starts Kreis 2 ", "Aantal starts circuit 2", "Antal starter Krets 2", "liczba załączeń 2", "antall starter krets 2", "démarrages contrôle 2", "devre 2 başlıyor", "avvii controllati 2", "Okruh 2 počet štartov", "Počet startů okruh 2") +MAKE_TRANSLATION(wwStartsHp, "startshp", "starts hp", "Anzahl Starts WP", "", "", "", "", "", "", "", "", "") // TODO translate MAKE_TRANSLATION(wwWorkM, "workm", "active time", "aktive Zeit", "Actieve tijd", "Aktiv Tid", "czas aktywności", "driftstid", "temps actif", "aktif zaman", "tempo attivo", "aktívny čas", "aktivní čas") MAKE_TRANSLATION(wwHystOn, "hyston", "hysteresis on temperature", "Einschalttemperaturdifferenz", "Inschakeltemperatuurverschil", "Hysteres PÅ-temperatur", "histereza załączania", "innkoblingstemperaturforskjell", "hystérésis température allumage", "çalışma sıcaklığı farkı", "differenza di temperatura di accensione", "hysterézia teploty", "hystereze zapnutí") MAKE_TRANSLATION(wwHystOff, "hystoff", "hysteresis off temperature", "Ausschalttemperaturdifferenz", "Uitschakeltemperatuurverschil", "Hysteres AV-temperatur", "histereza wyłączania", "utkoblingstemperaturforskjell", "hystérésis température extinction", "kapatma sıcaklığı farkı", "differenza di temperatura di spegnimento", "teplota hysterézie", "hystereze vypnutí") @@ -814,6 +814,10 @@ MAKE_TRANSLATION(m1WorkTime, "m1worktime", "differential control working time", MAKE_TRANSLATION(energyLastHour, "energylasthour", "energy last hour", "Energie letzte Std", "Energie laatste uur", "Energi Senaste Timmen", "energia w ciągu ostatniej godziny", "energi siste time", "énergie dernière heure", "son saat enerji", "Eenergia ultima ora", "energia za poslednú hodinu", "energie za poslední hodinu") MAKE_TRANSLATION(energyTotal, "energytotal", "total energy", "Gesamtenergie", "Totale energie", "Total Energi", "energia całkowita", "total energi", "énergie totale", "toplam enerji", "energia totale", "celková energia", "celková energie") MAKE_TRANSLATION(energyToday, "energytoday", "total energy today", "Energie heute", "Energie vandaag", "Total Energi Idag", "energia całkowita dzisiaj", "total energi i dag", "énergie totale aujourd'hui", "bugün toplam enerji", "totale energia giornaliera", "celková energia dnes", "celková energie dnes") +MAKE_TRANSLATION(cyl3BottomTemp, "cyl3bottomtemp", "third cylinder bottom temperature (TS11)") // TODO translate +MAKE_TRANSLATION(cylTopTemp, "cyltoptemp", "cylinder top temperature (TS10)", "Speichertemperatur oben (TS10)") // TODO translate +MAKE_TRANSLATION(transferPumpMod, "transferpumpmod", "transfer pump modulation", "Transferpumpenmodulation") // TODO translate +MAKE_TRANSLATION(transferPump, "transferpump", "transfer pump", "Transferpumpe") // TODO translate // solar dhw MAKE_TRANSLATION(wwColdTemp, "coldtemp", "cold water", "Kaltwasser", "", "", "zimna woda", "", "", "", "", "studená voda", "studená voda") // TODO translate diff --git a/src/modbus_entity_parameters.hpp b/src/modbus_entity_parameters.hpp index d41774a68..bc0dfa180 100644 --- a/src/modbus_entity_parameters.hpp +++ b/src/modbus_entity_parameters.hpp @@ -196,7 +196,7 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgWw), 0, 2), // nrg REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(meterWw), 2, 2), // meter REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(upTimeCompWw), 4, 2), // uptimecomp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(wwStarts2), 6, 2), // starts2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(wwStartsHp), 6, 2), // startsHp REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgConsCompWw), 8, 2), // nrgconscomp REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(auxElecHeatNrgConsWw), 10, 2), // auxelecheatnrgcons REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgSuppWw), 12, 2), // nrgsupp From 3ebb0225c82948bbe271c619b420bca2551f5b6b Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 18 Nov 2024 18:34:58 +0100 Subject: [PATCH 2/5] fix memory leak #2216, dev.9 --- CHANGELOG_LATEST.md | 4 ++++ src/version.h | 2 +- src/web/WebAPIService.cpp | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 73df2fa9c..c5feb0dd1 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -12,6 +12,7 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - Bosch CS6800i AW - Silent Mode + Electrical Power Reduction (HP) [#2147](https://github.com/emsesp/EMS-ESP32/issues/2147) - `/api/system/showeralert` and `/api/system/showertimer` [#2182](https://github.com/emsesp/EMS-ESP32/issues/2182) - MX400 [#2198](https://github.com/emsesp/EMS-ESP32/issues/2198) +- SM200 values [#2212](https://github.com/emsesp/EMS-ESP32/discussions/2212) ## Fixed @@ -24,5 +25,8 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - reading too many telegram parts - heatpump cost UOMs [#2188](https://github.com/emsesp/EMS-ESP32/issues/2188) - analog dac output and inputs on dac pins [#2201](https://github.com/emsesp/EMS-ESP32/discussions/2201) +- api memory leak [#2216](https://github.com/emsesp/EMS-ESP32/issues/2216) ## Changed + +- name of wwstarts2 [#2217](https://github.com/emsesp/EMS-ESP32/discussions/2217) diff --git a/src/version.h b/src/version.h index 5881f12e7..ab1a68da8 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.1-dev.8" \ No newline at end of file +#define EMSESP_APP_VERSION "3.7.1-dev.9" \ No newline at end of file diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 4dd87e2b3..17f01b0e7 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -32,13 +32,12 @@ WebAPIService::WebAPIService(AsyncWebServer * server, SecurityManager * security // POST|GET api/{device} // POST|GET api/{device}/{entity} void WebAPIService::webAPIService(AsyncWebServerRequest * request, JsonVariant json) { + JsonDocument input_doc; // has no body JSON so create dummy as empty input object JsonObject input; // if no body then treat it as a secure GET if ((request->method() == HTTP_GET) || (!json.is())) { // HTTP GET - JsonDocument input_doc; // has no body JSON so create dummy as empty input object input = input_doc.to(); - } else { // HTTP_POST input = json.as(); // extract values from the json. these will be used as default values From d06ea9590e856220f37ac68db53b72da0438007b Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 19 Nov 2024 08:19:19 +0100 Subject: [PATCH 3/5] show mqtt reconnects the same way as network reconnects (count disconnects) --- interface/src/app/status/MqttStatus.tsx | 4 ++-- src/mqtt.cpp | 2 +- src/system.cpp | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/src/app/status/MqttStatus.tsx b/interface/src/app/status/MqttStatus.tsx index 8f7207c1b..d2808b3b6 100644 --- a/interface/src/app/status/MqttStatus.tsx +++ b/interface/src/app/status/MqttStatus.tsx @@ -70,9 +70,9 @@ const MqttStatus = () => { return LL.NOT_ENABLED(); } if (connected) { - return LL.CONNECTED(0) + (connect_count > 1 ? ' (' + connect_count + ')' : ''); + return LL.CONNECTED(0) + ' (' + connect_count + ')'; } - return LL.DISCONNECTED() + (connect_count > 1 ? ' (' + connect_count + ')' : ''); + return LL.DISCONNECTED() + ' (' + connect_count + ')'; }; const disconnectReason = ({ disconnect_reason }: MqttStatusType) => { diff --git a/src/mqtt.cpp b/src/mqtt.cpp index edf5981b4..af2d954fb 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -468,6 +468,7 @@ void Mqtt::on_disconnect(espMqttClientTypes::DisconnectReason reason) { return; } connecting_ = false; + connectcount_++; // count # reconnects if (reason == espMqttClientTypes::DisconnectReason::TCP_DISCONNECTED) { LOG_WARNING("MQTT disconnected: TCP"); @@ -499,7 +500,6 @@ void Mqtt::on_connect() { LOG_INFO("MQTT connected"); connecting_ = true; - connectcount_++; // count # reconnects. not currently used. queuecount_ = mqttClient_->queueSize(); load_settings(); // reload MQTT settings - in case they have changes diff --git a/src/system.cpp b/src/system.cpp index 27df27e30..96565589e 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -691,9 +691,9 @@ void System::heartbeat_json(JsonObject output) { output["txfails"] = EMSESP::txservice_.telegram_read_fail_count() + EMSESP::txservice_.telegram_write_fail_count(); if (Mqtt::enabled()) { - output["mqttcount"] = Mqtt::publish_count(); - output["mqttfails"] = Mqtt::publish_fails(); - output["mqttconnects"] = Mqtt::connect_count(); + output["mqttcount"] = Mqtt::publish_count(); + output["mqttfails"] = Mqtt::publish_fails(); + output["mqttreconnects"] = Mqtt::connect_count(); } output["apicalls"] = WebAPIService::api_count(); // + WebAPIService::api_fails(); output["apifails"] = WebAPIService::api_fails(); @@ -1557,7 +1557,7 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output node["MQTTPublishes"] = Mqtt::publish_count(); node["MQTTQueued"] = Mqtt::publish_queued(); node["MQTTPublishFails"] = Mqtt::publish_fails(); - node["MQTTConnects"] = Mqtt::connect_count(); + node["MQTTReconnects"] = Mqtt::connect_count(); } EMSESP::esp8266React.getMqttSettingsService()->read([&](const MqttSettings & settings) { node["enabled"] = settings.enabled; From e3354b2a497126e8643a63fa5b63e28d7279309a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 19 Nov 2024 08:20:01 +0100 Subject: [PATCH 4/5] add start counters #2220 --- src/devices/heatpump.cpp | 9 +++++++++ src/devices/heatpump.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index 0026882aa..66ff3d6ac 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -35,6 +35,7 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c register_telegram_type(0x99C, "HPComp", false, MAKE_PF_CB(process_HPComp)); register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy)); register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters)); + register_telegram_type(0x99A, "HPStarts", false, MAKE_PF_CB(process_HpStarts)); // device values register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &airHumidity_, DeviceValueType::UINT8, FL_(airHumidity), DeviceValueUOM::PERCENT); @@ -177,6 +178,8 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c FL_(meterHeat), DeviceValueUOM::KWH); register_device_value(DeviceValueTAG::TAG_DHW1, &meterWw_, DeviceValueType::UINT24, DeviceValueNumOp::DV_NUMOP_DIV100, FL_(meterWw), DeviceValueUOM::KWH); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatStartsHp_, DeviceValueType::UINT24, FL_(heatingStarts), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DHW1, &wwStartsHp_, DeviceValueType::UINT24, FL_(wwStartsHp), DeviceValueUOM::NONE); } /* @@ -271,6 +274,12 @@ void Heatpump::process_HpMeters(std::shared_ptr telegram) { has_update(telegram, meterWw_, 32); } +// Broadcast (0x099A), data: 05 00 00 00 00 00 00 37 00 00 1D 00 00 52 00 00 13 01 00 01 7C +void Heatpump::process_HpStarts(std::shared_ptr telegram) { + has_update(telegram, heatStartsHp_, 14, 3); + has_update(telegram, wwStartsHp_, 11,3 ); +} + /* * Broadcast (0x099A), data: 05 00 00 00 00 00 00 37 00 00 1D 00 00 52 00 00 13 01 00 01 7C * Broadcast (0x099B), data: 80 00 80 00 01 3C 01 38 80 00 80 00 80 00 01 37 00 00 00 00 64 diff --git a/src/devices/heatpump.h b/src/devices/heatpump.h index e53c0a78d..526d51bb4 100644 --- a/src/devices/heatpump.h +++ b/src/devices/heatpump.h @@ -76,6 +76,8 @@ class Heatpump : public EMSdevice { uint32_t meterHeat_; uint32_t meterWw_; + uint32_t heatStartsHp_; + uint32_t wwStartsHp_; void process_HPMonitor1(std::shared_ptr telegram); void process_HPMonitor2(std::shared_ptr telegram); @@ -86,6 +88,7 @@ class Heatpump : public EMSdevice { void process_HPComp(std::shared_ptr telegram); void process_HpEnergy(std::shared_ptr telegram); void process_HpMeters(std::shared_ptr telegram); + void process_HpStarts(std::shared_ptr telegram); bool set_controlStrategy(const char * value, const int8_t id); bool set_lowNoiseMode(const char * value, const int8_t id); From 0fee98c4c28016695df9e4997f37e4cd9106d1f9 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 19 Nov 2024 08:58:36 +0100 Subject: [PATCH 5/5] remove ntp status from HA #2218 --- src/mqtt.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mqtt.cpp b/src/mqtt.cpp index af2d954fb..465817488 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -584,7 +584,6 @@ void Mqtt::ha_status() { publish_system_ha_sensor_config(DeviceValueType::STRING, "EMS Bus", "bus_status", DeviceValueUOM::NONE); publish_system_ha_sensor_config(DeviceValueType::STRING, "Uptime", "uptime", DeviceValueUOM::NONE); publish_system_ha_sensor_config(DeviceValueType::INT8, "Uptime (sec)", "uptime_sec", DeviceValueUOM::SECONDS); - publish_system_ha_sensor_config(DeviceValueType::BOOL, "NTP status", "ntp_status", DeviceValueUOM::CONNECTIVITY); publish_system_ha_sensor_config(DeviceValueType::INT8, "Free memory", "freemem", DeviceValueUOM::KB); publish_system_ha_sensor_config(DeviceValueType::INT8, "Max Alloc", "max_alloc", DeviceValueUOM::KB); publish_system_ha_sensor_config(DeviceValueType::INT8, "MQTT fails", "mqttfails", DeviceValueUOM::NONE);