qolsys-controller 0.0.5__tar.gz → 0.0.8__tar.gz

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 (71) hide show
  1. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/PKG-INFO +2 -2
  2. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/README.md +1 -1
  3. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/pyproject.toml +1 -1
  4. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/pki.py +1 -1
  5. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/plugin_remote.py +25 -2
  6. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/settings.py +14 -1
  7. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/.github/workflows/build.yml +0 -0
  8. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/.github/workflows/publish.yml +0 -0
  9. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/.gitignore +0 -0
  10. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/Info_mqtt.md +0 -0
  11. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/LICENSE +0 -0
  12. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/bin/qolsys.py +0 -0
  13. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/example.py +0 -0
  14. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/info_pairing.md +0 -0
  15. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/info_qolsys.md +0 -0
  16. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/__init__.py +0 -0
  17. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/controller.py +0 -0
  18. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/db.py +0 -0
  19. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table.py +0 -0
  20. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_alarmedsensor.py +0 -0
  21. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_automation.py +0 -0
  22. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_country_locale.py +0 -0
  23. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_dashboard_msgs.py +0 -0
  24. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_dimmerlight.py +0 -0
  25. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_doorlock.py +0 -0
  26. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_eu_event.py +0 -0
  27. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_heat_map.py +0 -0
  28. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_history.py +0 -0
  29. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_iqremotesettings.py +0 -0
  30. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_iqrouter_network_config.py +0 -0
  31. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_iqrouter_user_device.py +0 -0
  32. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_master_slave.py +0 -0
  33. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_partition.py +0 -0
  34. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_powerg_device.py +0 -0
  35. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_qolsyssettings.py +0 -0
  36. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_scene.py +0 -0
  37. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_sensor.py +0 -0
  38. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_smartsocket.py +0 -0
  39. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_state.py +0 -0
  40. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_tcc.py +0 -0
  41. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_thermostat.py +0 -0
  42. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_trouble_conditions.py +0 -0
  43. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_user.py +0 -0
  44. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_virtual_device.py +0 -0
  45. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_weather.py +0 -0
  46. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_zigbee_device.py +0 -0
  47. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_zwave_association_group.py +0 -0
  48. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_zwave_history.py +0 -0
  49. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_zwave_node.py +0 -0
  50. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/database/table_zwave_other.py +0 -0
  51. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/enum.py +0 -0
  52. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/errors.py +0 -0
  53. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/mdns.py +0 -0
  54. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/mqtt_command_queue.py +0 -0
  55. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/observable.py +0 -0
  56. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/panel.py +0 -0
  57. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/partition.py +0 -0
  58. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/plugin.py +0 -0
  59. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/plugin_c4.py +0 -0
  60. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/state.py +0 -0
  61. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/task_manager.py +0 -0
  62. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/utils_mqtt.py +0 -0
  63. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zone.py +0 -0
  64. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_device.py +0 -0
  65. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_dimmer.py +0 -0
  66. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_garagedoor.py +0 -0
  67. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_generic.py +0 -0
  68. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_lock.py +0 -0
  69. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_outlet.py +0 -0
  70. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/qolsys_controller/zwave_thermostat.py +0 -0
  71. {qolsys_controller-0.0.5 → qolsys_controller-0.0.8}/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qolsys-controller
3
- Version: 0.0.5
3
+ Version: 0.0.8
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
@@ -16,7 +16,7 @@ Description-Content-Type: text/markdown
16
16
 
17
17
  # Qolsys Controller - qolsys-controller
18
18
 
19
- [![Build](https://github.com/EHylands/QolsysController/actions/workflows/python-app.yml/badge.svg)](https://github.com/EHylands/QolsysController/actions/workflows/python-app.yml)
19
+ [![Build](https://github.com/EHylands/QolsysController/actions/workflows/build.yml/badge.svg)](https://github.com/EHylands/QolsysController/actions/workflows/build.yml)
20
20
 
21
21
  A Python module that emulates a virtual IQ Remote device, enabling full **local control** of a Qolsys IQ Panel over MQTT — no cloud access required.
22
22
 
@@ -1,6 +1,6 @@
1
1
  # Qolsys Controller - qolsys-controller
2
2
 
3
- [![Build](https://github.com/EHylands/QolsysController/actions/workflows/python-app.yml/badge.svg)](https://github.com/EHylands/QolsysController/actions/workflows/python-app.yml)
3
+ [![Build](https://github.com/EHylands/QolsysController/actions/workflows/build.yml/badge.svg)](https://github.com/EHylands/QolsysController/actions/workflows/build.yml)
4
4
 
5
5
  A Python module that emulates a virtual IQ Remote device, enabling full **local control** of a Qolsys IQ Panel over MQTT — no cloud access required.
6
6
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "qolsys-controller"
3
- version = "0.0.5"
3
+ version = "0.0.8"
4
4
  authors = [
5
5
  { name="Eric Hylands", email="" },
6
6
  ]
@@ -36,7 +36,7 @@ class QolsysPKI:
36
36
  return ":".join(self.id[i:i+2] for i in range(0, len(self.id), 2))
37
37
 
38
38
  def set_id(self, pki_id: str) -> None:
39
- self._id = pki_id.replace(":", "").upper()
39
+ self._id = pki_id.replace(":", "").lower()
40
40
  LOGGER.debug("Using PKI: %s", self.formatted_id())
41
41
  self._subkeys_directory = self._settings.pki_directory.joinpath(Path(self.id))
42
42
 
@@ -110,6 +110,10 @@ class QolsysPluginRemote(QolsysPlugin):
110
110
  else:
111
111
  self._pki.set_id(self.settings.random_mac)
112
112
 
113
+ # Set mqtt_remote_client_id
114
+ self.settings.mqtt_remote_client_id = "qolsys-controller-" + self._pki.formatted_id()
115
+ LOGGER.debug("Using MQTT remoteClientID: %s", self.settings.mqtt_remote_client_id)
116
+
113
117
  # Check if plugin is paired
114
118
  if self.is_paired():
115
119
  LOGGER.debug("Panel is Paired")
@@ -133,6 +137,24 @@ class QolsysPluginRemote(QolsysPlugin):
133
137
  async def start_operation(self) -> None:
134
138
  await self._task_manager.run(self.mqtt_connect_task(reconnect=True), self._mqtt_task_connect_label)
135
139
 
140
+ async def stop_operation(self) -> None:
141
+ LOGGER.debug("Stopping Plugin Operation")
142
+
143
+ if self.certificate_exchange_server is not None:
144
+ self.certificate_exchange_server.close()
145
+
146
+ if self.aiomqtt is not None:
147
+ await self.aiomqtt.__aexit__(None, None, None)
148
+ self.aiomqtt = None
149
+
150
+ self._task_manager.cancel(self._mqtt_task_connect_label)
151
+ self._task_manager.cancel(self._mqtt_task_listen_label)
152
+ self._task_manager.cancel(self._mqtt_task_ping_label)
153
+ self._task_manager.cancel(self._mqtt_task_config_label)
154
+
155
+ self.connected = False
156
+ self.connected_observer.notify()
157
+
136
158
  async def mqtt_connect_task(self, reconnect: bool) -> None:
137
159
  # Configure TLS parameters for MQTT connection
138
160
  tls_params = aiomqtt.TLSParameters(
@@ -228,6 +250,7 @@ class QolsysPluginRemote(QolsysPlugin):
228
250
  while True:
229
251
  if self.aiomqtt is not None and self.connected:
230
252
  await self.command_pingevent()
253
+
231
254
  await asyncio.sleep(self.settings.mqtt_ping)
232
255
 
233
256
  async def mqtt_listen_task(self) -> None:
@@ -434,7 +457,7 @@ class QolsysPluginRemote(QolsysPlugin):
434
457
  ipAddress = self.settings.plugin_ip
435
458
  eventName = "connect_v204"
436
459
  macAddress = self.settings.random_mac
437
- remoteClientID = "QolsysController"
460
+ remoteClientID = self.settings.mqtt_remote_client_id
438
461
  softwareVersion = "4.4.1"
439
462
  producType = "tab07_rk68"
440
463
  bssid = ""
@@ -646,7 +669,7 @@ class QolsysPluginRemote(QolsysPlugin):
646
669
 
647
670
  topic = "mastermeid"
648
671
  eventName = "disconnect"
649
- remoteClientID = "QolsysRemote"
672
+ remoteClientID = self.settings.mqtt_remote_client_id
650
673
  requestID = str(uuid.uuid4())
651
674
  remoteMacAddress = self.settings.random_mac
652
675
 
@@ -25,6 +25,7 @@ class QolsysSettings:
25
25
  # MQTT
26
26
  self._mqtt_timeout: int = 30
27
27
  self._mqtt_ping: int = 600
28
+ self._mqtt_remote_client_id = ""
28
29
 
29
30
  @property
30
31
  def random_mac(self) -> str:
@@ -32,7 +33,7 @@ class QolsysSettings:
32
33
 
33
34
  @random_mac.setter
34
35
  def random_mac(self, random_mac: str) -> None:
35
- self._random_mac = random_mac
36
+ self._random_mac = random_mac.lower()
36
37
 
37
38
  @property
38
39
  def plugin_ip(self) -> str:
@@ -89,6 +90,18 @@ class QolsysSettings:
89
90
  def mqtt_ping(self) -> int:
90
91
  return self._mqtt_ping
91
92
 
93
+ @mqtt_ping.setter
94
+ def mqtt_ping(self, ping:int) -> None:
95
+ self._mqtt_ping = ping
96
+
97
+ @property
98
+ def mqtt_remote_client_id(self) -> str:
99
+ return self._mqtt_remote_client_id
100
+
101
+ @mqtt_remote_client_id.setter
102
+ def mqtt_remote_client_id(self,client_id:str) -> None:
103
+ self._mqtt_remote_client_id = client_id
104
+
92
105
  def check_panel_ip(self) -> bool:
93
106
  if self._panel_ip == "":
94
107
  LOGGER.debug("Invalid Panel IP: %s", self._panel_ip)