qolsys-controller 0.0.38__py3-none-any.whl → 0.0.62__py3-none-any.whl

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.

Potentially problematic release.


This version of qolsys-controller might be problematic. Click here for more details.

Files changed (73) hide show
  1. qolsys_controller/controller.py +829 -20
  2. qolsys_controller/database/db.py +63 -25
  3. qolsys_controller/database/table.py +89 -60
  4. qolsys_controller/database/table_alarmedsensor.py +0 -2
  5. qolsys_controller/database/table_automation.py +0 -1
  6. qolsys_controller/database/table_country_locale.py +0 -1
  7. qolsys_controller/database/table_dashboard_msgs.py +1 -2
  8. qolsys_controller/database/table_dimmerlight.py +0 -1
  9. qolsys_controller/database/table_doorlock.py +1 -1
  10. qolsys_controller/database/table_eu_event.py +12 -4
  11. qolsys_controller/database/table_heat_map.py +0 -2
  12. qolsys_controller/database/table_history.py +4 -1
  13. qolsys_controller/database/table_iqremotesettings.py +0 -2
  14. qolsys_controller/database/table_iqrouter_network_config.py +0 -1
  15. qolsys_controller/database/table_iqrouter_user_device.py +0 -2
  16. qolsys_controller/database/table_master_slave.py +0 -1
  17. qolsys_controller/database/table_nest_device.py +0 -1
  18. qolsys_controller/database/table_output_rules.py +0 -1
  19. qolsys_controller/database/table_partition.py +0 -1
  20. qolsys_controller/database/table_pgm_outputs.py +0 -2
  21. qolsys_controller/database/table_powerg_device.py +25 -3
  22. qolsys_controller/database/table_qolsyssettings.py +0 -2
  23. qolsys_controller/database/table_scene.py +0 -2
  24. qolsys_controller/database/table_sensor.py +3 -2
  25. qolsys_controller/database/table_sensor_group.py +23 -0
  26. qolsys_controller/database/table_shades.py +0 -2
  27. qolsys_controller/database/table_smartsocket.py +0 -2
  28. qolsys_controller/database/table_state.py +0 -1
  29. qolsys_controller/database/table_tcc.py +0 -1
  30. qolsys_controller/database/table_thermostat.py +0 -1
  31. qolsys_controller/database/table_trouble_conditions.py +0 -2
  32. qolsys_controller/database/table_user.py +1 -2
  33. qolsys_controller/database/table_virtual_device.py +0 -2
  34. qolsys_controller/database/table_weather.py +0 -2
  35. qolsys_controller/database/table_zigbee_device.py +0 -1
  36. qolsys_controller/database/table_zwave_association_group.py +0 -1
  37. qolsys_controller/database/table_zwave_history.py +0 -1
  38. qolsys_controller/database/table_zwave_node.py +1 -1
  39. qolsys_controller/database/table_zwave_other.py +14 -2
  40. qolsys_controller/enum.py +44 -16
  41. qolsys_controller/enum_zwave.py +81 -36
  42. qolsys_controller/errors.py +9 -12
  43. qolsys_controller/mdns.py +7 -4
  44. qolsys_controller/mqtt_command.py +119 -0
  45. qolsys_controller/mqtt_command_queue.py +5 -4
  46. qolsys_controller/observable.py +2 -2
  47. qolsys_controller/panel.py +224 -143
  48. qolsys_controller/partition.py +129 -127
  49. qolsys_controller/pki.py +69 -97
  50. qolsys_controller/scene.py +30 -28
  51. qolsys_controller/settings.py +96 -50
  52. qolsys_controller/state.py +71 -33
  53. qolsys_controller/task_manager.py +8 -12
  54. qolsys_controller/users.py +25 -0
  55. qolsys_controller/utils_mqtt.py +8 -16
  56. qolsys_controller/weather.py +71 -0
  57. qolsys_controller/zone.py +307 -169
  58. qolsys_controller/zwave_device.py +108 -95
  59. qolsys_controller/zwave_dimmer.py +53 -50
  60. qolsys_controller/zwave_garagedoor.py +0 -1
  61. qolsys_controller/zwave_generic.py +2 -3
  62. qolsys_controller/zwave_lock.py +47 -44
  63. qolsys_controller/zwave_outlet.py +0 -1
  64. qolsys_controller/zwave_thermostat.py +112 -118
  65. qolsys_controller-0.0.62.dist-info/METADATA +89 -0
  66. qolsys_controller-0.0.62.dist-info/RECORD +69 -0
  67. {qolsys_controller-0.0.38.dist-info → qolsys_controller-0.0.62.dist-info}/WHEEL +1 -1
  68. qolsys_controller/plugin.py +0 -34
  69. qolsys_controller/plugin_c4.py +0 -17
  70. qolsys_controller/plugin_remote.py +0 -1298
  71. qolsys_controller-0.0.38.dist-info/METADATA +0 -93
  72. qolsys_controller-0.0.38.dist-info/RECORD +0 -68
  73. {qolsys_controller-0.0.38.dist-info → qolsys_controller-0.0.62.dist-info}/licenses/LICENSE +0 -0
