zigbee-herdsman 4.3.2 → 4.4.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/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/adapter/deconz/driver/constants.d.ts +0 -1
- package/dist/adapter/deconz/driver/constants.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/constants.js.map +1 -1
- package/dist/adapter/deconz/driver/frameParser.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/frameParser.js +108 -30
- package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
- package/dist/controller/controller.d.ts.map +1 -1
- package/dist/controller/controller.js +5 -22
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/helpers/installCodes.d.ts +27 -0
- package/dist/controller/helpers/installCodes.d.ts.map +1 -0
- package/dist/controller/helpers/installCodes.js +90 -0
- package/dist/controller/helpers/installCodes.js.map +1 -0
- package/dist/zspec/utils.d.ts +0 -13
- package/dist/zspec/utils.d.ts.map +1 -1
- package/dist/zspec/utils.js +0 -49
- package/dist/zspec/utils.js.map +1 -1
- package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/cluster.js +6 -0
- package/dist/zspec/zcl/definition/cluster.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/deconz/driver/constants.ts +0 -1
- package/src/adapter/deconz/driver/frameParser.ts +132 -32
- package/src/controller/controller.ts +5 -26
- package/src/controller/helpers/installCodes.ts +107 -0
- package/src/zspec/utils.ts +1 -60
- package/src/zspec/zcl/definition/cluster.ts +6 -0
- package/test/controller.test.ts +82 -5
- package/test/utils.test.ts +58 -7
- package/test/zspec/utils.test.ts +0 -64
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseInstallCode = parseInstallCode;
|
|
4
|
+
exports.checkInstallCode = checkInstallCode;
|
|
5
|
+
const consts_1 = require("../../zspec/consts");
|
|
6
|
+
const utils_1 = require("../../zspec/utils");
|
|
7
|
+
/**
|
|
8
|
+
* Parse the given code using known formats:
|
|
9
|
+
* - 95 or 91-length
|
|
10
|
+
* - Widely adopted (Ubisys, Danfoss, Inovelli, Ledvance): ...Z:<ieee>$I:<key>...
|
|
11
|
+
* - Pipe-separated (Muller-Licht, Innr): <ieee>|<key>
|
|
12
|
+
* - Aqara: G$M:...$A:<ieee>$I:<key>
|
|
13
|
+
* - Hue: HUE:Z:<key> M:<ieee>...
|
|
14
|
+
* @param installCode
|
|
15
|
+
* @returns
|
|
16
|
+
* - the IEEE address
|
|
17
|
+
* - the raw key
|
|
18
|
+
*/
|
|
19
|
+
function parseInstallCode(installCode) {
|
|
20
|
+
const widelyAdoptedMatch = installCode.match(/Z:([a-zA-Z0-9]{16})\$I:([a-zA-Z0-9]+)/);
|
|
21
|
+
if (widelyAdoptedMatch) {
|
|
22
|
+
return [`0x${widelyAdoptedMatch[1].toLowerCase()}`, widelyAdoptedMatch[2]];
|
|
23
|
+
}
|
|
24
|
+
const pipeMatch = installCode.match(/^([a-zA-Z0-9]{16})\|([a-zA-Z0-9]+)$/);
|
|
25
|
+
if (pipeMatch) {
|
|
26
|
+
return [`0x${pipeMatch[1].toLowerCase()}`, pipeMatch[2]];
|
|
27
|
+
}
|
|
28
|
+
const aqaraMatch = installCode.match(/^G\$M:.+\$A:([a-zA-Z0-9]{16})\$I:([a-zA-Z0-9]+)$/);
|
|
29
|
+
if (aqaraMatch) {
|
|
30
|
+
return [`0x${aqaraMatch[1].toLowerCase()}`, aqaraMatch[2]];
|
|
31
|
+
}
|
|
32
|
+
const hueMatch = installCode.match(/^HUE:Z:([a-zA-Z0-9]+) M:([a-zA-Z0-9]{16})/);
|
|
33
|
+
if (hueMatch) {
|
|
34
|
+
return [`0x${hueMatch[2].toLowerCase()}`, hueMatch[1]];
|
|
35
|
+
}
|
|
36
|
+
if (installCode.length === 95 || installCode.length === 91) {
|
|
37
|
+
const keyStart = installCode.length - (installCode.length === 95 ? 36 : 32);
|
|
38
|
+
return [`0x${installCode.substring(keyStart - 19, keyStart - 3).toLowerCase()}`, installCode.substring(keyStart, installCode.length)];
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Unsupported install code, got ${installCode.length} chars, expected 95 or 91 chars, or known format`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if install code (little-endian) is valid, and if not, and requested, fix it.
|
|
44
|
+
*
|
|
45
|
+
* WARNING: Due to conflicting sizes between 8-length code with invalid CRC, and 10-length code missing CRC, given 8-length codes are always assumed to be 8-length code with invalid CRC (most probable scenario).
|
|
46
|
+
*
|
|
47
|
+
* @param code The code to check. Reference is not modified by this procedure but is returned when code was valid, as `outCode`.
|
|
48
|
+
* @param adjust If false, throws if the install code is invalid, otherwise try to fix it (CRC)
|
|
49
|
+
* @returns
|
|
50
|
+
* - The adjusted code, or `code` if not adjusted.
|
|
51
|
+
* - If adjust is false, undefined, otherwise, the reason why the code needed adjusting or undefined if not.
|
|
52
|
+
* - Throws when adjust=false and invalid, or cannot fix.
|
|
53
|
+
*/
|
|
54
|
+
function checkInstallCode(code, adjust = true) {
|
|
55
|
+
const crcLowByteIndex = code.length - consts_1.INSTALL_CODE_CRC_SIZE;
|
|
56
|
+
const crcHighByteIndex = code.length - consts_1.INSTALL_CODE_CRC_SIZE + 1;
|
|
57
|
+
for (const codeSize of consts_1.INSTALL_CODE_SIZES) {
|
|
58
|
+
if (code.length === codeSize) {
|
|
59
|
+
// install code has CRC, check if valid, if not, replace it
|
|
60
|
+
const crc = (0, utils_1.crc16X25)(code.subarray(0, -2));
|
|
61
|
+
const crcHighByte = (crc >> 8) & 0xff;
|
|
62
|
+
const crcLowByte = crc & 0xff;
|
|
63
|
+
if (code[crcLowByteIndex] !== crcLowByte || code[crcHighByteIndex] !== crcHighByte) {
|
|
64
|
+
// see WARNING above, 8 is smallest valid length, so always ends up here
|
|
65
|
+
if (adjust) {
|
|
66
|
+
const outCode = Buffer.from(code);
|
|
67
|
+
outCode[crcLowByteIndex] = crcLowByte;
|
|
68
|
+
outCode[crcHighByteIndex] = crcHighByte;
|
|
69
|
+
return [outCode, "invalid CRC"];
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Install code ${code.toString("hex")} failed CRC validation`);
|
|
72
|
+
}
|
|
73
|
+
return [code, undefined];
|
|
74
|
+
}
|
|
75
|
+
if (code.length === codeSize - consts_1.INSTALL_CODE_CRC_SIZE) {
|
|
76
|
+
if (adjust) {
|
|
77
|
+
// install code is missing CRC
|
|
78
|
+
const crc = (0, utils_1.crc16X25)(code);
|
|
79
|
+
const outCode = Buffer.alloc(code.length + consts_1.INSTALL_CODE_CRC_SIZE);
|
|
80
|
+
code.copy(outCode, 0);
|
|
81
|
+
outCode.writeUInt16LE(crc, code.length);
|
|
82
|
+
return [outCode, "missing CRC"];
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Install code ${code.toString("hex")} failed CRC validation`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// never returned from within the above loop
|
|
88
|
+
throw new Error(`Install code ${code.toString("hex")} has invalid size`);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=installCodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installCodes.js","sourceRoot":"","sources":["../../../src/controller/helpers/installCodes.ts"],"names":[],"mappings":"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"}
|
package/dist/zspec/utils.d.ts
CHANGED
|
@@ -74,17 +74,4 @@ export declare function crc16CCITTFALSE(data: number[] | Uint8Array | Buffer): n
|
|
|
74
74
|
* Used for Install Codes - see Document 13-0402-13 - 10.1
|
|
75
75
|
*/
|
|
76
76
|
export declare function aes128MmoHash(data: Buffer): Buffer;
|
|
77
|
-
/**
|
|
78
|
-
* Check if install code (little-endian) is valid, and if not, and requested, fix it.
|
|
79
|
-
*
|
|
80
|
-
* WARNING: Due to conflicting sizes between 8-length code with invalid CRC, and 10-length code missing CRC, given 8-length codes are always assumed to be 8-length code with invalid CRC (most probable scenario).
|
|
81
|
-
*
|
|
82
|
-
* @param code The code to check. Reference is not modified by this procedure but is returned when code was valid, as `outCode`.
|
|
83
|
-
* @param adjust If false, throws if the install code is invalid, otherwise try to fix it (CRC)
|
|
84
|
-
* @returns
|
|
85
|
-
* - The adjusted code, or `code` if not adjusted.
|
|
86
|
-
* - If adjust is false, undefined, otherwise, the reason why the code needed adjusting or undefined if not.
|
|
87
|
-
* - Throws when adjust=false and invalid, or cannot fix.
|
|
88
|
-
*/
|
|
89
|
-
export declare function checkInstallCode(code: Buffer, adjust?: boolean): [outCode: Buffer, adjusted: "invalid CRC" | "missing CRC" | undefined];
|
|
90
77
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/zspec/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,WAAW,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,KAAG,MAEzD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,MAAM,EAUzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,OAOpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,KAAG,KAAiE,CAAC;AAE1H;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,KAAG,KAA0C,CAAC;AA6EnG;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAEvE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAE5E;AAkBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwClD
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/zspec/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,WAAW,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,KAAG,MAEzD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,MAAM,EAUzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,OAOpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,KAAG,KAAiE,CAAC;AAE1H;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,KAAG,KAA0C,CAAC;AA6EnG;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAEvE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAE5E;AAkBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwClD"}
|
package/dist/zspec/utils.js
CHANGED
|
@@ -6,7 +6,6 @@ exports.crc16XMODEM = crc16XMODEM;
|
|
|
6
6
|
exports.crc16CCITT = crc16CCITT;
|
|
7
7
|
exports.crc16CCITTFALSE = crc16CCITTFALSE;
|
|
8
8
|
exports.aes128MmoHash = aes128MmoHash;
|
|
9
|
-
exports.checkInstallCode = checkInstallCode;
|
|
10
9
|
const node_crypto_1 = require("node:crypto");
|
|
11
10
|
const consts_1 = require("./consts");
|
|
12
11
|
const enums_1 = require("./enums");
|
|
@@ -215,52 +214,4 @@ function aes128MmoHash(data) {
|
|
|
215
214
|
}
|
|
216
215
|
return result;
|
|
217
216
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Check if install code (little-endian) is valid, and if not, and requested, fix it.
|
|
220
|
-
*
|
|
221
|
-
* WARNING: Due to conflicting sizes between 8-length code with invalid CRC, and 10-length code missing CRC, given 8-length codes are always assumed to be 8-length code with invalid CRC (most probable scenario).
|
|
222
|
-
*
|
|
223
|
-
* @param code The code to check. Reference is not modified by this procedure but is returned when code was valid, as `outCode`.
|
|
224
|
-
* @param adjust If false, throws if the install code is invalid, otherwise try to fix it (CRC)
|
|
225
|
-
* @returns
|
|
226
|
-
* - The adjusted code, or `code` if not adjusted.
|
|
227
|
-
* - If adjust is false, undefined, otherwise, the reason why the code needed adjusting or undefined if not.
|
|
228
|
-
* - Throws when adjust=false and invalid, or cannot fix.
|
|
229
|
-
*/
|
|
230
|
-
function checkInstallCode(code, adjust = true) {
|
|
231
|
-
const crcLowByteIndex = code.length - consts_1.INSTALL_CODE_CRC_SIZE;
|
|
232
|
-
const crcHighByteIndex = code.length - consts_1.INSTALL_CODE_CRC_SIZE + 1;
|
|
233
|
-
for (const codeSize of consts_1.INSTALL_CODE_SIZES) {
|
|
234
|
-
if (code.length === codeSize) {
|
|
235
|
-
// install code has CRC, check if valid, if not, replace it
|
|
236
|
-
const crc = crc16X25(code.subarray(0, -2));
|
|
237
|
-
const crcHighByte = (crc >> 8) & 0xff;
|
|
238
|
-
const crcLowByte = crc & 0xff;
|
|
239
|
-
if (code[crcLowByteIndex] !== crcLowByte || code[crcHighByteIndex] !== crcHighByte) {
|
|
240
|
-
// see WARNING above, 8 is smallest valid length, so always ends up here
|
|
241
|
-
if (adjust) {
|
|
242
|
-
const outCode = Buffer.from(code);
|
|
243
|
-
outCode[crcLowByteIndex] = crcLowByte;
|
|
244
|
-
outCode[crcHighByteIndex] = crcHighByte;
|
|
245
|
-
return [outCode, "invalid CRC"];
|
|
246
|
-
}
|
|
247
|
-
throw new Error(`Install code ${code.toString("hex")} failed CRC validation`);
|
|
248
|
-
}
|
|
249
|
-
return [code, undefined];
|
|
250
|
-
}
|
|
251
|
-
if (code.length === codeSize - consts_1.INSTALL_CODE_CRC_SIZE) {
|
|
252
|
-
if (adjust) {
|
|
253
|
-
// install code is missing CRC
|
|
254
|
-
const crc = crc16X25(code);
|
|
255
|
-
const outCode = Buffer.alloc(code.length + consts_1.INSTALL_CODE_CRC_SIZE);
|
|
256
|
-
code.copy(outCode, 0);
|
|
257
|
-
outCode.writeUInt16LE(crc, code.length);
|
|
258
|
-
return [outCode, "missing CRC"];
|
|
259
|
-
}
|
|
260
|
-
throw new Error(`Install code ${code.toString("hex")} failed CRC validation`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
// never returned from within the above loop
|
|
264
|
-
throw new Error(`Install code ${code.toString("hex")} has invalid size`);
|
|
265
|
-
}
|
|
266
217
|
//# sourceMappingURL=utils.js.map
|
package/dist/zspec/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/zspec/utils.ts"],"names":[],"mappings":";;;AA2IA,4BAEC;AAcD,kCAEC;AAaD,gCAEC;AASD,0CAEC;AAuBD,sCAwCC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/zspec/utils.ts"],"names":[],"mappings":";;;AA2IA,4BAEC;AAcD,kCAEC;AAaD,gCAEC;AASD,0CAEC;AAuBD,sCAwCC;AAtPD,6CAA2C;AAC3C,qCAAuE;AACvE,mCAAyC;AAGzC;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,QAAkB,EAAU,EAAE;IAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEF;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAY,EAAE;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,OAAO,IAAI,8BAAqB,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAVW,QAAA,oBAAoB,wBAU/B;AAEK,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAW,EAAE;IAC3D,OAAO,CACH,OAAO,KAAK,wBAAgB,CAAC,OAAO;QACpC,OAAO,KAAK,wBAAgB,CAAC,eAAe;QAC5C,OAAO,KAAK,wBAAgB,CAAC,MAAM;QACnC,OAAO,KAAK,wBAAgB,CAAC,iBAAiB,CACjD,CAAC;AACN,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B;AAEF;;;;GAIG;AACI,MAAM,kBAAkB,GAAG,CAAC,UAAkB,EAAS,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAA7G,QAAA,kBAAkB,sBAA2F;AAE1H;;GAEG;AACI,MAAM,kBAAkB,GAAG,CAAC,UAAkB,EAAS,EAAE,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAAtF,QAAA,kBAAkB,sBAAoE;AAEnG;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,OAAO,CACZ,IAAoC,EACpC,MAAmB,EACnB,IAAY,EACZ,GAAG,GAAG,CAAC,EACP,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,KAAK,EACb,MAAM,GAAG,KAAK;IAEd,2FAA2F;IAC3F,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,IAAiB,EAAU,EAAE;QACrD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACb,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACrB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,qBAAqB;QACzB,CAAC,CAAC,sBAAsB;aAAM,CAAC;YAC3B,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,oBAAoB;QAEpB,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAEF,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC;IAE5B,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,GAAG,KAAK,CAAC,CAAC;YAEV,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;gBACtB,GAAG,IAAI,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,GAAG,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,QAAQ,CAAC,IAAoC;IACzD,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,WAAW,CAAC,IAAoC;IAC5D,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,IAAoC;IAC3D,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,IAAoC;IAChE,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,IAAY,EAAE,QAAgB;IACvE,OAAO,QAAQ,IAAI,+BAAsB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,+BAAsB,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7E,8BAA8B;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,+BAAsB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,+BAAsB,CAAC,CAAC;QAC7C,QAAQ,IAAI,+BAAsB,CAAC;IACvC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,IAAY;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,+BAAsB,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,+BAAsB,CAAC,CAAC;IAClD,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,QAAQ,EAAE,eAAe,IAAI,+BAAsB,GAAI,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,+BAAsB,CAAC,CAAC;QAEzE,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,QAAQ,IAAI,+BAAsB,CAAC;QACnC,eAAe,IAAI,+BAAsB,CAAC;IAC9C,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAE7B,yHAAyH;IACzH,IAAI,+BAAsB,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;QAC/C,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,+BAAsB,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,+BAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,+BAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAE7D,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,+BAAsB,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,+BAAsB,CAAC,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,+BAAsB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../../src/zspec/zcl/definition/cluster.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../../src/zspec/zcl/definition/cluster.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CA0pL/E,CAAC"}
|
|
@@ -1993,6 +1993,9 @@ exports.Clusters = {
|
|
|
1993
1993
|
danfossRoomFloorSensorMode: { ID: 0x4120, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1994
1994
|
danfossFloorMinSetpoint: { ID: 0x4121, type: enums_1.DataType.INT16, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1995
1995
|
danfossFloorMaxSetpoint: { ID: 0x4122, type: enums_1.DataType.INT16, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1996
|
+
danfossScheduleTypeUsed: { ID: 0x4130, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1997
|
+
danfossIcon2PreHeat: { ID: 0x4131, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1998
|
+
danfossIcon2PreHeatStatus: { ID: 0x414f, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
1996
1999
|
elkoLoad: { ID: 0x0401, type: enums_1.DataType.UINT16 },
|
|
1997
2000
|
elkoDisplayText: { ID: 0x0402, type: enums_1.DataType.CHAR_STR },
|
|
1998
2001
|
elkoSensor: { ID: 0x0403, type: enums_1.DataType.ENUM8 },
|
|
@@ -4281,8 +4284,11 @@ exports.Clusters = {
|
|
|
4281
4284
|
lastMessageLqi: { ID: 284, type: enums_1.DataType.UINT8 },
|
|
4282
4285
|
lastMessageRssi: { ID: 285, type: enums_1.DataType.INT8 },
|
|
4283
4286
|
danfossSystemStatusCode: { ID: 0x4000, type: enums_1.DataType.BITMAP16, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4287
|
+
danfossHeatSupplyRequest: { ID: 0x4031, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4284
4288
|
danfossSystemStatusWater: { ID: 0x4200, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4285
4289
|
danfossMultimasterRole: { ID: 0x4201, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4290
|
+
danfossIconApplication: { ID: 0x4210, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4291
|
+
danfossIconForcedHeatingCooling: { ID: 0x4220, type: enums_1.DataType.ENUM8, manufacturerCode: manufacturerCode_1.ManufacturerCode.DANFOSS_A_S },
|
|
4286
4292
|
schneiderMeterStatus: { ID: 0xff01, type: enums_1.DataType.UINT32, manufacturerCode: manufacturerCode_1.ManufacturerCode.SCHNEIDER_ELECTRIC },
|
|
4287
4293
|
schneiderDiagnosticRegister1: { ID: 0xff02, type: enums_1.DataType.UINT32, manufacturerCode: manufacturerCode_1.ManufacturerCode.SCHNEIDER_ELECTRIC },
|
|
4288
4294
|
schneiderCommunicationQuality: { ID: 0x4000, type: enums_1.DataType.UINT8, manufacturerCode: manufacturerCode_1.ManufacturerCode.SCHNEIDER_ELECTRIC },
|