diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index e87eb15b954..55dc69540fd 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -277,6 +277,9 @@ class Entity(ABC): # Entry in the entity registry registry_entry: er.RegistryEntry | None = None + # The device entry for this entity + device_entry: dr.DeviceEntry | None = None + # Hold list for functions to call on remove. _on_remove: list[CALLBACK_TYPE] | None = None @@ -763,13 +766,7 @@ class Entity(ABC): if name is UNDEFINED: name = None - if not self.has_entity_name or not self.registry_entry: - return name - - device_registry = dr.async_get(self.hass) - if not (device_id := self.registry_entry.device_id) or not ( - device_entry := device_registry.async_get(device_id) - ): + if not self.has_entity_name or not (device_entry := self.device_entry): return name device_name = device_entry.name_by_user or device_entry.name @@ -1116,22 +1113,26 @@ class Entity(ABC): ent_reg = er.async_get(self.hass) old = self.registry_entry - self.registry_entry = ent_reg.async_get(data["entity_id"]) - assert self.registry_entry is not None + registry_entry = ent_reg.async_get(data["entity_id"]) + assert registry_entry is not None + self.registry_entry = registry_entry - if self.registry_entry.disabled: + if device_id := registry_entry.device_id: + self.device_entry = dr.async_get(self.hass).async_get(device_id) + + if registry_entry.disabled: await self.async_remove() return assert old is not None - if self.registry_entry.entity_id == old.entity_id: + if registry_entry.entity_id == old.entity_id: self.async_registry_entry_updated() self.async_write_ha_state() return await self.async_remove(force_remove=True) - self.entity_id = self.registry_entry.entity_id + self.entity_id = registry_entry.entity_id await self.platform.async_add_entities([self]) @callback @@ -1153,6 +1154,7 @@ class Entity(ABC): if "name" not in data["changes"] and "name_by_user" not in data["changes"]: return + self.device_entry = dr.async_get(self.hass).async_get(data["device_id"]) self.async_write_ha_state() @callback diff --git a/homeassistant/helpers/entity_platform.py b/homeassistant/helpers/entity_platform.py index 55d167ae253..da3c76c73f8 100644 --- a/homeassistant/helpers/entity_platform.py +++ b/homeassistant/helpers/entity_platform.py @@ -738,6 +738,8 @@ class EntityPlatform: ) entity.registry_entry = entry + if device: + entity.device_entry = device entity.entity_id = entry.entity_id # We won't generate an entity ID if the platform has already set one