qolsys-controller 0.0.22__tar.gz → 0.0.24__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.

Potentially problematic release.


This version of qolsys-controller might be problematic. Click here for more details.

Files changed (77) hide show
  1. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/PKG-INFO +1 -1
  2. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/pyproject.toml +1 -1
  3. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/plugin_remote.py +84 -10
  4. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/scene.py +1 -1
  5. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/state.py +4 -4
  6. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_lock.py +1 -1
  7. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/.github/workflows/build.yml +0 -0
  8. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/.github/workflows/publish.yml +0 -0
  9. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/.gitignore +0 -0
  10. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/Info_mqtt.md +0 -0
  11. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/LICENSE +0 -0
  12. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/README.md +0 -0
  13. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/bin/qolsys.py +0 -0
  14. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/example.py +0 -0
  15. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/info_pairing.md +0 -0
  16. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/info_qolsys.md +0 -0
  17. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/__init__.py +0 -0
  18. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/controller.py +0 -0
  19. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/db.py +0 -0
  20. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table.py +0 -0
  21. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_alarmedsensor.py +0 -0
  22. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_automation.py +0 -0
  23. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_country_locale.py +0 -0
  24. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_dashboard_msgs.py +0 -0
  25. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_dimmerlight.py +0 -0
  26. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_doorlock.py +0 -0
  27. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_eu_event.py +0 -0
  28. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_heat_map.py +0 -0
  29. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_history.py +0 -0
  30. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_iqremotesettings.py +0 -0
  31. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_iqrouter_network_config.py +0 -0
  32. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_iqrouter_user_device.py +0 -0
  33. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_master_slave.py +0 -0
  34. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_nest_device.py +0 -0
  35. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_output_rules.py +0 -0
  36. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_partition.py +0 -0
  37. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_pgm_outputs.py +0 -0
  38. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_powerg_device.py +0 -0
  39. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_qolsyssettings.py +0 -0
  40. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_scene.py +0 -0
  41. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_sensor.py +0 -0
  42. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_shades.py +0 -0
  43. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_smartsocket.py +0 -0
  44. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_state.py +0 -0
  45. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_tcc.py +0 -0
  46. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_thermostat.py +0 -0
  47. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_trouble_conditions.py +0 -0
  48. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_user.py +0 -0
  49. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_virtual_device.py +0 -0
  50. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_weather.py +0 -0
  51. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_zigbee_device.py +0 -0
  52. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_zwave_association_group.py +0 -0
  53. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_zwave_history.py +0 -0
  54. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_zwave_node.py +0 -0
  55. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/database/table_zwave_other.py +0 -0
  56. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/enum.py +0 -0
  57. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/enum_zwave.py +0 -0
  58. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/errors.py +0 -0
  59. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/mdns.py +0 -0
  60. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/mqtt_command_queue.py +0 -0
  61. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/observable.py +0 -0
  62. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/panel.py +0 -0
  63. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/partition.py +0 -0
  64. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/pki.py +0 -0
  65. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/plugin.py +0 -0
  66. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/plugin_c4.py +0 -0
  67. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/settings.py +0 -0
  68. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/task_manager.py +0 -0
  69. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/utils_mqtt.py +0 -0
  70. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zone.py +0 -0
  71. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_device.py +0 -0
  72. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_dimmer.py +0 -0
  73. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_garagedoor.py +0 -0
  74. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_generic.py +0 -0
  75. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_outlet.py +0 -0
  76. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/qolsys_controller/zwave_thermostat.py +0 -0
  77. {qolsys_controller-0.0.22 → qolsys_controller-0.0.24}/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qolsys-controller
3
- Version: 0.0.22
3
+ Version: 0.0.24
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,6 +1,6 @@
1
1
  [project]
2
2
  name = "qolsys-controller"
3
- version = "0.0.22"
3
+ version = "0.0.24"
4
4
  authors = [
5
5
  { name="Eric Hylands", email="" },
6
6
  ]
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import base64
2
3
  import datetime
3
4
  import json
4
5
  import logging
