qolsys-controller 0.0.4__tar.gz → 0.0.5__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.4/.github/workflows/python-app.yml → qolsys_controller-0.0.5/.github/workflows/build.yml +1 -1
  2. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/PKG-INFO +7 -3
  3. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/README.md +6 -2
  4. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/pyproject.toml +1 -1
  5. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/panel.py +17 -16
  6. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/settings.py +29 -0
  7. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/.github/workflows/publish.yml +0 -0
  8. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/.gitignore +0 -0
  9. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/Info_mqtt.md +0 -0
  10. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/LICENSE +0 -0
  11. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/bin/qolsys.py +0 -0
  12. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/example.py +0 -0
  13. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/info_pairing.md +0 -0
  14. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/info_qolsys.md +0 -0
  15. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/__init__.py +0 -0
  16. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/controller.py +0 -0
  17. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/db.py +0 -0
  18. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table.py +0 -0
  19. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_alarmedsensor.py +0 -0
  20. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_automation.py +0 -0
  21. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_country_locale.py +0 -0
  22. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_dashboard_msgs.py +0 -0
  23. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_dimmerlight.py +0 -0
  24. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_doorlock.py +0 -0
  25. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_eu_event.py +0 -0
  26. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_heat_map.py +0 -0
  27. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_history.py +0 -0
  28. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_iqremotesettings.py +0 -0
  29. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_iqrouter_network_config.py +0 -0
  30. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_iqrouter_user_device.py +0 -0
  31. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_master_slave.py +0 -0
  32. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_partition.py +0 -0
  33. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_powerg_device.py +0 -0
  34. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_qolsyssettings.py +0 -0
  35. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_scene.py +0 -0
  36. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_sensor.py +0 -0
  37. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_smartsocket.py +0 -0
  38. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_state.py +0 -0
  39. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_tcc.py +0 -0
  40. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_thermostat.py +0 -0
  41. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_trouble_conditions.py +0 -0
  42. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_user.py +0 -0
  43. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_virtual_device.py +0 -0
  44. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_weather.py +0 -0
  45. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_zigbee_device.py +0 -0
  46. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_zwave_association_group.py +0 -0
  47. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_zwave_history.py +0 -0
  48. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_zwave_node.py +0 -0
  49. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/database/table_zwave_other.py +0 -0
  50. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/enum.py +0 -0
  51. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/errors.py +0 -0
  52. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/mdns.py +0 -0
  53. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/mqtt_command_queue.py +0 -0
  54. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/observable.py +0 -0
  55. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/partition.py +0 -0
  56. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/pki.py +0 -0
  57. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/plugin.py +0 -0
  58. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/plugin_c4.py +0 -0
  59. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/plugin_remote.py +0 -0
  60. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/state.py +0 -0
  61. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/task_manager.py +0 -0
  62. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/utils_mqtt.py +0 -0
  63. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zone.py +0 -0
  64. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_device.py +0 -0
  65. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_dimmer.py +0 -0
  66. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_garagedoor.py +0 -0
  67. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_generic.py +0 -0
  68. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_lock.py +0 -0
  69. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_outlet.py +0 -0
  70. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/qolsys_controller/zwave_thermostat.py +0 -0
  71. {qolsys_controller-0.0.4 → qolsys_controller-0.0.5}/requirements.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
2
  # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3
3
 
4
- name: Python application
4
+ name: Build
5
5
 
6
6
  on:
7
7
  push:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qolsys-controller
3
- Version: 0.0.4
3
+ Version: 0.0.5
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
@@ -14,7 +14,9 @@ Classifier: Topic :: Home Automation
14
14
  Requires-Python: >=3.12
15
15
  Description-Content-Type: text/markdown
16
16
 
17
- # QolsysController
17
+ # Qolsys Controller - qolsys-controller
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)
18
20
 
19
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.
20
22
 
@@ -62,7 +64,9 @@ A Python module that emulates a virtual IQ Remote device, enabling full **local
62
64
 
63
65
  ## ⚠️ Certificate Warning
64
66
 
65
- During pairing, the main panel issues **only one signed client certificate** per virtual IQ Remote. If any key files are lost or deleted, re-pairing may become impossible.
67
+ During pairing, the main panel issues **only one signed client certificate** per virtual IQ Remote. If any key files are lost or deleted, re-pairing may become impossible.
68
+
69
+ A new PKI, including a new private key, can be recreated under specific circumstances, though the precise conditions remain unknown at this time.
66
70
 
