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.

Files changed (81) hide show
  1. qolsys_controller/adc_device.py +202 -0
  2. qolsys_controller/adc_service.py +139 -0
  3. qolsys_controller/adc_service_garagedoor.py +35 -0
  4. qolsys_controller/controller.py +1040 -20
  5. qolsys_controller/database/db.py +108 -29
  6. qolsys_controller/database/table.py +90 -60
  7. qolsys_controller/database/table_alarmedsensor.py +2 -2
  8. qolsys_controller/database/table_automation.py +0 -1
  9. qolsys_controller/database/table_country_locale.py +0 -1
  10. qolsys_controller/database/table_dashboard_msgs.py +1 -2
  11. qolsys_controller/database/table_dimmerlight.py +0 -1
  12. qolsys_controller/database/table_doorlock.py +0 -1
  13. qolsys_controller/database/table_eu_event.py +1 -2
  14. qolsys_controller/database/table_heat_map.py +0 -2
  15. qolsys_controller/database/table_history.py +4 -1
  16. qolsys_controller/database/table_iqremotesettings.py +0 -2
  17. qolsys_controller/database/table_iqrouter_network_config.py +0 -1
  18. qolsys_controller/database/table_iqrouter_user_device.py +0 -2
  19. qolsys_controller/database/table_master_slave.py +0 -1
  20. qolsys_controller/database/table_nest_device.py +0 -1
  21. qolsys_controller/database/table_output_rules.py +0 -1
  22. qolsys_controller/database/table_partition.py +0 -1
  23. qolsys_controller/database/table_pgm_outputs.py +0 -2
  24. qolsys_controller/database/table_powerg_device.py +0 -2
  25. qolsys_controller/database/table_qolsyssettings.py +0 -2
  26. qolsys_controller/database/table_scene.py +0 -2
  27. qolsys_controller/database/table_sensor.py +2 -2
  28. qolsys_controller/database/table_sensor_group.py +23 -0
  29. qolsys_controller/database/table_shades.py +0 -2
  30. qolsys_controller/database/table_smartsocket.py +12 -3
  31. qolsys_controller/database/table_state.py +0 -1
  32. qolsys_controller/database/table_tcc.py +0 -1
  33. qolsys_controller/database/table_thermostat.py +3 -1
  34. qolsys_controller/database/table_trouble_conditions.py +0 -2
  35. qolsys_controller/database/table_user.py +0 -2
  36. qolsys_controller/database/table_virtual_device.py +13 -3
  37. qolsys_controller/database/table_weather.py +0 -2
  38. qolsys_controller/database/table_zigbee_device.py +0 -1
  39. qolsys_controller/database/table_zwave_association_group.py +0 -1
  40. qolsys_controller/database/table_zwave_history.py +0 -1
  41. qolsys_controller/database/table_zwave_node.py +3 -1
  42. qolsys_controller/database/table_zwave_other.py +0 -1
  43. qolsys_controller/enum.py +42 -13
  44. qolsys_controller/enum_adc.py +28 -0
  45. qolsys_controller/enum_zwave.py +210 -36
  46. qolsys_controller/errors.py +14 -12
  47. qolsys_controller/mdns.py +7 -4
  48. qolsys_controller/mqtt_command.py +125 -0
  49. qolsys_controller/mqtt_command_queue.py +5 -4
  50. qolsys_controller/observable.py +2 -2
  51. qolsys_controller/panel.py +304 -156
  52. qolsys_controller/partition.py +149 -127
  53. qolsys_controller/pki.py +69 -97
  54. qolsys_controller/scene.py +30 -28
  55. qolsys_controller/settings.py +96 -50
  56. qolsys_controller/state.py +221 -34
  57. qolsys_controller/task_manager.py +11 -14
  58. qolsys_controller/users.py +25 -0
  59. qolsys_controller/utils_mqtt.py +8 -16
  60. qolsys_controller/weather.py +71 -0
  61. qolsys_controller/zone.py +243 -214
  62. qolsys_controller/zwave_device.py +234 -93
  63. qolsys_controller/zwave_dimmer.py +55 -49
  64. qolsys_controller/zwave_energy_clamp.py +15 -0
  65. qolsys_controller/zwave_garagedoor.py +3 -1
  66. qolsys_controller/zwave_generic.py +5 -3
  67. qolsys_controller/zwave_lock.py +51 -44
  68. qolsys_controller/zwave_outlet.py +3 -1
  69. qolsys_controller/zwave_service_meter.py +192 -0
  70. qolsys_controller/zwave_service_multilevelsensor.py +119 -0
  71. qolsys_controller/zwave_thermometer.py +21 -0
  72. qolsys_controller/zwave_thermostat.py +249 -143
  73. qolsys_controller-0.0.87.dist-info/METADATA +89 -0
  74. qolsys_controller-0.0.87.dist-info/RECORD +77 -0
  75. {qolsys_controller-0.0.44.dist-info → qolsys_controller-0.0.87.dist-info}/WHEEL +1 -1
  76. qolsys_controller/plugin.py +0 -34
  77. qolsys_controller/plugin_c4.py +0 -17
  78. qolsys_controller/plugin_remote.py +0 -1298
  79. qolsys_controller-0.0.44.dist-info/METADATA +0 -93
  80. qolsys_controller-0.0.44.dist-info/RECORD +0 -68
  81. {qolsys_controller-0.0.44.dist-info → qolsys_controller-0.0.87.dist-info}/licenses/LICENSE +0 -0
@@ -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.sensorname, scene_id_update)
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
- }
@@ -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
- def __init__(self) -> None:
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
- @panel_ip.setter
81
- def panel_ip(self, panel_ip: str) -> None:
82
- self._panel_ip = panel_ip
154
+ @property
155
+ def motion_sensor_delay_sec(self) -> int:
156
+ return self._motion_sensor_delay_sec
83
157
 
84
- @plugin_ip.setter
85
- def plugin_ip(self, plugin_ip: str) -> None:
86
- self._plugin_ip = plugin_ip
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) -> str:
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: