qolsys-controller 0.0.16__tar.gz → 0.0.18__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 (94) hide show
  1. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/PKG-INFO +2 -1
  2. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/README.md +1 -0
  3. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/example.py +9 -9
  4. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/pyproject.toml +1 -1
  5. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/db.py +12 -3
  6. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table.py +44 -16
  7. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_alarmedsensor.py +3 -16
  8. qolsys_controller-0.0.18/qolsys_controller/database/table_automation.py +46 -0
  9. qolsys_controller-0.0.18/qolsys_controller/database/table_country_locale.py +37 -0
  10. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_dashboard_msgs.py +2 -18
  11. qolsys_controller-0.0.18/qolsys_controller/database/table_dimmerlight.py +36 -0
  12. qolsys_controller-0.0.18/qolsys_controller/database/table_doorlock.py +37 -0
  13. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_eu_event.py +2 -5
  14. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_heat_map.py +1 -14
  15. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_history.py +2 -17
  16. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_iqremotesettings.py +1 -13
  17. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_iqrouter_network_config.py +1 -6
  18. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_iqrouter_user_device.py +2 -6
  19. qolsys_controller-0.0.18/qolsys_controller/database/table_master_slave.py +44 -0
  20. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_nest_device.py +1 -6
  21. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_output_rules.py +1 -6
  22. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_partition.py +1 -11
  23. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_pgm_outputs.py +2 -6
  24. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_powerg_device.py +2 -6
  25. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_qolsyssettings.py +2 -11
  26. qolsys_controller-0.0.18/qolsys_controller/database/table_scene.py +36 -0
  27. qolsys_controller-0.0.18/qolsys_controller/database/table_sensor.py +66 -0
  28. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_shades.py +1 -5
  29. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_smartsocket.py +1 -5
  30. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_state.py +1 -13
  31. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_tcc.py +1 -8
  32. qolsys_controller-0.0.18/qolsys_controller/database/table_thermostat.py +53 -0
  33. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_trouble_conditions.py +1 -14
  34. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_user.py +12 -17
  35. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_virtual_device.py +1 -5
  36. qolsys_controller-0.0.18/qolsys_controller/database/table_weather.py +33 -0
  37. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_zigbee_device.py +1 -6
  38. qolsys_controller-0.0.18/qolsys_controller/database/table_zwave_association_group.py +34 -0
  39. qolsys_controller-0.0.18/qolsys_controller/database/table_zwave_history.py +37 -0
  40. qolsys_controller-0.0.18/qolsys_controller/database/table_zwave_node.py +84 -0
  41. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/database/table_zwave_other.py +1 -6
  42. qolsys_controller-0.0.18/qolsys_controller/enum_zwave.py +37 -0
  43. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/panel.py +21 -0
  44. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/plugin_remote.py +121 -8
  45. qolsys_controller-0.0.18/qolsys_controller/scene.py +79 -0
  46. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/settings.py +5 -0
  47. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/state.py +72 -0
  48. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zone.py +1 -1
  49. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_thermostat.py +56 -0
  50. qolsys_controller-0.0.16/qolsys_controller/database/table_automation.py +0 -77
  51. qolsys_controller-0.0.16/qolsys_controller/database/table_country_locale.py +0 -60
  52. qolsys_controller-0.0.16/qolsys_controller/database/table_dimmerlight.py +0 -57
  53. qolsys_controller-0.0.16/qolsys_controller/database/table_doorlock.py +0 -59
  54. qolsys_controller-0.0.16/qolsys_controller/database/table_master_slave.py +0 -73
  55. qolsys_controller-0.0.16/qolsys_controller/database/table_scene.py +0 -55
  56. qolsys_controller-0.0.16/qolsys_controller/database/table_sensor.py +0 -123
  57. qolsys_controller-0.0.16/qolsys_controller/database/table_thermostat.py +0 -94
  58. qolsys_controller-0.0.16/qolsys_controller/database/table_weather.py +0 -48
  59. qolsys_controller-0.0.16/qolsys_controller/database/table_zwave_association_group.py +0 -53
  60. qolsys_controller-0.0.16/qolsys_controller/database/table_zwave_history.py +0 -59
  61. qolsys_controller-0.0.16/qolsys_controller/database/table_zwave_node.py +0 -150
  62. qolsys_controller-0.0.16/test24.txt +0 -742
  63. qolsys_controller-0.0.16/test25.txt +0 -594
  64. qolsys_controller-0.0.16/test30.txt +0 -77
  65. qolsys_controller-0.0.16/text.txt +0 -181
  66. qolsys_controller-0.0.16/text23.txt +0 -231
  67. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/.github/workflows/build.yml +0 -0
  68. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/.github/workflows/publish.yml +0 -0
  69. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/.gitignore +0 -0
  70. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/Info_mqtt.md +0 -0
  71. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/LICENSE +0 -0
  72. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/bin/qolsys.py +0 -0
  73. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/info_pairing.md +0 -0
  74. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/info_qolsys.md +0 -0
  75. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/__init__.py +0 -0
  76. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/controller.py +0 -0
  77. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/enum.py +0 -0
  78. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/errors.py +0 -0
  79. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/mdns.py +0 -0
  80. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/mqtt_command_queue.py +0 -0
  81. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/observable.py +0 -0
  82. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/partition.py +0 -0
  83. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/pki.py +0 -0
  84. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/plugin.py +0 -0
  85. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/plugin_c4.py +0 -0
  86. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/task_manager.py +0 -0
  87. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/utils_mqtt.py +0 -0
  88. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_device.py +0 -0
  89. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_dimmer.py +0 -0
  90. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_garagedoor.py +0 -0
  91. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_generic.py +0 -0
  92. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_lock.py +0 -0
  93. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/qolsys_controller/zwave_outlet.py +0 -0
  94. {qolsys_controller-0.0.16 → qolsys_controller-0.0.18}/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qolsys-controller
