qolsys-controller 0.0.13__tar.gz → 0.0.15__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 (80) hide show
  1. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/PKG-INFO +1 -1
  2. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/example.py +24 -17
  3. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/pyproject.toml +1 -1
  4. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/partition.py +9 -0
  5. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/plugin_remote.py +17 -8
  6. qolsys_controller-0.0.15/test24.txt +742 -0
  7. qolsys_controller-0.0.15/test25.txt +594 -0
  8. qolsys_controller-0.0.15/test30.txt +77 -0
  9. qolsys_controller-0.0.15/text.txt +181 -0
  10. qolsys_controller-0.0.15/text23.txt +231 -0
  11. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/.github/workflows/build.yml +0 -0
  12. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/.github/workflows/publish.yml +0 -0
  13. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/.gitignore +0 -0
  14. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/Info_mqtt.md +0 -0
  15. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/LICENSE +0 -0
  16. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/README.md +0 -0
  17. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/bin/qolsys.py +0 -0
  18. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/info_pairing.md +0 -0
  19. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/info_qolsys.md +0 -0
  20. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/__init__.py +0 -0
  21. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/controller.py +0 -0
  22. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/db.py +0 -0
  23. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table.py +0 -0
  24. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_alarmedsensor.py +0 -0
  25. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_automation.py +0 -0
  26. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_country_locale.py +0 -0
  27. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_dashboard_msgs.py +0 -0
  28. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_dimmerlight.py +0 -0
  29. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_doorlock.py +0 -0
  30. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_eu_event.py +0 -0
  31. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_heat_map.py +0 -0
  32. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_history.py +0 -0
  33. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_iqremotesettings.py +0 -0
  34. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_iqrouter_network_config.py +0 -0
  35. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_iqrouter_user_device.py +0 -0
  36. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_master_slave.py +0 -0
  37. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_nest_device.py +0 -0
  38. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_output_rules.py +0 -0
  39. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_partition.py +0 -0
  40. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_pgm_outputs.py +0 -0
  41. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_powerg_device.py +0 -0
  42. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_qolsyssettings.py +0 -0
  43. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_scene.py +0 -0
  44. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_sensor.py +0 -0
  45. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_shades.py +0 -0
  46. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_smartsocket.py +0 -0
  47. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_state.py +0 -0
  48. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_tcc.py +0 -0
  49. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_thermostat.py +0 -0
  50. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_trouble_conditions.py +0 -0
  51. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_user.py +0 -0
  52. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_virtual_device.py +0 -0
  53. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_weather.py +0 -0
  54. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_zigbee_device.py +0 -0
  55. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_zwave_association_group.py +0 -0
  56. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_zwave_history.py +0 -0
  57. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_zwave_node.py +0 -0
  58. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/database/table_zwave_other.py +0 -0
  59. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/enum.py +0 -0
  60. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/errors.py +0 -0
  61. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/mdns.py +0 -0
  62. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/mqtt_command_queue.py +0 -0
  63. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/observable.py +0 -0
  64. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/panel.py +0 -0
  65. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/pki.py +0 -0
  66. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/plugin.py +0 -0
  67. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/plugin_c4.py +0 -0
  68. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/settings.py +0 -0
  69. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/state.py +0 -0
  70. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/task_manager.py +0 -0
  71. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/utils_mqtt.py +0 -0
  72. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zone.py +0 -0
  73. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_device.py +0 -0
  74. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_dimmer.py +0 -0
  75. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_garagedoor.py +0 -0
  76. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_generic.py +0 -0
  77. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_lock.py +0 -0
  78. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_outlet.py +0 -0
  79. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/qolsys_controller/zwave_thermostat.py +0 -0
  80. {qolsys_controller-0.0.13 → qolsys_controller-0.0.15}/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qolsys-controller
3
- Version: 0.0.13
3
+ Version: 0.0.15
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
@@ -26,7 +26,7 @@ async def main() -> None: # noqa: D103
26
26
 
27
27
  # Additionnal remote plugin config
28
28
  remote.plugin.check_user_code_on_disarm = False # Check user code in user.conf file
29
- remote.plugin.log_mqtt_mesages = False # Enable for MQTT debug purposes
29
+ remote.plugin.log_mqtt_mesages = True # Enable for MQTT debug purposes
30
30
  remote.plugin.auto_discover_pki = True
31
31
 
32
32
  # Configure remote plugin
@@ -52,6 +52,12 @@ async def main() -> None: # noqa: D103
52
52
 
