"""Base entity for a baby.""" from __future__ import annotations from homeassistant.core import callback from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo from homeassistant.helpers.update_coordinator import CoordinatorEntity from .babytracker_api import Baby from .const import DOMAIN from .coordinator import BabyTrackerCoordinator class BabyEntity(CoordinatorEntity[BabyTrackerCoordinator]): """An entity on a baby's device.""" _attr_has_entity_name = True def __init__(self, coordinator: BabyTrackerCoordinator, baby: Baby, key: str) -> None: super().__init__(coordinator) self.baby_id = baby.id self._attr_unique_id = f"{baby.id}_{key}" self._attr_translation_key = key self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, baby.id)}, name=baby.name, manufacturer="Baby Tracker", entry_type=DeviceEntryType.SERVICE, ) @property def available(self) -> bool: return super().available and self.baby_id in self.coordinator.data.babies def async_add_baby_entities(entry, coordinator: BabyTrackerCoordinator, async_add_entities, create) -> None: """Add entities for each baby now, and for babies that appear later.""" known: set[str] = set() @callback def add_new() -> None: new = [baby for baby_id, baby in coordinator.data.babies.items() if baby_id not in known] if new: known.update(baby.id for baby in new) async_add_entities([entity for baby in new for entity in create(baby)]) add_new() entry.async_on_unload(coordinator.async_add_listener(add_new))