3
- Version: 0.0.16
3
+ Version: 0.0.18
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
@@ -35,6 +35,7 @@ A Python module that emulates a virtual IQ Remote device, enabling full **local
35
35
  | **Partitions** | Arming status | ✅ |
36
36
  | | Set Exit sounds | ✅ |
37
37
  | | Home Instant arming | ✅ |
38
+ | | Home Silent Disarm | ✅ |
38
39
  | | Alarm state and type | ✅ |
39
40
  | | Disarm pictures | 🛠️ WIP |
40
41
  |---|---|---|
@@ -19,6 +19,7 @@ A Python module that emulates a virtual IQ Remote device, enabling full **local
19
19
  | **Partitions** | Arming status | ✅ |
20
20
  | | Set Exit sounds | ✅ |
21
21
  | | Home Instant arming | ✅ |
22
+ | | Home Silent Disarm | ✅ |
22
23
  | | Alarm state and type | ✅ |
23
24
  | | Disarm pictures | 🛠️ WIP |
24
25
  |---|---|---|
@@ -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 = True # Enable for MQTT debug purposes
29
+ remote.plugin.log_mqtt_mesages = False # Enable for MQTT debug purposes
30
30
  remote.plugin.auto_discover_pki = True
31
31
 
32
32
  # Configure remote plugin
@@ -70,12 +70,12 @@ async def main() -> None: # noqa: D103
70
70
  # user_code="1111")
71
71
 
72
72
  # ARM_STAY
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
+ 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)
79
79
 
80
80
 
81
81
  # ARM_AWAY
@@ -87,8 +87,8 @@ async def main() -> None: # noqa: D103
87
87
  # instant_arm=True)
88
88
 
89
89
  # DISARM
90
- #await asyncio.sleep(10)
91
- #await remote.plugin.command_disarm(partition_id="0", user_code="1111", silent_disarming=True)
90
+ await asyncio.sleep(5)
91
+ await remote.plugin.command_disarm(partition_id="0", user_code="1111", silent_disarming=True)
92
92
 
93
93
 
94
94
  # Use an asyncio.Event to keep the program running efficiently
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "qolsys-controller"
3
- version = "0.0.16"
3
+ version = "0.0.18"
4
4
  authors = [
5
5
  { name="Eric Hylands", email="" },
6
6
  ]
@@ -132,7 +132,6 @@ class QolsysDB:
132
132
  # content://com.qolsys.qolsysprovider.ProvisionListContentProvider/provision_list
133
133
  # content://com.qolsys.qolsysprovider.PowerGSignalStrengthContentProvider/powerg_signal_strength
134
134
  # content://com.qolsys.qolsysprovider.ProximityTagContentProvider/proximity_tag
