homey-lib 2.49.2 → 2.50.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.
- package/assets/app/schema.d.ts +36 -1
- package/assets/app/schema.json +143 -0
- package/helpers/index.js +2 -2
- package/index.js +1 -0
- package/lib/App/index.js +65 -9
- package/lib/Util/index.js +59 -0
- package/package.json +1 -1
- package/types/assets/app/schema.d.ts +36 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/lib/App/index.d.ts.map +1 -1
- package/types/lib/Util/index.d.ts +45 -6
- package/types/lib/Util/index.d.ts.map +1 -1
- package/webpack/index.js +1 -1
package/assets/app/schema.d.ts
CHANGED
|
@@ -248,7 +248,7 @@ export interface App {
|
|
|
248
248
|
[k: string]: unknown;
|
|
249
249
|
}[];
|
|
250
250
|
settings?: DriverSettings;
|
|
251
|
-
firmwareUpdates?: ZigbeeFirmwareUpdates;
|
|
251
|
+
firmwareUpdates?: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates;
|
|
252
252
|
gtin?: string | string[];
|
|
253
253
|
matter?: MatterDevice;
|
|
254
254
|
zwave?: ZwaveDevice;
|
|
@@ -413,6 +413,41 @@ export interface ZigbeeFirmwareUpdateFile {
|
|
|
413
413
|
name: string;
|
|
414
414
|
integrity: Integrity;
|
|
415
415
|
}
|
|
416
|
+
export interface ZwaveFirmwareUpdates {
|
|
417
|
+
wakeInstruction?: I18NObject;
|
|
418
|
+
reportTimeout?: number;
|
|
419
|
+
minWaitTime?: number;
|
|
420
|
+
verifyPostUpdateWithNop?: false;
|
|
421
|
+
nopRetryInterval?: number;
|
|
422
|
+
nopMaxRetries?: number;
|
|
423
|
+
/**
|
|
424
|
+
* @minItems 1
|
|
425
|
+
*/
|
|
426
|
+
updates: [ZwaveFirmwareUpdate, ...ZwaveFirmwareUpdate[]];
|
|
427
|
+
}
|
|
428
|
+
export interface ZwaveFirmwareUpdate {
|
|
429
|
+
version: string;
|
|
430
|
+
changelog: I18NObject;
|
|
431
|
+
applicableTo?: string;
|
|
432
|
+
device: ZwaveFirmwareUpdateDevice;
|
|
433
|
+
/**
|
|
434
|
+
* @minItems 1
|
|
435
|
+
*/
|
|
436
|
+
files: [ZwaveFirmwareUpdateFile, ...ZwaveFirmwareUpdateFile[]];
|
|
437
|
+
}
|
|
438
|
+
export interface ZwaveFirmwareUpdateDevice {
|
|
439
|
+
manufacturerId: number | number[];
|
|
440
|
+
productId: number | number[];
|
|
441
|
+
productTypeId: number | number[];
|
|
442
|
+
hardwareVersion?: number | number[];
|
|
443
|
+
}
|
|
444
|
+
export interface ZwaveFirmwareUpdateFile {
|
|
445
|
+
region?: string;
|
|
446
|
+
targetId: number;
|
|
447
|
+
name: string;
|
|
448
|
+
size: number;
|
|
449
|
+
integrity: Integrity;
|
|
450
|
+
}
|
|
416
451
|
export interface MatterDevice {
|
|
417
452
|
vendorId: number | number[];
|
|
418
453
|
productId: number | number[];
|
package/assets/app/schema.json
CHANGED
|
@@ -164,6 +164,146 @@
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
|
+
"zwave-firmware-update-device": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"required": ["manufacturerId", "productTypeId", "productId"],
|
|
170
|
+
"additionalProperties": false,
|
|
171
|
+
"properties": {
|
|
172
|
+
"manufacturerId": {
|
|
173
|
+
"oneOf": [
|
|
174
|
+
{
|
|
175
|
+
"type": "number"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"type": "array",
|
|
179
|
+
"items": {
|
|
180
|
+
"type": "number"
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
"productId": {
|
|
186
|
+
"oneOf": [
|
|
187
|
+
{
|
|
188
|
+
"type": "number"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"type": "array",
|
|
192
|
+
"items": {
|
|
193
|
+
"type": "number"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"productTypeId": {
|
|
199
|
+
"oneOf": [
|
|
200
|
+
{
|
|
201
|
+
"type": "number"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"type": "array",
|
|
205
|
+
"items": {
|
|
206
|
+
"type": "number"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
"hardwareVersion": {
|
|
212
|
+
"oneOf": [
|
|
213
|
+
{
|
|
214
|
+
"type": "number"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"type": "array",
|
|
218
|
+
"items": {
|
|
219
|
+
"type": "number"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"zwave-firmware-update-file": {
|
|
227
|
+
"type": "object",
|
|
228
|
+
"required": ["targetId", "name", "size", "integrity"],
|
|
229
|
+
"additionalProperties": false,
|
|
230
|
+
"properties": {
|
|
231
|
+
"region": {
|
|
232
|
+
"type": "string"
|
|
233
|
+
},
|
|
234
|
+
"targetId": {
|
|
235
|
+
"type": "number"
|
|
236
|
+
},
|
|
237
|
+
"name": {
|
|
238
|
+
"type": "string"
|
|
239
|
+
},
|
|
240
|
+
"size": {
|
|
241
|
+
"type": "number"
|
|
242
|
+
},
|
|
243
|
+
"integrity": {
|
|
244
|
+
"$ref": "#/definitions/integrity"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"zwave-firmware-update": {
|
|
249
|
+
"type": "object",
|
|
250
|
+
"required": ["version", "changelog", "device", "files"],
|
|
251
|
+
"additionalProperties": false,
|
|
252
|
+
"properties": {
|
|
253
|
+
"version": {
|
|
254
|
+
"type": "string"
|
|
255
|
+
},
|
|
256
|
+
"changelog": {
|
|
257
|
+
"$ref": "#/definitions/i18nObject"
|
|
258
|
+
},
|
|
259
|
+
"applicableTo": {
|
|
260
|
+
"type": "string"
|
|
261
|
+
},
|
|
262
|
+
"device": {
|
|
263
|
+
"$ref": "#/definitions/zwave-firmware-update-device"
|
|
264
|
+
},
|
|
265
|
+
"files": {
|
|
266
|
+
"type": "array",
|
|
267
|
+
"minItems": 1,
|
|
268
|
+
"items": {
|
|
269
|
+
"$ref": "#/definitions/zwave-firmware-update-file"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"zwave-firmware-updates": {
|
|
275
|
+
"type": "object",
|
|
276
|
+
"additionalProperties": false,
|
|
277
|
+
"required": ["updates"],
|
|
278
|
+
"properties": {
|
|
279
|
+
"wakeInstruction": {
|
|
280
|
+
"$ref": "#/definitions/i18nObject"
|
|
281
|
+
},
|
|
282
|
+
"reportTimeout": {
|
|
283
|
+
"type": "number"
|
|
284
|
+
},
|
|
285
|
+
"minWaitTime": {
|
|
286
|
+
"type": "number"
|
|
287
|
+
},
|
|
288
|
+
"verifyPostUpdateWithNop": {
|
|
289
|
+
"type": "boolean",
|
|
290
|
+
"enum": [false]
|
|
291
|
+
},
|
|
292
|
+
"nopRetryInterval": {
|
|
293
|
+
"type": "number"
|
|
294
|
+
},
|
|
295
|
+
"nopMaxRetries": {
|
|
296
|
+
"type": "number"
|
|
297
|
+
},
|
|
298
|
+
"updates": {
|
|
299
|
+
"type": "array",
|
|
300
|
+
"minItems": 1,
|
|
301
|
+
"items": {
|
|
302
|
+
"$ref": "#/definitions/zwave-firmware-update"
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
},
|
|
167
307
|
"author": {
|
|
168
308
|
"required": ["name"],
|
|
169
309
|
"properties": {
|
|
@@ -1460,6 +1600,9 @@
|
|
|
1460
1600
|
"oneOf": [
|
|
1461
1601
|
{
|
|
1462
1602
|
"$ref": "#/definitions/zigbee-firmware-updates"
|
|
1603
|
+
},
|
|
1604
|
+
{
|
|
1605
|
+
"$ref": "#/definitions/zwave-firmware-updates"
|
|
1463
1606
|
}
|
|
1464
1607
|
]
|
|
1465
1608
|
},
|
package/helpers/index.js
CHANGED
|
@@ -40,11 +40,11 @@ try {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function toArray(value) {
|
|
43
|
-
if (value) {
|
|
43
|
+
if (value !== undefined && value !== null) {
|
|
44
44
|
return Array.isArray(value) ? value : [value];
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return [];
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
module.exports.toArray = toArray;
|
|
50
|
+
module.exports.toArray = toArray;
|
package/index.js
CHANGED
|
@@ -48,3 +48,4 @@ module.exports.getBatteries = Energy.getBatteries.bind(Energy);
|
|
|
48
48
|
/** @typedef {import('./assets/app/schema').App} AppManifest */
|
|
49
49
|
/** @typedef {import('./assets/capability/schema').Capability} CapabilityDefinition */
|
|
50
50
|
/** @typedef {import('./assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
|
|
51
|
+
/** @typedef {import('./assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
|
package/lib/App/index.js
CHANGED
|
@@ -642,15 +642,11 @@ class App {
|
|
|
642
642
|
|
|
643
643
|
// Validate driver.firmwareUpdates
|
|
644
644
|
if (driver.firmwareUpdates && Array.isArray(driver.firmwareUpdates.updates)) {
|
|
645
|
-
// TODO: Remove when we want to roll out firmware updates.
|
|
646
|
-
if (level !== 'debug') {
|
|
647
|
-
throw new Error(`drivers.${driver.id} firmwareUpdates can only be included in debug mode validation.`);
|
|
648
|
-
}
|
|
649
|
-
|
|
650
645
|
const isZigbeeDriver = typeof driver.zigbee === 'object' && driver.zigbee !== null;
|
|
646
|
+
const isZwaveDriver = typeof driver.zwave === 'object' && driver.zwave !== null;
|
|
651
647
|
|
|
652
|
-
if (!isZigbeeDriver) {
|
|
653
|
-
throw new Error(`drivers.${driver.id} firmwareUpdates are only supported for Zigbee drivers (missing driver.zigbee)`);
|
|
648
|
+
if (!isZigbeeDriver && !isZwaveDriver) {
|
|
649
|
+
throw new Error(`drivers.${driver.id} firmwareUpdates are only supported for Zigbee and Zwave drivers (missing driver.zigbee or driver.zwave)`);
|
|
654
650
|
}
|
|
655
651
|
|
|
656
652
|
for (const [updateIndex, update] of Object.entries(driver.firmwareUpdates.updates)) {
|
|
@@ -688,6 +684,44 @@ class App {
|
|
|
688
684
|
}
|
|
689
685
|
}
|
|
690
686
|
|
|
687
|
+
if (isZwaveDriver) {
|
|
688
|
+
if (!semver.valid(update.version)) {
|
|
689
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].version is not a valid semver version`);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
if (update.applicableTo !== undefined && !semver.validRange(update.applicableTo)) {
|
|
693
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].applicableTo is not a valid semver range`);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
const driverManufacturerIds = toArray(driver.zwave.manufacturerId);
|
|
697
|
+
const driverProductTypeIds = toArray(driver.zwave.productTypeId);
|
|
698
|
+
const driverProductIds = toArray(driver.zwave.productId);
|
|
699
|
+
|
|
700
|
+
const updateManufacturerIds = toArray(update.device.manufacturerId);
|
|
701
|
+
const updateProductTypeIds = toArray(update.device.productTypeId);
|
|
702
|
+
const updateProductIds = toArray(update.device.productId);
|
|
703
|
+
|
|
704
|
+
if (updateManufacturerIds.length === 0 || updateProductTypeIds.length === 0 || updateProductIds.length === 0) {
|
|
705
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] must include at least one manufacturerId, productTypeId and productId`);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
const hasMismatchedManufacturerId = updateManufacturerIds.some(id => !driverManufacturerIds.includes(id));
|
|
709
|
+
const hasMismatchedProductTypeId = updateProductTypeIds.some(id => !driverProductTypeIds.includes(id));
|
|
710
|
+
const hasMismatchedProductId = updateProductIds.some(id => !driverProductIds.includes(id));
|
|
711
|
+
|
|
712
|
+
if (hasMismatchedManufacturerId) {
|
|
713
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a manufacturerId that does not match the driver zwave.manufacturerId`);
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
if (hasMismatchedProductTypeId) {
|
|
717
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a productTypeId that does not match the driver zwave.productTypeId`);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
if (hasMismatchedProductId) {
|
|
721
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a productId that does not match the driver zwave.productId`);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
691
725
|
const seenFiles = new Set();
|
|
692
726
|
|
|
693
727
|
for (const [fileIndex, file] of Object.entries(update.files)) {
|
|
@@ -717,9 +751,31 @@ class App {
|
|
|
717
751
|
}
|
|
718
752
|
}
|
|
719
753
|
|
|
720
|
-
|
|
754
|
+
// Note: Util.validateZigbeeOTAHeader already checks the file size for zigbee firmware files.
|
|
755
|
+
// Note: Z-Wave doesn't have a standard header or file type, so nothing we validate about the file itself.
|
|
756
|
+
if (isZwaveDriver) {
|
|
757
|
+
const { size: actualSize } = await statAsync(filePath);
|
|
758
|
+
if (actualSize !== file.size) {
|
|
759
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].files[${fileIndex}] size mismatch: expected ${file.size}, got ${actualSize}`);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
let fileId = null;
|
|
764
|
+
|
|
765
|
+
if (Util.isZigbeeFirmwareUpdateFile(file)) {
|
|
766
|
+
fileId = `${file.manufacturerCode}-${file.imageType}-${file.fileVersion}`;
|
|
767
|
+
} else if (Util.isZwaveFirmwareUpdateFile(file)) {
|
|
768
|
+
fileId = `${file.targetId}-${file.region ? file.region : 'global'}`;
|
|
769
|
+
} else {
|
|
770
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].files[${fileIndex}] invalid file schema`);
|
|
771
|
+
}
|
|
772
|
+
|
|
721
773
|
if (seenFiles.has(fileId)) {
|
|
722
|
-
|
|
774
|
+
if (isZigbeeDriver) {
|
|
775
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has multiple files with the same manufacturerCode, imageType and fileVersion`);
|
|
776
|
+
} else {
|
|
777
|
+
throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has multiple files with the same targetId and region`);
|
|
778
|
+
}
|
|
723
779
|
}
|
|
724
780
|
seenFiles.add(fileId);
|
|
725
781
|
}
|
package/lib/Util/index.js
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
const fileUtils = require('./file');
|
|
4
4
|
const zigbeeUtils = require('./zigbee');
|
|
5
5
|
|
|
6
|
+
/** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
|
|
7
|
+
/** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
|
|
8
|
+
/** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdateFile} ZigbeeFirmwareUpdateFile */
|
|
9
|
+
/** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdateFile} ZwaveFirmwareUpdateFile */
|
|
10
|
+
|
|
6
11
|
class Util {
|
|
7
12
|
|
|
8
13
|
/**
|
|
@@ -82,6 +87,60 @@ class Util {
|
|
|
82
87
|
return fileUtils.getOTAFilePath({ appPath, driverId, fileName });
|
|
83
88
|
}
|
|
84
89
|
|
|
90
|
+
/**
|
|
91
|
+
* @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
|
|
92
|
+
* @return {firmwareFile is ZigbeeFirmwareUpdateFile}
|
|
93
|
+
*/
|
|
94
|
+
static isZigbeeFirmwareUpdateFile(firmwareFile) {
|
|
95
|
+
return 'manufacturerCode' in firmwareFile;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
|
|
100
|
+
* @return {firmwareFile is ZwaveFirmwareUpdateFile}
|
|
101
|
+
*/
|
|
102
|
+
static isZwaveFirmwareUpdateFile(firmwareFile) {
|
|
103
|
+
return 'targetId' in firmwareFile;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
|
|
108
|
+
* @return {driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates['updates'][number]}
|
|
109
|
+
*/
|
|
110
|
+
static isZigbeeFirmwareUpdate(driverFirmwareUpdatesUpdate) {
|
|
111
|
+
if (!Array.isArray(driverFirmwareUpdatesUpdate.files) || driverFirmwareUpdatesUpdate.files.length === 0) return false;
|
|
112
|
+
return Util.isZigbeeFirmwareUpdateFile(driverFirmwareUpdatesUpdate.files[0]);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
|
|
117
|
+
* @return {driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates['updates'][number]}
|
|
118
|
+
*/
|
|
119
|
+
static isZwaveFirmwareUpdate(driverFirmwareUpdatesUpdate) {
|
|
120
|
+
if (!Array.isArray(driverFirmwareUpdatesUpdate.files) || driverFirmwareUpdatesUpdate.files.length === 0) return false;
|
|
121
|
+
return Util.isZwaveFirmwareUpdateFile(driverFirmwareUpdatesUpdate.files[0]);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
|
|
126
|
+
* @returns {driverFirmwareUpdates is ZigbeeFirmwareUpdates}
|
|
127
|
+
*/
|
|
128
|
+
static isZigbeeFirmwareUpdates(driverFirmwareUpdates) {
|
|
129
|
+
if (!driverFirmwareUpdates) return false;
|
|
130
|
+
if (!Array.isArray(driverFirmwareUpdates.updates) || driverFirmwareUpdates.updates.length === 0) return false;
|
|
131
|
+
return Util.isZigbeeFirmwareUpdate(driverFirmwareUpdates.updates[0]);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
|
|
136
|
+
* @returns {driverFirmwareUpdates is ZwaveFirmwareUpdates}
|
|
137
|
+
*/
|
|
138
|
+
static isZwaveFirmwareUpdates(driverFirmwareUpdates) {
|
|
139
|
+
if (!driverFirmwareUpdates) return false;
|
|
140
|
+
if (!Array.isArray(driverFirmwareUpdates.updates) || driverFirmwareUpdates.updates.length === 0) return false;
|
|
141
|
+
return Util.isZwaveFirmwareUpdate(driverFirmwareUpdates.updates[0]);
|
|
142
|
+
}
|
|
143
|
+
|
|
85
144
|
}
|
|
86
145
|
|
|
87
146
|
Util.FEATURE_SPEAKER = 'speaker';
|
package/package.json
CHANGED
|
@@ -248,7 +248,7 @@ export interface App {
|
|
|
248
248
|
[k: string]: unknown;
|
|
249
249
|
}[];
|
|
250
250
|
settings?: DriverSettings;
|
|
251
|
-
firmwareUpdates?: ZigbeeFirmwareUpdates;
|
|
251
|
+
firmwareUpdates?: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates;
|
|
252
252
|
gtin?: string | string[];
|
|
253
253
|
matter?: MatterDevice;
|
|
254
254
|
zwave?: ZwaveDevice;
|
|
@@ -413,6 +413,41 @@ export interface ZigbeeFirmwareUpdateFile {
|
|
|
413
413
|
name: string;
|
|
414
414
|
integrity: Integrity;
|
|
415
415
|
}
|
|
416
|
+
export interface ZwaveFirmwareUpdates {
|
|
417
|
+
wakeInstruction?: I18NObject;
|
|
418
|
+
reportTimeout?: number;
|
|
419
|
+
minWaitTime?: number;
|
|
420
|
+
verifyPostUpdateWithNop?: false;
|
|
421
|
+
nopRetryInterval?: number;
|
|
422
|
+
nopMaxRetries?: number;
|
|
423
|
+
/**
|
|
424
|
+
* @minItems 1
|
|
425
|
+
*/
|
|
426
|
+
updates: [ZwaveFirmwareUpdate, ...ZwaveFirmwareUpdate[]];
|
|
427
|
+
}
|
|
428
|
+
export interface ZwaveFirmwareUpdate {
|
|
429
|
+
version: string;
|
|
430
|
+
changelog: I18NObject;
|
|
431
|
+
applicableTo?: string;
|
|
432
|
+
device: ZwaveFirmwareUpdateDevice;
|
|
433
|
+
/**
|
|
434
|
+
* @minItems 1
|
|
435
|
+
*/
|
|
436
|
+
files: [ZwaveFirmwareUpdateFile, ...ZwaveFirmwareUpdateFile[]];
|
|
437
|
+
}
|
|
438
|
+
export interface ZwaveFirmwareUpdateDevice {
|
|
439
|
+
manufacturerId: number | number[];
|
|
440
|
+
productId: number | number[];
|
|
441
|
+
productTypeId: number | number[];
|
|
442
|
+
hardwareVersion?: number | number[];
|
|
443
|
+
}
|
|
444
|
+
export interface ZwaveFirmwareUpdateFile {
|
|
445
|
+
region?: string;
|
|
446
|
+
targetId: number;
|
|
447
|
+
name: string;
|
|
448
|
+
size: number;
|
|
449
|
+
integrity: Integrity;
|
|
450
|
+
}
|
|
416
451
|
export interface MatterDevice {
|
|
417
452
|
vendorId: number | number[];
|
|
418
453
|
productId: number | number[];
|
package/types/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export const getBatteries: typeof Energy.getBatteries;
|
|
|
13
13
|
export type AppManifest = import("./assets/app/schema").App;
|
|
14
14
|
export type CapabilityDefinition = import("./assets/capability/schema").Capability;
|
|
15
15
|
export type ZigbeeFirmwareUpdates = import("./assets/app/schema").ZigbeeFirmwareUpdates;
|
|
16
|
+
export type ZwaveFirmwareUpdates = import("./assets/app/schema").ZwaveFirmwareUpdates;
|
|
16
17
|
import App = require("./lib/App");
|
|
17
18
|
import Capability = require("./lib/Capability");
|
|
18
19
|
import Device = require("./lib/Device");
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"+BAkBW,OAAO,MAAM,CAAC,UAAU;6BAExB,OAAO,MAAM,CAAC,QAAQ;8BAGtB,OAAO,UAAU,CAAC,eAAe;4BAEjC,OAAO,UAAU,CAAC,aAAa;4BAE/B,OAAO,UAAU,CAAC,aAAa;4BAG/B,OAAO,GAAG,CAAC,UAAU;+BAErB,OAAO,GAAG,CAAC,aAAa;gCAExB,OAAO,GAAG,CAAC,cAAc;+BAEzB,OAAO,GAAG,CAAC,aAAa;6BAGxB,OAAO,KAAK,CAAC,SAAS;4BAGtB,OAAO,MAAM,CAAC,aAAa;2BAE3B,OAAO,MAAM,CAAC,YAAY;0BAGvB,OAAO,qBAAqB,EAAE,GAAG;mCACjC,OAAO,4BAA4B,EAAE,UAAU;oCAC/C,OAAO,qBAAqB,EAAE,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"+BAkBW,OAAO,MAAM,CAAC,UAAU;6BAExB,OAAO,MAAM,CAAC,QAAQ;8BAGtB,OAAO,UAAU,CAAC,eAAe;4BAEjC,OAAO,UAAU,CAAC,aAAa;4BAE/B,OAAO,UAAU,CAAC,aAAa;4BAG/B,OAAO,GAAG,CAAC,UAAU;+BAErB,OAAO,GAAG,CAAC,aAAa;gCAExB,OAAO,GAAG,CAAC,cAAc;+BAEzB,OAAO,GAAG,CAAC,aAAa;6BAGxB,OAAO,KAAK,CAAC,SAAS;4BAGtB,OAAO,MAAM,CAAC,aAAa;2BAE3B,OAAO,MAAM,CAAC,YAAY;0BAGvB,OAAO,qBAAqB,EAAE,GAAG;mCACjC,OAAO,4BAA4B,EAAE,UAAU;oCAC/C,OAAO,qBAAqB,EAAE,qBAAqB;mCACnD,OAAO,qBAAqB,EAAE,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;IA21BnD;;;OAGG;IACH,sCAHW,WAAW,GACT,IAAI,CAOhB;IA4PD;;;;;OAKG;IACH,4CALW,MAAM,QACN;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,aAClB,MAAM,GACJ,IAAI,CAkChB;IAiBD;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,wBAFa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMnC;IAED;;OAEG;IACH,yBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnD;IAED;;OAEG;IACH,wBAFa,MAAM,EAAE,CAIpB;IAED;;OAEG;IACH,qBAFa,MAAM,EAAE,CAKpB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;OAIG;IACH,0BAJW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,WAC1C,WAAW,GACT,MAAM,GAAG,IAAI,CAyDzB;IAzyCD;;OAEG;IACH,kBAFW,MAAM,EAQhB;IALC,cAAiB;IAOnB;;;OAGG;IACH,eAHc,OAAO,EAAA,GACR,IAAI,CAKhB;IAED;;;OAGG;IACH,6BAHW;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAi0BzB;IA3zBC,gBAAmB;IAw0BrB;;;;OAIG;IACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UACvB;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACZ,IAAI,CAwBhB;IAED;;;;OAIG;IACH,8BAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,WAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACxC,IAAI,CAuBhB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7B;IAED;;;OAGG;IACH,yCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;OAGG;IACH,mCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAe5B;IAED;;;;;OAKG;IACH,2BALW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,QAChC,KAAK,GAAG,QAAQ,cAChB,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CA6BzB;IAED;;OAEG;IACH,oBAFa,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;OAMG;IACH,wBANW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,WACN,WAAW,mCACX;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,GAC/C,IAAI,CA+EhB;IA0CD;;;;OAIG;IACH,qBAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAU3B;CAwJF;;;;mBA31Ca,OAAO,yBAAyB,EAAE,GAAG"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export = Util;
|
|
2
|
+
/** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
|
|
3
|
+
/** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
|
|
4
|
+
/** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdateFile} ZigbeeFirmwareUpdateFile */
|
|
5
|
+
/** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdateFile} ZwaveFirmwareUpdateFile */
|
|
2
6
|
declare class Util {
|
|
3
7
|
/**
|
|
4
8
|
* @param {string} modelId
|
|
@@ -64,13 +68,48 @@ declare class Util {
|
|
|
64
68
|
driverId: string;
|
|
65
69
|
fileName: string;
|
|
66
70
|
}): string;
|
|
71
|
+
/**
|
|
72
|
+
* @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
|
|
73
|
+
* @return {firmwareFile is ZigbeeFirmwareUpdateFile}
|
|
74
|
+
*/
|
|
75
|
+
static isZigbeeFirmwareUpdateFile(firmwareFile: ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile): firmwareFile is ZigbeeFirmwareUpdateFile;
|
|
76
|
+
/**
|
|
77
|
+
* @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
|
|
78
|
+
* @return {firmwareFile is ZwaveFirmwareUpdateFile}
|
|
79
|
+
*/
|
|
80
|
+
static isZwaveFirmwareUpdateFile(firmwareFile: ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile): firmwareFile is ZwaveFirmwareUpdateFile;
|
|
81
|
+
/**
|
|
82
|
+
* @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
|
|
83
|
+
* @return {driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates['updates'][number]}
|
|
84
|
+
*/
|
|
85
|
+
static isZigbeeFirmwareUpdate(driverFirmwareUpdatesUpdate: ZigbeeFirmwareUpdates["updates"][number] | ZwaveFirmwareUpdates["updates"][number]): driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates["updates"][number];
|
|
86
|
+
/**
|
|
87
|
+
* @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
|
|
88
|
+
* @return {driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates['updates'][number]}
|
|
89
|
+
*/
|
|
90
|
+
static isZwaveFirmwareUpdate(driverFirmwareUpdatesUpdate: ZigbeeFirmwareUpdates["updates"][number] | ZwaveFirmwareUpdates["updates"][number]): driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates["updates"][number];
|
|
91
|
+
/**
|
|
92
|
+
* @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
|
|
93
|
+
* @returns {driverFirmwareUpdates is ZigbeeFirmwareUpdates}
|
|
94
|
+
*/
|
|
95
|
+
static isZigbeeFirmwareUpdates(driverFirmwareUpdates: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates): driverFirmwareUpdates is ZigbeeFirmwareUpdates;
|
|
96
|
+
/**
|
|
97
|
+
* @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
|
|
98
|
+
* @returns {driverFirmwareUpdates is ZwaveFirmwareUpdates}
|
|
99
|
+
*/
|
|
100
|
+
static isZwaveFirmwareUpdates(driverFirmwareUpdates: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates): driverFirmwareUpdates is ZwaveFirmwareUpdates;
|
|
67
101
|
}
|
|
68
102
|
declare namespace Util {
|
|
69
|
-
|
|
70
|
-
let FEATURE_LED_RING: string;
|
|
71
|
-
let FEATURE_NFC: string;
|
|
72
|
-
let FEATURE_MATTER: string;
|
|
73
|
-
let FEATURE_CAMERA_STREAMING: string;
|
|
74
|
-
let _platformLocalFeatures: Record<string, string[]>;
|
|
103
|
+
export { FEATURE_SPEAKER, FEATURE_LED_RING, FEATURE_NFC, FEATURE_MATTER, FEATURE_CAMERA_STREAMING, _platformLocalFeatures, ZigbeeFirmwareUpdates, ZwaveFirmwareUpdates, ZigbeeFirmwareUpdateFile, ZwaveFirmwareUpdateFile };
|
|
75
104
|
}
|
|
105
|
+
declare var FEATURE_SPEAKER: string;
|
|
106
|
+
declare var FEATURE_LED_RING: string;
|
|
107
|
+
declare var FEATURE_NFC: string;
|
|
108
|
+
declare var FEATURE_MATTER: string;
|
|
109
|
+
declare var FEATURE_CAMERA_STREAMING: string;
|
|
110
|
+
declare var _platformLocalFeatures: Record<string, string[]>;
|
|
111
|
+
type ZigbeeFirmwareUpdates = import("../../assets/app/schema").ZigbeeFirmwareUpdates;
|
|
112
|
+
type ZwaveFirmwareUpdates = import("../../assets/app/schema").ZwaveFirmwareUpdates;
|
|
113
|
+
type ZigbeeFirmwareUpdateFile = import("../../assets/app/schema").ZigbeeFirmwareUpdateFile;
|
|
114
|
+
type ZwaveFirmwareUpdateFile = import("../../assets/app/schema").ZwaveFirmwareUpdateFile;
|
|
76
115
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/Util/index.js"],"names":[],"mappings":";AAKA;IAEE;;;OAGG;IACH,yCAHW,MAAM,GACJ,MAAM,EAAE,CAIpB;IAED;;;;OAIG;IACH,gDAJW,MAAM,kBACN,MAAM,EAAE,GACN,MAAM,EAAE,CAKpB;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;;;;OAMG;IACH,mCAJW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;;OASG;IACH,wCANG;QAAwB,QAAQ,EAAxB,MAAM;QACW,gBAAgB,GAAjC,MAAM;QACW,WAAW,GAA5B,MAAM;QACW,SAAS,GAA1B,MAAM;KACd,GAAU,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;OAQG;IACH,uDALG;QAAyB,OAAO,GAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;KACd,GAAU,MAAM,CAIlB;CAEF
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/Util/index.js"],"names":[],"mappings":";AAKA,+FAA+F;AAC/F,6FAA6F;AAC7F,qGAAqG;AACrG,mGAAmG;AAEnG;IAEE;;;OAGG;IACH,yCAHW,MAAM,GACJ,MAAM,EAAE,CAIpB;IAED;;;;OAIG;IACH,gDAJW,MAAM,kBACN,MAAM,EAAE,GACN,MAAM,EAAE,CAKpB;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;;;;OAMG;IACH,mCAJW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;;OASG;IACH,wCANG;QAAwB,QAAQ,EAAxB,MAAM;QACW,gBAAgB,GAAjC,MAAM;QACW,WAAW,GAA5B,MAAM;QACW,SAAS,GAA1B,MAAM;KACd,GAAU,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;OAQG;IACH,uDALG;QAAyB,OAAO,GAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;KACd,GAAU,MAAM,CAIlB;IAED;;;OAGG;IACH,gDAHW,wBAAwB,GAAG,uBAAuB,GACjD,YAAY,IAAI,wBAAwB,CAInD;IAED;;;OAGG;IACH,+CAHW,wBAAwB,GAAG,uBAAuB,GACjD,YAAY,IAAI,uBAAuB,CAIlD;IAED;;;OAGG;IACH,2DAHW,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACjF,2BAA2B,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAKlF;IAED;;;OAGG;IACH,0DAHW,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACjF,2BAA2B,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAKjF;IAED;;;OAGG;IACH,sDAHW,qBAAqB,GAAG,oBAAoB,GAC1C,qBAAqB,IAAI,qBAAqB,CAM1D;IAED;;;OAGG;IACH,qDAHW,qBAAqB,GAAG,oBAAoB,GAC1C,qBAAqB,IAAI,oBAAoB,CAMzD;CAEF;;;;;;;;;oCAOU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;6BAjJrB,OAAO,yBAAyB,EAAE,qBAAqB;4BACvD,OAAO,yBAAyB,EAAE,oBAAoB;gCACtD,OAAO,yBAAyB,EAAE,wBAAwB;+BAC1D,OAAO,yBAAyB,EAAE,uBAAuB"}
|