qolsys-controller 0.0.40__py3-none-any.whl → 0.0.51__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 +19 -7
- qolsys_controller/database/db.py +31 -0
- qolsys_controller/database/table.py +16 -1
- qolsys_controller/database/table_powerg_device.py +1 -1
- qolsys_controller/enum.py +0 -1
- qolsys_controller/enum_zwave.py +0 -1
- qolsys_controller/mdns.py +8 -3
- qolsys_controller/panel.py +116 -48
- qolsys_controller/partition.py +1 -1
- qolsys_controller/plugin.py +10 -20
- qolsys_controller/plugin_c4.py +1 -1
- qolsys_controller/plugin_remote.py +110 -115
- qolsys_controller/settings.py +24 -15
- qolsys_controller/state.py +43 -7
- qolsys_controller/weather.py +74 -0
- qolsys_controller/zone.py +120 -10
- {qolsys_controller-0.0.40.dist-info → qolsys_controller-0.0.51.dist-info}/METADATA +1 -1
- {qolsys_controller-0.0.40.dist-info → qolsys_controller-0.0.51.dist-info}/RECORD +20 -19
- {qolsys_controller-0.0.40.dist-info → qolsys_controller-0.0.51.dist-info}/WHEEL +0 -0
- {qolsys_controller-0.0.40.dist-info → qolsys_controller-0.0.51.dist-info}/licenses/LICENSE +0 -0
qolsys_controller/settings.py
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
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
|
|
11
|
+
|
|
6
12
|
|
|
7
13
|
class QolsysSettings:
|
|
8
14
|
|
|
9
|
-
def __init__(self) -> None:
|
|
15
|
+
def __init__(self, controller: QolsysController) -> None:
|
|
16
|
+
|
|
17
|
+
# Main controller
|
|
18
|
+
self._controller = controller
|
|
10
19
|
|
|
11
20
|
# Plugin
|
|
12
|
-
self._plugin_ip = ""
|
|
13
|
-
self._random_mac = ""
|
|
14
|
-
self._panel_mac = ""
|
|
15
|
-
self._panel_ip = ""
|
|
21
|
+
self._plugin_ip: str = ""
|
|
22
|
+
self._random_mac: str = ""
|
|
23
|
+
self._panel_mac: str = ""
|
|
24
|
+
self._panel_ip: str = ""
|
|
16
25
|
|
|
17
26
|
# Path
|
|
18
27
|
self._config_directory: Path = Path()
|
|
@@ -26,12 +35,12 @@ class QolsysSettings:
|
|
|
26
35
|
# MQTT
|
|
27
36
|
self._mqtt_timeout: int = 30
|
|
28
37
|
self._mqtt_ping: int = 600
|
|
29
|
-
self._mqtt_qos:int = 0
|
|
30
|
-
self._mqtt_remote_client_id = ""
|
|
38
|
+
self._mqtt_qos: int = 0
|
|
39
|
+
self._mqtt_remote_client_id: str = ""
|
|
31
40
|
|
|
32
41
|
# Operation
|
|
33
|
-
self._motion_sensor_delay:bool = True
|
|
34
|
-
self._motion_sensor_delay_sec:int = 310
|
|
42
|
+
self._motion_sensor_delay: bool = True
|
|
43
|
+
self._motion_sensor_delay_sec: int = 310
|
|
35
44
|
|
|
36
45
|
@property
|
|
37
46
|
def random_mac(self) -> str:
|
|
@@ -77,6 +86,10 @@ class QolsysSettings:
|
|
|
77
86
|
def motion_sensor_delay(self, value: bool) -> None:
|
|
78
87
|
self._motion_sensor_delay = value
|
|
79
88
|
|
|
89
|
+
@motion_sensor_delay_sec.setter
|
|
90
|
+
def motion_sensor_delay_sec(self, value: int) -> None:
|
|
91
|
+
self._motion_sensor_delay_sec = value
|
|
92
|
+
|
|
80
93
|
@panel_ip.setter
|
|
81
94
|
def panel_ip(self, panel_ip: str) -> None:
|
|
82
95
|
self._panel_ip = panel_ip
|
|
@@ -86,7 +99,7 @@ class QolsysSettings:
|
|
|
86
99
|
self._plugin_ip = plugin_ip
|
|
87
100
|
|
|
88
101
|
@property
|
|
89
|
-
def config_directory(self) ->
|
|
102
|
+
def config_directory(self) -> Path:
|
|
90
103
|
return self._config_directory
|
|
91
104
|
|
|
92
105
|
@config_directory.setter
|
|
@@ -116,10 +129,6 @@ class QolsysSettings:
|
|
|
116
129
|
def mqtt_ping(self, value: int) -> None:
|
|
117
130
|
self._mqtt_ping = value
|
|
118
131
|
|
|
119
|
-
@mqtt_ping.setter
|
|
120
|
-
def mqtt_ping(self, ping:int) -> None:
|
|
121
|
-
self._mqtt_ping = ping
|
|
122
|
-
|
|
123
132
|
@property
|
|
124
133
|
def mqtt_qos(self) -> int:
|
|
125
134
|
return self._mqtt_qos
|
|
@@ -129,7 +138,7 @@ class QolsysSettings:
|
|
|
129
138
|
return self._mqtt_remote_client_id
|
|
130
139
|
|
|
131
140
|
@mqtt_remote_client_id.setter
|
|
132
|
-
def mqtt_remote_client_id(self,client_id:str) -> None:
|
|
141
|
+
def mqtt_remote_client_id(self,client_id: str) -> None:
|
|
133
142
|
self._mqtt_remote_client_id = client_id
|
|
134
143
|
|
|
135
144
|
def check_panel_ip(self) -> bool:
|
qolsys_controller/state.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
2
5
|
|
|
3
6
|
from .observable import QolsysObservable
|
|
4
|
-
from .
|
|
5
|
-
from .scene import QolsysScene
|
|
6
|
-
from .zone import QolsysZone
|
|
7
|
+
from .weather import QolsysWeather
|
|
7
8
|
from .zwave_device import QolsysZWaveDevice
|
|
8
9
|
from .zwave_dimmer import QolsysDimmer
|
|
9
10
|
from .zwave_generic import QolsysGeneric
|
|
@@ -12,12 +13,23 @@ from .zwave_thermostat import QolsysThermostat
|
|
|
12
13
|
|
|
13
14
|
LOGGER = logging.getLogger(__name__)
|
|
14
15
|
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from .controller import QolsysController
|
|
18
|
+
from .partition import QolsysPartition
|
|
19
|
+
from .scene import QolsysScene
|
|
20
|
+
from .zone import QolsysZone
|
|
21
|
+
from .zwave_device import QolsysZWaveDevice
|
|
22
|
+
|
|
15
23
|
|
|
16
24
|
class QolsysState(QolsysObservable):
|
|
17
25
|
|
|
18
|
-
def __init__(self) -> None:
|
|
26
|
+
def __init__(self, controller: QolsysController) -> None:
|
|
19
27
|
super().__init__()
|
|
20
28
|
|
|
29
|
+
self._controller = controller
|
|
30
|
+
|
|
31
|
+
self._weather = QolsysWeather()
|
|
32
|
+
|
|
21
33
|
self._partitions = []
|
|
22
34
|
self._zones = []
|
|
23
35
|
self._zwave_devices = []
|
|
@@ -32,6 +44,10 @@ class QolsysState(QolsysObservable):
|
|
|
32
44
|
def partitions(self) -> list[QolsysPartition]:
|
|
33
45
|
return self._partitions
|
|
34
46
|
|
|
47
|
+
@property
|
|
48
|
+
def weather(self) -> QolsysWeather:
|
|
49
|
+
return self._weather
|
|
50
|
+
|
|
35
51
|
@property
|
|
36
52
|
def zwave_devices(self) -> list[QolsysZWaveDevice]:
|
|
37
53
|
return self._zwave_devices
|
|
@@ -149,6 +165,12 @@ class QolsysState(QolsysObservable):
|
|
|
149
165
|
return zone
|
|
150
166
|
return None
|
|
151
167
|
|
|
168
|
+
def zone_from_short_id(self, short_id: int) -> QolsysZone | None:
|
|
169
|
+
for zone in self.zones:
|
|
170
|
+
if zone.shortID == short_id:
|
|
171
|
+
return zone
|
|
172
|
+
return None
|
|
173
|
+
|
|
152
174
|
def zone_add(self, new_zone: QolsysZone) -> None:
|
|
153
175
|
for zone in self.zones:
|
|
154
176
|
if new_zone.zone_id == zone.zone_id:
|
|
@@ -253,6 +275,10 @@ class QolsysState(QolsysObservable):
|
|
|
253
275
|
LOGGER.debug("sync_data - delete ZWave%s", state_zwave.none_id)
|
|
254
276
|
self.zwave_delete(state_zwave.node_id)
|
|
255
277
|
|
|
278
|
+
def sync_weather_data(self, db_weather: QolsysWeather) -> None:
|
|
279
|
+
LOGGER.debug("sync_data - update Weather")
|
|
280
|
+
self._weather.update(db_weather.forecasts)
|
|
281
|
+
|
|
256
282
|
def sync_scenes_data(self, db_scenes: list[QolsysScene]) -> None:
|
|
257
283
|
db_scene_list = []
|
|
258
284
|
for db_scene in db_scenes:
|
|
@@ -299,6 +325,7 @@ class QolsysState(QolsysObservable):
|
|
|
299
325
|
if state_zone.zone_id == db_zone.zone_id:
|
|
300
326
|
LOGGER.debug("sync_data - update Zone%s", state_zone.zone_id)
|
|
301
327
|
state_zone.update(db_zone.to_dict())
|
|
328
|
+
state_zone.update_powerg(db_zone.to_powerg_dict())
|
|
302
329
|
|
|
303
330
|
# Delete zones
|
|
304
331
|
for state_zone in self.zones:
|
|
@@ -344,8 +371,8 @@ class QolsysState(QolsysObservable):
|
|
|
344
371
|
LOGGER.debug("sync_data - Add Partition%s", db_partition.id)
|
|
345
372
|
self.partition_add(db_partition)
|
|
346
373
|
|
|
347
|
-
def dump(self) -> None: # noqa: PLR0915
|
|
348
|
-
LOGGER.debug("*** Information ***")
|
|
374
|
+
def dump(self) -> None: # noqa: PLR0912, PLR0915
|
|
375
|
+
LOGGER.debug("*** Device Information ***")
|
|
349
376
|
|
|
350
377
|
for partition in self.partitions:
|
|
351
378
|
pid = partition.id
|
|
@@ -371,6 +398,12 @@ class QolsysState(QolsysObservable):
|
|
|
371
398
|
LOGGER.debug("Zone%s (%s) - latestdBm: %s", zid, name, zone.latestdBm)
|
|
372
399
|
LOGGER.debug("Zone%s (%s) - averagedBm: %s", zid, name, zone.averagedBm)
|
|
373
400
|
|
|
401
|
+
if zone.is_powerg_temperature_enabled():
|
|
402
|
+
LOGGER.debug("Zone%s (%s) - powerg_temperature: %s", zid, name, zone.powerg_temperature)
|
|
403
|
+
|
|
404
|
+
if zone.is_powerg_light_enabled():
|
|
405
|
+
LOGGER.debug("Zone%s (%s) - powerg_light: %s", zid, name, zone.powerg_light)
|
|
406
|
+
|
|
374
407
|
for zwave in self.zwave_devices:
|
|
375
408
|
if isinstance(zwave, QolsysDimmer):
|
|
376
409
|
nid = zwave.node_id
|
|
@@ -398,7 +431,7 @@ class QolsysState(QolsysObservable):
|
|
|
398
431
|
if isinstance(zwave, QolsysLock):
|
|
399
432
|
zid = zwave.lock_node_id
|
|
400
433
|
name = zwave.lock_name
|
|
401
|
-
LOGGER.debug("Lock%s (%s) -
|
|
434
|
+
LOGGER.debug("Lock%s (%s) - lock_status: %s", zid, name, zwave.lock_status)
|
|
402
435
|
continue
|
|
403
436
|
|
|
404
437
|
if isinstance(zwave, QolsysGeneric):
|
|
@@ -414,3 +447,6 @@ class QolsysState(QolsysObservable):
|
|
|
414
447
|
sid = scene.scene_id
|
|
415
448
|
name = scene.name
|
|
416
449
|
LOGGER.debug("Scene%s (%s)",sid, name)
|
|
450
|
+
|
|
451
|
+
for forecast in self.weather.forecasts:
|
|
452
|
+
LOGGER.debug("Weather - %s - High: %s, Low:%s, Condition: %s", forecast.day_of_week[0:3],forecast.high_temp,forecast.low_temp,forecast.condition)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from .observable import QolsysObservable
|
|
4
|
+
|
|
5
|
+
LOGGER = logging.getLogger(__name__)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class QolsysForecast:
|
|
9
|
+
def __init__(self, data: dict) -> None:
|
|
10
|
+
self._high_temp = data.get("high_temp", "")
|
|
11
|
+
self._low_temp = data.get("low_temp", "")
|
|
12
|
+
self._day_of_week = data.get("day_of_week", "")
|
|
13
|
+
self._condition = data.get("condition", "")
|
|
14
|
+
self._icon = data.get("icon", "")
|
|
15
|
+
self._precipitation = data.get("precipitation", "")
|
|
16
|
+
self._current_weather_date = data.get("current_weather_date", "")
|
|
17
|
+
|
|
18
|
+
@property
|
|
19
|
+
def high_temp(self) -> float | None:
|
|
20
|
+
try:
|
|
21
|
+
return float(self._high_temp)
|
|
22
|
+
except ValueError:
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def low_temp(self) -> float | None:
|
|
27
|
+
try:
|
|
28
|
+
return float(self._low_temp)
|
|
29
|
+
except ValueError:
|
|
30
|
+
return None
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def day_of_week(self) -> str:
|
|
34
|
+
return self._day_of_week
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def condition(self) -> str:
|
|
38
|
+
return self._condition
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def precipitation(self) -> int | None:
|
|
42
|
+
try:
|
|
43
|
+
return int(self._precipitation)
|
|
44
|
+
except ValueError:
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def current_weather_date(self) -> str:
|
|
49
|
+
return self._current_weather_date
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class QolsysWeather(QolsysObservable):
|
|
53
|
+
def __init__(self) -> None:
|
|
54
|
+
super().__init__()
|
|
55
|
+
self._forecasts: list[QolsysForecast] = []
|
|
56
|
+
|
|
57
|
+
def current_weather(self) -> QolsysForecast | None:
|
|
58
|
+
if self._forecasts:
|
|
59
|
+
return self._forecasts[0]
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
def update(self, data: list[QolsysForecast]) -> None:
|
|
63
|
+
self._forecasts.clear()
|
|
64
|
+
for forecast_data in data:
|
|
65
|
+
self._forecasts.append(forecast_data)
|
|
66
|
+
|
|
67
|
+
self.notify()
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def forecasts(self) -> list[QolsysForecast]:
|
|
71
|
+
return self._forecasts
|
|
72
|
+
|
|
73
|
+
def to_dict(self) -> dict:
|
|
74
|
+
pass
|
qolsys_controller/zone.py
CHANGED
|
@@ -11,7 +11,7 @@ LOGGER = logging.getLogger(__name__)
|
|
|
11
11
|
|
|
12
12
|
class QolsysZone(QolsysObservable):
|
|
13
13
|
|
|
14
|
-
def __init__(self, data: dict, settings: QolsysSettings) -> None:
|
|
14
|
+
def __init__(self, data: dict, settings: QolsysSettings) -> None: # noqa: PLR0915
|
|
15
15
|
super().__init__()
|
|
16
16
|
|
|
17
17
|
self._settings = settings
|
|
@@ -27,6 +27,9 @@ class QolsysZone(QolsysObservable):
|
|
|
27
27
|
self._averagedBm = data.get("averagedBm", "")
|
|
28
28
|
self._latestdBm = data.get("latestdBm", "")
|
|
29
29
|
self._ac_status = data.get("ac_status", "")
|
|
30
|
+
self._shortID = data.get("shortID", "")
|
|
31
|
+
self._device_capability = data.get("device_capability", "")
|
|
32
|
+
self._current_capability = data.get("current_capability", "")
|
|
30
33
|
|
|
31
34
|
self._id = data.get("_id", "")
|
|
32
35
|
self._zone_type = data.get("zone_type", "")
|
|
@@ -56,14 +59,69 @@ class QolsysZone(QolsysObservable):
|
|
|
56
59
|
self._created_by = data.get("created_by", "")
|
|
57
60
|
self._updated_by = data.get("updated_by", "")
|
|
58
61
|
self._updated_date = data.get("updated_date", "")
|
|
59
|
-
self._shortID = data.get("shortID", "")
|
|
60
62
|
self._diag_24hr = data.get("diag_24hr", "")
|
|
61
|
-
self._device_capability = data.get("device_capability", "")
|
|
62
63
|
self._sub_type = data.get("sub_type", "")
|
|
63
64
|
self._powerg_manufacture_id = data.get("powerg_manufacture_id", "")
|
|
64
65
|
self._parent_node = data.get("parent_node", "")
|
|
65
66
|
self._extras = data.get("extras", "")
|
|
66
67
|
|
|
68
|
+
# EXTRA POWERG ATTRIBUTES
|
|
69
|
+
self._powerg_long_id = ""
|
|
70
|
+
self._powerg_status_data:str = ""
|
|
71
|
+
self._powerg_temperature:str = ""
|
|
72
|
+
self._powerg_light:str = ""
|
|
73
|
+
self._powerg_notification_period = ""
|
|
74
|
+
self._powerg_average_link_quality = ""
|
|
75
|
+
self._powerg_link_quality = ""
|
|
76
|
+
self._powerg_link_status = ""
|
|
77
|
+
self._powerg_battery_voltage = ""
|
|
78
|
+
|
|
79
|
+
def is_powerg_enabled(self) -> bool:
|
|
80
|
+
return self._current_capability == "PowerG"
|
|
81
|
+
|
|
82
|
+
def is_powerg_temperature_enabled(self) -> bool:
|
|
83
|
+
return self._powerg_temperature != ""
|
|
84
|
+
|
|
85
|
+
def is_powerg_light_enabled(self) -> bool:
|
|
86
|
+
return self._powerg_light != ""
|
|
87
|
+
|
|
88
|
+
def update_powerg(self, data: dict) -> None:
|
|
89
|
+
short_id_update = data.get("shortID", "")
|
|
90
|
+
if short_id_update != self.shortID:
|
|
91
|
+
LOGGER.error("Updating Zone%s PowerG Attribute (%s) with Zone%s (different shortID)", self._zone_id, self.sensorname, short_id_update)
|
|
92
|
+
return
|
|
93
|
+
|
|
94
|
+
self.start_batch_update()
|
|
95
|
+
|
|
96
|
+
if "longID" in data:
|
|
97
|
+
self._powerg_long_id = data.get("longID")
|
|
98
|
+
|
|
99
|
+
if "status_data" in data:
|
|
100
|
+
self.powerg_status_data = data.get("status_data")
|
|
101
|
+
|
|
102
|
+
if "temperature" in data:
|
|
103
|
+
self.powerg_temperature = data.get("temperature")
|
|
104
|
+
|
|
105
|
+
if "light" in data:
|
|
106
|
+
self.powerg_light = data.get("light")
|
|
107
|
+
|
|
108
|
+
if "notification_period" in data:
|
|
109
|
+
self._powerg_notification_period = data.get("notification_period")
|
|
110
|
+
|
|
111
|
+
if "average_link_quality" in data:
|
|
112
|
+
self._powerg_average_link_quality = data.get("average_link_quality")
|
|
113
|
+
|
|
114
|
+
if "link_quality" in data:
|
|
115
|
+
self._powerg_link_quality = data.get("link_quality")
|
|
116
|
+
|
|
117
|
+
if "link_status" in data:
|
|
118
|
+
self._powerg_link_status = data.get("link_status")
|
|
119
|
+
|
|
120
|
+
if "battery_voltage" in data:
|
|
121
|
+
self._powerg_battery_voltage = data.get("battery_voltage")
|
|
122
|
+
|
|
123
|
+
self.end_batch_update()
|
|
124
|
+
|
|
67
125
|
def update(self, data: dict) -> None: # noqa: C901, PLR0912, PLR0915
|
|
68
126
|
|
|
69
127
|
zone_id_update = data.get("zoneid", "")
|
|
@@ -73,31 +131,24 @@ class QolsysZone(QolsysObservable):
|
|
|
73
131
|
|
|
74
132
|
self.start_batch_update()
|
|
75
133
|
|
|
76
|
-
# Update sensor_name
|
|
77
134
|
if "sensorname" in data:
|
|
78
135
|
self.sensorname = data.get("sensorname")
|
|
79
136
|
|
|
80
|
-
# Update sensorsatus
|
|
81
137
|
if "sensorstatus" in data:
|
|
82
138
|
self.sensorstatus = ZoneStatus(data.get("sensorstatus"))
|
|
83
139
|
|
|
84
|
-
# Update battery_status
|
|
85
140
|
if "battery_status" in data:
|
|
86
141
|
self.battery_status = data.get("battery_status")
|
|
87
142
|
|
|
88
|
-
# Update time
|
|
89
143
|
if "time" in data:
|
|
90
144
|
self.time = data.get("time")
|
|
91
145
|
|
|
92
|
-
# Update partition_id
|
|
93
146
|
if "partition_id" in data:
|
|
94
147
|
self._partition_id = data.get("partition_id")
|
|
95
148
|
|
|
96
|
-
# Update lastestdBm
|
|
97
149
|
if "lastestdBm" in data:
|
|
98
150
|
self.latestdBm = data.get("latestdBm")
|
|
99
151
|
|
|
100
|
-
# Update averagedBm
|
|
101
152
|
if "averagedBm" in data:
|
|
102
153
|
self.averagedBm = data.get("averagedBm")
|
|
103
154
|
|
|
@@ -205,10 +256,18 @@ class QolsysZone(QolsysObservable):
|
|
|
205
256
|
def partition_id(self) -> str:
|
|
206
257
|
return self._partition_id
|
|
207
258
|
|
|
259
|
+
@property
|
|
260
|
+
def shortID(self) -> str:
|
|
261
|
+
return self._shortID
|
|
262
|
+
|
|
208
263
|
@property
|
|
209
264
|
def time(self) -> str:
|
|
210
265
|
return self._time
|
|
211
266
|
|
|
267
|
+
@property
|
|
268
|
+
def current_capability(self) -> str:
|
|
269
|
+
return self._current_capability
|
|
270
|
+
|
|
212
271
|
@property
|
|
213
272
|
def latestdBm(self) -> str:
|
|
214
273
|
return self._latestdBm
|
|
@@ -217,6 +276,43 @@ class QolsysZone(QolsysObservable):
|
|
|
217
276
|
def averagedBm(self) -> str:
|
|
218
277
|
return self._averagedBm
|
|
219
278
|
|
|
279
|
+
@property
|
|
280
|
+
def device_capability(self) -> str:
|
|
281
|
+
return self._device_capability
|
|
282
|
+
|
|
283
|
+
@property
|
|
284
|
+
def powerg_temperature(self) -> float | None:
|
|
285
|
+
return self._powerg_temperature
|
|
286
|
+
|
|
287
|
+
@property
|
|
288
|
+
def powerg_light(self) -> float | None:
|
|
289
|
+
return self._powerg_light
|
|
290
|
+
|
|
291
|
+
@property
|
|
292
|
+
def powerg_status_data(self) -> str:
|
|
293
|
+
return self._powerg_status_data
|
|
294
|
+
|
|
295
|
+
@powerg_temperature.setter
|
|
296
|
+
def powerg_temperature(self, value: str) -> None:
|
|
297
|
+
if self._powerg_temperature != value:
|
|
298
|
+
LOGGER.debug("Zone%s (%s) - powerg_temperature: %s", self._zone_id, self.sensorname, value)
|
|
299
|
+
self._powerg_temperature = value
|
|
300
|
+
self.notify()
|
|
301
|
+
|
|
302
|
+
@powerg_light.setter
|
|
303
|
+
def powerg_light(self, value: str) -> None:
|
|
304
|
+
if self._powerg_light != value:
|
|
305
|
+
LOGGER.debug("Zone%s (%s) - powerg_light: %s", self._zone_id, self.sensorname, value)
|
|
306
|
+
self._powerg_light = value
|
|
307
|
+
self.notify()
|
|
308
|
+
|
|
309
|
+
@powerg_status_data.setter
|
|
310
|
+
def powerg_status_data(self, value: str) -> None:
|
|
311
|
+
if self._powerg_status_data != value:
|
|
312
|
+
LOGGER.debug("Zone%s (%s) - powerg_status_data: %s", self._zone_id, self.sensorname, value)
|
|
313
|
+
self._powerg_status_data = value
|
|
314
|
+
self.notify()
|
|
315
|
+
|
|
220
316
|
@averagedBm.setter
|
|
221
317
|
def averagedBm(self, value: str) -> None:
|
|
222
318
|
if self._averagedBm != value:
|
|
@@ -303,6 +399,20 @@ class QolsysZone(QolsysObservable):
|
|
|
303
399
|
self.partition_id = value
|
|
304
400
|
self.notify()
|
|
305
401
|
|
|
402
|
+
def to_powerg_dict(self) -> dict:
|
|
403
|
+
return {
|
|
404
|
+
"shortID": self.shortID,
|
|
405
|
+
"longID": self._powerg_long_id,
|
|
406
|
+
"status_data": self._powerg_status_data,
|
|
407
|
+
"temperature": self._powerg_temperature,
|
|
408
|
+
"light": self._powerg_light,
|
|
409
|
+
"notification_period": self._powerg_notification_period,
|
|
410
|
+
"average_link_quality": self._powerg_average_link_quality,
|
|
411
|
+
"link_quality": self._powerg_link_quality,
|
|
412
|
+
"link_status": self._powerg_link_status,
|
|
413
|
+
"battery_voltage": self._powerg_battery_voltage,
|
|
414
|
+
}
|
|
415
|
+
|
|
306
416
|
def to_dict(self) -> dict:
|
|
307
417
|
return {
|
|
308
418
|
"_id": self.id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qolsys-controller
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.51
|
|
4
4
|
Summary: A Python module that emulates a virtual IQ Remote device, enabling full local control of a Qolsys IQ Panel
|
|
5
5
|
Project-URL: Homepage, https://github.com/EHylands/QolsysController
|
|
6
6
|
Project-URL: Issues, https://github.com/EHylands/QolsysController/issues
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
qolsys_controller/__init__.py,sha256=TkjMFBP9VNyGLC84JQZ_tTeD8nJImkGgPMkQFGr2428,88
|
|
2
|
-
qolsys_controller/controller.py,sha256=
|
|
3
|
-
qolsys_controller/enum.py,sha256=
|
|
4
|
-
qolsys_controller/enum_zwave.py,sha256=
|
|
2
|
+
qolsys_controller/controller.py,sha256=3To3Fj4LyOmYQqkCd3yP9FxQAKlkXucV8n89LBvpcJY,1495
|
|
3
|
+
qolsys_controller/enum.py,sha256=hP1Tb1KKGBGvrk9NzfxpG4_J0m1lx5RsSSM9OJMEumI,3546
|
|
4
|
+
qolsys_controller/enum_zwave.py,sha256=tYqS2_-EFilWdRIwudLiQdAqzpCv3LBebjPznoeMO2E,739
|
|
5
5
|
qolsys_controller/errors.py,sha256=Z_eVJ4XqWucdn1lu_83DPnEKEG4L3FMfjhz5iO6RuBM,1176
|
|
6
|
-
qolsys_controller/mdns.py,sha256=
|
|
6
|
+
qolsys_controller/mdns.py,sha256=IUK_6PMjsu1u-T1S-KoizuOiBdM-8AemAcJefiapEE0,896
|
|
7
7
|
qolsys_controller/mqtt_command_queue.py,sha256=FjSbjK3_3SXV5eQPfQ-k8HOI5Tbu2aWzAxe4uXymK64,937
|
|
8
8
|
qolsys_controller/observable.py,sha256=X7uMnBHGpklPTa-RHKldXA0Rq38Cs1yOIuxl8ODeKV4,1049
|
|
9
|
-
qolsys_controller/panel.py,sha256=
|
|
10
|
-
qolsys_controller/partition.py,sha256=
|
|
9
|
+
qolsys_controller/panel.py,sha256=LW9mny90Dt3zgcOVwESfmY9098qxqOjak_oAixTAeTQ,45187
|
|
10
|
+
qolsys_controller/partition.py,sha256=zJGPN1KYpEHiWJOL7AZ7gF5N-Y7rD98_-mRLSSOMkq4,8943
|
|
11
11
|
qolsys_controller/pki.py,sha256=_e0tiNF8Hypb37cHr7x8yqUZDaqbzRzP45AitTtmzk4,8663
|
|
12
|
-
qolsys_controller/plugin.py,sha256=
|
|
13
|
-
qolsys_controller/plugin_c4.py,sha256=
|
|
14
|
-
qolsys_controller/plugin_remote.py,sha256=
|
|
12
|
+
qolsys_controller/plugin.py,sha256=Yi0LVECZf22MCS_ZhwK0pMIJ_j1wxyskHoVWaWEqJ9s,530
|
|
13
|
+
qolsys_controller/plugin_c4.py,sha256=ufB--hSpa0YM0p8OmwHkhF51yPGCznvkx7G12ToYSMg,438
|
|
14
|
+
qolsys_controller/plugin_remote.py,sha256=Snjh72amVv0gcp8wl8Y_ue24KGDXPPf34uNmN3XIWS8,50483
|
|
15
15
|
qolsys_controller/scene.py,sha256=b_8pzAJ08L7Nc-vouzkDxZKkcDQ239pLnvSDnN4g_oQ,1899
|
|
16
|
-
qolsys_controller/settings.py,sha256=
|
|
17
|
-
qolsys_controller/state.py,sha256=
|
|
16
|
+
qolsys_controller/settings.py,sha256=fmg-nBc2jmjJ3lIcdghantnniKSJtzC6DJ9b_tBjTRM,6417
|
|
17
|
+
qolsys_controller/state.py,sha256=ZlNTEXRYgJAquYXFXStvi79CaVsvfA9YD1cOA6a9bNc,18472
|
|
18
18
|
qolsys_controller/task_manager.py,sha256=8TT1KhNHVjMIXTQz_vdUJ3eHgsKsUdPX3SHd29MP4pI,1629
|
|
19
19
|
qolsys_controller/utils_mqtt.py,sha256=2hf9_BnQbsWi8t0KBiK5MSsDgGjlbWVJi-Sd3H5VVt0,575
|
|
20
|
-
qolsys_controller/
|
|
20
|
+
qolsys_controller/weather.py,sha256=EFkpdjO3P2NCAASizR5heCd6ilr-dvgh-UjNHclbnbw,1930
|
|
21
|
+
qolsys_controller/zone.py,sha256=fOB4HG39zM5zu4gMgQHxnR2rowh--RQ_JAHqRdPsYiE,16259
|
|
21
22
|
qolsys_controller/zwave_device.py,sha256=AJZQqIN9fGHu0t5NNIfTyCkpsgt0ArvFObb0_qICJxI,9310
|
|
22
23
|
qolsys_controller/zwave_dimmer.py,sha256=aOAolbptoDpmJCxcPwpn6cIqR5CE1AxCSfz1WxIQJZA,5153
|
|
23
24
|
qolsys_controller/zwave_garagedoor.py,sha256=xoR1I_qm4S0Ir6XvOC2Q9asq69NeJnJ4ZkVy7VC1P6Q,189
|
|
@@ -25,8 +26,8 @@ qolsys_controller/zwave_generic.py,sha256=gadtyUfPGsIzJaGc2zT5AQoFVxR_RsoagHE7x7
|
|
|
25
26
|
qolsys_controller/zwave_lock.py,sha256=nodvZyjVurP5Eezjam4yRoFSfgnqlDM0e0MyXUqTpsQ,4971
|
|
26
27
|
qolsys_controller/zwave_outlet.py,sha256=lxGB-jth11dHPUkT7jC411GdLCGDdct4mAGu05SndCA,185
|
|
27
28
|
qolsys_controller/zwave_thermostat.py,sha256=IVe6F16aTt3v7ibC0C5X77jzmZOgNWNtfElMwVC3VXU,14610
|
|
28
|
-
qolsys_controller/database/db.py,sha256=
|
|
29
|
-
qolsys_controller/database/table.py,sha256=
|
|
29
|
+
qolsys_controller/database/db.py,sha256=DCkByfURIEoHQVGZZ6jGCrMU07wfmy_64_OjMQbVFUQ,15593
|
|
30
|
+
qolsys_controller/database/table.py,sha256=simCiPg2r-IXdtVnhf0V7tHdJzTfBTsdNZbnmh4MLHc,7058
|
|
30
31
|
qolsys_controller/database/table_alarmedsensor.py,sha256=BZ6K9CQbcXRw0rf6WODS0NFf1wptu5CxuRtsLQrCsSQ,808
|
|
31
32
|
qolsys_controller/database/table_automation.py,sha256=1qCdSIX2ALSdGxkZdMbHWT43VjqX4WgmNed4HcC7wc8,1287
|
|
32
33
|
qolsys_controller/database/table_country_locale.py,sha256=OkjqGhYhYaGptZGN74eJI-dkRYSv_Cpex_zCs93v1Wo,1013
|
|
@@ -44,7 +45,7 @@ qolsys_controller/database/table_nest_device.py,sha256=Kgm2dsWQoCZoeAjlQSV_ZkehA
|
|
|
44
45
|
qolsys_controller/database/table_output_rules.py,sha256=pYs1PQ1rv3-fIDcEI0i-jKOwH1L6nLhzAT3iCk0I5L4,571
|
|
45
46
|
qolsys_controller/database/table_partition.py,sha256=u1239frG6KwnXCk3-xcACZVvzrnxsdV17f175_oL9TE,672
|
|
46
47
|
qolsys_controller/database/table_pgm_outputs.py,sha256=hZyR4tpTss1kP6UCVBBbJHH5LYBMNHAHbcCoeQcCc38,568
|
|
47
|
-
qolsys_controller/database/table_powerg_device.py,sha256=
|
|
48
|
+
qolsys_controller/database/table_powerg_device.py,sha256=UvpHSMd_Q8NZdX_NzskzNr6ApZKBgopVlIA9FyZvHWM,1226
|
|
48
49
|
qolsys_controller/database/table_qolsyssettings.py,sha256=ryJylcS7vthhXlzEywwLRxbkkz2gmdnadMs0FkMD2yQ,685
|
|
49
50
|
qolsys_controller/database/table_scene.py,sha256=DmUuWRSRUfpXxuFh_CzgYm_GkyyNe6DKQHhgl3AFkMs,846
|
|
50
51
|
qolsys_controller/database/table_sensor.py,sha256=6mvGEYb8WRjIOm4Rj-UnHx3hpQrVpYfttcEinHFitq8,1895
|
|
@@ -62,7 +63,7 @@ qolsys_controller/database/table_zwave_association_group.py,sha256=B8SHPU335a2wh
|
|
|
62
63
|
qolsys_controller/database/table_zwave_history.py,sha256=iLCkRZOsQmc5TQT0-IngyNkrG78kQrEhITPChmNt1bM,942
|
|
63
64
|
qolsys_controller/database/table_zwave_node.py,sha256=bbL0WOH1kY8kdyfRUj2ZuOo0TNRXzX5i6CDtj4kb6YI,2609
|
|
64
65
|
qolsys_controller/database/table_zwave_other.py,sha256=VlGO5VOTRQtq7NqquH_NryswxB_pwG3KoKjvrz2xGao,915
|
|
65
|
-
qolsys_controller-0.0.
|
|
66
|
-
qolsys_controller-0.0.
|
|
67
|
-
qolsys_controller-0.0.
|
|
68
|
-
qolsys_controller-0.0.
|
|
66
|
+
qolsys_controller-0.0.51.dist-info/METADATA,sha256=MAntKu3iVbv_sWtEL_NydDh-d1w2BRQKiG8fzdEtiUA,4329
|
|
67
|
+
qolsys_controller-0.0.51.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
68
|
+
qolsys_controller-0.0.51.dist-info/licenses/LICENSE,sha256=GBHv9eggdA5ablDMW1xiLzGDZ2gCIhcKGW__c2aVIOc,1069
|
|
69
|
+
qolsys_controller-0.0.51.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|