135
- # content://com.qolsys.qolsysprovider.OutputRulesContentProvider/output_rules
136
135
  # content://com.qolsys.qolsysprovider.IQCameraContentProvider/iqcamera
137
136
  # content://com.qolsys.qolsysprovider.CorbusDeviceContentProvider/corbus_device
138
137
  # content://com.qolsys.qolsysprovider.AutomationRulesContentProvider/automation_rules
@@ -144,9 +143,7 @@ class QolsysDB:
144
143
  # content://com.qolsys.qolsysprovider.AxonSignalStrengthContentProvider/axon_signal_strength
145
144
  # content://com.qolsys.qolsysprovider.PanelInfoContentProvider/panel_info
146
145
  # content://com.qolsys.qolsysprovider.AxonRSSIContentProvider/axon_rssi_table
147
- # content://com.qolsys.qolsysprovider.PowerGDeviceContentProvider/powerg_device
148
146
  # content://com.qolsys.qolsysprovider.PowerGRSSIContentProvider/powerg_rssi_table
149
- # content://com.qolsys.qolsysprovider.PgmOutputsContentProvider/pgm_outputs
150
147
 
151
148
  @property
152
149
  def db(self) -> sqlite3.Connection:
@@ -156,6 +153,18 @@ class QolsysDB:
156
153
  def cursor(self) -> sqlite3.Cursor:
157
154
  return self._cursor
158
155
 
156
+ def get_scenes(self) -> list[dict]:
157
+ self.cursor.execute(f"SELECT * FROM {self.table_scene.table} ORDER BY scene_id")
158
+ self.db.commit()
159
+
160
+ scenes = []
161
+ columns = [description[0] for description in self.cursor.description]
162
+ for row in self.cursor.fetchall():
163
+ row_dict = dict(zip(columns, row, strict=True))
164
+ scenes.append(row_dict)
165
+
166
+ return scenes
167
+
159
168
  def get_partitions(self) -> list[dict]:
160
169
  self.cursor.execute(f"SELECT * FROM {self.table_partition.table} ORDER BY partition_id")
161
170
  self.db.commit()
@@ -15,6 +15,7 @@ class QolsysTable:
15
15
  self._table: str = ""
16
16
  self._columns: list[str] = []
17
17
  self._abort_on_error: bool = False
18
+ self._implemented:bool = False
18
19
 
19
20
  @property
20
21
  def uri(self) -> str:
@@ -66,22 +67,52 @@ class QolsysTable:
66
67
  if self._abort_on_error:
67
68
  raise error from err
68
69
 
69
- def update(self, selection: str, selection_argument: str, content_value: str) -> None:
70
- # selection: 'zone_id=?, parition_id=?'
70
+ def insert(self, data: dict) -> None:
71
+ try:
72
+ if not self._implemented and data is not None:
73
+ LOGGER.warning("New Table format: %s", self.uri)
74
+ LOGGER.warning("Table: %s", self.table)
75
+ LOGGER.warning(data)
76
+ LOGGER.warning("Please Report")
77
+ return
78
+
79
+ full_data = {col: data.get(col, "") for col in self._columns}
80
+
81
+ new_columns = []
82
+ for key in data:
83
+ if key not in self._columns:
84
+ new_columns.append(key)
85
+
86
+ # Warn if new column found in iq2meid database
87
+ if new_columns:
88
+ LOGGER.warning("New column found in iq2meid database")
89
+ LOGGER.warning("Table: %s", self.table)
90
+ LOGGER.warning("New Columns: %s", new_columns)
91
+ LOGGER.warning("Please Report")
92
+
93
+ col_str = ", ".join(full_data.keys())
94
+ placeholder_str = ", ".join([f":{key}" for key in full_data])
95
+ query = f"INSERT OR IGNORE INTO {self.table} ({col_str}) VALUES ({placeholder_str})"
96
+ self._cursor.execute(query, full_data)
97
+ self._db.commit()
71
98
 
72
- # Firmware 4.4.1 is sending contentValues as string
73
- # selection_argument: '[3,1]'
74
- # Firmware 4.6.1:
75
- # selection_argument: ['cc:4b:73:86:5c:89']
99
+ except sqlite3.Error as err:
100
+ error = QolsysSqlError({
101
+ "table": self.table,
102
+ "query": query,
103
+ "columns": self._columns,
104
+ })
76
105
 
