Fix zwave_js adding not fully interviewed nodes (#45162)

* fix situation were nodes are being added or not fully interviewed

* adjust test

* lint
This commit is contained in:
Marcel van der Veldt 2021-01-15 01:09:03 +01:00 committed by GitHub
parent 7fada806af
commit a276f2d19e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 14 deletions

View file

@ -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"])

View file

@ -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)}
)