@willieee802/zigbee-herdsman 0.49.4 → 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 -3
- package/dist/controller/model/device.d.ts.map +1 -1
- package/dist/controller/model/device.js +155 -68
- 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.js +4 -4
- 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 +192 -79
- package/src/controller/model/endpoint.ts +36 -24
- package/src/controller/model/group.ts +4 -4
- 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
|
@@ -137,7 +137,7 @@ const GLOBAL_FRAME = Zcl.Frame.create(
|
|
|
137
137
|
GLOBAL_HEADER.frameControl.reservedBits,
|
|
138
138
|
);
|
|
139
139
|
const GLOBAL_FRAME_BUFFER = Buffer.concat([GLOBAL_HEADER_BUFFER, Buffer.from(uint16To8Array(256))]);
|
|
140
|
-
const GLOBAL_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":123,"commandIdentifier":0},"payload":[{"attrId":256}],"command":{"
|
|
140
|
+
const GLOBAL_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":123,"commandIdentifier":0},"payload":[{"attrId":256}],"command":{"name":"read","ID":0,"response":1}}`;
|
|
141
141
|
|
|
142
142
|
/** Frame of Global type with BigInt */
|
|
143
143
|
const GLOBAL_FRAME_BIG_INT = Zcl.Frame.create(
|
|
@@ -158,7 +158,7 @@ const GLOBAL_FRAME_BIG_INT_BUFFER = Buffer.concat([
|
|
|
158
158
|
Buffer.from([Zcl.DataType.UINT56]),
|
|
159
159
|
Buffer.from(uint56To8Array(200n)),
|
|
160
160
|
]);
|
|
161
|
-
const GLOBAL_FRAME_BIG_INT_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":123,"commandIdentifier":10},"payload":[{"attrId":0,"dataType":38,"attrData":"200"}],"command":{"
|
|
161
|
+
const GLOBAL_FRAME_BIG_INT_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":123,"commandIdentifier":10},"payload":[{"attrId":0,"dataType":38,"attrData":"200"}],"command":{"name":"report","ID":10}}`;
|
|
162
162
|
|
|
163
163
|
/** Frame of Global type and response command */
|
|
164
164
|
const GLOBAL_RSP_FRAME = Zcl.Frame.create(
|
|
@@ -177,23 +177,7 @@ const GLOBAL_RSP_FRAME_BUFFER = Buffer.concat([
|
|
|
177
177
|
GLOBAL_RSP_HEADER_BUFFER,
|
|
178
178
|
Buffer.from([...uint16To8Array(256), Zcl.Status.SUCCESS, Zcl.DataType.ENUM8, 127]),
|
|
179
179
|
]);
|
|
180
|
-
const GLOBAL_RSP_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":78,"commandIdentifier":1},"payload":[{"attrId":256,"status":0,"dataType":48,"attrData":127}],"command":{"
|
|
181
|
-
|
|
182
|
-
/** Frame of Global type with no payload */
|
|
183
|
-
const GLOBAL_FRAME_NO_PAYLOAD = Zcl.Frame.create(
|
|
184
|
-
GLOBAL_HEADER.frameControl.frameType,
|
|
185
|
-
GLOBAL_HEADER.frameControl.direction,
|
|
186
|
-
GLOBAL_HEADER.frameControl.disableDefaultResponse,
|
|
187
|
-
GLOBAL_HEADER.manufacturerCode,
|
|
188
|
-
GLOBAL_HEADER.transactionSequenceNumber,
|
|
189
|
-
GLOBAL_HEADER.commandIdentifier,
|
|
190
|
-
Zcl.Clusters.genBasic.ID,
|
|
191
|
-
[] /*payload*/,
|
|
192
|
-
{} /*custom clusters*/,
|
|
193
|
-
GLOBAL_HEADER.frameControl.reservedBits,
|
|
194
|
-
);
|
|
195
|
-
const GLOBAL_FRAME_NO_PAYLOAD_BUFFER = Buffer.concat([GLOBAL_HEADER_BUFFER]);
|
|
196
|
-
const GLOBAL_FRAME_NO_PAYLOAD_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":123,"commandIdentifier":0},"payload":[],"command":{"ID":0,"name":"read","parameters":[{"name":"attrId","type":9}],"response":1}}`;
|
|
180
|
+
const GLOBAL_RSP_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":78,"commandIdentifier":1},"payload":[{"attrId":256,"status":0,"dataType":48,"attrData":127}],"command":{"name":"readRsp","ID":1}}`;
|
|
197
181
|
|
|
198
182
|
/** Frame of Global type with condition-based parameters */
|
|
199
183
|
const GLOBAL_CONDITION_FRAME = Zcl.Frame.create(
|
|
@@ -212,7 +196,7 @@ const GLOBAL_CONDITION_FRAME_BUFFER = Buffer.concat([
|
|
|
212
196
|
GLOBAL_CONDITION_HEADER_BUFFER,
|
|
213
197
|
Buffer.from([Zcl.Direction.SERVER_TO_CLIENT, ...uint16To8Array(256), ...uint16To8Array(10000)]),
|
|
214
198
|
]);
|
|
215
|
-
const GLOBAL_CONDITION_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":78,"commandIdentifier":6},"payload":[{"direction":1,"attrId":256,"timeout":10000}],"command":{"
|
|
199
|
+
const GLOBAL_CONDITION_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":78,"commandIdentifier":6},"payload":[{"direction":1,"attrId":256,"timeout":10000}],"command":{"name":"configReport","ID":6,"response":7}}`;
|
|
216
200
|
|
|
217
201
|
/** Frame of Specific type */
|
|
218
202
|
const SPECIFIC_FRAME = Zcl.Frame.create(
|
|
@@ -228,7 +212,7 @@ const SPECIFIC_FRAME = Zcl.Frame.create(
|
|
|
228
212
|
SPECIFIC_HEADER.frameControl.reservedBits,
|
|
229
213
|
);
|
|
230
214
|
const SPECIFIC_FRAME_BUFFER = Buffer.concat([SPECIFIC_HEADER_BUFFER]);
|
|
231
|
-
const SPECIFIC_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":44,"commandIdentifier":2},"payload":{},"command":{"ID":2,"parameters":[]
|
|
215
|
+
const SPECIFIC_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":44,"commandIdentifier":2},"payload":{},"command":{"name":"getAlarm","ID":2,"parameters":[]}}`;
|
|
232
216
|
|
|
233
217
|
/** Frame of Specific type and response command */
|
|
234
218
|
const SPECIFIC_RSP_FRAME = Zcl.Frame.create(
|
|
@@ -244,7 +228,7 @@ const SPECIFIC_RSP_FRAME = Zcl.Frame.create(
|
|
|
244
228
|
SPECIFIC_RSP_HEADER.frameControl.reservedBits,
|
|
245
229
|
);
|
|
246
230
|
const SPECIFIC_RSP_FRAME_BUFFER = Buffer.concat([SPECIFIC_RSP_HEADER_BUFFER, Buffer.from([246, ...uint16To8Array(3456)])]);
|
|
247
|
-
const SPECIFIC_RSP_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":53,"commandIdentifier":0},"payload":{"alarmcode":246,"clusterid":3456},"command":{"ID":0,"parameters":[{"name":"alarmcode","type":48},{"name":"clusterid","type":232}],"required":true
|
|
231
|
+
const SPECIFIC_RSP_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":53,"commandIdentifier":0},"payload":{"alarmcode":246,"clusterid":3456},"command":{"name":"alarm","ID":0,"parameters":[{"name":"alarmcode","type":48},{"name":"clusterid","type":232}],"required":true}}`;
|
|
248
232
|
|
|
249
233
|
/** Frame of Specific type with condition-based parameters */
|
|
250
234
|
const SPECIFIC_CONDITION_FRAME = Zcl.Frame.create(
|
|
@@ -260,7 +244,7 @@ const SPECIFIC_CONDITION_FRAME = Zcl.Frame.create(
|
|
|
260
244
|
SPECIFIC_CONDITION_HEADER.frameControl.reservedBits,
|
|
261
245
|
);
|
|
262
246
|
const SPECIFIC_CONDITION_FRAME_BUFFER = Buffer.concat([SPECIFIC_CONDITION_HEADER_BUFFER, Buffer.from([149])]);
|
|
263
|
-
const SPECIFIC_CONDITION_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":45,"commandIdentifier":2},"payload":{"status":149},"command":{"ID":2,"parameters":[{"name":"status","type":48},{"name":"manufacturerCode","type":33,"conditions":[{"type":"fieldEquals","field":"status","value":0}]},{"name":"imageType","type":33,"conditions":[{"type":"fieldEquals","field":"status","value":0}],"max":65471},{"name":"fileVersion","type":35,"conditions":[{"type":"fieldEquals","field":"status","value":0}]},{"name":"imageSize","type":35,"conditions":[{"type":"fieldEquals","field":"status","value":0}]}],"required":true
|
|
247
|
+
const SPECIFIC_CONDITION_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":1,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":45,"commandIdentifier":2},"payload":{"status":149},"command":{"name":"queryNextImageResponse","ID":2,"parameters":[{"name":"status","type":48},{"name":"manufacturerCode","type":33,"conditions":[{"type":"fieldEquals","field":"status","value":0}]},{"name":"imageType","type":33,"conditions":[{"type":"fieldEquals","field":"status","value":0}],"max":65471},{"name":"fileVersion","type":35,"conditions":[{"type":"fieldEquals","field":"status","value":0}]},{"name":"imageSize","type":35,"conditions":[{"type":"fieldEquals","field":"status","value":0}]}],"required":true}}`;
|
|
264
248
|
|
|
265
249
|
/** Frame manufacturer-specific */
|
|
266
250
|
const MANUF_SPE_FRAME = Zcl.Frame.create(
|
|
@@ -276,13 +260,60 @@ const MANUF_SPE_FRAME = Zcl.Frame.create(
|
|
|
276
260
|
MANUF_SPE_HEADER.frameControl.reservedBits,
|
|
277
261
|
);
|
|
278
262
|
const MANUF_SPE_FRAME_BUFFER = Buffer.concat([MANUF_SPE_HEADER_BUFFER, Buffer.from(uint16To8Array(256))]);
|
|
279
|
-
const MANUF_SPE_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":true},"manufacturerCode":4344,"transactionSequenceNumber":234,"commandIdentifier":0},"payload":[{"attrId":256}],"command":{"
|
|
263
|
+
const MANUF_SPE_FRAME_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":0,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":true},"manufacturerCode":4344,"transactionSequenceNumber":234,"commandIdentifier":0},"payload":[{"attrId":256}],"command":{"name":"read","ID":0,"response":1}}`;
|
|
264
|
+
|
|
265
|
+
const LIST_HEADER = new Zcl.Header(
|
|
266
|
+
{
|
|
267
|
+
frameType: Zcl.FrameType.SPECIFIC,
|
|
268
|
+
manufacturerSpecific: false,
|
|
269
|
+
direction: Zcl.Direction.CLIENT_TO_SERVER,
|
|
270
|
+
disableDefaultResponse: false,
|
|
271
|
+
reservedBits: 0,
|
|
272
|
+
},
|
|
273
|
+
undefined,
|
|
274
|
+
43,
|
|
275
|
+
Zcl.Clusters.genGroups.commands.getMembership.ID,
|
|
276
|
+
);
|
|
277
|
+
const LIST_BUFFER = Buffer.from([1, 43, Zcl.Clusters.genGroups.commands.getMembership.ID, 2, 10, 0, 20, 0]);
|
|
278
|
+
const LIST_FRAME = Zcl.Frame.create(
|
|
279
|
+
LIST_HEADER.frameControl.frameType,
|
|
280
|
+
LIST_HEADER.frameControl.direction,
|
|
281
|
+
LIST_HEADER.frameControl.disableDefaultResponse,
|
|
282
|
+
LIST_HEADER.manufacturerCode,
|
|
283
|
+
LIST_HEADER.transactionSequenceNumber,
|
|
284
|
+
LIST_HEADER.commandIdentifier,
|
|
285
|
+
Zcl.Clusters.genGroups.ID,
|
|
286
|
+
{groupcount: 2, grouplist: [10, 20]} /*payload*/,
|
|
287
|
+
{} /*custom clusters*/,
|
|
288
|
+
LIST_HEADER.frameControl.reservedBits,
|
|
289
|
+
);
|
|
290
|
+
const LIST_STRING = `{"header":{"frameControl":{"reservedBits":0,"frameType":1,"direction":0,"disableDefaultResponse":false,"manufacturerSpecific":false},"transactionSequenceNumber":43,"commandIdentifier":2},"payload":{"groupcount":2,"grouplist":[10,20]},"command":{"name":"getMembership","ID":2,"response":2,"parameters":[{"name":"groupcount","type":32},{"name":"grouplist","type":1002}],"required":true}}`;
|
|
280
291
|
|
|
281
292
|
describe("ZCL Frame", () => {
|
|
282
293
|
describe("Validates Parameter Condition", () => {
|
|
283
294
|
it("MINIMUM_REMAINING_BUFFER_BYTES", () => {
|
|
284
|
-
expect(
|
|
285
|
-
|
|
295
|
+
expect(
|
|
296
|
+
Zcl.Frame.conditionsValid(
|
|
297
|
+
{
|
|
298
|
+
name: "direction",
|
|
299
|
+
type: Zcl.DataType.DATA8,
|
|
300
|
+
conditions: [{type: Zcl.ParameterCondition.MINIMUM_REMAINING_BUFFER_BYTES, value: 3}],
|
|
301
|
+
},
|
|
302
|
+
{status: 1},
|
|
303
|
+
3,
|
|
304
|
+
),
|
|
305
|
+
).toBeTruthy();
|
|
306
|
+
expect(
|
|
307
|
+
Zcl.Frame.conditionsValid(
|
|
308
|
+
{
|
|
309
|
+
name: "direction",
|
|
310
|
+
type: Zcl.DataType.DATA8,
|
|
311
|
+
conditions: [{type: Zcl.ParameterCondition.MINIMUM_REMAINING_BUFFER_BYTES, value: 3}],
|
|
312
|
+
},
|
|
313
|
+
{status: 1},
|
|
314
|
+
2,
|
|
315
|
+
),
|
|
316
|
+
).toBeFalsy();
|
|
286
317
|
});
|
|
287
318
|
|
|
288
319
|
it("BITMASK_SET", () => {
|
|
@@ -302,54 +333,51 @@ describe("ZCL Frame", () => {
|
|
|
302
333
|
expect(Zcl.Frame.conditionsValid(Zcl.Clusters.greenPower.commands.notification.parameters[1], {options: 0b1010}, undefined)).toBeFalsy();
|
|
303
334
|
});
|
|
304
335
|
|
|
305
|
-
it("
|
|
336
|
+
it("FIELD_EQUAL", () => {
|
|
306
337
|
expect(
|
|
307
338
|
Zcl.Frame.conditionsValid(
|
|
308
|
-
|
|
309
|
-
|
|
339
|
+
{
|
|
340
|
+
name: "dataType",
|
|
341
|
+
type: Zcl.DataType.DATA8,
|
|
342
|
+
conditions: [{type: Zcl.ParameterCondition.FIELD_EQUAL, field: "status", value: Zcl.Status.SUCCESS}],
|
|
343
|
+
},
|
|
344
|
+
{status: 0},
|
|
310
345
|
undefined,
|
|
311
346
|
),
|
|
312
347
|
).toBeTruthy();
|
|
313
348
|
expect(
|
|
314
349
|
Zcl.Frame.conditionsValid(
|
|
315
|
-
|
|
316
|
-
|
|
350
|
+
{
|
|
351
|
+
name: "dataType",
|
|
352
|
+
type: Zcl.DataType.DATA8,
|
|
353
|
+
conditions: [{type: Zcl.ParameterCondition.FIELD_EQUAL, field: "status", value: Zcl.Status.SUCCESS}],
|
|
354
|
+
},
|
|
355
|
+
{status: 1},
|
|
317
356
|
undefined,
|
|
318
357
|
),
|
|
319
358
|
).toBeFalsy();
|
|
320
359
|
expect(
|
|
321
360
|
Zcl.Frame.conditionsValid(
|
|
322
|
-
|
|
323
|
-
|
|
361
|
+
{
|
|
362
|
+
name: "dataType",
|
|
363
|
+
type: Zcl.DataType.DATA8,
|
|
364
|
+
conditions: [{type: Zcl.ParameterCondition.FIELD_EQUAL, field: "status", value: Zcl.Status.SUCCESS, reversed: true}],
|
|
365
|
+
},
|
|
366
|
+
{status: 0},
|
|
324
367
|
undefined,
|
|
325
368
|
),
|
|
326
369
|
).toBeFalsy();
|
|
327
370
|
expect(
|
|
328
371
|
Zcl.Frame.conditionsValid(
|
|
329
|
-
|
|
330
|
-
|
|
372
|
+
{
|
|
373
|
+
name: "dataType",
|
|
374
|
+
type: Zcl.DataType.DATA8,
|
|
375
|
+
conditions: [{type: Zcl.ParameterCondition.FIELD_EQUAL, field: "status", value: Zcl.Status.SUCCESS, reversed: true}],
|
|
376
|
+
},
|
|
377
|
+
{status: 1},
|
|
331
378
|
undefined,
|
|
332
379
|
),
|
|
333
|
-
).toBeFalsy();
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
it("FIELD_EQUAL", () => {
|
|
337
|
-
expect(Zcl.Frame.conditionsValid(Zcl.Foundation.readRsp.parameters[2], {status: 0}, undefined)).toBeTruthy();
|
|
338
|
-
expect(Zcl.Frame.conditionsValid(Zcl.Foundation.readRsp.parameters[2], {status: 1}, undefined)).toBeFalsy();
|
|
339
|
-
expect(Zcl.Frame.conditionsValid(Zcl.Foundation.writeRsp.parameters[1], {status: 1}, undefined)).toBeTruthy();
|
|
340
|
-
expect(Zcl.Frame.conditionsValid(Zcl.Foundation.writeRsp.parameters[1], {status: 0}, undefined)).toBeFalsy();
|
|
341
|
-
expect(
|
|
342
|
-
Zcl.Frame.conditionsValid(Zcl.Foundation.configReport.parameters[2], {direction: Zcl.Direction.CLIENT_TO_SERVER}, undefined),
|
|
343
380
|
).toBeTruthy();
|
|
344
|
-
expect(
|
|
345
|
-
Zcl.Frame.conditionsValid(Zcl.Foundation.configReport.parameters[2], {direction: Zcl.Direction.SERVER_TO_CLIENT}, undefined),
|
|
346
|
-
).toBeFalsy();
|
|
347
|
-
expect(
|
|
348
|
-
Zcl.Frame.conditionsValid(Zcl.Foundation.configReport.parameters[6], {direction: Zcl.Direction.SERVER_TO_CLIENT}, undefined),
|
|
349
|
-
).toBeTruthy();
|
|
350
|
-
expect(
|
|
351
|
-
Zcl.Frame.conditionsValid(Zcl.Foundation.configReport.parameters[6], {direction: Zcl.Direction.CLIENT_TO_SERVER}, undefined),
|
|
352
|
-
).toBeFalsy();
|
|
353
381
|
expect(
|
|
354
382
|
Zcl.Frame.conditionsValid(Zcl.Clusters.touchlink.commandsResponse.scanResponse.parameters[13], {numberOfSubDevices: 1}, undefined),
|
|
355
383
|
).toBeTruthy();
|
|
@@ -530,11 +558,6 @@ describe("ZCL Frame", () => {
|
|
|
530
558
|
{string: GLOBAL_FRAME_BIG_INT_STRING, header: GLOBAL_HEADER_REPORT, written: GLOBAL_FRAME_BIG_INT_BUFFER},
|
|
531
559
|
],
|
|
532
560
|
["global response", GLOBAL_RSP_FRAME, {string: GLOBAL_RSP_FRAME_STRING, header: GLOBAL_RSP_HEADER, written: GLOBAL_RSP_FRAME_BUFFER}],
|
|
533
|
-
[
|
|
534
|
-
"global no payload",
|
|
535
|
-
GLOBAL_FRAME_NO_PAYLOAD,
|
|
536
|
-
{string: GLOBAL_FRAME_NO_PAYLOAD_STRING, header: GLOBAL_HEADER, written: GLOBAL_FRAME_NO_PAYLOAD_BUFFER},
|
|
537
|
-
],
|
|
538
561
|
[
|
|
539
562
|
"global with condition-based parameters",
|
|
540
563
|
GLOBAL_CONDITION_FRAME,
|
|
@@ -552,6 +575,7 @@ describe("ZCL Frame", () => {
|
|
|
552
575
|
{string: SPECIFIC_CONDITION_FRAME_STRING, header: SPECIFIC_CONDITION_HEADER, written: SPECIFIC_CONDITION_FRAME_BUFFER},
|
|
553
576
|
],
|
|
554
577
|
["manufacturer-specific", MANUF_SPE_FRAME, {string: MANUF_SPE_FRAME_STRING, header: MANUF_SPE_HEADER, written: MANUF_SPE_FRAME_BUFFER}],
|
|
578
|
+
["list", LIST_FRAME, {string: LIST_STRING, header: LIST_HEADER, written: LIST_BUFFER}],
|
|
555
579
|
])("Writes & Reads frame %s", (_name, frame, expected) => {
|
|
556
580
|
expect(frame).toBeDefined();
|
|
557
581
|
expect(frame.toString()).toStrictEqual(expected.string);
|
|
@@ -837,15 +861,6 @@ describe("ZCL Frame", () => {
|
|
|
837
861
|
{
|
|
838
862
|
attrId: 65282,
|
|
839
863
|
dataType: Zcl.DataType.STRUCT,
|
|
840
|
-
numElms: 6,
|
|
841
|
-
structElms: [
|
|
842
|
-
{elmType: Zcl.DataType.BOOLEAN, elmVal: 1},
|
|
843
|
-
{elmType: Zcl.DataType.UINT16, elmVal: 3022},
|
|
844
|
-
{elmType: Zcl.DataType.UINT16, elmVal: 17320},
|
|
845
|
-
{elmType: Zcl.DataType.UINT40, elmVal: 1},
|
|
846
|
-
{elmType: Zcl.DataType.UINT16, elmVal: 560},
|
|
847
|
-
{elmType: Zcl.DataType.UINT8, elmVal: 86},
|
|
848
|
-
],
|
|
849
864
|
attrData: [
|
|
850
865
|
{elmType: Zcl.DataType.BOOLEAN, elmVal: 1},
|
|
851
866
|
{elmType: Zcl.DataType.UINT16, elmVal: 3022},
|
|
@@ -939,7 +954,7 @@ describe("ZCL Frame", () => {
|
|
|
939
954
|
expect(() => {
|
|
940
955
|
Zcl.Frame.fromBuffer(Zcl.Clusters.genOta.ID, Zcl.Header.fromBuffer(b), b, {});
|
|
941
956
|
}).toThrow(
|
|
942
|
-
`
|
|
957
|
+
`Status 'INVALID_FIELD' genOta:imageBlockRequest:maximumDataSize (The value of "offset" is out of range. It must be >= 0 and <= 15. Received 16)`,
|
|
943
958
|
);
|
|
944
959
|
});
|
|
945
960
|
|