77
- # "contentValues":{"partition_id":"0","sensorgroup":"safetymotion","sensorstatus":"Idle"}"
106
+ if self._abort_on_error:
107
+ raise error from err
78
108
 
79
- # Panel is sending query parameter for db update in text string
80
- # Have not found a way to make it work with parametrized query yet
81
- # Using f string concat for moment ...
109
+ def update(self, selection: str, selection_argument: str, content_value: str) -> None:
110
+ # selection: 'zone_id=?, parition_id=?'
111
+ # Firmware 4.4.1: selection_argument: '[3,1]'
112
+ # Firmware 4.6.1: selection_argument: ['3','1']
113
+ # contentValues:{"partition_id":"0","sensorgroup":"safetymotion","sensorstatus":"Idle"}"
82
114
 
83
115
  # New Values to update in table
84
- # To change for parametrized
85
116
  db_value = ",".join([f"{key}='{value}'" for key, value in content_value.items()])
86
117
 
87
118
  # Selection Argument
@@ -109,15 +140,12 @@ class QolsysTable:
109
140
  if self._abort_on_error:
110
141
  raise error from err
111
142
 
112
- def insert(self) -> None:
113
- pass
114
-
115
143
  def delete(self, selection: str, selection_argument: str) -> None:
116
144
  # selection: 'zone_id=?, parition_id=?'
117
- # selection_argument: '[3,1]'
145
+ # Firmware 4.4.1: selection_argument: '[3,1]'
146
+ # Firmware 4.6.1: selection_argument: ['3','1']
118
147
 
119
148
  # Selection Argument
120
- # Panel send selection_argument as list in Firmware 4.6.1
121
149
  if(type(selection_argument) is not list):
122
150
  #Firmware 4.4.1, seletion_argument is sent as a string
123
151
  selection_argument = selection_argument.strip("[]")