53
53
  LOGGER.debug("Qolsys Panel Ready for operation")
54
54
 
55
+ #await asyncio.sleep(5)
56
+
57
+ #await remote.plugin.stop_operation()
58
+
59
+ LOGGER.debug("Qolsys Panel - Stopped")
60
+
55
61
  # Change Z-Wave dimmer
56
62
  # node_id: z-wane device id
57
63
  # level: 0-99, -1 to switch from off to previous on dimmer level
@@ -64,25 +70,26 @@ async def main() -> None: # noqa: D103
64
70
  # user_code="1111")
65
71
 
66
72
  # ARM_STAY
67
- await asyncio.sleep(3)
68
- await remote.plugin.command_arm(partition_id="0",
69
- arming_type="ARM-NIGHT",
70
- user_code="1111",
71
- exit_sounds=False,
72
- instant_arm=False)
73
+ #await asyncio.sleep(3)
74
+ #await remote.plugin.command_arm(partition_id="0",
75
+ # arming_type="ARM-STAY",
76
+ # user_code="1111",
77
+ # exit_sounds=False,
78
+ # instant_arm=True)
73
79
 
74
- # DISARM
75
- await asyncio.sleep(3)
76
- await remote.plugin.command_disarm(partition_id="0",
77
- user_code="1111")
78
80
 
79
81
  # ARM_AWAY
80
- # await asyncio.sleep(3)
81
- # await remote.plugin.command_arm(partition_id=0,
82
- # arming_type='ARM-AWAY',
83
- # user_code='1111',
84
- # exit_sounds=True,
85
- # instant_arm=False)
82
+ #await asyncio.sleep(3)
83
+ #await remote.plugin.command_arm(partition_id='0',
84
+ # arming_type="ARM-STAY",
85
+ # user_code="1111",
86
+ # exit_sounds=False,
87
+ # instant_arm=True)
88
+
89
+ # DISARM
90
+ #await asyncio.sleep(10)
91
+ #await remote.plugin.command_disarm(partition_id="0", user_code="1111", silent_disarming=True)
92
+
86
93
 
87
94
  # Use an asyncio.Event to keep the program running efficiently
88
95
  stop_event = asyncio.Event()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "qolsys-controller"
3
- version = "0.0.13"
3
+ version = "0.0.15"
4
4
  authors = [
5
5
  { name="Eric Hylands", email="" },
6
6
  ]
@@ -39,6 +39,7 @@ class QolsysPartition(QolsysObservable):
39
39
 
40
40
  # Other
41
41
  self._command_exit_sounds = True
42
+ self._command_silent_disarming = False
42
43
  self._command_arm_stay_instant = True
43
44
 
44
45
  @property
@@ -81,6 +82,14 @@ class QolsysPartition(QolsysObservable):
81
82
  def command_arm_stay_instant(self) -> bool:
82
83
  return self._command_arm_stay_instant
83
84
 
85
+ @property
86
+ def command_silent_disarming(self) -> bool:
87
+ return self._command_silent_disarming
88
+
89
+ @command_silent_disarming.setter
90
+ def command_silent_disarming(self, value: bool) -> None:
91
+ self._command_silent_disarming = value
92
+
84
93
  @system_status.setter
85
94
  def system_status(self, new_value: PartitionSystemStatus) -> None:
86
95
  if self._system_status != new_value:
@@ -34,6 +34,7 @@ class QolsysPluginRemote(QolsysPlugin):
34
34
 
35
35
  # Plugin
36
36
  self.certificate_exchange_server = None
37
+ self._check_user_code_on_arm = False
37
38
  self._check_user_code_on_disarm = True
38
39
  self._log_mqtt_messages = False
39
40
  self._task_manager = QolsysTaskManager()
@@ -62,6 +63,14 @@ class QolsysPluginRemote(QolsysPlugin):
62
63
  def check_user_code_on_disarm(self, check_user_code_on_disarm: bool) -> None:
63
64
  self._check_user_code_on_disarm = check_user_code_on_disarm
64
65
 
66
+ @property
67
+ def check_user_code_on_arm(self) -> bool:
68
+ return self._check_user_code_on_arm
69
+
70
+ @check_user_code_on_arm.setter
71
+ def check_user_code_on_arm(self, check_user_code_on_arm: bool) -> None:
72
+ self._check_user_code_on_arm = check_user_code_on_arm
73
+
65
74
  @property
66
75
  def auto_discover_pki(self) -> bool:
67
76
  return self._auto_discover_pki