@@ -1,147 +1,133 @@
1
1
  import logging
2
2
 
3
+ from .enum_zwave import ZwaveDeviceClass
3
4
  from .observable import QolsysObservable
4
5
 
5
6
  LOGGER = logging.getLogger(__name__)
6
7
 
7
8
 
8
9
  class QolsysZWaveDevice(QolsysObservable):
9
-
10
- def __init__(self, zwave_dict: dict) -> None:
10
+ def __init__(self, zwave_dict: dict[str, str]) -> None:
11
11
  super().__init__()
12
12
 
13
- self._id = zwave_dict.get("_id")
14
- self._node_id = zwave_dict.get("node_id", "")
15
- self._node_name = zwave_dict.get("node_name", "")
16
- self._node_type = zwave_dict.get("node_type", "")
17
- self._node_status = zwave_dict.get("node_status", "")
18
- self._partition_id = zwave_dict.get("partition_id", "")
19
- self._node_secure_cmd_cls = zwave_dict.get("node_secure_cmd_cls", "")
20
- self._node_battery_level = zwave_dict.get("node_battery_level", "")
21
- self._node_battery_level_value = zwave_dict.get("node_battery_level_value", "")
22
- self._is_node_listening_node = zwave_dict.get("is_node_listening_node", "")
23
- self._basic_report_value = zwave_dict.get("basic_report_value", "")
24
- self._switch_multilevel_report_value = zwave_dict.get("switch_multilevel_report_value", "")
25
- self._basic_device_type = zwave_dict.get("basic_device_type", "")
26
- self._generic_device_type = zwave_dict.get("generic_device_type", "")
27
- self._specific_device_type = zwave_dict.get("specific_device_type", "")
28
- self._num_secure_command_class = zwave_dict.get("num_secure_command_class", "")
29
- self._secure_command_class = zwave_dict.get("secure_command_class", "")
30
- self._manufacture_id = zwave_dict.get("manufacture_id", "")
31
- self._product_type = zwave_dict.get("product_type", "")
32
- self._device_protocol = zwave_dict.get("device_protocol", "")
33
- self._paired_status = zwave_dict.get("paired_status", "")
34
- self._is_device_sleeping = zwave_dict.get("is_device_sleeping", "")
35
- self._is_device_hidden = zwave_dict.get("is_device_hidden", "")
36
- self._last_updated_date = zwave_dict.get("last_updated_date", "")
37
- self._command_class_list = zwave_dict.get("command_class_list", "")
38
-
39
- @property
40
- def node_id(self) -> str:
41
- return self._node_id
42
-
43
- @property
44
- def paired_status(self) -> str:
45
- return self._paired_status
46
-
47
- @property
48
- def node_battery_level(self) -> str:
49
- return self._node_battery_level
50
-
51
- @property
52
- def node_battery_level_value(self) -> str:
53
- return self._node_battery_level_value
54
-
55
- @property
56
- def node_status(self) -> str:
57
- return self._node_status
58
-
59
- @property
60
- def node_name(self) -> str:
61
- return self._node_name
62
-
63
- @property
64
- def node_type(self) -> str:
65
- return self._node_type
66
-
67
- @property
68
- def partition_id(self) -> str:
69
- return self._partition_id
70
-
71
- def update_base(self, data: dict) -> None: # noqa: C901, PLR0912, PLR0915
72
-
13
+ self._id: str = zwave_dict.get("_id", "")
14
+ self._node_id: str = zwave_dict.get("node_id", "")
15
+ self._node_name: str = zwave_dict.get("node_name", "")
16
+ self._node_type: str = zwave_dict.get("node_type", "")
17
+ self._node_status: str = zwave_dict.get("node_status", "")
18
+ self._partition_id: str = zwave_dict.get("partition_id", "")
19
+ self._node_secure_cmd_cls: str = zwave_dict.get("node_secure_cmd_cls", "")
20
+ self._node_battery_level: str = zwave_dict.get("node_battery_level", "")
21
+ self._node_battery_level_value: str = zwave_dict.get("node_battery_level_value", "")
22
+ self._is_node_listening_node: str = zwave_dict.get("is_node_listening_node", "")
23
+ self._basic_report_value: str = zwave_dict.get("basic_report_value", "")
24
+ self._switch_multilevel_report_value: str = zwave_dict.get("switch_multilevel_report_value", "")
25
+ self._basic_device_type: str = zwave_dict.get("basic_device_type", "")
26
+ self._generic_device_type: str = zwave_dict.get("generic_device_type", "")
27
+ self._specific_device_type: str = zwave_dict.get("specific_device_type", "")
28
+ self._num_secure_command_class: str = zwave_dict.get("num_secure_command_class", "")
29
+ self._secure_command_class: str = zwave_dict.get("secure_command_class", "")
30
+ self._manufacture_id: str = zwave_dict.get("manufacture_id", "")
31
+ self._product_type: str = zwave_dict.get("product_type", "")
32
+ self._device_protocol: str = zwave_dict.get("device_protocol", "")
33
+ self._paired_status: str = zwave_dict.get("paired_status", "")
34
+ self._is_device_sleeping: str = zwave_dict.get("is_device_sleeping", "")
35
+ self._is_device_hidden: str = zwave_dict.get("is_device_hidden", "")
36
+ self._last_updated_date: str = zwave_dict.get("last_updated_date", "")
37
+ self._command_class_list: str = zwave_dict.get("command_class_list", "")
38
+
39
+ def update_base(self, data: dict[str, str]) -> None: # noqa: C901, PLR0912, PLR0915
73
40
  # Check if we are updating same node_id