67
71
  **Important:**
68
72
  Immediately back up the following files from the `pki/` directory after initial pairing:
@@ -1,4 +1,6 @@
1
- # QolsysController
1
+ # Qolsys Controller - qolsys-controller
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)
2
4
 
3
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.
4
6
 
@@ -46,7 +48,9 @@ A Python module that emulates a virtual IQ Remote device, enabling full **local
46
48
 
47
49
  ## ⚠️ Certificate Warning
48
50
 
49
- During pairing, the main panel issues **only one signed client certificate** per virtual IQ Remote. If any key files are lost or deleted, re-pairing may become impossible.
51
+ During pairing, the main panel issues **only one signed client certificate** per virtual IQ Remote. If any key files are lost or deleted, re-pairing may become impossible.
52
+
53
+ A new PKI, including a new private key, can be recreated under specific circumstances, though the precise conditions remain unknown at this time.
50
54
 
51
55
  **Important:**
52
56
  Immediately back up the following files from the `pki/` directory after initial pairing:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "qolsys-controller"
3
- version = "0.0.4"
3
+ version = "0.0.5"
4
4
  authors = [
5
5
  { name="Eric Hylands", email="" },
6
6
  ]
@@ -93,22 +93,23 @@ class QolsysPanel(QolsysObservable):
93
93
  self._product_type = ""
94
94
 
95
95
  def read_users_file(self) -> bool:
96
- # Loading user_code data from users.conf file
97
- try:
98
- path = self._settings.users_file_path
99
- with path.open("r", encoding="utf-8") as file:
100
- try:
101
- users = json.load(file)
102
- for user in users:
103
- self._users.append(user)
104
-
105
- except json.JSONDecodeError:
106
- LOGGER.exception("users.conf file json error")
107
- return False
108
-
109
- except FileNotFoundError:
110
- LOGGER.exception("users.conf file not found")
111
- return False
96
+ # Loading user_code data from users.conf file if exists
97
+ if self._settings.users_file_path.is_file():
98
+ try:
99
+ path = self._settings.users_file_path
100
+ with path.open("r", encoding="utf-8") as file:
101
+ try:
102
+ users = json.load(file)
103
+ for user in users:
104
+ self._users.append(user)
105
+
106
+ except json.JSONDecodeError:
107
+ LOGGER.exception("users.conf file json error")
108
+ return False
109
+
110
+ except FileNotFoundError:
111
+ LOGGER.exception("users.conf file not found")
112
+ return False
112
113
 
113
114
  return True
114
115
 
@@ -123,4 +123,33 @@ class QolsysSettings:
123
123
  return False
124
124
 
125
125
  LOGGER.debug("Using config_directory: %s", self.config_directory.resolve())
126
+
127
+ # Create pki directory if not found
128
+ if not self.pki_directory.is_dir():
129
+ LOGGER.debug("Creating pki_directory: %s", self.pki_directory.resolve())
130
+ try:
131
+ self.pki_directory.mkdir(parents=True)
132
+ except PermissionError:
133
+ LOGGER.exception("Permission denied: Unable to create: %s", self.pki_directory.resolve())
134
+ return False
135
+ except Exception:
136
+ LOGGER.exception("Error creating pki_directory: %s", self.pki_directory.resolve())
137
+ return False
138
+
139
+ LOGGER.debug("Using pki_directory: %s", self.pki_directory.resolve())
140
+
141
+ # Create media directory if not found
142
+ if not self._media_directory.is_dir():
143
+ LOGGER.debug("Creating media_directory: %s", self._media_directory.resolve())
144
+ try:
145
+ self._media_directory.mkdir(parents=True)
146
+ except PermissionError:
147
+ LOGGER.exception("Permission denied: Unable to create: %s", self._media_directory.resolve())
148
+ return False
149
+ except Exception:
150
+ LOGGER.exception("Error creating media_directory: %s", self._media_directory.resolve())
151
+ return False
152
+
153
+ LOGGER.debug("Using media_directory: %s", self._media_directory.resolve())
154
+
126
155
  return True