diff --git a/homeassistant/components/zwave_js/button.py b/homeassistant/components/zwave_js/button.py index cef64f1724a..1d97ed05da5 100644 --- a/homeassistant/components/zwave_js/button.py +++ b/homeassistant/components/zwave_js/button.py @@ -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.""" diff --git a/homeassistant/components/zwave_js/helpers.py b/homeassistant/components/zwave_js/helpers.py index c047a3a9903..6175b7db353 100644 --- a/homeassistant/components/zwave_js/helpers.py +++ b/homeassistant/components/zwave_js/helpers.py @@ -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, + ) diff --git a/homeassistant/components/zwave_js/sensor.py b/homeassistant/components/zwave_js/sensor.py index 22fbfdab728..75d8066d595 100644 --- a/homeassistant/components/zwave_js/sensor.py +++ b/homeassistant/components/zwave_js/sensor.py @@ -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: diff --git a/homeassistant/components/zwave_js/update.py b/homeassistant/components/zwave_js/update.py index 1f04c3acc47..7f25788e0be 100644 --- a/homeassistant/components/zwave_js/update.py +++ b/homeassistant/components/zwave_js/update.py @@ -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