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.
Files changed (85) hide show
  1. {zwave_js_server_python-0.69.0/zwave_js_server_python.egg-info → zwave_js_server_python-0.71.0}/PKG-INFO +13 -1
  2. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/README.md +12 -0
  3. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/__init__.py +13 -13
  4. zwave_js_server_python-0.71.0/zwave_js_server/const/command_class/access_control.py +87 -0
  5. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/lock.py +2 -2
  6. zwave_js_server_python-0.71.0/zwave_js_server/model/access_control.py +885 -0
  7. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/association.py +2 -2
  8. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/__init__.py +160 -10
  9. zwave_js_server_python-0.71.0/zwave_js_server/model/controller/data_model.py +98 -0
  10. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/event_model.py +71 -0
  11. {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
  12. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/rebuild_routes.py +1 -1
  13. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/controller/statistics.py +25 -25
  14. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/device_class.py +1 -1
  15. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/driver/__init__.py +130 -3
  16. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/driver/firmware.py +3 -3
  17. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/duration.py +5 -5
  18. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/endpoint.py +11 -3
  19. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/firmware.py +11 -11
  20. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/log_config.py +1 -1
  21. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/log_message.py +28 -24
  22. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/__init__.py +105 -2
  23. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/data_model.py +7 -0
  24. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/event_model.py +109 -1
  25. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/firmware.py +14 -14
  26. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/health_check.py +42 -26
  27. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/node/statistics.py +10 -10
  28. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/notification.py +39 -27
  29. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/statistics.py +4 -2
  30. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/value.py +102 -11
  31. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/version.py +1 -1
  32. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/helpers.py +29 -2
  33. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/lock.py +1 -1
  34. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/multicast.py +4 -1
  35. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0/zwave_js_server_python.egg-info}/PKG-INFO +13 -1
  36. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/SOURCES.txt +2 -0
  37. zwave_js_server_python-0.69.0/zwave_js_server/model/controller/data_model.py +0 -36
  38. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/LICENSE +0 -0
  39. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/MANIFEST.in +0 -0
  40. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/pyproject.toml +0 -0
  41. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/setup.cfg +0 -0
  42. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/__init__.py +0 -0
  43. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/__main__.py +0 -0
  44. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/client.py +0 -0
  45. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/__init__.py +0 -0
  46. {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
  47. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/basic.py +0 -0
  48. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/battery.py +0 -0
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/meter.py +0 -0
  55. {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
  56. {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
  57. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/notification.py +0 -0
  58. {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
  59. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/protection.py +0 -0
  60. {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
  61. {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
  62. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/const/command_class/thermostat.py +0 -0
  63. {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
  64. {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
  65. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/dump.py +0 -0
  66. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/event.py +0 -0
  67. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/exceptions.py +0 -0
  68. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/firmware.py +0 -0
  69. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/__init__.py +0 -0
  70. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/command_class.py +0 -0
  71. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/config_manager/__init__.py +0 -0
  72. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/device_config.py +0 -0
  73. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/model/utils.py +0 -0
  74. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/py.typed +0 -0
  75. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/__init__.py +0 -0
  76. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/__init__.py +0 -0
  77. {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
  78. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/command_class/meter.py +0 -0
  79. {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
  80. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/util/node.py +0 -0
  81. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server/version.py +0 -0
  82. {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
  83. {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
  84. {zwave_js_server_python-0.69.0 → zwave_js_server_python-0.71.0}/zwave_js_server_python.egg-info/requires.txt +0 -0
  85. {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.69.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.
@@ -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.69.0"
11
+ __version__ = "0.71.0"
12
12
 
13
13
  # minimal server schema version we can handle
14
- MIN_SERVER_SCHEMA_VERSION = 44
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 = 45
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.hour = self.data.get("hour")
478
- self.minute = self.data.get("minute")
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.weekday = Weekday(weekday)
481
- self.second = self.data.get("second")
482
- self.year = self.data.get("year")
483
- self.month = self.data.get("month")
484
- self.day = self.data.get("day")
485
- self.dst_offset = self.data.get("dstOffset")
486
- self.standard_offset = self.data.get("standardOffset")
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
- setattr(self, attr_name, DEFAULT_HANDLE_CONFIGURATION)
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."""