zwave-js-server-python 0.69.0__tar.gz → 0.71.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {zwave_js_server_python-0.69.0/zwave_js_server_python.egg-info → zwave_js_server_python-0.71.0}/PKG-INFO +13 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/README.md +12 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/__init__.py +13 -13
- zwave_js_server_python-0.71.0/zwave_js_server/const/command_class/access_control.py +87 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/lock.py +2 -2
- zwave_js_server_python-0.71.0/zwave_js_server/model/access_control.py +885 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/association.py +2 -2
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/__init__.py +160 -10
- zwave_js_server_python-0.71.0/zwave_js_server/model/controller/data_model.py +98 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/event_model.py +71 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/inclusion_and_provisioning.py +33 -15
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/rebuild_routes.py +1 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/statistics.py +25 -25
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/device_class.py +1 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/driver/__init__.py +130 -3
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/driver/firmware.py +3 -3
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/duration.py +5 -5
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/endpoint.py +11 -3
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/firmware.py +11 -11
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/log_config.py +1 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/log_message.py +28 -24
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/__init__.py +105 -2
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/data_model.py +7 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/event_model.py +109 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/firmware.py +14 -14
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/health_check.py +42 -26
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/statistics.py +10 -10
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/notification.py +39 -27
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/statistics.py +4 -2
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/value.py +102 -11
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/version.py +1 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/helpers.py +29 -2
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/lock.py +1 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/multicast.py +4 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0/zwave_js_server_python.egg-info}/PKG-INFO +13 -1
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/SOURCES.txt +2 -0
- zwave_js_server_python-0.69.0/zwave_js_server/model/controller/data_model.py +0 -36
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/LICENSE +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/MANIFEST.in +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/pyproject.toml +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/setup.cfg +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/__main__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/client.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/barrier_operator.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/basic.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/battery.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/central_scene.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/color_switch.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/energy_production.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/entry_control.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/humidity_control.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/meter.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/multilevel_sensor.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/multilevel_switch.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/notification.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/power_level.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/protection.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/scene_activation.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/sound_switch.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/thermostat.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/wake_up.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/window_covering.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/dump.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/event.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/exceptions.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/firmware.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/command_class.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/config_manager/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/device_config.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/utils.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/py.typed +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/__init__.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/energy_production.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/meter.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/multilevel_sensor.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/node.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/version.py +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/dependency_links.txt +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/entry_points.txt +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/requires.txt +0 -0
- {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zwave-js-server-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.71.0
|
|
4
4
|
Summary: Python wrapper for zwave-js-server
|
|
5
5
|
Author-email: Home Assistant Team <hello@home-assistant.io>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -56,3 +56,15 @@ try:
|
|
|
56
56
|
except zwave_js_server.client.FailedCommand as err:
|
|
57
57
|
print("Command failed with", err.error_code)
|
|
58
58
|
```
|
|
59
|
+
|
|
60
|
+
## Access control
|
|
61
|
+
|
|
62
|
+
Schema 48 adds typed access-control helpers exposed via the `AccessControlAPI`
|
|
63
|
+
wrapper:
|
|
64
|
+
|
|
65
|
+
- `node.access_control`: shortcut for the root endpoint API.
|
|
66
|
+
- `endpoint.access_control`: API for a specific endpoint.
|
|
67
|
+
- Call `await endpoint.access_control.is_supported()` before using other
|
|
68
|
+
methods.
|
|
69
|
+
- Credential payloads accept `str | bytes`; binary credentials are converted to
|
|
70
|
+
the websocket Buffer transport shape internally.
|
|
@@ -32,3 +32,15 @@ try:
|
|
|
32
32
|
except zwave_js_server.client.FailedCommand as err:
|
|
33
33
|
print("Command failed with", err.error_code)
|
|
34
34
|
```
|
|
35
|
+
|
|
36
|
+
## Access control
|
|
37
|
+
|
|
38
|
+
Schema 48 adds typed access-control helpers exposed via the `AccessControlAPI`
|
|
39
|
+
wrapper:
|
|
40
|
+
|
|
41
|
+
- `node.access_control`: shortcut for the root endpoint API.
|
|
42
|
+
- `endpoint.access_control`: API for a specific endpoint.
|
|
43
|
+
- Call `await endpoint.access_control.is_supported()` before using other
|
|
44
|
+
methods.
|
|
45
|
+
- Credential payloads accept `str | bytes`; binary credentials are converted to
|
|
46
|
+
the websocket Buffer transport shape internally.
|
{zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/__init__.py
RENAMED
|
@@ -8,12 +8,12 @@ import logging
|
|
|
8
8
|
from typing import TypedDict
|
|
9
9
|
|
|
10
10
|
PACKAGE_NAME = "zwave-js-server-python"
|
|
11
|
-
__version__ = "0.
|
|
11
|
+
__version__ = "0.71.0"
|
|
12
12
|
|
|
13
13
|
# minimal server schema version we can handle
|
|
14
|
-
MIN_SERVER_SCHEMA_VERSION =
|
|
14
|
+
MIN_SERVER_SCHEMA_VERSION = 47
|
|
15
15
|
# max server schema version we can handle (and our code is compatible with)
|
|
16
|
-
MAX_SERVER_SCHEMA_VERSION =
|
|
16
|
+
MAX_SERVER_SCHEMA_VERSION = 48
|
|
17
17
|
|
|
18
18
|
VALUE_UNKNOWN = "unknown"
|
|
19
19
|
|
|
@@ -457,7 +457,7 @@ class DateAndTimeDataType(TypedDict, total=False):
|
|
|
457
457
|
standardOffset: int
|
|
458
458
|
|
|
459
459
|
|
|
460
|
-
@dataclass
|
|
460
|
+
@dataclass(frozen=True)
|
|
461
461
|
class DateAndTime:
|
|
462
462
|
"""Represent a date and time."""
|
|
463
463
|
|
|
@@ -474,16 +474,16 @@ class DateAndTime:
|
|
|
474
474
|
|
|
475
475
|
def __post_init__(self) -> None:
|
|
476
476
|
"""Post initialization."""
|
|
477
|
-
self
|
|
478
|
-
self
|
|
477
|
+
object.__setattr__(self, "hour", self.data.get("hour"))
|
|
478
|
+
object.__setattr__(self, "minute", self.data.get("minute"))
|
|
479
479
|
if weekday := self.data.get("weekday"):
|
|
480
|
-
self
|
|
481
|
-
self
|
|
482
|
-
self
|
|
483
|
-
self
|
|
484
|
-
self
|
|
485
|
-
self
|
|
486
|
-
self
|
|
480
|
+
object.__setattr__(self, "weekday", Weekday(weekday))
|
|
481
|
+
object.__setattr__(self, "second", self.data.get("second"))
|
|
482
|
+
object.__setattr__(self, "year", self.data.get("year"))
|
|
483
|
+
object.__setattr__(self, "month", self.data.get("month"))
|
|
484
|
+
object.__setattr__(self, "day", self.data.get("day"))
|
|
485
|
+
object.__setattr__(self, "dst_offset", self.data.get("dstOffset"))
|
|
486
|
+
object.__setattr__(self, "standard_offset", self.data.get("standardOffset"))
|
|
487
487
|
|
|
488
488
|
|
|
489
489
|
class ControllerStatus(IntEnum):
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Constants for access control related command classes."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import IntEnum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class UserCredentialType(IntEnum):
|
|
9
|
+
"""Credential types supported by User Credential CC."""
|
|
10
|
+
|
|
11
|
+
NONE = 0
|
|
12
|
+
PIN_CODE = 1
|
|
13
|
+
PASSWORD = 2
|
|
14
|
+
RFID_CODE = 3
|
|
15
|
+
BLE = 4
|
|
16
|
+
NFC = 5
|
|
17
|
+
UWB = 6
|
|
18
|
+
EYE_BIOMETRIC = 7
|
|
19
|
+
FACE_BIOMETRIC = 8
|
|
20
|
+
FINGER_BIOMETRIC = 9
|
|
21
|
+
HAND_BIOMETRIC = 10
|
|
22
|
+
UNSPECIFIED_BIOMETRIC = 11
|
|
23
|
+
DESFIRE = 12
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class UserCredentialUserType(IntEnum):
|
|
27
|
+
"""User types supported by User Credential CC."""
|
|
28
|
+
|
|
29
|
+
GENERAL = 0
|
|
30
|
+
PROGRAMMING = 3
|
|
31
|
+
NON_ACCESS = 4
|
|
32
|
+
DURESS = 5
|
|
33
|
+
DISPOSABLE = 6
|
|
34
|
+
EXPIRING = 7
|
|
35
|
+
REMOTE_ONLY = 9
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class UserCredentialRule(IntEnum):
|
|
39
|
+
"""Credential rules supported by User Credential CC."""
|
|
40
|
+
|
|
41
|
+
SINGLE = 1
|
|
42
|
+
DUAL = 2
|
|
43
|
+
TRIPLE = 3
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class UserCredentialLearnStatus(IntEnum):
|
|
47
|
+
"""Credential learn statuses supported by User Credential CC."""
|
|
48
|
+
|
|
49
|
+
STARTED = 0
|
|
50
|
+
SUCCESS = 1
|
|
51
|
+
ALREADY_IN_PROGRESS = 2
|
|
52
|
+
ENDED_NOT_DUE_TO_TIMEOUT = 3
|
|
53
|
+
TIMEOUT = 4
|
|
54
|
+
STEP_RETRY = 5
|
|
55
|
+
INVALID_ADD_OPERATION_TYPE = 254
|
|
56
|
+
INVALID_MODIFY_OPERATION_TYPE = 255
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class SetUserResult(IntEnum):
|
|
60
|
+
"""Result for set_user / delete_user / delete_all_users commands."""
|
|
61
|
+
|
|
62
|
+
OK = 0
|
|
63
|
+
ERROR_ADD_REJECTED_LOCATION_OCCUPIED = 1
|
|
64
|
+
ERROR_MODIFY_REJECTED_LOCATION_EMPTY = 2
|
|
65
|
+
ERROR_UNKNOWN = 255
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class SetCredentialResult(IntEnum):
|
|
69
|
+
"""Result for set_credential / delete_credential commands."""
|
|
70
|
+
|
|
71
|
+
OK = 0
|
|
72
|
+
ERROR_ADD_REJECTED_LOCATION_OCCUPIED = 1
|
|
73
|
+
ERROR_MODIFY_REJECTED_LOCATION_EMPTY = 2
|
|
74
|
+
ERROR_DUPLICATE_CREDENTIAL = 3
|
|
75
|
+
ERROR_MANUFACTURER_SECURITY_RULES = 4
|
|
76
|
+
ERROR_DUPLICATE_ADMIN_PIN_CODE = 5
|
|
77
|
+
ERROR_WRONG_USER_UNIQUE_IDENTIFIER = 6
|
|
78
|
+
ERROR_UNKNOWN = 255
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class AssignCredentialResult(IntEnum):
|
|
82
|
+
"""Result for assign_credential commands."""
|
|
83
|
+
|
|
84
|
+
OK = 0
|
|
85
|
+
ERROR_INVALID_CREDENTIAL = 1
|
|
86
|
+
ERROR_INVALID_USER = 2
|
|
87
|
+
ERROR_UNKNOWN = 255
|
|
@@ -151,7 +151,7 @@ class DoorLockCCConfigurationSetOptionsDataType(TypedDict, total=False):
|
|
|
151
151
|
DEFAULT_HANDLE_CONFIGURATION = [True, True, True, True]
|
|
152
152
|
|
|
153
153
|
|
|
154
|
-
@dataclass
|
|
154
|
+
@dataclass(frozen=True)
|
|
155
155
|
class DoorLockCCConfigurationSetOptions:
|
|
156
156
|
"""Door Lock CC Configuration Set command options."""
|
|
157
157
|
|
|
@@ -173,7 +173,7 @@ class DoorLockCCConfigurationSetOptions:
|
|
|
173
173
|
"outside_handles_can_open_door_configuration",
|
|
174
174
|
):
|
|
175
175
|
if not getattr(self, attr_name):
|
|
176
|
-
|
|
176
|
+
object.__setattr__(self, attr_name, list(DEFAULT_HANDLE_CONFIGURATION))
|
|
177
177
|
|
|
178
178
|
def to_dict(self) -> DoorLockCCConfigurationSetOptionsDataType:
|
|
179
179
|
"""Convert command options to dict."""
|