Fix device info for zwave_js device entities (#77821)

This commit is contained in:
Raman Gupta 2022-09-05 06:15:14 -04:00 committed by GitHub
parent 363f95c954
commit d6cf416c63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 22 deletions

View file

@ -9,11 +9,11 @@ from homeassistant.components.button import ButtonEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import DeviceInfo, EntityCategory
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DATA_CLIENT, DOMAIN, LOGGER
from .helpers import get_device_id, get_valueless_base_unique_id
from .helpers import get_device_info, get_valueless_base_unique_id
PARALLEL_UPDATES = 0
@ -58,10 +58,8 @@ class ZWaveNodePingButton(ButtonEntity):
self._attr_name = f"{name}: Ping"
self._base_unique_id = get_valueless_base_unique_id(driver, node)
self._attr_unique_id = f"{self._base_unique_id}.ping"
# device is precreated in main handler
self._attr_device_info = DeviceInfo(
identifiers={get_device_id(driver, node)},
)
# device may not be precreated in main handler yet
self._attr_device_info = get_device_info(driver, node)
async def async_poll_value(self, _: bool) -> None:
"""Poll a value."""

View file

@ -30,6 +30,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.typing import ConfigType
from .const import (
@ -413,3 +414,15 @@ def get_value_state_schema(
vol.Coerce(int),
vol.Range(min=value.metadata.min, max=value.metadata.max),
)
def get_device_info(driver: Driver, node: ZwaveNode) -> DeviceInfo:
"""Get DeviceInfo for node."""
return DeviceInfo(
identifiers={get_device_id(driver, node)},
sw_version=node.firmware_version,
name=node.name or node.device_config.description or f"Node {node.node_id}",
model=node.device_config.label,
manufacturer=node.device_config.manufacturer,
suggested_area=node.location if node.location else None,
)

View file

@ -28,7 +28,7 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity_platform
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import DeviceInfo, EntityCategory
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
@ -63,7 +63,7 @@ from .discovery_data_template import (
NumericSensorDataTemplateData,
)
from .entity import ZWaveBaseEntity
from .helpers import get_device_id, get_valueless_base_unique_id
from .helpers import get_device_info, get_valueless_base_unique_id
PARALLEL_UPDATES = 0
@ -493,10 +493,8 @@ class ZWaveNodeStatusSensor(SensorEntity):
self._attr_name = f"{name}: Node Status"
self._base_unique_id = get_valueless_base_unique_id(driver, node)
self._attr_unique_id = f"{self._base_unique_id}.node_status"
# device is precreated in main handler
self._attr_device_info = DeviceInfo(
identifiers={get_device_id(driver, self.node)},
)
# device may not be precreated in main handler yet
self._attr_device_info = get_device_info(driver, node)
self._attr_native_value: str = node.status.name.lower()
async def async_poll_value(self, _: bool) -> None:

View file

@ -19,11 +19,11 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import DeviceInfo, EntityCategory
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import API_KEY_FIRMWARE_UPDATE_SERVICE, DATA_CLIENT, DOMAIN, LOGGER
from .helpers import get_device_id, get_valueless_base_unique_id
from .helpers import get_device_info, get_valueless_base_unique_id
PARALLEL_UPDATES = 1
SCAN_INTERVAL = timedelta(days=1)
@ -75,14 +75,7 @@ class ZWaveNodeFirmwareUpdate(UpdateEntity):
self._base_unique_id = get_valueless_base_unique_id(driver, node)
self._attr_unique_id = f"{self._base_unique_id}.firmware_update"
# device may not be precreated in main handler yet
self._attr_device_info = DeviceInfo(
identifiers={get_device_id(driver, node)},
sw_version=node.firmware_version,
name=node.name or node.device_config.description or f"Node {node.node_id}",
model=node.device_config.label,
manufacturer=node.device_config.manufacturer,
suggested_area=node.location if node.location else None,
)
self._attr_device_info = get_device_info(driver, node)
self._attr_installed_version = self._attr_latest_version = node.firmware_version