qolsys-controller 0.0.44__py3-none-any.whl → 0.0.87__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/adc_device.py +202 -0
- qolsys_controller/adc_service.py +139 -0
- qolsys_controller/adc_service_garagedoor.py +35 -0
- qolsys_controller/controller.py +1040 -20
- qolsys_controller/database/db.py +108 -29
- qolsys_controller/database/table.py +90 -60
- qolsys_controller/database/table_alarmedsensor.py +2 -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 +12 -3
- qolsys_controller/database/table_state.py +0 -1
- qolsys_controller/database/table_tcc.py +0 -1
- qolsys_controller/database/table_thermostat.py +3 -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 +13 -3
- 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 +3 -1
- qolsys_controller/database/table_zwave_other.py +0 -1
- qolsys_controller/enum.py +42 -13
- qolsys_controller/enum_adc.py +28 -0
- qolsys_controller/enum_zwave.py +210 -36
- qolsys_controller/errors.py +14 -12
- qolsys_controller/mdns.py +7 -4
- qolsys_controller/mqtt_command.py +125 -0
- qolsys_controller/mqtt_command_queue.py +5 -4
- qolsys_controller/observable.py +2 -2
- qolsys_controller/panel.py +304 -156
- qolsys_controller/partition.py +149 -127
- qolsys_controller/pki.py +69 -97
- qolsys_controller/scene.py +30 -28
- qolsys_controller/settings.py +96 -50
- qolsys_controller/state.py +221 -34
- qolsys_controller/task_manager.py +11 -14
- qolsys_controller/users.py +25 -0
- qolsys_controller/utils_mqtt.py +8 -16
- qolsys_controller/weather.py +71 -0
- qolsys_controller/zone.py +243 -214
- qolsys_controller/zwave_device.py +234 -93
- qolsys_controller/zwave_dimmer.py +55 -49
- qolsys_controller/zwave_energy_clamp.py +15 -0
- qolsys_controller/zwave_garagedoor.py +3 -1
- qolsys_controller/zwave_generic.py +5 -3
- qolsys_controller/zwave_lock.py +51 -44
- qolsys_controller/zwave_outlet.py +3 -1
- qolsys_controller/zwave_service_meter.py +192 -0
- qolsys_controller/zwave_service_multilevelsensor.py +119 -0
- qolsys_controller/zwave_thermometer.py +21 -0
- qolsys_controller/zwave_thermostat.py +249 -143
- qolsys_controller-0.0.87.dist-info/METADATA +89 -0
- qolsys_controller-0.0.87.dist-info/RECORD +77 -0
- {qolsys_controller-0.0.44.dist-info → qolsys_controller-0.0.87.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.87.dist-info}/licenses/LICENSE +0 -0
qolsys_controller/scene.py
CHANGED
|
@@ -6,36 +6,46 @@ LOGGER = logging.getLogger(__name__)
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class QolsysScene(QolsysObservable):
|
|
9
|
-
|
|
10
|
-
def __init__(self, data: dict) -> None:
|
|
9
|
+
def __init__(self, data: dict[str, str]) -> None:
|
|
11
10
|
super().__init__()
|
|
12
11
|
|
|
13
|
-
self._scene_id = data.get("scene_id", "")
|
|
14
|
-
self._name = data.get("name", "")
|
|
15
|
-
self._icon = data.get("icon", "")
|
|
16
|
-
self._color = data.get("color", "")
|
|
17
|
-
|
|
18
|
-
def update(self, data: dict) -> None:
|
|
12
|
+
self._scene_id: str = data.get("scene_id", "")
|
|
13
|
+
self._name: str = data.get("name", "")
|
|
14
|
+
self._icon: str = data.get("icon", "")
|
|
15
|
+
self._color: str = data.get("color", "")
|
|
19
16
|
|
|
17
|
+
def update(self, data: dict[str, str]) -> None:
|
|
20
18
|
scene_id_update = data.get("scene_id", "")
|
|
21
19
|
if scene_id_update != self._scene_id:
|
|
22
|
-
LOGGER.error("Updating Scene%s (%s) with Scene%s (different id)", self._scene_id, self.
|
|
20
|
+
LOGGER.error("Updating Scene%s (%s) with Scene%s (different id)", self._scene_id, self.name, scene_id_update)
|
|
23
21
|
return
|
|
24
22
|
|
|
25
23
|
self.start_batch_update()
|
|
26
24
|
|
|
27
25
|
# Update name
|
|
28
26
|
if "name" in data:
|
|
29
|
-
self.sensorname = data.get("name")
|
|
27
|
+
self.sensorname = data.get("name", "")
|
|
30
28
|
|
|
31
29
|
if "color" in data:
|
|
32
|
-
self.color = data.get("color")
|
|
30
|
+
self.color = data.get("color", "")
|
|
33
31
|
|
|
34
32
|
if "icon" in data:
|
|
35
|
-
self.icon = data.get("icon")
|
|
33
|
+
self.icon = data.get("icon", "")
|
|
36
34
|
|
|
37
35
|
self.end_batch_update()
|
|
38
36
|
|
|
37
|
+
def to_dict(self) -> dict[str, str]:
|
|
38
|
+
return {
|
|
39
|
+
"scene_id": self.scene_id,
|
|
40
|
+
"name": self.name,
|
|
41
|
+
"color": self.color,
|
|
42
|
+
"icon": self.icon,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# -----------------------------
|
|
46
|
+
# properties + setters
|
|
47
|
+
# -----------------------------
|
|
48
|
+
|
|
39
49
|
@property
|
|
40
50
|
def scene_id(self) -> str:
|
|
41
51
|
return self._scene_id
|
|
@@ -44,36 +54,28 @@ class QolsysScene(QolsysObservable):
|
|
|
44
54
|
def name(self) -> str:
|
|
45
55
|
return self._name
|
|
46
56
|
|
|
47
|
-
@property
|
|
48
|
-
def icon(self) -> str:
|
|
49
|
-
return self._icon
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def color(self) -> str:
|
|
53
|
-
return self._color
|
|
54
|
-
|
|
55
57
|
@name.setter
|
|
56
58
|
def name(self, value: str) -> None:
|
|
57
59
|
if self._name != value:
|
|
58
60
|
self._name = value
|
|
59
61
|
self.notify()
|
|
60
62
|
|
|
63
|
+
@property
|
|
64
|
+
def icon(self) -> str:
|
|
65
|
+
return self._icon
|
|
66
|
+
|
|
61
67
|
@icon.setter
|
|
62
68
|
def icon(self, value: str) -> None:
|
|
63
69
|
if self._icon != value:
|
|
64
70
|
self._icon = value
|
|
65
71
|
self.notify()
|
|
66
72
|
|
|
73
|
+
@property
|
|
74
|
+
def color(self) -> str:
|
|
75
|
+
return self._color
|
|
76
|
+
|
|
67
77
|
@color.setter
|
|
68
78
|
def color(self, value: str) -> None:
|
|
69
79
|
if self._color != value:
|
|
70
80
|
self._color = value
|
|
71
81
|
self.notify()
|
|
72
|
-
|
|
73
|
-
def to_dict(self) -> dict:
|
|
74
|
-
return {
|
|
75
|
-
"scene_id": self.scene_id,
|
|
76
|
-
"name": self.name,
|
|
77
|
-
"color": self.color,
|
|
78
|
-
"icon": self.icon,
|
|
79
|
-
}
|
qolsys_controller/settings.py
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
4
|
from pathlib import Path
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
3
6
|
|
|
4
7
|
LOGGER = logging.getLogger(__name__)
|
|
5
8
|
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from .controller import QolsysController
|
|
6
11
|
|
|
7
|
-
class QolsysSettings:
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
class QolsysSettings:
|
|
14
|
+
def __init__(self, controller: QolsysController) -> None:
|
|
15
|
+
self._controller = controller
|
|
10
16
|
|
|
11
17
|
# Plugin
|
|
12
|
-
self._plugin_ip = ""
|
|
13
|
-
self._random_mac = ""
|
|
14
|
-
self._panel_mac = ""
|
|
15
|
-
self._panel_ip = ""
|
|
18
|
+
self._plugin_ip: str = ""
|
|
19
|
+
self._random_mac: str = ""
|
|
20
|
+
self._panel_mac: str = ""
|
|
21
|
+
self._panel_ip: str = ""
|
|
16
22
|
|
|
17
23
|
# Path
|
|
18
24
|
self._config_directory: Path = Path()
|
|
@@ -22,16 +28,40 @@ class QolsysSettings:
|
|
|
22
28
|
|
|
23
29
|
# Pki
|
|
24
30
|
self._key_size: int = 2048
|
|
31
|
+
self._auto_discover_pki: bool = True
|
|
25
32
|
|
|
26
33
|
# MQTT
|
|
27
34
|
self._mqtt_timeout: int = 30
|
|
28
35
|
self._mqtt_ping: int = 600
|
|
29
|
-
self._mqtt_qos:int = 0
|
|
30
|
-
self._mqtt_remote_client_id = ""
|
|
36
|
+
self._mqtt_qos: int = 0
|
|
37
|
+
self._mqtt_remote_client_id: str = ""
|
|
38
|
+
self._log_mqtt_message: bool = False
|
|
31
39
|
|
|
32
40
|
# Operation
|
|
33
|
-
self._motion_sensor_delay:bool = True
|
|
34
|
-
self._motion_sensor_delay_sec:int = 310
|
|
41
|
+
self._motion_sensor_delay: bool = True
|
|
42
|
+
self._motion_sensor_delay_sec: int = 310
|
|
43
|
+
self._check_user_code_on_arm: bool = False
|
|
44
|
+
self._check_user_code_on_disarm: bool = True
|
|
45
|
+
|
|
46
|
+
def check_panel_ip(self) -> bool:
|
|
47
|
+
if self._panel_ip == "":
|
|
48
|
+
LOGGER.debug("Invalid Panel IP: %s", self._panel_ip)
|
|
49
|
+
return False
|
|
50
|
+
|
|
51
|
+
LOGGER.debug("Found Panel IP: %s", self._panel_ip)
|
|
52
|
+
return True
|
|
53
|
+
|
|
54
|
+
def check_plugin_ip(self) -> bool:
|
|
55
|
+
if self._plugin_ip == "":
|
|
56
|
+
LOGGER.debug("Invalid Plugin IP: %s", self._plugin_ip)
|
|
57
|
+
return False
|
|
58
|
+
|
|
59
|
+
LOGGER.debug("Found Plugin IP: %s", self._plugin_ip)
|
|
60
|
+
return True
|
|
61
|
+
|
|
62
|
+
# -----------------------------
|
|
63
|
+
# properties + setters
|
|
64
|
+
# -----------------------------
|
|
35
65
|
|
|
36
66
|
@property
|
|
37
67
|
def random_mac(self) -> str:
|
|
@@ -45,6 +75,10 @@ class QolsysSettings:
|
|
|
45
75
|
def plugin_ip(self) -> str:
|
|
46
76
|
return self._plugin_ip
|
|
47
77
|
|
|
78
|
+
@plugin_ip.setter
|
|
79
|
+
def plugin_ip(self, plugin_ip: str) -> None:
|
|
80
|
+
self._plugin_ip = plugin_ip
|
|
81
|
+
|
|
48
82
|
@property
|
|
49
83
|
def panel_mac(self) -> str:
|
|
50
84
|
return self._panel_mac
|
|
@@ -57,36 +91,76 @@ class QolsysSettings:
|
|
|
57
91
|
def panel_ip(self) -> str:
|
|
58
92
|
return self._panel_ip
|
|
59
93
|
|
|
94
|
+
@panel_ip.setter
|
|
95
|
+
def panel_ip(self, panel_ip: str) -> None:
|
|
96
|
+
self._panel_ip = panel_ip
|
|
97
|
+
|
|
98
|
+
@property
|
|
99
|
+
def log_mqtt_mesages(self) -> bool:
|
|
100
|
+
return self._log_mqtt_messages
|
|
101
|
+
|
|
102
|
+
@log_mqtt_mesages.setter
|
|
103
|
+
def log_mqtt_mesages(self, log_mqtt_mesages: bool) -> None:
|
|
104
|
+
self._log_mqtt_messages = log_mqtt_mesages
|
|
105
|
+
|
|
106
|
+
@property
|
|
107
|
+
def check_user_code_on_disarm(self) -> bool:
|
|
108
|
+
return self._check_user_code_on_disarm
|
|
109
|
+
|
|
110
|
+
@check_user_code_on_disarm.setter
|
|
111
|
+
def check_user_code_on_disarm(self, check_user_code_on_disarm: bool) -> None:
|
|
112
|
+
self._check_user_code_on_disarm = check_user_code_on_disarm
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def check_user_code_on_arm(self) -> bool:
|
|
116
|
+
return self._check_user_code_on_arm
|
|
117
|
+
|
|
118
|
+
@check_user_code_on_arm.setter
|
|
119
|
+
def check_user_code_on_arm(self, check_user_code_on_arm: bool) -> None:
|
|
120
|
+
self._check_user_code_on_arm = check_user_code_on_arm
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def auto_discover_pki(self) -> bool:
|
|
124
|
+
return self._auto_discover_pki
|
|
125
|
+
|
|
126
|
+
@auto_discover_pki.setter
|
|
127
|
+
def auto_discover_pki(self, value: bool) -> None:
|
|
128
|
+
self._auto_discover_pki = value
|
|
129
|
+
|
|
60
130
|
@property
|
|
61
131
|
def mqtt_timeout(self) -> int:
|
|
62
132
|
return self._mqtt_timeout
|
|
63
133
|
|
|
134
|
+
@mqtt_timeout.setter
|
|
135
|
+
def mqtt_timeout(self, value: int) -> None:
|
|
136
|
+
self._mqtt_timeout = value
|
|
137
|
+
|
|
64
138
|
@property
|
|
65
139
|
def mqtt_ping(self) -> int:
|
|
66
140
|
return self._mqtt_ping
|
|
67
141
|
|
|
142
|
+
@mqtt_ping.setter
|
|
143
|
+
def mqtt_ping(self, value: int) -> None:
|
|
144
|
+
self._mqtt_ping = value
|
|
145
|
+
|
|
68
146
|
@property
|
|
69
147
|
def motion_sensor_delay(self) -> bool:
|
|
70
148
|
return self._motion_sensor_delay
|
|
71
149
|
|
|
72
|
-
@property
|
|
73
|
-
def motion_sensor_delay_sec(self) -> int:
|
|
74
|
-
return self._motion_sensor_delay_sec
|
|
75
|
-
|
|
76
150
|
@motion_sensor_delay.setter
|
|
77
151
|
def motion_sensor_delay(self, value: bool) -> None:
|
|
78
152
|
self._motion_sensor_delay = value
|
|
79
153
|
|
|
80
|
-
@
|
|
81
|
-
def
|
|
82
|
-
self.
|
|
154
|
+
@property
|
|
155
|
+
def motion_sensor_delay_sec(self) -> int:
|
|
156
|
+
return self._motion_sensor_delay_sec
|
|
83
157
|
|
|
84
|
-
@
|
|
85
|
-
def
|
|
86
|
-
self.
|
|
158
|
+
@motion_sensor_delay_sec.setter
|
|
159
|
+
def motion_sensor_delay_sec(self, value: int) -> None:
|
|
160
|
+
self._motion_sensor_delay_sec = value
|
|
87
161
|
|
|
88
162
|
@property
|
|
89
|
-
def config_directory(self) ->
|
|
163
|
+
def config_directory(self) -> Path:
|
|
90
164
|
return self._config_directory
|
|
91
165
|
|
|
92
166
|
@config_directory.setter
|
|
@@ -108,18 +182,6 @@ class QolsysSettings:
|
|
|
108
182
|
def key_size(self) -> int:
|
|
109
183
|
return self._key_size
|
|
110
184
|
|
|
111
|
-
@mqtt_timeout.setter
|
|
112
|
-
def mqtt_timeout(self, value: int) -> None:
|
|
113
|
-
self._mqtt_timeout = value
|
|
114
|
-
|
|
115
|
-
@mqtt_ping.setter
|
|
116
|
-
def mqtt_ping(self, value: int) -> None:
|
|
117
|
-
self._mqtt_ping = value
|
|
118
|
-
|
|
119
|
-
@mqtt_ping.setter
|
|
120
|
-
def mqtt_ping(self, ping:int) -> None:
|
|
121
|
-
self._mqtt_ping = ping
|
|
122
|
-
|
|
123
185
|
@property
|
|
124
186
|
def mqtt_qos(self) -> int:
|
|
125
187
|
return self._mqtt_qos
|
|
@@ -129,25 +191,9 @@ class QolsysSettings:
|
|
|
129
191
|
return self._mqtt_remote_client_id
|
|
130
192
|
|
|
131
193
|
@mqtt_remote_client_id.setter
|
|
132
|
-
def mqtt_remote_client_id(self,client_id:str) -> None:
|
|
194
|
+
def mqtt_remote_client_id(self, client_id: str) -> None:
|
|
133
195
|
self._mqtt_remote_client_id = client_id
|
|
134
196
|
|
|
135
|
-
def check_panel_ip(self) -> bool:
|
|
136
|
-
if self._panel_ip == "":
|
|
137
|
-
LOGGER.debug("Invalid Panel IP: %s", self._panel_ip)
|
|
138
|
-
return False
|
|
139
|
-
|
|
140
|
-
LOGGER.debug("Found Panel IP: %s", self._panel_ip)
|
|
141
|
-
return True
|
|
142
|
-
|
|
143
|
-
def check_plugin_ip(self) -> bool:
|
|
144
|
-
if self._plugin_ip == "":
|
|
145
|
-
LOGGER.debug("Invalid Plugin IP: %s", self._plugin_ip)
|
|
146
|
-
return False
|
|
147
|
-
|
|
148
|
-
LOGGER.debug("Found Plugin IP: %s", self._plugin_ip)
|
|
149
|
-
return True
|
|
150
|
-
|
|
151
197
|
def check_config_directory(self, create: bool = True) -> bool: # noqa: PLR0911
|
|
152
198
|
if not self.config_directory.is_dir():
|
|
153
199
|
if not create:
|