@@ -200,10 +201,13 @@ class QolsysPluginRemote(QolsysPlugin):
200
201
  # Subscribte to MQTT commands response
201
202
  await self.aiomqtt.subscribe("response_" + self.settings.random_mac, qos=self.settings.mqtt_qos)
202
203
 
203
- # Only log mastermeid traffic for debug purposes
204
+ # Subscribe to Z-Wave response
205
+ await self.aiomqtt.subscribe("ZWAVE_RESPONSE", qos=self.settings.mqtt_qos)
206
+
207
+ # Only log all traffic for debug purposes
204
208
  if self.log_mqtt_mesages:
205
209
  # Subscribe to MQTT commands send to panel by other devices
206
- await self.aiomqtt.subscribe("mastermeid", qos=self.settings.mqtt_qos)
210
+ #await self.aiomqtt.subscribe("mastermeid", qos=self.settings.mqtt_qos)
207
211
 
208
212
  # Subscribe to all topics
209
213
  await self.aiomqtt.subscribe("#", qos=self.settings.mqtt_qos)
@@ -282,6 +286,14 @@ class QolsysPluginRemote(QolsysPlugin):
282
286
  data = json.loads(message.payload.decode())
283
287
  self.panel.parse_iq2meid_message(data)
284
288
 
289
+ # Panel Z-Wave response
290
+ if message.topic.matches("ZWAVE_RESPONSE"):
291
+ data = json.loads(message.payload.decode())
292
+ zwave = data.get("ZWAVE_RESPONSE","")
293
+ decoded_payload = base64.b64decode(zwave.get("ZWAVE_PAYLOAD","")).hex()
294
+ LOGGER.debug("Z-Wave Response: Node(%s) - Status(%s) - Payload(%s)",zwave.get("NODE_ID",""),zwave.get("ZWAVE_COMMAND_STATUS",""),decoded_payload)
295
+
296
+
285
297
  except aiomqtt.MqttError as err:
286
298
  self.connected = False
287
299
  self.connected_observer.notify()
@@ -851,6 +863,66 @@ class QolsysPluginRemote(QolsysPlugin):
851
863
 
852
864
  return True
853
865
 
866
+ async def command_zwave_doorlock_set(self, node_id: int, locked:bool) -> None:
867
+ # Command 68
868
+ LOGGER.debug("MQTT: Sending zwave_doorlock_set command: EXPERIMENTAL")
869
+ LOGGER.debug("MQTT: Sending zwave_doorlock_set command - Node(%s) - Locked(%s)",node_id,locked)
870
+
871
+ # 0 unlocked
872
+ # 255 lockeck
873
+ lock_mode = 0
874
+ if locked:
875
+ lock_mode = 255
876
+
877
+ ipcRequest = [{
878
+ "dataType": "int",
879
+ "dataValue": node_id,
880
+ },
881
+ {
882
+ "dataType": "int",
883
+ "dataValue": 0,
884
+ },
885
+ {
886
+ "dataType": "byteArray",
887
+ "dataValue": [68,lock_mode],
888
+ },
889
+ {
890
+ "dataType": "int",
891
+ "dataValue": 0,
892
+ },
893
+ {
894
+ "dataType": "int",
895
+ "dataValue": 106,
896
+ },
897
+ {
898
+ "dataType": "byteArray",
899
+ "dataValue": [0],
900
+ },
901
+ ]
902
+
903
+ topic = "mastermeid"
904
+ eventName = "ipcCall"
905
+ ipcServiceName = "qzwaveservice"
906
+ ipcInterfaceName = "android.os.IQZwaveService"
907
+ ipcTransactionID = 47
908
+ requestID = str(uuid.uuid4())
909
+ remoteMacAddress = self.settings.random_mac
910
+ responseTopic = "response_" + self.settings.random_mac
911
+
912
+ payload = {
913
+ "eventName": eventName,
914
+ "ipcServiceName": ipcServiceName,
915
+ "ipcInterfaceName": ipcInterfaceName,
916
+ "ipcTransactionID": ipcTransactionID,
917
+ "ipcRequest": ipcRequest,
918
+ "requestID": requestID,
919
+ "responseTopic": responseTopic,
920
+ "remoteMacAddress": remoteMacAddress,
921
+ }
922
+
923
+ await self.send_command(topic, payload, requestID)
924
+ LOGGER.debug("MQTT: Receiving zwave_doorlock_set command")
925
+
854
926
  async def command_zwave_thermostat_setpoint_set(self, node_id: int, mode:ThermostatMode, setpoint:float) -> None:
