qolsys-controller 0.0.2__py3-none-any.whl → 0.0.4__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.
Files changed (62) hide show
  1. qolsys_controller/controller.py +6 -8
  2. qolsys_controller/database/db.py +62 -58
  3. qolsys_controller/database/table.py +24 -25
  4. qolsys_controller/database/table_alarmedsensor.py +15 -14
  5. qolsys_controller/database/table_automation.py +32 -28
  6. qolsys_controller/database/table_country_locale.py +23 -20
  7. qolsys_controller/database/table_dashboard_msgs.py +6 -5
  8. qolsys_controller/database/table_dimmerlight.py +22 -20
  9. qolsys_controller/database/table_doorlock.py +22 -20
  10. qolsys_controller/database/table_eu_event.py +5 -5
  11. qolsys_controller/database/table_heat_map.py +14 -13
  12. qolsys_controller/database/table_history.py +16 -15
  13. qolsys_controller/database/table_iqremotesettings.py +13 -12
  14. qolsys_controller/database/table_iqrouter_network_config.py +5 -5
  15. qolsys_controller/database/table_iqrouter_user_device.py +5 -5
  16. qolsys_controller/database/table_master_slave.py +28 -25
  17. qolsys_controller/database/table_partition.py +10 -10
  18. qolsys_controller/database/table_powerg_device.py +5 -5
  19. qolsys_controller/database/table_qolsyssettings.py +10 -10
  20. qolsys_controller/database/table_scene.py +20 -17
  21. qolsys_controller/database/table_sensor.py +56 -47
  22. qolsys_controller/database/table_smartsocket.py +5 -5
  23. qolsys_controller/database/table_state.py +12 -11
  24. qolsys_controller/database/table_tcc.py +6 -5
  25. qolsys_controller/database/table_thermostat.py +41 -34
  26. qolsys_controller/database/table_trouble_conditions.py +14 -13
  27. qolsys_controller/database/table_user.py +17 -16
  28. qolsys_controller/database/table_virtual_device.py +5 -5
  29. qolsys_controller/database/table_weather.py +16 -15
  30. qolsys_controller/database/table_zigbee_device.py +5 -5
  31. qolsys_controller/database/table_zwave_association_group.py +19 -17
  32. qolsys_controller/database/table_zwave_history.py +22 -20
  33. qolsys_controller/database/table_zwave_node.py +73 -68
  34. qolsys_controller/database/table_zwave_other.py +5 -5
  35. qolsys_controller/enum.py +44 -41
  36. qolsys_controller/errors.py +13 -13
  37. qolsys_controller/mdns.py +3 -3
  38. qolsys_controller/mqtt_command_queue.py +2 -3
  39. qolsys_controller/observable.py +3 -2
  40. qolsys_controller/panel.py +147 -146
  41. qolsys_controller/partition.py +46 -43
  42. qolsys_controller/pki.py +72 -65
  43. qolsys_controller/plugin.py +5 -4
  44. qolsys_controller/plugin_c4.py +8 -9
  45. qolsys_controller/plugin_remote.py +237 -228
  46. qolsys_controller/settings.py +75 -8
  47. qolsys_controller/state.py +68 -65
  48. qolsys_controller/task_manager.py +3 -3
  49. qolsys_controller/utils_mqtt.py +14 -11
  50. qolsys_controller/zone.py +69 -68
  51. qolsys_controller/zwave_device.py +46 -43
  52. qolsys_controller/zwave_dimmer.py +28 -26
  53. qolsys_controller/zwave_garagedoor.py +1 -0
  54. qolsys_controller/zwave_generic.py +2 -1
  55. qolsys_controller/zwave_lock.py +28 -30
  56. qolsys_controller/zwave_outlet.py +1 -0
  57. qolsys_controller/zwave_thermostat.py +58 -55
  58. {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.4.dist-info}/METADATA +1 -1
  59. qolsys_controller-0.0.4.dist-info/RECORD +62 -0
  60. qolsys_controller-0.0.2.dist-info/RECORD +0 -62
  61. {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.4.dist-info}/WHEEL +0 -0
  62. {qolsys_controller-0.0.2.dist-info → qolsys_controller-0.0.4.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(f"""INSERT INTO {self.table} (_id,version,opr,partition_id,node_id,node_name,node_type,node_status,node_secure_cmd_cls,node_battery_level,
80
- node_battery_level_value,is_node_listening_node,basic_report_value,switch_multilevel_report_value,basic_device_type,generic_device_type,
81
- specific_device_type,num_secure_command_class,secure_command_class,manufacture_id,product_type,product_id,library_type_version,protocol_version,
82
- protocol_sub_version,application_version,application_sub_version,capability,command_class_list,lenof_command_class_list,security,
83
- library_type,last_updated_date,node_battery_level_updated_time,basic_report_updated_time,switch_multilevel_report_updated_time,
84
- multi_channel_details,rediscover_status,last_rediscover_time,neighbour_info,last_node_test_time,endpoint,endpoint_details,device_wakeup_time,
85
- role_type,is_device_sleeping,counters_passed,counters_failed,group_id,command_classes_version,paired_status,device_dsk,endpoint_secure_cmd_cls,
86
- s2_security_keys,device_protocol,is_device_hidden,ime_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",(
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
- NONE = "None"
16
- DELAY = "Delay"
17
- ALARM = "Alarm"
18
- UNKNOWN = "UNKNOWN"
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
- NORMAL = "Normal"
110
- UNREACHABLE = "Unreachable"
111
-
112
-
114
+ NORMAL = "Normal"
115
+ UNREACHABLE = "Unreachable"
@@ -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
- line_table = f"QolsysSqlError - table:{operation.get('table',"")}"
26
- line_query = f"QolsysSqlError - query:{operation.get('query',"")}"
27
- line_columns = f"QolsysSqlError - columns:{operation.get('columns',"")}"
28
- line_content_values = f"QolsysSqlError - content_values:{operation.get('content_value',"")}"
29
- line_selection = f"QolsysSqlError - selection:{operation.get('selection',"")}"
30
- line_selection_argument = f"QolsysSqlError - selection_argument:{operation.get('selection_argument',"")}"
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 = AsyncZeroconf()
11
+ self.azc = AsyncZeroconf()
12
12
 
13
- self.mdns_info = ServiceInfo(
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
-
@@ -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,**payload) -> None: # noqa: ANN003
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,**payload)
25
+ observer(self, **payload)
25
26
 
26
27
  def start_batch_update(self) -> None:
27
28
  self._batch_update_change_detected = False