@homebridge-plugins/homebridge-resideo 3.0.3-beta.12 → 3.0.3-beta.14
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.
- package/config.schema.json +53 -527
- package/dist/homebridge-ui/public/index.html +50 -164
- package/dist/homebridge-ui/server.d.ts +1 -0
- package/dist/homebridge-ui/server.d.ts.map +1 -1
- package/dist/homebridge-ui/server.js +122 -24
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +11 -1
- package/dist/platform.js.map +1 -1
- package/dist/resideo-options.d.ts +120 -2
- package/dist/resideo-options.d.ts.map +1 -1
- package/dist/resideo-options.js +242 -8
- package/dist/resideo-options.js.map +1 -1
- package/dist/settings.d.ts +1 -1
- package/dist/settings.d.ts.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -4,609 +4,135 @@
|
|
|
4
4
|
"singular": true,
|
|
5
5
|
"customUi": true,
|
|
6
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
|
|
8
|
-
"footerDisplay": "Your Resideo account has been linked.
|
|
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 Dynamic UI below.",
|
|
8
|
+
"footerDisplay": "Your Resideo account has been linked. Device configuration is handled through the Dynamic UI. Please raise any issues on our [project page](https://github.com/homebridge-plugins/homebridge-resideo/issues).",
|
|
9
9
|
"schema": {
|
|
10
10
|
"type": "object",
|
|
11
11
|
"properties": {
|
|
12
12
|
"name": {
|
|
13
13
|
"type": "string",
|
|
14
|
-
"title": "Name",
|
|
15
|
-
"default": "Resideo"
|
|
14
|
+
"title": "Platform Name",
|
|
15
|
+
"default": "Resideo",
|
|
16
|
+
"description": "The name that will appear in your Homebridge log."
|
|
16
17
|
},
|
|
17
18
|
"credentials": {
|
|
18
19
|
"type": "object",
|
|
20
|
+
"title": "Resideo API Credentials",
|
|
21
|
+
"description": "Your Resideo developer account credentials for API access.",
|
|
19
22
|
"properties": {
|
|
20
23
|
"consumerKey": {
|
|
21
24
|
"title": "Consumer Key",
|
|
22
25
|
"type": "string",
|
|
23
|
-
"
|
|
24
|
-
"type": "consumerKey"
|
|
25
|
-
}
|
|
26
|
+
"description": "Your Resideo developer account Consumer Key."
|
|
26
27
|
},
|
|
27
28
|
"consumerSecret": {
|
|
28
29
|
"title": "Consumer Secret",
|
|
29
30
|
"type": "string",
|
|
30
|
-
"
|
|
31
|
-
"type": "customerSecret"
|
|
32
|
-
}
|
|
31
|
+
"description": "Your Resideo developer account Consumer Secret."
|
|
33
32
|
},
|
|
34
|
-
"
|
|
35
|
-
"title": "
|
|
33
|
+
"accessToken": {
|
|
34
|
+
"title": "Access Token",
|
|
36
35
|
"type": "string",
|
|
37
|
-
"
|
|
38
|
-
"type": "refreshToken"
|
|
39
|
-
}
|
|
36
|
+
"description": "OAuth access token (automatically managed)."
|
|
40
37
|
},
|
|
41
|
-
"
|
|
42
|
-
"title": "
|
|
38
|
+
"refreshToken": {
|
|
39
|
+
"title": "Refresh Token",
|
|
43
40
|
"type": "string",
|
|
44
|
-
"
|
|
41
|
+
"description": "OAuth refresh token (automatically managed)."
|
|
45
42
|
}
|
|
46
43
|
},
|
|
47
|
-
"required": ["consumerKey", "consumerSecret"
|
|
44
|
+
"required": ["consumerKey", "consumerSecret"]
|
|
48
45
|
},
|
|
49
46
|
"options": {
|
|
50
47
|
"type": "object",
|
|
48
|
+
"title": "Global Settings",
|
|
49
|
+
"description": "Platform-wide configuration options. Device-specific settings are configured through the Dynamic UI.",
|
|
51
50
|
"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
51
|
"refreshRate": {
|
|
446
|
-
"title": "Refresh Rate",
|
|
52
|
+
"title": "Default Refresh Rate (seconds)",
|
|
447
53
|
"type": "number",
|
|
448
54
|
"minimum": 30,
|
|
449
|
-
"
|
|
450
|
-
"description": "
|
|
55
|
+
"default": 120,
|
|
56
|
+
"description": "How often to poll the Resideo API for device updates (minimum 30 seconds)."
|
|
451
57
|
},
|
|
452
58
|
"pushRate": {
|
|
453
|
-
"title": "Push Rate",
|
|
59
|
+
"title": "Default Push Rate (seconds)",
|
|
454
60
|
"type": "number",
|
|
455
|
-
"
|
|
456
|
-
"
|
|
61
|
+
"minimum": 1,
|
|
62
|
+
"default": 1,
|
|
63
|
+
"description": "Minimum time between commands sent to the Resideo API."
|
|
457
64
|
},
|
|
458
65
|
"logging": {
|
|
459
|
-
"title": "Logging
|
|
66
|
+
"title": "Global Logging Level",
|
|
460
67
|
"type": "string",
|
|
461
|
-
"
|
|
462
|
-
"default": "",
|
|
68
|
+
"default": "standard",
|
|
463
69
|
"oneOf": [
|
|
464
70
|
{
|
|
465
|
-
"title": "
|
|
466
|
-
"enum": [""]
|
|
71
|
+
"title": "None",
|
|
72
|
+
"enum": ["none"]
|
|
467
73
|
},
|
|
468
74
|
{
|
|
469
|
-
"title": "Standard
|
|
75
|
+
"title": "Standard",
|
|
470
76
|
"enum": ["standard"]
|
|
471
77
|
},
|
|
472
78
|
{
|
|
473
|
-
"title": "
|
|
474
|
-
"enum": ["none"]
|
|
475
|
-
},
|
|
476
|
-
{
|
|
477
|
-
"title": "Debug Logging",
|
|
79
|
+
"title": "Debug",
|
|
478
80
|
"enum": ["debug"]
|
|
479
81
|
}
|
|
480
|
-
]
|
|
82
|
+
],
|
|
83
|
+
"description": "Set the logging level for the entire platform."
|
|
481
84
|
},
|
|
482
85
|
"allowInvalidCharacters": {
|
|
483
|
-
"title": "Allow Invalid Characters",
|
|
86
|
+
"title": "Allow Invalid Characters in Names",
|
|
484
87
|
"type": "boolean",
|
|
485
|
-
"
|
|
88
|
+
"default": false,
|
|
89
|
+
"description": "Allow special characters in device names that might cause issues in HomeKit."
|
|
486
90
|
}
|
|
487
|
-
}
|
|
488
|
-
"required": ["logging"]
|
|
91
|
+
}
|
|
489
92
|
}
|
|
490
93
|
},
|
|
491
94
|
"required": ["name", "credentials"]
|
|
492
95
|
},
|
|
493
96
|
"layout": [
|
|
97
|
+
{
|
|
98
|
+
"type": "help",
|
|
99
|
+
"helpvalue": "<div class='alert alert-info'><h5>First-Time Setup</h5><p>This plugin uses a modern Dynamic UI powered by homebridge-plugin-utils for device configuration.</p><p><strong>Manual Configuration:</strong> If you need to manually configure credentials, expand the section below. Otherwise, use the Dynamic UI for a guided setup experience.</p></div>"
|
|
100
|
+
},
|
|
494
101
|
{
|
|
495
102
|
"type": "fieldset",
|
|
496
|
-
"title": "
|
|
103
|
+
"title": "Manual Credentials Setup (Advanced Users Only)",
|
|
497
104
|
"expandable": true,
|
|
498
105
|
"expanded": false,
|
|
499
106
|
"items": [
|
|
500
107
|
{
|
|
501
108
|
"type": "help",
|
|
502
|
-
"helpvalue": "<
|
|
109
|
+
"helpvalue": "<div class='alert alert-warning'><strong>Note:</strong> These credentials can be configured automatically through the Dynamic UI. Manual setup is only recommended for advanced users.</div>"
|
|
503
110
|
},
|
|
504
111
|
"credentials.consumerKey",
|
|
505
112
|
"credentials.consumerSecret",
|
|
113
|
+
"credentials.accessToken",
|
|
506
114
|
"credentials.refreshToken"
|
|
507
115
|
]
|
|
508
116
|
},
|
|
509
117
|
{
|
|
510
118
|
"type": "fieldset",
|
|
511
|
-
"title": "
|
|
119
|
+
"title": "Global Platform Settings",
|
|
512
120
|
"expandable": true,
|
|
513
121
|
"expanded": false,
|
|
514
122
|
"items": [
|
|
515
123
|
{
|
|
516
|
-
"
|
|
517
|
-
"
|
|
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.statefulStatus",
|
|
533
|
-
"options.devices[].thermostat.thermostatSetpointStatus",
|
|
534
|
-
"options.devices[].leaksensor.hide_leak",
|
|
535
|
-
"options.devices[].leaksensor.hide_temperature",
|
|
536
|
-
"options.devices[].leaksensor.hide_humidity",
|
|
537
|
-
{
|
|
538
|
-
"key": "options.devices[].thermostat.roompriority",
|
|
539
|
-
"type": "fieldset",
|
|
540
|
-
"expandable": true,
|
|
541
|
-
"expanded": false,
|
|
542
|
-
"items": [
|
|
543
|
-
"options.devices[].thermostat.roompriority.deviceType",
|
|
544
|
-
"options.devices[].thermostat.roompriority.priorityType",
|
|
545
|
-
{
|
|
546
|
-
"key": "options.devices[].thermostat.roompriority.refreshRate",
|
|
547
|
-
"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>"
|
|
548
|
-
},
|
|
549
|
-
{
|
|
550
|
-
"key": "options.devices[].thermostat.roompriority.pushRate",
|
|
551
|
-
"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>"
|
|
552
|
-
},
|
|
553
|
-
"options.devices[].thermostat.roompriority.logging"
|
|
554
|
-
]
|
|
555
|
-
},
|
|
556
|
-
{
|
|
557
|
-
"key": "options.devices[].thermostat.roomsensor",
|
|
558
|
-
"type": "fieldset",
|
|
559
|
-
"expandable": true,
|
|
560
|
-
"expanded": false,
|
|
561
|
-
"items": [
|
|
562
|
-
"options.devices[].thermostat.roomsensor.hide_roomsensor",
|
|
563
|
-
"options.devices[].thermostat.roomsensor.hide_temperature",
|
|
564
|
-
"options.devices[].thermostat.roomsensor.hide_humidity",
|
|
565
|
-
"options.devices[].thermostat.roomsensor.hide_occupancy",
|
|
566
|
-
{
|
|
567
|
-
"key": "options.devices[].thermostat.roomsensor.refreshRate",
|
|
568
|
-
"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>"
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
"key": "options.devices[].thermostat.roomsensor.pushRate",
|
|
572
|
-
"description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API for this specific device's roomsensor(s).</em>"
|
|
573
|
-
},
|
|
574
|
-
"options.devices[].thermostat.roomsensor.logging"
|
|
575
|
-
]
|
|
576
|
-
},
|
|
577
|
-
"options.devices[].retry",
|
|
578
|
-
"options.devices[].firmware",
|
|
579
|
-
"options.devices[].external",
|
|
580
|
-
{
|
|
581
|
-
"key": "options.devices[].refreshRate",
|
|
582
|
-
"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>"
|
|
583
|
-
},
|
|
584
|
-
{
|
|
585
|
-
"key": "options.devices[].pushRate",
|
|
586
|
-
"description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API for this specific device.</em>"
|
|
587
|
-
},
|
|
588
|
-
"options.devices[].logging"
|
|
589
|
-
]
|
|
590
|
-
}
|
|
591
|
-
]
|
|
592
|
-
},
|
|
593
|
-
{
|
|
594
|
-
"type": "fieldset",
|
|
595
|
-
"title": "Advanced Settings",
|
|
596
|
-
"expandable": true,
|
|
597
|
-
"expanded": false,
|
|
598
|
-
"items": [
|
|
599
|
-
{
|
|
600
|
-
"key": "options.refreshRate",
|
|
601
|
-
"description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the Resido API.</em>"
|
|
602
|
-
},
|
|
603
|
-
{
|
|
604
|
-
"key": "options.pushRate",
|
|
605
|
-
"description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API.</em>"
|
|
124
|
+
"type": "help",
|
|
125
|
+
"helpvalue": "<em class='text-muted'>These settings apply to all devices. Individual device configuration is handled through the Dynamic UI.</em>"
|
|
606
126
|
},
|
|
127
|
+
"options.refreshRate",
|
|
128
|
+
"options.pushRate",
|
|
607
129
|
"options.logging",
|
|
608
130
|
"options.allowInvalidCharacters"
|
|
609
131
|
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"type": "help",
|
|
135
|
+
"helpvalue": "<div class='alert alert-success'><h5>Device Configuration</h5><p>All device-specific settings (hide devices, thermostat options, room sensor settings, etc.) are now configured through the <strong>Dynamic UI</strong> above.</p><p>The Dynamic UI provides an intuitive interface for:</p><ul><li>Device discovery and selection</li><li>Individual device configuration</li><li>Feature options management</li><li>Real-time device status</li></ul></div>"
|
|
610
136
|
}
|
|
611
137
|
]
|
|
612
138
|
}
|