Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions homeassistant/components/zwave_js/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@
QRProvisioningInformation,
)
from zwave_js_server.model.driver import Driver
from zwave_js_server.model.firmware import FirmwareUpdateData
from zwave_js_server.model.log_config import LogConfig
from zwave_js_server.model.log_message import LogMessage
from zwave_js_server.model.node import Node, NodeStatistics
from zwave_js_server.model.node.firmware import (
NodeFirmwareUpdateData,
NodeFirmwareUpdateProgress,
NodeFirmwareUpdateResult,
)
Expand Down Expand Up @@ -647,6 +647,7 @@ async def websocket_node_comments(
QR_PROVISIONING_INFORMATION, "options"
): QR_PROVISIONING_INFORMATION_SCHEMA,
vol.Exclusive(QR_CODE_STRING, "options"): QR_CODE_STRING_SCHEMA,
vol.Exclusive(DSK, "options"): str,
}
)
@websocket_api.async_response
Expand All @@ -669,6 +670,7 @@ async def websocket_add_node(
or msg.get(QR_PROVISIONING_INFORMATION)
or msg.get(QR_CODE_STRING)
)
dsk = msg.get(DSK)

@callback
def async_cleanup() -> None:
Expand Down Expand Up @@ -765,6 +767,7 @@ def device_registered(device: dr.DeviceEntry) -> None:
INCLUSION_STRATEGY_NOT_SMART_START[inclusion_strategy.value],
force_security=force_security,
provisioning=provisioning,
dsk=dsk,
)
except ValueError as err:
connection.send_error(
Expand Down Expand Up @@ -2072,7 +2075,7 @@ async def post(self, request: web.Request, device_id: str) -> web.Response:
node.client.ws_server_url,
node,
[
FirmwareUpdateData(
NodeFirmwareUpdateData(
uploaded_file.filename,
await hass.async_add_executor_job(uploaded_file.file.read),
)
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/zwave_js/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"integration_type": "hub",
"iot_class": "local_push",
"loggers": ["zwave_js_server"],
"requirements": ["pyserial==3.5", "zwave-js-server-python==0.45.2"],
"requirements": ["pyserial==3.5", "zwave-js-server-python==0.46.0"],
"usb": [
{
"vid": "0658",
Expand Down
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2727,7 +2727,7 @@ zigpy==0.53.0
zm-py==0.5.2

# homeassistant.components.zwave_js
zwave-js-server-python==0.45.2
zwave-js-server-python==0.46.0
Comment thread
raman325 marked this conversation as resolved.

# homeassistant.components.zwave_me
zwave_me_ws==0.3.1
2 changes: 1 addition & 1 deletion requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1931,7 +1931,7 @@ zigpy-znp==0.9.2
zigpy==0.53.0

# homeassistant.components.zwave_js
zwave-js-server-python==0.45.2
zwave-js-server-python==0.46.0

# homeassistant.components.zwave_me
zwave_me_ws==0.3.1
40 changes: 33 additions & 7 deletions tests/components/zwave_js/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
ProvisioningEntry,
QRProvisioningInformation,
)
from zwave_js_server.model.firmware import FirmwareUpdateData
from zwave_js_server.model.node import Node
from zwave_js_server.model.node.firmware import NodeFirmwareUpdateData

from homeassistant.components.websocket_api import ERR_INVALID_FORMAT, ERR_NOT_FOUND
from homeassistant.components.zwave_js.api import (
Expand Down Expand Up @@ -779,13 +779,39 @@ async def test_add_node(
client.async_send_command.reset_mock()
client.async_send_command.return_value = {"success": True}

# Test Smart Start QR provisioning information with S2 inclusion strategy fails
# Test S2 DSK string string
await ws_client.send_json(
{
ID: 6,
TYPE: "zwave_js/add_node",
ENTRY_ID: entry.entry_id,
INCLUSION_STRATEGY: InclusionStrategy.SECURITY_S2.value,
DSK: "test_dsk",
}
)

msg = await ws_client.receive_json()
assert msg["success"]

assert len(client.async_send_command.call_args_list) == 1
assert client.async_send_command.call_args[0][0] == {
"command": "controller.begin_inclusion",
"options": {
"strategy": InclusionStrategy.SECURITY_S2,
"dsk": "test_dsk",
},
}

client.async_send_command.reset_mock()
client.async_send_command.return_value = {"success": True}

# Test Smart Start QR provisioning information with S2 inclusion strategy fails
await ws_client.send_json(
{
ID: 7,
TYPE: "zwave_js/add_node",
ENTRY_ID: entry.entry_id,
INCLUSION_STRATEGY: InclusionStrategy.SECURITY_S2.value,
QR_PROVISIONING_INFORMATION: {
VERSION: 1,
SECURITY_CLASSES: [0],
Expand All @@ -812,7 +838,7 @@ async def test_add_node(
# Test QR provisioning information with S0 inclusion strategy fails
await ws_client.send_json(
{
ID: 7,
ID: 8,
TYPE: "zwave_js/add_node",
ENTRY_ID: entry.entry_id,
INCLUSION_STRATEGY: InclusionStrategy.SECURITY_S0,
Expand Down Expand Up @@ -842,7 +868,7 @@ async def test_add_node(
# Test ValueError is caught as failure
await ws_client.send_json(
{
ID: 8,
ID: 9,
TYPE: "zwave_js/add_node",
ENTRY_ID: entry.entry_id,
INCLUSION_STRATEGY: InclusionStrategy.DEFAULT.value,
Expand All @@ -862,7 +888,7 @@ async def test_add_node(
):
await ws_client.send_json(
{
ID: 9,
ID: 10,
TYPE: "zwave_js/add_node",
ENTRY_ID: entry.entry_id,
}
Expand All @@ -878,7 +904,7 @@ async def test_add_node(
await hass.async_block_till_done()

await ws_client.send_json(
{ID: 10, TYPE: "zwave_js/add_node", ENTRY_ID: entry.entry_id}
{ID: 11, TYPE: "zwave_js/add_node", ENTRY_ID: entry.entry_id}
)
msg = await ws_client.receive_json()

Expand Down Expand Up @@ -2915,7 +2941,7 @@ async def test_firmware_upload_view(
)
assert mock_cmd.call_args[0][1:3] == (
multisensor_6,
[FirmwareUpdateData("file", bytes(10))],
[NodeFirmwareUpdateData("file", bytes(10))],
)
assert mock_cmd.call_args[1] == {
"additional_user_agent_components": {"HomeAssistant": "0.0.0"},
Expand Down