855
927
  # Command 67
856
928
  LOGGER.debug("MQTT: Sending zwave_thermostat_setpoint_set command: EXPERIMENTAL")
@@ -941,14 +1013,16 @@ class QolsysPluginRemote(QolsysPlugin):
941
1013
  remoteMacAddress = self.settings.random_mac
942
1014
  responseTopic = "response_" + self.settings.random_mac
943
1015
 
944
- payload = {"eventName": eventName,
945
- "ipcServiceName": ipcServiceName,
946
- "ipcInterfaceName": ipcInterfaceName,
947
- "ipcTransactionID": ipcTransactionID,
948
- "ipcRequest": ipcRequest,
949
- "requestID": requestID,
950
- "responseTopic": responseTopic,
951
- "remoteMacAddress": remoteMacAddress}
1016
+ payload = {
1017
+ "eventName": eventName,
1018
+ "ipcServiceName": ipcServiceName,
1019
+ "ipcInterfaceName": ipcInterfaceName,
1020
+ "ipcTransactionID": ipcTransactionID,
1021
+ "ipcRequest": ipcRequest,
1022
+ "requestID": requestID,
1023
+ "responseTopic": responseTopic,
1024
+ "remoteMacAddress": remoteMacAddress
1025
+ }
952
1026
 
953
1027
  await self.send_command(topic, payload, requestID)
954
1028
  LOGGER.debug("MQTT: Receiving zwave_thermostat_mode_set command")
@@ -53,7 +53,7 @@ class QolsysScene(QolsysObservable):
53
53
  return self._color
54
54
 
55
55
  @name.setter
56
- def name(self, value: str) -> None:
56
+ def name(self, value: str) -> None:
57
57
  if self._name != value:
58
58
  self._name = value
59
59
  self.notify()
@@ -219,13 +219,13 @@ class QolsysState(QolsysObservable):
219
219
  # Update Thermostat
220
220
  if isinstance(state_zwave, QolsysThermostat) and isinstance(db_zwave, QolsysThermostat):
221
221
  state_zwave.update_base(db_zwave.to_dict_base())
222
- state_zwave.update_thermostat(db_zwave.to_dict_base())
222
+ state_zwave.update_thermostat(db_zwave.to_dict_thermostat)
223
223
  break
224
224
 
225
225
  # Update Lock
226
226
  if isinstance(state_zwave, QolsysLock) and isinstance(db_zwave, QolsysLock):
227
227
  state_zwave.update_base(db_zwave.to_dict_base())
228
- state_zwave.update_lock(db_zwave.to_dict_base())
228
+ state_zwave.update_lock(db_zwave.to_dict_lock)
229
229
  break
230
230
 
231
231
  # Generic Z-Wave Device
@@ -234,8 +234,8 @@ class QolsysState(QolsysObservable):
234
234
  break
235
235
 
236
236
  # zwave node_id has changed of node_type, delete and add again
237
- # self.zwave_delete(int(state_zwave.node_id)) # noqa: ERA001
238
- # self.zwave_add(db_zwave) # noqa: ERA001
237
+ # self.zwave_delete(int(state_zwave.node_id))
238
+ # self.zwave_add(db_zwave)
239
239
 
240
240
  # Add new zwave device
241
241
  for db_zwave in db_zwaves:
@@ -108,7 +108,7 @@ class QolsysLock(QolsysZWaveDevice):
108
108
 
109
109
  self.end_batch_update()
110
110
 
111
- def to_dict_dimmer(self) -> dict:
111
+ def to_dict_lock(self) -> dict:
112
112
  return {
113
113
  "_id": self._lock_id,
114
114
  "version": self._lock_version,