From 7c37c9a4c86ce735755af362f52b59cb76789892 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 30 Mar 2022 15:55:24 +0200 Subject: [PATCH] recreate ha config on readonly changes --- src/emsdevice.cpp | 9 +++++++-- src/emsdevicevalue.h | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 7236f74ae..00c05b64d 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -858,11 +858,16 @@ void EMSdevice::reset_entity_masks() { // disable/exclude/mask_out a device entity based on the id void EMSdevice::mask_entity(const std::string & entity_id) { // first character contains mask flags - uint8_t flag = Helpers::hextoint(entity_id.substr(0, 2).c_str()); + uint8_t flag = (Helpers::hextoint(entity_id.substr(0, 2).c_str()) << 4); for (auto & dv : devicevalues_) { std::string entity = dv.tag < DeviceValueTAG::TAG_HC1 ? read_flash_string(dv.short_name) : tag_to_string(dv.tag) + "/" + read_flash_string(dv.short_name); if (entity == entity_id.substr(2)) { - dv.state = (dv.state & 0x0F) | (flag << 4); // set state high bits to flag, turn off active and ha flags + // remove ha config on change of dv_readonly flag + if (Mqtt::ha_enabled() && ((dv.state ^ flag) & DeviceValueState::DV_READONLY)) { + dv.remove_state(DeviceValueState::DV_HA_CONFIG_CREATED); + Mqtt::publish_ha_sensor_config(dv, "", "", true); // delete topic (remove = true) + } + dv.state = (dv.state & 0x0F) | flag; // set state high bits to flag return; } } diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 5b8c358ea..dee8f3570 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -114,7 +114,7 @@ class DeviceValue { DV_DEFAULT = 0, // 0 - does not yet have a value DV_ACTIVE = (1 << 0), // 1 - has a validated real value DV_HA_CONFIG_CREATED = (1 << 1), // 2 - set if the HA config topic has been created - DV_HA_CLIMATE_NO_RT = (1 << 2), // 3 - climate created without roomTemp + DV_HA_CLIMATE_NO_RT = (1 << 2), // 4 - climate created without roomTemp // high nibble as mask for exclusions & special functions DV_WEB_EXCLUDE = (1 << 4), // 16 - not shown on web