@willieee802/zigbee-herdsman 0.49.3 → 0.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/.github/dependabot.yml +0 -3
- package/.github/workflows/ci.yml +1 -2
- package/.github/workflows/release-please.yml +1 -1
- package/.github/workflows/typedoc.yaml +3 -3
- package/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +143 -0
- package/biome.json +1 -1
- package/dist/adapter/adapter.d.ts +14 -1
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/adapter/adapter.js +17 -0
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/adapterDiscovery.d.ts.map +1 -1
- package/dist/adapter/adapterDiscovery.js.map +1 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +1 -3
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.js +14 -29
- package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
- package/dist/adapter/deconz/driver/constants.d.ts +1 -1
- package/dist/adapter/deconz/driver/constants.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.js +19 -10
- package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
- package/dist/adapter/ember/adapter/oneWaitress.d.ts +2 -0
- package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/oneWaitress.js +13 -5
- package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +1 -3
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.js +17 -30
- package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
- package/dist/adapter/ezsp/driver/index.d.ts +1 -1
- package/dist/adapter/ezsp/driver/index.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/index.js +1 -1
- package/dist/adapter/ezsp/driver/index.js.map +1 -1
- package/dist/adapter/ezsp/driver/types/index.d.ts +1 -1
- package/dist/adapter/ezsp/driver/types/index.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/types/index.js +3 -3
- package/dist/adapter/ezsp/driver/types/index.js.map +1 -1
- package/dist/adapter/serialPort.d.ts.map +1 -1
- package/dist/adapter/serialPort.js +7 -0
- package/dist/adapter/serialPort.js.map +1 -1
- package/dist/adapter/z-stack/adapter/adapter-backup.js +1 -1
- package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +1 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +1 -1
- package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/manager.js +12 -2
- package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
- package/dist/adapter/z-stack/adapter/tstype.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +1 -3
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.js +20 -34
- package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
- package/dist/adapter/z-stack/constants/index.d.ts +1 -1
- package/dist/adapter/z-stack/constants/index.d.ts.map +1 -1
- package/dist/adapter/z-stack/constants/index.js +1 -1
- package/dist/adapter/z-stack/constants/index.js.map +1 -1
- package/dist/adapter/z-stack/unpi/constants.d.ts +1 -1
- package/dist/adapter/z-stack/unpi/constants.d.ts.map +1 -1
- package/dist/adapter/z-stack/unpi/constants.js +1 -1
- package/dist/adapter/z-stack/unpi/constants.js.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +7 -8
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.js +12 -30
- package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
- package/dist/adapter/zboss/driver.d.ts.map +1 -1
- package/dist/adapter/zboss/driver.js +8 -1
- package/dist/adapter/zboss/driver.js.map +1 -1
- package/dist/adapter/zboss/uart.d.ts.map +1 -1
- package/dist/adapter/zboss/uart.js +14 -2
- package/dist/adapter/zboss/uart.js.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +1 -3
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.js +8 -29
- package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
- package/dist/adapter/zoh/adapter/zohAdapter.d.ts +1 -3
- package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -1
- package/dist/adapter/zoh/adapter/zohAdapter.js +18 -33
- package/dist/adapter/zoh/adapter/zohAdapter.js.map +1 -1
- package/dist/controller/controller.d.ts.map +1 -1
- package/dist/controller/controller.js +10 -2
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/greenPower.d.ts.map +1 -1
- package/dist/controller/greenPower.js +15 -9
- package/dist/controller/greenPower.js.map +1 -1
- package/dist/controller/helpers/ota.d.ts +4 -4
- package/dist/controller/helpers/ota.d.ts.map +1 -1
- package/dist/controller/helpers/ota.js +28 -9
- package/dist/controller/helpers/ota.js.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.js +17 -16
- package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
- package/dist/controller/model/device.d.ts +14 -4
- package/dist/controller/model/device.d.ts.map +1 -1
- package/dist/controller/model/device.js +167 -85
- package/dist/controller/model/device.js.map +1 -1
- package/dist/controller/model/endpoint.d.ts +7 -3
- package/dist/controller/model/endpoint.d.ts.map +1 -1
- package/dist/controller/model/endpoint.js +34 -21
- package/dist/controller/model/endpoint.js.map +1 -1
- package/dist/controller/model/group.d.ts +0 -1
- package/dist/controller/model/group.d.ts.map +1 -1
- package/dist/controller/model/group.js +14 -19
- package/dist/controller/model/group.js.map +1 -1
- package/dist/controller/touchlink.js +3 -3
- package/dist/controller/touchlink.js.map +1 -1
- package/dist/utils/timeService.js +2 -2
- package/dist/utils/timeService.js.map +1 -1
- package/dist/zspec/zcl/buffaloZcl.d.ts +3 -3
- package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -1
- package/dist/zspec/zcl/buffaloZcl.js +198 -96
- package/dist/zspec/zcl/buffaloZcl.js.map +1 -1
- package/dist/zspec/zcl/definition/cluster.d.ts +2 -2
- package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/cluster.js +2699 -2808
- package/dist/zspec/zcl/definition/cluster.js.map +1 -1
- package/dist/zspec/zcl/definition/clusters-types.d.ts +63 -1109
- package/dist/zspec/zcl/definition/clusters-types.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/enums.d.ts +0 -1
- package/dist/zspec/zcl/definition/enums.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/enums.js +0 -1
- package/dist/zspec/zcl/definition/enums.js.map +1 -1
- package/dist/zspec/zcl/definition/foundation.d.ts +306 -7
- package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/foundation.js +552 -207
- package/dist/zspec/zcl/definition/foundation.js.map +1 -1
- package/dist/zspec/zcl/definition/status.d.ts +21 -10
- package/dist/zspec/zcl/definition/status.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/status.js +11 -0
- package/dist/zspec/zcl/definition/status.js.map +1 -1
- package/dist/zspec/zcl/definition/tstype.d.ts +57 -48
- package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -1
- package/dist/zspec/zcl/utils.d.ts +7 -4
- package/dist/zspec/zcl/utils.d.ts.map +1 -1
- package/dist/zspec/zcl/utils.js +133 -240
- package/dist/zspec/zcl/utils.js.map +1 -1
- package/dist/zspec/zcl/zclFrame.d.ts +4 -4
- package/dist/zspec/zcl/zclFrame.d.ts.map +1 -1
- package/dist/zspec/zcl/zclFrame.js +19 -103
- package/dist/zspec/zcl/zclFrame.js.map +1 -1
- package/dist/zspec/zcl/zclStatusError.d.ts +1 -1
- package/dist/zspec/zcl/zclStatusError.d.ts.map +1 -1
- package/dist/zspec/zcl/zclStatusError.js +2 -2
- package/dist/zspec/zcl/zclStatusError.js.map +1 -1
- package/package.json +1 -1
- package/scripts/clusters-typegen.ts +44 -139
- package/src/adapter/adapter.ts +38 -3
- package/src/adapter/adapterDiscovery.ts +2 -1
- package/src/adapter/deconz/adapter/deconzAdapter.ts +24 -51
- package/src/adapter/deconz/driver/constants.ts +1 -1
- package/src/adapter/ember/adapter/emberAdapter.ts +23 -10
- package/src/adapter/ember/adapter/oneWaitress.ts +16 -6
- package/src/adapter/ezsp/adapter/ezspAdapter.ts +27 -48
- package/src/adapter/ezsp/driver/index.ts +1 -1
- package/src/adapter/ezsp/driver/types/index.ts +99 -99
- package/src/adapter/serialPort.ts +9 -0
- package/src/adapter/z-stack/adapter/adapter-backup.ts +1 -1
- package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +1 -1
- package/src/adapter/z-stack/adapter/manager.ts +16 -2
- package/src/adapter/z-stack/adapter/tstype.ts +1 -0
- package/src/adapter/z-stack/adapter/zStackAdapter.ts +34 -81
- package/src/adapter/z-stack/constants/index.ts +1 -1
- package/src/adapter/z-stack/unpi/constants.ts +1 -1
- package/src/adapter/zboss/adapter/zbossAdapter.ts +23 -54
- package/src/adapter/zboss/driver.ts +8 -1
- package/src/adapter/zboss/uart.ts +14 -1
- package/src/adapter/zigate/adapter/zigateAdapter.ts +17 -48
- package/src/adapter/zoh/adapter/zohAdapter.ts +27 -50
- package/src/controller/controller.ts +12 -2
- package/src/controller/greenPower.ts +16 -9
- package/src/controller/helpers/ota.ts +37 -11
- package/src/controller/helpers/zclFrameConverter.ts +20 -17
- package/src/controller/model/device.ts +204 -97
- package/src/controller/model/endpoint.ts +36 -24
- package/src/controller/model/group.ts +14 -20
- package/src/controller/touchlink.ts +3 -3
- package/src/utils/timeService.ts +2 -2
- package/src/zspec/zcl/buffaloZcl.ts +226 -100
- package/src/zspec/zcl/definition/cluster.ts +2713 -2822
- package/src/zspec/zcl/definition/clusters-types.ts +80 -1135
- package/src/zspec/zcl/definition/enums.ts +0 -1
- package/src/zspec/zcl/definition/foundation.ts +703 -216
- package/src/zspec/zcl/definition/status.ts +22 -11
- package/src/zspec/zcl/definition/tstype.ts +59 -58
- package/src/zspec/zcl/utils.ts +137 -264
- package/src/zspec/zcl/zclFrame.ts +25 -130
- package/src/zspec/zcl/zclStatusError.ts +2 -2
- package/test/adapter/ember/emberAdapter.test.ts +191 -4
- package/test/adapter/ezsp/uart.test.ts +10 -10
- package/test/adapter/z-stack/adapter.test.ts +88 -32
- package/test/adapter/zoh/zohAdapter.test.ts +4 -4
- package/test/controller.test.ts +822 -248
- package/test/device-ota.test.ts +141 -16
- package/test/device.test.ts +731 -0
- package/test/requests.bench.ts +2 -0
- package/test/zcl.test.ts +70 -95
- package/test/zspec/zcl/buffalo.test.ts +251 -11
- package/test/zspec/zcl/foundation.test.ts +990 -0
- package/test/zspec/zcl/frame.test.ts +84 -69
- package/test/zspec/zcl/utils.test.ts +105 -81
- package/tsconfig.json +0 -1
- package/scripts/check-clusters-changes.ts +0 -328
- package/scripts/clusters-changes.log +0 -584
- package/scripts/utils.ts +0 -88
- package/scripts/zap-update-clusters-report.json +0 -303
- package/scripts/zap-update-clusters.ts +0 -1520
- package/scripts/zap-update-types.ts +0 -707
- package/scripts/zap-xml-clusters-overrides-data.ts +0 -52
- package/scripts/zap-xml-clusters-overrides.ts +0 -400
- package/scripts/zap-xml-types.ts +0 -146
|
@@ -922,6 +922,10 @@ const commissioned3x0AlignedRequestMock = empty3x0AlignedRequestMock
|
|
|
922
922
|
)
|
|
923
923
|
.nvExtended(NvSystemIds.ZSTACK, NvItemsIds.ZCD_NV_EX_ADDRMGR, 0, Buffer.from("01ff4f3a0800000000000000", "hex"));
|
|
924
924
|
|
|
925
|
+
const commissioned3x0AlignedPrecfgKeyMismatchRequestMock = commissioned3x0AlignedRequestMock
|
|
926
|
+
.clone()
|
|
927
|
+
.nv(NvItemsIds.PRECFGKEY, Buffer.from("aabbccddeeff00112233445566778899", "hex"));
|
|
928
|
+
|
|
925
929
|
const empty12UnalignedRequestMock = baseZnpRequestMock
|
|
926
930
|
.clone()
|
|
927
931
|
.handle(Subsystem.SYS, "version", (payload) => (equals(payload, {}) ? {payload: {product: ZnpVersion.ZStack12}} : undefined))
|
|
@@ -1971,6 +1975,18 @@ describe("zstack-adapter", () => {
|
|
|
1971
1975
|
expect(mockLogger.warning.mock.calls[0][0]).toBe("Extended PAN ID is reversed (expected=00124b0009d69f77, actual=779fd609004b1200)");
|
|
1972
1976
|
});
|
|
1973
1977
|
|
|
1978
|
+
it("should start with 3.x.0 adapter - warn when preconfigured key doesn't match network key", async () => {
|
|
1979
|
+
// https://github.com/Koenkk/zigbee-herdsman/pull/1692
|
|
1980
|
+
mockZnpRequestWith(commissioned3x0AlignedPrecfgKeyMismatchRequestMock);
|
|
1981
|
+
const result = await adapter.start();
|
|
1982
|
+
expect(result).toBe("resumed");
|
|
1983
|
+
expect(mockLogger.warning.mock.calls[0][0]).toBe(
|
|
1984
|
+
"Adapter preconfigured (transport) key does not match configured network key " +
|
|
1985
|
+
"(preconfigured=aabbccddeeff00112233445566778899, configured=01030507090b0d0f00020406080a0c0d). " +
|
|
1986
|
+
"This is typically harmless on Z-Stack 3.x adapters where only the active key matters.",
|
|
1987
|
+
);
|
|
1988
|
+
});
|
|
1989
|
+
|
|
1974
1990
|
it("should restore unified backup with 3.0.x adapter - commissioned, mismatched adapter-config, matching config-backup", async () => {
|
|
1975
1991
|
const backupFile = getTempFile();
|
|
1976
1992
|
fs.writeFileSync(backupFile, JSON.stringify(backupMatchingConfig), "utf8");
|
|
@@ -2305,6 +2321,34 @@ describe("zstack-adapter", () => {
|
|
|
2305
2321
|
);
|
|
2306
2322
|
});
|
|
2307
2323
|
|
|
2324
|
+
it("Send zcl frame with APS encryption", async () => {
|
|
2325
|
+
basicMocks();
|
|
2326
|
+
await adapter.start();
|
|
2327
|
+
|
|
2328
|
+
mockZnpRequest.mockClear();
|
|
2329
|
+
mockQueueExecute.mockClear();
|
|
2330
|
+
const frame = Zcl.Frame.create(
|
|
2331
|
+
Zcl.FrameType.GLOBAL,
|
|
2332
|
+
Zcl.Direction.CLIENT_TO_SERVER,
|
|
2333
|
+
true,
|
|
2334
|
+
undefined,
|
|
2335
|
+
3,
|
|
2336
|
+
"read",
|
|
2337
|
+
"zigbeeDirectConfiguration",
|
|
2338
|
+
[{attrId: 0}],
|
|
2339
|
+
{},
|
|
2340
|
+
);
|
|
2341
|
+
await adapter.sendZclFrameToEndpoint("0x1122334455667788", 1234, 232, frame, 10000, true, false);
|
|
2342
|
+
expect(mockQueueExecute.mock.calls[0][1]).toBe(1234);
|
|
2343
|
+
expect(mockZnpRequest).toHaveBeenCalledTimes(1);
|
|
2344
|
+
expect(mockZnpRequest).toHaveBeenCalledWith(
|
|
2345
|
+
4,
|
|
2346
|
+
"dataRequest",
|
|
2347
|
+
{clusterid: 61, data: frame.toBuffer(), destendpoint: 232, dstaddr: 1234, len: 5, options: 64, radius: 30, srcendpoint: 1, transid: 1},
|
|
2348
|
+
99,
|
|
2349
|
+
);
|
|
2350
|
+
});
|
|
2351
|
+
|
|
2308
2352
|
it("Send zcl frame network address retry on MAC channel access failure", async () => {
|
|
2309
2353
|
basicMocks();
|
|
2310
2354
|
dataConfirmCode = 225;
|
|
@@ -3062,7 +3106,7 @@ describe("zstack-adapter", () => {
|
|
|
3062
3106
|
expect(error.message).toStrictEqual("Data request failed with error: 'APS_DUPLICATE_ENTRY' (0xb8)");
|
|
3063
3107
|
});
|
|
3064
3108
|
|
|
3065
|
-
it("Send zcl frame network address
|
|
3109
|
+
it("Send zcl frame network address matches by tsn", async () => {
|
|
3066
3110
|
basicMocks();
|
|
3067
3111
|
await adapter.start();
|
|
3068
3112
|
|
|
@@ -3129,7 +3173,7 @@ describe("zstack-adapter", () => {
|
|
|
3129
3173
|
expect(result.data).toStrictEqual(Buffer.from([24, 100, 1, 0, 0, 0, 32, 2]));
|
|
3130
3174
|
});
|
|
3131
3175
|
|
|
3132
|
-
it("Send zcl frame network address
|
|
3176
|
+
it("Send zcl frame network address matches on default response", async () => {
|
|
3133
3177
|
basicMocks();
|
|
3134
3178
|
await adapter.start();
|
|
3135
3179
|
|
|
@@ -3147,26 +3191,18 @@ describe("zstack-adapter", () => {
|
|
|
3147
3191
|
[{attrId: 0, attrData: 5, dataType: 32, status: 0}],
|
|
3148
3192
|
{},
|
|
3149
3193
|
);
|
|
3150
|
-
const
|
|
3194
|
+
const defaultResponse = Zcl.Frame.create(
|
|
3151
3195
|
Zcl.FrameType.GLOBAL,
|
|
3152
3196
|
Zcl.Direction.SERVER_TO_CLIENT,
|
|
3153
3197
|
true,
|
|
3154
3198
|
undefined,
|
|
3155
3199
|
100,
|
|
3156
|
-
"
|
|
3200
|
+
"defaultRsp",
|
|
3157
3201
|
0,
|
|
3158
|
-
|
|
3202
|
+
{cmdId: 0, statusCode: Zcl.Status.NOT_AUTHORIZED},
|
|
3159
3203
|
{},
|
|
3160
3204
|
);
|
|
3161
3205
|
const frame = Zcl.Frame.create(Zcl.FrameType.GLOBAL, Zcl.Direction.CLIENT_TO_SERVER, false, undefined, 100, "read", 0, [{attrId: 0}], {});
|
|
3162
|
-
const object = mockZpiObject(Type.AREQ, Subsystem.AF, "incomingMsg", {
|
|
3163
|
-
clusterid: 0,
|
|
3164
|
-
srcendpoint: 20,
|
|
3165
|
-
srcaddr: 2,
|
|
3166
|
-
linkquality: 101,
|
|
3167
|
-
groupid: 12,
|
|
3168
|
-
data: responseFrame.toBuffer(),
|
|
3169
|
-
});
|
|
3170
3206
|
const objectMismatch = mockZpiObject(Type.AREQ, Subsystem.AF, "incomingMsg", {
|
|
3171
3207
|
clusterid: 0,
|
|
3172
3208
|
srcendpoint: 20,
|
|
@@ -3175,29 +3211,17 @@ describe("zstack-adapter", () => {
|
|
|
3175
3211
|
groupid: 12,
|
|
3176
3212
|
data: responseMismatchFrame.toBuffer(),
|
|
3177
3213
|
});
|
|
3178
|
-
const defaultReponse = Zcl.Frame.create(
|
|
3179
|
-
Zcl.FrameType.GLOBAL,
|
|
3180
|
-
Zcl.Direction.SERVER_TO_CLIENT,
|
|
3181
|
-
true,
|
|
3182
|
-
undefined,
|
|
3183
|
-
100,
|
|
3184
|
-
"defaultRsp",
|
|
3185
|
-
0,
|
|
3186
|
-
{cmdId: 0, status: 0},
|
|
3187
|
-
{},
|
|
3188
|
-
);
|
|
3189
3214
|
const defaultObject = mockZpiObject(Type.AREQ, Subsystem.AF, "incomingMsg", {
|
|
3190
3215
|
clusterid: 0,
|
|
3191
3216
|
srcendpoint: 20,
|
|
3192
3217
|
srcaddr: 2,
|
|
3193
3218
|
linkquality: 101,
|
|
3194
3219
|
groupid: 12,
|
|
3195
|
-
data:
|
|
3220
|
+
data: defaultResponse.toBuffer(),
|
|
3196
3221
|
});
|
|
3197
3222
|
const response = adapter.sendZclFrameToEndpoint("0x02", 2, 20, frame, 10000, false, false);
|
|
3198
3223
|
znpReceived(objectMismatch);
|
|
3199
3224
|
znpReceived(defaultObject);
|
|
3200
|
-
znpReceived(object);
|
|
3201
3225
|
const result = await response;
|
|
3202
3226
|
|
|
3203
3227
|
expect(mockZnpRequest).toHaveBeenCalledWith(
|
|
@@ -3213,7 +3237,7 @@ describe("zstack-adapter", () => {
|
|
|
3213
3237
|
expect(result.linkquality).toStrictEqual(101);
|
|
3214
3238
|
expect(result.address).toStrictEqual(2);
|
|
3215
3239
|
expect(result.groupID).toStrictEqual(12);
|
|
3216
|
-
expect(result.data).toStrictEqual(Buffer.from([24, 100,
|
|
3240
|
+
expect(result.data).toStrictEqual(Buffer.from([24, 100, 11, 0, 126]));
|
|
3217
3241
|
});
|
|
3218
3242
|
|
|
3219
3243
|
it("Send zcl frame network address data confirm fails with default response", async () => {
|
|
@@ -3300,7 +3324,7 @@ describe("zstack-adapter", () => {
|
|
|
3300
3324
|
{clusterid: 0, data: frame.toBuffer(), destendpoint: 20, dstaddr: 2, len: 5, options: 0, radius: 30, srcendpoint: 1, transid: 2},
|
|
3301
3325
|
99,
|
|
3302
3326
|
);
|
|
3303
|
-
expect(error).toStrictEqual(new Error("Timeout
|
|
3327
|
+
expect(error).toStrictEqual(new Error("Timeout after 1ms [address=2 endpoint=20 clusterId=0 cmdId=1 tsn=100]"));
|
|
3304
3328
|
});
|
|
3305
3329
|
|
|
3306
3330
|
it("Send zcl frame network address timeout should discover route, rewrite child entry and retry for sleepy end device", async () => {
|
|
@@ -3361,7 +3385,7 @@ describe("zstack-adapter", () => {
|
|
|
3361
3385
|
{clusterid: 0, data: frame.toBuffer(), destendpoint: 20, dstaddr: 2, len: 5, options: 0, radius: 30, srcendpoint: 1, transid: 2},
|
|
3362
3386
|
99,
|
|
3363
3387
|
);
|
|
3364
|
-
expect(error).toStrictEqual(new Error("Timeout
|
|
3388
|
+
expect(error).toStrictEqual(new Error("Timeout after 1ms [address=2 endpoint=20 clusterId=0 cmdId=1 tsn=100]"));
|
|
3365
3389
|
});
|
|
3366
3390
|
|
|
3367
3391
|
it("Send zcl frame network address with default response timeout shouldnt care because command has response", async () => {
|
|
@@ -3975,7 +3999,7 @@ describe("zstack-adapter", () => {
|
|
|
3975
3999
|
expect(error).toStrictEqual(new Error("Failed to connect to the adapter (Error: Couldnt lock port)"));
|
|
3976
4000
|
});
|
|
3977
4001
|
|
|
3978
|
-
it("Wait for", async () => {
|
|
4002
|
+
it("Wait for resolves on cmd", async () => {
|
|
3979
4003
|
basicMocks();
|
|
3980
4004
|
await adapter.start();
|
|
3981
4005
|
|
|
@@ -3998,17 +4022,49 @@ describe("zstack-adapter", () => {
|
|
|
3998
4022
|
groupid: 12,
|
|
3999
4023
|
data: responseFrame.toBuffer(),
|
|
4000
4024
|
});
|
|
4001
|
-
const wait = adapter.waitFor(2, 20, 0, 1, 100, 0, 1, 10);
|
|
4025
|
+
const wait = adapter.waitFor(2, 20, 0, 1, 100, 0, 1, undefined, 10);
|
|
4002
4026
|
znpReceived(object);
|
|
4003
4027
|
const result = await wait.promise;
|
|
4004
4028
|
expect(result.endpoint).toStrictEqual(20);
|
|
4005
4029
|
expect(result.groupID).toStrictEqual(12);
|
|
4006
4030
|
expect(result.linkquality).toStrictEqual(101);
|
|
4007
4031
|
expect(result.address).toStrictEqual(2);
|
|
4008
|
-
expect(result.groupID).toStrictEqual(12);
|
|
4009
4032
|
expect(result.data).toStrictEqual(Buffer.from([24, 100, 1, 0, 0, 0, 32, 2]));
|
|
4010
4033
|
});
|
|
4011
4034
|
|
|
4035
|
+
it("Wait for resolves on specified default response", async () => {
|
|
4036
|
+
basicMocks();
|
|
4037
|
+
await adapter.start();
|
|
4038
|
+
|
|
4039
|
+
const responseFrame = Zcl.Frame.create(
|
|
4040
|
+
Zcl.FrameType.GLOBAL,
|
|
4041
|
+
Zcl.Direction.SERVER_TO_CLIENT,
|
|
4042
|
+
true,
|
|
4043
|
+
undefined,
|
|
4044
|
+
99,
|
|
4045
|
+
"defaultRsp",
|
|
4046
|
+
"genOta",
|
|
4047
|
+
{cmdId: 5, statusCode: Zcl.Status.MALFORMED_COMMAND},
|
|
4048
|
+
{},
|
|
4049
|
+
);
|
|
4050
|
+
const object = mockZpiObject(Type.AREQ, Subsystem.AF, "incomingMsg", {
|
|
4051
|
+
clusterid: 0x0019,
|
|
4052
|
+
srcendpoint: 1,
|
|
4053
|
+
srcaddr: 1234,
|
|
4054
|
+
linkquality: 101,
|
|
4055
|
+
groupid: 0,
|
|
4056
|
+
data: responseFrame.toBuffer(),
|
|
4057
|
+
});
|
|
4058
|
+
const wait = adapter.waitFor(1234, 1, Zcl.FrameType.SPECIFIC, Zcl.Direction.CLIENT_TO_SERVER, undefined, 0x0019, 3, 5, 15000);
|
|
4059
|
+
znpReceived(object);
|
|
4060
|
+
const result = await wait.promise;
|
|
4061
|
+
expect(result.endpoint).toStrictEqual(1);
|
|
4062
|
+
expect(result.groupID).toStrictEqual(0);
|
|
4063
|
+
expect(result.linkquality).toStrictEqual(101);
|
|
4064
|
+
expect(result.address).toStrictEqual(1234);
|
|
4065
|
+
expect(result.data).toStrictEqual(Buffer.from([24, 99, 11, 5, Zcl.Status.MALFORMED_COMMAND]));
|
|
4066
|
+
});
|
|
4067
|
+
|
|
4012
4068
|
it("Command should fail when in interpan", async () => {
|
|
4013
4069
|
const frame = Zcl.Frame.create(
|
|
4014
4070
|
Zcl.FrameType.GLOBAL,
|
|
@@ -572,7 +572,7 @@ describe("Zigbee on Host", () => {
|
|
|
572
572
|
|
|
573
573
|
const sendUnicastSpy = vi.spyOn(adapter.driver, "sendUnicast");
|
|
574
574
|
|
|
575
|
-
const zclPayload = Buffer.from([16, 123, Zcl.Foundation.read.ID]);
|
|
575
|
+
const zclPayload = Buffer.from([16, 123, Zcl.Foundation.read.ID, 0x12, 0x34]);
|
|
576
576
|
const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
|
|
577
577
|
|
|
578
578
|
const p1 = adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrame, 10000, false, false, 2);
|
|
@@ -634,7 +634,7 @@ describe("Zigbee on Host", () => {
|
|
|
634
634
|
await expect(p2).resolves.toStrictEqual(undefined);
|
|
635
635
|
expect(sendUnicastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 0x9876, undefined, 1, 1);
|
|
636
636
|
|
|
637
|
-
const zclPayloadDefRsp = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
|
|
637
|
+
const zclPayloadDefRsp = Buffer.from([0, 123, Zcl.Foundation.read.ID, 0x12, 0x34]);
|
|
638
638
|
const zclFrameDefRsp = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayloadDefRsp), zclPayloadDefRsp, {});
|
|
639
639
|
|
|
640
640
|
sendUnicastSpy.mockResolvedValueOnce(3);
|
|
@@ -770,7 +770,7 @@ describe("Zigbee on Host", () => {
|
|
|
770
770
|
|
|
771
771
|
const sendGroupcastSpy = vi.spyOn(adapter.driver, "sendGroupcast").mockResolvedValueOnce(1).mockResolvedValueOnce(1).mockResolvedValueOnce(1);
|
|
772
772
|
|
|
773
|
-
const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
|
|
773
|
+
const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID, 0x12, 0x34]);
|
|
774
774
|
const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
|
|
775
775
|
|
|
776
776
|
const p1 = adapter.sendZclFrameToGroup(123, zclFrame, 5);
|
|
@@ -791,7 +791,7 @@ describe("Zigbee on Host", () => {
|
|
|
791
791
|
|
|
792
792
|
const sendBroadcastSpy = vi.spyOn(adapter.driver, "sendBroadcast").mockResolvedValueOnce(1).mockResolvedValueOnce(1);
|
|
793
793
|
|
|
794
|
-
const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
|
|
794
|
+
const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID, 0x12, 0x34]);
|
|
795
795
|
const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genAlarms.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
|
|
796
796
|
|
|
797
797
|
const p = adapter.sendZclFrameToAll(3, zclFrame, 1, 0xfffc);
|