diff --git a/homeassistant/components/config/entity_registry.py b/homeassistant/components/config/entity_registry.py index 9b6fc2af82a..62f2aec232c 100644 --- a/homeassistant/components/config/entity_registry.py +++ b/homeassistant/components/config/entity_registry.py @@ -69,9 +69,9 @@ async def websocket_get_entity(hass, connection, msg): vol.Required("type"): "config/entity_registry/update", vol.Required("entity_id"): cv.entity_id, # If passed in, we update value. Passing None will remove old value. - vol.Optional("name"): vol.Any(str, None), - vol.Optional("icon"): vol.Any(str, None), vol.Optional("area_id"): vol.Any(str, None), + vol.Optional("icon"): vol.Any(str, None), + vol.Optional("name"): vol.Any(str, None), vol.Optional("new_entity_id"): str, # We only allow setting disabled_by user via API. vol.Optional("disabled_by"): vol.Any(DISABLED_USER, None), @@ -92,7 +92,7 @@ async def websocket_update_entity(hass, connection, msg): changes = {} - for key in ("name", "icon", "area_id", "disabled_by"): + for key in ("area_id", "disabled_by", "icon", "name"): if key in msg: changes[key] = msg[key] @@ -168,15 +168,15 @@ async def websocket_remove_entity(hass, connection, msg): def _entry_dict(entry): """Convert entry to API format.""" return { + "area_id": entry.area_id, "config_entry_id": entry.config_entry_id, "device_id": entry.device_id, - "area_id": entry.area_id, "disabled_by": entry.disabled_by, - "entity_id": entry.entity_id, - "name": entry.name, - "icon": entry.icon, - "platform": entry.platform, "entity_category": entry.entity_category, + "entity_id": entry.entity_id, + "icon": entry.icon, + "name": entry.name, + "platform": entry.platform, } @@ -184,8 +184,8 @@ def _entry_dict(entry): def _entry_ext_dict(entry): """Convert entry to API format.""" data = _entry_dict(entry) - data["original_name"] = entry.original_name - data["original_icon"] = entry.original_icon - data["unique_id"] = entry.unique_id data["capabilities"] = entry.capabilities + data["original_icon"] = entry.original_icon + data["original_name"] = entry.original_name + data["unique_id"] = entry.unique_id return data diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index 650ce0701a6..a0ad081a782 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -534,26 +534,26 @@ class Entity(ABC): entry = self.registry_entry # pylint: disable=consider-using-ternary - if (name := (entry and entry.name) or self.name) is not None: - attr[ATTR_FRIENDLY_NAME] = name - - if (icon := (entry and entry.icon) or self.icon) is not None: - attr[ATTR_ICON] = icon - - if (entity_picture := self.entity_picture) is not None: - attr[ATTR_ENTITY_PICTURE] = entity_picture - if assumed_state := self.assumed_state: attr[ATTR_ASSUMED_STATE] = assumed_state - if (supported_features := self.supported_features) is not None: - attr[ATTR_SUPPORTED_FEATURES] = supported_features + if (attribution := self.attribution) is not None: + attr[ATTR_ATTRIBUTION] = attribution if (device_class := self.device_class) is not None: attr[ATTR_DEVICE_CLASS] = str(device_class) - if (attribution := self.attribution) is not None: - attr[ATTR_ATTRIBUTION] = attribution + if (entity_picture := self.entity_picture) is not None: + attr[ATTR_ENTITY_PICTURE] = entity_picture + + if (icon := (entry and entry.icon) or self.icon) is not None: + attr[ATTR_ICON] = icon + + if (name := (entry and entry.name) or self.name) is not None: + attr[ATTR_FRIENDLY_NAME] = name + + if (supported_features := self.supported_features) is not None: + attr[ATTR_SUPPORTED_FEATURES] = supported_features end = timer() diff --git a/homeassistant/helpers/entity_platform.py b/homeassistant/helpers/entity_platform.py index c44eb96026d..2d555b82c10 100644 --- a/homeassistant/helpers/entity_platform.py +++ b/homeassistant/helpers/entity_platform.py @@ -509,18 +509,18 @@ class EntityPlatform: self.domain, self.platform_name, entity.unique_id, - suggested_object_id=suggested_object_id, - config_entry=self.config_entry, - device_id=device_id, - known_object_ids=self.entities.keys(), - disabled_by=disabled_by, capabilities=entity.capability_attributes, - supported_features=entity.supported_features, + config_entry=self.config_entry, device_class=entity.device_class, - unit_of_measurement=entity.unit_of_measurement, - original_name=entity.name, - original_icon=entity.icon, + device_id=device_id, + disabled_by=disabled_by, entity_category=entity.entity_category, + known_object_ids=self.entities.keys(), + original_icon=entity.icon, + original_name=entity.name, + suggested_object_id=suggested_object_id, + supported_features=entity.supported_features, + unit_of_measurement=entity.unit_of_measurement, ) entity.registry_entry = entry diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index 7d3bdf58a92..9575e6722ed 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -64,12 +64,12 @@ STORAGE_KEY = "core.entity_registry" # Attributes relevant to describing entity # to external services. ENTITY_DESCRIBING_ATTRIBUTES = { + "capabilities", + "device_class", "entity_id", "name", "original_name", - "capabilities", "supported_features", - "device_class", "unit_of_measurement", } @@ -81,11 +81,12 @@ class RegistryEntry: entity_id: str = attr.ib() unique_id: str = attr.ib() platform: str = attr.ib() - name: str | None = attr.ib(default=None) - icon: str | None = attr.ib(default=None) - device_id: str | None = attr.ib(default=None) area_id: str | None = attr.ib(default=None) + capabilities: Mapping[str, Any] | None = attr.ib(default=None) config_entry_id: str | None = attr.ib(default=None) + device_class: str | None = attr.ib(default=None) + device_id: str | None = attr.ib(default=None) + domain: str = attr.ib(init=False, repr=False) disabled_by: str | None = attr.ib( default=None, validator=attr.validators.in_( @@ -99,15 +100,14 @@ class RegistryEntry: ) ), ) - capabilities: Mapping[str, Any] | None = attr.ib(default=None) - supported_features: int = attr.ib(default=0) - device_class: str | None = attr.ib(default=None) - unit_of_measurement: str | None = attr.ib(default=None) - # As set by integration - original_name: str | None = attr.ib(default=None) - original_icon: str | None = attr.ib(default=None) entity_category: str | None = attr.ib(default=None) - domain: str = attr.ib(init=False, repr=False) + icon: str | None = attr.ib(default=None) + name: str | None = attr.ib(default=None) + # As set by integration + original_icon: str | None = attr.ib(default=None) + original_name: str | None = attr.ib(default=None) + supported_features: int = attr.ib(default=0) + unit_of_measurement: str | None = attr.ib(default=None) @domain.default def _domain_default(self) -> str: @@ -127,22 +127,22 @@ class RegistryEntry: if self.capabilities is not None: attrs.update(self.capabilities) - if self.supported_features is not None: - attrs[ATTR_SUPPORTED_FEATURES] = self.supported_features - if self.device_class is not None: attrs[ATTR_DEVICE_CLASS] = self.device_class - if self.unit_of_measurement is not None: - attrs[ATTR_UNIT_OF_MEASUREMENT] = self.unit_of_measurement + icon = self.icon or self.original_icon + if icon is not None: + attrs[ATTR_ICON] = icon name = self.name or self.original_name if name is not None: attrs[ATTR_FRIENDLY_NAME] = name - icon = self.icon or self.original_icon - if icon is not None: - attrs[ATTR_ICON] = icon + if self.supported_features is not None: + attrs[ATTR_SUPPORTED_FEATURES] = self.supported_features + + if self.unit_of_measurement is not None: + attrs[ATTR_UNIT_OF_MEASUREMENT] = self.unit_of_measurement hass.states.async_set(self.entity_id, STATE_UNAVAILABLE, attrs) @@ -271,16 +271,16 @@ class EntityRegistry: if entity_id: return self._async_update_entity( entity_id, - config_entry_id=config_entry_id or UNDEFINED, - device_id=device_id or UNDEFINED, area_id=area_id or UNDEFINED, capabilities=capabilities or UNDEFINED, - supported_features=supported_features or UNDEFINED, + config_entry_id=config_entry_id or UNDEFINED, device_class=device_class or UNDEFINED, - unit_of_measurement=unit_of_measurement or UNDEFINED, - original_name=original_name or UNDEFINED, - original_icon=original_icon or UNDEFINED, + device_id=device_id or UNDEFINED, entity_category=entity_category or UNDEFINED, + original_icon=original_icon or UNDEFINED, + original_name=original_name or UNDEFINED, + supported_features=supported_features or UNDEFINED, + unit_of_measurement=unit_of_measurement or UNDEFINED, # When we changed our slugify algorithm, we invalidated some # stored entity IDs with either a __ or ending in _. # Fix introduced in 0.86 (Jan 23, 2019). Next line can be @@ -443,19 +443,19 @@ class EntityRegistry: old_values = {} # Dict with old key/value pairs for attr_name, value in ( - ("name", name), - ("icon", icon), - ("config_entry_id", config_entry_id), - ("device_id", device_id), ("area_id", area_id), - ("disabled_by", disabled_by), ("capabilities", capabilities), - ("supported_features", supported_features), + ("config_entry_id", config_entry_id), ("device_class", device_class), - ("unit_of_measurement", unit_of_measurement), - ("original_name", original_name), - ("original_icon", original_icon), + ("device_id", device_id), + ("disabled_by", disabled_by), ("entity_category", entity_category), + ("icon", icon), + ("name", name), + ("original_icon", original_icon), + ("original_name", original_name), + ("supported_features", supported_features), + ("unit_of_measurement", unit_of_measurement), ): if value is not UNDEFINED and value != getattr(old, attr_name): new_values[attr_name] = value @@ -526,22 +526,22 @@ class EntityRegistry: continue entities[entity["entity_id"]] = RegistryEntry( - entity_id=entity["entity_id"], - config_entry_id=entity.get("config_entry_id"), - device_id=entity.get("device_id"), area_id=entity.get("area_id"), - unique_id=entity["unique_id"], - platform=entity["platform"], - name=entity.get("name"), - icon=entity.get("icon"), - disabled_by=entity.get("disabled_by"), capabilities=entity.get("capabilities") or {}, - supported_features=entity.get("supported_features", 0), + config_entry_id=entity.get("config_entry_id"), device_class=entity.get("device_class"), - unit_of_measurement=entity.get("unit_of_measurement"), - original_name=entity.get("original_name"), - original_icon=entity.get("original_icon"), + device_id=entity.get("device_id"), + disabled_by=entity.get("disabled_by"), entity_category=entity.get("entity_category"), + entity_id=entity["entity_id"], + icon=entity.get("icon"), + name=entity.get("name"), + original_icon=entity.get("original_icon"), + original_name=entity.get("original_name"), + platform=entity["platform"], + supported_features=entity.get("supported_features", 0), + unique_id=entity["unique_id"], + unit_of_measurement=entity.get("unit_of_measurement"), ) self.entities = entities @@ -559,22 +559,22 @@ class EntityRegistry: data["entities"] = [ { - "entity_id": entry.entity_id, - "config_entry_id": entry.config_entry_id, - "device_id": entry.device_id, "area_id": entry.area_id, - "unique_id": entry.unique_id, - "platform": entry.platform, - "name": entry.name, - "icon": entry.icon, - "disabled_by": entry.disabled_by, "capabilities": entry.capabilities, - "supported_features": entry.supported_features, + "config_entry_id": entry.config_entry_id, "device_class": entry.device_class, - "unit_of_measurement": entry.unit_of_measurement, - "original_name": entry.original_name, - "original_icon": entry.original_icon, + "device_id": entry.device_id, + "disabled_by": entry.disabled_by, "entity_category": entry.entity_category, + "entity_id": entry.entity_id, + "icon": entry.icon, + "name": entry.name, + "original_icon": entry.original_icon, + "original_name": entry.original_name, + "platform": entry.platform, + "supported_features": entry.supported_features, + "unique_id": entry.unique_id, + "unit_of_measurement": entry.unit_of_measurement, } for entry in self.entities.values() ]