Skip to content

Commit d478407

Browse files
authored
Add support for Z-Wave JS 7.9 changes (#240)
* Add support for Z-Wave JS 7.9 changes * fix schema tests
1 parent ab808ee commit d478407

File tree

7 files changed

+50
-9
lines changed

7 files changed

+50
-9
lines changed

test/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def version_data_fixture():
255255
"serverVersion": "test_server_version",
256256
"homeId": "test_home_id",
257257
"minSchemaVersion": 0,
258-
"maxSchemaVersion": 5,
258+
"maxSchemaVersion": 6,
259259
}
260260

261261

test/model/test_driver.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,3 +281,17 @@ async def test_install_config_update(driver, uuid4, mock_command):
281281
"command": "driver.install_config_update",
282282
"messageId": uuid4,
283283
}
284+
285+
286+
async def test_set_preferred_scales(driver, uuid4, mock_command):
287+
"""Test driver.set_preferred_scales command."""
288+
ack_commands = mock_command({"command": "driver.set_preferred_scales"}, {})
289+
290+
assert not await driver.async_set_preferred_scales({1: 1})
291+
292+
assert len(ack_commands) == 1
293+
assert ack_commands[0] == {
294+
"command": "driver.set_preferred_scales",
295+
"scales": {1: 1},
296+
"messageId": uuid4,
297+
}

test/model/test_node.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,20 @@ async def test_set_value(multisensor_6, uuid4, mock_command):
182182
"messageId": uuid4,
183183
}
184184

185+
# Set value with options
186+
187+
assert await node.async_set_value(value_id, 42, {"transitionDuration": 1}) is None
188+
189+
assert len(ack_commands) == 2
190+
assert ack_commands[1] == {
191+
"command": "node.set_value",
192+
"nodeId": node.node_id,
193+
"valueId": value.data,
194+
"value": 42,
195+
"options": {"transitionDuration": 1},
196+
"messageId": uuid4,
197+
}
198+
185199

186200
async def test_poll_value(multisensor_6, uuid4, mock_command):
187201
"""Test poll value."""

test/test_main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def test_dump_state(
6464
assert captured.out == (
6565
"{'type': 'version', 'driverVersion': 'test_driver_version', "
6666
"'serverVersion': 'test_server_version', 'homeId': 'test_home_id', "
67-
"'minSchemaVersion': 0, 'maxSchemaVersion': 5}\n"
67+
"'minSchemaVersion': 0, 'maxSchemaVersion': 6}\n"
6868
"{'type': 'result', 'success': True, 'result': {}, 'messageId': 'api-schema-id'}\n"
6969
"test_result\n"
7070
)

zwave_js_server/const.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from typing import Dict, List
44

55
# minimal server schema version we can handle
6-
MIN_SERVER_SCHEMA_VERSION = 5
6+
MIN_SERVER_SCHEMA_VERSION = 6
77
# max server schema version we can handle (and our code is compatible with)
8-
MAX_SERVER_SCHEMA_VERSION = 5
8+
MAX_SERVER_SCHEMA_VERSION = 6
99

1010
VALUE_UNKNOWN = "unknown"
1111

zwave_js_server/model/driver.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Provide a model for the Z-Wave JS Driver."""
2-
from typing import Any, Optional, TYPE_CHECKING, cast
2+
from typing import Any, Dict, Optional, TYPE_CHECKING, Union, cast
33

44
from zwave_js_server.model.log_config import LogConfig, LogConfigDataType
55
from zwave_js_server.model.log_message import LogMessage, LogMessageDataType
@@ -131,3 +131,11 @@ async def async_install_config_update(self) -> bool:
131131
"install_config_update", require_schema=5
132132
)
133133
return cast(bool, result["success"])
134+
135+
async def async_set_preferred_scales(
136+
self, scales: Dict[Union[str, int], Union[str, int]]
137+
) -> None:
138+
"""Send command to set preferred sensor scales."""
139+
await self._async_send_command(
140+
"set_preferred_scales", scales=scales, require_schema=6
141+
)

zwave_js_server/model/node.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ async def async_set_value(
367367
self,
368368
val: Union[Value, str],
369369
new_value: Any,
370+
options: dict = None,
370371
wait_for_result: Optional[bool] = None,
371372
) -> Optional[bool]:
372373
"""Send setValue command to Node for given value (or value_id)."""
@@ -377,12 +378,16 @@ async def async_set_value(
377378
if val.metadata.writeable is False:
378379
raise UnwriteableValue
379380

381+
cmd_args = {
382+
"valueId": val.data,
383+
"value": new_value,
384+
}
385+
if options:
386+
cmd_args["options"] = options
387+
380388
# the value object needs to be send to the server
381389
result = await self.async_send_command(
382-
"set_value",
383-
valueId=val.data,
384-
value=new_value,
385-
wait_for_result=wait_for_result,
390+
"set_value", **cmd_args, wait_for_result=wait_for_result
386391
)
387392

388393
if result is None:

0 commit comments

Comments
 (0)