74
41
  node_id_update = data.get("node_id", "")
75
42
  if node_id_update != self._node_id:
76
43
  LOGGER.error(
77
- "Updating ZWave%s (%s) with ZWave%s (different node_id)", self.node_id, self.node_name, node_id_update,
44
+ "Updating ZWave%s (%s) with ZWave%s (different node_id)",
45
+ self.node_id,
46
+ self.node_name,
47
+ node_id_update,
78
48
  )
79
49
  return
80
50
 
81
51
  self.start_batch_update()
82
52
 
83
53
  if "paired_status" in data:
84
- self.paired_status = data.get("paired_status")
54
+ self.paired_status = data.get("paired_status", "")
85
55
  if "node_battery_level" in data:
86
- self.node_battery_level = data.get("node_battery_level")
56
+ self.node_battery_level = data.get("node_battery_level", "")
87
57
  if "node_battery_level_value" in data:
88
- self.node_battery_level_value = data.get("node_battery_level_value")
58
+ self.node_battery_level_value = data.get("node_battery_level_value", "")
89
59
  if "node_status" in data:
90
- self.node_status = data.get("node_status")
60
+ self.node_status = data.get("node_status", "")
91
61
  if "node_name" in data:
92
- self.node_name = data.get("node_name")
62
+ self.node_name = data.get("node_name", "")
93
63
  if "node_type" in data:
94
- self.node_type = data.get("node_type")
64
+ self.node_type = data.get("node_type", "")
95
65
  if "partition_id" in data:
96
- self.partition_id = data.get("partition_id")
66
+ self.partition_id = data.get("partition_id", "")
97
67
  if "node_secure_cmd_cls" in data:
98
- self._node_secure_cmd_cls = data.get("node_secure_cmd_cls")
68
+ self._node_secure_cmd_cls = data.get("node_secure_cmd_cls", "")
99
69
  if "is_node_listening_node" in data:
100
- self._is_node_listening_node = data.get("is_node_listening_node")
70
+ self._is_node_listening_node = data.get("is_node_listening_node", "")
101
71
  if "basic_report_value" in data:
102
- self._basic_report_value = data.get("basic_report_value")
72
+ self._basic_report_value = data.get("basic_report_value", "")
103
73
  if "switch_multilevel_report_value" in data:
104
- self._switch_multilevel_report_value = data.get("switch_multilevel_report_value")
74
+ self._switch_multilevel_report_value = data.get("switch_multilevel_report_value", "")
105
75
  if "basic_device_type" in data:
106
- self._basic_device_type = data.get("basic_device_type")
76
+ self._basic_device_type = data.get("basic_device_type", "")
107
77
  if "generic_device_type" in data:
108
- self._generic_device_type = data.get("generic_device_type")
78
+ self._generic_device_type = data.get("generic_device_type", "")
109
79
  if "specific_device_type" in data:
110
- self._specific_device_type = data.get("specific_device_type")
80
+ self._specific_device_type = data.get("specific_device_type", "")
111
81
  if "num_secure_command_class" in data:
112
- self._num_secure_command_class = data.get("num_secure_command_class")
82
+ self._num_secure_command_class = data.get("num_secure_command_class", "")
113
83
  if "secure_command_class" in data:
114
- self._secure_command_class = data.get("secure_command_class")
84
+ self._secure_command_class = data.get("secure_command_class", "")
115
85
  if "manufacture_id" in data:
116
- self._manufacture_id = data.get("manufacture_id")
86
+ self._manufacture_id = data.get("manufacture_id", "")
117
87
  if "product_type" in data:
118
- self._product_type = data.get("product_type")
88
+ self._product_type = data.get("product_type", "")
119
89
  if "device_protocol" in data:
120
- self._device_protocol = data.get("device_protocol")
90
+ self._device_protocol = data.get("device_protocol", "")
121
91
  if "paired_status" in data:
122
- self.paired_status = data.get("paired_status")
92
+ self.paired_status = data.get("paired_status", "")
123
93
  if "is_device_sleeping" in data:
124
- self._is_device_sleeping = data.get("is_device_sleeping")
94
+ self._is_device_sleeping = data.get("is_device_sleeping", "")
125
95
  if "is_device_hidden" in data:
126
- self._is_device_hidden = data.get("is_device_hidden")
96
+ self._is_device_hidden = data.get("is_device_hidden", "")
127
97
  if "last_updated_date" in data:
128
- self._last_updated_date = data.get("last_updated_date")
98
+ self._last_updated_date = data.get("last_updated_date", "")
129
99
  if "command_class_list" in data:
130
- self._last_updated_date = data.get("command_class_list")
100
+ self._last_updated_date = data.get("command_class_list", "")
131
101
 
132
102
  self.end_batch_update()
133
103
 
104
+ # -----------------------------
105
+ # properties + setters
106
+ # -----------------------------
107
+
108
+ @property
109
+ def node_id(self) -> str:
110
+ return self._node_id
111
+
134
112
  @node_id.setter
135
- def node_id(self, value: str) -> str:
113
+ def node_id(self, value: str) -> None:
136
114
  self._node_id = value
137
115
 
116
+ @property
117
+ def paired_status(self) -> str:
118
+ return self._paired_status
119
+
138
120
  @paired_status.setter
139
- def paired_status(self, value: str) -> str:
121
+ def paired_status(self, value: str) -> None:
140
122
  if self._paired_status != value:
141
123
  LOGGER.debug("ZWave%s (%s) - paired_status: %s", self.node_id, self.node_name, value)
142
124
  self._paired_status = value
143
125
  self.notify()
144
126
 
127
+ @property
128
+ def node_battery_level(self) -> str:
129
+ return self._node_battery_level
130
+
145
131
  @node_battery_level.setter
146
132
  def node_battery_level(self, value: str) -> None:
147
133
  if self._node_battery_level != value:
@@ -149,42 +135,69 @@ class QolsysZWaveDevice(QolsysObservable):
149
135
  self._node_battery_level = value
150
136
  self.notify()
151
137
 
138
+ @property
139
+ def node_battery_level_value(self) -> str:
140
+ return self._node_battery_level_value
141
+
152
142
  @node_battery_level_value.setter
153
- def node_battery_level_value(self, value: str) -> str:
143
+ def node_battery_level_value(self, value: str) -> None:
154
144
  if self._node_battery_level_value != value:
155
145
  LOGGER.debug("ZWave%s (%s) - node_battery_level_value: %s", self.node_id, self.node_name, value)
156
146
  self._node_battery_level_value = value
157
147
  self.notify()
158
148
 
149
+ @property
150
+ def node_status(self) -> str:
151
+ return self._node_status
152
+
159
153
  @node_status.setter
160
- def node_status(self, value: str) -> str:
154
+ def node_status(self, value: str) -> None:
161
155
  if self._node_status != value:
162
156
  LOGGER.debug("ZWave%s (%s) - node_status: %s", self.node_id, self.node_name, value)
163
157
  self._node_status = value
164
158
  self.notify()
165
159
 
160
+ @property
161
+ def node_name(self) -> str:
162
+ return self._node_name
163
+
166
164
  @node_name.setter
167
- def node_name(self, value: str) -> str:
165
+ def node_name(self, value: str) -> None:
168
166
  if self._node_name != value:
169
167
  LOGGER.debug("ZWave%s (%s) - node_name: %s", self.node_id, self.node_name, value)
170
168
  self._node_name = value
171
169
  self.notify()
172
170
 
171
+ @property
172
+ def node_type(self) -> str:
173
+ return self._node_type
174
+
173
175
  @node_type.setter
174
- def node_type(self, value: str) -> str:
176
+ def node_type(self, value: str) -> None:
175
177
  if self._node_type != value:
176
178
  LOGGER.debug("ZWave%s (%s) - node_type: %s", self.node_id, self.node_name, value)