@@ -13,6 +13,8 @@ class QolsysTableAlarmedSensor(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.AlarmedSensorProvider/alarmedsensor"
14
14
  self._table = "alarmedsensor"
15
15
  self._abort_on_error = True
16
+ self._implemented = True
17
+
16
18
 
17
19
  self._columns = [
18
20
  "_id",
@@ -25,22 +27,7 @@ class QolsysTableAlarmedSensor(QolsysTable):
25
27
  "type",
26
28
  "priority",
27
29
  "aseb_type",
30
+ "alarm_time",
28
31
  ]
29
32
 
30
33
  self._create_table()
31
-
32
- def insert(self, data: dict) -> None:
33
- self._cursor.execute(f"""INSERT INTO {self.table} (_id,partition_id,silenced,zone_id,sgroup,action,timed_out,type,
34
- priority,aseb_type) VALUES (?,?,?,?,?,?,?,?,?,?)""", (
35
- data.get("_id"),
36
- data.get("partition_id", ""),
37
- data.get("silenced", ""),
38
- data.get("zone_id", ""),
39
- data.get("sgroup", ""),
40
- data.get("action", ""),
41
- data.get("timed_out", ""),
42
- data.get("type", ""),
43
- data.get("priority", ""),
44
- data.get("aseb_type", "")))
45
-
46
- self._db.commit()
@@ -0,0 +1,46 @@
1
+ import logging # noqa: INP001
2
+ import sqlite3
3
+
4
+ from .table import QolsysTable
5
+
6
+ LOGGER = logging.getLogger(__name__)
7
+
8
+
9
+ class QolsysTableAutomation(QolsysTable):
10
+
11
+ def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
12
+ super().__init__(db, cursor)
13
+ self._uri = "content://com.qolsys.qolsysprovider.AutomationDeviceContentProvider/automation"
14
+ self._table = "automation"
15
+ self._abort_on_error = False
16
+ self._implemented = True
17
+
18
+ self._columns = [
19
+ "_id",
20
+ "virtual_node_id",
21
+ "version",
22
+ "opr",
23
+ "partition_id",
24
+ "end_point",
25
+ "extras",
26
+ "is_autolocking_enabled",
27
+ "device_type",
28
+ "endpoint_secure_cmd_classes",
29
+ "automation_id",
30
+ "device_name",
31
+ "protocol",
32
+ "node_battery_level_value",
33
+ "state",
34
+ "last_updated_date",
35
+ "manufacturer_id",
36
+ "endpoint_cmd_classes",
37
+ "device_id",
38
+ "nodeid_cmd_classes",
39
+ "is_device_hidden",
40
+ "nodeid_secure_cmd_classes",
41
+ "created_date",
42
+ "status",
43
+ "smart_energy_optimizer",
44
+ ]
45
+
46
+ self._create_table()
@@ -0,0 +1,37 @@
1
+ import logging # noqa: INP001
2
+ import sqlite3
3
+
4
+ from .table import QolsysTable
5
+
6
+ LOGGER = logging.getLogger(__name__)
7
+
8
+
9
+ class QolsysTableCountryLocale(QolsysTable):
10
+
11
+ def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
12
+ super().__init__(db, cursor)
13
+ self._uri = "content://com.qolsys.qolsysprovider.CountryLocaleContentProvider/country_locale"
14
+ self._table = "country_locale"
15
+ self._abort_on_error = False
16
+ self._implemented = True
17
+
18
+ self._columns = [
19
+ "_id",
20
+ "version",
21
+ "opr",
22
+ "partition_id",
23
+ "country",
24
+ "language",
25
+ "alpha2_code",
26
+ "language_code",
27
+ "date_format_enum",
28
+ "hour_format",
29
+ "temp_format",
30
+ "is_active",
31
+ "date_separator",
32
+ "zwave_region_frequency_code",
33
+ "zwave_region_frequency",
34
+ "zwave_region_prop_values",
35
+ ]
36
+
37
+ self._create_table()
@@ -13,6 +13,8 @@ class QolsysTableDashboardMsgs(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.DashboardMessagesContentProvider/dashboard_msgs"
14
14
  self._table = "dashboard_msgs"
15
15
  self._abort_on_error = False
16
+ self._implemented = True
17
+
16
18
 
17
19
  self._columns = [
18
20
  "_id",
@@ -30,21 +32,3 @@ class QolsysTableDashboardMsgs(QolsysTable):
30
32
  ]
31
33
 
32
34
  self._create_table()
33
-
34
- def insert(self, data: dict) -> None:
35
- self._cursor.execute(f"""INSERT INTO {self.table} (_id,version,opr,partition_id,msg_id,title,description,
36
- received_time,start_time,end_time,read,mime_type) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)""", (
37
- data.get("_id"),
38
- data.get("version"),
39
- data.get("opr"),
40
- data.get("partition_id"),
41
- data.get("msg_id"),
42
- data.get("title"),
43
- data.get("description"),
44
- data.get("received_time"),
45
- data.get("start_time"),
46
- data.get("end_time"),
47
- data.get("read"),
48
- data.get("mime_type")))
49
-
50
- self._db.commit()
@@ -0,0 +1,36 @@
1
+ import logging # noqa: INP001
2
+ import sqlite3
3
+
4
+ from .table import QolsysTable
5
+
6
+ LOGGER = logging.getLogger(__name__)
7
+
8
+
9
+ class QolsysTableDimmerLight(QolsysTable):
10
+
11
+ def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
12
+ super().__init__(db, cursor)
13
+ self._uri = "content://com.qolsys.qolsysprovider.DimmerLightsContentProvider/dimmerlight"
14
+ self._table = "dimmerlight"
15
+ self._abort_on_error = True
16
+ self._implemented = True
17
+
18
+ self._columns = [
19
+ "_id",
20
+ "version",
21
+ "opr",
22
+ "partition_id",
23
+ "dimmer_name",
24
+ "status",
25
+ "node_id",
26
+ "level",
27
+ "created_by",
28
+ "created_date",
29
+ "updated_by",
30
+ "last_updated_date",
31
+ "endpoint",
32
+ "power_details",
33
+ "paired_status",
34
+ ]
35
+
36
+ self._create_table()
@@ -0,0 +1,37 @@
1
+ import logging # noqa: INP001
2
+ import sqlite3
3
+
4
+ from .table import QolsysTable
5
+
6
+ LOGGER = logging.getLogger(__name__)
7
+
8
+
9
+ class QolsysTableDoorLock(QolsysTable):
10
+
11
+ def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
12
+ super().__init__(db, cursor)
13
+ self._uri = "content://com.qolsys.qolsysprovider.DoorLocksContentProvider/doorlock"
14
+ self._table = "doorlock"
15
+ self._abort_on_error = True
16
+ self._implemented = True
17
+
18
+ self._columns = [
19
+ "_id",
20
+ "version",
21
+ "opr",
22
+ "partition_id",
23
+ "doorlock_name",
24
+ "status",
25
+ "node_id",
26
+ "created_by",
27
+ "created_date",
28
+ "updated_by",
29
+ "last_updated_date",
30
+ "remote_arming",
31
+ "keyfob_arming",
32
+ "panel_arming",
33
+ "endpoint",
34
+ "paired_status",
35
+ ]
36
+
37
+ self._create_table()
@@ -13,6 +13,8 @@ class QolsysTableEuEvent(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.EUEventContentProvider/eu_event"
14
14
  self._table = "eu_event"
15
15
  self._abort_on_error = False
16
+ self._implemented = False
17
+
16
18
 
17
19
  self._columns = [
18
20
  "_id",
@@ -20,8 +22,3 @@ class QolsysTableEuEvent(QolsysTable):
20
22
 
21
23
  self._create_table()
22
24
 
23
- def insert(self, data: dict) -> None:
24
- if data is not None:
25
- LOGGER.error("Please Report")
26
- LOGGER.error("Loading Table Format: %s", self.uri)
27
- LOGGER.error(data)
@@ -13,6 +13,7 @@ class QolsysTableHeatMap(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.HeatMapContentProvider/heat_map"
14
14
  self._table = "heat_map"
15
15
  self._abort_on_error = False
16
+ self._implemented = True
16
17
 
17
18
  self._columns = [
18
19
  "_id",
@@ -28,17 +29,3 @@ class QolsysTableHeatMap(QolsysTable):
28
29
 
29
30
  self._create_table()
30
31
 
31
- def insert(self, data: dict) -> None:
32
- self._cursor.execute(f"""INSERT INTO {self.table} (_id,version,opr,partition_id,userid,fragment_id,element_id,
33
- count,time_stamp) VALUES (?,?,?,?,?,?,?,?,?)""", (
34
- data.get("_id"),
35
- data.get("version", ""),
36
- data.get("opr", ""),
37
- data.get("partition_id", ""),
38
- data.get("userid", ""),
39
- data.get("fragment_id", ""),
40
- data.get("element_id", ""),
41
- data.get("count", ""),
42
- data.get("time_stamp", "")))
43
-
44
- self._db.commit()
@@ -13,6 +13,7 @@ class QolsysTableHistory(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.HistoryContentProvider/history"
14
14
  self._table = "history"
15
15
  self._abort_on_error = False
16
+ self._implemented = True
16
17
 
17
18
  self._columns = [
18
19
  "_id",
@@ -25,24 +26,8 @@ class QolsysTableHistory(QolsysTable):
25
26
  "ack",
26
27
  "type",
27
28
  "feature1",
29
+ "feature2",
28
30
  "device_id",
29
31
  ]
30
32
 
31
33
  self._create_table()
32
-
33
- def insert(self, data: dict) -> None:
34
- self._cursor.execute(f"""INSERT INTO {self.table} (_id,version,opr,partition_id,device,events,time,ack,type,
35
- feature1,device_id) VALUES (?,?,?,?,?,?,?,?,?,?,?)""", (
36
- data.get("_id"),
37
- data.get("version", ""),
38
- data.get("opr", ""),
39
- data.get("partition_id", ""),
40
- data.get("device", ""),
41
- data.get("events", ""),
42
- data.get("time", ""),
43
- data.get("ack", ""),
44
- data.get("type", ""),
45
- data.get("feature1", ""),
46
- data.get("device_id", "")))
47
-
48
- self._db.commit()
@@ -13,6 +13,7 @@ class QolsysTableIqRemoteSettings(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.IQRemoteSettingsContentProvider/iqremotesettings"
14
14
  self._table = "iqremotesettings"
15
15
  self._abort_on_error = False
16
+ self._implemented = True
16
17
 
17
18
  self._columns = [
18
19
  "_id",
@@ -27,16 +28,3 @@ class QolsysTableIqRemoteSettings(QolsysTable):
27
28
 
28
29
  self._create_table()
29
30
 
30
- def insert(self, data: dict) -> None:
31
- self._cursor.execute(f"""INSERT INTO {self.table} (_id,version,opr,partition_id,zone_id,mac_address,name,value)
32
- VALUES (?,?,?,?,?,?,?,?)""", (
33
- data.get("_id"),
34
- data.get("version", ""),
35
- data.get("opr", ""),
36
- data.get("partition_id", ""),
37
- data.get("zone_id", ""),
38
- data.get("mac_address", ""),
39
- data.get("name", ""),
40
- data.get("value", "")))
41
-
42
- self._db.commit()
@@ -13,15 +13,10 @@ class QolsysTableIqRouterNetworkConfig(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.IQRouterNetworkConfigContentProvider/iqrouter_network_config_table"
14
14
  self._table = "iqrouter_network_config_table"
15
15
  self._abort_on_error = False
16
+ self._implemented = False
16
17
 
17
18
  self._columns = [
18
19
  "_id",
19
20
  ]
20
21
 
21
22
  self._create_table()
22
-
23
- def insert(self, data: dict) -> None:
24
- if data is not None:
25
- LOGGER.error("Please Report")
26
- LOGGER.error("Loading Table Format: %s", self.uri)
27
- LOGGER.error(data)
@@ -13,15 +13,11 @@ class QolsysTableIqRouterUserDevice(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.IQRouterUserDeviceContentProvider/iqrouter_user_device_table"
14
14
  self._table = "iqrouter_user_device_table"
15
15
  self._abort_on_error = False
16
+ self._implemented = False
17
+
16
18
 
17
19
  self._columns = [
18
20
  "_id",
19
21
  ]
20
22
 
21
23
  self._create_table()
22
-
23
- def insert(self, data: dict) -> None:
24
- if data is not None:
25
- LOGGER.error("Please Report")
26
- LOGGER.error("Loading Table Format: %s", self.uri)
27
- LOGGER.error(data)
@@ -0,0 +1,44 @@
1
+ import logging # noqa: INP001
2
+ import sqlite3
3
+
4
+ from .table import QolsysTable
5
+
6
+ LOGGER = logging.getLogger(__name__)
7
+
8
+
9
+ class QolsysTableMasterSlave(QolsysTable):
10
+
11
+ def __init__(self, db: sqlite3.Connection, cursor: sqlite3.Cursor) -> None:
12
+ super().__init__(db, cursor)
13
+ self._uri = "content://com.qolsys.qolsysprovider.MasterSlaveContentProvider/master_slave"
14
+ self._table = "master_slave"
15
+ self._abort_on_error = False
16
+ self._implemented = True
17
+
18
+ self._columns = [
19
+ "_id",
20
+ "version",
21
+ "opr",
22
+ "partition_id",
23
+ "zone_id",
24
+ "ip_address",
25
+ "mac_address",
26
+ "device_type",
27
+ "created_by",
28
+ "created_date",
29
+ "updated_by",
30
+ "last_updated_date",
31
+ "status",
32
+ "device_name",
33
+ "last_updated_iq_remote_checksum",
34
+ "software_version",
35
+ "upgrade_status",
36
+ "name",
37
+ "bssid",
38
+ "ssid",
39
+ "dhcpInfo",
40
+ "topology",
41
+ "reboot_reason",
42
+ ]
43
+
44
+ self._create_table()
@@ -13,15 +13,10 @@ class QolsysTableNestDevice(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.NestDeviceContentProvider/nest_device"
14
14
  self._table = "nest_device"
15
15
  self._abort_on_error = False
16
+ self._implemented = False
16
17
 
17
18
  self._columns = [
18
19
  "_id",
19
20
  ]
20
21
 
21
22
  self._create_table()
22
-
23
- def insert(self, data: dict) -> None:
24
- if data is not None:
25
- LOGGER.error("Please Report")
26
- LOGGER.error("Loading Table Format: %s", self.uri)
27
- LOGGER.error(data)
@@ -13,15 +13,10 @@ class QolsysTableOutputRules(QolsysTable):
13
13
  self._uri = "content://com.qolsys.qolsysprovider.OutputRulesContentProvider/output_rules"
14
14
  self._table = "output_rules"
15
15
  self._abort_on_error = False
16
+ self._implemented = False
16
17
 
17
18
  self._columns = [
18
19
  "_id",
19
20
  ]
20
21
 
21
22
  self._create_table()
22
-
23
- def insert(self, data: dict) -> None:
24
- if data is not None:
25
- LOGGER.error("Please Report")
26
- LOGGER.error("Loading Table Format: %s", self.uri)
27
- LOGGER.error(data)