@willieee802/zigbee-herdsman 0.48.2 → 0.49.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/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/copilot-instructions.md +689 -0
- package/.github/dependabot.yml +22 -0
- package/.github/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
- package/.github/prompts/create-agentsmd.prompt.md +249 -0
- package/.github/prompts/create-specification.prompt.md +127 -0
- package/.github/prompts/review-and-refactor.prompt.md +15 -0
- package/.github/prompts/update-specification.prompt.md +127 -0
- package/.github/workflows/ci.yml +70 -0
- package/.github/workflows/release-please.yml +18 -0
- package/.github/workflows/stale.yml +20 -0
- package/.github/workflows/typedoc.yaml +47 -0
- package/.release-please-manifest.json +2 -2
- package/.vscode/extensions.json +3 -0
- package/.vscode/settings.json +11 -0
- package/AGENTS.md +441 -0
- package/CHANGELOG.md +1245 -0
- package/README.md +2 -2
- package/biome.json +103 -0
- package/examples/join-and-log.js +18 -18
- package/package.json +83 -70
- package/release-please-config.json +8 -8
- package/scripts/check-clusters-changes.ts +328 -0
- package/scripts/clusters-changes.log +584 -0
- package/scripts/clusters-typegen.ts +608 -0
- package/scripts/utils.ts +88 -0
- package/scripts/zap-update-clusters-report.json +303 -0
- package/scripts/zap-update-clusters.ts +1520 -0
- package/scripts/zap-update-types.ts +707 -0
- package/scripts/zap-xml-clusters-overrides-data.ts +52 -0
- package/scripts/zap-xml-clusters-overrides.ts +400 -0
- package/scripts/zap-xml-types.ts +146 -0
- package/src/adapter/adapter.ts +210 -0
- package/src/adapter/adapterDiscovery.ts +736 -0
- package/src/adapter/const.ts +12 -0
- package/src/adapter/deconz/adapter/deconzAdapter.ts +888 -0
- package/src/adapter/deconz/driver/constants.ts +246 -0
- package/src/adapter/deconz/driver/driver.ts +1528 -0
- package/src/adapter/deconz/driver/frame.ts +11 -0
- package/src/adapter/deconz/driver/frameParser.ts +766 -0
- package/src/adapter/deconz/driver/parser.ts +45 -0
- package/src/adapter/deconz/driver/writer.ts +22 -0
- package/src/adapter/deconz/types.d.ts +13 -0
- package/src/adapter/ember/adapter/emberAdapter.ts +2262 -0
- package/src/adapter/ember/adapter/endpoints.ts +86 -0
- package/src/adapter/ember/adapter/oneWaitress.ts +324 -0
- package/src/adapter/ember/adapter/tokensManager.ts +780 -0
- package/src/adapter/ember/consts.ts +178 -0
- package/src/adapter/ember/enums.ts +1746 -0
- package/src/adapter/ember/ezsp/buffalo.ts +1392 -0
- package/src/adapter/ember/ezsp/consts.ts +148 -0
- package/src/adapter/ember/ezsp/enums.ts +1114 -0
- package/src/adapter/ember/ezsp/ezsp.ts +9073 -0
- package/src/adapter/ember/ezspError.ts +10 -0
- package/src/adapter/ember/types.ts +866 -0
- package/src/adapter/ember/uart/ash.ts +1933 -0
- package/src/adapter/ember/uart/consts.ts +109 -0
- package/src/adapter/ember/uart/enums.ts +192 -0
- package/src/adapter/ember/uart/parser.ts +42 -0
- package/src/adapter/ember/uart/queues.ts +247 -0
- package/src/adapter/ember/uart/writer.ts +50 -0
- package/src/adapter/ember/utils/initters.ts +58 -0
- package/src/adapter/ember/utils/math.ts +71 -0
- package/src/adapter/events.ts +21 -0
- package/src/adapter/ezsp/adapter/backup.ts +100 -0
- package/src/adapter/ezsp/adapter/ezspAdapter.ts +632 -0
- package/src/adapter/ezsp/driver/commands.ts +2497 -0
- package/src/adapter/ezsp/driver/consts.ts +11 -0
- package/src/adapter/ezsp/driver/driver.ts +1002 -0
- package/src/adapter/ezsp/driver/ezsp.ts +802 -0
- package/src/adapter/ezsp/driver/frame.ts +101 -0
- package/src/adapter/ezsp/driver/index.ts +4 -0
- package/src/adapter/ezsp/driver/multicast.ts +78 -0
- package/src/adapter/ezsp/driver/parser.ts +81 -0
- package/src/adapter/ezsp/driver/types/basic.ts +201 -0
- package/src/adapter/ezsp/driver/types/index.ts +239 -0
- package/src/adapter/ezsp/driver/types/named.ts +2330 -0
- package/src/adapter/ezsp/driver/types/struct.ts +844 -0
- package/src/adapter/ezsp/driver/uart.ts +460 -0
- package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +44 -0
- package/src/adapter/ezsp/driver/utils/index.ts +32 -0
- package/src/adapter/ezsp/driver/writer.ts +64 -0
- package/src/adapter/index.ts +3 -0
- package/src/adapter/serialPort.ts +58 -0
- package/src/adapter/tstype.ts +57 -0
- package/src/adapter/utils.ts +41 -0
- package/src/adapter/z-stack/adapter/adapter-backup.ts +509 -0
- package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
- package/src/adapter/z-stack/adapter/endpoints.ts +60 -0
- package/src/adapter/z-stack/adapter/manager.ts +543 -0
- package/src/adapter/z-stack/adapter/tstype.ts +6 -0
- package/src/adapter/z-stack/adapter/zStackAdapter.ts +1350 -0
- package/src/adapter/z-stack/constants/af.ts +27 -0
- package/src/adapter/z-stack/constants/common.ts +285 -0
- package/src/adapter/z-stack/constants/dbg.ts +23 -0
- package/src/adapter/z-stack/constants/index.ts +11 -0
- package/src/adapter/z-stack/constants/mac.ts +128 -0
- package/src/adapter/z-stack/constants/sapi.ts +25 -0
- package/src/adapter/z-stack/constants/sys.ts +72 -0
- package/src/adapter/z-stack/constants/util.ts +82 -0
- package/src/adapter/z-stack/constants/utils.ts +14 -0
- package/src/adapter/z-stack/constants/zdo.ts +103 -0
- package/src/adapter/z-stack/models/startup-options.ts +13 -0
- package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +44 -0
- package/src/adapter/z-stack/structs/entries/address-manager-table.ts +19 -0
- package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +12 -0
- package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +21 -0
- package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +19 -0
- package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +21 -0
- package/src/adapter/z-stack/structs/entries/channel-list.ts +8 -0
- package/src/adapter/z-stack/structs/entries/has-configured.ts +16 -0
- package/src/adapter/z-stack/structs/entries/index.ts +16 -0
- package/src/adapter/z-stack/structs/entries/nib.ts +66 -0
- package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +15 -0
- package/src/adapter/z-stack/structs/entries/nwk-key.ts +13 -0
- package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +8 -0
- package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +20 -0
- package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +19 -0
- package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +33 -0
- package/src/adapter/z-stack/structs/entries/security-manager-table.ts +22 -0
- package/src/adapter/z-stack/structs/index.ts +4 -0
- package/src/adapter/z-stack/structs/serializable-memory-object.ts +14 -0
- package/src/adapter/z-stack/structs/struct.ts +367 -0
- package/src/adapter/z-stack/structs/table.ts +198 -0
- package/src/adapter/z-stack/unpi/constants.ts +33 -0
- package/src/adapter/z-stack/unpi/frame.ts +62 -0
- package/src/adapter/z-stack/unpi/index.ts +4 -0
- package/src/adapter/z-stack/unpi/parser.ts +67 -0
- package/src/adapter/z-stack/unpi/writer.ts +37 -0
- package/src/adapter/z-stack/utils/channel-list.ts +40 -0
- package/src/adapter/z-stack/utils/index.ts +2 -0
- package/src/adapter/z-stack/utils/network-options.ts +26 -0
- package/src/adapter/z-stack/znp/buffaloZnp.ts +175 -0
- package/src/adapter/z-stack/znp/definition.ts +2713 -0
- package/src/adapter/z-stack/znp/index.ts +2 -0
- package/src/adapter/z-stack/znp/parameterType.ts +22 -0
- package/src/adapter/z-stack/znp/tstype.ts +44 -0
- package/src/adapter/z-stack/znp/utils.ts +10 -0
- package/src/adapter/z-stack/znp/znp.ts +345 -0
- package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
- package/src/adapter/zboss/adapter/zbossAdapter.ts +535 -0
- package/src/adapter/zboss/commands.ts +1184 -0
- package/src/adapter/zboss/consts.ts +9 -0
- package/src/adapter/zboss/driver.ts +422 -0
- package/src/adapter/zboss/enums.ts +360 -0
- package/src/adapter/zboss/frame.ts +227 -0
- package/src/adapter/zboss/reader.ts +65 -0
- package/src/adapter/zboss/types.ts +0 -0
- package/src/adapter/zboss/uart.ts +428 -0
- package/src/adapter/zboss/utils.ts +58 -0
- package/src/adapter/zboss/writer.ts +49 -0
- package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +25 -0
- package/src/adapter/zigate/adapter/zigateAdapter.ts +633 -0
- package/src/adapter/zigate/driver/LICENSE +17 -0
- package/src/adapter/zigate/driver/buffaloZiGate.ts +210 -0
- package/src/adapter/zigate/driver/commandType.ts +418 -0
- package/src/adapter/zigate/driver/constants.ts +150 -0
- package/src/adapter/zigate/driver/frame.ts +197 -0
- package/src/adapter/zigate/driver/messageType.ts +287 -0
- package/src/adapter/zigate/driver/parameterType.ts +32 -0
- package/src/adapter/zigate/driver/ziGateObject.ts +146 -0
- package/src/adapter/zigate/driver/zigate.ts +422 -0
- package/src/adapter/zoh/adapter/utils.ts +27 -0
- package/src/adapter/zoh/adapter/zohAdapter.ts +931 -0
- package/src/buffalo/buffalo.ts +336 -0
- package/src/buffalo/index.ts +1 -0
- package/src/controller/controller.ts +1159 -0
- package/src/controller/database.ts +148 -0
- package/src/controller/events.ts +52 -0
- package/src/controller/greenPower.ts +613 -0
- package/src/controller/helpers/index.ts +1 -0
- package/src/controller/helpers/installCodes.ts +107 -0
- package/src/controller/helpers/ota.ts +575 -0
- package/src/controller/helpers/request.ts +96 -0
- package/src/controller/helpers/requestQueue.ts +126 -0
- package/src/controller/helpers/zclFrameConverter.ts +64 -0
- package/src/controller/helpers/zclTransactionSequenceNumber.ts +15 -0
- package/src/controller/index.ts +6 -0
- package/src/controller/model/device.ts +1791 -0
- package/src/controller/model/endpoint.ts +1235 -0
- package/src/controller/model/entity.ts +43 -0
- package/src/controller/model/group.ts +446 -0
- package/src/controller/model/index.ts +5 -0
- package/src/controller/model/konnextConfig.ts +6 -0
- package/src/controller/model/zigbeeEntity.ts +30 -0
- package/src/controller/touchlink.ts +195 -0
- package/src/controller/tstype.ts +374 -0
- package/src/index.ts +14 -0
- package/src/models/backup-storage-legacy.ts +48 -0
- package/src/models/backup-storage-unified.ts +47 -0
- package/src/models/backup.ts +37 -0
- package/src/models/index.ts +5 -0
- package/src/models/network-options.ts +11 -0
- package/src/utils/aes.ts +218 -0
- package/src/utils/async-mutex.ts +31 -0
- package/src/utils/backup.ts +152 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/logger.ts +20 -0
- package/src/utils/patchBigIntSerialization.ts +8 -0
- package/src/utils/queue.ts +79 -0
- package/src/utils/timeService.ts +139 -0
- package/src/utils/utils.ts +19 -0
- package/src/utils/wait.ts +5 -0
- package/src/utils/waitress.ts +96 -0
- package/src/zspec/consts.ts +89 -0
- package/src/zspec/enums.ts +22 -0
- package/src/zspec/index.ts +3 -0
- package/src/zspec/tstypes.ts +18 -0
- package/src/zspec/utils.ts +247 -0
- package/src/zspec/zcl/buffaloZcl.ts +1073 -0
- package/src/zspec/zcl/definition/cluster.ts +7845 -0
- package/src/zspec/zcl/definition/clusters-types.ts +8577 -0
- package/src/zspec/zcl/definition/consts.ts +24 -0
- package/src/zspec/zcl/definition/datatypes.ts +2454 -0
- package/src/zspec/zcl/definition/enums.ts +224 -0
- package/src/zspec/zcl/definition/foundation.ts +342 -0
- package/src/zspec/zcl/definition/manufacturerCode.ts +730 -0
- package/src/zspec/zcl/definition/status.ts +69 -0
- package/src/zspec/zcl/definition/tstype.ts +446 -0
- package/src/zspec/zcl/index.ts +11 -0
- package/src/zspec/zcl/utils.ts +521 -0
- package/src/zspec/zcl/zclFrame.ts +383 -0
- package/src/zspec/zcl/zclHeader.ts +102 -0
- package/src/zspec/zcl/zclStatusError.ts +10 -0
- package/src/zspec/zdo/buffaloZdo.ts +2336 -0
- package/src/zspec/zdo/definition/clusters.ts +722 -0
- package/src/zspec/zdo/definition/consts.ts +16 -0
- package/src/zspec/zdo/definition/enums.ts +99 -0
- package/src/zspec/zdo/definition/status.ts +105 -0
- package/src/zspec/zdo/definition/tstypes.ts +1062 -0
- package/src/zspec/zdo/index.ts +7 -0
- package/src/zspec/zdo/utils.ts +76 -0
- package/src/zspec/zdo/zdoStatusError.ts +10 -0
- package/test/adapter/adapter.test.ts +1276 -0
- package/test/adapter/ember/ash.test.ts +337 -0
- package/test/adapter/ember/consts.ts +131 -0
- package/test/adapter/ember/emberAdapter.test.ts +3447 -0
- package/test/adapter/ember/ezsp.test.ts +389 -0
- package/test/adapter/ember/ezspBuffalo.test.ts +93 -0
- package/test/adapter/ember/ezspError.test.ts +12 -0
- package/test/adapter/ember/math.test.ts +190 -0
- package/test/adapter/ezsp/frame.test.ts +30 -0
- package/test/adapter/ezsp/uart.test.ts +181 -0
- package/test/adapter/z-stack/adapter.test.ts +4260 -0
- package/test/adapter/z-stack/constants.test.ts +33 -0
- package/test/adapter/z-stack/structs.test.ts +115 -0
- package/test/adapter/z-stack/unpi.test.ts +213 -0
- package/test/adapter/z-stack/znp.test.ts +1288 -0
- package/test/adapter/zboss/fixZdoResponse.test.ts +179 -0
- package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +81 -0
- package/test/adapter/zigate/zdo.test.ts +187 -0
- package/test/adapter/zoh/utils.test.ts +36 -0
- package/test/adapter/zoh/zohAdapter.test.ts +1451 -0
- package/test/benchOptions.ts +14 -0
- package/test/buffalo.test.ts +431 -0
- package/test/controller.bench.ts +215 -0
- package/test/controller.test.ts +10030 -0
- package/test/data/integrity-code-1166-012B-24031511-upgradeMe-RB 249 T.zigbee +0 -0
- package/test/data/manuf-tags-tradfri-cv-cct-unified_release_prod_v587757105_33e34452-9267-4665-bc5a-844c8f61f063.ota +0 -0
- package/test/data/padded-tretakt_smart_plug_soc-0x1100-2.4.25-prod.ota.ota.signed +0 -0
- package/test/data/telink-aes-A60_RGBW_T-0x00B6-0x03483712-MF_DIS.OTA +0 -0
- package/test/data/zbminir2_v1.0.8.ota +0 -0
- package/test/device-ota.test.ts +3332 -0
- package/test/greenpower.test.ts +1409 -0
- package/test/mockAdapters.ts +95 -0
- package/test/mockDevices.ts +623 -0
- package/test/requests.bench.ts +321 -0
- package/test/testUtils.ts +20 -0
- package/test/timeService.test.ts +214 -0
- package/test/tsconfig.json +9 -0
- package/test/utils/math.ts +19 -0
- package/test/utils.test.ts +352 -0
- package/test/vitest.config.mts +28 -0
- package/test/vitest.ts +9 -0
- package/test/zcl.test.ts +2858 -0
- package/test/zspec/utils.test.ts +68 -0
- package/test/zspec/zcl/buffalo.test.ts +1316 -0
- package/test/zspec/zcl/frame.test.ts +1056 -0
- package/test/zspec/zcl/utils.test.ts +650 -0
- package/test/zspec/zdo/buffalo.test.ts +1850 -0
- package/test/zspec/zdo/utils.test.ts +241 -0
- package/tsconfig.json +8 -10
- package/.babelrc.js +0 -6
- package/.eslintignore +0 -3
- package/dist/adapter/adapter.d.ts +0 -64
- package/dist/adapter/adapter.d.ts.map +0 -1
- package/dist/adapter/adapter.js +0 -157
- package/dist/adapter/adapter.js.map +0 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -71
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +0 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.js +0 -1072
- package/dist/adapter/deconz/adapter/deconzAdapter.js.map +0 -1
- package/dist/adapter/deconz/adapter/index.d.ts +0 -3
- package/dist/adapter/deconz/adapter/index.d.ts.map +0 -1
- package/dist/adapter/deconz/adapter/index.js +0 -11
- package/dist/adapter/deconz/adapter/index.js.map +0 -1
- package/dist/adapter/deconz/driver/constants.d.ts +0 -105
- package/dist/adapter/deconz/driver/constants.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/constants.js +0 -56
- package/dist/adapter/deconz/driver/constants.js.map +0 -1
- package/dist/adapter/deconz/driver/driver.d.ts +0 -82
- package/dist/adapter/deconz/driver/driver.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/driver.js +0 -751
- package/dist/adapter/deconz/driver/driver.js.map +0 -1
- package/dist/adapter/deconz/driver/frame.d.ts +0 -7
- package/dist/adapter/deconz/driver/frame.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/frame.js +0 -14
- package/dist/adapter/deconz/driver/frame.js.map +0 -1
- package/dist/adapter/deconz/driver/frameParser.d.ts +0 -3
- package/dist/adapter/deconz/driver/frameParser.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/frameParser.js +0 -444
- package/dist/adapter/deconz/driver/frameParser.js.map +0 -1
- package/dist/adapter/deconz/driver/parser.d.ts +0 -13
- package/dist/adapter/deconz/driver/parser.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/parser.js +0 -64
- package/dist/adapter/deconz/driver/parser.js.map +0 -1
- package/dist/adapter/deconz/driver/writer.d.ts +0 -9
- package/dist/adapter/deconz/driver/writer.d.ts.map +0 -1
- package/dist/adapter/deconz/driver/writer.js +0 -45
- package/dist/adapter/deconz/driver/writer.js.map +0 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -806
- package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/emberAdapter.js +0 -2942
- package/dist/adapter/ember/adapter/emberAdapter.js.map +0 -1
- package/dist/adapter/ember/adapter/endpoints.d.ts +0 -27
- package/dist/adapter/ember/adapter/endpoints.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/endpoints.js +0 -68
- package/dist/adapter/ember/adapter/endpoints.js.map +0 -1
- package/dist/adapter/ember/adapter/index.d.ts +0 -3
- package/dist/adapter/ember/adapter/index.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/index.js +0 -6
- package/dist/adapter/ember/adapter/index.js.map +0 -1
- package/dist/adapter/ember/adapter/oneWaitress.d.ts +0 -108
- package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/oneWaitress.js +0 -241
- package/dist/adapter/ember/adapter/oneWaitress.js.map +0 -1
- package/dist/adapter/ember/adapter/requestQueue.d.ts +0 -57
- package/dist/adapter/ember/adapter/requestQueue.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/requestQueue.js +0 -139
- package/dist/adapter/ember/adapter/requestQueue.js.map +0 -1
- package/dist/adapter/ember/adapter/tokensManager.d.ts +0 -69
- package/dist/adapter/ember/adapter/tokensManager.d.ts.map +0 -1
- package/dist/adapter/ember/adapter/tokensManager.js +0 -688
- package/dist/adapter/ember/adapter/tokensManager.js.map +0 -1
- package/dist/adapter/ember/consts.d.ts +0 -191
- package/dist/adapter/ember/consts.d.ts.map +0 -1
- package/dist/adapter/ember/consts.js +0 -246
- package/dist/adapter/ember/consts.js.map +0 -1
- package/dist/adapter/ember/enums.d.ts +0 -2172
- package/dist/adapter/ember/enums.d.ts.map +0 -1
- package/dist/adapter/ember/enums.js +0 -2375
- package/dist/adapter/ember/enums.js.map +0 -1
- package/dist/adapter/ember/ezsp/buffalo.d.ts +0 -156
- package/dist/adapter/ember/ezsp/buffalo.d.ts.map +0 -1
- package/dist/adapter/ember/ezsp/buffalo.js +0 -1033
- package/dist/adapter/ember/ezsp/buffalo.js.map +0 -1
- package/dist/adapter/ember/ezsp/consts.d.ts +0 -116
- package/dist/adapter/ember/ezsp/consts.d.ts.map +0 -1
- package/dist/adapter/ember/ezsp/consts.js +0 -128
- package/dist/adapter/ember/ezsp/consts.js.map +0 -1
- package/dist/adapter/ember/ezsp/enums.d.ts +0 -879
- package/dist/adapter/ember/ezsp/enums.d.ts.map +0 -1
- package/dist/adapter/ember/ezsp/enums.js +0 -948
- package/dist/adapter/ember/ezsp/enums.js.map +0 -1
- package/dist/adapter/ember/ezsp/ezsp.d.ts +0 -2662
- package/dist/adapter/ember/ezsp/ezsp.d.ts.map +0 -1
- package/dist/adapter/ember/ezsp/ezsp.js +0 -6454
- package/dist/adapter/ember/ezsp/ezsp.js.map +0 -1
- package/dist/adapter/ember/types.d.ts +0 -733
- package/dist/adapter/ember/types.d.ts.map +0 -1
- package/dist/adapter/ember/types.js +0 -3
- package/dist/adapter/ember/types.js.map +0 -1
- package/dist/adapter/ember/uart/ash.d.ts +0 -464
- package/dist/adapter/ember/uart/ash.d.ts.map +0 -1
- package/dist/adapter/ember/uart/ash.js +0 -1633
- package/dist/adapter/ember/uart/ash.js.map +0 -1
- package/dist/adapter/ember/uart/consts.d.ts +0 -91
- package/dist/adapter/ember/uart/consts.d.ts.map +0 -1
- package/dist/adapter/ember/uart/consts.js +0 -100
- package/dist/adapter/ember/uart/consts.js.map +0 -1
- package/dist/adapter/ember/uart/enums.d.ts +0 -191
- package/dist/adapter/ember/uart/enums.d.ts.map +0 -1
- package/dist/adapter/ember/uart/enums.js +0 -197
- package/dist/adapter/ember/uart/enums.js.map +0 -1
- package/dist/adapter/ember/uart/parser.d.ts +0 -10
- package/dist/adapter/ember/uart/parser.d.ts.map +0 -1
- package/dist/adapter/ember/uart/parser.js +0 -37
- package/dist/adapter/ember/uart/parser.js.map +0 -1
- package/dist/adapter/ember/uart/queues.d.ts +0 -85
- package/dist/adapter/ember/uart/queues.d.ts.map +0 -1
- package/dist/adapter/ember/uart/queues.js +0 -214
- package/dist/adapter/ember/uart/queues.js.map +0 -1
- package/dist/adapter/ember/uart/writer.d.ts +0 -15
- package/dist/adapter/ember/uart/writer.d.ts.map +0 -1
- package/dist/adapter/ember/uart/writer.js +0 -46
- package/dist/adapter/ember/uart/writer.js.map +0 -1
- package/dist/adapter/ember/utils/initters.d.ts +0 -20
- package/dist/adapter/ember/utils/initters.d.ts.map +0 -1
- package/dist/adapter/ember/utils/initters.js +0 -58
- package/dist/adapter/ember/utils/initters.js.map +0 -1
- package/dist/adapter/ember/utils/math.d.ts +0 -51
- package/dist/adapter/ember/utils/math.d.ts.map +0 -1
- package/dist/adapter/ember/utils/math.js +0 -102
- package/dist/adapter/ember/utils/math.js.map +0 -1
- package/dist/adapter/ember/zdo.d.ts +0 -925
- package/dist/adapter/ember/zdo.d.ts.map +0 -1
- package/dist/adapter/ember/zdo.js +0 -723
- package/dist/adapter/ember/zdo.js.map +0 -1
- package/dist/adapter/events.d.ts +0 -42
- package/dist/adapter/events.d.ts.map +0 -1
- package/dist/adapter/events.js +0 -13
- package/dist/adapter/events.js.map +0 -1
- package/dist/adapter/ezsp/adapter/backup.d.ts +0 -13
- package/dist/adapter/ezsp/adapter/backup.d.ts.map +0 -1
- package/dist/adapter/ezsp/adapter/backup.js +0 -101
- package/dist/adapter/ezsp/adapter/backup.js.map +0 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -65
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +0 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -634
- package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +0 -1
- package/dist/adapter/ezsp/adapter/index.d.ts +0 -3
- package/dist/adapter/ezsp/adapter/index.d.ts.map +0 -1
- package/dist/adapter/ezsp/adapter/index.js +0 -11
- package/dist/adapter/ezsp/adapter/index.js.map +0 -1
- package/dist/adapter/ezsp/driver/commands.d.ts +0 -37
- package/dist/adapter/ezsp/driver/commands.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/commands.js +0 -2387
- package/dist/adapter/ezsp/driver/commands.js.map +0 -1
- package/dist/adapter/ezsp/driver/consts.d.ts +0 -11
- package/dist/adapter/ezsp/driver/consts.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/consts.js +0 -14
- package/dist/adapter/ezsp/driver/consts.js.map +0 -1
- package/dist/adapter/ezsp/driver/driver.d.ts +0 -109
- package/dist/adapter/ezsp/driver/driver.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/driver.js +0 -796
- package/dist/adapter/ezsp/driver/driver.js.map +0 -1
- package/dist/adapter/ezsp/driver/ezsp.d.ts +0 -106
- package/dist/adapter/ezsp/driver/ezsp.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/ezsp.js +0 -664
- package/dist/adapter/ezsp/driver/ezsp.js.map +0 -1
- package/dist/adapter/ezsp/driver/frame.d.ts +0 -40
- package/dist/adapter/ezsp/driver/frame.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/frame.js +0 -101
- package/dist/adapter/ezsp/driver/frame.js.map +0 -1
- package/dist/adapter/ezsp/driver/index.d.ts +0 -4
- package/dist/adapter/ezsp/driver/index.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/index.js +0 -9
- package/dist/adapter/ezsp/driver/index.js.map +0 -1
- package/dist/adapter/ezsp/driver/multicast.d.ts +0 -13
- package/dist/adapter/ezsp/driver/multicast.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/multicast.js +0 -74
- package/dist/adapter/ezsp/driver/multicast.js.map +0 -1
- package/dist/adapter/ezsp/driver/parser.d.ts +0 -12
- package/dist/adapter/ezsp/driver/parser.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/parser.js +0 -105
- package/dist/adapter/ezsp/driver/parser.js.map +0 -1
- package/dist/adapter/ezsp/driver/types/basic.d.ts +0 -63
- package/dist/adapter/ezsp/driver/types/basic.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/types/basic.js +0 -209
- package/dist/adapter/ezsp/driver/types/basic.js.map +0 -1
- package/dist/adapter/ezsp/driver/types/index.d.ts +0 -10
- package/dist/adapter/ezsp/driver/types/index.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/types/index.js +0 -139
- package/dist/adapter/ezsp/driver/types/index.js.map +0 -1
- package/dist/adapter/ezsp/driver/types/named.d.ts +0 -1288
- package/dist/adapter/ezsp/driver/types/named.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/types/named.js +0 -2330
- package/dist/adapter/ezsp/driver/types/named.js.map +0 -1
- package/dist/adapter/ezsp/driver/types/struct.d.ts +0 -271
- package/dist/adapter/ezsp/driver/types/struct.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/types/struct.js +0 -804
- package/dist/adapter/ezsp/driver/types/struct.js.map +0 -1
- package/dist/adapter/ezsp/driver/uart.d.ts +0 -49
- package/dist/adapter/ezsp/driver/uart.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/uart.js +0 -383
- package/dist/adapter/ezsp/driver/uart.js.map +0 -1
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +0 -3
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +0 -56
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +0 -1
- package/dist/adapter/ezsp/driver/utils/index.d.ts +0 -20
- package/dist/adapter/ezsp/driver/utils/index.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/utils/index.js +0 -73
- package/dist/adapter/ezsp/driver/utils/index.js.map +0 -1
- package/dist/adapter/ezsp/driver/writer.d.ts +0 -14
- package/dist/adapter/ezsp/driver/writer.d.ts.map +0 -1
- package/dist/adapter/ezsp/driver/writer.js +0 -83
- package/dist/adapter/ezsp/driver/writer.js.map +0 -1
- package/dist/adapter/index.d.ts +0 -5
- package/dist/adapter/index.d.ts.map +0 -1
- package/dist/adapter/index.js +0 -36
- package/dist/adapter/index.js.map +0 -1
- package/dist/adapter/serialPort.d.ts +0 -14
- package/dist/adapter/serialPort.d.ts.map +0 -1
- package/dist/adapter/serialPort.js +0 -47
- package/dist/adapter/serialPort.js.map +0 -1
- package/dist/adapter/serialPortUtils.d.ts +0 -13
- package/dist/adapter/serialPortUtils.d.ts.map +0 -1
- package/dist/adapter/serialPortUtils.js +0 -19
- package/dist/adapter/serialPortUtils.js.map +0 -1
- package/dist/adapter/socketPortUtils.d.ts +0 -11
- package/dist/adapter/socketPortUtils.d.ts.map +0 -1
- package/dist/adapter/socketPortUtils.js +0 -17
- package/dist/adapter/socketPortUtils.js.map +0 -1
- package/dist/adapter/tstype.d.ts +0 -86
- package/dist/adapter/tstype.d.ts.map +0 -1
- package/dist/adapter/tstype.js +0 -3
- package/dist/adapter/tstype.js.map +0 -1
- package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -62
- package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/adapter-backup.js +0 -459
- package/dist/adapter/z-stack/adapter/adapter-backup.js.map +0 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +0 -151
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +0 -259
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +0 -1
- package/dist/adapter/z-stack/adapter/endpoints.d.ts +0 -12
- package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/endpoints.js +0 -74
- package/dist/adapter/z-stack/adapter/endpoints.js.map +0 -1
- package/dist/adapter/z-stack/adapter/index.d.ts +0 -3
- package/dist/adapter/z-stack/adapter/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/index.js +0 -9
- package/dist/adapter/z-stack/adapter/index.js.map +0 -1
- package/dist/adapter/z-stack/adapter/manager.d.ts +0 -84
- package/dist/adapter/z-stack/adapter/manager.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/manager.js +0 -474
- package/dist/adapter/z-stack/adapter/manager.js.map +0 -1
- package/dist/adapter/z-stack/adapter/tstype.d.ts +0 -7
- package/dist/adapter/z-stack/adapter/tstype.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/tstype.js +0 -10
- package/dist/adapter/z-stack/adapter/tstype.js.map +0 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -86
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +0 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -912
- package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +0 -1
- package/dist/adapter/z-stack/constants/af.d.ts +0 -24
- package/dist/adapter/z-stack/constants/af.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/af.js +0 -28
- package/dist/adapter/z-stack/constants/af.js.map +0 -1
- package/dist/adapter/z-stack/constants/common.d.ts +0 -279
- package/dist/adapter/z-stack/constants/common.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/common.js +0 -293
- package/dist/adapter/z-stack/constants/common.js.map +0 -1
- package/dist/adapter/z-stack/constants/dbg.d.ts +0 -23
- package/dist/adapter/z-stack/constants/dbg.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/dbg.js +0 -25
- package/dist/adapter/z-stack/constants/dbg.js.map +0 -1
- package/dist/adapter/z-stack/constants/index.d.ts +0 -11
- package/dist/adapter/z-stack/constants/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/index.js +0 -48
- package/dist/adapter/z-stack/constants/index.js.map +0 -1
- package/dist/adapter/z-stack/constants/mac.d.ts +0 -128
- package/dist/adapter/z-stack/constants/mac.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/mac.js +0 -130
- package/dist/adapter/z-stack/constants/mac.js.map +0 -1
- package/dist/adapter/z-stack/constants/sapi.d.ts +0 -25
- package/dist/adapter/z-stack/constants/sapi.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/sapi.js +0 -27
- package/dist/adapter/z-stack/constants/sapi.js.map +0 -1
- package/dist/adapter/z-stack/constants/sys.d.ts +0 -72
- package/dist/adapter/z-stack/constants/sys.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/sys.js +0 -74
- package/dist/adapter/z-stack/constants/sys.js.map +0 -1
- package/dist/adapter/z-stack/constants/util.d.ts +0 -82
- package/dist/adapter/z-stack/constants/util.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/util.js +0 -84
- package/dist/adapter/z-stack/constants/util.js.map +0 -1
- package/dist/adapter/z-stack/constants/utils.d.ts +0 -5
- package/dist/adapter/z-stack/constants/utils.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/utils.js +0 -15
- package/dist/adapter/z-stack/constants/utils.js.map +0 -1
- package/dist/adapter/z-stack/constants/zdo.d.ts +0 -103
- package/dist/adapter/z-stack/constants/zdo.d.ts.map +0 -1
- package/dist/adapter/z-stack/constants/zdo.js +0 -105
- package/dist/adapter/z-stack/constants/zdo.js.map +0 -1
- package/dist/adapter/z-stack/models/index.d.ts +0 -2
- package/dist/adapter/z-stack/models/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/models/index.js +0 -18
- package/dist/adapter/z-stack/models/index.js.map +0 -1
- package/dist/adapter/z-stack/models/startup-options.d.ts +0 -13
- package/dist/adapter/z-stack/models/startup-options.d.ts.map +0 -1
- package/dist/adapter/z-stack/models/startup-options.js +0 -3
- package/dist/adapter/z-stack/models/startup-options.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +0 -24
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +0 -46
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-table.js +0 -23
- package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +0 -22
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +0 -24
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +0 -25
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +0 -24
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +0 -9
- package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/channel-list.js +0 -16
- package/dist/adapter/z-stack/structs/entries/channel-list.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +0 -9
- package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/has-configured.js +0 -17
- package/dist/adapter/z-stack/structs/entries/has-configured.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/index.d.ts +0 -17
- package/dist/adapter/z-stack/structs/entries/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/index.js +0 -33
- package/dist/adapter/z-stack/structs/entries/index.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nib.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nib.js +0 -69
- package/dist/adapter/z-stack/structs/entries/nib.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +0 -19
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +0 -9
- package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key.js +0 -16
- package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +0 -9
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +0 -16
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +0 -14
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +0 -24
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +0 -23
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +0 -21
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +0 -37
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +0 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +0 -11
- package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-table.js +0 -25
- package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +0 -1
- package/dist/adapter/z-stack/structs/index.d.ts +0 -5
- package/dist/adapter/z-stack/structs/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/index.js +0 -21
- package/dist/adapter/z-stack/structs/index.js.map +0 -1
- package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +0 -14
- package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/serializable-memory-object.js +0 -3
- package/dist/adapter/z-stack/structs/serializable-memory-object.js.map +0 -1
- package/dist/adapter/z-stack/structs/struct.d.ts +0 -100
- package/dist/adapter/z-stack/structs/struct.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/struct.js +0 -297
- package/dist/adapter/z-stack/structs/struct.js.map +0 -1
- package/dist/adapter/z-stack/structs/table.d.ts +0 -95
- package/dist/adapter/z-stack/structs/table.d.ts.map +0 -1
- package/dist/adapter/z-stack/structs/table.js +0 -164
- package/dist/adapter/z-stack/structs/table.js.map +0 -1
- package/dist/adapter/z-stack/unpi/constants.d.ts +0 -29
- package/dist/adapter/z-stack/unpi/constants.d.ts.map +0 -1
- package/dist/adapter/z-stack/unpi/constants.js +0 -40
- package/dist/adapter/z-stack/unpi/constants.js.map +0 -1
- package/dist/adapter/z-stack/unpi/frame.d.ts +0 -17
- package/dist/adapter/z-stack/unpi/frame.d.ts.map +0 -1
- package/dist/adapter/z-stack/unpi/frame.js +0 -55
- package/dist/adapter/z-stack/unpi/frame.js.map +0 -1
- package/dist/adapter/z-stack/unpi/index.d.ts +0 -6
- package/dist/adapter/z-stack/unpi/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/unpi/index.js +0 -38
- package/dist/adapter/z-stack/unpi/index.js.map +0 -1
- package/dist/adapter/z-stack/unpi/parser.d.ts +0 -13
- package/dist/adapter/z-stack/unpi/parser.d.ts.map +0 -1
- package/dist/adapter/z-stack/unpi/parser.js +0 -86
- package/dist/adapter/z-stack/unpi/parser.js.map +0 -1
- package/dist/adapter/z-stack/unpi/writer.d.ts +0 -12
- package/dist/adapter/z-stack/unpi/writer.d.ts.map +0 -1
- package/dist/adapter/z-stack/unpi/writer.js +0 -55
- package/dist/adapter/z-stack/unpi/writer.js.map +0 -1
- package/dist/adapter/z-stack/utils/channel-list.d.ts +0 -21
- package/dist/adapter/z-stack/utils/channel-list.d.ts.map +0 -1
- package/dist/adapter/z-stack/utils/channel-list.js +0 -41
- package/dist/adapter/z-stack/utils/channel-list.js.map +0 -1
- package/dist/adapter/z-stack/utils/index.d.ts +0 -3
- package/dist/adapter/z-stack/utils/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/utils/index.js +0 -19
- package/dist/adapter/z-stack/utils/index.js.map +0 -1
- package/dist/adapter/z-stack/utils/network-options.d.ts +0 -9
- package/dist/adapter/z-stack/utils/network-options.d.ts.map +0 -1
- package/dist/adapter/z-stack/utils/network-options.js +0 -23
- package/dist/adapter/z-stack/utils/network-options.js.map +0 -1
- package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +0 -14
- package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/buffaloZnp.js +0 -243
- package/dist/adapter/z-stack/znp/buffaloZnp.js.map +0 -1
- package/dist/adapter/z-stack/znp/definition.d.ts +0 -6
- package/dist/adapter/z-stack/znp/definition.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/definition.js +0 -3052
- package/dist/adapter/z-stack/znp/definition.js.map +0 -1
- package/dist/adapter/z-stack/znp/index.d.ts +0 -4
- package/dist/adapter/z-stack/znp/index.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/index.js +0 -11
- package/dist/adapter/z-stack/znp/index.js.map +0 -1
- package/dist/adapter/z-stack/znp/parameterType.d.ts +0 -23
- package/dist/adapter/z-stack/znp/parameterType.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/parameterType.js +0 -26
- package/dist/adapter/z-stack/znp/parameterType.js.map +0 -1
- package/dist/adapter/z-stack/znp/tstype.d.ts +0 -23
- package/dist/adapter/z-stack/znp/tstype.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/tstype.js +0 -3
- package/dist/adapter/z-stack/znp/tstype.js.map +0 -1
- package/dist/adapter/z-stack/znp/znp.d.ts +0 -47
- package/dist/adapter/z-stack/znp/znp.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/znp.js +0 -322
- package/dist/adapter/z-stack/znp/znp.js.map +0 -1
- package/dist/adapter/z-stack/znp/zpiObject.d.ts +0 -20
- package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +0 -1
- package/dist/adapter/z-stack/znp/zpiObject.js +0 -103
- package/dist/adapter/z-stack/znp/zpiObject.js.map +0 -1
- package/dist/adapter/zigate/adapter/index.d.ts +0 -3
- package/dist/adapter/zigate/adapter/index.d.ts.map +0 -1
- package/dist/adapter/zigate/adapter/index.js +0 -11
- package/dist/adapter/zigate/adapter/index.js.map +0 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -72
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +0 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -681
- package/dist/adapter/zigate/adapter/zigateAdapter.js.map +0 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +0 -18
- package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.js +0 -190
- package/dist/adapter/zigate/driver/buffaloZiGate.js.map +0 -1
- package/dist/adapter/zigate/driver/commandType.d.ts +0 -43
- package/dist/adapter/zigate/driver/commandType.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/commandType.js +0 -390
- package/dist/adapter/zigate/driver/commandType.js.map +0 -1
- package/dist/adapter/zigate/driver/constants.d.ts +0 -277
- package/dist/adapter/zigate/driver/constants.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/constants.js +0 -372
- package/dist/adapter/zigate/driver/constants.js.map +0 -1
- package/dist/adapter/zigate/driver/frame.d.ts +0 -27
- package/dist/adapter/zigate/driver/frame.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/frame.js +0 -173
- package/dist/adapter/zigate/driver/frame.js.map +0 -1
- package/dist/adapter/zigate/driver/messageType.d.ts +0 -13
- package/dist/adapter/zigate/driver/messageType.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/messageType.js +0 -284
- package/dist/adapter/zigate/driver/messageType.js.map +0 -1
- package/dist/adapter/zigate/driver/parameterType.d.ts +0 -28
- package/dist/adapter/zigate/driver/parameterType.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/parameterType.js +0 -33
- package/dist/adapter/zigate/driver/parameterType.js.map +0 -1
- package/dist/adapter/zigate/driver/ziGateObject.d.ts +0 -24
- package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/ziGateObject.js +0 -111
- package/dist/adapter/zigate/driver/ziGateObject.js.map +0 -1
- package/dist/adapter/zigate/driver/zigate.d.ts +0 -50
- package/dist/adapter/zigate/driver/zigate.d.ts.map +0 -1
- package/dist/adapter/zigate/driver/zigate.js +0 -289
- package/dist/adapter/zigate/driver/zigate.js.map +0 -1
- package/dist/buffalo/buffalo.d.ts +0 -55
- package/dist/buffalo/buffalo.d.ts.map +0 -1
- package/dist/buffalo/buffalo.js +0 -230
- package/dist/buffalo/buffalo.js.map +0 -1
- package/dist/buffalo/index.d.ts +0 -3
- package/dist/buffalo/index.d.ts.map +0 -1
- package/dist/buffalo/index.js +0 -9
- package/dist/buffalo/index.js.map +0 -1
- package/dist/controller/controller.d.ts +0 -119
- package/dist/controller/controller.d.ts.map +0 -1
- package/dist/controller/controller.js +0 -700
- package/dist/controller/controller.js.map +0 -1
- package/dist/controller/database.d.ts +0 -20
- package/dist/controller/database.d.ts.map +0 -1
- package/dist/controller/database.js +0 -94
- package/dist/controller/database.js.map +0 -1
- package/dist/controller/events.d.ts +0 -59
- package/dist/controller/events.d.ts.map +0 -1
- package/dist/controller/events.js +0 -113
- package/dist/controller/events.js.map +0 -1
- package/dist/controller/greenPower.d.ts +0 -14
- package/dist/controller/greenPower.d.ts.map +0 -1
- package/dist/controller/greenPower.js +0 -216
- package/dist/controller/greenPower.js.map +0 -1
- package/dist/controller/helpers/index.d.ts +0 -3
- package/dist/controller/helpers/index.d.ts.map +0 -1
- package/dist/controller/helpers/index.js +0 -29
- package/dist/controller/helpers/index.js.map +0 -1
- package/dist/controller/helpers/request.d.ts +0 -22
- package/dist/controller/helpers/request.d.ts.map +0 -1
- package/dist/controller/helpers/request.js +0 -78
- package/dist/controller/helpers/request.js.map +0 -1
- package/dist/controller/helpers/requestQueue.d.ts +0 -13
- package/dist/controller/helpers/requestQueue.d.ts.map +0 -1
- package/dist/controller/helpers/requestQueue.js +0 -106
- package/dist/controller/helpers/requestQueue.js.map +0 -1
- package/dist/controller/helpers/zclFrameConverter.d.ts +0 -9
- package/dist/controller/helpers/zclFrameConverter.d.ts.map +0 -1
- package/dist/controller/helpers/zclFrameConverter.js +0 -70
- package/dist/controller/helpers/zclFrameConverter.js.map +0 -1
- package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +0 -6
- package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +0 -1
- package/dist/controller/helpers/zclTransactionSequenceNumber.js +0 -14
- package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +0 -1
- package/dist/controller/index.d.ts +0 -6
- package/dist/controller/index.d.ts.map +0 -1
- package/dist/controller/index.js +0 -9
- package/dist/controller/index.js.map +0 -1
- package/dist/controller/model/device.d.ts +0 -140
- package/dist/controller/model/device.d.ts.map +0 -1
- package/dist/controller/model/device.js +0 -746
- package/dist/controller/model/device.js.map +0 -1
- package/dist/controller/model/endpoint.d.ts +0 -134
- package/dist/controller/model/endpoint.d.ts.map +0 -1
- package/dist/controller/model/endpoint.js +0 -667
- package/dist/controller/model/endpoint.js.map +0 -1
- package/dist/controller/model/entity.d.ts +0 -15
- package/dist/controller/model/entity.d.ts.map +0 -1
- package/dist/controller/model/entity.js +0 -27
- package/dist/controller/model/entity.js.map +0 -1
- package/dist/controller/model/group.d.ts +0 -39
- package/dist/controller/model/group.d.ts.map +0 -1
- package/dist/controller/model/group.js +0 -226
- package/dist/controller/model/group.js.map +0 -1
- package/dist/controller/model/index.d.ts +0 -6
- package/dist/controller/model/index.d.ts.map +0 -1
- package/dist/controller/model/index.js +0 -15
- package/dist/controller/model/index.js.map +0 -1
- package/dist/controller/model/konnextConfig.d.ts +0 -7
- package/dist/controller/model/konnextConfig.d.ts.map +0 -1
- package/dist/controller/model/konnextConfig.js +0 -3
- package/dist/controller/model/konnextConfig.js.map +0 -1
- package/dist/controller/touchlink.d.ts +0 -20
- package/dist/controller/touchlink.d.ts.map +0 -1
- package/dist/controller/touchlink.js +0 -157
- package/dist/controller/touchlink.js.map +0 -1
- package/dist/controller/tstype.d.ts +0 -21
- package/dist/controller/tstype.d.ts.map +0 -1
- package/dist/controller/tstype.js +0 -9
- package/dist/controller/tstype.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -37
- package/dist/index.js.map +0 -1
- package/dist/models/backup-storage-legacy.d.ts +0 -27
- package/dist/models/backup-storage-legacy.d.ts.map +0 -1
- package/dist/models/backup-storage-legacy.js +0 -3
- package/dist/models/backup-storage-legacy.js.map +0 -1
- package/dist/models/backup-storage-unified.d.ts +0 -50
- package/dist/models/backup-storage-unified.d.ts.map +0 -1
- package/dist/models/backup-storage-unified.js +0 -3
- package/dist/models/backup-storage-unified.js.map +0 -1
- package/dist/models/backup.d.ts +0 -38
- package/dist/models/backup.d.ts.map +0 -1
- package/dist/models/backup.js +0 -3
- package/dist/models/backup.js.map +0 -1
- package/dist/models/index.d.ts +0 -5
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js +0 -21
- package/dist/models/index.js.map +0 -1
- package/dist/models/network-options.d.ts +0 -13
- package/dist/models/network-options.d.ts.map +0 -1
- package/dist/models/network-options.js +0 -3
- package/dist/models/network-options.js.map +0 -1
- package/dist/utils/aes.d.ts +0 -40
- package/dist/utils/aes.d.ts.map +0 -1
- package/dist/utils/aes.js +0 -198
- package/dist/utils/aes.js.map +0 -1
- package/dist/utils/assertString.d.ts +0 -3
- package/dist/utils/assertString.d.ts.map +0 -1
- package/dist/utils/assertString.js +0 -9
- package/dist/utils/assertString.js.map +0 -1
- package/dist/utils/backup.d.ts +0 -21
- package/dist/utils/backup.d.ts.map +0 -1
- package/dist/utils/backup.js +0 -190
- package/dist/utils/backup.js.map +0 -1
- package/dist/utils/equalsPartial.d.ts +0 -3
- package/dist/utils/equalsPartial.d.ts.map +0 -1
- package/dist/utils/equalsPartial.js +0 -12
- package/dist/utils/equalsPartial.js.map +0 -1
- package/dist/utils/index.d.ts +0 -10
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -46
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/isNumberArray.d.ts +0 -3
- package/dist/utils/isNumberArray.d.ts.map +0 -1
- package/dist/utils/isNumberArray.js +0 -7
- package/dist/utils/isNumberArray.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -9
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -14
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/queue.d.ts +0 -12
- package/dist/utils/queue.d.ts.map +0 -1
- package/dist/utils/queue.js +0 -62
- package/dist/utils/queue.js.map +0 -1
- package/dist/utils/realpathSync.d.ts +0 -3
- package/dist/utils/realpathSync.d.ts.map +0 -1
- package/dist/utils/realpathSync.js +0 -13
- package/dist/utils/realpathSync.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -3
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js +0 -9
- package/dist/utils/wait.js.map +0 -1
- package/dist/utils/waitress.d.ts +0 -22
- package/dist/utils/waitress.d.ts.map +0 -1
- package/dist/utils/waitress.js +0 -69
- package/dist/utils/waitress.js.map +0 -1
- package/dist/zspec/consts.d.ts +0 -60
- package/dist/zspec/consts.d.ts.map +0 -1
- package/dist/zspec/consts.js +0 -64
- package/dist/zspec/consts.js.map +0 -1
- package/dist/zspec/enums.d.ts +0 -19
- package/dist/zspec/enums.d.ts.map +0 -1
- package/dist/zspec/enums.js +0 -28
- package/dist/zspec/enums.js.map +0 -1
- package/dist/zspec/index.d.ts +0 -4
- package/dist/zspec/index.d.ts.map +0 -1
- package/dist/zspec/index.js +0 -43
- package/dist/zspec/index.js.map +0 -1
- package/dist/zspec/tstypes.d.ts +0 -19
- package/dist/zspec/tstypes.d.ts.map +0 -1
- package/dist/zspec/tstypes.js +0 -3
- package/dist/zspec/tstypes.js.map +0 -1
- package/dist/zspec/utils.d.ts +0 -14
- package/dist/zspec/utils.d.ts.map +0 -1
- package/dist/zspec/utils.js +0 -29
- package/dist/zspec/utils.js.map +0 -1
- package/dist/zspec/zcl/buffaloZcl.d.ts +0 -55
- package/dist/zspec/zcl/buffaloZcl.d.ts.map +0 -1
- package/dist/zspec/zcl/buffaloZcl.js +0 -929
- package/dist/zspec/zcl/buffaloZcl.js.map +0 -1
- package/dist/zspec/zcl/definition/cluster.d.ts +0 -3
- package/dist/zspec/zcl/definition/cluster.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/cluster.js +0 -5500
- package/dist/zspec/zcl/definition/cluster.js.map +0 -1
- package/dist/zspec/zcl/definition/consts.d.ts +0 -9
- package/dist/zspec/zcl/definition/consts.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/consts.js +0 -27
- package/dist/zspec/zcl/definition/consts.js.map +0 -1
- package/dist/zspec/zcl/definition/enums.d.ts +0 -177
- package/dist/zspec/zcl/definition/enums.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/enums.js +0 -187
- package/dist/zspec/zcl/definition/enums.js.map +0 -1
- package/dist/zspec/zcl/definition/foundation.d.ts +0 -11
- package/dist/zspec/zcl/definition/foundation.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/foundation.js +0 -241
- package/dist/zspec/zcl/definition/foundation.js.map +0 -1
- package/dist/zspec/zcl/definition/manufacturerCode.d.ts +0 -727
- package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/manufacturerCode.js +0 -733
- package/dist/zspec/zcl/definition/manufacturerCode.js.map +0 -1
- package/dist/zspec/zcl/definition/status.d.ts +0 -69
- package/dist/zspec/zcl/definition/status.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/status.js +0 -74
- package/dist/zspec/zcl/definition/status.js.map +0 -1
- package/dist/zspec/zcl/definition/tstype.d.ts +0 -114
- package/dist/zspec/zcl/definition/tstype.d.ts.map +0 -1
- package/dist/zspec/zcl/definition/tstype.js +0 -4
- package/dist/zspec/zcl/definition/tstype.js.map +0 -1
- package/dist/zspec/zcl/index.d.ts +0 -11
- package/dist/zspec/zcl/index.d.ts.map +0 -1
- package/dist/zspec/zcl/index.js +0 -47
- package/dist/zspec/zcl/index.js.map +0 -1
- package/dist/zspec/zcl/utils.d.ts +0 -7
- package/dist/zspec/zcl/utils.d.ts.map +0 -1
- package/dist/zspec/zcl/utils.js +0 -234
- package/dist/zspec/zcl/utils.js.map +0 -1
- package/dist/zspec/zcl/zclFrame.d.ts +0 -36
- package/dist/zspec/zcl/zclFrame.d.ts.map +0 -1
- package/dist/zspec/zcl/zclFrame.js +0 -304
- package/dist/zspec/zcl/zclFrame.js.map +0 -1
- package/dist/zspec/zcl/zclHeader.d.ts +0 -17
- package/dist/zspec/zcl/zclHeader.d.ts.map +0 -1
- package/dist/zspec/zcl/zclHeader.js +0 -88
- package/dist/zspec/zcl/zclHeader.js.map +0 -1
- package/dist/zspec/zcl/zclStatusError.d.ts +0 -6
- package/dist/zspec/zcl/zclStatusError.d.ts.map +0 -1
- package/dist/zspec/zcl/zclStatusError.js +0 -13
- package/dist/zspec/zcl/zclStatusError.js.map +0 -1
- package/dist/zspec/zdo/buffaloZdo.d.ts +0 -438
- package/dist/zspec/zdo/buffaloZdo.d.ts.map +0 -1
- package/dist/zspec/zdo/buffaloZdo.js +0 -1892
- package/dist/zspec/zdo/buffaloZdo.js.map +0 -1
- package/dist/zspec/zdo/definition/clusters.d.ts +0 -624
- package/dist/zspec/zdo/definition/clusters.d.ts.map +0 -1
- package/dist/zspec/zdo/definition/clusters.js +0 -687
- package/dist/zspec/zdo/definition/clusters.js.map +0 -1
- package/dist/zspec/zdo/definition/consts.d.ts +0 -13
- package/dist/zspec/zdo/definition/consts.d.ts.map +0 -1
- package/dist/zspec/zdo/definition/consts.js +0 -16
- package/dist/zspec/zdo/definition/consts.js.map +0 -1
- package/dist/zspec/zdo/definition/enums.d.ts +0 -75
- package/dist/zspec/zdo/definition/enums.d.ts.map +0 -1
- package/dist/zspec/zdo/definition/enums.js +0 -97
- package/dist/zspec/zdo/definition/enums.js.map +0 -1
- package/dist/zspec/zdo/definition/status.d.ts +0 -99
- package/dist/zspec/zdo/definition/status.d.ts.map +0 -1
- package/dist/zspec/zdo/definition/status.js +0 -109
- package/dist/zspec/zdo/definition/status.js.map +0 -1
- package/dist/zspec/zdo/definition/tstypes.d.ts +0 -787
- package/dist/zspec/zdo/definition/tstypes.d.ts.map +0 -1
- package/dist/zspec/zdo/definition/tstypes.js +0 -3
- package/dist/zspec/zdo/definition/tstypes.js.map +0 -1
- package/dist/zspec/zdo/index.d.ts +0 -7
- package/dist/zspec/zdo/index.d.ts.map +0 -1
- package/dist/zspec/zdo/index.js +0 -39
- package/dist/zspec/zdo/index.js.map +0 -1
- package/dist/zspec/zdo/utils.d.ts +0 -25
- package/dist/zspec/zdo/utils.d.ts.map +0 -1
- package/dist/zspec/zdo/utils.js +0 -75
- package/dist/zspec/zdo/utils.js.map +0 -1
- package/dist/zspec/zdo/zdoStatusError.d.ts +0 -6
- package/dist/zspec/zdo/zdoStatusError.d.ts.map +0 -1
- package/dist/zspec/zdo/zdoStatusError.js +0 -13
- package/dist/zspec/zdo/zdoStatusError.js.map +0 -1
- package/typedoc-tsconfig.json +0 -44
package/test/zcl.test.ts
ADDED
|
@@ -0,0 +1,2858 @@
|
|
|
1
|
+
import {beforeEach, describe, expect, it, test, vi} from "vitest";
|
|
2
|
+
import * as Zcl from "../src/zspec/zcl";
|
|
3
|
+
import {BuffaloZcl} from "../src/zspec/zcl/buffaloZcl";
|
|
4
|
+
import {BuffaloZclDataType, DataType, Direction, FrameType, StructuredIndicatorType} from "../src/zspec/zcl/definition/enums";
|
|
5
|
+
|
|
6
|
+
describe("Zcl", () => {
|
|
7
|
+
it("Get cluster by name", () => {
|
|
8
|
+
const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
|
|
9
|
+
expect(cluster.ID).toBe(3);
|
|
10
|
+
expect(cluster.name).toBe("genIdentify");
|
|
11
|
+
expect(cluster.commands.identifyQuery.ID).toBe(1);
|
|
12
|
+
expect(cluster.commands.identifyQuery.name).toBe("identifyQuery");
|
|
13
|
+
expect(cluster.commandsResponse.identifyQueryRsp.ID).toBe(0);
|
|
14
|
+
expect(cluster.commandsResponse.identifyQueryRsp.name).toBe("identifyQueryRsp");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("Get cluster by ID", () => {
|
|
18
|
+
const cluster1 = Zcl.Utils.getCluster(0, undefined, {});
|
|
19
|
+
// @ts-expect-error testing
|
|
20
|
+
delete cluster1.getAttribute;
|
|
21
|
+
// @ts-expect-error testing
|
|
22
|
+
delete cluster1.getCommand;
|
|
23
|
+
// @ts-expect-error testing
|
|
24
|
+
delete cluster1.getCommandResponse;
|
|
25
|
+
const cluster2 = Zcl.Utils.getCluster("genBasic", undefined, {});
|
|
26
|
+
// @ts-expect-error testing
|
|
27
|
+
delete cluster2.getAttribute;
|
|
28
|
+
// @ts-expect-error testing
|
|
29
|
+
delete cluster2.getCommand;
|
|
30
|
+
// @ts-expect-error testing
|
|
31
|
+
delete cluster2.getCommandResponse;
|
|
32
|
+
expect(cluster1).toStrictEqual(cluster2);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("Get cluster attribute by ID", () => {
|
|
36
|
+
const cluster = Zcl.Utils.getCluster(0, undefined, {});
|
|
37
|
+
const attribute = cluster.getAttribute(1);
|
|
38
|
+
expect(attribute).toStrictEqual({ID: 1, type: DataType.UINT8, name: "appVersion", default: 0, max: 255});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("Cluster has attribute", () => {
|
|
42
|
+
const cluster = Zcl.Utils.getCluster(0, undefined, {});
|
|
43
|
+
expect(cluster.getAttribute("zclVersion")).not.toBeUndefined();
|
|
44
|
+
expect(cluster.getAttribute("NOTEXISTING")).toBeUndefined();
|
|
45
|
+
expect(cluster.getAttribute(0)).not.toBeUndefined();
|
|
46
|
+
expect(cluster.getAttribute(910293)).toBeUndefined();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("Get specific command by name", () => {
|
|
50
|
+
const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
|
|
51
|
+
const command = cluster.getCommand("ezmodeInvoke");
|
|
52
|
+
expect(command.ID).toBe(2);
|
|
53
|
+
expect(command.name).toBe("ezmodeInvoke");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("Get global command by name", () => {
|
|
57
|
+
const command = Zcl.Utils.getGlobalCommand("readRsp");
|
|
58
|
+
expect(command.ID).toBe(1);
|
|
59
|
+
expect(command.name).toBe("readRsp");
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("Get global command non existing", () => {
|
|
63
|
+
expect(() => {
|
|
64
|
+
Zcl.Utils.getGlobalCommand("nonexisting");
|
|
65
|
+
}).toThrow("Global command with key 'nonexisting' does not exist");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("Get cluster by name non-existing", () => {
|
|
69
|
+
expect(() => {
|
|
70
|
+
Zcl.Utils.getCluster("notExisting", undefined, {});
|
|
71
|
+
}).toThrow("Cluster with name 'notExisting' does not exist");
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("Get cluster by id non-existing", () => {
|
|
75
|
+
expect(JSON.parse(JSON.stringify(Zcl.Utils.getCluster(0x190231, undefined, {})))).toStrictEqual({
|
|
76
|
+
ID: 1638961,
|
|
77
|
+
attributes: {},
|
|
78
|
+
name: "1638961",
|
|
79
|
+
commands: {},
|
|
80
|
+
commandsResponse: {},
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("Get specific command by ID", () => {
|
|
85
|
+
const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
|
|
86
|
+
const command = cluster.getCommand(2);
|
|
87
|
+
expect(command).toStrictEqual(cluster.getCommand("ezmodeInvoke"));
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("Get specific command by name server to client", () => {
|
|
91
|
+
const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
|
|
92
|
+
const command = cluster.getCommandResponse(0);
|
|
93
|
+
expect(command.ID).toBe(0);
|
|
94
|
+
expect(command.name).toBe("identifyQueryRsp");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("Get specific command by name non existing", () => {
|
|
98
|
+
expect(() => {
|
|
99
|
+
const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
|
|
100
|
+
cluster.getCommandResponse("nonexisting");
|
|
101
|
+
}).toThrow("Cluster 'genIdentify' has no command response 'nonexisting'");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("Get discrete or analog of unkown type", () => {
|
|
105
|
+
expect(() => {
|
|
106
|
+
// @ts-expect-error invalid on purpose
|
|
107
|
+
Zcl.Utils.getDataTypeClass(99999);
|
|
108
|
+
}).toThrow("Don't know value type for 'undefined'");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("ZclFrame from buffer parse payload with unknown frame type", () => {
|
|
112
|
+
expect(() => {
|
|
113
|
+
// @ts-expect-error
|
|
114
|
+
Zcl.Frame.parsePayload({frameControl: {frameType: 9}}, undefined);
|
|
115
|
+
}).toThrow("Unsupported frameType '9'");
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("ZclFrame from buffer report", () => {
|
|
119
|
+
const buffer = Buffer.from([0x18, 0x4a, 0x0a, 0x55, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00]);
|
|
120
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genAnalogInput.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
121
|
+
const header = new Zcl.Header(
|
|
122
|
+
{
|
|
123
|
+
reservedBits: 0,
|
|
124
|
+
direction: 1,
|
|
125
|
+
disableDefaultResponse: true,
|
|
126
|
+
frameType: 0,
|
|
127
|
+
manufacturerSpecific: false,
|
|
128
|
+
},
|
|
129
|
+
undefined,
|
|
130
|
+
74,
|
|
131
|
+
10,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
const payload = [
|
|
135
|
+
{
|
|
136
|
+
attrData: 0,
|
|
137
|
+
attrId: 85,
|
|
138
|
+
dataType: 57,
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
expect(frame.header).toStrictEqual(header);
|
|
143
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
144
|
+
expect(frame.header.isGlobal).toBe(true);
|
|
145
|
+
expect(frame.header.isSpecific).toBe(false);
|
|
146
|
+
expect(frame.isCluster("genAnalogInput")).toBe(true);
|
|
147
|
+
expect(frame.isCommand("report")).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("ZclFrame from buffer tradfriArrowSingle", () => {
|
|
151
|
+
const buffer = Buffer.from([0x05, 0x7c, 0x11, 0x1d, 0x07, 0x00, 0x01, 0x0d, 0x00]);
|
|
152
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genScenes.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
153
|
+
const header = new Zcl.Header(
|
|
154
|
+
{
|
|
155
|
+
reservedBits: 0,
|
|
156
|
+
direction: 0,
|
|
157
|
+
disableDefaultResponse: false,
|
|
158
|
+
frameType: 1,
|
|
159
|
+
manufacturerSpecific: true,
|
|
160
|
+
},
|
|
161
|
+
4476,
|
|
162
|
+
29,
|
|
163
|
+
7,
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const payload = {value: 256, value2: 13};
|
|
167
|
+
|
|
168
|
+
expect(frame.header).toStrictEqual(header);
|
|
169
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
170
|
+
expect(frame.command.ID).toStrictEqual(7);
|
|
171
|
+
expect(frame.command.name).toStrictEqual("tradfriArrowSingle");
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it("ZclFrame from buffer genGroups getMembership", () => {
|
|
175
|
+
const buffer = Buffer.from([0x11, 0x7c, 0x02, 2, 10, 0, 20, 0]);
|
|
176
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
177
|
+
const header = new Zcl.Header(
|
|
178
|
+
{
|
|
179
|
+
reservedBits: 0,
|
|
180
|
+
direction: 0,
|
|
181
|
+
disableDefaultResponse: true,
|
|
182
|
+
frameType: 1,
|
|
183
|
+
manufacturerSpecific: false,
|
|
184
|
+
},
|
|
185
|
+
undefined,
|
|
186
|
+
124,
|
|
187
|
+
2,
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
const payload = {groupcount: 2, grouplist: [10, 20]};
|
|
191
|
+
|
|
192
|
+
expect(frame.header).toStrictEqual(header);
|
|
193
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it("ZclFrame from buffer genGroups getMembership", () => {
|
|
197
|
+
const buffer = Buffer.from([0x19, 0x7c, 0x03, 0, 10, 0]);
|
|
198
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
199
|
+
const header = new Zcl.Header(
|
|
200
|
+
{
|
|
201
|
+
reservedBits: 0,
|
|
202
|
+
direction: 1,
|
|
203
|
+
disableDefaultResponse: true,
|
|
204
|
+
frameType: 1,
|
|
205
|
+
manufacturerSpecific: false,
|
|
206
|
+
},
|
|
207
|
+
undefined,
|
|
208
|
+
124,
|
|
209
|
+
3,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
const payload = {groupid: 10, status: 0};
|
|
213
|
+
|
|
214
|
+
expect(frame.header).toStrictEqual(header);
|
|
215
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it("ZclFrame from buffer occupancy report", () => {
|
|
219
|
+
const buffer = Buffer.from([24, 169, 10, 0, 0, 24, 1]);
|
|
220
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.msOccupancySensing.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
221
|
+
const header = new Zcl.Header(
|
|
222
|
+
{
|
|
223
|
+
reservedBits: 0,
|
|
224
|
+
direction: 1,
|
|
225
|
+
disableDefaultResponse: true,
|
|
226
|
+
frameType: 0,
|
|
227
|
+
manufacturerSpecific: false,
|
|
228
|
+
},
|
|
229
|
+
undefined,
|
|
230
|
+
169,
|
|
231
|
+
10,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const payload = [{attrId: 0, dataType: 24, attrData: 1}];
|
|
235
|
+
|
|
236
|
+
expect(frame.header).toStrictEqual(header);
|
|
237
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it("ZclFrame from buffer configReportRsp - short", () => {
|
|
241
|
+
const buffer = Buffer.from([0x08, 0x01, 0x07, 0x00]);
|
|
242
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
243
|
+
const header = new Zcl.Header(
|
|
244
|
+
{
|
|
245
|
+
reservedBits: 0,
|
|
246
|
+
direction: 1,
|
|
247
|
+
disableDefaultResponse: false,
|
|
248
|
+
frameType: 0,
|
|
249
|
+
manufacturerSpecific: false,
|
|
250
|
+
},
|
|
251
|
+
undefined,
|
|
252
|
+
1,
|
|
253
|
+
7,
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
const payload = [{status: 0}];
|
|
257
|
+
|
|
258
|
+
expect(frame.header).toStrictEqual(header);
|
|
259
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
it("ZclFrame from buffer configReportRsp - long", () => {
|
|
263
|
+
const buffer = Buffer.from([0x08, 0x01, 0x07, 0x00, 0x01, 0x34, 0x12, 0x01, 0x01, 0x35, 0x12]);
|
|
264
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
265
|
+
const header = new Zcl.Header(
|
|
266
|
+
{
|
|
267
|
+
reservedBits: 0,
|
|
268
|
+
direction: 1,
|
|
269
|
+
disableDefaultResponse: false,
|
|
270
|
+
frameType: 0,
|
|
271
|
+
manufacturerSpecific: false,
|
|
272
|
+
},
|
|
273
|
+
undefined,
|
|
274
|
+
1,
|
|
275
|
+
7,
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
const payload = [
|
|
279
|
+
{status: 0, direction: 1, attrId: 0x1234},
|
|
280
|
+
{status: 1, direction: 1, attrId: 0x1235},
|
|
281
|
+
];
|
|
282
|
+
|
|
283
|
+
expect(frame.header).toStrictEqual(header);
|
|
284
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it("ZclFrame from buffer configReportRsp (hvacThermostat)", () => {
|
|
288
|
+
const buffer = Buffer.from([0x18, 0x03, 0x07, 0x00, 0x00, 0x12, 0x00]);
|
|
289
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
290
|
+
const header = new Zcl.Header(
|
|
291
|
+
{
|
|
292
|
+
reservedBits: 0,
|
|
293
|
+
direction: 1,
|
|
294
|
+
disableDefaultResponse: true,
|
|
295
|
+
frameType: 0,
|
|
296
|
+
manufacturerSpecific: false,
|
|
297
|
+
},
|
|
298
|
+
undefined,
|
|
299
|
+
3,
|
|
300
|
+
7,
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
const payload = [{status: 0, direction: 0, attrId: 18}];
|
|
304
|
+
|
|
305
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
306
|
+
expect(frame.header).toStrictEqual(header);
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it("ZclFrame from buffer getWeeklyScheduleRsp (hvacThermostat)", () => {
|
|
310
|
+
const bufferHeat = Buffer.from([
|
|
311
|
+
9, 7, 0, 6, 64, 1, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8,
|
|
312
|
+
]);
|
|
313
|
+
const frameHeat = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(bufferHeat)!, bufferHeat, {});
|
|
314
|
+
expect(frameHeat.payload).toStrictEqual({
|
|
315
|
+
numoftrans: 6,
|
|
316
|
+
dayofweek: 64,
|
|
317
|
+
mode: 1,
|
|
318
|
+
transitions: [
|
|
319
|
+
{transitionTime: 360, heatSetpoint: 2300},
|
|
320
|
+
{transitionTime: 570, heatSetpoint: 2200},
|
|
321
|
+
{transitionTime: 720, heatSetpoint: 2150},
|
|
322
|
+
{transitionTime: 840, heatSetpoint: 2150},
|
|
323
|
+
{transitionTime: 990, heatSetpoint: 2300},
|
|
324
|
+
{transitionTime: 1380, heatSetpoint: 2100},
|
|
325
|
+
],
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
const bufferCool = Buffer.from([
|
|
329
|
+
9, 7, 0, 6, 64, 2, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8,
|
|
330
|
+
]);
|
|
331
|
+
const frameCool = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(bufferCool)!, bufferCool, {});
|
|
332
|
+
expect(frameCool.payload).toStrictEqual({
|
|
333
|
+
numoftrans: 6,
|
|
334
|
+
dayofweek: 64,
|
|
335
|
+
mode: 2,
|
|
336
|
+
transitions: [
|
|
337
|
+
{transitionTime: 360, coolSetpoint: 2300},
|
|
338
|
+
{transitionTime: 570, coolSetpoint: 2200},
|
|
339
|
+
{transitionTime: 720, coolSetpoint: 2150},
|
|
340
|
+
{transitionTime: 840, coolSetpoint: 2150},
|
|
341
|
+
{transitionTime: 990, coolSetpoint: 2300},
|
|
342
|
+
{transitionTime: 1380, coolSetpoint: 2100},
|
|
343
|
+
],
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
const bufferHeatAndCool = Buffer.from([9, 7, 0, 1, 64, 3, 104, 1, 252, 8, 58, 2]);
|
|
347
|
+
const frameHeatAndCool = Zcl.Frame.fromBuffer(
|
|
348
|
+
Zcl.Clusters.hvacThermostat.ID,
|
|
349
|
+
Zcl.Header.fromBuffer(bufferHeatAndCool)!,
|
|
350
|
+
bufferHeatAndCool,
|
|
351
|
+
{},
|
|
352
|
+
);
|
|
353
|
+
expect(frameHeatAndCool.payload).toStrictEqual({
|
|
354
|
+
numoftrans: 1,
|
|
355
|
+
dayofweek: 64,
|
|
356
|
+
mode: 3,
|
|
357
|
+
transitions: [{transitionTime: 360, coolSetpoint: 570, heatSetpoint: 2300}],
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
it("ZclFrame to buffer setWeeklyScheduleRsp (hvacThermostat)", () => {
|
|
362
|
+
const payloadHeat = {
|
|
363
|
+
numoftrans: 6,
|
|
364
|
+
dayofweek: 64,
|
|
365
|
+
mode: 1,
|
|
366
|
+
transitions: [
|
|
367
|
+
{transitionTime: 360, heatSetpoint: 23},
|
|
368
|
+
{transitionTime: 570, heatSetpoint: 2200},
|
|
369
|
+
{transitionTime: 720, heatSetpoint: 2150},
|
|
370
|
+
{transitionTime: 840, heatSetpoint: 2150},
|
|
371
|
+
{transitionTime: 990, heatSetpoint: 2300},
|
|
372
|
+
{transitionTime: 1380, heatSetpoint: 2100},
|
|
373
|
+
],
|
|
374
|
+
};
|
|
375
|
+
const frameHeat = Zcl.Frame.create(
|
|
376
|
+
FrameType.SPECIFIC,
|
|
377
|
+
Direction.CLIENT_TO_SERVER,
|
|
378
|
+
false,
|
|
379
|
+
undefined,
|
|
380
|
+
8,
|
|
381
|
+
"setWeeklySchedule",
|
|
382
|
+
513,
|
|
383
|
+
payloadHeat,
|
|
384
|
+
{},
|
|
385
|
+
);
|
|
386
|
+
expect(frameHeat.toBuffer()).toStrictEqual(
|
|
387
|
+
Buffer.from([1, 8, 1, 6, 64, 1, 104, 1, 23, 0, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8]),
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
const payloadCool = {
|
|
391
|
+
numoftrans: 6,
|
|
392
|
+
dayofweek: 64,
|
|
393
|
+
mode: 2,
|
|
394
|
+
transitions: [
|
|
395
|
+
{transitionTime: 360, coolSetpoint: 2300},
|
|
396
|
+
{transitionTime: 570, coolSetpoint: 2200},
|
|
397
|
+
{transitionTime: 720, coolSetpoint: 2150},
|
|
398
|
+
{transitionTime: 840, coolSetpoint: 2150},
|
|
399
|
+
{transitionTime: 990, coolSetpoint: 2300},
|
|
400
|
+
{transitionTime: 1380, coolSetpoint: 2100},
|
|
401
|
+
],
|
|
402
|
+
};
|
|
403
|
+
const frameCool = Zcl.Frame.create(
|
|
404
|
+
FrameType.SPECIFIC,
|
|
405
|
+
Direction.CLIENT_TO_SERVER,
|
|
406
|
+
false,
|
|
407
|
+
undefined,
|
|
408
|
+
8,
|
|
409
|
+
"setWeeklySchedule",
|
|
410
|
+
513,
|
|
411
|
+
payloadCool,
|
|
412
|
+
{},
|
|
413
|
+
);
|
|
414
|
+
expect(frameCool.toBuffer()).toStrictEqual(
|
|
415
|
+
Buffer.from([1, 8, 1, 6, 64, 2, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8]),
|
|
416
|
+
);
|
|
417
|
+
|
|
418
|
+
const payloadHeatAndCool = {
|
|
419
|
+
numoftrans: 6,
|
|
420
|
+
dayofweek: 64,
|
|
421
|
+
mode: 2,
|
|
422
|
+
transitions: [{transitionTime: 360, coolSetpoint: 570, heatSetpoint: 2300}],
|
|
423
|
+
};
|
|
424
|
+
const frameHeatAndCool = Zcl.Frame.create(
|
|
425
|
+
FrameType.SPECIFIC,
|
|
426
|
+
Direction.CLIENT_TO_SERVER,
|
|
427
|
+
false,
|
|
428
|
+
undefined,
|
|
429
|
+
8,
|
|
430
|
+
"setWeeklySchedule",
|
|
431
|
+
513,
|
|
432
|
+
payloadHeatAndCool,
|
|
433
|
+
{},
|
|
434
|
+
);
|
|
435
|
+
expect(frameHeatAndCool.toBuffer()).toStrictEqual(Buffer.from([1, 8, 1, 6, 64, 2, 104, 1, 252, 8, 58, 2]));
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
it("ZclFrame from buffer configReportRsp failed", () => {
|
|
439
|
+
const buffer = Buffer.from([0x08, 0x01, 0x07, 0x02, 0x01, 0x01, 0x01]);
|
|
440
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
441
|
+
const header = new Zcl.Header(
|
|
442
|
+
{
|
|
443
|
+
reservedBits: 0,
|
|
444
|
+
direction: 1,
|
|
445
|
+
disableDefaultResponse: false,
|
|
446
|
+
frameType: 0,
|
|
447
|
+
manufacturerSpecific: false,
|
|
448
|
+
},
|
|
449
|
+
undefined,
|
|
450
|
+
1,
|
|
451
|
+
7,
|
|
452
|
+
);
|
|
453
|
+
|
|
454
|
+
const payload = [{status: 2, direction: 1, attrId: 257}];
|
|
455
|
+
|
|
456
|
+
expect(frame.header).toStrictEqual(header);
|
|
457
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
it("ZclFrame from buffer defaultRsp", () => {
|
|
461
|
+
const buffer = Buffer.from([0x18, 0x04, 0x0b, 0x0c, 0x82]);
|
|
462
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
463
|
+
const header = new Zcl.Header(
|
|
464
|
+
{
|
|
465
|
+
reservedBits: 0,
|
|
466
|
+
direction: 1,
|
|
467
|
+
disableDefaultResponse: true,
|
|
468
|
+
frameType: 0,
|
|
469
|
+
manufacturerSpecific: false,
|
|
470
|
+
},
|
|
471
|
+
undefined,
|
|
472
|
+
4,
|
|
473
|
+
11,
|
|
474
|
+
);
|
|
475
|
+
|
|
476
|
+
const payload = {cmdId: 12, statusCode: 130};
|
|
477
|
+
|
|
478
|
+
expect(frame.header).toStrictEqual(header);
|
|
479
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
test.each([
|
|
483
|
+
[
|
|
484
|
+
[
|
|
485
|
+
28, 95, 17, 3, 10, 1, 255, 66, 68, 3, 40, 29, 5, 33, 190, 45, 8, 33, 47, 18, 9, 33, 2, 21, 100, 16, 1, 101, 16, 0, 110, 32, 255, 111,
|
|
486
|
+
32, 255, 148, 32, 4, 149, 57, 184, 30, 21, 62, 150, 57, 211, 249, 17, 69, 151, 57, 0, 48, 104, 59, 152, 57, 0, 0, 0, 0, 155, 33, 1, 0,
|
|
487
|
+
156, 32, 1, 10, 33, 56, 38, 12, 40, 0, 0,
|
|
488
|
+
],
|
|
489
|
+
[
|
|
490
|
+
{
|
|
491
|
+
attrId: 65281,
|
|
492
|
+
dataType: 66,
|
|
493
|
+
attrData: {
|
|
494
|
+
"3": 29,
|
|
495
|
+
"5": 11710,
|
|
496
|
+
"8": 4655,
|
|
497
|
+
"9": 5378,
|
|
498
|
+
"10": 9784,
|
|
499
|
+
"12": 0,
|
|
500
|
+
"100": 1,
|
|
501
|
+
"101": 0,
|
|
502
|
+
"110": 255,
|
|
503
|
+
"111": 255,
|
|
504
|
+
"148": 4,
|
|
505
|
+
"149": 0.14562499523162842,
|
|
506
|
+
"150": 2335.614013671875,
|
|
507
|
+
"151": 0.0035429000854492188,
|
|
508
|
+
"152": 0,
|
|
509
|
+
"155": 1,
|
|
510
|
+
"156": 1,
|
|
511
|
+
},
|
|
512
|
+
},
|
|
513
|
+
],
|
|
514
|
+
],
|
|
515
|
+
[
|
|
516
|
+
[
|
|
517
|
+
28, 95, 17, 3, 10, 5, 0, 66, 21, 108, 117, 109, 105, 46, 115, 101, 110, 115, 111, 114, 95, 119, 108, 101, 97, 107, 46, 97, 113, 49, 1,
|
|
518
|
+
255, 66, 34, 1, 33, 213, 12, 3, 40, 33, 4, 33, 168, 19, 5, 33, 43, 0, 6, 36, 0, 0, 5, 0, 0, 8, 33, 4, 2, 10, 33, 0, 0, 100, 16, 0,
|
|
519
|
+
],
|
|
520
|
+
[
|
|
521
|
+
{attrId: 5, dataType: 66, attrData: "lumi.sensor_wleak.aq1"},
|
|
522
|
+
{attrId: 65281, dataType: 66, attrData: {"1": 3285, "3": 33, "4": 5032, "5": 43, "6": 327680, "8": 516, "10": 0, "100": 0}},
|
|
523
|
+
],
|
|
524
|
+
],
|
|
525
|
+
])("ZclFrame from buffer xiaomiStruct", (data, payload) => {
|
|
526
|
+
const buffer = Buffer.from(data);
|
|
527
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
528
|
+
const header = new Zcl.Header(
|
|
529
|
+
{
|
|
530
|
+
reservedBits: 0,
|
|
531
|
+
direction: 1,
|
|
532
|
+
disableDefaultResponse: true,
|
|
533
|
+
frameType: 0,
|
|
534
|
+
manufacturerSpecific: true,
|
|
535
|
+
},
|
|
536
|
+
4447,
|
|
537
|
+
3,
|
|
538
|
+
10,
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
expect(frame.header).toStrictEqual(header);
|
|
542
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
it("ZclFrame from buffer struct", () => {
|
|
546
|
+
const buffer = Buffer.from([28, 52, 18, 194, 10, 2, 255, 76, 6, 0, 16, 1, 33, 206, 11, 33, 168, 67, 36, 1, 0, 0, 0, 0, 33, 48, 2, 32, 86]);
|
|
547
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
548
|
+
const header = new Zcl.Header(
|
|
549
|
+
{
|
|
550
|
+
reservedBits: 0,
|
|
551
|
+
direction: 1,
|
|
552
|
+
disableDefaultResponse: true,
|
|
553
|
+
frameType: 0,
|
|
554
|
+
manufacturerSpecific: true,
|
|
555
|
+
},
|
|
556
|
+
4660,
|
|
557
|
+
194,
|
|
558
|
+
10,
|
|
559
|
+
);
|
|
560
|
+
|
|
561
|
+
const payload = [
|
|
562
|
+
{
|
|
563
|
+
attrId: 65282,
|
|
564
|
+
dataType: 76,
|
|
565
|
+
numElms: 6,
|
|
566
|
+
structElms: [
|
|
567
|
+
{elmType: 16, elmVal: 1},
|
|
568
|
+
{elmType: 33, elmVal: 3022},
|
|
569
|
+
{elmType: 33, elmVal: 17320},
|
|
570
|
+
{elmType: 36, elmVal: 1},
|
|
571
|
+
{elmType: 33, elmVal: 560},
|
|
572
|
+
{elmType: 32, elmVal: 86},
|
|
573
|
+
],
|
|
574
|
+
attrData: [
|
|
575
|
+
{elmType: 16, elmVal: 1},
|
|
576
|
+
{elmType: 33, elmVal: 3022},
|
|
577
|
+
{elmType: 33, elmVal: 17320},
|
|
578
|
+
{elmType: 36, elmVal: 1},
|
|
579
|
+
{elmType: 33, elmVal: 560},
|
|
580
|
+
{elmType: 32, elmVal: 86},
|
|
581
|
+
],
|
|
582
|
+
},
|
|
583
|
+
];
|
|
584
|
+
|
|
585
|
+
expect(frame.header).toStrictEqual(header);
|
|
586
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
it("ZclFrame from buffer discoverRsp", () => {
|
|
590
|
+
const buffer = Buffer.from([24, 23, 13, 0, 32, 0, 32, 33, 0, 32, 49, 0, 48, 51, 0, 32, 53, 0, 24]);
|
|
591
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
592
|
+
const header = new Zcl.Header(
|
|
593
|
+
{
|
|
594
|
+
reservedBits: 0,
|
|
595
|
+
direction: 1,
|
|
596
|
+
disableDefaultResponse: true,
|
|
597
|
+
frameType: 0,
|
|
598
|
+
manufacturerSpecific: false,
|
|
599
|
+
},
|
|
600
|
+
undefined,
|
|
601
|
+
23,
|
|
602
|
+
13,
|
|
603
|
+
);
|
|
604
|
+
|
|
605
|
+
const payload = {
|
|
606
|
+
discComplete: 0,
|
|
607
|
+
attrInfos: [
|
|
608
|
+
{attrId: 32, dataType: 32},
|
|
609
|
+
{attrId: 33, dataType: 32},
|
|
610
|
+
{attrId: 49, dataType: 48},
|
|
611
|
+
{attrId: 51, dataType: 32},
|
|
612
|
+
{attrId: 53, dataType: 24},
|
|
613
|
+
],
|
|
614
|
+
};
|
|
615
|
+
|
|
616
|
+
expect(frame.header).toStrictEqual(header);
|
|
617
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
618
|
+
expect(frame.cluster.name).toEqual("genPowerCfg");
|
|
619
|
+
expect(frame.command.name).toEqual("discoverRsp");
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
it("ZclFrame from buffer error on malformed", () => {
|
|
623
|
+
const buffer = Buffer.from([0x08, 0x01]);
|
|
624
|
+
expect(() => {
|
|
625
|
+
Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
626
|
+
}).toThrow("Invalid ZclHeader");
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
it("ZclFrame from buffer readRsp failed", () => {
|
|
630
|
+
const buffer = Buffer.from([8, 1, 1, 1, 0, 2]);
|
|
631
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
632
|
+
const header = new Zcl.Header(
|
|
633
|
+
{
|
|
634
|
+
reservedBits: 0,
|
|
635
|
+
direction: 1,
|
|
636
|
+
disableDefaultResponse: false,
|
|
637
|
+
frameType: 0,
|
|
638
|
+
manufacturerSpecific: false,
|
|
639
|
+
},
|
|
640
|
+
undefined,
|
|
641
|
+
1,
|
|
642
|
+
1,
|
|
643
|
+
);
|
|
644
|
+
|
|
645
|
+
const payload = [{status: 2, attrId: 1}];
|
|
646
|
+
|
|
647
|
+
expect(frame.header).toStrictEqual(header);
|
|
648
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
649
|
+
});
|
|
650
|
+
|
|
651
|
+
it("ZclFrame from buffer readRsp success", () => {
|
|
652
|
+
const buffer = Buffer.from([8, 1, 1, 1, 0, 0, 32, 3]);
|
|
653
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
654
|
+
const header = new Zcl.Header(
|
|
655
|
+
{
|
|
656
|
+
reservedBits: 0,
|
|
657
|
+
direction: 1,
|
|
658
|
+
disableDefaultResponse: false,
|
|
659
|
+
frameType: 0,
|
|
660
|
+
manufacturerSpecific: false,
|
|
661
|
+
},
|
|
662
|
+
undefined,
|
|
663
|
+
1,
|
|
664
|
+
1,
|
|
665
|
+
);
|
|
666
|
+
|
|
667
|
+
const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.UINT8, attrData: 3}];
|
|
668
|
+
|
|
669
|
+
expect(frame.header).toStrictEqual(header);
|
|
670
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
671
|
+
});
|
|
672
|
+
|
|
673
|
+
it("ZclFrame from buffer GPD commission", () => {
|
|
674
|
+
const buffer = Buffer.from([
|
|
675
|
+
0x11, 0x00, 0x04, 0x00, 0x00, 0xfe, 0xf4, 0x46, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xe0, 0x1b, 0x02, 0x81, 0xf2, 0xf1, 0xec, 0x92, 0xab, 0xff,
|
|
676
|
+
0x8f, 0x13, 0x63, 0xe1, 0x46, 0xbe, 0xb5, 0x18, 0xc9, 0x0c, 0xab, 0xa4, 0x46, 0xd4, 0xd5, 0xf9, 0x01, 0x00, 0x00,
|
|
677
|
+
]);
|
|
678
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
679
|
+
const header = new Zcl.Header(
|
|
680
|
+
{
|
|
681
|
+
reservedBits: 0,
|
|
682
|
+
direction: 0,
|
|
683
|
+
disableDefaultResponse: true,
|
|
684
|
+
frameType: 1,
|
|
685
|
+
manufacturerSpecific: false,
|
|
686
|
+
},
|
|
687
|
+
undefined,
|
|
688
|
+
0,
|
|
689
|
+
4,
|
|
690
|
+
);
|
|
691
|
+
|
|
692
|
+
const payload = {
|
|
693
|
+
options: 0,
|
|
694
|
+
srcID: 4650238,
|
|
695
|
+
frameCounter: 249,
|
|
696
|
+
commandID: 224,
|
|
697
|
+
payloadSize: 27,
|
|
698
|
+
commandFrame: {
|
|
699
|
+
deviceID: 2,
|
|
700
|
+
options: 129,
|
|
701
|
+
extendedOptions: 242,
|
|
702
|
+
gpdClientClusters: Buffer.alloc(0),
|
|
703
|
+
gpdServerClusters: Buffer.alloc(0),
|
|
704
|
+
manufacturerID: 0,
|
|
705
|
+
modelID: 0,
|
|
706
|
+
numClientClusters: 0,
|
|
707
|
+
numServerClusters: 0,
|
|
708
|
+
securityKey: Buffer.from([0xf1, 0xec, 0x92, 0xab, 0xff, 0x8f, 0x13, 0x63, 0xe1, 0x46, 0xbe, 0xb5, 0x18, 0xc9, 0x0c, 0xab]),
|
|
709
|
+
keyMic: 3587458724,
|
|
710
|
+
outgoingCounter: 505,
|
|
711
|
+
applicationInfo: 0,
|
|
712
|
+
numGpdCommands: 0,
|
|
713
|
+
gpdCommandIdList: Buffer.alloc(0),
|
|
714
|
+
genericSwitchConfig: 0,
|
|
715
|
+
currentContactStatus: 0,
|
|
716
|
+
},
|
|
717
|
+
};
|
|
718
|
+
|
|
719
|
+
expect(frame.header).toStrictEqual(header);
|
|
720
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
it("ZclFrame from buffer GPD scene 0", () => {
|
|
724
|
+
const buffer = Buffer.from([0x11, 0x00, 0x00, 0xa0, 0x14, 0xfe, 0xf4, 0x46, 0x00, 0xe5, 0x04, 0x00, 0x00, 0x10, 0xff]);
|
|
725
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
726
|
+
const header = new Zcl.Header(
|
|
727
|
+
{
|
|
728
|
+
reservedBits: 0,
|
|
729
|
+
direction: 0,
|
|
730
|
+
disableDefaultResponse: true,
|
|
731
|
+
frameType: 1,
|
|
732
|
+
manufacturerSpecific: false,
|
|
733
|
+
},
|
|
734
|
+
undefined,
|
|
735
|
+
0,
|
|
736
|
+
0,
|
|
737
|
+
);
|
|
738
|
+
|
|
739
|
+
const payload = {
|
|
740
|
+
srcID: 4650238,
|
|
741
|
+
commandFrame: {},
|
|
742
|
+
commandID: 16,
|
|
743
|
+
frameCounter: 1253,
|
|
744
|
+
options: 5280,
|
|
745
|
+
payloadSize: Number.NaN,
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
expect(frame.header).toStrictEqual(header);
|
|
749
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
750
|
+
});
|
|
751
|
+
|
|
752
|
+
it("ZclFrame from buffer GPD with extra data", () => {
|
|
753
|
+
const buffer = Buffer.from([0x11, 0x00, 0x00, 0xa0, 0x14, 0xfe, 0xf4, 0x46, 0x00, 0xe5, 0x04, 0x00, 0x00, 0x10, 0x01, 0x01]);
|
|
754
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
755
|
+
const header = new Zcl.Header(
|
|
756
|
+
{
|
|
757
|
+
reservedBits: 0,
|
|
758
|
+
direction: 0,
|
|
759
|
+
disableDefaultResponse: true,
|
|
760
|
+
frameType: 1,
|
|
761
|
+
manufacturerSpecific: false,
|
|
762
|
+
},
|
|
763
|
+
undefined,
|
|
764
|
+
0,
|
|
765
|
+
0,
|
|
766
|
+
);
|
|
767
|
+
|
|
768
|
+
const payload = {
|
|
769
|
+
srcID: 4650238,
|
|
770
|
+
commandFrame: {raw: Buffer.from([1])},
|
|
771
|
+
commandID: 16,
|
|
772
|
+
frameCounter: 1253,
|
|
773
|
+
options: 5280,
|
|
774
|
+
payloadSize: 1,
|
|
775
|
+
};
|
|
776
|
+
|
|
777
|
+
expect(frame.header).toStrictEqual(header);
|
|
778
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
779
|
+
});
|
|
780
|
+
|
|
781
|
+
it("ZclFrame from buffer GPD pairing", () => {
|
|
782
|
+
const buffer = Buffer.from([
|
|
783
|
+
0x19, 0x17, 0x01, 0x68, 0xe5, 0x00, 0xf8, 0x71, 0x71, 0x01, 0x47, 0x65, 0xa1, 0x1c, 0x00, 0x4b, 0x12, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x12,
|
|
784
|
+
0x00, 0x00, 0x09, 0x3c, 0xed, 0x1d, 0xbf, 0x25, 0x63, 0xf9, 0x29, 0x5c, 0x0d, 0x3d, 0x9f, 0xc5, 0x76, 0xe1, 0, 0, 0, 0, 0, 0,
|
|
785
|
+
]);
|
|
786
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
787
|
+
const header = new Zcl.Header(
|
|
788
|
+
{
|
|
789
|
+
reservedBits: 0,
|
|
790
|
+
direction: 1,
|
|
791
|
+
disableDefaultResponse: true,
|
|
792
|
+
frameType: 1,
|
|
793
|
+
manufacturerSpecific: false,
|
|
794
|
+
},
|
|
795
|
+
undefined,
|
|
796
|
+
23,
|
|
797
|
+
1,
|
|
798
|
+
);
|
|
799
|
+
|
|
800
|
+
const payload = {
|
|
801
|
+
options: 0x00e568,
|
|
802
|
+
srcID: 0x017171f8,
|
|
803
|
+
sinkIEEEAddr: "0x00124b001ca16547",
|
|
804
|
+
sinkNwkAddr: 0,
|
|
805
|
+
deviceID: 2,
|
|
806
|
+
frameCounter: 4636,
|
|
807
|
+
gpdKey: Buffer.from([0x09, 0x3c, 0xed, 0x1d, 0xbf, 0x25, 0x63, 0xf9, 0x29, 0x5c, 0x0d, 0x3d, 0x9f, 0xc5, 0x76, 0xe1]),
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
expect(frame.header).toStrictEqual(header);
|
|
811
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
it("ZclFrame from buffer readRsp alias type", () => {
|
|
815
|
+
const buffer = Buffer.from([8, 1, 1, 1, 0, 0, 8, 3]);
|
|
816
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
817
|
+
const header = new Zcl.Header(
|
|
818
|
+
{
|
|
819
|
+
reservedBits: 0,
|
|
820
|
+
direction: 1,
|
|
821
|
+
disableDefaultResponse: false,
|
|
822
|
+
frameType: 0,
|
|
823
|
+
manufacturerSpecific: false,
|
|
824
|
+
},
|
|
825
|
+
undefined,
|
|
826
|
+
1,
|
|
827
|
+
1,
|
|
828
|
+
);
|
|
829
|
+
|
|
830
|
+
const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.DATA8, attrData: 3}];
|
|
831
|
+
|
|
832
|
+
expect(frame.header).toStrictEqual(header);
|
|
833
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
834
|
+
});
|
|
835
|
+
|
|
836
|
+
it("ZclFrame from buffer configReportRsp server to client", () => {
|
|
837
|
+
const buffer = Buffer.from([8, 1, 6, 1, 1, 0, 10, 10]);
|
|
838
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
839
|
+
const header = new Zcl.Header(
|
|
840
|
+
{
|
|
841
|
+
reservedBits: 0,
|
|
842
|
+
direction: 1,
|
|
843
|
+
disableDefaultResponse: false,
|
|
844
|
+
frameType: 0,
|
|
845
|
+
manufacturerSpecific: false,
|
|
846
|
+
},
|
|
847
|
+
undefined,
|
|
848
|
+
1,
|
|
849
|
+
6,
|
|
850
|
+
);
|
|
851
|
+
|
|
852
|
+
const payload = [{attrId: 1, direction: 1, timeout: 2570}];
|
|
853
|
+
|
|
854
|
+
expect(frame.header).toStrictEqual(header);
|
|
855
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
856
|
+
});
|
|
857
|
+
|
|
858
|
+
it("ZclFrame from buffer configReportRsp client to server analog", () => {
|
|
859
|
+
const buffer = Buffer.from([8, 1, 6, 0, 0, 1, 32, 1, 0, 10, 0, 20]);
|
|
860
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
861
|
+
const header = new Zcl.Header(
|
|
862
|
+
{
|
|
863
|
+
reservedBits: 0,
|
|
864
|
+
direction: 1,
|
|
865
|
+
disableDefaultResponse: false,
|
|
866
|
+
frameType: 0,
|
|
867
|
+
manufacturerSpecific: false,
|
|
868
|
+
},
|
|
869
|
+
undefined,
|
|
870
|
+
1,
|
|
871
|
+
6,
|
|
872
|
+
);
|
|
873
|
+
|
|
874
|
+
const payload = [{attrId: 256, dataType: 32, direction: 0, maxRepIntval: 10, minRepIntval: 1, repChange: 20}];
|
|
875
|
+
|
|
876
|
+
expect(frame.header).toStrictEqual(header);
|
|
877
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
it("ZclFrame from buffer configReportRsp client to server analog", () => {
|
|
881
|
+
const buffer = Buffer.from([8, 1, 6, 0, 0, 1, 8, 1, 0, 10, 0]);
|
|
882
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
883
|
+
const header = new Zcl.Header(
|
|
884
|
+
{
|
|
885
|
+
reservedBits: 0,
|
|
886
|
+
direction: 1,
|
|
887
|
+
disableDefaultResponse: false,
|
|
888
|
+
frameType: 0,
|
|
889
|
+
manufacturerSpecific: false,
|
|
890
|
+
},
|
|
891
|
+
undefined,
|
|
892
|
+
1,
|
|
893
|
+
6,
|
|
894
|
+
);
|
|
895
|
+
|
|
896
|
+
const payload = [{attrId: 256, dataType: 8, direction: 0, maxRepIntval: 10, minRepIntval: 1}];
|
|
897
|
+
|
|
898
|
+
expect(frame.header).toStrictEqual(header);
|
|
899
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
900
|
+
});
|
|
901
|
+
|
|
902
|
+
it("ZclFrame from buffer readRsp", () => {
|
|
903
|
+
const buffer = Buffer.from([
|
|
904
|
+
24, 7, 1, 5, 0, 0, 66, 30, 84, 82, 65, 68, 70, 82, 73, 32, 98, 117, 108, 98, 32, 69, 50, 55, 32, 87, 83, 32, 111, 112, 97, 108, 32, 57,
|
|
905
|
+
56, 48, 108, 109, 6, 0, 0, 66, 8, 50, 48, 49, 55, 48, 51, 51, 49, 7, 0, 0, 48, 1, 10, 0, 0, 65, 15, 76, 69, 68, 49, 53, 52, 53, 71, 49,
|
|
906
|
+
50, 69, 50, 55, 69, 85,
|
|
907
|
+
]);
|
|
908
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
909
|
+
const header = new Zcl.Header(
|
|
910
|
+
{
|
|
911
|
+
reservedBits: 0,
|
|
912
|
+
direction: 1,
|
|
913
|
+
disableDefaultResponse: true,
|
|
914
|
+
frameType: 0,
|
|
915
|
+
manufacturerSpecific: false,
|
|
916
|
+
},
|
|
917
|
+
undefined,
|
|
918
|
+
7,
|
|
919
|
+
1,
|
|
920
|
+
);
|
|
921
|
+
|
|
922
|
+
const payload = [
|
|
923
|
+
{attrId: 5, status: 0, dataType: 66, attrData: "TRADFRI bulb E27 WS opal 980lm"},
|
|
924
|
+
{attrId: 6, status: 0, dataType: 66, attrData: "20170331"},
|
|
925
|
+
{attrId: 7, status: 0, dataType: 48, attrData: 1},
|
|
926
|
+
{attrId: 10, status: 0, dataType: 65, attrData: Buffer.from([76, 69, 68, 49, 53, 52, 53, 71, 49, 50, 69, 50, 55, 69, 85])},
|
|
927
|
+
];
|
|
928
|
+
|
|
929
|
+
expect(frame.header).toStrictEqual(header);
|
|
930
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
it("ZclFrame with Assa (manufacturer specific) cluster create", () => {
|
|
934
|
+
const payload = [{attrId: 0x0012, status: 0, attrData: 1, dataType: 32}];
|
|
935
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, 0x101d, 8, "readRsp", 0xfc00, payload, {});
|
|
936
|
+
|
|
937
|
+
expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
938
|
+
});
|
|
939
|
+
|
|
940
|
+
it("ZclFrame with Assa (manufacturer specific) cluster create with non Assamanufcode", () => {
|
|
941
|
+
const payload = [{attrId: 0x0012, status: 0, attrData: 1, dataType: 32}];
|
|
942
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, 0x10f3, 8, "readRsp", 0xfc00, payload, {});
|
|
943
|
+
|
|
944
|
+
expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
945
|
+
});
|
|
946
|
+
|
|
947
|
+
it("ZclFrame with Assa (manufacturer specific) cluster fromBuffer", () => {
|
|
948
|
+
const buffer = Buffer.from([0x04, 0xf2, 0x10, 0x08, 0x01, 0x00, 0x00, 0x00, 0x20, 0x01]);
|
|
949
|
+
const frame = Zcl.Frame.fromBuffer(0xfc00, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
950
|
+
expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
951
|
+
});
|
|
952
|
+
|
|
953
|
+
it("ZclFrame to buffer with reservered bits", () => {
|
|
954
|
+
const expected = Buffer.from([224, 8, 12, 0, 0, 240]);
|
|
955
|
+
const payload = {startAttrId: 0, maxAttrIds: 240};
|
|
956
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, undefined, 8, "discover", 0, payload, {}, 7);
|
|
957
|
+
|
|
958
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
959
|
+
});
|
|
960
|
+
|
|
961
|
+
it("ZclFrame from buffer with reservered bits", () => {
|
|
962
|
+
const buffer = Buffer.from([224, 8, 12, 0, 0, 240]);
|
|
963
|
+
const frame = Zcl.Frame.fromBuffer(0, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
964
|
+
const header = new Zcl.Header(
|
|
965
|
+
{
|
|
966
|
+
reservedBits: 7,
|
|
967
|
+
direction: 0,
|
|
968
|
+
disableDefaultResponse: false,
|
|
969
|
+
frameType: 0,
|
|
970
|
+
manufacturerSpecific: false,
|
|
971
|
+
},
|
|
972
|
+
undefined,
|
|
973
|
+
8,
|
|
974
|
+
12,
|
|
975
|
+
);
|
|
976
|
+
|
|
977
|
+
const payload = {startAttrId: 0, maxAttrIds: 240};
|
|
978
|
+
|
|
979
|
+
expect(frame.header).toStrictEqual(header);
|
|
980
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
981
|
+
});
|
|
982
|
+
|
|
983
|
+
it("ZclFrame to buffer discover", () => {
|
|
984
|
+
const expected = Buffer.from([0, 8, 12, 0, 0, 240]);
|
|
985
|
+
const payload = {startAttrId: 0, maxAttrIds: 240};
|
|
986
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, undefined, 8, "discover", 0, payload, {});
|
|
987
|
+
|
|
988
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
989
|
+
});
|
|
990
|
+
|
|
991
|
+
it("ZclFrame to buffer genScenes.add", () => {
|
|
992
|
+
const payload = {
|
|
993
|
+
groupid: 0,
|
|
994
|
+
sceneid: 3,
|
|
995
|
+
scenename: "",
|
|
996
|
+
transtime: 1,
|
|
997
|
+
extensionfieldsets: [
|
|
998
|
+
{clstId: 6, len: 1, extField: [1]},
|
|
999
|
+
{clstId: 768, len: 4, extField: [31260, 27110]},
|
|
1000
|
+
{clstId: 8, len: 1, extField: [254]},
|
|
1001
|
+
],
|
|
1002
|
+
};
|
|
1003
|
+
const frame = Zcl.Frame.create(
|
|
1004
|
+
FrameType.SPECIFIC,
|
|
1005
|
+
Direction.CLIENT_TO_SERVER,
|
|
1006
|
+
false,
|
|
1007
|
+
undefined,
|
|
1008
|
+
1,
|
|
1009
|
+
"add",
|
|
1010
|
+
Zcl.Clusters.genScenes.ID,
|
|
1011
|
+
payload,
|
|
1012
|
+
{},
|
|
1013
|
+
);
|
|
1014
|
+
|
|
1015
|
+
expect(frame.toBuffer()).toStrictEqual(Buffer.from([1, 1, 0, 0, 0, 3, 1, 0, 0, 6, 0, 1, 1, 0, 3, 4, 28, 122, 230, 105, 8, 0, 1, 254]));
|
|
1016
|
+
});
|
|
1017
|
+
|
|
1018
|
+
it("ZclFrame to buffer queryNextImageResponse with non zero status", () => {
|
|
1019
|
+
const expected = Buffer.from([9, 8, 2, 1]);
|
|
1020
|
+
const payload = {status: 1};
|
|
1021
|
+
const frame = Zcl.Frame.create(
|
|
1022
|
+
FrameType.SPECIFIC,
|
|
1023
|
+
Direction.SERVER_TO_CLIENT,
|
|
1024
|
+
false,
|
|
1025
|
+
undefined,
|
|
1026
|
+
8,
|
|
1027
|
+
"queryNextImageResponse",
|
|
1028
|
+
25,
|
|
1029
|
+
payload,
|
|
1030
|
+
{},
|
|
1031
|
+
);
|
|
1032
|
+
|
|
1033
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1034
|
+
});
|
|
1035
|
+
|
|
1036
|
+
it("ZclFrame to buffer queryNextImageResponse with zero status", () => {
|
|
1037
|
+
const expected = Buffer.from([9, 8, 2, 0, 1, 0, 3, 0, 5, 0, 0, 0, 6, 0, 0, 0]);
|
|
1038
|
+
const payload = {status: 0, manufacturerCode: 1, imageType: 3, fileVersion: 5, imageSize: 6};
|
|
1039
|
+
const frame = Zcl.Frame.create(
|
|
1040
|
+
FrameType.SPECIFIC,
|
|
1041
|
+
Direction.SERVER_TO_CLIENT,
|
|
1042
|
+
false,
|
|
1043
|
+
undefined,
|
|
1044
|
+
8,
|
|
1045
|
+
"queryNextImageResponse",
|
|
1046
|
+
25,
|
|
1047
|
+
payload,
|
|
1048
|
+
{},
|
|
1049
|
+
);
|
|
1050
|
+
|
|
1051
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1052
|
+
});
|
|
1053
|
+
|
|
1054
|
+
it("ZclFrame to buffer queryNextImageResponse with zero status and missing parameters", () => {
|
|
1055
|
+
const payload = {status: 0};
|
|
1056
|
+
const frame = Zcl.Frame.create(
|
|
1057
|
+
FrameType.SPECIFIC,
|
|
1058
|
+
Direction.SERVER_TO_CLIENT,
|
|
1059
|
+
false,
|
|
1060
|
+
undefined,
|
|
1061
|
+
8,
|
|
1062
|
+
"queryNextImageResponse",
|
|
1063
|
+
25,
|
|
1064
|
+
payload,
|
|
1065
|
+
{},
|
|
1066
|
+
);
|
|
1067
|
+
|
|
1068
|
+
let error;
|
|
1069
|
+
try {
|
|
1070
|
+
frame.toBuffer();
|
|
1071
|
+
} catch (e) {
|
|
1072
|
+
error = e;
|
|
1073
|
+
}
|
|
1074
|
+
expect(error).toStrictEqual(new Error(`Parameter 'manufacturerCode' is missing`));
|
|
1075
|
+
});
|
|
1076
|
+
|
|
1077
|
+
it("ZclFrame to buffer readRsp UTC", () => {
|
|
1078
|
+
const expected = Buffer.from([24, 74, 1, 0, 0, 0, 226, 234, 83, 218, 36]);
|
|
1079
|
+
const payload = [{attrId: 0, status: 0, attrData: 618288106, dataType: 226}];
|
|
1080
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 74, "readRsp", 0, payload, {});
|
|
1081
|
+
|
|
1082
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1083
|
+
});
|
|
1084
|
+
|
|
1085
|
+
it("ZclFrame to buffer write Livolo malformed", () => {
|
|
1086
|
+
// Created as example for https://github.com/Koenkk/zigbee-herdsman/issues/127
|
|
1087
|
+
const expectedOn = Buffer.from([0x1c, 0xd2, 0x1a, 0xe9, 0x02, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
1088
|
+
const payloadOn = [{attrId: 1, attrData: Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), dataType: 1}];
|
|
1089
|
+
const frameOn = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, 0x1ad2, 233, "write", 0, payloadOn, {});
|
|
1090
|
+
expect(frameOn.toBuffer()).toStrictEqual(expectedOn);
|
|
1091
|
+
|
|
1092
|
+
const expectedOff = Buffer.from([0x1c, 0xd2, 0x1a, 0xe9, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
1093
|
+
const payloadOff = [{attrId: 1, attrData: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), dataType: 1}];
|
|
1094
|
+
const frameOff = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, 0x1ad2, 233, "write", 0, payloadOff, {});
|
|
1095
|
+
expect(frameOff.toBuffer()).toStrictEqual(expectedOff);
|
|
1096
|
+
});
|
|
1097
|
+
|
|
1098
|
+
it("ZclFrame write request with string as bytes array", () => {
|
|
1099
|
+
const payload = [{attrId: 0x0401, attrData: [0x07, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x14], dataType: 0x42}];
|
|
1100
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, 0x115f, 15, "write", 0, payload, {});
|
|
1101
|
+
|
|
1102
|
+
const expected = [0x14, 0x5f, 0x11, 0x0f, 0x02, 0x01, 0x04, 0x42, 0x07, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x14];
|
|
1103
|
+
expect(Buffer.from(expected)).toStrictEqual(frame.toBuffer());
|
|
1104
|
+
});
|
|
1105
|
+
|
|
1106
|
+
it("ZclFrame write rsp", () => {
|
|
1107
|
+
const payload = [{status: 0x11, attrId: 0x22}];
|
|
1108
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, 0x115f, 15, "writeRsp", 0, payload, {});
|
|
1109
|
+
const buffer = frame.toBuffer();
|
|
1110
|
+
|
|
1111
|
+
const expected = [0x14, 0x5f, 0x11, 0x0f, 0x04, 0x11, 0x22, 0x00];
|
|
1112
|
+
expect(Buffer.from(expected)).toStrictEqual(buffer);
|
|
1113
|
+
});
|
|
1114
|
+
|
|
1115
|
+
//{ frameType: 0, manufSpec: 0, direction: 0, disDefaultRsp: 0 } 0 8 'discover' { startAttrId: 0, maxAttrIds: 240 }
|
|
1116
|
+
it("ZclFrame to buffer readRsp success", () => {
|
|
1117
|
+
const expected = Buffer.from([8, 1, 1, 1, 0, 0, 32, 3]);
|
|
1118
|
+
const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.UINT8, attrData: 3}];
|
|
1119
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, false, undefined, 1, 1, 0, payload, {});
|
|
1120
|
+
|
|
1121
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1122
|
+
});
|
|
1123
|
+
|
|
1124
|
+
it("ZclFrame to buffer defaultRsp success", () => {
|
|
1125
|
+
const expected = Buffer.from([0x18, 0x04, 0x0b, 0x0c, 0x82]);
|
|
1126
|
+
const payload = {cmdId: 12, statusCode: 130};
|
|
1127
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 4, 11, 0, payload, {});
|
|
1128
|
+
|
|
1129
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1132
|
+
it("ZclFrame to buffer readStructured single element", () => {
|
|
1133
|
+
const expected = Buffer.from([0x18, 0x02, 0x0e, 0x01, 0x00, 0x01, 0x02, 0x00]);
|
|
1134
|
+
const payload = [{attrId: 0x0001, selector: {indexes: [2]}}];
|
|
1135
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1136
|
+
|
|
1137
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1138
|
+
});
|
|
1139
|
+
|
|
1140
|
+
it("ZclFrame to buffer readStructured multiple elements", () => {
|
|
1141
|
+
const expected = Buffer.from([
|
|
1142
|
+
0x18, 0x02, 0x0e, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00,
|
|
1143
|
+
]);
|
|
1144
|
+
const payload = [
|
|
1145
|
+
{attrId: 0x0002, selector: {indexes: [3, 4]}},
|
|
1146
|
+
{attrId: 0x0005, selector: {indexes: [6, 7, 8]}},
|
|
1147
|
+
];
|
|
1148
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1149
|
+
|
|
1150
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1151
|
+
});
|
|
1152
|
+
|
|
1153
|
+
it("ZclFrame to buffer readStructured whole attribute", () => {
|
|
1154
|
+
const expected = Buffer.from([0x18, 0x02, 0x0e, 0x09, 0x00, 0x00]);
|
|
1155
|
+
const payload = [{attrId: 0x0009, selector: {}}];
|
|
1156
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1157
|
+
|
|
1158
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1159
|
+
});
|
|
1160
|
+
|
|
1161
|
+
it("ZclFrame from buffer readStructured single elements", () => {
|
|
1162
|
+
const buffer = Buffer.from([0x18, 0x02, 0x0e, 0x01, 0x00, 0x01, 0x02, 0x00]);
|
|
1163
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1164
|
+
const header = new Zcl.Header(
|
|
1165
|
+
{
|
|
1166
|
+
reservedBits: 0,
|
|
1167
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1168
|
+
disableDefaultResponse: true,
|
|
1169
|
+
frameType: FrameType.GLOBAL,
|
|
1170
|
+
manufacturerSpecific: false,
|
|
1171
|
+
},
|
|
1172
|
+
undefined,
|
|
1173
|
+
2,
|
|
1174
|
+
0x0e,
|
|
1175
|
+
);
|
|
1176
|
+
const payload = [{attrId: 0x0001, selector: {indexes: [2]}}];
|
|
1177
|
+
|
|
1178
|
+
expect(frame.header).toStrictEqual(header);
|
|
1179
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1180
|
+
});
|
|
1181
|
+
|
|
1182
|
+
it("ZclFrame from buffer readStructured multiple elements", () => {
|
|
1183
|
+
const buffer = Buffer.from([
|
|
1184
|
+
0x18, 0x02, 0x0e, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00,
|
|
1185
|
+
]);
|
|
1186
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1187
|
+
const header = new Zcl.Header(
|
|
1188
|
+
{
|
|
1189
|
+
reservedBits: 0,
|
|
1190
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1191
|
+
disableDefaultResponse: true,
|
|
1192
|
+
frameType: FrameType.GLOBAL,
|
|
1193
|
+
manufacturerSpecific: false,
|
|
1194
|
+
},
|
|
1195
|
+
undefined,
|
|
1196
|
+
2,
|
|
1197
|
+
0x0e,
|
|
1198
|
+
);
|
|
1199
|
+
const payload = [
|
|
1200
|
+
{attrId: 0x0002, selector: {indexes: [3, 4]}},
|
|
1201
|
+
{attrId: 0x0005, selector: {indexes: [6, 7, 8]}},
|
|
1202
|
+
];
|
|
1203
|
+
|
|
1204
|
+
expect(frame.header).toStrictEqual(header);
|
|
1205
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1206
|
+
});
|
|
1207
|
+
|
|
1208
|
+
it("ZclFrame from buffer readStructured whole attribute", () => {
|
|
1209
|
+
const buffer = Buffer.from([0x18, 0x02, 0x0e, 0x09, 0x00, 0x00]);
|
|
1210
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1211
|
+
const header = new Zcl.Header(
|
|
1212
|
+
{
|
|
1213
|
+
reservedBits: 0,
|
|
1214
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1215
|
+
disableDefaultResponse: true,
|
|
1216
|
+
frameType: FrameType.GLOBAL,
|
|
1217
|
+
manufacturerSpecific: false,
|
|
1218
|
+
},
|
|
1219
|
+
undefined,
|
|
1220
|
+
2,
|
|
1221
|
+
0x0e,
|
|
1222
|
+
);
|
|
1223
|
+
const payload = [{attrId: 0x0009, selector: {indicatorType: StructuredIndicatorType.Whole}}];
|
|
1224
|
+
|
|
1225
|
+
expect(frame.header).toStrictEqual(header);
|
|
1226
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1227
|
+
});
|
|
1228
|
+
|
|
1229
|
+
it("ZclFrame to buffer writeStructured single element", () => {
|
|
1230
|
+
const expected = Buffer.from([0x10, 0x02, 0x0f, 0x01, 0x00, 0x01, 0x02, 0x00, 0x20, 0x03]);
|
|
1231
|
+
const payload = [{attrId: 0x0001, selector: {indexes: [2]}, dataType: Zcl.DataType.UINT8, elementData: 3}];
|
|
1232
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1233
|
+
|
|
1234
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1235
|
+
});
|
|
1236
|
+
|
|
1237
|
+
it("ZclFrame to buffer writeStructured multiple elements", () => {
|
|
1238
|
+
const expected = Buffer.from([
|
|
1239
|
+
0x10, 0x02, 0x0f, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x42, 0x03, 0x66, 0x6f, 0x6f, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08,
|
|
1240
|
+
0x00, 0x42, 0x03, 0x62, 0x61, 0x72,
|
|
1241
|
+
]);
|
|
1242
|
+
const payload = [
|
|
1243
|
+
{attrId: 0x0002, selector: {indexes: [3, 4]}, dataType: Zcl.DataType.CHAR_STR, elementData: "foo"},
|
|
1244
|
+
{attrId: 0x0005, selector: {indexes: [6, 7, 8]}, dataType: Zcl.DataType.CHAR_STR, elementData: "bar"},
|
|
1245
|
+
];
|
|
1246
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1247
|
+
|
|
1248
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1249
|
+
});
|
|
1250
|
+
|
|
1251
|
+
it("ZclFrame to buffer writeStructured whole attribute", () => {
|
|
1252
|
+
const expected = Buffer.from([0x10, 0x02, 0x0f, 0x09, 0x00, 0x00, 0x48, 0x20, 0x03, 0x00, 0x0a, 0x0b, 0x0c]);
|
|
1253
|
+
const payload = [
|
|
1254
|
+
{attrId: 0x0009, selector: {}, dataType: Zcl.DataType.ARRAY, elementData: {elementType: Zcl.DataType.UINT8, elements: [10, 11, 12]}},
|
|
1255
|
+
];
|
|
1256
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1257
|
+
|
|
1258
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1259
|
+
});
|
|
1260
|
+
|
|
1261
|
+
it("ZclFrame to buffer writeStructured add element into set/bag", () => {
|
|
1262
|
+
const expected = Buffer.from([0x10, 0x02, 0x0f, 0x0d, 0x00, 0x10, 0x42, 0x03, 0x66, 0x6f, 0x6f]);
|
|
1263
|
+
const payload = [
|
|
1264
|
+
{attrId: 0x000d, selector: {indicatorType: StructuredIndicatorType.WriteAdd}, dataType: Zcl.DataType.CHAR_STR, elementData: "foo"},
|
|
1265
|
+
];
|
|
1266
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1267
|
+
|
|
1268
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
it("ZclFrame to buffer writeStructured remove element from set/bag", () => {
|
|
1272
|
+
const expected = Buffer.from([0x10, 0x02, 0x0f, 0x0e, 0x00, 0x20, 0x42, 0x03, 0x62, 0x61, 0x72]);
|
|
1273
|
+
const payload = [
|
|
1274
|
+
{attrId: 0x000e, selector: {indicatorType: StructuredIndicatorType.WriteRemove}, dataType: Zcl.DataType.CHAR_STR, elementData: "bar"},
|
|
1275
|
+
];
|
|
1276
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
|
|
1277
|
+
|
|
1278
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1279
|
+
});
|
|
1280
|
+
|
|
1281
|
+
it("ZclFrame to buffer writeStructured Livolo malformed", () => {
|
|
1282
|
+
const expected = Buffer.from([0x7c, 0xd2, 0x1a, 0xe9, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
1283
|
+
const payload = [{attrId: 0x0000, selector: null, elementData: [0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}];
|
|
1284
|
+
const frame = Zcl.Frame.create(
|
|
1285
|
+
FrameType.GLOBAL,
|
|
1286
|
+
Direction.SERVER_TO_CLIENT,
|
|
1287
|
+
true,
|
|
1288
|
+
0x1ad2,
|
|
1289
|
+
0xe9,
|
|
1290
|
+
0x0f,
|
|
1291
|
+
Zcl.Clusters.genBasic.ID,
|
|
1292
|
+
payload,
|
|
1293
|
+
{},
|
|
1294
|
+
3,
|
|
1295
|
+
);
|
|
1296
|
+
|
|
1297
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1298
|
+
});
|
|
1299
|
+
|
|
1300
|
+
it("ZclFrame to buffer writeStructuredRsp success", () => {
|
|
1301
|
+
const expected = Buffer.from([8, 1, 0x10, 0]);
|
|
1302
|
+
const payload = [{status: Zcl.Status.SUCCESS}];
|
|
1303
|
+
const frame = Zcl.Frame.create(
|
|
1304
|
+
FrameType.GLOBAL,
|
|
1305
|
+
Direction.SERVER_TO_CLIENT,
|
|
1306
|
+
false,
|
|
1307
|
+
undefined,
|
|
1308
|
+
1,
|
|
1309
|
+
0x10,
|
|
1310
|
+
Zcl.Clusters.genBasic.ID,
|
|
1311
|
+
payload,
|
|
1312
|
+
{},
|
|
1313
|
+
);
|
|
1314
|
+
|
|
1315
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1316
|
+
});
|
|
1317
|
+
|
|
1318
|
+
it("ZclFrame to buffer writeStructuredRsp failed selector unknown or none for type", () => {
|
|
1319
|
+
const expected = Buffer.from([8, 1, 0x10, 147, 1, 0, 0]);
|
|
1320
|
+
const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indicatorType: StructuredIndicatorType.Whole}}];
|
|
1321
|
+
const frame = Zcl.Frame.create(
|
|
1322
|
+
FrameType.GLOBAL,
|
|
1323
|
+
Direction.SERVER_TO_CLIENT,
|
|
1324
|
+
false,
|
|
1325
|
+
undefined,
|
|
1326
|
+
1,
|
|
1327
|
+
0x10,
|
|
1328
|
+
Zcl.Clusters.genBasic.ID,
|
|
1329
|
+
payload,
|
|
1330
|
+
{},
|
|
1331
|
+
);
|
|
1332
|
+
|
|
1333
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1334
|
+
});
|
|
1335
|
+
|
|
1336
|
+
it("ZclFrame to buffer writeStructuredRsp failed with selector", () => {
|
|
1337
|
+
const expected = Buffer.from([8, 1, 0x10, 147, 1, 0, 1, 254, 0]);
|
|
1338
|
+
const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indexes: [254]}}];
|
|
1339
|
+
const frame = Zcl.Frame.create(
|
|
1340
|
+
FrameType.GLOBAL,
|
|
1341
|
+
Direction.SERVER_TO_CLIENT,
|
|
1342
|
+
false,
|
|
1343
|
+
undefined,
|
|
1344
|
+
1,
|
|
1345
|
+
0x10,
|
|
1346
|
+
Zcl.Clusters.genBasic.ID,
|
|
1347
|
+
payload,
|
|
1348
|
+
{},
|
|
1349
|
+
);
|
|
1350
|
+
|
|
1351
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1352
|
+
});
|
|
1353
|
+
|
|
1354
|
+
it("ZclFrame to buffer writeStructuredRsp failed mixed selectors", () => {
|
|
1355
|
+
const expected = Buffer.from([8, 1, 0x10, 147, 16, 0, 0, 149, 14, 0, 2, 254, 0, 32, 0]);
|
|
1356
|
+
const payload = [
|
|
1357
|
+
{status: Zcl.Status.ACTION_DENIED, attrId: 16, selector: {indicatorType: StructuredIndicatorType.Whole}},
|
|
1358
|
+
{status: Zcl.Status.ABORT, attrId: 14, selector: {indexes: [254, 32]}},
|
|
1359
|
+
];
|
|
1360
|
+
const frame = Zcl.Frame.create(
|
|
1361
|
+
FrameType.GLOBAL,
|
|
1362
|
+
Direction.SERVER_TO_CLIENT,
|
|
1363
|
+
false,
|
|
1364
|
+
undefined,
|
|
1365
|
+
1,
|
|
1366
|
+
0x10,
|
|
1367
|
+
Zcl.Clusters.genBasic.ID,
|
|
1368
|
+
payload,
|
|
1369
|
+
{},
|
|
1370
|
+
);
|
|
1371
|
+
|
|
1372
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1373
|
+
});
|
|
1374
|
+
|
|
1375
|
+
it("ZclFrame from buffer writeStructuredRsp success", () => {
|
|
1376
|
+
const buffer = Buffer.from([8, 1, 0x10, 0]);
|
|
1377
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1378
|
+
const header = new Zcl.Header(
|
|
1379
|
+
{
|
|
1380
|
+
reservedBits: 0,
|
|
1381
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1382
|
+
disableDefaultResponse: false,
|
|
1383
|
+
frameType: FrameType.GLOBAL,
|
|
1384
|
+
manufacturerSpecific: false,
|
|
1385
|
+
},
|
|
1386
|
+
undefined,
|
|
1387
|
+
1,
|
|
1388
|
+
0x10,
|
|
1389
|
+
);
|
|
1390
|
+
const payload = [{status: Zcl.Status.SUCCESS}];
|
|
1391
|
+
|
|
1392
|
+
expect(frame.header).toStrictEqual(header);
|
|
1393
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1394
|
+
});
|
|
1395
|
+
|
|
1396
|
+
it("ZclFrame from buffer writeStructuredRsp failed selector unknown or none for type", () => {
|
|
1397
|
+
const buffer = Buffer.from([8, 1, 0x10, 147, 1, 0, 0]);
|
|
1398
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1399
|
+
const header = new Zcl.Header(
|
|
1400
|
+
{
|
|
1401
|
+
reservedBits: 0,
|
|
1402
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1403
|
+
disableDefaultResponse: false,
|
|
1404
|
+
frameType: FrameType.GLOBAL,
|
|
1405
|
+
manufacturerSpecific: false,
|
|
1406
|
+
},
|
|
1407
|
+
undefined,
|
|
1408
|
+
1,
|
|
1409
|
+
0x10,
|
|
1410
|
+
);
|
|
1411
|
+
const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indicatorType: StructuredIndicatorType.Whole}}];
|
|
1412
|
+
|
|
1413
|
+
expect(frame.header).toStrictEqual(header);
|
|
1414
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1415
|
+
});
|
|
1416
|
+
|
|
1417
|
+
it("ZclFrame from buffer writeStructuredRsp failed with selector", () => {
|
|
1418
|
+
const buffer = Buffer.from([8, 1, 0x10, 147, 1, 0, 1, 254, 0]);
|
|
1419
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1420
|
+
const header = new Zcl.Header(
|
|
1421
|
+
{
|
|
1422
|
+
reservedBits: 0,
|
|
1423
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1424
|
+
disableDefaultResponse: false,
|
|
1425
|
+
frameType: FrameType.GLOBAL,
|
|
1426
|
+
manufacturerSpecific: false,
|
|
1427
|
+
},
|
|
1428
|
+
undefined,
|
|
1429
|
+
1,
|
|
1430
|
+
0x10,
|
|
1431
|
+
);
|
|
1432
|
+
const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indexes: [254]}}];
|
|
1433
|
+
|
|
1434
|
+
expect(frame.header).toStrictEqual(header);
|
|
1435
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1436
|
+
});
|
|
1437
|
+
|
|
1438
|
+
it("ZclFrame from buffer writeStructuredRsp failed mixed selectors", () => {
|
|
1439
|
+
const buffer = Buffer.from([8, 1, 0x10, 147, 16, 0, 0, 149, 14, 0, 2, 254, 0, 32, 0]);
|
|
1440
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1441
|
+
const header = new Zcl.Header(
|
|
1442
|
+
{
|
|
1443
|
+
reservedBits: 0,
|
|
1444
|
+
direction: Direction.SERVER_TO_CLIENT,
|
|
1445
|
+
disableDefaultResponse: false,
|
|
1446
|
+
frameType: FrameType.GLOBAL,
|
|
1447
|
+
manufacturerSpecific: false,
|
|
1448
|
+
},
|
|
1449
|
+
undefined,
|
|
1450
|
+
1,
|
|
1451
|
+
0x10,
|
|
1452
|
+
);
|
|
1453
|
+
const payload = [
|
|
1454
|
+
{status: Zcl.Status.ACTION_DENIED, attrId: 16, selector: {indicatorType: StructuredIndicatorType.Whole}},
|
|
1455
|
+
{status: Zcl.Status.ABORT, attrId: 14, selector: {indexes: [254, 32]}},
|
|
1456
|
+
];
|
|
1457
|
+
|
|
1458
|
+
expect(frame.header).toStrictEqual(header);
|
|
1459
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1460
|
+
});
|
|
1461
|
+
|
|
1462
|
+
it("ZclFrame from buffer ssIasAce arm command", () => {
|
|
1463
|
+
const buffer = Buffer.from([1, 87, 0, 0, 6, 49, 50, 51, 52, 53, 54, 0]);
|
|
1464
|
+
const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.ssIasAce.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
|
|
1465
|
+
const header = new Zcl.Header(
|
|
1466
|
+
{
|
|
1467
|
+
reservedBits: 0,
|
|
1468
|
+
direction: 0,
|
|
1469
|
+
disableDefaultResponse: false,
|
|
1470
|
+
frameType: 1,
|
|
1471
|
+
manufacturerSpecific: false,
|
|
1472
|
+
},
|
|
1473
|
+
undefined,
|
|
1474
|
+
87,
|
|
1475
|
+
0,
|
|
1476
|
+
);
|
|
1477
|
+
|
|
1478
|
+
const payload = {
|
|
1479
|
+
armmode: 0,
|
|
1480
|
+
code: "123456",
|
|
1481
|
+
zoneid: 0,
|
|
1482
|
+
};
|
|
1483
|
+
|
|
1484
|
+
expect(frame.header).toStrictEqual(header);
|
|
1485
|
+
expect(frame.payload).toStrictEqual(payload);
|
|
1486
|
+
expect(frame.header.isGlobal).toBe(false);
|
|
1487
|
+
expect(frame.header.isSpecific).toBe(true);
|
|
1488
|
+
expect(frame.isCluster("ssIasAce")).toBe(true);
|
|
1489
|
+
expect(frame.isCommand("arm")).toBe(true);
|
|
1490
|
+
});
|
|
1491
|
+
|
|
1492
|
+
it("ZclFrame to buffer discoverRsp", () => {
|
|
1493
|
+
const expected = Buffer.from([24, 23, 13, 0, 32, 0, 32, 33, 0, 32, 49, 0, 48, 51, 0, 32, 53, 0, 24]);
|
|
1494
|
+
const payload = {
|
|
1495
|
+
discComplete: 0,
|
|
1496
|
+
attrInfos: [
|
|
1497
|
+
{attrId: 32, dataType: 32},
|
|
1498
|
+
{attrId: 33, dataType: 32},
|
|
1499
|
+
{attrId: 49, dataType: 48},
|
|
1500
|
+
{attrId: 51, dataType: 32},
|
|
1501
|
+
{attrId: 53, dataType: 24},
|
|
1502
|
+
],
|
|
1503
|
+
};
|
|
1504
|
+
|
|
1505
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 23, 13, 0, payload, {});
|
|
1506
|
+
|
|
1507
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1508
|
+
});
|
|
1509
|
+
|
|
1510
|
+
it("ZclFrame to buffer tradfriArrowSingle", () => {
|
|
1511
|
+
const expected = Buffer.from([0x05, 0x7c, 0x11, 0x1d, 0x07, 0x00, 0x01, 0x0d, 0x00]);
|
|
1512
|
+
const payload = {value: 256, value2: 13};
|
|
1513
|
+
|
|
1514
|
+
const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.CLIENT_TO_SERVER, false, 4476, 29, 7, 5, payload, {});
|
|
1515
|
+
|
|
1516
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1517
|
+
});
|
|
1518
|
+
|
|
1519
|
+
it("ZclFrame to buffer readRsp failed", () => {
|
|
1520
|
+
const expected = Buffer.from([8, 1, 1, 1, 0, 2]);
|
|
1521
|
+
const payload = [{status: 2, attrId: 1}];
|
|
1522
|
+
|
|
1523
|
+
const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, false, undefined, 1, 1, 0, payload, {});
|
|
1524
|
+
|
|
1525
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1526
|
+
});
|
|
1527
|
+
|
|
1528
|
+
it("ZclFrame to buffer offWithEffect", () => {
|
|
1529
|
+
const expected = Buffer.from([0x1, 1, 64, 1, 0]);
|
|
1530
|
+
const payload = {effectid: 1, effectvariant: 0};
|
|
1531
|
+
|
|
1532
|
+
const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.CLIENT_TO_SERVER, false, undefined, 1, 64, 6, payload, {});
|
|
1533
|
+
|
|
1534
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1535
|
+
});
|
|
1536
|
+
|
|
1537
|
+
it("ZclFrame to buffer offWithEffect", () => {
|
|
1538
|
+
const expected = Buffer.from([9, 9, 0, 1]);
|
|
1539
|
+
|
|
1540
|
+
const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.SERVER_TO_CLIENT, false, undefined, 9, "restartDeviceRsp", 21, {status: 1}, {});
|
|
1541
|
+
|
|
1542
|
+
expect(frame.toBuffer()).toStrictEqual(expected);
|
|
1543
|
+
});
|
|
1544
|
+
|
|
1545
|
+
it("ZclFrame to buffer invalid frametype", () => {
|
|
1546
|
+
expect(() => {
|
|
1547
|
+
Zcl.Frame.create(
|
|
1548
|
+
// @ts-expect-error invalid on purpose
|
|
1549
|
+
3,
|
|
1550
|
+
Direction.CLIENT_TO_SERVER,
|
|
1551
|
+
false,
|
|
1552
|
+
undefined,
|
|
1553
|
+
1,
|
|
1554
|
+
64,
|
|
1555
|
+
6,
|
|
1556
|
+
{},
|
|
1557
|
+
{},
|
|
1558
|
+
).toBuffer();
|
|
1559
|
+
}).toThrow("Frametype '3' not valid");
|
|
1560
|
+
});
|
|
1561
|
+
|
|
1562
|
+
it("BuffaloZcl read array", () => {
|
|
1563
|
+
const buffer = Buffer.from([32, 3, 0, 1, 2, 3]);
|
|
1564
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1565
|
+
const value = buffalo.read(DataType.ARRAY, {});
|
|
1566
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1567
|
+
expect(value).toStrictEqual([1, 2, 3]);
|
|
1568
|
+
});
|
|
1569
|
+
|
|
1570
|
+
it("BuffaloZcl read struct", () => {
|
|
1571
|
+
const buffer = Buffer.from([0, 2, 0, 32, 8, 33, 4, 0]);
|
|
1572
|
+
const buffalo = new BuffaloZcl(buffer, 1);
|
|
1573
|
+
const value = buffalo.read(DataType.STRUCT, {});
|
|
1574
|
+
expect(buffalo.getPosition()).toBe(8);
|
|
1575
|
+
expect(value).toStrictEqual([
|
|
1576
|
+
{elmType: 32, elmVal: 8},
|
|
1577
|
+
{elmType: 33, elmVal: 4},
|
|
1578
|
+
]);
|
|
1579
|
+
});
|
|
1580
|
+
|
|
1581
|
+
it("BuffaloZcl read longCharStr", () => {
|
|
1582
|
+
const buffer = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
|
|
1583
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1584
|
+
const value = buffalo.read(DataType.LONG_CHAR_STR, {});
|
|
1585
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1586
|
+
expect(value).toStrictEqual("hello");
|
|
1587
|
+
});
|
|
1588
|
+
|
|
1589
|
+
it("BuffaloZcl read longOctetStr", () => {
|
|
1590
|
+
const buffer = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
|
|
1591
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1592
|
+
const value = buffalo.read(DataType.LONG_OCTET_STR, {});
|
|
1593
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1594
|
+
expect(value).toStrictEqual(buffer.subarray(2));
|
|
1595
|
+
});
|
|
1596
|
+
|
|
1597
|
+
it("BuffaloZcl read extensionFieldSets", () => {
|
|
1598
|
+
const buffer = Buffer.from([0, 3, 8, 1, 0, 2, 0, 3, 0, 4, 5]);
|
|
1599
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1600
|
+
const value = buffalo.read(BuffaloZclDataType.EXTENSION_FIELD_SETS, {});
|
|
1601
|
+
expect(buffalo.getPosition()).toBe(11);
|
|
1602
|
+
expect(value).toStrictEqual([{clstId: 768, len: 8, extField: [1, 2, 3, 4, 5]}]);
|
|
1603
|
+
});
|
|
1604
|
+
|
|
1605
|
+
it("BuffaloZcl read list zoneinfo", () => {
|
|
1606
|
+
const buffer = Buffer.from([1, 5, 0, 2, 6, 0]);
|
|
1607
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1608
|
+
const value = buffalo.read(BuffaloZclDataType.LIST_ZONEINFO, {length: 2});
|
|
1609
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1610
|
+
expect(value).toStrictEqual([
|
|
1611
|
+
{zoneID: 1, zoneStatus: 5},
|
|
1612
|
+
{zoneID: 2, zoneStatus: 6},
|
|
1613
|
+
]);
|
|
1614
|
+
});
|
|
1615
|
+
|
|
1616
|
+
it.each([DataType.UINT40, DataType.DATA40, DataType.BITMAP40])("BuffaloZcl read uint40, data40, bitmap40", (type) => {
|
|
1617
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7]);
|
|
1618
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1619
|
+
const value = buffalo.read(type, {});
|
|
1620
|
+
expect(buffalo.getPosition()).toBe(5);
|
|
1621
|
+
expect(value).toStrictEqual(25853953281);
|
|
1622
|
+
});
|
|
1623
|
+
|
|
1624
|
+
it.each([DataType.UINT48, DataType.DATA48, DataType.BITMAP48])("BuffaloZcl read uint48, data48, bitmap48", (type) => {
|
|
1625
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7]);
|
|
1626
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1627
|
+
const value = buffalo.read(type, {});
|
|
1628
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1629
|
+
expect(value).toStrictEqual(7722435347713);
|
|
1630
|
+
});
|
|
1631
|
+
|
|
1632
|
+
it.each([DataType.UINT56, DataType.DATA56, DataType.BITMAP56])("BuffaloZcl read uint56, data56, bitmap56", (type) => {
|
|
1633
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
|
|
1634
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1635
|
+
const value = buffalo.read(type, {});
|
|
1636
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1637
|
+
expect(value).toStrictEqual(1978047272322305n);
|
|
1638
|
+
});
|
|
1639
|
+
|
|
1640
|
+
it.each([DataType.UINT64, DataType.DATA64, DataType.BITMAP64])("BuffaloZcl read uint64, data64, bitmap64", (type) => {
|
|
1641
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
|
|
1642
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1643
|
+
const value = buffalo.read(type, {});
|
|
1644
|
+
expect(buffalo.getPosition()).toBe(8);
|
|
1645
|
+
expect(value).toStrictEqual(0x0907070605040501n);
|
|
1646
|
+
});
|
|
1647
|
+
|
|
1648
|
+
it("BuffaloZcl read int40", () => {
|
|
1649
|
+
const buffer = Buffer.from([254, 255, 255, 255, 127]);
|
|
1650
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1651
|
+
const value = buffalo.read(DataType.INT40, {});
|
|
1652
|
+
expect(buffalo.getPosition()).toBe(5);
|
|
1653
|
+
expect(value).toStrictEqual(549755813886);
|
|
1654
|
+
});
|
|
1655
|
+
|
|
1656
|
+
it("BuffaloZcl read int56", () => {
|
|
1657
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
|
|
1658
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1659
|
+
const value = buffalo.read(DataType.INT56, {});
|
|
1660
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1661
|
+
expect(value).toStrictEqual(1978047272322305n);
|
|
1662
|
+
});
|
|
1663
|
+
|
|
1664
|
+
it("BuffaloZcl read int64", () => {
|
|
1665
|
+
const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
|
|
1666
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1667
|
+
const value = buffalo.read(DataType.INT64, {});
|
|
1668
|
+
expect(buffalo.getPosition()).toBe(8);
|
|
1669
|
+
expect(value).toStrictEqual(650496393613673729n);
|
|
1670
|
+
});
|
|
1671
|
+
|
|
1672
|
+
it.each([
|
|
1673
|
+
["no data point", Buffer.from([]), []],
|
|
1674
|
+
["single data point", Buffer.from([1, 4, 0, 1, 1]), [{dp: 1, datatype: 4, data: Buffer.from([1])}]],
|
|
1675
|
+
[
|
|
1676
|
+
"two data points",
|
|
1677
|
+
Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0, 90]),
|
|
1678
|
+
[
|
|
1679
|
+
{dp: 1, datatype: 4, data: Buffer.from([1])},
|
|
1680
|
+
{dp: 4, datatype: 2, data: Buffer.from([0, 0, 0, 90])},
|
|
1681
|
+
],
|
|
1682
|
+
],
|
|
1683
|
+
["incomplete data point is ignored", Buffer.from([1, 4, 0, 1, 1, 4]), [{dp: 1, datatype: 4, data: Buffer.from([1])}]],
|
|
1684
|
+
[
|
|
1685
|
+
"incomplete data buffer",
|
|
1686
|
+
Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0]),
|
|
1687
|
+
[
|
|
1688
|
+
{dp: 1, datatype: 4, data: Buffer.from([1])},
|
|
1689
|
+
{dp: 4, datatype: 2, data: Buffer.from([0, 0, 0])},
|
|
1690
|
+
],
|
|
1691
|
+
],
|
|
1692
|
+
])("BuffaloZcl read readListTuyaDataPointValues %s", (_name, buffer, payload) => {
|
|
1693
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1694
|
+
const value = buffalo.read(BuffaloZclDataType.LIST_TUYA_DATAPOINT_VALUES, {});
|
|
1695
|
+
expect(buffalo.isMore()).not.toBeTruthy();
|
|
1696
|
+
expect(value).toStrictEqual(payload);
|
|
1697
|
+
});
|
|
1698
|
+
|
|
1699
|
+
it("BuffaloZcl write charStr", () => {
|
|
1700
|
+
const payload = "hello";
|
|
1701
|
+
const buffer = Buffer.alloc(7);
|
|
1702
|
+
const expected = Buffer.from([5, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0]);
|
|
1703
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1704
|
+
buffalo.write(DataType.CHAR_STR, payload, {});
|
|
1705
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1706
|
+
expect(buffer).toStrictEqual(expected);
|
|
1707
|
+
});
|
|
1708
|
+
|
|
1709
|
+
it("BuffaloZcl write longCharStr", () => {
|
|
1710
|
+
const payload = "hello";
|
|
1711
|
+
const buffer = Buffer.alloc(7);
|
|
1712
|
+
const expected = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
|
|
1713
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1714
|
+
buffalo.write(DataType.LONG_CHAR_STR, payload, {});
|
|
1715
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1716
|
+
expect(buffer).toStrictEqual(expected);
|
|
1717
|
+
});
|
|
1718
|
+
|
|
1719
|
+
it("BuffaloZcl write octetStr", () => {
|
|
1720
|
+
const payload = [1, 2, 4];
|
|
1721
|
+
const buffer = Buffer.alloc(5);
|
|
1722
|
+
const expected = Buffer.from([3, 1, 2, 4, 0]);
|
|
1723
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1724
|
+
buffalo.write(DataType.OCTET_STR, payload, {});
|
|
1725
|
+
expect(buffalo.getPosition()).toBe(4);
|
|
1726
|
+
expect(buffer).toStrictEqual(expected);
|
|
1727
|
+
});
|
|
1728
|
+
|
|
1729
|
+
it("BuffaloZcl write longOctetStr", () => {
|
|
1730
|
+
const payload = [1, 2, 3, 4, 5];
|
|
1731
|
+
const buffer = Buffer.alloc(7);
|
|
1732
|
+
const expected = Buffer.from([5, 0, 1, 2, 3, 4, 5]);
|
|
1733
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1734
|
+
buffalo.write(DataType.LONG_OCTET_STR, payload, {});
|
|
1735
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1736
|
+
expect(buffer).toStrictEqual(expected);
|
|
1737
|
+
});
|
|
1738
|
+
|
|
1739
|
+
it("BuffaloZcl write extensionFieldSets", () => {
|
|
1740
|
+
const payload = [{clstId: 768, len: 8, extField: [1, 2, 3, 4, 5]}];
|
|
1741
|
+
const buffer = Buffer.alloc(12);
|
|
1742
|
+
const expected = Buffer.from([0, 3, 8, 1, 0, 2, 0, 3, 0, 4, 5, 0]);
|
|
1743
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1744
|
+
buffalo.write(BuffaloZclDataType.EXTENSION_FIELD_SETS, payload, {});
|
|
1745
|
+
expect(buffalo.getPosition()).toBe(11);
|
|
1746
|
+
expect(buffer).toStrictEqual(expected);
|
|
1747
|
+
});
|
|
1748
|
+
|
|
1749
|
+
it("BuffaloZcl write zoneinfo", () => {
|
|
1750
|
+
const payload = [
|
|
1751
|
+
{zoneID: 1, zoneStatus: 5},
|
|
1752
|
+
{zoneID: 2, zoneStatus: 6},
|
|
1753
|
+
];
|
|
1754
|
+
const buffer = Buffer.alloc(6);
|
|
1755
|
+
const expected = Buffer.from([1, 5, 0, 2, 6, 0]);
|
|
1756
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1757
|
+
buffalo.write(BuffaloZclDataType.LIST_ZONEINFO, payload, {});
|
|
1758
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1759
|
+
expect(buffer).toStrictEqual(expected);
|
|
1760
|
+
});
|
|
1761
|
+
|
|
1762
|
+
it.each([DataType.UINT40, DataType.DATA40, DataType.BITMAP40])("BuffaloZcl write uint40, data40, bitmap40", (type) => {
|
|
1763
|
+
const payload = 1099511627773;
|
|
1764
|
+
const buffer = Buffer.alloc(5);
|
|
1765
|
+
const expected = Buffer.from([253, 255, 255, 255, 255]);
|
|
1766
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1767
|
+
buffalo.write(type, payload, {});
|
|
1768
|
+
expect(buffalo.getPosition()).toBe(5);
|
|
1769
|
+
expect(buffer).toStrictEqual(expected);
|
|
1770
|
+
});
|
|
1771
|
+
|
|
1772
|
+
it.each([DataType.UINT48, DataType.DATA48, DataType.BITMAP48])("BuffaloZcl write uint48, data48, bitmap48", (type) => {
|
|
1773
|
+
const payload = 281474976710653;
|
|
1774
|
+
const buffer = Buffer.alloc(6);
|
|
1775
|
+
const expected = Buffer.from([253, 255, 255, 255, 255, 255]);
|
|
1776
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1777
|
+
buffalo.write(type, payload, {});
|
|
1778
|
+
expect(buffalo.getPosition()).toBe(6);
|
|
1779
|
+
expect(buffer).toStrictEqual(expected);
|
|
1780
|
+
});
|
|
1781
|
+
|
|
1782
|
+
it.each([DataType.UINT56, DataType.DATA56, DataType.BITMAP56])("BuffaloZcl write uint56, data56, bitmap56", (type) => {
|
|
1783
|
+
const payload = 1978047272322305n;
|
|
1784
|
+
const buffer = Buffer.alloc(7);
|
|
1785
|
+
const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
|
|
1786
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1787
|
+
buffalo.write(type, payload, {});
|
|
1788
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1789
|
+
expect(buffer).toStrictEqual(expected);
|
|
1790
|
+
});
|
|
1791
|
+
|
|
1792
|
+
it.each([DataType.UINT64, DataType.DATA64, DataType.BITMAP64])("BuffaloZcl write uint64, data64, bitmap64", (type) => {
|
|
1793
|
+
const payload = 0x0907070605040501n;
|
|
1794
|
+
const buffer = Buffer.alloc(8);
|
|
1795
|
+
const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
|
|
1796
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1797
|
+
buffalo.write(type, payload, {});
|
|
1798
|
+
expect(buffalo.getPosition()).toBe(8);
|
|
1799
|
+
expect(buffer).toStrictEqual(expected);
|
|
1800
|
+
});
|
|
1801
|
+
|
|
1802
|
+
it("BuffaloZcl write int40", () => {
|
|
1803
|
+
const payload = 549755813886;
|
|
1804
|
+
const buffer = Buffer.alloc(5);
|
|
1805
|
+
const expected = Buffer.from([254, 255, 255, 255, 127]);
|
|
1806
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1807
|
+
buffalo.write(DataType.INT40, payload, {});
|
|
1808
|
+
expect(buffalo.getPosition()).toBe(5);
|
|
1809
|
+
expect(buffer).toStrictEqual(expected);
|
|
1810
|
+
});
|
|
1811
|
+
|
|
1812
|
+
it("BuffaloZcl write int56", () => {
|
|
1813
|
+
const payload = 1978047272322305n;
|
|
1814
|
+
const buffer = Buffer.alloc(7);
|
|
1815
|
+
const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
|
|
1816
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1817
|
+
buffalo.write(DataType.INT56, payload, {});
|
|
1818
|
+
expect(buffalo.getPosition()).toBe(7);
|
|
1819
|
+
expect(buffer).toStrictEqual(expected);
|
|
1820
|
+
});
|
|
1821
|
+
|
|
1822
|
+
it("BuffaloZcl write int64", () => {
|
|
1823
|
+
const payload = 650496393613673729n;
|
|
1824
|
+
const buffer = Buffer.alloc(8);
|
|
1825
|
+
const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
|
|
1826
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1827
|
+
buffalo.write(DataType.INT64, payload, {});
|
|
1828
|
+
expect(buffalo.getPosition()).toBe(8);
|
|
1829
|
+
expect(buffer).toStrictEqual(expected);
|
|
1830
|
+
});
|
|
1831
|
+
|
|
1832
|
+
it("BuffaloZcl write array element type string", () => {
|
|
1833
|
+
const payload = {
|
|
1834
|
+
elementType: Zcl.DataType.OCTET_STR,
|
|
1835
|
+
elements: [
|
|
1836
|
+
[0, 13, 1, 6, 0, 2],
|
|
1837
|
+
[1, 13, 2, 6, 0, 2],
|
|
1838
|
+
[2, 13, 3, 6, 0, 2],
|
|
1839
|
+
[3, 13, 4, 6, 0, 2],
|
|
1840
|
+
],
|
|
1841
|
+
};
|
|
1842
|
+
const expected = Buffer.from([0x41, 0x04, 0x00, 6, 0, 13, 1, 6, 0, 2, 6, 1, 13, 2, 6, 0, 2, 6, 2, 13, 3, 6, 0, 2, 6, 3, 13, 4, 6, 0, 2]);
|
|
1843
|
+
const buffer = Buffer.alloc(expected.length);
|
|
1844
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1845
|
+
buffalo.write(DataType.ARRAY, payload, {});
|
|
1846
|
+
expect(buffalo.getPosition()).toBe(expected.length);
|
|
1847
|
+
expect(buffer).toStrictEqual(expected);
|
|
1848
|
+
});
|
|
1849
|
+
|
|
1850
|
+
it("BuffaloZcl write array element type numeric", () => {
|
|
1851
|
+
const payload = {elementType: Zcl.DataType.DATA8, elements: [0, 0, 0, 0]};
|
|
1852
|
+
const expected = Buffer.from([0x08, 0x04, 0x00, 0, 0, 0, 0]);
|
|
1853
|
+
const buffer = Buffer.alloc(expected.length);
|
|
1854
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1855
|
+
buffalo.write(DataType.ARRAY, payload, {});
|
|
1856
|
+
expect(buffalo.getPosition()).toBe(expected.length);
|
|
1857
|
+
expect(buffer).toStrictEqual(expected);
|
|
1858
|
+
});
|
|
1859
|
+
|
|
1860
|
+
it("BuffaloZcl write array element type numeric passed as string of DataType", () => {
|
|
1861
|
+
const payload = {elementType: "DATA8", elements: [0, 0, 0, 0]};
|
|
1862
|
+
const expected = Buffer.from([0x08, 0x04, 0x00, 0, 0, 0, 0]);
|
|
1863
|
+
const buffer = Buffer.alloc(expected.length);
|
|
1864
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1865
|
+
buffalo.write(DataType.ARRAY, payload, {});
|
|
1866
|
+
expect(buffalo.getPosition()).toBe(expected.length);
|
|
1867
|
+
expect(buffer).toStrictEqual(expected);
|
|
1868
|
+
});
|
|
1869
|
+
|
|
1870
|
+
it("BuffaloZcl write struct", () => {
|
|
1871
|
+
const payload = [
|
|
1872
|
+
{elmType: Zcl.DataType.UINT8, elmVal: 3},
|
|
1873
|
+
{elmType: Zcl.DataType.CHAR_STR, elmVal: "a"},
|
|
1874
|
+
];
|
|
1875
|
+
const expected = Buffer.from([2, 0, Zcl.DataType.UINT8, 3, Zcl.DataType.CHAR_STR, 1, 0x61]);
|
|
1876
|
+
const buffer = Buffer.alloc(expected.length);
|
|
1877
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1878
|
+
buffalo.write(DataType.STRUCT, payload, {});
|
|
1879
|
+
expect(buffalo.getPosition()).toBe(expected.length);
|
|
1880
|
+
expect(buffer).toStrictEqual(expected);
|
|
1881
|
+
});
|
|
1882
|
+
|
|
1883
|
+
it("BuffaloZcl write security key", () => {
|
|
1884
|
+
const payload = [0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01, 0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01];
|
|
1885
|
+
const buffer = Buffer.alloc(16);
|
|
1886
|
+
const expected = Buffer.from([0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01, 0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01]);
|
|
1887
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1888
|
+
buffalo.write(DataType.SEC_KEY, payload, {});
|
|
1889
|
+
expect(buffalo.getPosition()).toBe(16);
|
|
1890
|
+
expect(buffer).toStrictEqual(expected);
|
|
1891
|
+
});
|
|
1892
|
+
|
|
1893
|
+
it.each([
|
|
1894
|
+
["no data point", [], Buffer.from([])],
|
|
1895
|
+
["single data point", [{dp: 1, datatype: 4, data: Buffer.from([1])}], Buffer.from([1, 4, 0, 1, 1])],
|
|
1896
|
+
[
|
|
1897
|
+
"two data points",
|
|
1898
|
+
[
|
|
1899
|
+
{dp: 1, datatype: 4, data: Buffer.from([1])},
|
|
1900
|
+
{dp: 4, datatype: 2, data: Buffer.from([0, 0, 0, 90])},
|
|
1901
|
+
],
|
|
1902
|
+
Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0, 90]),
|
|
1903
|
+
],
|
|
1904
|
+
])("BuffaloZcl writeListTuyaDataPointValues %s", (_name, payload, expected) => {
|
|
1905
|
+
const buffer = Buffer.alloc(expected.length);
|
|
1906
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
1907
|
+
buffalo.write(BuffaloZclDataType.LIST_TUYA_DATAPOINT_VALUES, payload, {});
|
|
1908
|
+
expect(buffalo.getPosition()).toBe(expected.length);
|
|
1909
|
+
expect(buffer).toStrictEqual(expected);
|
|
1910
|
+
});
|
|
1911
|
+
|
|
1912
|
+
it("Zcl utils get cluster without manufacturerCode", () => {
|
|
1913
|
+
const cluster = Zcl.Utils.getCluster(0xfc00, undefined, {});
|
|
1914
|
+
expect(cluster.ID).toBe(0xfc00);
|
|
1915
|
+
expect(cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
1916
|
+
});
|
|
1917
|
+
|
|
1918
|
+
it("Zcl utils get cluster with manufacturerCode", () => {
|
|
1919
|
+
const cluster = Zcl.Utils.getCluster(0xfc00, 0x100b, {});
|
|
1920
|
+
expect(cluster.ID).toBe(0xfc00);
|
|
1921
|
+
expect(cluster.name).toBe("manuSpecificPhilips");
|
|
1922
|
+
});
|
|
1923
|
+
|
|
1924
|
+
it("Zcl utils get cluster manufacturerCode", () => {
|
|
1925
|
+
const cluster = Zcl.Utils.getCluster(0xfc00, 0x10f2, {});
|
|
1926
|
+
expect(cluster.ID).toBe(0xfc00);
|
|
1927
|
+
expect(cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
1928
|
+
});
|
|
1929
|
+
|
|
1930
|
+
it("Zcl utils get cluster manufacturerCode wrong", () => {
|
|
1931
|
+
const cluster = Zcl.Utils.getCluster(0xfc00, 123, {});
|
|
1932
|
+
expect(cluster.ID).toBe(0xfc00);
|
|
1933
|
+
expect(cluster.name).toBe("manuSpecificAssaDoorLock");
|
|
1934
|
+
});
|
|
1935
|
+
|
|
1936
|
+
it("Zcl utils get cluster attributes manufacturerCode", () => {
|
|
1937
|
+
const cluster = Zcl.Utils.getCluster("closuresWindowCovering", 0x1021, {});
|
|
1938
|
+
const attribute = cluster.getAttribute(0xf004);
|
|
1939
|
+
expect(attribute).toStrictEqual(expect.objectContaining({ID: 0xf004, manufacturerCode: 0x1021, name: "stepPositionTilt", type: 48}));
|
|
1940
|
+
});
|
|
1941
|
+
|
|
1942
|
+
it("Zcl utils get cluster attributes manufacturerCode wrong", () => {
|
|
1943
|
+
const cluster = Zcl.Utils.getCluster("closuresWindowCovering", 123, {});
|
|
1944
|
+
expect(cluster.getAttribute(0x1000)).toBeUndefined();
|
|
1945
|
+
});
|
|
1946
|
+
|
|
1947
|
+
it("Zcl utils get command", () => {
|
|
1948
|
+
const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
|
|
1949
|
+
const command = cluster.getCommand(0);
|
|
1950
|
+
expect(command.name).toStrictEqual("off");
|
|
1951
|
+
expect(cluster.getCommand("off")).toStrictEqual(command);
|
|
1952
|
+
});
|
|
1953
|
+
|
|
1954
|
+
it("Zcl utils get attribute", () => {
|
|
1955
|
+
const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
|
|
1956
|
+
const attribute = cluster.getAttribute(16385);
|
|
1957
|
+
expect(attribute?.name).toStrictEqual("onTime");
|
|
1958
|
+
expect(cluster.getAttribute("onTime")).toStrictEqual(attribute);
|
|
1959
|
+
});
|
|
1960
|
+
|
|
1961
|
+
it("Zcl utils get attribute non-existing", () => {
|
|
1962
|
+
const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
|
|
1963
|
+
expect(cluster.getAttribute("notExisting")).toBeUndefined();
|
|
1964
|
+
});
|
|
1965
|
+
|
|
1966
|
+
it("Zcl utils get command non-existing", () => {
|
|
1967
|
+
const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
|
|
1968
|
+
expect(() => cluster.getCommand("notExisting")).toThrow("Cluster 'genOnOff' has no command 'notExisting'");
|
|
1969
|
+
});
|
|
1970
|
+
|
|
1971
|
+
it("Zcl green power readGpd commissioning", () => {
|
|
1972
|
+
const buffer = [
|
|
1973
|
+
0xff, // device
|
|
1974
|
+
0x00, // options
|
|
1975
|
+
];
|
|
1976
|
+
const frame = new BuffaloZcl(Buffer.from(buffer));
|
|
1977
|
+
|
|
1978
|
+
expect(
|
|
1979
|
+
frame.read(BuffaloZclDataType.GPD_FRAME, {
|
|
1980
|
+
payload: {
|
|
1981
|
+
payloadSize: buffer.length,
|
|
1982
|
+
commandID: 0xe0,
|
|
1983
|
+
},
|
|
1984
|
+
}),
|
|
1985
|
+
).toStrictEqual({
|
|
1986
|
+
deviceID: 0xff,
|
|
1987
|
+
options: 0x00,
|
|
1988
|
+
extendedOptions: 0x00,
|
|
1989
|
+
securityKey: Buffer.alloc(16),
|
|
1990
|
+
keyMic: 0,
|
|
1991
|
+
outgoingCounter: 0,
|
|
1992
|
+
manufacturerID: 0,
|
|
1993
|
+
modelID: 0,
|
|
1994
|
+
numGpdCommands: 0,
|
|
1995
|
+
gpdCommandIdList: Buffer.alloc(0),
|
|
1996
|
+
numServerClusters: 0,
|
|
1997
|
+
numClientClusters: 0,
|
|
1998
|
+
gpdServerClusters: Buffer.alloc(0),
|
|
1999
|
+
gpdClientClusters: Buffer.alloc(0),
|
|
2000
|
+
applicationInfo: 0x00,
|
|
2001
|
+
genericSwitchConfig: 0,
|
|
2002
|
+
currentContactStatus: 0,
|
|
2003
|
+
});
|
|
2004
|
+
});
|
|
2005
|
+
|
|
2006
|
+
it("Zcl green power readGpd commissioning all options", () => {
|
|
2007
|
+
const buffer = [
|
|
2008
|
+
0xff, // device
|
|
2009
|
+
0x80 | 0x04, // options
|
|
2010
|
+
0x20 | 0x40 | 0x80, // extended options
|
|
2011
|
+
0,
|
|
2012
|
+
0,
|
|
2013
|
+
0,
|
|
2014
|
+
0,
|
|
2015
|
+
0,
|
|
2016
|
+
0,
|
|
2017
|
+
0,
|
|
2018
|
+
0,
|
|
2019
|
+
0,
|
|
2020
|
+
0,
|
|
2021
|
+
0,
|
|
2022
|
+
0,
|
|
2023
|
+
0,
|
|
2024
|
+
0,
|
|
2025
|
+
0,
|
|
2026
|
+
0, // security key
|
|
2027
|
+
0,
|
|
2028
|
+
0,
|
|
2029
|
+
0,
|
|
2030
|
+
0, // key mic
|
|
2031
|
+
0,
|
|
2032
|
+
0,
|
|
2033
|
+
0,
|
|
2034
|
+
0, // outgoing counter
|
|
2035
|
+
0x01 | 0x02 | 0x04 | 0x08 | 0x10, // application info
|
|
2036
|
+
0,
|
|
2037
|
+
0, // manufacturer ID
|
|
2038
|
+
0,
|
|
2039
|
+
0, // model ID
|
|
2040
|
+
0, // num GPD commands + commands
|
|
2041
|
+
0, // clusters
|
|
2042
|
+
2, // switch info length
|
|
2043
|
+
0, // generic switch config
|
|
2044
|
+
1, // current contact status
|
|
2045
|
+
];
|
|
2046
|
+
const frame = new BuffaloZcl(Buffer.from(buffer));
|
|
2047
|
+
|
|
2048
|
+
expect(
|
|
2049
|
+
frame.read(BuffaloZclDataType.GPD_FRAME, {
|
|
2050
|
+
payload: {
|
|
2051
|
+
payloadSize: buffer.length,
|
|
2052
|
+
commandID: 0xe0,
|
|
2053
|
+
},
|
|
2054
|
+
}),
|
|
2055
|
+
).toStrictEqual({
|
|
2056
|
+
deviceID: 0xff,
|
|
2057
|
+
options: 0x80 | 0x04,
|
|
2058
|
+
extendedOptions: 0x20 | 0x40 | 0x80,
|
|
2059
|
+
securityKey: Buffer.alloc(16),
|
|
2060
|
+
keyMic: 0,
|
|
2061
|
+
outgoingCounter: 0,
|
|
2062
|
+
manufacturerID: 0,
|
|
2063
|
+
modelID: 0,
|
|
2064
|
+
numGpdCommands: 0,
|
|
2065
|
+
gpdCommandIdList: Buffer.alloc(0),
|
|
2066
|
+
numServerClusters: 0,
|
|
2067
|
+
numClientClusters: 0,
|
|
2068
|
+
gpdServerClusters: Buffer.alloc(0),
|
|
2069
|
+
gpdClientClusters: Buffer.alloc(0),
|
|
2070
|
+
applicationInfo: 0x01 | 0x02 | 0x04 | 0x08 | 0x10,
|
|
2071
|
+
genericSwitchConfig: 0,
|
|
2072
|
+
currentContactStatus: 1,
|
|
2073
|
+
});
|
|
2074
|
+
});
|
|
2075
|
+
|
|
2076
|
+
it("Zcl green power readGpd channel request", () => {
|
|
2077
|
+
const buffer = [0xfa];
|
|
2078
|
+
const frame = new BuffaloZcl(Buffer.from(buffer));
|
|
2079
|
+
|
|
2080
|
+
expect(
|
|
2081
|
+
frame.read(BuffaloZclDataType.GPD_FRAME, {
|
|
2082
|
+
payload: {
|
|
2083
|
+
payloadSize: buffer.length,
|
|
2084
|
+
commandID: 0xe3,
|
|
2085
|
+
},
|
|
2086
|
+
}),
|
|
2087
|
+
).toStrictEqual({
|
|
2088
|
+
nextChannel: 0xa,
|
|
2089
|
+
nextNextChannel: 0xf,
|
|
2090
|
+
});
|
|
2091
|
+
});
|
|
2092
|
+
|
|
2093
|
+
it("Zcl green power readGpd attribute report", () => {
|
|
2094
|
+
const buffer = [
|
|
2095
|
+
0x12,
|
|
2096
|
+
0x34, // Manufacturer ID
|
|
2097
|
+
0xff,
|
|
2098
|
+
0xff, // Cluster ID
|
|
2099
|
+
0x00,
|
|
2100
|
+
0x00, // Attribute ID
|
|
2101
|
+
DataType.UINT32, // Attribute Type
|
|
2102
|
+
0x00,
|
|
2103
|
+
0x01,
|
|
2104
|
+
0x02,
|
|
2105
|
+
0x03,
|
|
2106
|
+
0x01,
|
|
2107
|
+
0x00,
|
|
2108
|
+
DataType.CHAR_STR,
|
|
2109
|
+
0x06,
|
|
2110
|
+
0x5a,
|
|
2111
|
+
0x49,
|
|
2112
|
+
0x47,
|
|
2113
|
+
0x42,
|
|
2114
|
+
0x45,
|
|
2115
|
+
0x45,
|
|
2116
|
+
0x02,
|
|
2117
|
+
0x00,
|
|
2118
|
+
DataType.BOOLEAN,
|
|
2119
|
+
0x01,
|
|
2120
|
+
];
|
|
2121
|
+
const frame = new BuffaloZcl(Buffer.from(buffer));
|
|
2122
|
+
|
|
2123
|
+
expect(
|
|
2124
|
+
frame.read(BuffaloZclDataType.GPD_FRAME, {
|
|
2125
|
+
payload: {
|
|
2126
|
+
commandID: 0xa1,
|
|
2127
|
+
payloadSize: buffer.length,
|
|
2128
|
+
},
|
|
2129
|
+
}),
|
|
2130
|
+
).toStrictEqual({
|
|
2131
|
+
manufacturerCode: 13330,
|
|
2132
|
+
clusterID: 65535,
|
|
2133
|
+
attributes: {
|
|
2134
|
+
"0": 50462976,
|
|
2135
|
+
"1": "ZIGBEE",
|
|
2136
|
+
"2": 1,
|
|
2137
|
+
},
|
|
2138
|
+
});
|
|
2139
|
+
});
|
|
2140
|
+
|
|
2141
|
+
it("Zcl green power writeGpd commissioning", () => {
|
|
2142
|
+
const expected = [
|
|
2143
|
+
1, // length
|
|
2144
|
+
0, // options
|
|
2145
|
+
];
|
|
2146
|
+
const frame = new BuffaloZcl(Buffer.alloc(2));
|
|
2147
|
+
|
|
2148
|
+
frame.write(
|
|
2149
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2150
|
+
{
|
|
2151
|
+
commandID: 0xf0,
|
|
2152
|
+
options: 0,
|
|
2153
|
+
panID: 0,
|
|
2154
|
+
securityKey: Buffer.alloc(16),
|
|
2155
|
+
keyMic: 0,
|
|
2156
|
+
frameCounter: 0,
|
|
2157
|
+
},
|
|
2158
|
+
{},
|
|
2159
|
+
);
|
|
2160
|
+
|
|
2161
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
|
|
2162
|
+
});
|
|
2163
|
+
|
|
2164
|
+
it("Zcl green power writeGpd commissioning all options", () => {
|
|
2165
|
+
const expected = [
|
|
2166
|
+
27, // length
|
|
2167
|
+
0b11111, // options
|
|
2168
|
+
0xff,
|
|
2169
|
+
0xff, // PAN ID
|
|
2170
|
+
0,
|
|
2171
|
+
0,
|
|
2172
|
+
0,
|
|
2173
|
+
0,
|
|
2174
|
+
0,
|
|
2175
|
+
0,
|
|
2176
|
+
0,
|
|
2177
|
+
0,
|
|
2178
|
+
0,
|
|
2179
|
+
0,
|
|
2180
|
+
0,
|
|
2181
|
+
0,
|
|
2182
|
+
0,
|
|
2183
|
+
0,
|
|
2184
|
+
0,
|
|
2185
|
+
0, // security key
|
|
2186
|
+
0,
|
|
2187
|
+
0,
|
|
2188
|
+
0,
|
|
2189
|
+
0, // key mic
|
|
2190
|
+
0,
|
|
2191
|
+
0,
|
|
2192
|
+
0,
|
|
2193
|
+
0, // frame counter
|
|
2194
|
+
];
|
|
2195
|
+
const frame = new BuffaloZcl(Buffer.alloc(28));
|
|
2196
|
+
|
|
2197
|
+
frame.write(
|
|
2198
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2199
|
+
{
|
|
2200
|
+
commandID: 0xf0,
|
|
2201
|
+
options: 0b11111,
|
|
2202
|
+
panID: 0xffff,
|
|
2203
|
+
securityKey: Buffer.alloc(16),
|
|
2204
|
+
keyMic: 0,
|
|
2205
|
+
frameCounter: 0,
|
|
2206
|
+
},
|
|
2207
|
+
{},
|
|
2208
|
+
);
|
|
2209
|
+
|
|
2210
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
|
|
2211
|
+
});
|
|
2212
|
+
|
|
2213
|
+
it("Zcl green power writeGpd custom reply", () => {
|
|
2214
|
+
const expected = [
|
|
2215
|
+
6, // length
|
|
2216
|
+
90,
|
|
2217
|
+
73,
|
|
2218
|
+
71,
|
|
2219
|
+
66,
|
|
2220
|
+
69,
|
|
2221
|
+
69, // ZIGBEE
|
|
2222
|
+
];
|
|
2223
|
+
|
|
2224
|
+
const frame = new BuffaloZcl(Buffer.alloc(7));
|
|
2225
|
+
frame.write(
|
|
2226
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2227
|
+
{
|
|
2228
|
+
commandID: 0xf4,
|
|
2229
|
+
buffer: Buffer.from("ZIGBEE"),
|
|
2230
|
+
},
|
|
2231
|
+
{},
|
|
2232
|
+
);
|
|
2233
|
+
|
|
2234
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
|
|
2235
|
+
});
|
|
2236
|
+
|
|
2237
|
+
it("Zcl green power writeGpd unhandled command", () => {
|
|
2238
|
+
const frame = new BuffaloZcl(Buffer.alloc(7));
|
|
2239
|
+
frame.write(
|
|
2240
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2241
|
+
{
|
|
2242
|
+
commandID: 0x1ff,
|
|
2243
|
+
},
|
|
2244
|
+
{},
|
|
2245
|
+
);
|
|
2246
|
+
|
|
2247
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.alloc(0));
|
|
2248
|
+
});
|
|
2249
|
+
|
|
2250
|
+
it("Zcl green power writeGpd channel configuration", () => {
|
|
2251
|
+
const expected = [
|
|
2252
|
+
1, // length
|
|
2253
|
+
0xf, // Channel 26
|
|
2254
|
+
];
|
|
2255
|
+
|
|
2256
|
+
const frame = new BuffaloZcl(Buffer.alloc(2));
|
|
2257
|
+
frame.write(
|
|
2258
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2259
|
+
{
|
|
2260
|
+
commandID: 0xf3,
|
|
2261
|
+
operationalChannel: 0xf,
|
|
2262
|
+
basic: false,
|
|
2263
|
+
},
|
|
2264
|
+
{},
|
|
2265
|
+
);
|
|
2266
|
+
|
|
2267
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
|
|
2268
|
+
});
|
|
2269
|
+
|
|
2270
|
+
it("Zcl green power writeGpd channel configuration basic", () => {
|
|
2271
|
+
const expected = [
|
|
2272
|
+
1, // length
|
|
2273
|
+
0x1f, // Channel 26 + Basic
|
|
2274
|
+
];
|
|
2275
|
+
|
|
2276
|
+
const frame = new BuffaloZcl(Buffer.alloc(2));
|
|
2277
|
+
frame.write(
|
|
2278
|
+
BuffaloZclDataType.GPD_FRAME,
|
|
2279
|
+
{
|
|
2280
|
+
commandID: 0xf3,
|
|
2281
|
+
operationalChannel: 0xf,
|
|
2282
|
+
basic: true,
|
|
2283
|
+
},
|
|
2284
|
+
{},
|
|
2285
|
+
);
|
|
2286
|
+
|
|
2287
|
+
expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
|
|
2288
|
+
});
|
|
2289
|
+
|
|
2290
|
+
it("ZclFrame parse MiBoxer zone configuration command", () => {
|
|
2291
|
+
const zoneConfigPayload = Buffer.from([
|
|
2292
|
+
0x11, 0x01, 0xf0, 0x08, 0x84, 0x2b, 0x01, 0x98, 0x2b, 0x02, 0xac, 0x2b, 0x03, 0xc0, 0x2b, 0x04, 0xd4, 0x2b, 0x05, 0xe8, 0x2b, 0x06, 0xfc,
|
|
2293
|
+
0x2b, 0x07, 0x10, 0x2c, 0x08,
|
|
2294
|
+
]);
|
|
2295
|
+
const zoneConfigFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zoneConfigPayload)!, zoneConfigPayload, {});
|
|
2296
|
+
expect(zoneConfigFrame.payload.zones).toStrictEqual([
|
|
2297
|
+
{zoneNum: 1, groupId: 0x2b84},
|
|
2298
|
+
{zoneNum: 2, groupId: 0x2b98},
|
|
2299
|
+
{zoneNum: 3, groupId: 0x2bac},
|
|
2300
|
+
{zoneNum: 4, groupId: 0x2bc0},
|
|
2301
|
+
{zoneNum: 5, groupId: 0x2bd4},
|
|
2302
|
+
{zoneNum: 6, groupId: 0x2be8},
|
|
2303
|
+
{zoneNum: 7, groupId: 0x2bfc},
|
|
2304
|
+
{zoneNum: 8, groupId: 0x2c10},
|
|
2305
|
+
]);
|
|
2306
|
+
});
|
|
2307
|
+
it("ZclFrame serialize MiBoxer zone configuration command", () => {
|
|
2308
|
+
const testZones = [
|
|
2309
|
+
{zoneNum: 1, groupId: 0x2b84},
|
|
2310
|
+
{zoneNum: 2, groupId: 0x2b98},
|
|
2311
|
+
{zoneNum: 3, groupId: 0x2bac},
|
|
2312
|
+
{zoneNum: 4, groupId: 0x2bc0},
|
|
2313
|
+
{zoneNum: 5, groupId: 0x2bd4},
|
|
2314
|
+
{zoneNum: 6, groupId: 0x2be8},
|
|
2315
|
+
{zoneNum: 7, groupId: 0x2bfc},
|
|
2316
|
+
{zoneNum: 8, groupId: 0x2c10},
|
|
2317
|
+
];
|
|
2318
|
+
const zoneConfigFrame = Zcl.Frame.create(
|
|
2319
|
+
FrameType.SPECIFIC,
|
|
2320
|
+
Direction.CLIENT_TO_SERVER,
|
|
2321
|
+
true,
|
|
2322
|
+
undefined,
|
|
2323
|
+
1,
|
|
2324
|
+
"miboxerSetZones",
|
|
2325
|
+
Zcl.Clusters.genGroups.ID,
|
|
2326
|
+
{zones: testZones},
|
|
2327
|
+
{},
|
|
2328
|
+
);
|
|
2329
|
+
expect(zoneConfigFrame.toBuffer()).toStrictEqual(
|
|
2330
|
+
Buffer.from([
|
|
2331
|
+
0x11, 0x01, 0xf0, 0x08, 0x84, 0x2b, 0x01, 0x98, 0x2b, 0x02, 0xac, 0x2b, 0x03, 0xc0, 0x2b, 0x04, 0xd4, 0x2b, 0x05, 0xe8, 0x2b, 0x06,
|
|
2332
|
+
0xfc, 0x2b, 0x07, 0x10, 0x2c, 0x08,
|
|
2333
|
+
]),
|
|
2334
|
+
);
|
|
2335
|
+
});
|
|
2336
|
+
|
|
2337
|
+
it("BuffaloZcl read BIG_ENDIAN_UINT24", () => {
|
|
2338
|
+
const buffer = Buffer.from([0x01, 0x01, 0x86, 0xa0, 0x02]);
|
|
2339
|
+
const buffalo = new BuffaloZcl(buffer, 1);
|
|
2340
|
+
const value = buffalo.read(BuffaloZclDataType.BIG_ENDIAN_UINT24, {});
|
|
2341
|
+
expect(buffalo.getPosition()).toBe(4);
|
|
2342
|
+
expect(value).toStrictEqual(100000);
|
|
2343
|
+
});
|
|
2344
|
+
|
|
2345
|
+
it("BuffaloZcl write BIG_ENDIAN_UINT24", () => {
|
|
2346
|
+
const payload = 16777200;
|
|
2347
|
+
const buffer = Buffer.alloc(4);
|
|
2348
|
+
const expected = Buffer.from([0x00, 0xff, 0xff, 0xf0]);
|
|
2349
|
+
const buffalo = new BuffaloZcl(buffer, 1);
|
|
2350
|
+
buffalo.write(BuffaloZclDataType.BIG_ENDIAN_UINT24, payload, {});
|
|
2351
|
+
expect(buffalo.getPosition()).toBe(4);
|
|
2352
|
+
expect(buffer).toStrictEqual(expected);
|
|
2353
|
+
});
|
|
2354
|
+
|
|
2355
|
+
it("BuffaloZcl read BUFFER whole", () => {
|
|
2356
|
+
const buffer = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
2357
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2358
|
+
const value = buffalo.read(BuffaloZclDataType.BUFFER, {});
|
|
2359
|
+
expect(value).toStrictEqual(Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]));
|
|
2360
|
+
});
|
|
2361
|
+
|
|
2362
|
+
it("BuffaloZcl read BUFFER with length", () => {
|
|
2363
|
+
const buffer = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
2364
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2365
|
+
const value = buffalo.read(BuffaloZclDataType.BUFFER, {length: 3});
|
|
2366
|
+
expect(value).toStrictEqual(Buffer.from([0x01, 0x02, 0x03]));
|
|
2367
|
+
});
|
|
2368
|
+
|
|
2369
|
+
it("BuffaloZcl write BUFFER whole", () => {
|
|
2370
|
+
const buffer = Buffer.alloc(5);
|
|
2371
|
+
const expected = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
2372
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2373
|
+
buffalo.write(BuffaloZclDataType.BUFFER, expected, {});
|
|
2374
|
+
expect(buffer).toStrictEqual(expected);
|
|
2375
|
+
});
|
|
2376
|
+
|
|
2377
|
+
it("BuffaloZcl write BUFFER always whole - length ignored", () => {
|
|
2378
|
+
const buffer = Buffer.alloc(5);
|
|
2379
|
+
const expected = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
2380
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2381
|
+
buffalo.write(BuffaloZclDataType.BUFFER, expected, {length: 3});
|
|
2382
|
+
expect(buffer).toStrictEqual(expected);
|
|
2383
|
+
});
|
|
2384
|
+
|
|
2385
|
+
it("BuffaloZcl write non existing type", () => {
|
|
2386
|
+
expect(() => {
|
|
2387
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(0));
|
|
2388
|
+
// @ts-expect-error invalid typing
|
|
2389
|
+
buffalo.write(9999, 1, {});
|
|
2390
|
+
}).toThrow(new Error("Write for '9999' not available"));
|
|
2391
|
+
});
|
|
2392
|
+
|
|
2393
|
+
it("BuffaloZcl read non existing type", () => {
|
|
2394
|
+
expect(() => {
|
|
2395
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(0));
|
|
2396
|
+
// @ts-expect-error invalid typing
|
|
2397
|
+
buffalo.read(9999, {});
|
|
2398
|
+
}).toThrow(new Error("Read for '9999' not available"));
|
|
2399
|
+
});
|
|
2400
|
+
|
|
2401
|
+
it("BuffaloZcl write TOD", () => {
|
|
2402
|
+
const buffer = Buffer.alloc(4);
|
|
2403
|
+
const expected = Buffer.from([0, 59, 34, 88]);
|
|
2404
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2405
|
+
const payload = {hours: 0, minutes: 59, seconds: 34, hundredths: 88};
|
|
2406
|
+
buffalo.write(DataType.TOD, payload, {});
|
|
2407
|
+
expect(buffalo.getBuffer()).toStrictEqual(expected);
|
|
2408
|
+
});
|
|
2409
|
+
|
|
2410
|
+
it("BuffaloZcl read TOD", () => {
|
|
2411
|
+
const expected = {hours: 0, minutes: 59, seconds: 34, hundredths: 88};
|
|
2412
|
+
const buffalo = new BuffaloZcl(Buffer.from([0, 59, 34, 88]));
|
|
2413
|
+
const value = buffalo.read(DataType.TOD, {});
|
|
2414
|
+
expect(value).toStrictEqual(expected);
|
|
2415
|
+
});
|
|
2416
|
+
|
|
2417
|
+
it("BuffaloZcl write DATE", () => {
|
|
2418
|
+
const buffer = Buffer.alloc(4);
|
|
2419
|
+
const expected = Buffer.from([100, 8, 31, 3]);
|
|
2420
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2421
|
+
const payload = {year: 2000, month: 8, dayOfMonth: 31, dayOfWeek: 3};
|
|
2422
|
+
buffalo.write(DataType.DATE, payload, {});
|
|
2423
|
+
expect(buffalo.getBuffer()).toStrictEqual(expected);
|
|
2424
|
+
});
|
|
2425
|
+
|
|
2426
|
+
it("BuffaloZcl read DATE", () => {
|
|
2427
|
+
const expected = {year: 2000, month: 8, dayOfMonth: 31, dayOfWeek: 3};
|
|
2428
|
+
const buffalo = new BuffaloZcl(Buffer.from([100, 8, 31, 3]));
|
|
2429
|
+
const value = buffalo.read(DataType.DATE, {});
|
|
2430
|
+
expect(value).toStrictEqual(expected);
|
|
2431
|
+
});
|
|
2432
|
+
|
|
2433
|
+
it("BuffaloZcl write TOD non-value", () => {
|
|
2434
|
+
const buffer = Buffer.alloc(4);
|
|
2435
|
+
const expected = Buffer.from([0xff, 0xff, 0xff, 0xff]);
|
|
2436
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2437
|
+
const payload = {hours: Number.NaN, minutes: Number.NaN, seconds: Number.NaN, hundredths: Number.NaN};
|
|
2438
|
+
buffalo.write(DataType.TOD, payload, {});
|
|
2439
|
+
expect(buffalo.getBuffer()).toStrictEqual(expected);
|
|
2440
|
+
});
|
|
2441
|
+
|
|
2442
|
+
it("BuffaloZcl read DATE non-value", () => {
|
|
2443
|
+
const buffer = Buffer.alloc(4);
|
|
2444
|
+
const expected = Buffer.from([0xff, 0xff, 0xff, 0xff]);
|
|
2445
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2446
|
+
const payload = {year: Number.NaN, month: Number.NaN, dayOfMonth: Number.NaN, dayOfWeek: Number.NaN};
|
|
2447
|
+
buffalo.write(DataType.DATE, payload, {});
|
|
2448
|
+
expect(buffalo.getBuffer()).toStrictEqual(expected);
|
|
2449
|
+
});
|
|
2450
|
+
|
|
2451
|
+
it("BuffaloZcl read OCTET_STR non-value", () => {
|
|
2452
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff]));
|
|
2453
|
+
const value = buffalo.read(DataType.OCTET_STR, {});
|
|
2454
|
+
expect(value).toStrictEqual(Buffer.from([]));
|
|
2455
|
+
});
|
|
2456
|
+
|
|
2457
|
+
it("BuffaloZcl read CHAR_STR non-value", () => {
|
|
2458
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff]));
|
|
2459
|
+
const value = buffalo.read(DataType.CHAR_STR, {});
|
|
2460
|
+
expect(value).toStrictEqual("");
|
|
2461
|
+
});
|
|
2462
|
+
|
|
2463
|
+
it("BuffaloZcl read MI_STRUCT non-value", () => {
|
|
2464
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff]));
|
|
2465
|
+
const value = buffalo.read(BuffaloZclDataType.MI_STRUCT, {});
|
|
2466
|
+
expect(value).toStrictEqual({});
|
|
2467
|
+
});
|
|
2468
|
+
|
|
2469
|
+
it("BuffaloZcl read LONG_OCTET_STR non-value", () => {
|
|
2470
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
|
|
2471
|
+
const value = buffalo.read(DataType.LONG_OCTET_STR, {});
|
|
2472
|
+
expect(value).toStrictEqual(Buffer.from([]));
|
|
2473
|
+
});
|
|
2474
|
+
|
|
2475
|
+
it("BuffaloZcl read LONG_CHAR_STR non-value", () => {
|
|
2476
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
|
|
2477
|
+
const value = buffalo.read(DataType.LONG_CHAR_STR, {});
|
|
2478
|
+
expect(value).toStrictEqual("");
|
|
2479
|
+
});
|
|
2480
|
+
|
|
2481
|
+
it("BuffaloZcl read ARRAY non-value", () => {
|
|
2482
|
+
const buffalo = new BuffaloZcl(Buffer.from([DataType.UINT8, 0xff, 0xff]));
|
|
2483
|
+
const value = buffalo.read(DataType.ARRAY, {});
|
|
2484
|
+
expect(value).toStrictEqual([]);
|
|
2485
|
+
});
|
|
2486
|
+
|
|
2487
|
+
it("BuffaloZcl read STRUCT non-value", () => {
|
|
2488
|
+
const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
|
|
2489
|
+
const value = buffalo.read(DataType.STRUCT, {});
|
|
2490
|
+
expect(value).toStrictEqual([]);
|
|
2491
|
+
});
|
|
2492
|
+
|
|
2493
|
+
it("BuffaloZcl write NO_DATA", () => {
|
|
2494
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(2));
|
|
2495
|
+
const payload = null;
|
|
2496
|
+
buffalo.write(DataType.NO_DATA, payload, {});
|
|
2497
|
+
expect(buffalo.getPosition()).toStrictEqual(0);
|
|
2498
|
+
expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00]));
|
|
2499
|
+
});
|
|
2500
|
+
|
|
2501
|
+
it("BuffaloZcl read NO_DATA", () => {
|
|
2502
|
+
const buffalo = new BuffaloZcl(Buffer.from([0x00, 0x00]), 1);
|
|
2503
|
+
const value = buffalo.read(DataType.NO_DATA, {});
|
|
2504
|
+
expect(buffalo.getPosition()).toStrictEqual(1);
|
|
2505
|
+
expect(value).toStrictEqual(undefined);
|
|
2506
|
+
});
|
|
2507
|
+
|
|
2508
|
+
it("BuffaloZcl write UNKNOWN", () => {
|
|
2509
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(2));
|
|
2510
|
+
const payload = null;
|
|
2511
|
+
buffalo.write(DataType.UNKNOWN, payload, {});
|
|
2512
|
+
expect(buffalo.getPosition()).toStrictEqual(0);
|
|
2513
|
+
expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00]));
|
|
2514
|
+
});
|
|
2515
|
+
|
|
2516
|
+
it("BuffaloZcl read UNKNOWN", () => {
|
|
2517
|
+
const buffalo = new BuffaloZcl(Buffer.from([0x00, 0x00]), 1);
|
|
2518
|
+
const value = buffalo.read(DataType.UNKNOWN, {});
|
|
2519
|
+
expect(buffalo.getPosition()).toStrictEqual(1);
|
|
2520
|
+
expect(value).toStrictEqual(undefined);
|
|
2521
|
+
});
|
|
2522
|
+
|
|
2523
|
+
it("ZclHeader return undefined when too short", () => {
|
|
2524
|
+
const header = Zcl.Header.fromBuffer(Buffer.from([0, 8]));
|
|
2525
|
+
expect(header).toStrictEqual(undefined);
|
|
2526
|
+
});
|
|
2527
|
+
|
|
2528
|
+
it("ZclHeader return undefined when too short manufacturer specific", () => {
|
|
2529
|
+
const header = Zcl.Header.fromBuffer(Buffer.from([4, 8, 3]));
|
|
2530
|
+
expect(header).toStrictEqual(undefined);
|
|
2531
|
+
});
|
|
2532
|
+
|
|
2533
|
+
describe("BuffaloZcl write passthrough to Buffalo", () => {
|
|
2534
|
+
let buffalo: BuffaloZcl;
|
|
2535
|
+
|
|
2536
|
+
beforeEach(() => {
|
|
2537
|
+
buffalo = new BuffaloZcl(Buffer.alloc(255));
|
|
2538
|
+
});
|
|
2539
|
+
|
|
2540
|
+
it("uint8", () => {
|
|
2541
|
+
const uint8Spy = vi.spyOn(buffalo, "writeUInt8");
|
|
2542
|
+
const types = [DataType.DATA8, DataType.BOOLEAN, DataType.BITMAP8, DataType.UINT8, DataType.ENUM8];
|
|
2543
|
+
let i = 0;
|
|
2544
|
+
|
|
2545
|
+
for (const type of types) {
|
|
2546
|
+
buffalo.write(type, 1, {});
|
|
2547
|
+
expect(uint8Spy).toHaveBeenCalledTimes(++i);
|
|
2548
|
+
}
|
|
2549
|
+
});
|
|
2550
|
+
|
|
2551
|
+
it("uint16", () => {
|
|
2552
|
+
const uint16Spy = vi.spyOn(buffalo, "writeUInt16");
|
|
2553
|
+
const types = [DataType.DATA16, DataType.BITMAP16, DataType.UINT16, DataType.ENUM16, DataType.CLUSTER_ID, DataType.ATTR_ID];
|
|
2554
|
+
let i = 0;
|
|
2555
|
+
|
|
2556
|
+
for (const type of types) {
|
|
2557
|
+
buffalo.write(type, 1, {});
|
|
2558
|
+
expect(uint16Spy).toHaveBeenCalledTimes(++i);
|
|
2559
|
+
}
|
|
2560
|
+
});
|
|
2561
|
+
|
|
2562
|
+
it("uint24", () => {
|
|
2563
|
+
const uint24Spy = vi.spyOn(buffalo, "writeUInt24");
|
|
2564
|
+
const types = [DataType.DATA24, DataType.BITMAP24, DataType.UINT24];
|
|
2565
|
+
let i = 0;
|
|
2566
|
+
|
|
2567
|
+
for (const type of types) {
|
|
2568
|
+
buffalo.write(type, 1, {});
|
|
2569
|
+
expect(uint24Spy).toHaveBeenCalledTimes(++i);
|
|
2570
|
+
}
|
|
2571
|
+
});
|
|
2572
|
+
|
|
2573
|
+
it("uint32", () => {
|
|
2574
|
+
const uint32Spy = vi.spyOn(buffalo, "writeUInt32");
|
|
2575
|
+
const types = [DataType.DATA32, DataType.BITMAP32, DataType.UINT32, DataType.UTC, DataType.BAC_OID];
|
|
2576
|
+
let i = 0;
|
|
2577
|
+
|
|
2578
|
+
for (const type of types) {
|
|
2579
|
+
buffalo.write(type, 1, {});
|
|
2580
|
+
expect(uint32Spy).toHaveBeenCalledTimes(++i);
|
|
2581
|
+
}
|
|
2582
|
+
});
|
|
2583
|
+
|
|
2584
|
+
it("int8", () => {
|
|
2585
|
+
const int8Spy = vi.spyOn(buffalo, "writeInt8");
|
|
2586
|
+
buffalo.write(DataType.INT8, 1, {});
|
|
2587
|
+
expect(int8Spy).toHaveBeenCalledTimes(1);
|
|
2588
|
+
});
|
|
2589
|
+
|
|
2590
|
+
it("int16", () => {
|
|
2591
|
+
const int16Spy = vi.spyOn(buffalo, "writeInt16");
|
|
2592
|
+
buffalo.write(DataType.INT16, 1, {});
|
|
2593
|
+
expect(int16Spy).toHaveBeenCalledTimes(1);
|
|
2594
|
+
});
|
|
2595
|
+
|
|
2596
|
+
it("int24", () => {
|
|
2597
|
+
const int24Spy = vi.spyOn(buffalo, "writeInt24");
|
|
2598
|
+
buffalo.write(DataType.INT24, 1, {});
|
|
2599
|
+
expect(int24Spy).toHaveBeenCalledTimes(1);
|
|
2600
|
+
});
|
|
2601
|
+
|
|
2602
|
+
it("int32", () => {
|
|
2603
|
+
const int32Spy = vi.spyOn(buffalo, "writeInt32");
|
|
2604
|
+
buffalo.write(DataType.INT32, 1, {});
|
|
2605
|
+
expect(int32Spy).toHaveBeenCalledTimes(1);
|
|
2606
|
+
});
|
|
2607
|
+
|
|
2608
|
+
it("int48", () => {
|
|
2609
|
+
const int48Spy = vi.spyOn(buffalo, "writeInt48");
|
|
2610
|
+
buffalo.write(DataType.INT48, 1, {});
|
|
2611
|
+
expect(int48Spy).toHaveBeenCalledTimes(1);
|
|
2612
|
+
});
|
|
2613
|
+
|
|
2614
|
+
it("list uint8", () => {
|
|
2615
|
+
const listuint8Spy = vi.spyOn(buffalo, "writeListUInt8");
|
|
2616
|
+
buffalo.write(BuffaloZclDataType.LIST_UINT8, [1], {});
|
|
2617
|
+
expect(listuint8Spy).toHaveBeenCalledTimes(1);
|
|
2618
|
+
});
|
|
2619
|
+
|
|
2620
|
+
it("list uint16", () => {
|
|
2621
|
+
const listuint16Spy = vi.spyOn(buffalo, "writeListUInt16");
|
|
2622
|
+
buffalo.write(BuffaloZclDataType.LIST_UINT16, [1], {});
|
|
2623
|
+
expect(listuint16Spy).toHaveBeenCalledTimes(1);
|
|
2624
|
+
});
|
|
2625
|
+
|
|
2626
|
+
it("list uint24", () => {
|
|
2627
|
+
const listuint24Spy = vi.spyOn(buffalo, "writeListUInt24");
|
|
2628
|
+
buffalo.write(BuffaloZclDataType.LIST_UINT24, [1], {});
|
|
2629
|
+
expect(listuint24Spy).toHaveBeenCalledTimes(1);
|
|
2630
|
+
});
|
|
2631
|
+
|
|
2632
|
+
it("list uint32", () => {
|
|
2633
|
+
const listuint32Spy = vi.spyOn(buffalo, "writeListUInt32");
|
|
2634
|
+
buffalo.write(BuffaloZclDataType.LIST_UINT32, [1], {});
|
|
2635
|
+
expect(listuint32Spy).toHaveBeenCalledTimes(1);
|
|
2636
|
+
});
|
|
2637
|
+
|
|
2638
|
+
// NOT SUPPORTED
|
|
2639
|
+
// it('semi prec', () => {
|
|
2640
|
+
// const semiPrecSpy = vi.spyOn(buffalo, 'writeSemiFloatLE');
|
|
2641
|
+
// buffalo.write(DataType.SEMI_PREC, 1, {});
|
|
2642
|
+
// expect(semiPrecSpy).toHaveBeenCalledTimes(1);
|
|
2643
|
+
// });
|
|
2644
|
+
|
|
2645
|
+
it("single prec", () => {
|
|
2646
|
+
const singlePrecSpy = vi.spyOn(buffalo, "writeFloatLE");
|
|
2647
|
+
buffalo.write(DataType.SINGLE_PREC, 1.1, {});
|
|
2648
|
+
expect(singlePrecSpy).toHaveBeenCalledTimes(1);
|
|
2649
|
+
});
|
|
2650
|
+
|
|
2651
|
+
it("double prec", () => {
|
|
2652
|
+
const doublePrecSpy = vi.spyOn(buffalo, "writeDoubleLE");
|
|
2653
|
+
buffalo.write(DataType.DOUBLE_PREC, 1.1, {});
|
|
2654
|
+
expect(doublePrecSpy).toHaveBeenCalledTimes(1);
|
|
2655
|
+
});
|
|
2656
|
+
|
|
2657
|
+
it("ieee add", () => {
|
|
2658
|
+
const doublePrecSpy = vi.spyOn(buffalo, "writeIeeeAddr");
|
|
2659
|
+
buffalo.write(DataType.IEEE_ADDR, "0xf1f1f1f1f1f1f1f1", {});
|
|
2660
|
+
expect(doublePrecSpy).toHaveBeenCalledTimes(1);
|
|
2661
|
+
});
|
|
2662
|
+
});
|
|
2663
|
+
|
|
2664
|
+
describe("BuffaloZcl read passthrough to Buffalo", () => {
|
|
2665
|
+
let buffalo: BuffaloZcl;
|
|
2666
|
+
|
|
2667
|
+
beforeEach(() => {
|
|
2668
|
+
buffalo = new BuffaloZcl(Buffer.alloc(255));
|
|
2669
|
+
});
|
|
2670
|
+
|
|
2671
|
+
it("uint8", () => {
|
|
2672
|
+
const uint8Spy = vi.spyOn(buffalo, "readUInt8");
|
|
2673
|
+
const types = [DataType.DATA8, DataType.BOOLEAN, DataType.BITMAP8, DataType.UINT8, DataType.ENUM8];
|
|
2674
|
+
let i = 0;
|
|
2675
|
+
|
|
2676
|
+
for (const type of types) {
|
|
2677
|
+
buffalo.read(type, {});
|
|
2678
|
+
expect(uint8Spy).toHaveBeenCalledTimes(++i);
|
|
2679
|
+
}
|
|
2680
|
+
});
|
|
2681
|
+
|
|
2682
|
+
it("uint16", () => {
|
|
2683
|
+
const uint16Spy = vi.spyOn(buffalo, "readUInt16");
|
|
2684
|
+
const types = [DataType.DATA16, DataType.BITMAP16, DataType.UINT16, DataType.ENUM16, DataType.CLUSTER_ID, DataType.ATTR_ID];
|
|
2685
|
+
let i = 0;
|
|
2686
|
+
|
|
2687
|
+
for (const type of types) {
|
|
2688
|
+
buffalo.read(type, {});
|
|
2689
|
+
expect(uint16Spy).toHaveBeenCalledTimes(++i);
|
|
2690
|
+
}
|
|
2691
|
+
});
|
|
2692
|
+
|
|
2693
|
+
it("uint24", () => {
|
|
2694
|
+
const uint24Spy = vi.spyOn(buffalo, "readUInt24");
|
|
2695
|
+
const types = [DataType.DATA24, DataType.BITMAP24, DataType.UINT24];
|
|
2696
|
+
let i = 0;
|
|
2697
|
+
|
|
2698
|
+
for (const type of types) {
|
|
2699
|
+
buffalo.read(type, {});
|
|
2700
|
+
expect(uint24Spy).toHaveBeenCalledTimes(++i);
|
|
2701
|
+
}
|
|
2702
|
+
});
|
|
2703
|
+
|
|
2704
|
+
it("uint32", () => {
|
|
2705
|
+
const uint32Spy = vi.spyOn(buffalo, "readUInt32");
|
|
2706
|
+
const types = [DataType.DATA32, DataType.BITMAP32, DataType.UINT32, DataType.UTC, DataType.BAC_OID];
|
|
2707
|
+
let i = 0;
|
|
2708
|
+
|
|
2709
|
+
for (const type of types) {
|
|
2710
|
+
buffalo.read(type, {});
|
|
2711
|
+
expect(uint32Spy).toHaveBeenCalledTimes(++i);
|
|
2712
|
+
}
|
|
2713
|
+
});
|
|
2714
|
+
|
|
2715
|
+
it("int8", () => {
|
|
2716
|
+
const int8Spy = vi.spyOn(buffalo, "readInt8");
|
|
2717
|
+
buffalo.read(DataType.INT8, {});
|
|
2718
|
+
expect(int8Spy).toHaveBeenCalledTimes(1);
|
|
2719
|
+
});
|
|
2720
|
+
|
|
2721
|
+
it("int16", () => {
|
|
2722
|
+
const int16Spy = vi.spyOn(buffalo, "readInt16");
|
|
2723
|
+
buffalo.read(DataType.INT16, {});
|
|
2724
|
+
expect(int16Spy).toHaveBeenCalledTimes(1);
|
|
2725
|
+
});
|
|
2726
|
+
|
|
2727
|
+
it("int24", () => {
|
|
2728
|
+
const int24Spy = vi.spyOn(buffalo, "readInt24");
|
|
2729
|
+
buffalo.read(DataType.INT24, {});
|
|
2730
|
+
expect(int24Spy).toHaveBeenCalledTimes(1);
|
|
2731
|
+
});
|
|
2732
|
+
|
|
2733
|
+
it("int32", () => {
|
|
2734
|
+
const int32Spy = vi.spyOn(buffalo, "readInt32");
|
|
2735
|
+
buffalo.read(DataType.INT32, {});
|
|
2736
|
+
expect(int32Spy).toHaveBeenCalledTimes(1);
|
|
2737
|
+
});
|
|
2738
|
+
|
|
2739
|
+
it("int48", () => {
|
|
2740
|
+
const int48Spy = vi.spyOn(buffalo, "readInt48");
|
|
2741
|
+
buffalo.read(DataType.INT48, {});
|
|
2742
|
+
expect(int48Spy).toHaveBeenCalledTimes(1);
|
|
2743
|
+
});
|
|
2744
|
+
|
|
2745
|
+
it("list uint8", () => {
|
|
2746
|
+
const listuint8Spy = vi.spyOn(buffalo, "readListUInt8");
|
|
2747
|
+
buffalo.read(BuffaloZclDataType.LIST_UINT8, {length: 1});
|
|
2748
|
+
expect(listuint8Spy).toHaveBeenCalledTimes(1);
|
|
2749
|
+
});
|
|
2750
|
+
|
|
2751
|
+
it("list uint16", () => {
|
|
2752
|
+
const listuint16Spy = vi.spyOn(buffalo, "readListUInt16");
|
|
2753
|
+
buffalo.read(BuffaloZclDataType.LIST_UINT16, {length: 1});
|
|
2754
|
+
expect(listuint16Spy).toHaveBeenCalledTimes(1);
|
|
2755
|
+
});
|
|
2756
|
+
|
|
2757
|
+
it("list uint24", () => {
|
|
2758
|
+
const listuint24Spy = vi.spyOn(buffalo, "readListUInt24");
|
|
2759
|
+
buffalo.read(BuffaloZclDataType.LIST_UINT24, {length: 1});
|
|
2760
|
+
expect(listuint24Spy).toHaveBeenCalledTimes(1);
|
|
2761
|
+
});
|
|
2762
|
+
|
|
2763
|
+
it("list uint32", () => {
|
|
2764
|
+
const listuint32Spy = vi.spyOn(buffalo, "readListUInt32");
|
|
2765
|
+
buffalo.read(BuffaloZclDataType.LIST_UINT32, {length: 1});
|
|
2766
|
+
expect(listuint32Spy).toHaveBeenCalledTimes(1);
|
|
2767
|
+
});
|
|
2768
|
+
|
|
2769
|
+
// NOT SUPPORTED
|
|
2770
|
+
// it('semi prec', () => {
|
|
2771
|
+
// const semiPrecSpy = vi.spyOn(buffalo, 'readSemiFloatLE');
|
|
2772
|
+
// buffalo.read(DataType.SEMI_PREC, {});
|
|
2773
|
+
// expect(semiPrecSpy).toHaveBeenCalledTimes(1);
|
|
2774
|
+
// });
|
|
2775
|
+
|
|
2776
|
+
it("single prec", () => {
|
|
2777
|
+
const singlePrecSpy = vi.spyOn(buffalo, "readFloatLE");
|
|
2778
|
+
buffalo.read(DataType.SINGLE_PREC, {});
|
|
2779
|
+
expect(singlePrecSpy).toHaveBeenCalledTimes(1);
|
|
2780
|
+
});
|
|
2781
|
+
|
|
2782
|
+
it("double prec", () => {
|
|
2783
|
+
const doublePrecSpy = vi.spyOn(buffalo, "readDoubleLE");
|
|
2784
|
+
buffalo.read(DataType.DOUBLE_PREC, {});
|
|
2785
|
+
expect(doublePrecSpy).toHaveBeenCalledTimes(1);
|
|
2786
|
+
});
|
|
2787
|
+
|
|
2788
|
+
it("ieee add", () => {
|
|
2789
|
+
const doublePrecSpy = vi.spyOn(buffalo, "readIeeeAddr");
|
|
2790
|
+
buffalo.read(DataType.IEEE_ADDR, {});
|
|
2791
|
+
expect(doublePrecSpy).toHaveBeenCalledTimes(1);
|
|
2792
|
+
});
|
|
2793
|
+
});
|
|
2794
|
+
|
|
2795
|
+
it.each([
|
|
2796
|
+
BuffaloZclDataType.LIST_UINT8,
|
|
2797
|
+
BuffaloZclDataType.LIST_UINT16,
|
|
2798
|
+
BuffaloZclDataType.LIST_UINT24,
|
|
2799
|
+
BuffaloZclDataType.LIST_UINT32,
|
|
2800
|
+
BuffaloZclDataType.LIST_ZONEINFO,
|
|
2801
|
+
])("Throws when read is missing required length option - param %s", (type) => {
|
|
2802
|
+
expect(() => {
|
|
2803
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2804
|
+
buffalo.read(type, {});
|
|
2805
|
+
}).toThrow(`Cannot read ${BuffaloZclDataType[type]} without length option specified`);
|
|
2806
|
+
});
|
|
2807
|
+
|
|
2808
|
+
it("Reads as buffer when USE_DATA_TYPE is missing dataType option", () => {
|
|
2809
|
+
const buffalo = new BuffaloZcl(Buffer.from([12, 34]));
|
|
2810
|
+
const value = buffalo.read(BuffaloZclDataType.USE_DATA_TYPE, {});
|
|
2811
|
+
expect(value).toStrictEqual(Buffer.from([12, 34]));
|
|
2812
|
+
buffalo.setPosition(1);
|
|
2813
|
+
const value2 = buffalo.read(BuffaloZclDataType.USE_DATA_TYPE, {length: 1});
|
|
2814
|
+
expect(value2).toStrictEqual(Buffer.from([34]));
|
|
2815
|
+
});
|
|
2816
|
+
|
|
2817
|
+
it("Writes as buffer when USE_DATA_TYPE is missing dataType option", () => {
|
|
2818
|
+
const payload = Buffer.from([12, 34]);
|
|
2819
|
+
const buffer = Buffer.alloc(2);
|
|
2820
|
+
const buffalo = new BuffaloZcl(buffer);
|
|
2821
|
+
buffalo.write(BuffaloZclDataType.USE_DATA_TYPE, payload, {});
|
|
2822
|
+
expect(buffer).toStrictEqual(payload);
|
|
2823
|
+
});
|
|
2824
|
+
|
|
2825
|
+
it("Throws when write USE_DATA_TYPE is missing dataType option and value isnt buffer or number array", () => {
|
|
2826
|
+
expect(() => {
|
|
2827
|
+
const payload = "abcd";
|
|
2828
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(2));
|
|
2829
|
+
buffalo.write(BuffaloZclDataType.USE_DATA_TYPE, payload, {});
|
|
2830
|
+
}).toThrow("Cannot write USE_DATA_TYPE without dataType option specified");
|
|
2831
|
+
});
|
|
2832
|
+
|
|
2833
|
+
it("Throws when read GPD_FRAME is missing payload.payloadSize option", () => {
|
|
2834
|
+
expect(() => {
|
|
2835
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2836
|
+
buffalo.read(BuffaloZclDataType.GPD_FRAME, {payload: {commandID: 0xa1}});
|
|
2837
|
+
}).toThrow("Cannot read GPD_FRAME without required payload options specified");
|
|
2838
|
+
});
|
|
2839
|
+
|
|
2840
|
+
it("Throws when read LIST_THERMO_TRANSITIONS is missing required payload options", () => {
|
|
2841
|
+
expect(() => {
|
|
2842
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2843
|
+
buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {});
|
|
2844
|
+
}).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
|
|
2845
|
+
expect(() => {
|
|
2846
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2847
|
+
buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {}});
|
|
2848
|
+
}).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
|
|
2849
|
+
expect(() => {
|
|
2850
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2851
|
+
buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {mode: 1}});
|
|
2852
|
+
}).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
|
|
2853
|
+
expect(() => {
|
|
2854
|
+
const buffalo = new BuffaloZcl(Buffer.alloc(1));
|
|
2855
|
+
buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {numoftrans: 1}});
|
|
2856
|
+
}).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
|
|
2857
|
+
});
|
|
2858
|
+
});
|