@homebridge-plugins/homebridge-resideo 2.1.7-beta.0

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 (87) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug-report.yml +97 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. package/.github/ISSUE_TEMPLATE/feature-request.yml +38 -0
  5. package/.github/ISSUE_TEMPLATE/support-request.yml +85 -0
  6. package/.github/ISSUE_TEMPLATE.md +52 -0
  7. package/.github/PULL_REQUEST_TEMPLATE/pull_request.md +27 -0
  8. package/.github/auto-merge.yml +3 -0
  9. package/.github/dependabot.yml +17 -0
  10. package/.github/labeler.yml +38 -0
  11. package/.github/npm-version-script-esm.js +85 -0
  12. package/.github/release-drafter.yml +33 -0
  13. package/.github/workflows/beta-release.yml +55 -0
  14. package/.github/workflows/build.yml +18 -0
  15. package/.github/workflows/changerelease.yml +11 -0
  16. package/.github/workflows/labeler.yml +9 -0
  17. package/.github/workflows/release-drafter.yml +14 -0
  18. package/.github/workflows/release.yml +35 -0
  19. package/.github/workflows/stale.yml +12 -0
  20. package/CHANGELOG.md +161 -0
  21. package/LICENSE +14 -0
  22. package/README.md +67 -0
  23. package/SECURITY.md +19 -0
  24. package/branding/Homebridge_x_Resideo.svg +28 -0
  25. package/branding/honeywell/Homebridge_x_Honeywell.svg +1 -0
  26. package/branding/honeywell/homebridge-honeywell-home-changelog.md +851 -0
  27. package/branding/icon.png +0 -0
  28. package/config.schema.json +611 -0
  29. package/dist/devices/device.d.ts +41 -0
  30. package/dist/devices/device.d.ts.map +1 -0
  31. package/dist/devices/device.js +279 -0
  32. package/dist/devices/device.js.map +1 -0
  33. package/dist/devices/leaksensors.d.ts +34 -0
  34. package/dist/devices/leaksensors.d.ts.map +1 -0
  35. package/dist/devices/leaksensors.js +300 -0
  36. package/dist/devices/leaksensors.js.map +1 -0
  37. package/dist/devices/roomsensors.d.ts +38 -0
  38. package/dist/devices/roomsensors.d.ts.map +1 -0
  39. package/dist/devices/roomsensors.js +274 -0
  40. package/dist/devices/roomsensors.js.map +1 -0
  41. package/dist/devices/roomsensorthermostats.d.ts +57 -0
  42. package/dist/devices/roomsensorthermostats.d.ts.map +1 -0
  43. package/dist/devices/roomsensorthermostats.js +700 -0
  44. package/dist/devices/roomsensorthermostats.js.map +1 -0
  45. package/dist/devices/thermostats.d.ts +73 -0
  46. package/dist/devices/thermostats.d.ts.map +1 -0
  47. package/dist/devices/thermostats.js +930 -0
  48. package/dist/devices/thermostats.js.map +1 -0
  49. package/dist/devices/valve.d.ts +21 -0
  50. package/dist/devices/valve.d.ts.map +1 -0
  51. package/dist/devices/valve.js +151 -0
  52. package/dist/devices/valve.js.map +1 -0
  53. package/dist/homebridge-ui/public/index.html +423 -0
  54. package/dist/homebridge-ui/server.d.ts +2 -0
  55. package/dist/homebridge-ui/server.d.ts.map +1 -0
  56. package/dist/homebridge-ui/server.js +131 -0
  57. package/dist/homebridge-ui/server.js.map +1 -0
  58. package/dist/index.d.ts +4 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +7 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/platform.d.ts +94 -0
  63. package/dist/platform.d.ts.map +1 -0
  64. package/dist/platform.js +890 -0
  65. package/dist/platform.js.map +1 -0
  66. package/dist/settings.d.ts +409 -0
  67. package/dist/settings.d.ts.map +1 -0
  68. package/dist/settings.js +25 -0
  69. package/dist/settings.js.map +1 -0
  70. package/dist/utils.d.ts +21 -0
  71. package/dist/utils.d.ts.map +1 -0
  72. package/dist/utils.js +58 -0
  73. package/dist/utils.js.map +1 -0
  74. package/docs/.nojekyll +1 -0
  75. package/docs/assets/highlight.css +22 -0
  76. package/docs/assets/icons.js +18 -0
  77. package/docs/assets/icons.svg +1 -0
  78. package/docs/assets/main.js +60 -0
  79. package/docs/assets/navigation.js +1 -0
  80. package/docs/assets/search.js +1 -0
  81. package/docs/assets/style.css +1493 -0
  82. package/docs/functions/default.html +1 -0
  83. package/docs/index.html +73 -0
  84. package/docs/modules.html +2 -0
  85. package/eslint.config.js +50 -0
  86. package/package.json +102 -0
  87. package/typedoc.json +22 -0
Binary file
@@ -0,0 +1,611 @@
1
+ {
2
+ "pluginAlias": "Resideo",
3
+ "pluginType": "platform",
4
+ "singular": true,
5
+ "customUi": true,
6
+ "customUiPath": "./dist/homebridge-ui",
7
+ "headerDisplay": "<p align='center'><img width='250px' src='https://user-images.githubusercontent.com/3979615/71876008-d99d7400-3179-11ea-909b-9d2a3d1e670f.png'></p>\n\nThe **Homebridge Resideo** plugin allows you to control Resideo thermostats and also view your Leak and Room Sensors from HomeKit. \n\nTo get started link your Resideo account using the button below.",
8
+ "footerDisplay": "Your Resideo account has been linked. Please raise any issues on our [project page](https://github.com/homebridge-plugins/homebridge-resideo/issues).\n\nIf you would like to have other Resideo Devices besides Thermostat, Leak Sensors, or Room Sensors added to this plugin fill out [Feature Request Form](https://github.com/homebridge-plugins/homebridge-resideo/issues/new?assignees=&labels=&template=feature_request.md).",
9
+ "schema": {
10
+ "type": "object",
11
+ "properties": {
12
+ "name": {
13
+ "type": "string",
14
+ "title": "Name",
15
+ "default": "Resideo"
16
+ },
17
+ "credentials": {
18
+ "type": "object",
19
+ "properties": {
20
+ "consumerKey": {
21
+ "title": "Consumer Key",
22
+ "type": "string",
23
+ "x-schema-form": {
24
+ "type": "consumerKey"
25
+ }
26
+ },
27
+ "consumerSecret": {
28
+ "title": "Consumer Secret",
29
+ "type": "string",
30
+ "x-schema-form": {
31
+ "type": "customerSecret"
32
+ }
33
+ },
34
+ "refreshToken": {
35
+ "title": "Refresh Token",
36
+ "type": "string",
37
+ "x-schema-form": {
38
+ "type": "refreshToken"
39
+ }
40
+ },
41
+ "notice": {
42
+ "title": "Notice",
43
+ "type": "string",
44
+ "default": "Keep your tokens a secret!"
45
+ }
46
+ },
47
+ "required": ["consumerKey", "consumerSecret", "refreshToken", "notice"]
48
+ },
49
+ "options": {
50
+ "type": "object",
51
+ "properties": {
52
+ "devices": {
53
+ "type": "array",
54
+ "items": {
55
+ "title": "Devices",
56
+ "type": "object",
57
+ "properties": {
58
+ "deviceID": {
59
+ "title": "Device ID",
60
+ "type": "string",
61
+ "placeholder": "81F3UT59513F"
62
+ },
63
+ "configDeviceName": {
64
+ "title": "Device Name",
65
+ "type": "string",
66
+ "pattern": "^[a-zA-Z0-9]+([a-zA-Z0-9 ]*[a-zA-Z0-9]+)?$",
67
+ "placeholder": "Hallway Thermostat",
68
+ "condition": {
69
+ "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceID);"
70
+ }
71
+ },
72
+ "hide_device": {
73
+ "title": "Hide Device",
74
+ "type": "boolean",
75
+ "condition": {
76
+ "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceID);"
77
+ }
78
+ },
79
+ "deviceClass": {
80
+ "title": "Device Class",
81
+ "type": "string",
82
+ "oneOf": [
83
+ {
84
+ "title": "Thermostat",
85
+ "enum": ["Thermostat"]
86
+ },
87
+ {
88
+ "title": "Leak Sensor",
89
+ "enum": ["LeakDetector"]
90
+ },
91
+ {
92
+ "title": "Shut Off Valve",
93
+ "enum": ["ShutoffValve"]
94
+ }
95
+ ],
96
+ "condition": {
97
+ "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceID && !model.options.devices[arrayIndices].hide_device);"
98
+ }
99
+ },
100
+ "deviceModel": {
101
+ "title": "Thermostat Model",
102
+ "type": "string",
103
+ "placeholder": "T5",
104
+ "typeahead": {
105
+ "source": ["T9", "T10", "T5", "T6", "Round"]
106
+ },
107
+ "condition": {
108
+ "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceID && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat');"
109
+ }
110
+ },
111
+ "thermostat": {
112
+ "type": "object",
113
+ "properties": {
114
+ "show_auto": {
115
+ "title": "Show Auto Mode",
116
+ "description": "Will show Auto mode, even if device API doesn't show it.",
117
+ "type": "boolean",
118
+ "condition": {
119
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID);"
120
+ }
121
+ },
122
+ "hide_fan": {
123
+ "title": "Hide Thermostat Fan",
124
+ "type": "boolean",
125
+ "condition": {
126
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID);"
127
+ }
128
+ },
129
+ "hide_humidity": {
130
+ "title": "Hide Thermostat Humidity Service",
131
+ "type": "boolean",
132
+ "condition": {
133
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID);"
134
+ }
135
+ },
136
+ "statefulStatus": {
137
+ "title": "Enable Stateful Programmable Switch (Only Works in 3rd Party Home Apps) for Automations on NoHold, TemporaryHold, PermanentHold",
138
+ "type": "boolean",
139
+ "condition": {
140
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID);"
141
+ }
142
+ },
143
+ "thermostatSetpointStatus": {
144
+ "title": "Thermostat Setpoint Status (LCC Devices Only)",
145
+ "type": "string",
146
+ "description": "[PermanentHold] will hold the setpoint until user requests another change.\n[NoHold] will return to schedule.\n[TemporaryHold] will hold the set temperature until next schedule.",
147
+ "placeholder": "PermanentHold",
148
+ "oneOf": [
149
+ {
150
+ "title": "Permanent Hold",
151
+ "enum": ["PermanentHold"]
152
+ },
153
+ {
154
+ "title": "No Hold",
155
+ "enum": ["NoHold"]
156
+ },
157
+ {
158
+ "title": "Temporary Hold",
159
+ "enum": ["TemporaryHold"]
160
+ }
161
+ ],
162
+ "condition": {
163
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10' || model.options.devices[arrayIndices].deviceModel === 'T5' || model.options.devices[arrayIndices].deviceModel === 'T6'));"
164
+ }
165
+ },
166
+ "roompriority": {
167
+ "title": "Room Priority Settings (T9-T10 Only)",
168
+ "type": "object",
169
+ "properties": {
170
+ "deviceType": {
171
+ "title": "Display As",
172
+ "type": "string",
173
+ "oneOf": [
174
+ {
175
+ "title": "Thermostat",
176
+ "enum": ["Thermostat"]
177
+ }
178
+ ],
179
+ "condition": {
180
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
181
+ }
182
+ },
183
+ "priorityType": {
184
+ "title": "Priority Type",
185
+ "type": "string",
186
+ "placeholder": "PickARoom",
187
+ "oneOf": [
188
+ {
189
+ "title": "Pick A Room",
190
+ "enum": ["PickARoom"]
191
+ },
192
+ {
193
+ "title": "Whole House",
194
+ "enum": ["WholeHouse"]
195
+ },
196
+ {
197
+ "title": "Follow Me",
198
+ "enum": ["FollowMe"]
199
+ }
200
+ ],
201
+ "condition": {
202
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
203
+ }
204
+ },
205
+ "refreshRate": {
206
+ "title": "Room Sensor Thermostat Refresh Rate",
207
+ "type": "number",
208
+ "minimum": 30,
209
+ "placeholder": 360,
210
+ "description": "Indicates the number of seconds between polls of Resideo API.",
211
+ "condition": {
212
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
213
+ }
214
+ },
215
+ "pushRate": {
216
+ "title": "Room Sensor Thermostat Push Rate",
217
+ "type": "number",
218
+ "minimum": 30,
219
+ "placeholder": 360,
220
+ "description": "Indicates the number of seconds between pushes to the Resideo API.",
221
+ "condition": {
222
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
223
+ }
224
+ },
225
+ "logging": {
226
+ "title": "Room Sensor Thermostat Logging Override Setting",
227
+ "type": "string",
228
+ "required": true,
229
+ "default": "",
230
+ "oneOf": [
231
+ {
232
+ "title": "Default Logging",
233
+ "enum": [""]
234
+ },
235
+ {
236
+ "title": "Standard Logging",
237
+ "enum": ["standard"]
238
+ },
239
+ {
240
+ "title": "No Logging",
241
+ "enum": ["none"]
242
+ },
243
+ {
244
+ "title": "Debug Logging",
245
+ "enum": ["debug"]
246
+ }
247
+ ],
248
+ "condition": {
249
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
250
+ }
251
+ }
252
+ },
253
+ "required": ["deviceType", "priorityType", "logging"],
254
+ "condition": {
255
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
256
+ }
257
+ },
258
+ "roomsensor": {
259
+ "title": "Room Sensor Settings (T9-T10 Only)",
260
+ "type": "object",
261
+ "properties": {
262
+ "hide_roomsensor": {
263
+ "title": "Hide Roomsensor(s)",
264
+ "type": "boolean",
265
+ "condition": {
266
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10'));"
267
+ }
268
+ },
269
+ "hide_temperature": {
270
+ "title": "Hide Roomsensor Temperature Service",
271
+ "type": "boolean",
272
+ "condition": {
273
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
274
+ }
275
+ },
276
+ "hide_humidity": {
277
+ "title": "Hide Roomsensor Humidity Service",
278
+ "type": "boolean",
279
+ "condition": {
280
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
281
+ }
282
+ },
283
+ "hide_occupancy": {
284
+ "title": "Hide Roomsensor Occupancy Service",
285
+ "type": "boolean",
286
+ "condition": {
287
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
288
+ }
289
+ },
290
+ "refreshRate": {
291
+ "title": "Room Sensor Refresh Rate",
292
+ "type": "number",
293
+ "minimum": 30,
294
+ "placeholder": 360,
295
+ "description": "Indicates the number of seconds between polls of Resideo API.",
296
+ "condition": {
297
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
298
+ }
299
+ },
300
+ "pushRate": {
301
+ "title": "Room Sensor Push Rate",
302
+ "type": "number",
303
+ "minimum": 30,
304
+ "placeholder": 360,
305
+ "description": "Indicates the number of seconds between pushes to the Resideo API.",
306
+ "condition": {
307
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
308
+ }
309
+ },
310
+ "logging": {
311
+ "title": "Room Sensor Logging Override Setting",
312
+ "type": "string",
313
+ "required": true,
314
+ "default": "",
315
+ "oneOf": [
316
+ {
317
+ "title": "Default Logging",
318
+ "enum": [""]
319
+ },
320
+ {
321
+ "title": "Standard Logging",
322
+ "enum": ["standard"]
323
+ },
324
+ {
325
+ "title": "No Logging",
326
+ "enum": ["none"]
327
+ },
328
+ {
329
+ "title": "Debug Logging",
330
+ "enum": ["debug"]
331
+ }
332
+ ],
333
+ "condition": {
334
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
335
+ }
336
+ }
337
+ },
338
+ "condition": {
339
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && (model.options.devices[arrayIndices].deviceModel === 'T9' || model.options.devices[arrayIndices].deviceModel === 'T10') && !model.options.devices[arrayIndices].thermostat.roomsensor.hide_roomsensor);"
340
+ },
341
+ "required": ["logging"]
342
+ }
343
+ }
344
+ },
345
+ "leaksensor": {
346
+ "title": "Leak Sensor",
347
+ "type": "object",
348
+ "properties": {
349
+ "hide_leak": {
350
+ "title": "Hide Leak Service",
351
+ "type": "boolean",
352
+ "condition": {
353
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'LeakDetector' && model.options.devices[arrayIndices].deviceID);"
354
+ }
355
+ },
356
+ "hide_temperature": {
357
+ "title": "Hide Temperature Service",
358
+ "type": "boolean",
359
+ "condition": {
360
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'LeakDetector' && model.options.devices[arrayIndices].deviceID);"
361
+ }
362
+ },
363
+ "hide_humidity": {
364
+ "title": "Hide Humidity Service",
365
+ "type": "boolean",
366
+ "condition": {
367
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'LeakDetector' && model.options.devices[arrayIndices].deviceID);"
368
+ }
369
+ }
370
+ }
371
+ },
372
+ "retry": {
373
+ "title": "Retry",
374
+ "type": "boolean",
375
+ "description": "Retry after receiving a Resideo API Error.",
376
+ "condition": {
377
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID);"
378
+ }
379
+ },
380
+ "external": {
381
+ "title": "External Accessory",
382
+ "type": "boolean",
383
+ "condition": {
384
+ "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceID && !model.options.devices[arrayIndices].hide_device);"
385
+ }
386
+ },
387
+ "firmware": {
388
+ "title": "Firmware Override",
389
+ "type": "string",
390
+ "placeholder": "1.2.8",
391
+ "condition": {
392
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceID);"
393
+ }
394
+ },
395
+ "refreshRate": {
396
+ "title": "Device Refresh Rate",
397
+ "type": "number",
398
+ "minimum": 30,
399
+ "placeholder": 360,
400
+ "description": "Indicates the number of seconds between polls of Resideo API.",
401
+ "condition": {
402
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].deviceClass === 'Thermostat' || model.options.devices[arrayIndices].deviceClass === 'LeakDetector') && model.options.devices[arrayIndices].deviceID);"
403
+ }
404
+ },
405
+ "pushRate": {
406
+ "title": "Device Push Rate",
407
+ "type": "number",
408
+ "placeholder": 1,
409
+ "description": "Indicates the number of seconds between pushes to the of Resideo API.",
410
+ "condition": {
411
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].deviceClass === 'Thermostat' || model.options.devices[arrayIndices].deviceClass === 'LeakDetector') && model.options.devices[arrayIndices].deviceID);"
412
+ }
413
+ },
414
+ "logging": {
415
+ "title": "Device Logging Override Setting",
416
+ "type": "string",
417
+ "required": true,
418
+ "default": "",
419
+ "oneOf": [
420
+ {
421
+ "title": "Default Logging",
422
+ "enum": [""]
423
+ },
424
+ {
425
+ "title": "Standard Logging",
426
+ "enum": ["standard"]
427
+ },
428
+ {
429
+ "title": "No Logging",
430
+ "enum": ["none"]
431
+ },
432
+ {
433
+ "title": "Debug Logging",
434
+ "enum": ["debug"]
435
+ }
436
+ ],
437
+ "condition": {
438
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].deviceClass === 'Thermostat' || model.options.devices[arrayIndices].deviceClass === 'LeakDetector') && model.options.devices[arrayIndices].deviceID);"
439
+ }
440
+ }
441
+ },
442
+ "required": ["deviceID", "deviceClass", "logging"]
443
+ }
444
+ },
445
+ "refreshRate": {
446
+ "title": "Refresh Rate",
447
+ "type": "number",
448
+ "minimum": 30,
449
+ "placeholder": 120,
450
+ "description": "Indicates the number of seconds between polls of the Resideo service."
451
+ },
452
+ "pushRate": {
453
+ "title": "Push Rate",
454
+ "type": "number",
455
+ "placeholder": 1,
456
+ "description": "Indicates the number of seconds between pushes to Honewell Home API."
457
+ },
458
+ "logging": {
459
+ "title": "Logging Setting",
460
+ "type": "string",
461
+ "required": true,
462
+ "default": "",
463
+ "oneOf": [
464
+ {
465
+ "title": "Default Logging",
466
+ "enum": [""]
467
+ },
468
+ {
469
+ "title": "Standard Logging",
470
+ "enum": ["standard"]
471
+ },
472
+ {
473
+ "title": "No Logging",
474
+ "enum": ["none"]
475
+ },
476
+ {
477
+ "title": "Debug Logging",
478
+ "enum": ["debug"]
479
+ }
480
+ ]
481
+ },
482
+ "allowInvalidCharacters": {
483
+ "title": "Allow Invalid Characters",
484
+ "type": "boolean",
485
+ "description": "If true, invalid characters will be allowed in the device name."
486
+ }
487
+ },
488
+ "required": ["logging"]
489
+ }
490
+ },
491
+ "required": ["name", "credentials"]
492
+ },
493
+ "layout": [
494
+ {
495
+ "type": "fieldset",
496
+ "title": "Resideo Account Info",
497
+ "expandable": true,
498
+ "expanded": false,
499
+ "items": [
500
+ {
501
+ "type": "help",
502
+ "helpvalue": "<h5></h5><em class='primary-text'>This is for Manual Setup Only.</em>"
503
+ },
504
+ "credentials.consumerKey",
505
+ "credentials.consumerSecret",
506
+ "credentials.refreshToken"
507
+ ]
508
+ },
509
+ {
510
+ "type": "fieldset",
511
+ "title": "Resideo Device Settings",
512
+ "expandable": true,
513
+ "expanded": false,
514
+ "items": [
515
+ {
516
+ "key": "options.devices",
517
+ "notitle": true,
518
+ "type": "tabarray",
519
+ "title": "{{ value.configDeviceName || value.deviceID || 'New Resideo Device' }}",
520
+ "expandable": true,
521
+ "expanded": false,
522
+ "orderable": false,
523
+ "items": [
524
+ "options.devices[].configDeviceName",
525
+ "options.devices[].deviceID",
526
+ "options.devices[].hide_device",
527
+ "options.devices[].deviceClass",
528
+ "options.devices[].deviceModel",
529
+ "options.devices[].thermostat.show_auto",
530
+ "options.devices[].thermostat.hide_fan",
531
+ "options.devices[].thermostat.hide_humidity",
532
+ "options.devices[].thermostat.thermostatSetpointStatus",
533
+ "options.devices[].leaksensor.hide_leak",
534
+ "options.devices[].leaksensor.hide_temperature",
535
+ "options.devices[].leaksensor.hide_humidity",
536
+ {
537
+ "key": "options.devices[].thermostat.roompriority",
538
+ "type": "fieldset",
539
+ "expandable": true,
540
+ "expanded": false,
541
+ "items": [
542
+ "options.devices[].thermostat.roompriority.deviceType",
543
+ "options.devices[].thermostat.roompriority.priorityType",
544
+ {
545
+ "key": "options.devices[].thermostat.roompriority.refreshRate",
546
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the Resido API. This interval applies only to this specific device's roompriority Thermostat(s).</em>"
547
+ },
548
+ {
549
+ "key": "options.devices[].thermostat.roompriority.pushRate",
550
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API for this specific device's roompriority Thermostat(s).</em>"
551
+ },
552
+ "options.devices[].thermostat.roompriority.logging"
553
+ ]
554
+ },
555
+ {
556
+ "key": "options.devices[].thermostat.roomsensor",
557
+ "type": "fieldset",
558
+ "expandable": true,
559
+ "expanded": false,
560
+ "items": [
561
+ "options.devices[].thermostat.roomsensor.hide_roomsensor",
562
+ "options.devices[].thermostat.roomsensor.hide_temperature",
563
+ "options.devices[].thermostat.roomsensor.hide_humidity",
564
+ "options.devices[].thermostat.roomsensor.hide_occupancy",
565
+ {
566
+ "key": "options.devices[].thermostat.roomsensor.refreshRate",
567
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the Resido API. This interval applies only to this specific device's roomsensor(s).</em>"
568
+ },
569
+ {
570
+ "key": "options.devices[].thermostat.roomsensor.pushRate",
571
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API for this specific device's roomsensor(s).</em>"
572
+ },
573
+ "options.devices[].thermostat.roomsensor.logging"
574
+ ]
575
+ },
576
+ "options.devices[].retry",
577
+ "options.devices[].firmware",
578
+ "options.devices[].external",
579
+ {
580
+ "key": "options.devices[].refreshRate",
581
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the Resido API. This interval applies only to this specific device.</em>"
582
+ },
583
+ {
584
+ "key": "options.devices[].pushRate",
585
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API for this specific device.</em>"
586
+ },
587
+ "options.devices[].logging"
588
+ ]
589
+ }
590
+ ]
591
+ },
592
+ {
593
+ "type": "fieldset",
594
+ "title": "Advanced Settings",
595
+ "expandable": true,
596
+ "expanded": false,
597
+ "items": [
598
+ {
599
+ "key": "options.refreshRate",
600
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the Resido API.</em>"
601
+ },
602
+ {
603
+ "key": "options.pushRate",
604
+ "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API.</em>"
605
+ },
606
+ "options.logging",
607
+ "options.allowInvalidCharacters"
608
+ ]
609
+ }
610
+ ]
611
+ }
@@ -0,0 +1,41 @@
1
+ import type { API, HAP, Logging, PlatformAccessory } from 'homebridge';
2
+ import type { ResideoPlatform } from '../platform.js';
3
+ import type { devicesConfig, location, resideoDevice, ResideoPlatformConfig, sensorAccessory, T9groups } from '../settings.js';
4
+ export declare abstract class deviceBase {
5
+ protected readonly platform: ResideoPlatform;
6
+ protected accessory: PlatformAccessory;
7
+ protected location: location;
8
+ protected device: resideoDevice & devicesConfig;
9
+ sensorAccessory?: sensorAccessory | undefined;
10
+ readonly group?: T9groups | undefined;
11
+ readonly api: API;
12
+ readonly log: Logging;
13
+ readonly config: ResideoPlatformConfig;
14
+ protected readonly hap: HAP;
15
+ protected deviceLogging: string;
16
+ protected deviceRefreshRate: number;
17
+ protected devicePushRate: number;
18
+ protected deviceMaxRetries: number;
19
+ protected deviceDelayBetweenRetries: number;
20
+ constructor(platform: ResideoPlatform, accessory: PlatformAccessory, location: location, device: resideoDevice & devicesConfig, sensorAccessory?: sensorAccessory | undefined, group?: T9groups | undefined);
21
+ getDeviceLogSettings(accessory: PlatformAccessory, device: resideoDevice & devicesConfig): Promise<void>;
22
+ getDeviceRateSettings(accessory: PlatformAccessory, device: resideoDevice & devicesConfig): Promise<void>;
23
+ getDeviceRetry(device: resideoDevice & devicesConfig): Promise<void>;
24
+ getDeviceConfigSettings(device: resideoDevice & devicesConfig): Promise<void>;
25
+ getDeviceContext(accessory: PlatformAccessory, device: resideoDevice & devicesConfig, sensorAccessory?: sensorAccessory): Promise<void>;
26
+ statusCode(statusCode: number, action: string): Promise<void>;
27
+ resideoAPIError(e: any, action: string): Promise<void>;
28
+ /**
29
+ * Logging for Device
30
+ */
31
+ infoLog(...log: any[]): Promise<void>;
32
+ successLog(...log: any[]): Promise<void>;
33
+ debugSuccessLog(...log: any[]): Promise<void>;
34
+ warnLog(...log: any[]): Promise<void>;
35
+ debugWarnLog(...log: any[]): Promise<void>;
36
+ errorLog(...log: any[]): Promise<void>;
37
+ debugErrorLog(...log: any[]): Promise<void>;
38
+ debugLog(...log: any[]): Promise<void>;
39
+ enablingDeviceLogging(): Promise<boolean>;
40
+ }
41
+ //# sourceMappingURL=device.d.ts.map