# pylint: disable=duplicate-code # Mirrors unknown_ignored_zones by design. """Spook - Your homie.""" from __future__ import annotations from typing import TYPE_CHECKING from homeassistant.const import EVENT_COMPONENT_LOADED from homeassistant.helpers import entity_registry as er from ....const import LOGGER from ....entity_filtering import async_filter_known_entity_ids, async_get_all_entity_ids from ....repairs import AbstractSpookRepair if TYPE_CHECKING: from homeassistant.components.proximity.coordinator import ( ProximityDataUpdateCoordinator, ) class SpookRepair(AbstractSpookRepair): """Spook repair that tries to find unknown tracked entities used in proximity.""" domain = "proximity" repair = "proximity_unknown_tracked_entities" inspect_events = { EVENT_COMPONENT_LOADED, er.EVENT_ENTITY_REGISTRY_UPDATED, } inspect_config_entry_changed = "proximity" automatically_clean_up_issues = True async def async_inspect(self) -> None: """Trigger a inspection.""" LOGGER.debug("Spook is inspecting: %s", self.repair) coordinators: list[ProximityDataUpdateCoordinator] | None if not (coordinators := self.hass.data.get(self.domain)): return # Nothing to do, proximity is not loaded known_entity_ids = async_get_all_entity_ids(self.hass) for entry_id, coordinator in coordinators.items(): self.possible_issue_ids.add(entry_id) if unknown_entities := async_filter_known_entity_ids( self.hass, entity_ids=coordinator.tracked_entities, known_entity_ids=known_entity_ids, ): self.async_create_issue( issue_id=entry_id, translation_placeholders={ "name": coordinator.name, "entities": "\n".join( f"- `{entity_id}`" for entity_id in unknown_entities ), }, ) LOGGER.debug( "Spook found unknown entities tracked in proximity %s " "and created an issue for it; Entities: %s", coordinator.name, ", ".join(unknown_entities), )