177
179
  self._node_type = value
178
180
  self.notify()
179
181
 
182
+ @property
183
+ def partition_id(self) -> str:
184
+ return self._partition_id
185
+
180
186
  @partition_id.setter
181
- def partition_id(self, value: str) -> str:
187
+ def partition_id(self, value: str) -> None:
182
188
  if self._partition_id != value:
183
189
  LOGGER.debug("ZWave%s (%s) - partition_id: %s", self._node_id, self._node_name, value)
184
190
  self._partition_id = value
185
191
  self.notify()
186
192
 
187
- def to_dict_base(self) -> dict:
193
+ @property
194
+ def generic_device_type(self) -> ZwaveDeviceClass:
195
+ try:
196
+ return ZwaveDeviceClass(int(self._generic_device_type))
197
+ except ValueError:
198
+ return ZwaveDeviceClass.Unknown
199
+
200
+ def to_dict_base(self) -> dict[str, str]:
188
201
  return {
189
202
  "_id": self._id,
190
203
  "node_id": self.node_id,
@@ -6,26 +6,31 @@ LOGGER = logging.getLogger(__name__)
6
6
 
7
7
 
8
8
  class QolsysDimmer(QolsysZWaveDevice):
9
+ def __init__(self, dimmer_dict: dict[str, str], zwave_dict: dict[str, str]) -> None:
10
+ super().__init__(zwave_dict)
9
11
 
10
- def __init__(self, dimmer_dict: dict, zwave_dict: dict) -> None:
12
+ self._dimmer_id: str = dimmer_dict.get("_id", "")
13
+ self._dimmer_version: str = dimmer_dict.get("version", "")
14
+ self._dimmer_opr: str = dimmer_dict.get("opr", "")
15
+ self._dimmer_partition_id: str = dimmer_dict.get("partition_id", "")
16
+ self._dimmer_name: str = dimmer_dict.get("dimmer_name", "")
17
+ self._dimmer_status: str = dimmer_dict.get("status", "")
18
+ self._dimmer_level: str = dimmer_dict.get("level", "")
19
+ self._dimmer_node_id: str = dimmer_dict.get("node_id", "")
20
+ self._dimmer_created_by: str = dimmer_dict.get("created_by", "")
21
+ self._dimmer_created_date: str = dimmer_dict.get("created_date", "")
22
+ self._dimmer_updated_by: str = dimmer_dict.get("updated_by", "")
23
+ self._dimmer_last_updated_date: str = dimmer_dict.get("last_updated_date", "")
24
+ self._dimmer_endpoint: str = dimmer_dict.get("endpoint", "")
25
+ self._dimmer_power_details: str = dimmer_dict.get("power_details", "")
26
+ self._dimmer_paired_status: str = dimmer_dict.get("paired_status", "")
11
27
 
12
- super().__init__(zwave_dict)
28
+ def is_on(self) -> bool:
29
+ return self.dimmer_status == "On"
13
30
 
14
- self._dimmer_id = dimmer_dict.get("_id")
15
- self._dimmer_version = dimmer_dict.get("version", "")
16
- self._dimmer_opr = dimmer_dict.get("opr", "")
17
- self._dimmer_partition_id = dimmer_dict.get("partition_id", "")
18
- self._dimmer_name = dimmer_dict.get("dimmer_name", "")
19
- self._dimmer_status = dimmer_dict.get("status", "")
20
- self._dimmer_level = dimmer_dict.get("level", "")
21
- self._dimmer_node_id = dimmer_dict.get("node_id", "")
22
- self._dimmer_created_by = dimmer_dict.get("created_by", "")
23
- self._dimmer_created_date = dimmer_dict.get("created_date", "")
24
- self._dimmer_updated_by = dimmer_dict.get("updated_by", "")
25
- self._dimmer_last_updated_date = dimmer_dict.get("last_updated_date", "")
26
- self._dimmer_endpoint = dimmer_dict.get("endpoint", "")
27
- self._dimmer_power_details = dimmer_dict.get("power_details", "")
28
- self._dimmer_paired_status = dimmer_dict.get("paired_status", "")
31
+ # -----------------------------
32
+ # properties + setters
33
+ # -----------------------------
29
34
 
30
35
  @property
31
36
  def dimmer_node_id(self) -> str:
@@ -35,21 +40,6 @@ class QolsysDimmer(QolsysZWaveDevice):
35
40
  def dimmer_status(self) -> str:
36
41
  return self._dimmer_status
37
42
 
38
- @property
39
- def dimmer_name(self) -> str:
40
- return self._dimmer_name
41
-
42
- @property
43
- def dimmer_level(self) -> str:
44
- return self._dimmer_level
45
-
46
- @dimmer_level.setter
47
- def dimmer_level(self, value: str) -> None:
48
- if self._dimmer_level != value:
49
- LOGGER.debug("Dimmer%s (%s) - level: %s", self.node_id, self.dimmer_name, value)
50
- self._dimmer_level = value
51
- self.notify()
52
-
53
43
  @dimmer_status.setter
54
44
  def dimmer_status(self, value: str) -> None:
55
45
  if self._dimmer_status != value:
@@ -57,6 +47,10 @@ class QolsysDimmer(QolsysZWaveDevice):
57
47
  self._dimmer_status = value
58
48
  self.notify()
59
49
 
50
+ @property
51
+ def dimmer_name(self) -> str:
52
+ return self._dimmer_name
53
+
60
54
  @dimmer_name.setter
61
55
  def dimmer_name(self, value: str) -> None:
62
56
  if self._dimmer_name != value:
@@ -64,49 +58,58 @@ class QolsysDimmer(QolsysZWaveDevice):
64
58
  self._dimmer_name = value
65
59
  self.notify()
66
60
 
67
- def is_on(self) -> bool:
68
- return self.dimmer_status == "On"
61
+ @property
62
+ def dimmer_level(self) -> str:
63
+ return self._dimmer_level
64
+
65
+ @dimmer_level.setter
66
+ def dimmer_level(self, value: str) -> None:
67
+ if self._dimmer_level != value:
68
+ LOGGER.debug("Dimmer%s (%s) - level: %s", self.node_id, self.dimmer_name, value)
69
+ self._dimmer_level = value
70
+ self.notify()
69
71
 
70
- def update_dimmer(self, content_values: dict) -> None: # noqa: C901
72
+ def update_dimmer(self, content_values: dict[str, str]) -> None: # noqa: PLR0912
71
73
  # Check if we are updating same none_id
72
74
  node_id_update = content_values.get("node_id", "")
73
75
  if node_id_update != self._dimmer_node_id:
74
76
  LOGGER.error(
75
- "Updating Dimmer %s (%s) with dimmer %s (different id)", self._node_id, self.dimmer_name, node_id_update)
77
+ "Updating Dimmer %s (%s) with dimmer %s (different id)", self._node_id, self.dimmer_name, node_id_update
78
+ )
76
79
  return
77
80
 
78
81
  self.start_batch_update()
79
82
 
80
83
  if "status" in content_values:
81
- self.dimmer_status = content_values.get("status")
84
+ self.dimmer_status = content_values.get("status", "")
82
85
  if "level" in content_values:
83
- self.dimmer_level = content_values.get("level")
86
+ self.dimmer_level = content_values.get("level", "")
84
87
  if "dimmer_name" in content_values:
85
- self.dimmer_name = content_values.get("dimmer_name")
88
+ self.dimmer_name = content_values.get("dimmer_name", "")
86
89
  if "created_by" in content_values:
87
- self._dimmer_created_by = content_values.get("created_by")
90
+ self._dimmer_created_by = content_values.get("created_by", "")
88
91
  if "created_date" in content_values:
89
- self._dimmer_created_date = content_values.get("created_date")
92
+ self._dimmer_created_date = content_values.get("created_date", "")
90
93
  if "version" in content_values:
91
- self._dimmer_version = content_values.get("version")
94
+ self._dimmer_version = content_values.get("version", "")
92
95
  if "opr" in content_values:
93
- self._dimmer_opr = content_values.get("opr")
96
+ self._dimmer_opr = content_values.get("opr", "")
94
97
  if "partition_id" in content_values:
95
- self.partition_id = content_values.get("partition_id")
98
+ self.partition_id = content_values.get("partition_id", "")
96
99
  if "updated_by" in content_values:
97
- self._dimmer_updated_by = content_values.get("updated_by")
100
+ self._dimmer_updated_by = content_values.get("updated_by", "")
98
101
  if "last_updated_date" in content_values:
99
- self._last_updated_date = content_values.get("last_updated_date")
102
+ self._last_updated_date = content_values.get("last_updated_date", "")
100
103
  if "endpoint" in content_values:
101
- self._dimmer_endpoint = content_values.get("endpoint")
104
+ self._dimmer_endpoint = content_values.get("endpoint", "")
102
105
  if "power_details" in content_values:
103
- self._dimmer_power_details = content_values.get("power_details")
106
+ self._dimmer_power_details = content_values.get("power_details", "")
104
107
  if "paired_status" in content_values:
105
- self._dimmer_paired_status = content_values.get("paired_status")
108
+ self._dimmer_paired_status = content_values.get("paired_status", "")
106
109
 
107
110
  self.end_batch_update()
108
111
 
109
- def to_dict_dimmer(self) -> dict:
112
+ def to_dict_dimmer(self) -> dict[str, str]:
110
113
  return {
111
114
  "_id": self._dimmer_id,
112
115
  "version": self._dimmer_version,
@@ -6,6 +6,5 @@ LOGGER = logging.getLogger(__name__)
6
6
 
7
7
 
8
8
  class QolsysGarageDoor(QolsysZWaveDevice):
9
-
10
9
  def __init__(self) -> None:
11
10
  pass
@@ -1,11 +1,10 @@
1
1
  import logging
2
2
 
3
- from qolsys_controller.zwave_device import QolsysZWaveDevice
3
+ from .zwave_device import QolsysZWaveDevice
4
4
 
5
5
  LOGGER = logging.getLogger(__name__)
6
6
 
7
7
 
8
8
  class QolsysGeneric(QolsysZWaveDevice):
9
-
10
- def __init__(self, zwave_dict: dict) -> None:
9
+ def __init__(self, zwave_dict: dict[str, str]) -> None:
11
10
  super().__init__(zwave_dict)
@@ -6,29 +6,31 @@ LOGGER = logging.getLogger(__name__)
6
6
 
7
7
 
8
8
  class QolsysLock(QolsysZWaveDevice):
9
-
10
9
  LOCK_STATUS_ARRAY = ["Locked"] # noqa: RUF012
11
10
 
12
- def __init__(self, lock_dict: dict, zwave_dict: dict) -> None:
13
-
11
+ def __init__(self, lock_dict: dict[str, str], zwave_dict: dict[str, str]) -> None:
14
12
  super().__init__(zwave_dict)
15
13
 
16
- self._lock_id = lock_dict.get("_id")
17
- self._lock_version = lock_dict.get("version", "")
18
- self._lock_opr = lock_dict.get("opr", "")
19
- self._lock_partition_id = lock_dict.get("partition_id", "")
20
- self._lock_name = lock_dict.get("doorlock_name", "")
21
- self._lock_status = lock_dict.get("status", "")
22
- self._lock_node_id = lock_dict.get("node_id", "")
23
- self._lock_created_by = lock_dict.get("created_by", "")
24
- self._lock_created_date = lock_dict.get("created_date", "")
25
- self._lock_updated_by = lock_dict.get("updated_by", "")
26
- self._lock_last_updated_date = lock_dict.get("last_updated_date", "")
27
- self._lock_remote_arming = lock_dict.get("remote_arming", "")
28
- self._lock_keyfob_arming = lock_dict.get("keyfob_arming", "")
29
- self._lock_panel_arming = lock_dict.get("panel_arming", "")
30
- self._lock_endpoint = lock_dict.get("endpoint", "")
31
- self._lock_paired_status = lock_dict.get("paired_status", "")
14
+ self._lock_id: str = lock_dict.get("_id", "")
15
+ self._lock_version: str = lock_dict.get("version", "")
16
+ self._lock_opr: str = lock_dict.get("opr", "")
17
+ self._lock_partition_id: str = lock_dict.get("partition_id", "")
18
+ self._lock_name: str = lock_dict.get("doorlock_name", "")
19
+ self._lock_status: str = lock_dict.get("status", "")
20
+ self._lock_node_id: str = lock_dict.get("node_id", "")
21
+ self._lock_created_by: str = lock_dict.get("created_by", "")
22
+ self._lock_created_date: str = lock_dict.get("created_date", "")
23
+ self._lock_updated_by: str = lock_dict.get("updated_by", "")
24
+ self._lock_last_updated_date: str = lock_dict.get("last_updated_date", "")
25
+ self._lock_remote_arming: str = lock_dict.get("remote_arming", "")
26
+ self._lock_keyfob_arming: str = lock_dict.get("keyfob_arming", "")
27
+ self._lock_panel_arming: str = lock_dict.get("panel_arming", "")
28
+ self._lock_endpoint: str = lock_dict.get("endpoint", "")
29
+ self._lock_paired_status: str = lock_dict.get("paired_status", "")
30
+
31
+ # -----------------------------
32
+ # properties + setters
33
+ # -----------------------------
32
34
 
33
35
  @property
34
36
  def lock_node_id(self) -> str:
@@ -38,14 +40,6 @@ class QolsysLock(QolsysZWaveDevice):
38
40
  def lock_status(self) -> str:
39
41
  return self._lock_status
40
42
 
41
- @property
42
- def lock_name(self) -> str:
43
- return self._lock_name
44
-
45
- @property
46
- def paired_status(self) -> str:
47
- return self._paired_status
48
-
49
43
  @lock_status.setter
50
44
  def lock_status(self, value: str) -> None:
51
45
  if self._lock_status != value:
@@ -53,6 +47,10 @@ class QolsysLock(QolsysZWaveDevice):
53
47
  self._lock_status = value
54
48
  self.notify()
55
49
 
50
+ @property
51
+ def lock_name(self) -> str:
52
+ return self._lock_name
53
+
56
54
  @lock_name.setter
57
55
  def lock_name(self, value: str) -> None:
58
56
  if self._lock_name != value:
@@ -60,6 +58,10 @@ class QolsysLock(QolsysZWaveDevice):
60
58
  self._lock_name = value
61
59
  self.notify()
62
60
 
61
+ @property
62
+ def paired_status(self) -> str:
63
+ return self._paired_status
64
+
63
65
  @paired_status.setter
64
66
  def paired_status(self, value: str) -> None:
65
67
  if self._paired_status != value:
@@ -67,48 +69,49 @@ class QolsysLock(QolsysZWaveDevice):
67
69
  self._lock_paired_status = value
68
70
  self.notify()
69
71
 
70
- def update_lock(self, data: dict) -> None: # noqa: PLR0912
72
+ def update_lock(self, data: dict[str, str]) -> None: # noqa: PLR0912
71
73
  # Check if we are updating same zoneid
72
74
  node_id_update = data.get("node_id", "")
73
75
  if node_id_update != self.lock_node_id:
74
76
  LOGGER.error(
75
- "Updating Lock %s (%s) with Lock '%s' (different id)", self.lock_node_id, self.lock_name, node_id_update)
77
+ "Updating Lock %s (%s) with Lock '%s' (different id)", self.lock_node_id, self.lock_name, node_id_update
78
+ )
76
79
  return
77
80
 
78
81
  self.start_batch_update()
79
82
 
80
83
  if "version" in data:
81
- self._lock_version = data.get("version")
84
+ self._lock_version = data.get("version", "")
82
85
  if "opr" in data:
83
- self._lock_opr = data.get("opr")
86
+ self._lock_opr = data.get("opr", "")
84
87
  if "partition_id" in data:
85
- self._lock_partition_id = data.get("partition_id")
88
+ self._lock_partition_id = data.get("partition_id", "")
86
89
  if "lock_name" in data:
87
- self.lock_name = data.get("lock_name")
90
+ self.lock_name = data.get("lock_name", "")
88
91
  if "status" in data:
89
- self.lock_status = data.get("status")
92
+ self.lock_status = data.get("status", "")
90
93
  if "created_by" in data:
91
- self._lock_created_by = data.get("created_by")
94
+ self._lock_created_by = data.get("created_by", "")
92
95
  if "created_date" in data:
93
- self._lock_created_date = data.get("created_date")
96
+ self._lock_created_date = data.get("created_date", "")
94
97
  if "updated_by" in data:
95
- self._lock_updated_by = data.get("updated_by")
98
+ self._lock_updated_by = data.get("updated_by", "")
96
99
  if "last_updated_date" in data:
97
- self._lock_last_updated_date = data.get("last_updated_date")
100
+ self._lock_last_updated_date = data.get("last_updated_date", "")
98
101
  if "remote_arming" in data:
99
- self._lock_remote_arming = data.get("remote_arming")
102
+ self._lock_remote_arming = data.get("remote_arming", "")
100
103
  if "keyfob_arming" in data:
101
- self._lock_keyfob_arming = data.get("keyfob_arming")
104
+ self._lock_keyfob_arming = data.get("keyfob_arming", "")
102
105
  if "panel_arming" in data:
103
- self._lock_panel_arming = data.get("panel_arming")
106
+ self._lock_panel_arming = data.get("panel_arming", "")
104
107
  if "endpoint" in data:
105
- self._lock_endpoint = data.get("endpoint")
108
+ self._lock_endpoint = data.get("endpoint", "")
106
109
  if "paired_status" in data:
107
- self._lock_paired_status = data.get("paired_status")
110
+ self._lock_paired_status = data.get("paired_status", "")
108
111
 
109
112
  self.end_batch_update()
110
113
 
111
- def to_dict_lock(self) -> dict:
114
+ def to_dict_lock(self) -> dict[str, str]:
112
115
  return {
113
116
  "_id": self._lock_id,
114
117
  "version": self._lock_version,
@@ -6,6 +6,5 @@ LOGGER = logging.getLogger(__name__)
6
6
 
7
7
 
8
8
  class QolsysOutlet(QolsysZWaveDevice):
9
-
10
9
  def __init__(self) -> None:
11
10
  pass