qolsys-controller 0.0.2__py3-none-any.whl → 0.0.5__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.
- qolsys_controller/controller.py +6 -8
- qolsys_controller/database/db.py +62 -58
- qolsys_controller/database/table.py +24 -25
- qolsys_controller/database/table_alarmedsensor.py +15 -14
- qolsys_controller/database/table_automation.py +32 -28
- qolsys_controller/database/table_country_locale.py +23 -20
- qolsys_controller/database/table_dashboard_msgs.py +6 -5
- qolsys_controller/database/table_dimmerlight.py +22 -20
- qolsys_controller/database/table_doorlock.py +22 -20
- qolsys_controller/database/table_eu_event.py +5 -5
- qolsys_controller/database/table_heat_map.py +14 -13
- qolsys_controller/database/table_history.py +16 -15
- qolsys_controller/database/table_iqremotesettings.py +13 -12
- qolsys_controller/database/table_iqrouter_network_config.py +5 -5
- qolsys_controller/database/table_iqrouter_user_device.py +5 -5
- qolsys_controller/database/table_master_slave.py +28 -25
- qolsys_controller/database/table_partition.py +10 -10
- qolsys_controller/database/table_powerg_device.py +5 -5
- qolsys_controller/database/table_qolsyssettings.py +10 -10
- qolsys_controller/database/table_scene.py +20 -17
- qolsys_controller/database/table_sensor.py +56 -47
- qolsys_controller/database/table_smartsocket.py +5 -5
- qolsys_controller/database/table_state.py +12 -11
- qolsys_controller/database/table_tcc.py +6 -5
- qolsys_controller/database/table_thermostat.py +41 -34
- qolsys_controller/database/table_trouble_conditions.py +14 -13
- qolsys_controller/database/table_user.py +17 -16
- qolsys_controller/database/table_virtual_device.py +5 -5
- qolsys_controller/database/table_weather.py +16 -15
- qolsys_controller/database/table_zigbee_device.py +5 -5
- qolsys_controller/database/table_zwave_association_group.py +19 -17
- qolsys_controller/database/table_zwave_history.py +22 -20
- qolsys_controller/database/table_zwave_node.py +73 -68
- qolsys_controller/database/table_zwave_other.py +5 -5
- qolsys_controller/enum.py +44 -41
- qolsys_controller/errors.py +13 -13
- qolsys_controller/mdns.py +3 -3
- qolsys_controller/mqtt_command_queue.py +2 -3
- qolsys_controller/observable.py +3 -2
- qolsys_controller/panel.py +163 -161
- qolsys_controller/partition.py +46 -43
- qolsys_controller/pki.py +72 -65
- qolsys_controller/plugin.py +5 -4
- qolsys_controller/plugin_c4.py +8 -9
- qolsys_controller/plugin_remote.py +237 -228
- qolsys_controller/settings.py +104 -8
- qolsys_controller/state.py +68 -65
- qolsys_controller/task_manager.py +3 -3
- qolsys_controller/utils_mqtt.py +14 -11
- qolsys_controller/zone.py +69 -68
- qolsys_controller/zwave_device.py +46 -43
- qolsys_controller/zwave_dimmer.py +28 -26
- qolsys_controller/zwave_garagedoor.py +1 -0
- qolsys_controller/zwave_generic.py +2 -1
- qolsys_controller/zwave_lock.py +28 -30
- qolsys_controller/zwave_outlet.py +1 -0
- qolsys_controller/zwave_thermostat.py +58 -55
- {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.5.dist-info}/METADATA +7 -3
- qolsys_controller-0.0.5.dist-info/RECORD +62 -0
- qolsys_controller-0.0.2.dist-info/RECORD +0 -62
- {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.5.dist-info}/WHEEL +0 -0
- {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.5.dist-info}/licenses/LICENSE +0 -0
@@ -5,10 +5,11 @@ from .table import QolsysTable
|
|
5
5
|
|
6
6
|
LOGGER = logging.getLogger(__name__)
|
7
7
|
|
8
|
+
|
8
9
|
class QolsysTableZwaveNode(QolsysTable):
|
9
10
|
|
10
|
-
def __init__(self,db:sqlite3.Connection,cursor:sqlite3.Cursor) -> None:
|
11
|
-
super().__init__(db,cursor)
|
11
|
+
def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
|
12
|
+
super().__init__(db, cursor)
|
12
13
|
self._uri = "content://com.qolsys.qolsysprovider.ZwaveContentProvider/zwave_node"
|
13
14
|
self._table = "zwave_node"
|
14
15
|
self._abort_on_error = True
|
@@ -75,71 +76,75 @@ class QolsysTableZwaveNode(QolsysTable):
|
|
75
76
|
|
76
77
|
self._create_table()
|
77
78
|
|
78
|
-
def insert(self, data:dict) -> None:
|
79
|
-
self._cursor.execute(
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
79
|
+
def insert(self, data: dict) -> None:
|
80
|
+
self._cursor.execute(
|
81
|
+
f"""INSERT INTO {self.table} (_id,version,opr,partition_id,node_id,node_name,node_type,node_status,
|
82
|
+
node_secure_cmd_cls,node_battery_level,node_battery_level_value,is_node_listening_node,basic_report_value,
|
83
|
+
switch_multilevel_report_value,basic_device_type,generic_device_type,specific_device_type,num_secure_command_class,
|
84
|
+
secure_command_class,manufacture_id,product_type,product_id,library_type_version,protocol_version,protocol_sub_version,
|
85
|
+
application_version,application_sub_version,capability,command_class_list,lenof_command_class_list,security,library_type,
|
86
|
+
last_updated_date,node_battery_level_updated_time,basic_report_updated_time,switch_multilevel_report_updated_time,
|
87
|
+
multi_channel_details,rediscover_status,last_rediscover_time,neighbour_info,last_node_test_time,endpoint,endpoint_details,
|
88
|
+
device_wakeup_time,role_type,is_device_sleeping,counters_passed,counters_failed,group_id,command_classes_version,
|
89
|
+
paired_status,device_dsk,endpoint_secure_cmd_cls,s2_security_keys,device_protocol,is_device_hidden,ime_data)
|
90
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
|
91
|
+
?,?,?,?,?,?,?,?)""",
|
92
|
+
(
|
87
93
|
data.get("_id"),
|
88
|
-
data.get("version",""),
|
89
|
-
data.get("opr",""),
|
90
|
-
data.get("partition_id",""),
|
91
|
-
data.get("node_id",""),
|
92
|
-
data.get("node_name",""),
|
93
|
-
data.get("node_type",""),
|
94
|
-
data.get("node_status",""),
|
95
|
-
data.get("node_secure_cmd_cls",""),
|
96
|
-
data.get("node_battery_level",""),
|
97
|
-
data.get("node_battery_level_value",""),
|
98
|
-
data.get("is_node_listening_node",""),
|
99
|
-
data.get("basic_report_value",""),
|
100
|
-
data.get("switch_multilevel_report_value",""),
|
101
|
-
data.get("basic_device_type",""),
|
102
|
-
data.get("generic_device_type",""),
|
103
|
-
data.get("specific_device_type",""),
|
104
|
-
data.get("num_secure_command_class",""),
|
105
|
-
data.get("secure_command_class",""),
|
106
|
-
data.get("manufacture_id",""),
|
107
|
-
data.get("product_type",""),
|
108
|
-
data.get("product_id",""),
|
109
|
-
data.get("library_type_version",""),
|
110
|
-
data.get("protocol_version",""),
|
111
|
-
data.get("protocol_sub_version",""),
|
112
|
-
data.get("application_version",""),
|
113
|
-
data.get("application_sub_version",""),
|
114
|
-
data.get("capability",""),
|
115
|
-
data.get("command_class_list",""),
|
116
|
-
data.get("lenof_command_class_list",""),
|
117
|
-
data.get("security",""),
|
118
|
-
data.get("library_type",""),
|
119
|
-
data.get("last_updated_date",""),
|
120
|
-
data.get("node_battery_level_updated_time",""),
|
121
|
-
data.get("basic_report_updated_time",""),
|
122
|
-
data.get("switch_multilevel_report_updated_time",""),
|
123
|
-
data.get("multi_channel_details",""),
|
124
|
-
data.get("rediscover_status",""),
|
125
|
-
data.get("last_rediscover_time",""),
|
126
|
-
data.get("neighbour_info",""),
|
127
|
-
data.get("last_node_test_time",""),
|
128
|
-
data.get("endpoint",""),
|
129
|
-
data.get("endpoint_details",""),
|
130
|
-
data.get("device_wakeup_time",""),
|
131
|
-
data.get("role_type",""),
|
132
|
-
data.get("is_device_sleeping",""),
|
133
|
-
data.get("counters_passed",""),
|
134
|
-
data.get("counters_failed",""),
|
135
|
-
data.get("group_id",""),
|
136
|
-
data.get("command_classes_version",""),
|
137
|
-
data.get("paired_status",""),
|
138
|
-
data.get("device_dsk",""),
|
139
|
-
data.get("endpoint_secure_cmd_cls",""),
|
140
|
-
data.get("s2_security_keys",""),
|
141
|
-
data.get("device_protocol",""),
|
142
|
-
data.get("is_device_hidden",""),
|
143
|
-
data.get("ime_data","")))
|
94
|
+
data.get("version", ""),
|
95
|
+
data.get("opr", ""),
|
96
|
+
data.get("partition_id", ""),
|
97
|
+
data.get("node_id", ""),
|
98
|
+
data.get("node_name", ""),
|
99
|
+
data.get("node_type", ""),
|
100
|
+
data.get("node_status", ""),
|
101
|
+
data.get("node_secure_cmd_cls", ""),
|
102
|
+
data.get("node_battery_level", ""),
|
103
|
+
data.get("node_battery_level_value", ""),
|
104
|
+
data.get("is_node_listening_node", ""),
|
105
|
+
data.get("basic_report_value", ""),
|
106
|
+
data.get("switch_multilevel_report_value", ""),
|
107
|
+
data.get("basic_device_type", ""),
|
108
|
+
data.get("generic_device_type", ""),
|
109
|
+
data.get("specific_device_type", ""),
|
110
|
+
data.get("num_secure_command_class", ""),
|
111
|
+
data.get("secure_command_class", ""),
|
112
|
+
data.get("manufacture_id", ""),
|
113
|
+
data.get("product_type", ""),
|
114
|
+
data.get("product_id", ""),
|
115
|
+
data.get("library_type_version", ""),
|
116
|
+
data.get("protocol_version", ""),
|
117
|
+
data.get("protocol_sub_version", ""),
|
118
|
+
data.get("application_version", ""),
|
119
|
+
data.get("application_sub_version", ""),
|
120
|
+
data.get("capability", ""),
|
121
|
+
data.get("command_class_list", ""),
|
122
|
+
data.get("lenof_command_class_list", ""),
|
123
|
+
data.get("security", ""),
|
124
|
+
data.get("library_type", ""),
|
125
|
+
data.get("last_updated_date", ""),
|
126
|
+
data.get("node_battery_level_updated_time", ""),
|
127
|
+
data.get("basic_report_updated_time", ""),
|
128
|
+
data.get("switch_multilevel_report_updated_time", ""),
|
129
|
+
data.get("multi_channel_details", ""),
|
130
|
+
data.get("rediscover_status", ""),
|
131
|
+
data.get("last_rediscover_time", ""),
|
132
|
+
data.get("neighbour_info", ""),
|
133
|
+
data.get("last_node_test_time", ""),
|
134
|
+
data.get("endpoint", ""),
|
135
|
+
data.get("endpoint_details", ""),
|
136
|
+
data.get("device_wakeup_time", ""),
|
137
|
+
data.get("role_type", ""),
|
138
|
+
data.get("is_device_sleeping", ""),
|
139
|
+
data.get("counters_passed", ""),
|
140
|
+
data.get("counters_failed", ""),
|
141
|
+
data.get("group_id", ""),
|
142
|
+
data.get("command_classes_version", ""),
|
143
|
+
data.get("paired_status", ""),
|
144
|
+
data.get("device_dsk", ""),
|
145
|
+
data.get("endpoint_secure_cmd_cls", ""),
|
146
|
+
data.get("s2_security_keys", ""),
|
147
|
+
data.get("device_protocol", ""),
|
148
|
+
data.get("is_device_hidden", ""),
|
149
|
+
data.get("ime_data", "")))
|
144
150
|
self._db.commit()
|
145
|
-
|
@@ -5,10 +5,11 @@ from .table import QolsysTable
|
|
5
5
|
|
6
6
|
LOGGER = logging.getLogger(__name__)
|
7
7
|
|
8
|
+
|
8
9
|
class QolsysTableZwaveOther(QolsysTable):
|
9
10
|
|
10
|
-
def __init__(self,db:sqlite3.Connection,cursor:sqlite3.Cursor) -> None:
|
11
|
-
super().__init__(db,cursor)
|
11
|
+
def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
|
12
|
+
super().__init__(db, cursor)
|
12
13
|
self._uri = "content://com.qolsys.qolsysprovider.ZwaveOtherDeviceContentProvider/zwave_other"
|
13
14
|
self._table = "zwave_other"
|
14
15
|
self._abort_on_error = False
|
@@ -19,9 +20,8 @@ class QolsysTableZwaveOther(QolsysTable):
|
|
19
20
|
|
20
21
|
self._create_table()
|
21
22
|
|
22
|
-
def insert(self, data:dict) -> None:
|
23
|
+
def insert(self, data: dict) -> None:
|
23
24
|
if data is not None:
|
24
25
|
LOGGER.error("Please Report")
|
25
|
-
LOGGER.error("Loading Table Format: %s",self.uri)
|
26
|
+
LOGGER.error("Loading Table Format: %s", self.uri)
|
26
27
|
LOGGER.error(data)
|
27
|
-
|
qolsys_controller/enum.py
CHANGED
@@ -11,11 +11,13 @@ class PartitionSystemStatus(StrEnum):
|
|
11
11
|
ARM_NIGHT_EXIT_DELAY = "ARM-NIGHT-EXIT-DELAY"
|
12
12
|
UNKNOWN = "UNKNOWN"
|
13
13
|
|
14
|
+
|
14
15
|
class PartitionAlarmState(StrEnum):
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
NONE = "None"
|
17
|
+
DELAY = "Delay"
|
18
|
+
ALARM = "Alarm"
|
19
|
+
UNKNOWN = "UNKNOWN"
|
20
|
+
|
19
21
|
|
20
22
|
class PartitionAlarmType(StrEnum):
|
21
23
|
POLICE_EMERGENCY = "Police Emergency"
|
@@ -24,6 +26,7 @@ class PartitionAlarmType(StrEnum):
|
|
24
26
|
SILENT_AUXILIARY_EMERGENCY = "Silent Auxiliary Emergency"
|
25
27
|
SILENT_POLICE_EMERGENCY = "Silent Police Emergency"
|
26
28
|
|
29
|
+
|
27
30
|
class ZoneStatus(StrEnum):
|
28
31
|
OPEN = "Open"
|
29
32
|
CLOSED = "Closed"
|
@@ -37,6 +40,7 @@ class ZoneStatus(StrEnum):
|
|
37
40
|
CONNECTED = "connected"
|
38
41
|
FAILURE = "Failure"
|
39
42
|
|
43
|
+
|
40
44
|
class ZoneSensorType(StrEnum):
|
41
45
|
DOOR_WINDOW = "Door_Window"
|
42
46
|
MOTION = "Motion"
|
@@ -46,8 +50,8 @@ class ZoneSensorType(StrEnum):
|
|
46
50
|
AUXILIARY_PENDANT = "Auxiliary Pendant"
|
47
51
|
SMOKE_DETECTOR = "SmokeDetector"
|
48
52
|
CO_DETECTOR = "CODetector"
|
49
|
-
#HARDWIRE_TRANSLATOR = "" # TBD
|
50
|
-
#WIRELESS_TRANSLATOR = "" #TBD
|
53
|
+
# HARDWIRE_TRANSLATOR = "" # TBD
|
54
|
+
# WIRELESS_TRANSLATOR = "" #TBD
|
51
55
|
TEMPERATURE = "Temperature"
|
52
56
|
HEAT = "Heat"
|
53
57
|
WATER = "Water"
|
@@ -56,57 +60,56 @@ class ZoneSensorType(StrEnum):
|
|
56
60
|
TILT = "Tilt"
|
57
61
|
DOORBELL = "Doorbell"
|
58
62
|
SMOKE_M = "Smoke_M"
|
59
|
-
#DOOR_WINDOW_M = "" #TBD
|
60
|
-
#OCCUPANCY = "" #TBD
|
63
|
+
# DOOR_WINDOW_M = "" #TBD
|
64
|
+
# OCCUPANCY = "" #TBD
|
61
65
|
SIREN = "Siren"
|
62
|
-
#HIGH_TEMPERATURE = "" # TBD
|
66
|
+
# HIGH_TEMPERATURE = "" # TBD
|
63
67
|
PANEL_MOTION = "Panel Motion"
|
64
68
|
PANEL_GLASS_BREAK = "Panel Glass Break"
|
65
69
|
BLUETOOTH = "Bluetooth"
|
66
70
|
TAKEOVER_MODULE = "TakeoverModule"
|
67
71
|
TRANSLATOR = "Translator"
|
68
72
|
|
73
|
+
|
69
74
|
class ZoneSensorGroup(StrEnum):
|
70
75
|
FIXED_INTRUSION = "fixedintrusion"
|
71
76
|
MOBILE_INTRUSION = "mobileintrusion"
|
72
77
|
FIXED_SILENT = "fixedsilentkey"
|
73
78
|
MOBILE_SILENT = "mobilesilentkey"
|
74
79
|
FIXED_AUXILIARY = "fixedmedical"
|
75
|
-
FIXED_SILENT_AUXILIARY= "fixedsilentmedical"
|
80
|
+
FIXED_SILENT_AUXILIARY = "fixedsilentmedical"
|
76
81
|
MOBILE_AUXILIARY = "mobilemedical"
|
77
82
|
MOBILE_SILENT_AUXILIARY = "mobilesilentmedical"
|
78
83
|
SAFETY_MOTION = "safetymotion"
|
79
|
-
#ENTRY_EXIT_NORMAL_DELAY = "" #TBD
|
80
|
-
#ENTRY_EXIT_LONG_DELAY = "" #TBD
|
81
|
-
#INSTANT_PERIMETER_DW = "" #TBD
|
82
|
-
#INSTRANT_INTERIOR_DOOR = "" #TBD
|
83
|
-
#AWAY_INSTANT_FOLLOWER_DELAY = "" #TBD
|
84
|
-
#LOCAL_SAFETY_SENSOR = "" #TBD
|
85
|
-
#REPORTING_SAFETY_SENSOR = "" #TBD
|
86
|
-
#DELAYED_REPORTING_SAFETY_SENSOR = "" #TBD
|
87
|
-
#AWAY_INSTANT_MOTION = "" #TBD
|
88
|
-
#STAY_INSTANT_MOTION = "" #TBD
|
89
|
-
#STAY_DELAY_MOTION = "" #TBD
|
90
|
-
#AWAY_DELAY_MOTION = "" #TBD
|
91
|
-
#GLASS_BREAK = "" # TBD
|
92
|
-
#GLASS_BREAK_AWAY_ONLY = "" # TBD
|
93
|
-
#SMOKE_HEAT = "" # TBD
|
94
|
-
#CO = "" # TBD
|
95
|
-
#TAKEOVER = "" #TBD
|
96
|
-
#GARAGE_TILT_SAFETY = "" # TBD
|
97
|
-
#WATER_SENSOR = "" # TBD
|
98
|
-
#WATER_SENSOR_NON_REPORTING = "" # TBD
|
99
|
-
#SHOCK_GLASS_BREAK = "" # TBD
|
100
|
-
#SHOCK_GLASS_BREAK_AWAY_ONLY = "" # TBD
|
101
|
-
#FREEZE = "" # TBD
|
102
|
-
#FREEZE_NON_REPORTING = "" # TBD
|
103
|
-
#TEMP_REPORTING = "" #TBD
|
104
|
-
#TEMP_NON_REPORTING = "" #TBD
|
105
|
-
#SIREN = "" # TBD
|
84
|
+
# ENTRY_EXIT_NORMAL_DELAY = "" #TBD
|
85
|
+
# ENTRY_EXIT_LONG_DELAY = "" #TBD
|
86
|
+
# INSTANT_PERIMETER_DW = "" #TBD
|
87
|
+
# INSTRANT_INTERIOR_DOOR = "" #TBD
|
88
|
+
# AWAY_INSTANT_FOLLOWER_DELAY = "" #TBD
|
89
|
+
# LOCAL_SAFETY_SENSOR = "" #TBD
|
90
|
+
# REPORTING_SAFETY_SENSOR = "" #TBD
|
91
|
+
# DELAYED_REPORTING_SAFETY_SENSOR = "" #TBD
|
92
|
+
# AWAY_INSTANT_MOTION = "" #TBD
|
93
|
+
# STAY_INSTANT_MOTION = "" #TBD
|
94
|
+
# STAY_DELAY_MOTION = "" #TBD
|
95
|
+
# AWAY_DELAY_MOTION = "" #TBD
|
96
|
+
# GLASS_BREAK = "" # TBD
|
97
|
+
# GLASS_BREAK_AWAY_ONLY = "" # TBD
|
98
|
+
# SMOKE_HEAT = "" # TBD
|
99
|
+
# CO = "" # TBD
|
100
|
+
# TAKEOVER = "" #TBD
|
101
|
+
# GARAGE_TILT_SAFETY = "" # TBD
|
102
|
+
# WATER_SENSOR = "" # TBD
|
103
|
+
# WATER_SENSOR_NON_REPORTING = "" # TBD
|
104
|
+
# SHOCK_GLASS_BREAK = "" # TBD
|
105
|
+
# SHOCK_GLASS_BREAK_AWAY_ONLY = "" # TBD
|
106
|
+
# FREEZE = "" # TBD
|
107
|
+
# FREEZE_NON_REPORTING = "" # TBD
|
108
|
+
# TEMP_REPORTING = "" #TBD
|
109
|
+
# TEMP_NON_REPORTING = "" #TBD
|
110
|
+
# SIREN = "" # TBD
|
106
111
|
|
107
112
|
|
108
113
|
class ZWaveNodeStatus(StrEnum):
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
114
|
+
NORMAL = "Normal"
|
115
|
+
UNREACHABLE = "Unreachable"
|
qolsys_controller/errors.py
CHANGED
@@ -2,36 +2,36 @@ import logging
|
|
2
2
|
|
3
3
|
LOGGER = logging.getLogger(__name__)
|
4
4
|
|
5
|
+
|
5
6
|
class QolsysError(Exception):
|
6
7
|
|
7
8
|
def __init__(self, *args, **kwargs) -> None:
|
8
9
|
super().__init__(*args, **kwargs)
|
9
10
|
|
11
|
+
|
10
12
|
class QolsysSslError(QolsysError):
|
11
13
|
|
12
14
|
def __init__(self) -> None:
|
13
15
|
super().__init__("QolsysSslError")
|
14
16
|
|
17
|
+
|
15
18
|
class QolsysMqttError(QolsysError):
|
16
19
|
|
17
20
|
def __init__(self) -> None:
|
18
21
|
super().__init__("QolsysMqttError")
|
19
22
|
|
23
|
+
|
20
24
|
class QolsysSqlError(QolsysError):
|
21
25
|
|
22
|
-
def __init__(self,operation:dict) -> None:
|
26
|
+
def __init__(self, operation: dict) -> None:
|
23
27
|
super().__init__("QolsysSqlError")
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
error_string = f"\n{line_table}\n{line_query}\n{line_columns}\n{line_content_values}\n{line_selection}\n{line_selection_argument}"
|
33
|
-
LOGGER.exception(error_string)
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
table = f"QolsysSqlError - table:{operation.get('table', "")}"
|
30
|
+
query = f"QolsysSqlError - query:{operation.get('query', "")}"
|
31
|
+
columns = f"QolsysSqlError - columns:{operation.get('columns', "")}"
|
32
|
+
content_values = f"QolsysSqlError - content_values:{operation.get('content_value', "")}"
|
33
|
+
selection = f"QolsysSqlError - selection:{operation.get('selection', "")}"
|
34
|
+
selection_argument = f"QolsysSqlError - selection_argument:{operation.get('selection_argument', "")}"
|
37
35
|
|
36
|
+
e = f"""\n{table}\n{query}\n{columns}\n{content_values}\n{selection}\n{selection_argument}"""
|
37
|
+
LOGGER.exception(e)
|
qolsys_controller/mdns.py
CHANGED
@@ -6,11 +6,11 @@ from zeroconf.asyncio import AsyncZeroconf
|
|
6
6
|
|
7
7
|
class QolsysMDNS:
|
8
8
|
|
9
|
-
def __init__(self,ip: str, port: int) -> None:
|
9
|
+
def __init__(self, ip: str, port: int) -> None:
|
10
10
|
|
11
|
-
self.azc =
|
11
|
+
self.azc = AsyncZeroconf()
|
12
12
|
|
13
|
-
self.mdns_info
|
13
|
+
self.mdns_info = ServiceInfo(
|
14
14
|
"_http._tcp.local.",
|
15
15
|
"NsdPairService._http._tcp.local.",
|
16
16
|
addresses=[socket.inet_aton(ip)],
|
@@ -6,7 +6,7 @@ class QolsysMqttCommandQueue:
|
|
6
6
|
self.lock = asyncio.Lock()
|
7
7
|
self.waiters: dict[str, asyncio.Future] = {}
|
8
8
|
|
9
|
-
async def handle_response(self, response:dict) -> None:
|
9
|
+
async def handle_response(self, response: dict) -> None:
|
10
10
|
requestID = response.get("requestID")
|
11
11
|
|
12
12
|
if not requestID:
|
@@ -19,7 +19,7 @@ class QolsysMqttCommandQueue:
|
|
19
19
|
if future and not future.done():
|
20
20
|
future.set_result(response)
|
21
21
|
|
22
|
-
async def wait_for_response(self,request_id:str) -> None:
|
22
|
+
async def wait_for_response(self, request_id: str) -> None:
|
23
23
|
if request_id in self.waiters:
|
24
24
|
msg = f"Duplicate waiter for request_id: {request_id}"
|
25
25
|
raise ValueError(msg)
|
@@ -29,4 +29,3 @@ class QolsysMqttCommandQueue:
|
|
29
29
|
self.waiters[request_id] = future
|
30
30
|
|
31
31
|
return await future
|
32
|
-
|
qolsys_controller/observable.py
CHANGED
@@ -3,6 +3,7 @@ from collections.abc import Callable
|
|
3
3
|
|
4
4
|
LOGGER = logging.getLogger(__name__)
|
5
5
|
|
6
|
+
|
6
7
|
class QolsysObservable:
|
7
8
|
def __init__(self) -> None:
|
8
9
|
self._observers: list[Callable[[], None]] = []
|
@@ -16,12 +17,12 @@ class QolsysObservable:
|
|
16
17
|
def unregister(self, observer: Callable[[], None]) -> None:
|
17
18
|
self._observers.remove(observer)
|
18
19
|
|
19
|
-
def notify(self
|
20
|
+
def notify(self, **payload) -> None: # noqa: ANN003
|
20
21
|
if self._batch_update_active:
|
21
22
|
self._batch_update_change_detected = True
|
22
23
|
else:
|
23
24
|
for observer in self._observers:
|
24
|
-
observer(self
|
25
|
+
observer(self, **payload)
|
25
26
|
|
26
27
|
def start_batch_update(self) -> None:
|
27
28
|
self._batch_update_change_detected = False
|