Only load the device entry when it changes in the base entity (#95801)
This commit is contained in:
parent
3cc66c8318
commit
039a3bb6e9
2 changed files with 16 additions and 12 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue