qolsys-controller 0.0.44__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.
- qolsys_controller/controller.py +829 -20
- qolsys_controller/database/db.py +48 -29
- qolsys_controller/database/table.py +89 -60
- qolsys_controller/database/table_alarmedsensor.py +0 -2
- qolsys_controller/database/table_automation.py +0 -1
- qolsys_controller/database/table_country_locale.py +0 -1
- qolsys_controller/database/table_dashboard_msgs.py +1 -2
- qolsys_controller/database/table_dimmerlight.py +0 -1
- qolsys_controller/database/table_doorlock.py +0 -1
- qolsys_controller/database/table_eu_event.py +1 -2
- qolsys_controller/database/table_heat_map.py +0 -2
- qolsys_controller/database/table_history.py +4 -1
- qolsys_controller/database/table_iqremotesettings.py +0 -2
- qolsys_controller/database/table_iqrouter_network_config.py +0 -1
- qolsys_controller/database/table_iqrouter_user_device.py +0 -2
- qolsys_controller/database/table_master_slave.py +0 -1
- qolsys_controller/database/table_nest_device.py +0 -1
- qolsys_controller/database/table_output_rules.py +0 -1
- qolsys_controller/database/table_partition.py +0 -1
- qolsys_controller/database/table_pgm_outputs.py +0 -2
- qolsys_controller/database/table_powerg_device.py +0 -2
- qolsys_controller/database/table_qolsyssettings.py +0 -2
- qolsys_controller/database/table_scene.py +0 -2
- qolsys_controller/database/table_sensor.py +2 -2
- qolsys_controller/database/table_sensor_group.py +23 -0
- qolsys_controller/database/table_shades.py +0 -2
- qolsys_controller/database/table_smartsocket.py +0 -2
- qolsys_controller/database/table_state.py +0 -1
- qolsys_controller/database/table_tcc.py +0 -1
- qolsys_controller/database/table_thermostat.py +0 -1
- qolsys_controller/database/table_trouble_conditions.py +0 -2
- qolsys_controller/database/table_user.py +0 -2
- qolsys_controller/database/table_virtual_device.py +0 -2
- qolsys_controller/database/table_weather.py +0 -2
- qolsys_controller/database/table_zigbee_device.py +0 -1
- qolsys_controller/database/table_zwave_association_group.py +0 -1
- qolsys_controller/database/table_zwave_history.py +0 -1
- qolsys_controller/database/table_zwave_node.py +0 -1
- qolsys_controller/database/table_zwave_other.py +0 -1
- qolsys_controller/enum.py +37 -12
- qolsys_controller/enum_zwave.py +81 -36
- qolsys_controller/errors.py +9 -12
- qolsys_controller/mdns.py +7 -4
- qolsys_controller/mqtt_command.py +119 -0
- qolsys_controller/mqtt_command_queue.py +5 -4
- qolsys_controller/observable.py +2 -2
- qolsys_controller/panel.py +195 -151
- qolsys_controller/partition.py +129 -127
- qolsys_controller/pki.py +69 -97
- qolsys_controller/scene.py +30 -28
- qolsys_controller/settings.py +96 -50
- qolsys_controller/state.py +59 -34
- qolsys_controller/task_manager.py +8 -12
- qolsys_controller/users.py +25 -0
- qolsys_controller/utils_mqtt.py +8 -16
- qolsys_controller/weather.py +71 -0
- qolsys_controller/zone.py +242 -214
- qolsys_controller/zwave_device.py +108 -95
- qolsys_controller/zwave_dimmer.py +53 -50
- qolsys_controller/zwave_garagedoor.py +0 -1
- qolsys_controller/zwave_generic.py +2 -3
- qolsys_controller/zwave_lock.py +47 -44
- qolsys_controller/zwave_outlet.py +0 -1
- qolsys_controller/zwave_thermostat.py +112 -118
- qolsys_controller-0.0.62.dist-info/METADATA +89 -0
- qolsys_controller-0.0.62.dist-info/RECORD +69 -0
- {qolsys_controller-0.0.44.dist-info → qolsys_controller-0.0.62.dist-info}/WHEEL +1 -1
- qolsys_controller/plugin.py +0 -34
- qolsys_controller/plugin_c4.py +0 -17
- qolsys_controller/plugin_remote.py +0 -1298
- qolsys_controller-0.0.44.dist-info/METADATA +0 -93
- qolsys_controller-0.0.44.dist-info/RECORD +0 -68
- {qolsys_controller-0.0.44.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
|
-
|
|
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)",
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
def is_on(self) -> bool:
|
|
29
|
+
return self.dimmer_status == "On"
|
|
13
30
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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:
|
|
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,
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from
|
|
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)
|
qolsys_controller/zwave_lock.py
CHANGED
|
@@ -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,
|