changes to mask_entity()

This commit is contained in:
Proddy
2022-04-03 13:44:37 +02:00
parent 1f8213e315
commit 38128f7864

View File

@@ -404,9 +404,9 @@ void EMSdevice::register_device_value(uint8_t tag,
if ((entityCustomization.product_id == product_id()) && (entityCustomization.device_id == device_id())) { if ((entityCustomization.product_id == product_id()) && (entityCustomization.device_id == device_id())) {
std::string entity = tag < DeviceValueTAG::TAG_HC1 ? read_flash_string(short_name) : tag_to_string(tag) + "/" + read_flash_string(short_name); std::string entity = tag < DeviceValueTAG::TAG_HC1 ? read_flash_string(short_name) : tag_to_string(tag) + "/" + read_flash_string(short_name);
for (std::string entity_id : entityCustomization.entity_ids) { for (std::string entity_id : entityCustomization.entity_ids) {
uint8_t flag = Helpers::hextoint(entity_id.substr(0, 2).c_str());
if (entity_id.substr(2) == entity) { if (entity_id.substr(2) == entity) {
state = flag << 4; // set state high bits to flag, turn off active and ha flags uint8_t mask = Helpers::hextoint(entity_id.substr(0, 2).c_str());
state = mask << 4; // set state high bits to flag, turn off active and ha flags
break; break;
} }
} }
@@ -759,7 +759,7 @@ void EMSdevice::generate_values_web(JsonObject & output) {
// as generate_values_web() but stripped down to only show all entities and their state // as generate_values_web() but stripped down to only show all entities and their state
// this is used only for WebCustomizationService::device_entities() // this is used only for WebCustomizationService::device_entities()
void EMSdevice::generate_values_web_all(JsonArray & output) { void EMSdevice::generate_values_web_all(JsonArray & output) {
for (auto & dv : devicevalues_) { for (const auto & dv : devicevalues_) {
// also show commands and entities that have an empty full name // also show commands and entities that have an empty full name
JsonObject obj = output.createNestedObject(); JsonObject obj = output.createNestedObject();
@@ -847,30 +847,24 @@ void EMSdevice::generate_values_web_all(JsonArray & output) {
} }
} }
// reset all entities to being visible // set mask per device entity based on the id which is prefixed with the 2 char hex mask value
// this is called before loading in the exclude entities list from the customization service // returns true if the entity has a mask set
void EMSdevice::reset_entity_masks() { bool EMSdevice::mask_entity(const std::string & entity_id) {
for (auto & dv : devicevalues_) {
dv.state &= 0x0F; // clear high nibble
}
}
// 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()) << 4);
for (auto & dv : devicevalues_) { 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); 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)) { if (entity == entity_id.substr(2)) {
// remove ha config on change of dv_readonly flag uint8_t mask = Helpers::hextoint(entity_id.substr(0, 2).c_str()); // first character contains mask flags
if (Mqtt::ha_enabled() && ((dv.state ^ flag) & DeviceValueState::DV_READONLY)) { if (Mqtt::ha_enabled() && (((dv.state >> 4) ^ mask) & (DeviceValueState::DV_READONLY >> 4))) {
// remove ha config on change of dv_readonly flag
dv.remove_state(DeviceValueState::DV_HA_CONFIG_CREATED); dv.remove_state(DeviceValueState::DV_HA_CONFIG_CREATED);
Mqtt::publish_ha_sensor_config(dv, "", "", true); // delete topic (remove = true) Mqtt::publish_ha_sensor_config(dv, "", "", true); // delete topic (remove = true)
} }
dv.state = (dv.state & 0x0F) | flag; // set state high bits to flag dv.state = ((dv.state & 0x0F) | (mask << 4)); // set state high bits to flag
return; return mask; // true if entity mask is not the deafult 0
} }
} }
return false;
} }
// builds json for a specific device value / entity // builds json for a specific device value / entity