From a276f2d19e0d6305a6cf17a2197b11cda5e9fdbc Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Fri, 15 Jan 2021 01:09:03 +0100 Subject: [PATCH] Fix zwave_js adding not fully interviewed nodes (#45162) * fix situation were nodes are being added or not fully interviewed * adjust test * lint --- homeassistant/components/zwave_js/__init__.py | 18 ++++++------------ tests/components/zwave_js/test_init.py | 4 ++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/zwave_js/__init__.py b/homeassistant/components/zwave_js/__init__.py index b1502163f79..87f9dad9184 100644 --- a/homeassistant/components/zwave_js/__init__.py +++ b/homeassistant/components/zwave_js/__init__.py @@ -39,9 +39,9 @@ def register_node_in_dev_reg( config_entry_id=entry.entry_id, identifiers={(DOMAIN, f"{client.driver.controller.home_id}-{node.node_id}")}, sw_version=node.firmware_version, - name=node.name or node.device_config.description, - model=node.device_config.label or str(node.product_type), - manufacturer=node.device_config.manufacturer or str(node.manufacturer_id), + name=node.name or node.device_config.description or f"Node {node.node_id}", + model=node.device_config.label, + manufacturer=node.device_config.manufacturer, ) @@ -84,13 +84,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: @callback def async_on_node_added(node: ZwaveNode) -> None: """Handle node added event.""" - LOGGER.debug("Node added: %s - waiting for it to become ready.", node.node_id) # we only want to run discovery when the node has reached ready state, # otherwise we'll have all kinds of missing info issues. if node.ready: async_on_node_ready(node) return # if node is not yet ready, register one-time callback for ready state + LOGGER.debug("Node added: %s - waiting for it to become ready.", node.node_id) node.once( "ready", lambda event: async_on_node_ready(event["node"]), @@ -139,14 +139,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: # run discovery on all ready nodes for node in client.driver.controller.nodes.values(): - if node.ready: - async_on_node_ready(node) - continue - # if node is not yet ready, register one-time callback for ready state - node.once( - "ready", - lambda event: async_on_node_ready(event["node"]), - ) + async_on_node_added(node) + # listen for new nodes being added to the mesh client.driver.controller.on( "node added", lambda event: async_on_node_added(event["node"]) diff --git a/tests/components/zwave_js/test_init.py b/tests/components/zwave_js/test_init.py index 0df05aba864..a117afa53bf 100644 --- a/tests/components/zwave_js/test_init.py +++ b/tests/components/zwave_js/test_init.py @@ -194,8 +194,8 @@ async def test_existing_node_not_ready(hass, client, multisensor_6, device_regis state = hass.states.get(AIR_TEMPERATURE_SENSOR) - assert not state # entity and device not yet added - assert not device_registry.async_get_device( + assert not state # entity not yet added + assert device_registry.async_get_device( # device should be added identifiers={(DOMAIN, air_temperature_device_id)} )