@@ -196,7 +205,7 @@ class QolsysPluginRemote(QolsysPlugin):
196
205
  await self.aiomqtt.subscribe("mastermeid", qos=0)
197
206
 
198
207
  # Subscribe to all topics
199
- await self.aiomqtt.subscribe("#", qos=0)
208
+ #await self.aiomqtt.subscribe("#", qos=0)
200
209
 
201
210
  # Start mqtt_listent_task and mqtt_ping_task
202
211
  self._task_manager.cancel(self._mqtt_task_listen_label)
@@ -733,7 +742,7 @@ class QolsysPluginRemote(QolsysPlugin):
733
742
  LOGGER.debug("MQTT: Receiving pairing_request command")
734
743
  return response
735
744
 
736
- async def command_ui_delay(self, partition_id: str) -> None:
745
+ async def command_ui_delay(self, partition_id: str,silent_disarming:bool = False) -> None:
737
746
  LOGGER.debug("MQTT: Sending ui_delay command")
738
747
 
739
748
  # partition state needs to be sent for ui_delay to work
@@ -744,6 +753,7 @@ class QolsysPluginRemote(QolsysPlugin):
744
753
  "panel_status": partition.system_status,
745
754
  "userID": 0,
746
755
  "partitionID": partition_id, # STR EXPECTED
756
+ "silentDisarming":silent_disarming,
747
757
  "operation_source": 1,
748
758
  "macAddress": self.settings.random_mac,
749
759
  }
@@ -774,7 +784,7 @@ class QolsysPluginRemote(QolsysPlugin):
774
784
  await self.send_command(topic, payload, requestID)
775
785
  LOGGER.debug("MQTT: Receiving ui_delay command")
776
786
 
777
- async def command_disarm(self, partition_id: str, user_code: str = "", exit_sounds: bool = True) -> bool:
787
+ async def command_disarm(self, partition_id: str, user_code: str = "", silent_disarming: bool = False) -> bool:
778
788
  partition = self.state.partition(partition_id)
779
789
  if not partition:
780
790
  LOGGER.debug("MQTT: disarm command error - Unknow Partition")
@@ -788,7 +798,7 @@ class QolsysPluginRemote(QolsysPlugin):
788
798
  LOGGER.debug("MQTT: disarm command error - user_code error")
789
799
  return False
790
800
 
791
- async def get_mqtt_disarm_command() -> str:
801
+ async def get_mqtt_disarm_command(silent_disarming:bool) -> str:
792
802
  if partition.alarm_state == PartitionAlarmState.ALARM:
793
803
  return "disarm_from_emergency"
794
804
  if partition.system_status in {PartitionSystemStatus.ARM_AWAY_EXIT_DELAY,
@@ -798,12 +808,12 @@ class QolsysPluginRemote(QolsysPlugin):
798
808
  if partition.system_status in {PartitionSystemStatus.ARM_AWAY,
799
809
  PartitionSystemStatus.ARM_STAY,
800
810
  PartitionSystemStatus.ARM_NIGHT}:
801
- await self.command_ui_delay(partition_id)
811
+ await self.command_ui_delay(partition_id,silent_disarming)
802
812
  return "disarm_the_panel_from_entry_delay"
803
813
 
804
814
  return "disarm_from_openlearn_sensor"
805
815
 
806
- mqtt_disarm_command = await get_mqtt_disarm_command()
816
+ mqtt_disarm_command = await get_mqtt_disarm_command(silent_disarming)
807
817
  LOGGER.debug("MQTT: Sending disarm command - check_user_code:%s", self.check_user_code_on_disarm)
808
818
 
809
819
 
@@ -812,7 +822,6 @@ class QolsysPluginRemote(QolsysPlugin):
812
822
  "userID": user_id,
813
823
  "partitionID": int(partition_id), # INT EXPECTED
814
824
  "operation_source": 1,
815
- "disarm_exit_sounds": exit_sounds,
816
825
  "macAddress": self.settings.random_mac,
817
826
  }
818
827
 
@@ -903,7 +912,7 @@ class QolsysPluginRemote(QolsysPlugin):
903
912
  LOGGER.debug("MQTT: arm command error - Unknow Partition")
904
913
  return False
905
914
 
906
- if self.panel.SECURE_ARMING == "true":
915
+ if self.panel.SECURE_ARMING == "true" and self.check_user_code_on_arm:
907
916
  # Do local user code verification to arm if secure arming is enabled
908
917
  user_id = self.panel.check_user(user_code)
909
918
  if user_id == -1: