@willieee802/zigbee-herdsman 0.48.3 → 0.49.1
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 +1283 -0
- package/README.md +1 -1
- package/biome.json +103 -0
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/adapter/adapterDiscovery.d.ts.map +1 -0
- package/dist/adapter/const.d.ts.map +1 -0
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -1
- package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
- package/dist/adapter/ember/utils/initters.d.ts.map +1 -1
- package/dist/adapter/events.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/index.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -1
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
- package/dist/adapter/z-stack/models/startup-options.d.ts.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -0
- package/dist/adapter/zboss/driver.d.ts.map +1 -0
- package/dist/adapter/zboss/frame.d.ts.map +1 -0
- package/dist/adapter/zboss/frame.js +200 -0
- package/dist/adapter/zboss/frame.js.map +1 -0
- package/dist/adapter/zboss/uart.d.ts.map +1 -0
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.js +70 -62
- package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
- package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
- package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -0
- package/dist/controller/controller.d.ts.map +1 -1
- package/dist/controller/controller.js +524 -350
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/database.d.ts.map +1 -1
- package/dist/controller/events.d.ts.map +1 -1
- package/dist/controller/events.js +0 -110
- package/dist/controller/events.js.map +1 -1
- package/dist/controller/greenPower.d.ts.map +1 -1
- package/dist/controller/greenPower.js +330 -121
- package/dist/controller/greenPower.js.map +1 -1
- package/dist/controller/helpers/index.d.ts.map +1 -1
- package/dist/controller/helpers/ota.d.ts.map +1 -0
- package/dist/controller/helpers/ota.js +467 -0
- package/dist/controller/helpers/ota.js.map +1 -0
- package/dist/controller/helpers/request.d.ts.map +1 -1
- package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.js +36 -22
- package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
- package/dist/controller/index.d.ts.map +1 -1
- package/dist/controller/model/device.d.ts.map +1 -1
- package/dist/controller/model/device.js +1052 -402
- package/dist/controller/model/device.js.map +1 -1
- package/dist/controller/model/endpoint.d.ts.map +1 -1
- package/dist/controller/model/endpoint.js +447 -292
- package/dist/controller/model/endpoint.js.map +1 -1
- package/dist/controller/model/entity.d.ts.map +1 -1
- package/dist/controller/model/group.d.ts.map +1 -1
- package/dist/controller/model/group.js +202 -85
- package/dist/controller/model/group.js.map +1 -1
- package/dist/controller/model/index.d.ts.map +1 -1
- package/dist/controller/model/zigbeeEntity.d.ts.map +1 -0
- package/dist/controller/touchlink.d.ts.map +1 -1
- package/dist/controller/tstype.d.ts.map +1 -1
- package/dist/controller/tstype.js +0 -6
- package/dist/controller/tstype.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/utils/timeService.d.ts.map +1 -0
- package/dist/utils/timeService.js +127 -0
- package/dist/utils/timeService.js.map +1 -0
- package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -1
- package/dist/zspec/zcl/buffaloZcl.js +327 -287
- package/dist/zspec/zcl/buffaloZcl.js.map +1 -1
- package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/cluster.js +6050 -4043
- package/dist/zspec/zcl/definition/cluster.js.map +1 -1
- package/dist/zspec/zcl/definition/clusters-types.d.ts +8135 -0
- package/dist/zspec/zcl/definition/clusters-types.d.ts.map +1 -0
- package/dist/zspec/zcl/definition/clusters-types.js +3 -0
- package/dist/zspec/zcl/definition/clusters-types.js.map +1 -0
- package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/foundation.js +170 -99
- package/dist/zspec/zcl/definition/foundation.js.map +1 -1
- package/dist/zspec/zcl/definition/tstype.d.ts +190 -31
- package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/tstype.js +0 -1
- package/dist/zspec/zcl/definition/tstype.js.map +1 -1
- package/dist/zspec/zcl/index.d.ts.map +1 -1
- package/dist/zspec/zcl/index.js +23 -13
- package/dist/zspec/zcl/index.js.map +1 -1
- package/dist/zspec/zcl/utils.d.ts.map +1 -1
- package/dist/zspec/zcl/utils.js +288 -103
- package/dist/zspec/zcl/utils.js.map +1 -1
- package/dist/zspec/zcl/zclFrame.d.ts.map +1 -1
- package/dist/zspec/zcl/zclFrame.js +121 -97
- package/dist/zspec/zcl/zclFrame.js.map +1 -1
- package/dist/zspec/zcl/zclHeader.d.ts.map +1 -1
- package/dist/zspec/zcl/zclHeader.js +13 -13
- package/dist/zspec/zcl/zclHeader.js.map +1 -1
- package/examples/join-and-log.js +18 -18
- package/package.json +23 -3
- 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 +578 -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 +7554 -0
- package/src/zspec/zcl/definition/clusters-types.ts +8228 -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 +432 -0
- package/src/zspec/zcl/index.ts +11 -0
- package/src/zspec/zcl/utils.ts +504 -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 +10038 -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 +2887 -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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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/database.d.ts +0 -20
- 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/greenPower.d.ts +0 -14
- package/dist/controller/helpers/index.d.ts +0 -3
- 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.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.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/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.js +0 -9
- package/dist/controller/index.js.map +0 -1
- package/dist/controller/model/device.d.ts +0 -140
- package/dist/controller/model/endpoint.d.ts +0 -134
- package/dist/controller/model/entity.d.ts +0 -15
- 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/index.d.ts +0 -6
- 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.js +0 -157
- package/dist/controller/touchlink.js.map +0 -1
- package/dist/controller/tstype.d.ts +0 -21
- package/dist/index.d.ts +0 -6
- 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/definition/cluster.d.ts +0 -3
- 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/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/index.d.ts +0 -11
- package/dist/zspec/zcl/utils.d.ts +0 -7
- package/dist/zspec/zcl/zclFrame.d.ts +0 -36
- package/dist/zspec/zcl/zclHeader.d.ts +0 -17
- 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
|
@@ -15,40 +15,50 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
28
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
|
|
39
|
+
exports.Endpoint = void 0;
|
|
40
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
41
|
+
const logger_1 = require("../../utils/logger");
|
|
42
|
+
const ZSpec = __importStar(require("../../zspec"));
|
|
43
|
+
const enums_1 = require("../../zspec/enums");
|
|
30
44
|
const Zcl = __importStar(require("../../zspec/zcl"));
|
|
31
|
-
const
|
|
32
|
-
const ZclFrameConverter = __importStar(require("../helpers/zclFrameConverter"));
|
|
45
|
+
const Zdo = __importStar(require("../../zspec/zdo"));
|
|
33
46
|
const request_1 = __importDefault(require("../helpers/request"));
|
|
34
47
|
const requestQueue_1 = __importDefault(require("../helpers/requestQueue"));
|
|
35
|
-
const
|
|
48
|
+
const ZclFrameConverter = __importStar(require("../helpers/zclFrameConverter"));
|
|
49
|
+
const zclTransactionSequenceNumber_1 = __importDefault(require("../helpers/zclTransactionSequenceNumber"));
|
|
36
50
|
const device_1 = __importDefault(require("./device"));
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
};
|
|
43
|
-
const logger_1 = require("../../utils/logger");
|
|
44
|
-
const enums_1 = require("../../zspec/enums");
|
|
45
|
-
const NS = 'zh:controller:endpoint';
|
|
46
|
-
class Endpoint extends entity_1.default {
|
|
51
|
+
const entity_1 = __importDefault(require("./entity"));
|
|
52
|
+
const group_1 = __importDefault(require("./group"));
|
|
53
|
+
const zigbeeEntity_1 = require("./zigbeeEntity");
|
|
54
|
+
const NS = "zh:controller:endpoint";
|
|
55
|
+
class Endpoint extends zigbeeEntity_1.ZigbeeEntity {
|
|
47
56
|
databaseID;
|
|
48
57
|
deviceID;
|
|
49
58
|
inputClusters;
|
|
50
59
|
outputClusters;
|
|
51
60
|
profileID;
|
|
61
|
+
// biome-ignore lint/style/useNamingConvention: cross-repo impact
|
|
52
62
|
ID;
|
|
53
63
|
clusters;
|
|
54
64
|
deviceIeeeAddress;
|
|
@@ -59,41 +69,28 @@ class Endpoint extends entity_1.default {
|
|
|
59
69
|
pendingRequests;
|
|
60
70
|
// Getters/setters
|
|
61
71
|
get binds() {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
target = device.getEndpoint(entry.endpointID);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
target = group_1.default.byGroupID(entry.groupID, this.databaseID);
|
|
73
|
-
}
|
|
72
|
+
const binds = [];
|
|
73
|
+
for (const bind of this._binds) {
|
|
74
|
+
// XXX: properties assumed valid when associated to `type`
|
|
75
|
+
const target =
|
|
76
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
77
|
+
bind.type === "endpoint" ? device_1.default.byIeeeAddr(this.databaseID, bind.deviceIeeeAddress)?.getEndpoint(bind.endpointID) : group_1.default.byGroupID(bind.groupID, this.databaseID);
|
|
74
78
|
if (target) {
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
return undefined;
|
|
79
|
+
binds.push({ target, cluster: this.getCluster(bind.cluster) });
|
|
79
80
|
}
|
|
80
|
-
}
|
|
81
|
+
}
|
|
82
|
+
return binds;
|
|
81
83
|
}
|
|
82
84
|
get configuredReportings() {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
name: undefined,
|
|
93
|
-
type: undefined,
|
|
94
|
-
manufacturerCode: undefined,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
85
|
+
const device = this.getDevice();
|
|
86
|
+
return this._configuredReportings.map((entry, index) => {
|
|
87
|
+
const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode, device.customClusters);
|
|
88
|
+
const attribute = cluster.getAttribute(entry.attrId) ?? {
|
|
89
|
+
ID: entry.attrId,
|
|
90
|
+
name: `attr${index}`,
|
|
91
|
+
type: Zcl.DataType.UNKNOWN,
|
|
92
|
+
manufacturerCode: undefined,
|
|
93
|
+
};
|
|
97
94
|
return {
|
|
98
95
|
cluster,
|
|
99
96
|
attribute,
|
|
@@ -103,10 +100,10 @@ class Endpoint extends entity_1.default {
|
|
|
103
100
|
};
|
|
104
101
|
});
|
|
105
102
|
}
|
|
106
|
-
constructor(databaseID,
|
|
103
|
+
constructor(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, clusters, binds, configuredReportings, meta) {
|
|
107
104
|
super();
|
|
108
105
|
this.databaseID = databaseID;
|
|
109
|
-
this.ID =
|
|
106
|
+
this.ID = id;
|
|
110
107
|
this.profileID = profileID;
|
|
111
108
|
this.deviceID = deviceID;
|
|
112
109
|
this.inputClusters = inputClusters;
|
|
@@ -120,10 +117,17 @@ class Endpoint extends entity_1.default {
|
|
|
120
117
|
this.pendingRequests = new requestQueue_1.default(this);
|
|
121
118
|
}
|
|
122
119
|
/**
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
* Get device of this endpoint
|
|
121
|
+
*/
|
|
125
122
|
getDevice() {
|
|
126
|
-
|
|
123
|
+
const device = device_1.default.byIeeeAddr(this.databaseID, this.deviceIeeeAddress);
|
|
124
|
+
if (!device) {
|
|
125
|
+
logger_1.logger.error(`Tried to get unknown/deleted device ${this.deviceIeeeAddress} from endpoint ${this.ID}.`, NS);
|
|
126
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
127
|
+
logger_1.logger.debug(new Error().stack, NS);
|
|
128
|
+
}
|
|
129
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
130
|
+
return device;
|
|
127
131
|
}
|
|
128
132
|
/**
|
|
129
133
|
* @param {number|string} clusterKey
|
|
@@ -157,18 +161,32 @@ class Endpoint extends entity_1.default {
|
|
|
157
161
|
return clusterNumbers.map((c) => this.getCluster(c));
|
|
158
162
|
}
|
|
159
163
|
/*
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
* CRUD
|
|
165
|
+
*/
|
|
162
166
|
static fromDatabaseRecord(record, deviceNetworkAddress, deviceIeeeAddress, databaseID) {
|
|
163
167
|
// Migrate attrs to attributes
|
|
164
|
-
for (const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
for (const entryKey in record.clusters) {
|
|
169
|
+
const entry = record.clusters[entryKey];
|
|
170
|
+
if (entry.attrs != null) {
|
|
171
|
+
entry.attributes = entry.attrs;
|
|
172
|
+
delete entry.attrs;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Migrate cluster renames from https://github.com/Koenkk/zigbee-herdsman/pull/1503 @deprecated 3.0
|
|
176
|
+
/* v8 ignore start */
|
|
177
|
+
if (record.clusters.piRetailTunnel) {
|
|
178
|
+
record.clusters.retailTunnel = record.clusters.piRetailTunnel;
|
|
179
|
+
delete record.clusters.piRetailTunnel;
|
|
171
180
|
}
|
|
181
|
+
if (record.clusters.tunneling) {
|
|
182
|
+
record.clusters.seTunneling = record.clusters.tunneling;
|
|
183
|
+
delete record.clusters.tunneling;
|
|
184
|
+
}
|
|
185
|
+
if (record.clusters.haMeterIdentification) {
|
|
186
|
+
record.clusters.seMeterIdentification = record.clusters.haMeterIdentification;
|
|
187
|
+
delete record.clusters.haMeterIdentification;
|
|
188
|
+
}
|
|
189
|
+
/* v8 ignore stop */
|
|
172
190
|
return new Endpoint(databaseID, record.epId, record.profId, record.devId, record.inClusterList, record.outClusterList, deviceNetworkAddress, deviceIeeeAddress, record.clusters, record.binds || [], record.configuredReportings || [], record.meta || {});
|
|
173
191
|
}
|
|
174
192
|
toDatabaseRecord() {
|
|
@@ -184,130 +202,173 @@ class Endpoint extends entity_1.default {
|
|
|
184
202
|
meta: this.meta,
|
|
185
203
|
};
|
|
186
204
|
}
|
|
187
|
-
static create(databaseID,
|
|
188
|
-
return new Endpoint(databaseID,
|
|
205
|
+
static create(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress) {
|
|
206
|
+
return new Endpoint(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, {}, [], [], {});
|
|
189
207
|
}
|
|
190
208
|
saveClusterAttributeKeyValue(clusterKey, list) {
|
|
191
209
|
const cluster = this.getCluster(clusterKey);
|
|
192
|
-
if (!this.clusters[cluster.name])
|
|
210
|
+
if (!this.clusters[cluster.name]) {
|
|
193
211
|
this.clusters[cluster.name] = { attributes: {} };
|
|
194
|
-
|
|
195
|
-
|
|
212
|
+
}
|
|
213
|
+
for (const attribute in list) {
|
|
214
|
+
this.clusters[cluster.name].attributes[attribute] = list[attribute];
|
|
196
215
|
}
|
|
197
216
|
}
|
|
198
217
|
getClusterAttributeValue(clusterKey, attributeKey) {
|
|
199
218
|
const cluster = this.getCluster(clusterKey);
|
|
200
|
-
const attribute = cluster.getAttribute(attributeKey);
|
|
201
219
|
if (this.clusters[cluster.name] && this.clusters[cluster.name].attributes) {
|
|
202
|
-
|
|
220
|
+
// XXX: used to throw (behavior changed in #1455)
|
|
221
|
+
const attribute = cluster.getAttribute(attributeKey);
|
|
222
|
+
if (attribute) {
|
|
223
|
+
return this.clusters[cluster.name].attributes[attribute.name];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
saveClusterAttributeReportConfig(clusterId, manufacturerCode, reportConfigs) {
|
|
229
|
+
for (const entry of reportConfigs) {
|
|
230
|
+
if (entry.direction === Zcl.Direction.SERVER_TO_CLIENT) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const existingConfigIdx = this._configuredReportings.findIndex((r) => r.cluster === clusterId &&
|
|
234
|
+
r.attrId === entry.attrId &&
|
|
235
|
+
(manufacturerCode === undefined || manufacturerCode === r.manufacturerCode));
|
|
236
|
+
if (entry.status === Zcl.Status.SUCCESS) {
|
|
237
|
+
if (existingConfigIdx > -1) {
|
|
238
|
+
this._configuredReportings[existingConfigIdx].minRepIntval = entry.minRepIntval;
|
|
239
|
+
this._configuredReportings[existingConfigIdx].maxRepIntval = entry.maxRepIntval;
|
|
240
|
+
this._configuredReportings[existingConfigIdx].repChange = entry.repChange;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this._configuredReportings.push({
|
|
244
|
+
cluster: clusterId,
|
|
245
|
+
attrId: entry.attrId,
|
|
246
|
+
minRepIntval: entry.minRepIntval,
|
|
247
|
+
maxRepIntval: entry.maxRepIntval,
|
|
248
|
+
repChange: entry.repChange,
|
|
249
|
+
manufacturerCode,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
// UNSUPPORTED_ATTRIBUTE, UNREPORTABLE_ATTRIBUTE, NOT_FOUND
|
|
255
|
+
if (existingConfigIdx > -1) {
|
|
256
|
+
this._configuredReportings.splice(existingConfigIdx, 1);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
203
259
|
}
|
|
204
|
-
|
|
260
|
+
this.save();
|
|
261
|
+
}
|
|
262
|
+
saveBindings(binds) {
|
|
263
|
+
this._binds = binds;
|
|
264
|
+
this.save();
|
|
265
|
+
}
|
|
266
|
+
clearBindings() {
|
|
267
|
+
this._binds.length = 0;
|
|
268
|
+
this.save();
|
|
205
269
|
}
|
|
206
270
|
hasPendingRequests() {
|
|
207
271
|
return this.pendingRequests.size > 0;
|
|
208
272
|
}
|
|
209
273
|
async sendPendingRequests(fastPolling) {
|
|
210
|
-
return this.pendingRequests.send(fastPolling);
|
|
274
|
+
return await this.pendingRequests.send(fastPolling);
|
|
211
275
|
}
|
|
212
|
-
async sendRequest(frame, options, func = (
|
|
213
|
-
return entity_1.default.getAdapterByID(this.databaseID)
|
|
276
|
+
async sendRequest(frame, options, func = () => {
|
|
277
|
+
return entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, frame, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint, options.profileId);
|
|
214
278
|
}) {
|
|
215
279
|
const logPrefix = `Request Queue (${this.deviceIeeeAddress}/${this.ID}): `;
|
|
216
280
|
const device = this.getDevice();
|
|
217
281
|
const request = new request_1.default(func, frame, device.pendingRequestTimeout, options.sendPolicy);
|
|
218
|
-
if (request.sendPolicy !==
|
|
282
|
+
if (request.sendPolicy !== "bulk") {
|
|
219
283
|
// Check if such a request is already in the queue and remove the old one(s) if necessary
|
|
220
284
|
this.pendingRequests.filter(request);
|
|
221
285
|
}
|
|
222
286
|
// send without queueing if sendPolicy is 'immediate' or if the device has no timeout set
|
|
223
|
-
if (request.sendPolicy ===
|
|
287
|
+
if (request.sendPolicy === "immediate" || !device.pendingRequestTimeout) {
|
|
224
288
|
if (device.pendingRequestTimeout > 0) {
|
|
225
|
-
logger_1.logger.debug(logPrefix
|
|
289
|
+
logger_1.logger.debug(`${logPrefix}send ${frame.command.name} request immediately (sendPolicy=${options.sendPolicy})`, NS);
|
|
226
290
|
}
|
|
227
|
-
return request.send();
|
|
291
|
+
return await request.send();
|
|
228
292
|
}
|
|
229
293
|
// If this is a bulk message, we queue directly.
|
|
230
|
-
if (request.sendPolicy ===
|
|
231
|
-
logger_1.logger.debug(logPrefix
|
|
232
|
-
return this.pendingRequests.queue(request);
|
|
294
|
+
if (request.sendPolicy === "bulk") {
|
|
295
|
+
logger_1.logger.debug(`${logPrefix}queue request (${this.pendingRequests.size})`, NS);
|
|
296
|
+
return await this.pendingRequests.queue(request);
|
|
233
297
|
}
|
|
234
298
|
try {
|
|
235
|
-
logger_1.logger.debug(logPrefix
|
|
299
|
+
logger_1.logger.debug(`${logPrefix}send request`, NS);
|
|
236
300
|
return await request.send();
|
|
237
301
|
}
|
|
238
302
|
catch (error) {
|
|
239
303
|
// If we got a failed transaction, the device is likely sleeping.
|
|
240
304
|
// Queue for transmission later.
|
|
241
|
-
logger_1.logger.debug(logPrefix
|
|
242
|
-
return this.pendingRequests.queue(request);
|
|
305
|
+
logger_1.logger.debug(`${logPrefix}queue request (transaction failed) (${error})`, NS);
|
|
306
|
+
return await this.pendingRequests.queue(request);
|
|
243
307
|
}
|
|
244
308
|
}
|
|
245
309
|
/*
|
|
246
|
-
|
|
247
|
-
|
|
310
|
+
* Zigbee functions
|
|
311
|
+
*/
|
|
248
312
|
checkStatus(payload) {
|
|
249
|
-
const codes = Array.isArray(payload)
|
|
250
|
-
? payload.map((i) => i.status)
|
|
251
|
-
: [payload.statusCode];
|
|
313
|
+
const codes = Array.isArray(payload) ? payload.map((i) => i.status) : [payload.statusCode];
|
|
252
314
|
const invalid = codes.find((c) => c !== Zcl.Status.SUCCESS);
|
|
253
315
|
if (invalid)
|
|
254
316
|
throw new Zcl.StatusError(invalid);
|
|
255
317
|
}
|
|
256
318
|
async report(clusterKey, attributes, options) {
|
|
257
|
-
const cluster = this.getCluster(clusterKey);
|
|
319
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
258
320
|
const payload = [];
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
attrData: value,
|
|
265
|
-
dataType: attribute.type,
|
|
266
|
-
});
|
|
321
|
+
// TODO: handle `attr.report !== true`
|
|
322
|
+
for (const nameOrID in attributes) {
|
|
323
|
+
const attribute = cluster.getAttribute(nameOrID);
|
|
324
|
+
if (attribute) {
|
|
325
|
+
payload.push({ attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type });
|
|
267
326
|
}
|
|
268
|
-
else if (!isNaN(Number(nameOrID))) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
attrData: value.value,
|
|
272
|
-
dataType: value.type,
|
|
273
|
-
});
|
|
327
|
+
else if (!Number.isNaN(Number(nameOrID))) {
|
|
328
|
+
const value = attributes[nameOrID];
|
|
329
|
+
payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type });
|
|
274
330
|
}
|
|
275
331
|
else {
|
|
276
332
|
throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
|
|
277
333
|
}
|
|
278
334
|
}
|
|
279
|
-
await this.zclCommand(
|
|
335
|
+
await this.zclCommand(cluster, "report", payload, options, attributes);
|
|
280
336
|
}
|
|
281
337
|
async write(clusterKey, attributes, options) {
|
|
282
|
-
const cluster = this.getCluster(clusterKey);
|
|
283
|
-
|
|
284
|
-
|
|
338
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
339
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
340
|
+
optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, Object.keys(attributes), optionsWithDefaults.manufacturerCode, "write");
|
|
285
341
|
const payload = [];
|
|
286
|
-
for (const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
342
|
+
for (const nameOrID in attributes) {
|
|
343
|
+
const attribute = cluster.getAttribute(nameOrID);
|
|
344
|
+
if (attribute) {
|
|
345
|
+
// TODO: handle `attr.writeOptional !== true`
|
|
346
|
+
const attrData = Zcl.Utils.processAttributeWrite(attribute, attributes[nameOrID]);
|
|
347
|
+
payload.push({ attrId: attribute.ID, attrData, dataType: attribute.type });
|
|
290
348
|
}
|
|
291
|
-
else if (!isNaN(Number(nameOrID))) {
|
|
349
|
+
else if (!Number.isNaN(Number(nameOrID))) {
|
|
350
|
+
const value = attributes[nameOrID];
|
|
292
351
|
payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type });
|
|
293
352
|
}
|
|
294
353
|
else {
|
|
295
354
|
throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
|
|
296
355
|
}
|
|
297
356
|
}
|
|
298
|
-
await this.zclCommand(
|
|
357
|
+
await this.zclCommand(cluster, optionsWithDefaults.writeUndiv ? "writeUndiv" : "write", payload, optionsWithDefaults, attributes, true);
|
|
299
358
|
}
|
|
300
359
|
async writeResponse(clusterKey, transactionSequenceNumber, attributes, options) {
|
|
301
|
-
(0,
|
|
302
|
-
const cluster = this.getCluster(clusterKey);
|
|
360
|
+
(0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
|
|
361
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
303
362
|
const payload = [];
|
|
304
|
-
for (const
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
363
|
+
for (const nameOrID in attributes) {
|
|
364
|
+
// biome-ignore lint/style/noNonNullAssertion: from loop
|
|
365
|
+
const value = attributes[nameOrID];
|
|
366
|
+
if (value.status !== undefined) {
|
|
367
|
+
const attribute = cluster.getAttribute(nameOrID);
|
|
368
|
+
if (attribute) {
|
|
308
369
|
payload.push({ attrId: attribute.ID, status: value.status });
|
|
309
370
|
}
|
|
310
|
-
else if (!isNaN(Number(nameOrID))) {
|
|
371
|
+
else if (!Number.isNaN(Number(nameOrID))) {
|
|
311
372
|
payload.push({ attrId: Number(nameOrID), status: value.status });
|
|
312
373
|
}
|
|
313
374
|
else {
|
|
@@ -318,62 +379,90 @@ class Endpoint extends entity_1.default {
|
|
|
318
379
|
throw new Error(`Missing attribute 'status'`);
|
|
319
380
|
}
|
|
320
381
|
}
|
|
321
|
-
await this.zclCommand(
|
|
382
|
+
await this.zclCommand(cluster, "writeRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
|
|
322
383
|
}
|
|
384
|
+
// XXX: ideally, the return type should limit to the contents of the `attributes` param
|
|
323
385
|
async read(clusterKey, attributes, options) {
|
|
324
386
|
const device = this.getDevice();
|
|
325
|
-
const cluster = this.getCluster(clusterKey, device);
|
|
326
|
-
|
|
327
|
-
|
|
387
|
+
const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
|
|
388
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
389
|
+
optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, optionsWithDefaults.manufacturerCode, "read");
|
|
328
390
|
const payload = [];
|
|
391
|
+
// TODO: handle `attr.required !== true` => should not throw
|
|
329
392
|
for (const attribute of attributes) {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
393
|
+
if (typeof attribute === "number") {
|
|
394
|
+
payload.push({ attrId: attribute });
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
const attr = cluster.getAttribute(attribute);
|
|
398
|
+
if (attr) {
|
|
399
|
+
Zcl.Utils.processAttributePreRead(attr);
|
|
400
|
+
payload.push({ attrId: attr.ID });
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
logger_1.logger.warning(`Ignoring unknown attribute ${attribute} in cluster ${cluster.name}`, NS);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
335
406
|
}
|
|
407
|
+
// TODO: could be sending empty array payload
|
|
408
|
+
const resultFrame = await this.zclCommand(cluster, "read", payload, optionsWithDefaults, attributes, true);
|
|
409
|
+
return resultFrame
|
|
410
|
+
? ZclFrameConverter.attributeKeyValue(resultFrame, device.manufacturerID, device.customClusters)
|
|
411
|
+
: {};
|
|
336
412
|
}
|
|
337
413
|
async readResponse(clusterKey, transactionSequenceNumber, attributes, options) {
|
|
338
|
-
(0,
|
|
339
|
-
const cluster = this.getCluster(clusterKey);
|
|
414
|
+
(0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
|
|
415
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
340
416
|
const payload = [];
|
|
341
|
-
for (const
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
payload.push({
|
|
345
|
-
attrId: attribute.ID,
|
|
346
|
-
attrData: value,
|
|
347
|
-
dataType: attribute.type,
|
|
348
|
-
status: 0,
|
|
349
|
-
});
|
|
417
|
+
for (const nameOrID in attributes) {
|
|
418
|
+
const attribute = cluster.getAttribute(nameOrID);
|
|
419
|
+
if (attribute) {
|
|
420
|
+
payload.push({ attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type, status: 0 });
|
|
350
421
|
}
|
|
351
|
-
else if (!isNaN(Number(nameOrID))) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
attrData: value.value,
|
|
355
|
-
dataType: value.type,
|
|
356
|
-
status: 0,
|
|
357
|
-
});
|
|
422
|
+
else if (!Number.isNaN(Number(nameOrID))) {
|
|
423
|
+
const value = attributes[nameOrID];
|
|
424
|
+
payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type, status: 0 });
|
|
358
425
|
}
|
|
359
426
|
else {
|
|
360
427
|
throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
|
|
361
428
|
}
|
|
362
429
|
}
|
|
363
|
-
await this.zclCommand(
|
|
430
|
+
await this.zclCommand(cluster, "readRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
|
|
431
|
+
}
|
|
432
|
+
async updateSimpleDescriptor() {
|
|
433
|
+
const clusterId = Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST;
|
|
434
|
+
const adapter = entity_1.default.getAdapterByID(this.databaseID);
|
|
435
|
+
if (!adapter) {
|
|
436
|
+
throw new Error(`No adapter found for database ID ${this.databaseID}`);
|
|
437
|
+
}
|
|
438
|
+
const zdoPayload = Zdo.Buffalo.buildRequest(adapter.hasZdoMessageOverhead ?? false, clusterId, this.deviceNetworkAddress, this.ID);
|
|
439
|
+
const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, clusterId, zdoPayload, false);
|
|
440
|
+
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
441
|
+
throw new Zdo.StatusError(response[0]);
|
|
442
|
+
}
|
|
443
|
+
const simpleDescriptor = response[1];
|
|
444
|
+
this.profileID = simpleDescriptor.profileId;
|
|
445
|
+
this.deviceID = simpleDescriptor.deviceId;
|
|
446
|
+
this.inputClusters = simpleDescriptor.inClusterList;
|
|
447
|
+
this.outputClusters = simpleDescriptor.outClusterList;
|
|
448
|
+
}
|
|
449
|
+
hasBind(clusterId, target) {
|
|
450
|
+
return this.getBindIndex(clusterId, target) !== -1;
|
|
451
|
+
}
|
|
452
|
+
getBindIndex(clusterId, target) {
|
|
453
|
+
return this.binds.findIndex((b) => b.cluster.ID === clusterId && b.target === target);
|
|
364
454
|
}
|
|
365
455
|
addBinding(clusterKey, target) {
|
|
366
456
|
const cluster = this.getCluster(clusterKey);
|
|
367
|
-
if (typeof target ===
|
|
457
|
+
if (typeof target === "number") {
|
|
368
458
|
target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
|
|
369
459
|
}
|
|
370
|
-
|
|
460
|
+
this.addBindingInternal(cluster, target);
|
|
461
|
+
}
|
|
462
|
+
addBindingInternal(cluster, target) {
|
|
463
|
+
if (!this.hasBind(cluster.ID, target)) {
|
|
371
464
|
if (target instanceof group_1.default) {
|
|
372
|
-
this._binds.push({
|
|
373
|
-
cluster: cluster.ID,
|
|
374
|
-
groupID: target.groupID,
|
|
375
|
-
type: "group",
|
|
376
|
-
});
|
|
465
|
+
this._binds.push({ cluster: cluster.ID, groupID: target.groupID, type: "group" });
|
|
377
466
|
}
|
|
378
467
|
else {
|
|
379
468
|
this._binds.push({
|
|
@@ -388,78 +477,112 @@ class Endpoint extends entity_1.default {
|
|
|
388
477
|
}
|
|
389
478
|
async bind(clusterKey, target) {
|
|
390
479
|
const cluster = this.getCluster(clusterKey);
|
|
391
|
-
|
|
392
|
-
if (typeof target === 'number') {
|
|
480
|
+
if (typeof target === "number") {
|
|
393
481
|
target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
|
|
394
482
|
}
|
|
395
483
|
const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target.groupID;
|
|
396
|
-
const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from `
|
|
397
|
-
`'${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
|
|
484
|
+
const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
|
|
398
485
|
logger_1.logger.debug(log, NS);
|
|
399
486
|
try {
|
|
400
|
-
|
|
401
|
-
this.
|
|
487
|
+
const zdoClusterId = Zdo.ClusterId.BIND_REQUEST;
|
|
488
|
+
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.getAdapterByID(this.databaseID)?.hasZdoMessageOverhead ?? false, zdoClusterId, this.deviceIeeeAddress, this.ID, cluster.ID, target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING, target instanceof Endpoint ? target.deviceIeeeAddress : ZSpec.BLANK_EUI64, target instanceof group_1.default ? target.groupID : 0, target instanceof Endpoint ? target.ID : 0xff);
|
|
489
|
+
const adapter = entity_1.default.getAdapterByID(this.databaseID);
|
|
490
|
+
if (!adapter) {
|
|
491
|
+
throw new Error(`No adapter found for database ID ${this.databaseID}`);
|
|
492
|
+
}
|
|
493
|
+
const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
|
|
494
|
+
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
495
|
+
throw new Zdo.StatusError(response[0]);
|
|
496
|
+
}
|
|
497
|
+
this.addBindingInternal(cluster, target);
|
|
402
498
|
}
|
|
403
499
|
catch (error) {
|
|
404
|
-
|
|
405
|
-
|
|
500
|
+
const err = error;
|
|
501
|
+
err.message = `${log} failed (${err.message})`;
|
|
502
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
503
|
+
logger_1.logger.debug(err.stack, NS);
|
|
406
504
|
throw error;
|
|
407
505
|
}
|
|
408
506
|
}
|
|
409
507
|
save() {
|
|
410
508
|
this.getDevice().save();
|
|
411
509
|
}
|
|
412
|
-
async unbind(clusterKey, target) {
|
|
510
|
+
async unbind(clusterKey, target, force = false) {
|
|
511
|
+
// When force is true the unbind is done even when the bind is not in the bind list, additionally when the target is a number
|
|
512
|
+
// it will not check if the group exists.
|
|
413
513
|
const cluster = this.getCluster(clusterKey);
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
514
|
+
const action = `Unbind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name}`;
|
|
515
|
+
if (typeof target === "number") {
|
|
516
|
+
const groupTarget = group_1.default.byGroupID(target, this.databaseID);
|
|
517
|
+
if (groupTarget) {
|
|
518
|
+
target = groupTarget;
|
|
519
|
+
}
|
|
520
|
+
else if (!force) {
|
|
521
|
+
throw new Error(`${action} invalid target '${target}' (no group with this ID exists).`);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target instanceof group_1.default ? target.groupID : target;
|
|
525
|
+
const log = `${action} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
|
|
526
|
+
const index = target instanceof Endpoint || target instanceof group_1.default ? this.getBindIndex(cluster.ID, target) : -1;
|
|
527
|
+
if (index === -1 && !force) {
|
|
528
|
+
logger_1.logger.debug(`${log} no bind present, skipping.`, NS);
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
422
531
|
logger_1.logger.debug(log, NS);
|
|
423
532
|
try {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
533
|
+
const zdoClusterId = Zdo.ClusterId.UNBIND_REQUEST;
|
|
534
|
+
const adapter = entity_1.default.getAdapterByID(this.databaseID);
|
|
535
|
+
if (!adapter) {
|
|
536
|
+
throw new Error(`No adapter found for database ID ${this.databaseID}`);
|
|
537
|
+
}
|
|
538
|
+
const zdoPayload = Zdo.Buffalo.buildRequest(adapter.hasZdoMessageOverhead, zdoClusterId, this.deviceIeeeAddress, this.ID, cluster.ID, target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING, target instanceof Endpoint ? target.deviceIeeeAddress : ZSpec.BLANK_EUI64, target instanceof group_1.default ? target.groupID : typeof target === "number" ? target : 0, target instanceof Endpoint ? target.ID : 0xff);
|
|
539
|
+
const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
|
|
540
|
+
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
541
|
+
if (response[0] === Zdo.Status.NO_ENTRY) {
|
|
542
|
+
logger_1.logger.debug(`${log} no entry on device, removing entry from database.`, NS);
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
throw new Zdo.StatusError(response[0]);
|
|
546
|
+
}
|
|
428
547
|
}
|
|
429
|
-
const index = this.binds.findIndex((b) => b.cluster.ID === cluster.ID && b.target === target);
|
|
430
548
|
if (index !== -1) {
|
|
431
549
|
this._binds.splice(index, 1);
|
|
432
550
|
this.save();
|
|
433
551
|
}
|
|
434
552
|
}
|
|
435
553
|
catch (error) {
|
|
436
|
-
|
|
437
|
-
|
|
554
|
+
const err = error;
|
|
555
|
+
err.message = `${log} failed (${err.message})`;
|
|
556
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
557
|
+
logger_1.logger.debug(err.stack, NS);
|
|
438
558
|
throw error;
|
|
439
559
|
}
|
|
440
560
|
}
|
|
441
561
|
async defaultResponse(commandID, status, clusterID, transactionSequenceNumber, options) {
|
|
442
|
-
(0,
|
|
562
|
+
(0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
|
|
443
563
|
const payload = { cmdId: commandID, statusCode: status };
|
|
444
|
-
await this.zclCommand(clusterID,
|
|
564
|
+
await this.zclCommand(clusterID, "defaultRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber });
|
|
445
565
|
}
|
|
446
566
|
async configureReporting(clusterKey, items, options) {
|
|
447
|
-
const cluster = this.getCluster(clusterKey);
|
|
448
|
-
|
|
449
|
-
|
|
567
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
568
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
569
|
+
optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, optionsWithDefaults.manufacturerCode, "configureReporting");
|
|
450
570
|
const payload = items.map((item) => {
|
|
451
|
-
let dataType
|
|
571
|
+
let dataType;
|
|
572
|
+
let attrId;
|
|
452
573
|
if (typeof item.attribute === "object") {
|
|
453
574
|
dataType = item.attribute.type;
|
|
454
575
|
attrId = item.attribute.ID;
|
|
455
576
|
}
|
|
456
577
|
else {
|
|
457
|
-
|
|
458
|
-
if (
|
|
459
|
-
const attribute = cluster.getAttribute(item.attribute);
|
|
578
|
+
const attribute = cluster.getAttribute(item.attribute);
|
|
579
|
+
if (attribute) {
|
|
460
580
|
dataType = attribute.type;
|
|
461
581
|
attrId = attribute.ID;
|
|
462
582
|
}
|
|
583
|
+
else {
|
|
584
|
+
throw new Error(`Invalid attribute '${item.attribute}' for cluster '${clusterKey}'`);
|
|
585
|
+
}
|
|
463
586
|
}
|
|
464
587
|
return {
|
|
465
588
|
direction: Zcl.Direction.CLIENT_TO_SERVER,
|
|
@@ -470,99 +593,130 @@ class Endpoint extends entity_1.default {
|
|
|
470
593
|
repChange: item.reportableChange,
|
|
471
594
|
};
|
|
472
595
|
});
|
|
473
|
-
await this.zclCommand(
|
|
596
|
+
await this.zclCommand(cluster, "configReport", payload, optionsWithDefaults, items, true);
|
|
474
597
|
for (const e of payload) {
|
|
475
|
-
this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId &&
|
|
476
|
-
|
|
598
|
+
this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId &&
|
|
599
|
+
c.cluster === cluster.ID &&
|
|
600
|
+
(!("manufacturerCode" in c) || c.manufacturerCode === optionsWithDefaults.manufacturerCode)));
|
|
477
601
|
}
|
|
478
602
|
for (const entry of payload) {
|
|
479
|
-
if (entry.maxRepIntval !==
|
|
603
|
+
if (entry.maxRepIntval !== 0xffff) {
|
|
480
604
|
this._configuredReportings.push({
|
|
481
|
-
cluster: cluster.ID,
|
|
482
|
-
|
|
483
|
-
|
|
605
|
+
cluster: cluster.ID,
|
|
606
|
+
attrId: entry.attrId,
|
|
607
|
+
minRepIntval: entry.minRepIntval,
|
|
608
|
+
maxRepIntval: entry.maxRepIntval,
|
|
609
|
+
// expects items[].attribute to always point to a number DataType
|
|
610
|
+
repChange: entry.repChange,
|
|
611
|
+
manufacturerCode: optionsWithDefaults.manufacturerCode,
|
|
484
612
|
});
|
|
485
613
|
}
|
|
486
614
|
}
|
|
487
615
|
this.save();
|
|
488
616
|
}
|
|
617
|
+
async readReportingConfig(clusterKey, items, options) {
|
|
618
|
+
const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
|
|
619
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
620
|
+
optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, optionsWithDefaults.manufacturerCode, "readReportingConfig");
|
|
621
|
+
const payload = [];
|
|
622
|
+
for (const item of items) {
|
|
623
|
+
if (typeof item.attribute === "object") {
|
|
624
|
+
payload.push({ direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: item.attribute.ID });
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
const attribute = cluster.getAttribute(item.attribute);
|
|
628
|
+
if (attribute) {
|
|
629
|
+
payload.push({ direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: attribute.ID });
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
logger_1.logger.warning(`Ignoring unknown attribute ${item.attribute} in cluster ${cluster.name}`, NS);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
// TODO: could be sending empty array payload
|
|
637
|
+
// don't check status otherwise whole command fails (we want to cherry-pick here)
|
|
638
|
+
const response = await this.zclCommand(cluster, "readReportConfig", payload, optionsWithDefaults, items, false);
|
|
639
|
+
if (response) {
|
|
640
|
+
this.saveClusterAttributeReportConfig(response.cluster.ID, optionsWithDefaults.manufacturerCode, response.payload);
|
|
641
|
+
return response.payload;
|
|
642
|
+
}
|
|
643
|
+
throw new Error("No response received");
|
|
644
|
+
}
|
|
489
645
|
async writeStructured(clusterKey, payload, options) {
|
|
490
|
-
await this.zclCommand(clusterKey,
|
|
646
|
+
await this.zclCommand(clusterKey, "writeStructured", payload, options);
|
|
491
647
|
// TODO: support `writeStructuredResponse`
|
|
492
648
|
}
|
|
493
649
|
async command(clusterKey, commandKey, payload, options) {
|
|
494
|
-
const frame = await this.zclCommand(clusterKey, commandKey, payload, options,
|
|
650
|
+
const frame = await this.zclCommand(clusterKey, commandKey, payload, options, undefined, false, Zcl.FrameType.SPECIFIC);
|
|
495
651
|
if (frame) {
|
|
496
652
|
return frame.payload;
|
|
497
653
|
}
|
|
498
654
|
}
|
|
499
655
|
async commandResponse(clusterKey, commandKey, payload, options, transactionSequenceNumber) {
|
|
500
|
-
(0,
|
|
656
|
+
(0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
|
|
501
657
|
const device = this.getDevice();
|
|
502
|
-
const cluster = this.getCluster(clusterKey, device);
|
|
658
|
+
const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
|
|
503
659
|
const command = cluster.getCommandResponse(commandKey);
|
|
504
|
-
transactionSequenceNumber = transactionSequenceNumber
|
|
505
|
-
|
|
506
|
-
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC,
|
|
507
|
-
const
|
|
508
|
-
`${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(
|
|
509
|
-
logger_1.logger.debug(
|
|
660
|
+
transactionSequenceNumber = transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next();
|
|
661
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
|
|
662
|
+
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, optionsWithDefaults.direction, optionsWithDefaults.disableDefaultResponse, optionsWithDefaults.manufacturerCode, transactionSequenceNumber, command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
|
|
663
|
+
const createLogMessage = () => `CommandResponse ${this.deviceIeeeAddress}/${this.ID} ` +
|
|
664
|
+
`${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(optionsWithDefaults)})`;
|
|
665
|
+
logger_1.logger.debug(createLogMessage, NS);
|
|
510
666
|
try {
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
await entity_1.default.getAdapterByID(this.databaseID)
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
}
|
|
667
|
+
// Broadcast Green Power responses
|
|
668
|
+
if (this.ID === 242) {
|
|
669
|
+
await this.sendRequest(frame, optionsWithDefaults, async () => {
|
|
670
|
+
await entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToAll(242, frame, 242, enums_1.BroadcastAddress.RX_ON_WHEN_IDLE);
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
await this.sendRequest(frame, optionsWithDefaults);
|
|
675
|
+
}
|
|
520
676
|
}
|
|
521
677
|
catch (error) {
|
|
522
|
-
|
|
523
|
-
|
|
678
|
+
const err = error;
|
|
679
|
+
err.message = `${createLogMessage()} failed (${err.message})`;
|
|
680
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
681
|
+
logger_1.logger.debug(err.stack, NS);
|
|
524
682
|
throw error;
|
|
525
683
|
}
|
|
526
684
|
}
|
|
527
|
-
waitForCommand(clusterKey, commandKey, transactionSequenceNumber, timeout) {
|
|
528
|
-
const device = this.getDevice();
|
|
529
|
-
const cluster = this.getCluster(clusterKey, device);
|
|
530
|
-
const command = cluster.getCommand(commandKey);
|
|
531
|
-
const waiter = entity_1.default.getAdapterByID(this.databaseID).waitFor(this.deviceNetworkAddress, this.ID, Zcl.FrameType.SPECIFIC, Zcl.Direction.CLIENT_TO_SERVER, transactionSequenceNumber, cluster.ID, command.ID, timeout);
|
|
532
|
-
const promise = new Promise((resolve, reject) => {
|
|
533
|
-
waiter.promise.then((payload) => {
|
|
534
|
-
const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, device.customClusters);
|
|
535
|
-
resolve({ header: frame.header, payload: frame.payload });
|
|
536
|
-
}, (error) => reject(error));
|
|
537
|
-
});
|
|
538
|
-
return { promise, cancel: waiter.cancel };
|
|
539
|
-
}
|
|
540
685
|
getOptionsWithDefaults(options, disableDefaultResponse, direction, manufacturerCode) {
|
|
541
|
-
const providedOptions = options || {};
|
|
542
686
|
return {
|
|
543
687
|
timeout: 10000,
|
|
544
688
|
disableResponse: false,
|
|
545
689
|
disableRecovery: false,
|
|
546
690
|
disableDefaultResponse,
|
|
547
691
|
direction,
|
|
548
|
-
srcEndpoint:
|
|
692
|
+
srcEndpoint: undefined,
|
|
549
693
|
reservedBits: 0,
|
|
550
|
-
manufacturerCode
|
|
551
|
-
transactionSequenceNumber:
|
|
694
|
+
manufacturerCode,
|
|
695
|
+
transactionSequenceNumber: undefined,
|
|
552
696
|
writeUndiv: false,
|
|
553
|
-
...
|
|
697
|
+
...(options || {}),
|
|
554
698
|
};
|
|
555
699
|
}
|
|
556
|
-
ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, fallbackManufacturerCode,
|
|
557
|
-
|
|
700
|
+
ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, fallbackManufacturerCode, // XXX: problematic undefined for a "fallback"?
|
|
701
|
+
caller) {
|
|
702
|
+
let firstManufacturerCode;
|
|
703
|
+
let codeSet = false;
|
|
704
|
+
for (const nameOrID of attributes) {
|
|
558
705
|
let attributeID;
|
|
559
|
-
if (typeof nameOrID
|
|
706
|
+
if (typeof nameOrID === "object") {
|
|
560
707
|
// ConfigureReportingItem
|
|
561
|
-
if (typeof nameOrID.attribute !==
|
|
708
|
+
if (typeof nameOrID.attribute !== "object") {
|
|
562
709
|
attributeID = nameOrID.attribute;
|
|
563
710
|
}
|
|
564
711
|
else {
|
|
565
|
-
|
|
712
|
+
if (!codeSet) {
|
|
713
|
+
firstManufacturerCode = fallbackManufacturerCode;
|
|
714
|
+
codeSet = true;
|
|
715
|
+
}
|
|
716
|
+
else if (firstManufacturerCode !== fallbackManufacturerCode) {
|
|
717
|
+
throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
|
|
718
|
+
}
|
|
719
|
+
continue;
|
|
566
720
|
}
|
|
567
721
|
}
|
|
568
722
|
else {
|
|
@@ -570,50 +724,45 @@ class Endpoint extends entity_1.default {
|
|
|
570
724
|
attributeID = nameOrID;
|
|
571
725
|
}
|
|
572
726
|
// we fall back to caller|cluster provided manufacturerCode
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
fallbackManufacturerCode
|
|
577
|
-
attribute.manufacturerCode
|
|
727
|
+
const attribute = cluster.getAttribute(attributeID);
|
|
728
|
+
const manufacturerCode = attribute
|
|
729
|
+
? attribute.manufacturerCode === undefined
|
|
730
|
+
? fallbackManufacturerCode
|
|
731
|
+
: attribute.manufacturerCode
|
|
732
|
+
: fallbackManufacturerCode;
|
|
733
|
+
if (!codeSet) {
|
|
734
|
+
firstManufacturerCode = manufacturerCode;
|
|
735
|
+
codeSet = true;
|
|
578
736
|
}
|
|
579
|
-
else {
|
|
580
|
-
|
|
581
|
-
return fallbackManufacturerCode;
|
|
737
|
+
else if (firstManufacturerCode !== manufacturerCode) {
|
|
738
|
+
throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
|
|
582
739
|
}
|
|
583
|
-
}));
|
|
584
|
-
if (manufacturerCodes.size == 1) {
|
|
585
|
-
return manufacturerCodes.values().next().value;
|
|
586
|
-
}
|
|
587
|
-
else {
|
|
588
|
-
throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
|
|
589
740
|
}
|
|
741
|
+
return firstManufacturerCode;
|
|
590
742
|
}
|
|
591
743
|
async addToGroup(group) {
|
|
592
|
-
await this.
|
|
593
|
-
groupid: group.groupID,
|
|
594
|
-
groupname: "",
|
|
595
|
-
});
|
|
744
|
+
await this.zclCommand("genGroups", "add", { groupid: group.groupID, groupname: "" }, undefined, undefined, true, Zcl.FrameType.SPECIFIC);
|
|
596
745
|
group.addMember(this);
|
|
597
746
|
}
|
|
598
|
-
getCluster(clusterKey, device = undefined) {
|
|
599
|
-
|
|
600
|
-
|
|
747
|
+
getCluster(clusterKey, device = undefined, manufacturerCode = undefined) {
|
|
748
|
+
if (!device) {
|
|
749
|
+
device = this.getDevice();
|
|
750
|
+
}
|
|
751
|
+
return Zcl.Utils.getCluster(clusterKey, manufacturerCode ?? device.manufacturerID, device.customClusters);
|
|
601
752
|
}
|
|
602
753
|
/**
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
754
|
+
* Remove endpoint from a group, accepts both a Group and number as parameter.
|
|
755
|
+
* The number parameter type should only be used when removing from a group which is not known
|
|
756
|
+
* to zigbee-herdsman.
|
|
757
|
+
*/
|
|
607
758
|
async removeFromGroup(group) {
|
|
608
|
-
await this.
|
|
609
|
-
groupid: group instanceof group_1.default ? group.groupID : group,
|
|
610
|
-
});
|
|
759
|
+
await this.zclCommand("genGroups", "remove", { groupid: group instanceof group_1.default ? group.groupID : group }, undefined, undefined, true, Zcl.FrameType.SPECIFIC);
|
|
611
760
|
if (group instanceof group_1.default) {
|
|
612
761
|
group.removeMember(this);
|
|
613
762
|
}
|
|
614
763
|
}
|
|
615
764
|
async removeFromAllGroups() {
|
|
616
|
-
await this.
|
|
765
|
+
await this.zclCommand("genGroups", "removeAll", {}, { disableDefaultResponse: true }, undefined, false, Zcl.FrameType.SPECIFIC);
|
|
617
766
|
this.removeFromAllGroupsDatabase();
|
|
618
767
|
}
|
|
619
768
|
removeFromAllGroupsDatabase() {
|
|
@@ -625,43 +774,49 @@ class Endpoint extends entity_1.default {
|
|
|
625
774
|
}
|
|
626
775
|
async zclCommand(clusterKey, commandKey, payload, options, logPayload, checkStatus = false, frameType = Zcl.FrameType.GLOBAL) {
|
|
627
776
|
const device = this.getDevice();
|
|
628
|
-
const cluster = this.getCluster(clusterKey, device);
|
|
629
|
-
const command =
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
777
|
+
const cluster = typeof clusterKey === "object" ? clusterKey : this.getCluster(clusterKey, device, options?.manufacturerCode);
|
|
778
|
+
const command = typeof commandKey === "object"
|
|
779
|
+
? commandKey
|
|
780
|
+
: frameType === Zcl.FrameType.GLOBAL
|
|
781
|
+
? Zcl.Utils.getGlobalCommand(commandKey)
|
|
782
|
+
: cluster.getCommand(commandKey);
|
|
783
|
+
const hasResponse = frameType === Zcl.FrameType.GLOBAL ? true : command.response !== undefined;
|
|
784
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
785
|
+
const frame = Zcl.Frame.create(frameType, optionsWithDefaults.direction, optionsWithDefaults.disableDefaultResponse, optionsWithDefaults.manufacturerCode, optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
|
|
786
|
+
const createLogMessage = () => `ZCL command ${this.deviceIeeeAddress}/${this.ID} ` +
|
|
787
|
+
`${cluster.name}.${command.name}(${JSON.stringify(logPayload ? logPayload : payload)}, ${JSON.stringify(optionsWithDefaults)})`;
|
|
788
|
+
logger_1.logger.debug(createLogMessage, NS);
|
|
636
789
|
try {
|
|
637
|
-
const result = await this.sendRequest(frame,
|
|
790
|
+
const result = await this.sendRequest(frame, optionsWithDefaults);
|
|
638
791
|
if (result) {
|
|
639
792
|
const resultFrame = Zcl.Frame.fromBuffer(result.clusterID, result.header, result.data, device.customClusters);
|
|
640
|
-
if (
|
|
793
|
+
if (checkStatus && !optionsWithDefaults.disableResponse) {
|
|
641
794
|
this.checkStatus(resultFrame.payload);
|
|
642
795
|
}
|
|
643
796
|
return resultFrame;
|
|
644
797
|
}
|
|
645
798
|
}
|
|
646
799
|
catch (error) {
|
|
647
|
-
|
|
648
|
-
|
|
800
|
+
const err = error;
|
|
801
|
+
err.message = `${createLogMessage()} failed (${err.message})`;
|
|
802
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
803
|
+
logger_1.logger.debug(err.stack, NS);
|
|
649
804
|
throw error;
|
|
650
805
|
}
|
|
651
806
|
}
|
|
652
807
|
async zclCommandBroadcast(endpoint, destination, clusterKey, commandKey, payload, options) {
|
|
653
808
|
const device = this.getDevice();
|
|
654
|
-
const cluster = this.getCluster(clusterKey, device);
|
|
809
|
+
const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
|
|
655
810
|
const command = cluster.getCommand(commandKey);
|
|
656
|
-
|
|
657
|
-
const sourceEndpoint =
|
|
658
|
-
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC,
|
|
659
|
-
|
|
660
|
-
`${cluster.name}.${command.name}(${JSON.stringify({ payload,
|
|
661
|
-
logger_1.logger.debug(log, NS);
|
|
811
|
+
const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
|
|
812
|
+
const sourceEndpoint = optionsWithDefaults.srcEndpoint ?? this.ID;
|
|
813
|
+
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, optionsWithDefaults.direction, true, optionsWithDefaults.manufacturerCode, optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
|
|
814
|
+
logger_1.logger.debug(() => `ZCL command broadcast ${this.deviceIeeeAddress}/${sourceEndpoint} to ${destination}/${endpoint} ` +
|
|
815
|
+
`${cluster.name}.${command.name}(${JSON.stringify({ payload, optionsWithDefaults })})`, NS);
|
|
662
816
|
// if endpoint===0xFF ("broadcast endpoint"), deliver to all endpoints supporting cluster, should be avoided whenever possible
|
|
663
|
-
await entity_1.default.getAdapterByID(this.databaseID)
|
|
817
|
+
await entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToAll(endpoint, frame, sourceEndpoint, destination);
|
|
664
818
|
}
|
|
665
819
|
}
|
|
820
|
+
exports.Endpoint = Endpoint;
|
|
666
821
|
exports.default = Endpoint;
|
|
667
822
|
//# sourceMappingURL=endpoint.js.map
|