diff --git a/homeassistant/components/zwave_js/api.py b/homeassistant/components/zwave_js/api.py index 463e665fa86..fee828c9fd8 100644 --- a/homeassistant/components/zwave_js/api.py +++ b/homeassistant/components/zwave_js/api.py @@ -772,6 +772,18 @@ async def websocket_add_node( ) ) + @callback + def node_found(event: dict) -> None: + node = event["node"] + node_details = { + "node_id": node["nodeId"], + } + connection.send_message( + websocket_api.event_message( + msg[ID], {"event": "node found", "node": node_details} + ) + ) + @callback def node_added(event: dict) -> None: node = event["node"] @@ -815,6 +827,7 @@ async def websocket_add_node( controller.on("inclusion stopped", forward_event), controller.on("validate dsk and enter pin", forward_dsk), controller.on("grant security classes", forward_requested_grant), + controller.on("node found", node_found), controller.on("node added", node_added), async_dispatcher_connect( hass, EVENT_DEVICE_ADDED_TO_REGISTRY, device_registered @@ -1296,6 +1309,18 @@ async def websocket_replace_failed_node( ) ) + @callback + def node_found(event: dict) -> None: + node = event["node"] + node_details = { + "node_id": node["nodeId"], + } + connection.send_message( + websocket_api.event_message( + msg[ID], {"event": "node found", "node": node_details} + ) + ) + @callback def node_added(event: dict) -> None: node = event["node"] @@ -1352,6 +1377,7 @@ async def websocket_replace_failed_node( controller.on("validate dsk and enter pin", forward_dsk), controller.on("grant security classes", forward_requested_grant), controller.on("node removed", node_removed), + controller.on("node found", node_found), controller.on("node added", node_added), async_dispatcher_connect( hass, EVENT_DEVICE_ADDED_TO_REGISTRY, device_registered diff --git a/tests/components/zwave_js/test_api.py b/tests/components/zwave_js/test_api.py index 23501e18745..0437f9d9085 100644 --- a/tests/components/zwave_js/test_api.py +++ b/tests/components/zwave_js/test_api.py @@ -532,6 +532,25 @@ async def test_add_node( msg = await ws_client.receive_json() assert msg["event"]["event"] == "inclusion started" + event = Event( + type="node found", + data={ + "source": "controller", + "event": "node found", + "node": { + "nodeId": 67, + }, + }, + ) + client.driver.receive_event(event) + + msg = await ws_client.receive_json() + assert msg["event"]["event"] == "node found" + node_details = { + "node_id": 67, + } + assert msg["event"]["node"] == node_details + event = Event( type="grant security classes", data={ @@ -1811,6 +1830,25 @@ async def test_replace_failed_node( msg = await ws_client.receive_json() assert msg["event"]["event"] == "inclusion started" + event = Event( + type="node found", + data={ + "source": "controller", + "event": "node found", + "node": { + "nodeId": 67, + }, + }, + ) + client.driver.receive_event(event) + + msg = await ws_client.receive_json() + assert msg["event"]["event"] == "node found" + node_details = { + "node_id": 67, + } + assert msg["event"]["node"] == node_details + event = Event( type="grant security classes", data={