zigbee-herdsman 3.5.2 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/dependabot.yml +4 -0
- package/.github/workflows/ci.yml +3 -5
- package/.github/workflows/stale.yml +1 -1
- package/.github/workflows/typedoc.yaml +1 -1
- package/.release-please-manifest.json +1 -1
- package/.vscode/extensions.json +3 -0
- package/.vscode/settings.json +11 -0
- package/CHANGELOG.md +32 -0
- package/biome.json +89 -0
- package/dist/adapter/adapter.d.ts +11 -11
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/adapter/adapter.js +14 -14
- package/dist/adapter/adapterDiscovery.d.ts +6 -6
- package/dist/adapter/adapterDiscovery.d.ts.map +1 -1
- package/dist/adapter/adapterDiscovery.js +139 -141
- package/dist/adapter/adapterDiscovery.js.map +1 -1
- package/dist/adapter/const.d.ts +1 -1
- package/dist/adapter/const.js +2 -2
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +16 -16
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.js +95 -100
- package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
- package/dist/adapter/deconz/driver/constants.d.ts +5 -5
- package/dist/adapter/deconz/driver/constants.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/driver.d.ts +9 -9
- package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/driver.js +112 -106
- package/dist/adapter/deconz/driver/driver.js.map +1 -1
- package/dist/adapter/deconz/driver/frame.d.ts +1 -1
- package/dist/adapter/deconz/driver/frame.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/frame.js +1 -2
- package/dist/adapter/deconz/driver/frame.js.map +1 -1
- package/dist/adapter/deconz/driver/frameParser.d.ts +1 -1
- package/dist/adapter/deconz/driver/frameParser.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/frameParser.js +66 -70
- package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
- package/dist/adapter/deconz/driver/parser.d.ts +1 -1
- package/dist/adapter/deconz/driver/parser.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/parser.js +2 -2
- package/dist/adapter/deconz/driver/parser.js.map +1 -1
- package/dist/adapter/deconz/driver/writer.d.ts +2 -2
- package/dist/adapter/deconz/driver/writer.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/writer.js +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts +19 -19
- package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.js +117 -97
- package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
- package/dist/adapter/ember/adapter/endpoints.d.ts +1 -1
- package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/oneWaitress.d.ts +5 -5
- package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/oneWaitress.js +2 -2
- package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -1
- package/dist/adapter/ember/adapter/tokensManager.d.ts +3 -3
- package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/tokensManager.js +20 -23
- package/dist/adapter/ember/adapter/tokensManager.js.map +1 -1
- package/dist/adapter/ember/enums.d.ts +4 -4
- package/dist/adapter/ember/enums.d.ts.map +1 -1
- package/dist/adapter/ember/enums.js +4 -6
- package/dist/adapter/ember/enums.js.map +1 -1
- package/dist/adapter/ember/ezsp/buffalo.d.ts +4 -4
- package/dist/adapter/ember/ezsp/buffalo.d.ts.map +1 -1
- package/dist/adapter/ember/ezsp/buffalo.js +30 -32
- package/dist/adapter/ember/ezsp/buffalo.js.map +1 -1
- package/dist/adapter/ember/ezsp/ezsp.d.ts +46 -46
- package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
- package/dist/adapter/ember/ezsp/ezsp.js +85 -111
- package/dist/adapter/ember/ezsp/ezsp.js.map +1 -1
- package/dist/adapter/ember/ezspError.d.ts +1 -1
- package/dist/adapter/ember/types.d.ts +14 -14
- package/dist/adapter/ember/types.d.ts.map +1 -1
- package/dist/adapter/ember/uart/ash.d.ts +5 -5
- package/dist/adapter/ember/uart/ash.d.ts.map +1 -1
- package/dist/adapter/ember/uart/ash.js +80 -71
- package/dist/adapter/ember/uart/ash.js.map +1 -1
- package/dist/adapter/ember/uart/parser.d.ts +2 -2
- package/dist/adapter/ember/uart/parser.d.ts.map +1 -1
- package/dist/adapter/ember/uart/parser.js +2 -1
- package/dist/adapter/ember/uart/parser.js.map +1 -1
- package/dist/adapter/ember/uart/queues.js +27 -29
- package/dist/adapter/ember/uart/queues.js.map +1 -1
- package/dist/adapter/ember/uart/writer.d.ts +1 -1
- package/dist/adapter/ember/uart/writer.d.ts.map +1 -1
- package/dist/adapter/ember/uart/writer.js +3 -5
- package/dist/adapter/ember/uart/writer.js.map +1 -1
- package/dist/adapter/ember/utils/initters.d.ts +2 -2
- package/dist/adapter/ember/utils/initters.d.ts.map +1 -1
- package/dist/adapter/ember/utils/initters.js +1 -1
- package/dist/adapter/ember/utils/math.js +1 -1
- package/dist/adapter/events.d.ts +1 -1
- package/dist/adapter/events.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/backup.d.ts +3 -3
- package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/backup.js +8 -10
- package/dist/adapter/ezsp/adapter/backup.js.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +12 -12
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.js +45 -44
- package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
- package/dist/adapter/ezsp/driver/driver.d.ts +12 -12
- package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/driver.js +148 -141
- package/dist/adapter/ezsp/driver/driver.js.map +1 -1
- package/dist/adapter/ezsp/driver/ezsp.d.ts +7 -7
- package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/ezsp.js +61 -59
- package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
- package/dist/adapter/ezsp/driver/frame.js +2 -2
- package/dist/adapter/ezsp/driver/index.d.ts +2 -2
- package/dist/adapter/ezsp/driver/multicast.d.ts +8 -5
- package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/multicast.js +9 -9
- package/dist/adapter/ezsp/driver/multicast.js.map +1 -1
- package/dist/adapter/ezsp/driver/parser.d.ts +1 -1
- package/dist/adapter/ezsp/driver/parser.js +3 -3
- package/dist/adapter/ezsp/driver/types/basic.d.ts +5 -5
- package/dist/adapter/ezsp/driver/types/basic.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/types/basic.js +12 -33
- package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
- package/dist/adapter/ezsp/driver/types/index.d.ts +3 -3
- package/dist/adapter/ezsp/driver/types/index.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/types/index.js +8 -9
- package/dist/adapter/ezsp/driver/types/index.js.map +1 -1
- package/dist/adapter/ezsp/driver/types/named.d.ts +2 -2
- package/dist/adapter/ezsp/driver/types/named.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/types/named.js +8 -11
- package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
- package/dist/adapter/ezsp/driver/types/struct.d.ts +2 -2
- package/dist/adapter/ezsp/driver/types/struct.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/types/struct.js +207 -214
- package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
- package/dist/adapter/ezsp/driver/uart.d.ts +2 -2
- package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/uart.js +48 -37
- package/dist/adapter/ezsp/driver/uart.js.map +1 -1
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +3 -3
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +16 -34
- package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +1 -1
- package/dist/adapter/ezsp/driver/utils/index.d.ts +4 -4
- package/dist/adapter/ezsp/driver/utils/index.d.ts.map +1 -1
- package/dist/adapter/ezsp/driver/utils/index.js +4 -4
- package/dist/adapter/ezsp/driver/utils/index.js.map +1 -1
- package/dist/adapter/ezsp/driver/writer.d.ts +1 -1
- package/dist/adapter/ezsp/driver/writer.js +2 -2
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/serialPort.d.ts +3 -3
- package/dist/adapter/serialPort.d.ts.map +1 -1
- package/dist/adapter/serialPort.js +1 -0
- package/dist/adapter/serialPort.js.map +1 -1
- package/dist/adapter/socketPortUtils.js +3 -3
- package/dist/adapter/tstype.d.ts +6 -6
- package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +4 -4
- package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/adapter-backup.js +106 -119
- package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +10 -10
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +23 -24
- package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +1 -1
- package/dist/adapter/z-stack/adapter/manager.d.ts +6 -6
- package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/manager.js +116 -127
- package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
- package/dist/adapter/z-stack/adapter/tstype.d.ts +3 -3
- package/dist/adapter/z-stack/adapter/tstype.js +3 -3
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +10 -10
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.js +125 -137
- package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
- package/dist/adapter/z-stack/constants/common.d.ts.map +1 -1
- package/dist/adapter/z-stack/constants/common.js +0 -3
- package/dist/adapter/z-stack/constants/common.js.map +1 -1
- package/dist/adapter/z-stack/constants/index.d.ts +10 -10
- package/dist/adapter/z-stack/constants/index.d.ts.map +1 -1
- package/dist/adapter/z-stack/constants/index.js +2 -2
- package/dist/adapter/z-stack/constants/index.js.map +1 -1
- package/dist/adapter/z-stack/constants/utils.d.ts +1 -1
- package/dist/adapter/z-stack/constants/utils.js +2 -2
- package/dist/adapter/z-stack/constants/utils.js.map +1 -1
- package/dist/adapter/z-stack/models/startup-options.d.ts +2 -2
- package/dist/adapter/z-stack/models/startup-options.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +4 -5
- package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +2 -2
- package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/address-manager-table.js +3 -4
- package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +1 -2
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +2 -2
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +3 -4
- package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +6 -7
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +2 -2
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +3 -4
- package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/channel-list.js +1 -2
- package/dist/adapter/z-stack/structs/entries/channel-list.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/has-configured.js +2 -3
- package/dist/adapter/z-stack/structs/entries/has-configured.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/index.d.ts +16 -16
- package/dist/adapter/z-stack/structs/entries/nib.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nib.js +49 -50
- package/dist/adapter/z-stack/structs/entries/nib.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +1 -2
- package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-key.js +1 -2
- package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +1 -2
- package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +3 -4
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +2 -2
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +3 -4
- package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +1 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +4 -5
- package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +1 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +2 -2
- package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/entries/security-manager-table.js +3 -4
- package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +1 -1
- package/dist/adapter/z-stack/structs/index.d.ts +4 -4
- package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +2 -2
- package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/struct.d.ts +8 -8
- package/dist/adapter/z-stack/structs/struct.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/struct.js +42 -43
- package/dist/adapter/z-stack/structs/struct.js.map +1 -1
- package/dist/adapter/z-stack/structs/table.d.ts +3 -3
- package/dist/adapter/z-stack/structs/table.d.ts.map +1 -1
- package/dist/adapter/z-stack/structs/table.js +10 -10
- package/dist/adapter/z-stack/structs/table.js.map +1 -1
- package/dist/adapter/z-stack/unpi/frame.d.ts +1 -1
- package/dist/adapter/z-stack/unpi/frame.d.ts.map +1 -1
- package/dist/adapter/z-stack/unpi/frame.js +2 -4
- package/dist/adapter/z-stack/unpi/frame.js.map +1 -1
- package/dist/adapter/z-stack/unpi/index.d.ts +4 -4
- package/dist/adapter/z-stack/unpi/parser.d.ts +1 -1
- package/dist/adapter/z-stack/unpi/parser.js +3 -3
- package/dist/adapter/z-stack/unpi/parser.js.map +1 -1
- package/dist/adapter/z-stack/unpi/writer.d.ts +2 -2
- package/dist/adapter/z-stack/unpi/writer.d.ts.map +1 -1
- package/dist/adapter/z-stack/unpi/writer.js +1 -1
- package/dist/adapter/z-stack/utils/index.d.ts +2 -2
- package/dist/adapter/z-stack/utils/network-options.d.ts +1 -1
- package/dist/adapter/z-stack/utils/network-options.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +3 -3
- package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/buffaloZnp.js +34 -20
- package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -1
- package/dist/adapter/z-stack/znp/definition.d.ts +2 -2
- package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/definition.js +1111 -1111
- package/dist/adapter/z-stack/znp/index.d.ts +2 -2
- package/dist/adapter/z-stack/znp/tstype.d.ts +7 -7
- package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/utils.d.ts +1 -1
- package/dist/adapter/z-stack/znp/utils.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/utils.js +2 -2
- package/dist/adapter/z-stack/znp/znp.d.ts +7 -7
- package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/znp.js +46 -45
- package/dist/adapter/z-stack/znp/znp.js.map +1 -1
- package/dist/adapter/z-stack/znp/zpiObject.d.ts +8 -8
- package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/zpiObject.js +6 -6
- package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +11 -11
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.js +37 -36
- package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
- package/dist/adapter/zboss/commands.d.ts +4 -6
- package/dist/adapter/zboss/commands.d.ts.map +1 -1
- package/dist/adapter/zboss/commands.js +321 -287
- package/dist/adapter/zboss/commands.js.map +1 -1
- package/dist/adapter/zboss/driver.d.ts +9 -9
- package/dist/adapter/zboss/driver.d.ts.map +1 -1
- package/dist/adapter/zboss/driver.js +25 -25
- package/dist/adapter/zboss/driver.js.map +1 -1
- package/dist/adapter/zboss/frame.d.ts +9 -9
- package/dist/adapter/zboss/frame.d.ts.map +1 -1
- package/dist/adapter/zboss/frame.js +15 -15
- package/dist/adapter/zboss/frame.js.map +1 -1
- package/dist/adapter/zboss/reader.d.ts +2 -2
- package/dist/adapter/zboss/reader.d.ts.map +1 -1
- package/dist/adapter/zboss/reader.js +6 -5
- package/dist/adapter/zboss/reader.js.map +1 -1
- package/dist/adapter/zboss/uart.d.ts +3 -3
- package/dist/adapter/zboss/uart.d.ts.map +1 -1
- package/dist/adapter/zboss/uart.js +36 -36
- package/dist/adapter/zboss/uart.js.map +1 -1
- package/dist/adapter/zboss/writer.d.ts +1 -1
- package/dist/adapter/zboss/writer.d.ts.map +1 -1
- package/dist/adapter/zboss/writer.js +3 -5
- package/dist/adapter/zboss/writer.js.map +1 -1
- package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js +2 -2
- package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +14 -14
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.js +52 -53
- package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +6 -6
- package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/buffaloZiGate.js +41 -23
- package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
- package/dist/adapter/zigate/driver/commandType.d.ts +2 -2
- package/dist/adapter/zigate/driver/commandType.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/commandType.js +37 -37
- package/dist/adapter/zigate/driver/commandType.js.map +1 -1
- package/dist/adapter/zigate/driver/constants.d.ts +27 -200
- package/dist/adapter/zigate/driver/constants.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/constants.js +40 -236
- package/dist/adapter/zigate/driver/constants.js.map +1 -1
- package/dist/adapter/zigate/driver/frame.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/frame.js +4 -3
- package/dist/adapter/zigate/driver/frame.js.map +1 -1
- package/dist/adapter/zigate/driver/messageType.d.ts +1 -1
- package/dist/adapter/zigate/driver/messageType.js +76 -76
- package/dist/adapter/zigate/driver/ziGateObject.d.ts +3 -3
- package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/ziGateObject.js +7 -6
- package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -1
- package/dist/adapter/zigate/driver/zigate.d.ts +8 -8
- package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/zigate.js +59 -54
- package/dist/adapter/zigate/driver/zigate.js.map +1 -1
- package/dist/adapter/zoh/adapter/utils.js +1 -1
- package/dist/adapter/zoh/adapter/zohAdapter.d.ts +13 -13
- package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -1
- package/dist/adapter/zoh/adapter/zohAdapter.js +101 -67
- package/dist/adapter/zoh/adapter/zohAdapter.js.map +1 -1
- package/dist/buffalo/buffalo.d.ts +2 -2
- package/dist/buffalo/buffalo.js +4 -4
- package/dist/buffalo/buffalo.js.map +1 -1
- package/dist/buffalo/index.d.ts +1 -1
- package/dist/controller/controller.d.ts +7 -7
- package/dist/controller/controller.d.ts.map +1 -1
- package/dist/controller/controller.js +94 -98
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/database.d.ts +1 -1
- package/dist/controller/database.d.ts.map +1 -1
- package/dist/controller/database.js +9 -9
- package/dist/controller/database.js.map +1 -1
- package/dist/controller/events.d.ts +6 -6
- package/dist/controller/events.d.ts.map +1 -1
- package/dist/controller/greenPower.d.ts +21 -21
- package/dist/controller/greenPower.d.ts.map +1 -1
- package/dist/controller/greenPower.js +41 -41
- package/dist/controller/greenPower.js.map +1 -1
- package/dist/controller/helpers/index.d.ts +1 -1
- package/dist/controller/helpers/request.d.ts +2 -2
- package/dist/controller/helpers/request.d.ts.map +1 -1
- package/dist/controller/helpers/request.js +31 -27
- package/dist/controller/helpers/request.js.map +1 -1
- package/dist/controller/helpers/requestQueue.d.ts +3 -3
- package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
- package/dist/controller/helpers/requestQueue.js +20 -20
- package/dist/controller/helpers/requestQueue.js.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.d.ts +2 -2
- package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
- package/dist/controller/helpers/zclFrameConverter.js +1 -1
- package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
- package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +6 -4
- package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +1 -1
- package/dist/controller/helpers/zclTransactionSequenceNumber.js +6 -5
- package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +1 -1
- package/dist/controller/index.d.ts +1 -1
- package/dist/controller/model/device.d.ts +23 -19
- package/dist/controller/model/device.d.ts.map +1 -1
- package/dist/controller/model/device.js +153 -128
- package/dist/controller/model/device.js.map +1 -1
- package/dist/controller/model/endpoint.d.ts +11 -11
- package/dist/controller/model/endpoint.d.ts.map +1 -1
- package/dist/controller/model/endpoint.js +84 -67
- package/dist/controller/model/endpoint.js.map +1 -1
- package/dist/controller/model/entity.d.ts +3 -3
- package/dist/controller/model/entity.d.ts.map +1 -1
- package/dist/controller/model/group.d.ts +4 -4
- package/dist/controller/model/group.d.ts.map +1 -1
- package/dist/controller/model/group.js +21 -9
- package/dist/controller/model/group.js.map +1 -1
- package/dist/controller/model/index.d.ts +4 -4
- package/dist/controller/touchlink.d.ts +1 -1
- package/dist/controller/touchlink.d.ts.map +1 -1
- package/dist/controller/touchlink.js +11 -11
- package/dist/controller/tstype.d.ts +3 -3
- package/dist/index.d.ts +10 -10
- package/dist/models/backup-storage-legacy.d.ts +14 -16
- package/dist/models/backup-storage-legacy.d.ts.map +1 -1
- package/dist/models/backup-storage-unified.d.ts +1 -1
- package/dist/models/backup.d.ts +2 -2
- package/dist/models/backup.d.ts.map +1 -1
- package/dist/models/index.d.ts +4 -4
- package/dist/utils/backup.d.ts +1 -1
- package/dist/utils/backup.d.ts.map +1 -1
- package/dist/utils/backup.js +26 -26
- package/dist/utils/backup.js.map +1 -1
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/logger.js +3 -3
- package/dist/utils/patchBigIntSerialization.js +1 -1
- package/dist/utils/patchBigIntSerialization.js.map +1 -1
- package/dist/utils/queue.d.ts.map +1 -1
- package/dist/utils/queue.js +1 -0
- package/dist/utils/queue.js.map +1 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +5 -4
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/waitress.d.ts +1 -1
- package/dist/utils/waitress.js +3 -3
- package/dist/zspec/consts.d.ts +1 -1
- package/dist/zspec/consts.d.ts.map +1 -1
- package/dist/zspec/consts.js +1 -1
- package/dist/zspec/index.d.ts +3 -3
- package/dist/zspec/tstypes.d.ts +1 -1
- package/dist/zspec/utils.d.ts +4 -4
- package/dist/zspec/utils.d.ts.map +1 -1
- package/dist/zspec/utils.js +9 -13
- package/dist/zspec/utils.js.map +1 -1
- package/dist/zspec/zcl/buffaloZcl.d.ts +3 -3
- package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -1
- package/dist/zspec/zcl/buffaloZcl.js +127 -84
- package/dist/zspec/zcl/buffaloZcl.js.map +1 -1
- package/dist/zspec/zcl/definition/cluster.d.ts +1 -1
- package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/cluster.js +1280 -911
- package/dist/zspec/zcl/definition/cluster.js.map +1 -1
- package/dist/zspec/zcl/definition/consts.js +7 -7
- package/dist/zspec/zcl/definition/foundation.d.ts +3 -3
- package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -1
- package/dist/zspec/zcl/definition/foundation.js +88 -89
- package/dist/zspec/zcl/definition/foundation.js.map +1 -1
- package/dist/zspec/zcl/definition/manufacturerCode.d.ts +1 -1
- package/dist/zspec/zcl/definition/manufacturerCode.js +1 -1
- package/dist/zspec/zcl/definition/manufacturerCode.js.map +1 -1
- package/dist/zspec/zcl/definition/status.d.ts +3 -3
- package/dist/zspec/zcl/definition/status.js +3 -3
- package/dist/zspec/zcl/definition/tstype.d.ts +3 -3
- package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -1
- package/dist/zspec/zcl/index.d.ts +10 -10
- package/dist/zspec/zcl/utils.d.ts +3 -3
- package/dist/zspec/zcl/utils.d.ts.map +1 -1
- package/dist/zspec/zcl/utils.js +18 -21
- package/dist/zspec/zcl/utils.js.map +1 -1
- package/dist/zspec/zcl/zclFrame.d.ts +7 -7
- package/dist/zspec/zcl/zclFrame.d.ts.map +1 -1
- package/dist/zspec/zcl/zclFrame.js +38 -41
- package/dist/zspec/zcl/zclFrame.js.map +1 -1
- package/dist/zspec/zcl/zclHeader.d.ts +2 -2
- package/dist/zspec/zcl/zclHeader.d.ts.map +1 -1
- package/dist/zspec/zcl/zclHeader.js +3 -3
- package/dist/zspec/zcl/zclStatusError.d.ts +1 -1
- package/dist/zspec/zdo/buffaloZdo.d.ts +7 -7
- package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -1
- package/dist/zspec/zdo/buffaloZdo.js +4 -4
- package/dist/zspec/zdo/buffaloZdo.js.map +1 -1
- package/dist/zspec/zdo/definition/status.d.ts +1 -1
- package/dist/zspec/zdo/definition/status.js +1 -1
- package/dist/zspec/zdo/definition/tstypes.d.ts +48 -48
- package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -1
- package/dist/zspec/zdo/index.d.ts +7 -7
- package/dist/zspec/zdo/utils.d.ts +2 -2
- package/dist/zspec/zdo/utils.d.ts.map +1 -1
- package/dist/zspec/zdo/utils.js +1 -1
- package/dist/zspec/zdo/utils.js.map +1 -1
- package/dist/zspec/zdo/zdoStatusError.d.ts +1 -1
- package/examples/join-and-log.js +5 -5
- package/package.json +4 -11
- package/src/adapter/adapter.ts +189 -0
- package/src/adapter/adapterDiscovery.ts +653 -0
- package/src/adapter/const.ts +12 -0
- package/src/adapter/deconz/adapter/deconzAdapter.ts +768 -0
- package/src/adapter/deconz/driver/constants.ts +180 -0
- package/src/adapter/deconz/driver/driver.ts +900 -0
- package/src/adapter/deconz/driver/frame.ts +11 -0
- package/src/adapter/deconz/driver/frameParser.ts +557 -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 +2266 -0
- package/src/adapter/ember/adapter/endpoints.ts +86 -0
- package/src/adapter/ember/adapter/oneWaitress.ts +322 -0
- package/src/adapter/ember/adapter/tokensManager.ts +782 -0
- package/src/adapter/ember/consts.ts +178 -0
- package/src/adapter/ember/enums.ts +2123 -0
- package/src/adapter/ember/ezsp/buffalo.ts +1397 -0
- package/src/adapter/ember/ezsp/consts.ts +148 -0
- package/src/adapter/ember/ezsp/enums.ts +1087 -0
- package/src/adapter/ember/ezsp/ezsp.ts +8985 -0
- package/src/adapter/ember/ezspError.ts +10 -0
- package/src/adapter/ember/types.ts +866 -0
- package/src/adapter/ember/uart/ash.ts +1969 -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 +48 -0
- package/src/adapter/ember/uart/queues.ts +247 -0
- package/src/adapter/ember/uart/writer.ts +53 -0
- package/src/adapter/ember/utils/initters.ts +58 -0
- package/src/adapter/ember/utils/math.ts +73 -0
- package/src/adapter/events.ts +21 -0
- package/src/adapter/ezsp/adapter/backup.ts +109 -0
- package/src/adapter/ezsp/adapter/ezspAdapter.ts +614 -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/socketPortUtils.ts +16 -0
- package/src/adapter/tstype.ts +78 -0
- package/src/adapter/z-stack/adapter/adapter-backup.ts +519 -0
- package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
- package/src/adapter/z-stack/adapter/endpoints.ts +57 -0
- package/src/adapter/z-stack/adapter/manager.ts +544 -0
- package/src/adapter/z-stack/adapter/tstype.ts +6 -0
- package/src/adapter/z-stack/adapter/zStackAdapter.ts +1190 -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 +56 -0
- package/src/adapter/z-stack/unpi/writer.ts +21 -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 +342 -0
- package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
- package/src/adapter/zboss/adapter/zbossAdapter.ts +527 -0
- package/src/adapter/zboss/commands.ts +1184 -0
- package/src/adapter/zboss/consts.ts +9 -0
- package/src/adapter/zboss/driver.ts +423 -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 +27 -0
- package/src/adapter/zigate/adapter/zigateAdapter.ts +618 -0
- package/src/adapter/zigate/driver/LICENSE +17 -0
- package/src/adapter/zigate/driver/buffaloZiGate.ts +212 -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 +426 -0
- package/src/adapter/zoh/adapter/utils.ts +27 -0
- package/src/adapter/zoh/adapter/zohAdapter.ts +837 -0
- package/src/buffalo/buffalo.ts +335 -0
- package/src/buffalo/index.ts +1 -0
- package/src/controller/controller.ts +1048 -0
- package/src/controller/database.ts +124 -0
- package/src/controller/events.ts +51 -0
- package/src/controller/greenPower.ts +603 -0
- package/src/controller/helpers/index.ts +1 -0
- package/src/controller/helpers/request.ts +94 -0
- package/src/controller/helpers/requestQueue.ts +125 -0
- package/src/controller/helpers/zclFrameConverter.ts +51 -0
- package/src/controller/helpers/zclTransactionSequenceNumber.ts +19 -0
- package/src/controller/index.ts +6 -0
- package/src/controller/model/device.ts +1320 -0
- package/src/controller/model/endpoint.ts +1040 -0
- package/src/controller/model/entity.ts +23 -0
- package/src/controller/model/group.ts +333 -0
- package/src/controller/model/index.ts +4 -0
- package/src/controller/touchlink.ts +189 -0
- package/src/controller/tstype.ts +39 -0
- package/src/index.ts +12 -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/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 +76 -0
- package/src/utils/types.d.ts +3 -0
- package/src/utils/utils.ts +20 -0
- package/src/utils/wait.ts +5 -0
- package/src/utils/waitress.ts +95 -0
- package/src/zspec/consts.ts +84 -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 +308 -0
- package/src/zspec/zcl/buffaloZcl.ts +1133 -0
- package/src/zspec/zcl/definition/cluster.ts +5766 -0
- package/src/zspec/zcl/definition/consts.ts +24 -0
- package/src/zspec/zcl/definition/enums.ts +194 -0
- package/src/zspec/zcl/definition/foundation.ts +301 -0
- package/src/zspec/zcl/definition/manufacturerCode.ts +729 -0
- package/src/zspec/zcl/definition/status.ts +69 -0
- package/src/zspec/zcl/definition/tstype.ts +268 -0
- package/src/zspec/zcl/index.ts +10 -0
- package/src/zspec/zcl/utils.ts +342 -0
- package/src/zspec/zcl/zclFrame.ts +336 -0
- package/src/zspec/zcl/zclHeader.ts +102 -0
- package/src/zspec/zcl/zclStatusError.ts +10 -0
- package/src/zspec/zdo/buffaloZdo.ts +2345 -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 +1062 -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 +3449 -0
- package/test/adapter/ember/ezsp.test.ts +386 -0
- package/test/adapter/ember/ezspBuffalo.test.ts +92 -0
- package/test/adapter/ember/ezspError.test.ts +11 -0
- package/test/adapter/ember/math.test.ts +205 -0
- package/test/adapter/ezsp/frame.test.ts +29 -0
- package/test/adapter/ezsp/uart.test.ts +180 -0
- package/test/adapter/z-stack/adapter.test.ts +3985 -0
- package/test/adapter/z-stack/constants.test.ts +32 -0
- package/test/adapter/z-stack/structs.test.ts +114 -0
- package/test/adapter/z-stack/unpi.test.ts +212 -0
- package/test/adapter/z-stack/znp.test.ts +1284 -0
- package/test/adapter/zboss/fixZdoResponse.test.ts +178 -0
- package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +80 -0
- package/test/adapter/zigate/zdo.test.ts +187 -0
- package/test/adapter/zoh/utils.test.ts +35 -0
- package/test/adapter/zoh/zohAdapter.test.ts +1306 -0
- package/test/buffalo.test.ts +430 -0
- package/test/controller.test.ts +10005 -0
- package/test/greenpower.test.ts +1421 -0
- package/test/mockAdapters.ts +65 -0
- package/test/mockDevices.ts +472 -0
- package/test/testUtils.ts +20 -0
- package/test/tsconfig.json +10 -0
- package/test/utils/math.ts +19 -0
- package/test/utils.test.ts +227 -0
- package/test/vitest.config.mts +25 -0
- package/test/zcl.test.ts +2832 -0
- package/test/zspec/utils.test.ts +131 -0
- package/test/zspec/zcl/buffalo.test.ts +1231 -0
- package/test/zspec/zcl/frame.test.ts +925 -0
- package/test/zspec/zcl/utils.test.ts +280 -0
- package/test/zspec/zdo/buffalo.test.ts +1849 -0
- package/test/zspec/zdo/utils.test.ts +240 -0
- package/.github/workflows/update-dependencies.yml +0 -39
- package/.prettierignore +0 -2
- package/.prettierrc +0 -26
- package/eslint.config.mjs +0 -32
|
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.Device = void 0;
|
|
39
|
+
exports.Device = exports.InterviewState = void 0;
|
|
40
40
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
41
41
|
const utils_1 = require("../../utils");
|
|
42
42
|
const logger_1 = require("../../utils/logger");
|
|
@@ -51,17 +51,24 @@ const entity_1 = __importDefault(require("./entity"));
|
|
|
51
51
|
/**
|
|
52
52
|
* @ignore
|
|
53
53
|
*/
|
|
54
|
-
const OneJanuary2000 = new Date(
|
|
55
|
-
const NS =
|
|
54
|
+
const OneJanuary2000 = new Date("January 01, 2000 00:00:00 UTC+00:00").getTime();
|
|
55
|
+
const NS = "zh:controller:device";
|
|
56
|
+
var InterviewState;
|
|
57
|
+
(function (InterviewState) {
|
|
58
|
+
InterviewState["Pending"] = "PENDING";
|
|
59
|
+
InterviewState["InProgress"] = "IN_PROGRESS";
|
|
60
|
+
InterviewState["Successful"] = "SUCCESSFUL";
|
|
61
|
+
InterviewState["Failed"] = "FAILED";
|
|
62
|
+
})(InterviewState || (exports.InterviewState = InterviewState = {}));
|
|
56
63
|
class Device extends entity_1.default {
|
|
64
|
+
// biome-ignore lint/style/useNamingConvention: cross-repo impact
|
|
57
65
|
ID;
|
|
58
66
|
_applicationVersion;
|
|
59
67
|
_dateCode;
|
|
60
68
|
_endpoints;
|
|
61
69
|
_hardwareVersion;
|
|
62
70
|
_ieeeAddr;
|
|
63
|
-
|
|
64
|
-
_interviewing;
|
|
71
|
+
_interviewState;
|
|
65
72
|
_lastSeen;
|
|
66
73
|
_manufacturerID;
|
|
67
74
|
_manufacturerName;
|
|
@@ -96,11 +103,8 @@ class Device extends entity_1.default {
|
|
|
96
103
|
get endpoints() {
|
|
97
104
|
return this._endpoints;
|
|
98
105
|
}
|
|
99
|
-
get
|
|
100
|
-
return this.
|
|
101
|
-
}
|
|
102
|
-
get interviewing() {
|
|
103
|
-
return this._interviewing;
|
|
106
|
+
get interviewState() {
|
|
107
|
+
return this._interviewState;
|
|
104
108
|
}
|
|
105
109
|
get lastSeen() {
|
|
106
110
|
return this._lastSeen;
|
|
@@ -156,7 +160,7 @@ class Device extends entity_1.default {
|
|
|
156
160
|
return this._powerSource;
|
|
157
161
|
}
|
|
158
162
|
set powerSource(powerSource) {
|
|
159
|
-
this._powerSource = typeof powerSource ===
|
|
163
|
+
this._powerSource = typeof powerSource === "number" ? Zcl.POWER_SOURCES[powerSource & ~(1 << 7)] : powerSource;
|
|
160
164
|
}
|
|
161
165
|
get softwareBuildID() {
|
|
162
166
|
return this._softwareBuildID;
|
|
@@ -220,65 +224,65 @@ class Device extends entity_1.default {
|
|
|
220
224
|
static loadedFromDatabase = false;
|
|
221
225
|
static deletedDevices = new Map();
|
|
222
226
|
static nwkToIeeeCache = new Map();
|
|
223
|
-
static
|
|
227
|
+
static REPORTABLE_PROPERTIES_MAPPING = {
|
|
224
228
|
modelId: {
|
|
225
|
-
key:
|
|
229
|
+
key: "modelID",
|
|
226
230
|
set: (v, d) => {
|
|
227
231
|
d.modelID = v;
|
|
228
232
|
},
|
|
229
233
|
},
|
|
230
234
|
manufacturerName: {
|
|
231
|
-
key:
|
|
235
|
+
key: "manufacturerName",
|
|
232
236
|
set: (v, d) => {
|
|
233
237
|
d.manufacturerName = v;
|
|
234
238
|
},
|
|
235
239
|
},
|
|
236
240
|
powerSource: {
|
|
237
|
-
key:
|
|
241
|
+
key: "powerSource",
|
|
238
242
|
set: (v, d) => {
|
|
239
243
|
d.powerSource = v;
|
|
240
244
|
},
|
|
241
245
|
},
|
|
242
246
|
zclVersion: {
|
|
243
|
-
key:
|
|
247
|
+
key: "zclVersion",
|
|
244
248
|
set: (v, d) => {
|
|
245
249
|
d.zclVersion = v;
|
|
246
250
|
},
|
|
247
251
|
},
|
|
248
252
|
appVersion: {
|
|
249
|
-
key:
|
|
253
|
+
key: "applicationVersion",
|
|
250
254
|
set: (v, d) => {
|
|
251
255
|
d.applicationVersion = v;
|
|
252
256
|
},
|
|
253
257
|
},
|
|
254
258
|
stackVersion: {
|
|
255
|
-
key:
|
|
259
|
+
key: "stackVersion",
|
|
256
260
|
set: (v, d) => {
|
|
257
261
|
d.stackVersion = v;
|
|
258
262
|
},
|
|
259
263
|
},
|
|
260
264
|
hwVersion: {
|
|
261
|
-
key:
|
|
265
|
+
key: "hardwareVersion",
|
|
262
266
|
set: (v, d) => {
|
|
263
267
|
d.hardwareVersion = v;
|
|
264
268
|
},
|
|
265
269
|
},
|
|
266
270
|
dateCode: {
|
|
267
|
-
key:
|
|
271
|
+
key: "dateCode",
|
|
268
272
|
set: (v, d) => {
|
|
269
273
|
d.dateCode = v;
|
|
270
274
|
},
|
|
271
275
|
},
|
|
272
276
|
swBuildId: {
|
|
273
|
-
key:
|
|
277
|
+
key: "softwareBuildID",
|
|
274
278
|
set: (v, d) => {
|
|
275
279
|
d.softwareBuildID = v;
|
|
276
280
|
},
|
|
277
281
|
},
|
|
278
282
|
};
|
|
279
|
-
constructor(
|
|
283
|
+
constructor(id, type, ieeeAddr, networkAddress, manufacturerID, endpoints, manufacturerName, powerSource, modelID, applicationVersion, stackVersion, zclVersion, hardwareVersion, dateCode, softwareBuildID, interviewState, meta, lastSeen, checkinInterval, pendingRequestTimeout, gpSecurityKey) {
|
|
280
284
|
super();
|
|
281
|
-
this.ID =
|
|
285
|
+
this.ID = id;
|
|
282
286
|
this._type = type;
|
|
283
287
|
this._ieeeAddr = ieeeAddr;
|
|
284
288
|
this._networkAddress = networkAddress;
|
|
@@ -293,8 +297,7 @@ class Device extends entity_1.default {
|
|
|
293
297
|
this._hardwareVersion = hardwareVersion;
|
|
294
298
|
this._dateCode = dateCode;
|
|
295
299
|
this._softwareBuildID = softwareBuildID;
|
|
296
|
-
this.
|
|
297
|
-
this._interviewing = false;
|
|
300
|
+
this._interviewState = interviewState;
|
|
298
301
|
this._skipDefaultResponse = false;
|
|
299
302
|
this.meta = meta;
|
|
300
303
|
this._lastSeen = lastSeen;
|
|
@@ -302,11 +305,11 @@ class Device extends entity_1.default {
|
|
|
302
305
|
this._pendingRequestTimeout = pendingRequestTimeout;
|
|
303
306
|
this._gpSecurityKey = gpSecurityKey;
|
|
304
307
|
}
|
|
305
|
-
createEndpoint(
|
|
306
|
-
if (this.getEndpoint(
|
|
307
|
-
throw new Error(`Device '${this.ieeeAddr}' already has an endpoint '${
|
|
308
|
+
createEndpoint(id) {
|
|
309
|
+
if (this.getEndpoint(id)) {
|
|
310
|
+
throw new Error(`Device '${this.ieeeAddr}' already has an endpoint '${id}'`);
|
|
308
311
|
}
|
|
309
|
-
const endpoint = endpoint_1.default.create(
|
|
312
|
+
const endpoint = endpoint_1.default.create(id, undefined, undefined, [], [], this.networkAddress, this.ieeeAddr);
|
|
310
313
|
this.endpoints.push(endpoint);
|
|
311
314
|
this.save();
|
|
312
315
|
return endpoint;
|
|
@@ -316,11 +319,13 @@ class Device extends entity_1.default {
|
|
|
316
319
|
this.ieeeAddr = ieeeAddr;
|
|
317
320
|
Device.devices.set(this.ieeeAddr, this);
|
|
318
321
|
Device.nwkToIeeeCache.set(this.networkAddress, this.ieeeAddr);
|
|
319
|
-
this.endpoints
|
|
322
|
+
for (const ep of this.endpoints) {
|
|
323
|
+
ep.deviceIeeeAddress = ieeeAddr;
|
|
324
|
+
}
|
|
320
325
|
this.save();
|
|
321
326
|
}
|
|
322
|
-
getEndpoint(
|
|
323
|
-
return this.endpoints.find((e) => e.ID ===
|
|
327
|
+
getEndpoint(id) {
|
|
328
|
+
return this.endpoints.find((e) => e.ID === id);
|
|
324
329
|
}
|
|
325
330
|
// There might be multiple endpoints with same DeviceId but it is not supported and first endpoint is returned
|
|
326
331
|
getEndpointByDeviceType(deviceType) {
|
|
@@ -344,20 +349,20 @@ class Device extends entity_1.default {
|
|
|
344
349
|
}
|
|
345
350
|
async onZclData(dataPayload, frame, endpoint) {
|
|
346
351
|
// Update reportable properties
|
|
347
|
-
if (frame.isCluster(
|
|
352
|
+
if (frame.isCluster("genBasic") && (frame.isCommand("readRsp") || frame.isCommand("report"))) {
|
|
348
353
|
const attrKeyValue = helpers_1.ZclFrameConverter.attributeKeyValue(frame, this.manufacturerID, this.customClusters);
|
|
349
354
|
for (const key in attrKeyValue) {
|
|
350
|
-
Device.
|
|
355
|
+
Device.REPORTABLE_PROPERTIES_MAPPING[key]?.set(attrKeyValue[key], this);
|
|
351
356
|
}
|
|
352
357
|
}
|
|
353
358
|
// Respond to enroll requests
|
|
354
|
-
if (frame.header.isSpecific && frame.isCluster(
|
|
359
|
+
if (frame.header.isSpecific && frame.isCluster("ssIasZone") && frame.isCommand("enrollReq")) {
|
|
355
360
|
logger_1.logger.debug(`IAS - '${this.ieeeAddr}' responding to enroll response`, NS);
|
|
356
361
|
const payload = { enrollrspcode: 0, zoneid: 23 };
|
|
357
|
-
await endpoint.command(
|
|
362
|
+
await endpoint.command("ssIasZone", "enrollRsp", payload, { disableDefaultResponse: true });
|
|
358
363
|
}
|
|
359
364
|
// Reponse to read requests
|
|
360
|
-
if (frame.header.isGlobal && frame.isCommand(
|
|
365
|
+
if (frame.header.isGlobal && frame.isCommand("read") && !this._customReadResponse?.(frame, endpoint)) {
|
|
361
366
|
const time = Math.round((new Date().getTime() - OneJanuary2000) / 1000);
|
|
362
367
|
const attributes = {
|
|
363
368
|
...endpoint.clusters,
|
|
@@ -393,7 +398,7 @@ class Device extends entity_1.default {
|
|
|
393
398
|
}
|
|
394
399
|
}
|
|
395
400
|
// Handle check-in from sleeping end devices
|
|
396
|
-
if (frame.header.isSpecific && frame.isCluster(
|
|
401
|
+
if (frame.header.isSpecific && frame.isCluster("genPollCtrl") && frame.isCommand("checkin")) {
|
|
397
402
|
try {
|
|
398
403
|
if (this.hasPendingRequests() || this._checkinInterval === undefined) {
|
|
399
404
|
const payload = {
|
|
@@ -401,10 +406,10 @@ class Device extends entity_1.default {
|
|
|
401
406
|
fastPollTimeout: 0,
|
|
402
407
|
};
|
|
403
408
|
logger_1.logger.debug(`check-in from ${this.ieeeAddr}: accepting fast-poll`, NS);
|
|
404
|
-
await endpoint.command(frame.cluster.ID,
|
|
409
|
+
await endpoint.command(frame.cluster.ID, "checkinRsp", payload, { sendPolicy: "immediate" });
|
|
405
410
|
// This is a good time to read the checkin interval if we haven't stored it previously
|
|
406
411
|
if (this._checkinInterval === undefined) {
|
|
407
|
-
const pollPeriod = await endpoint.read(
|
|
412
|
+
const pollPeriod = await endpoint.read("genPollCtrl", ["checkinInterval"], { sendPolicy: "immediate" });
|
|
408
413
|
this._checkinInterval = pollPeriod.checkinInterval / 4; // convert to seconds
|
|
409
414
|
this.resetPendingRequestTimeout();
|
|
410
415
|
logger_1.logger.debug(`Request Queue (${this.ieeeAddr}): default expiration timeout set to ${this.pendingRequestTimeout}`, NS);
|
|
@@ -413,7 +418,7 @@ class Device extends entity_1.default {
|
|
|
413
418
|
// We *must* end fast-poll when we're done sending things. Otherwise
|
|
414
419
|
// we cause undue power-drain.
|
|
415
420
|
logger_1.logger.debug(`check-in from ${this.ieeeAddr}: stopping fast-poll`, NS);
|
|
416
|
-
await endpoint.command(frame.cluster.ID,
|
|
421
|
+
await endpoint.command(frame.cluster.ID, "fastPollStop", {}, { sendPolicy: "immediate" });
|
|
417
422
|
}
|
|
418
423
|
else {
|
|
419
424
|
const payload = {
|
|
@@ -421,7 +426,7 @@ class Device extends entity_1.default {
|
|
|
421
426
|
fastPollTimeout: 0,
|
|
422
427
|
};
|
|
423
428
|
logger_1.logger.debug(`check-in from ${this.ieeeAddr}: declining fast-poll`, NS);
|
|
424
|
-
await endpoint.command(frame.cluster.ID,
|
|
429
|
+
await endpoint.command(frame.cluster.ID, "checkinRsp", payload, { sendPolicy: "immediate" });
|
|
425
430
|
}
|
|
426
431
|
}
|
|
427
432
|
catch (error) {
|
|
@@ -429,14 +434,14 @@ class Device extends entity_1.default {
|
|
|
429
434
|
}
|
|
430
435
|
}
|
|
431
436
|
// Send a default response if necessary.
|
|
432
|
-
const isDefaultResponse = frame.header.isGlobal && frame.command.name ===
|
|
433
|
-
const commandHasResponse = frame.command.response
|
|
437
|
+
const isDefaultResponse = frame.header.isGlobal && frame.command.name === "defaultRsp";
|
|
438
|
+
const commandHasResponse = frame.command.response !== undefined;
|
|
434
439
|
const disableDefaultResponse = frame.header.frameControl.disableDefaultResponse;
|
|
435
440
|
/* v8 ignore next */
|
|
436
|
-
const disableTuyaDefaultResponse = endpoint.getDevice().manufacturerName?.startsWith(
|
|
441
|
+
const disableTuyaDefaultResponse = endpoint.getDevice().manufacturerName?.startsWith("_TZ") && process.env.DISABLE_TUYA_DEFAULT_RESPONSE;
|
|
437
442
|
// Sometimes messages are received twice, prevent responding twice
|
|
438
443
|
const alreadyResponded = this._lastDefaultResponseSequenceNumber === frame.header.transactionSequenceNumber;
|
|
439
|
-
if (this.type !==
|
|
444
|
+
if (this.type !== "GreenPower" &&
|
|
440
445
|
!dataPayload.wasBroadcast &&
|
|
441
446
|
!disableDefaultResponse &&
|
|
442
447
|
!isDefaultResponse &&
|
|
@@ -482,9 +487,9 @@ class Device extends entity_1.default {
|
|
|
482
487
|
for (const id in entry.endpoints) {
|
|
483
488
|
endpoints.push(endpoint_1.default.fromDatabaseRecord(entry.endpoints[id], networkAddress, ieeeAddr));
|
|
484
489
|
}
|
|
485
|
-
const meta = entry.meta
|
|
486
|
-
if (entry.type ===
|
|
487
|
-
throw new Error(
|
|
490
|
+
const meta = entry.meta ?? {};
|
|
491
|
+
if (entry.type === "Group") {
|
|
492
|
+
throw new Error("Cannot load device from group");
|
|
488
493
|
}
|
|
489
494
|
// default: no timeout (messages expire immediately after first send attempt)
|
|
490
495
|
let pendingRequestTimeout = 0;
|
|
@@ -498,7 +503,12 @@ class Device extends entity_1.default {
|
|
|
498
503
|
pendingRequestTimeout = entry.checkinInterval * 1000; // milliseconds
|
|
499
504
|
}
|
|
500
505
|
logger_1.logger.debug(`Request Queue (${ieeeAddr}): default expiration timeout set to ${pendingRequestTimeout}`, NS);
|
|
501
|
-
|
|
506
|
+
// Migrate interviewCompleted to interviewState
|
|
507
|
+
if (!entry.interviewState) {
|
|
508
|
+
entry.interviewState = entry.interviewCompleted ? InterviewState.Successful : InterviewState.Failed;
|
|
509
|
+
logger_1.logger.debug(`Migrated interviewState for '${ieeeAddr}': ${entry.interviewCompleted} -> ${entry.interviewState}`, NS);
|
|
510
|
+
}
|
|
511
|
+
return new Device(entry.id, entry.type, ieeeAddr, networkAddress, entry.manufId, endpoints, entry.manufName, entry.powerSource, entry.modelId, entry.appVersion, entry.stackVersion, entry.zclVersion, entry.hwVersion, entry.dateCode, entry.swBuildId, entry.interviewState, meta, entry.lastSeen, entry.checkinInterval, pendingRequestTimeout, entry.gpSecurityKey);
|
|
502
512
|
}
|
|
503
513
|
toDatabaseEntry() {
|
|
504
514
|
const epList = this.endpoints.map((e) => e.ID);
|
|
@@ -523,7 +533,9 @@ class Device extends entity_1.default {
|
|
|
523
533
|
dateCode: this.dateCode,
|
|
524
534
|
swBuildId: this.softwareBuildID,
|
|
525
535
|
zclVersion: this.zclVersion,
|
|
526
|
-
interviewCompleted
|
|
536
|
+
/** @deprecated Keep interviewCompleted for backwards compatibility (in case zh gets downgraded) */
|
|
537
|
+
interviewCompleted: this.interviewState === InterviewState.Successful,
|
|
538
|
+
interviewState: this.interviewState === InterviewState.InProgress ? InterviewState.Pending : this.interviewState,
|
|
527
539
|
meta: this.meta,
|
|
528
540
|
lastSeen: this.lastSeen,
|
|
529
541
|
checkinInterval: this.checkinInterval,
|
|
@@ -531,11 +543,13 @@ class Device extends entity_1.default {
|
|
|
531
543
|
};
|
|
532
544
|
}
|
|
533
545
|
save(writeDatabase = true) {
|
|
546
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
534
547
|
entity_1.default.database.update(this.toDatabaseEntry(), writeDatabase);
|
|
535
548
|
}
|
|
536
549
|
static loadFromDatabaseIfNecessary() {
|
|
537
550
|
if (!Device.loadedFromDatabase) {
|
|
538
|
-
|
|
551
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
552
|
+
for (const entry of entity_1.default.database.getEntriesIterator(["Coordinator", "EndDevice", "Router", "GreenPower", "Unknown"])) {
|
|
539
553
|
const device = Device.fromDatabaseEntry(entry);
|
|
540
554
|
Device.devices.set(device.ieeeAddr, device);
|
|
541
555
|
Device.nwkToIeeeCache.set(device.networkAddress, device.ieeeAddr);
|
|
@@ -544,7 +558,7 @@ class Device extends entity_1.default {
|
|
|
544
558
|
}
|
|
545
559
|
}
|
|
546
560
|
static find(ieeeOrNwkAddress, includeDeleted = false) {
|
|
547
|
-
return typeof ieeeOrNwkAddress ===
|
|
561
|
+
return typeof ieeeOrNwkAddress === "string"
|
|
548
562
|
? Device.byIeeeAddr(ieeeOrNwkAddress, includeDeleted)
|
|
549
563
|
: Device.byNetworkAddress(ieeeOrNwkAddress, includeDeleted);
|
|
550
564
|
}
|
|
@@ -579,23 +593,25 @@ class Device extends entity_1.default {
|
|
|
579
593
|
}
|
|
580
594
|
}
|
|
581
595
|
}
|
|
582
|
-
undelete(
|
|
596
|
+
undelete() {
|
|
583
597
|
if (Device.deletedDevices.delete(this.ieeeAddr)) {
|
|
584
598
|
Device.devices.set(this.ieeeAddr, this);
|
|
585
|
-
|
|
599
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
586
600
|
entity_1.default.database.insert(this.toDatabaseEntry());
|
|
587
601
|
}
|
|
588
602
|
else {
|
|
589
603
|
throw new Error(`Device '${this.ieeeAddr}' is not deleted`);
|
|
590
604
|
}
|
|
591
605
|
}
|
|
592
|
-
static create(type, ieeeAddr, networkAddress, manufacturerID, manufacturerName, powerSource, modelID,
|
|
606
|
+
static create(type, ieeeAddr, networkAddress, manufacturerID, manufacturerName, powerSource, modelID, interviewState, gpSecurityKey) {
|
|
593
607
|
Device.loadFromDatabaseIfNecessary();
|
|
594
608
|
if (Device.devices.has(ieeeAddr)) {
|
|
595
609
|
throw new Error(`Device with IEEE address '${ieeeAddr}' already exists`);
|
|
596
610
|
}
|
|
611
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
597
612
|
const ID = entity_1.default.database.newID();
|
|
598
|
-
const device = new Device(ID, type, ieeeAddr, networkAddress, manufacturerID, [], manufacturerName, powerSource, modelID, undefined, undefined, undefined, undefined, undefined, undefined,
|
|
613
|
+
const device = new Device(ID, type, ieeeAddr, networkAddress, manufacturerID, [], manufacturerName, powerSource, modelID, undefined, undefined, undefined, undefined, undefined, undefined, interviewState, {}, undefined, undefined, 0, gpSecurityKey);
|
|
614
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
599
615
|
entity_1.default.database.insert(device.toDatabaseEntry());
|
|
600
616
|
Device.devices.set(device.ieeeAddr, device);
|
|
601
617
|
Device.nwkToIeeeCache.set(device.networkAddress, device.ieeeAddr);
|
|
@@ -605,30 +621,31 @@ class Device extends entity_1.default {
|
|
|
605
621
|
* Zigbee functions
|
|
606
622
|
*/
|
|
607
623
|
async interview(ignoreCache = false) {
|
|
608
|
-
if (this.
|
|
624
|
+
if (this.interviewState === InterviewState.InProgress) {
|
|
609
625
|
const message = `Interview - interview already in progress for '${this.ieeeAddr}'`;
|
|
610
626
|
logger_1.logger.debug(message, NS);
|
|
611
627
|
throw new Error(message);
|
|
612
628
|
}
|
|
613
629
|
let err;
|
|
614
|
-
this.
|
|
630
|
+
this._interviewState = InterviewState.InProgress;
|
|
615
631
|
logger_1.logger.debug(`Interview - start device '${this.ieeeAddr}'`, NS);
|
|
616
632
|
try {
|
|
617
633
|
await this.interviewInternal(ignoreCache);
|
|
618
634
|
logger_1.logger.debug(`Interview - completed for device '${this.ieeeAddr}'`, NS);
|
|
619
|
-
this.
|
|
635
|
+
this._interviewState = InterviewState.Successful;
|
|
620
636
|
}
|
|
621
637
|
catch (error) {
|
|
622
638
|
if (this.interviewQuirks()) {
|
|
639
|
+
this._interviewState = InterviewState.Successful;
|
|
623
640
|
logger_1.logger.debug(`Interview - completed for device '${this.ieeeAddr}' because of quirks ('${error}')`, NS);
|
|
624
641
|
}
|
|
625
642
|
else {
|
|
643
|
+
this._interviewState = InterviewState.Failed;
|
|
626
644
|
logger_1.logger.debug(`Interview - failed for device '${this.ieeeAddr}' with error '${error}'`, NS);
|
|
627
645
|
err = error;
|
|
628
646
|
}
|
|
629
647
|
}
|
|
630
648
|
finally {
|
|
631
|
-
this._interviewing = false;
|
|
632
649
|
this.save();
|
|
633
650
|
}
|
|
634
651
|
if (err) {
|
|
@@ -645,42 +662,40 @@ class Device extends entity_1.default {
|
|
|
645
662
|
// https://github.com/Koenkk/zigbee2mqtt/issues/4655
|
|
646
663
|
// Device does not change zoneState after enroll (event with original gateway)
|
|
647
664
|
// modelID is mostly in the form of e.g. TS0202 and manufacturerName like e.g. _TYZB01_xph99wvr
|
|
648
|
-
if (this.modelID?.match(
|
|
649
|
-
this._powerSource = this._powerSource ||
|
|
650
|
-
|
|
651
|
-
this._interviewCompleted = true;
|
|
652
|
-
logger_1.logger.debug(`Interview - quirks matched for Tuya end device`, NS);
|
|
665
|
+
if (this.modelID?.match("^TS\\d*$") && (this.manufacturerName?.match("^_TZ.*_.*$") || this.manufacturerName?.match("^_TYZB01_.*$"))) {
|
|
666
|
+
this._powerSource = this._powerSource || "Battery";
|
|
667
|
+
logger_1.logger.debug("Interview - quirks matched for Tuya end device", NS);
|
|
653
668
|
return true;
|
|
654
669
|
}
|
|
655
670
|
// Some devices, e.g. Xiaomi end devices have a different interview procedure, after pairing they
|
|
656
671
|
// report it's modelID trough a readResponse. The readResponse is received by the controller and set
|
|
657
672
|
// on the device.
|
|
658
673
|
const lookup = {
|
|
659
|
-
|
|
660
|
-
type:
|
|
661
|
-
powerSource:
|
|
674
|
+
"^3R.*?Z": {
|
|
675
|
+
type: "EndDevice",
|
|
676
|
+
powerSource: "Battery",
|
|
662
677
|
},
|
|
663
|
-
|
|
664
|
-
type:
|
|
678
|
+
"lumi..*": {
|
|
679
|
+
type: "EndDevice",
|
|
665
680
|
manufacturerID: 4151,
|
|
666
|
-
manufacturerName:
|
|
667
|
-
powerSource:
|
|
681
|
+
manufacturerName: "LUMI",
|
|
682
|
+
powerSource: "Battery",
|
|
668
683
|
},
|
|
669
|
-
|
|
670
|
-
type:
|
|
684
|
+
"TERNCY-PP01": {
|
|
685
|
+
type: "EndDevice",
|
|
671
686
|
manufacturerID: 4648,
|
|
672
|
-
manufacturerName:
|
|
673
|
-
powerSource:
|
|
687
|
+
manufacturerName: "TERNCY",
|
|
688
|
+
powerSource: "Battery",
|
|
674
689
|
},
|
|
675
|
-
|
|
676
|
-
|
|
690
|
+
"3RWS18BZ": {}, // https://github.com/Koenkk/zigbee-herdsman-converters/pull/2710
|
|
691
|
+
"MULTI-MECI--EA01": {},
|
|
677
692
|
MOT003: {}, // https://github.com/Koenkk/zigbee2mqtt/issues/12471
|
|
678
|
-
|
|
679
|
-
|
|
693
|
+
"C-ZB-SEDC": {}, //candeo device that doesn't follow IAS enrollment process correctly and therefore fails to complete interview
|
|
694
|
+
"C-ZB-SEMO": {}, //candeo device that doesn't follow IAS enrollment process correctly and therefore fails to complete interview
|
|
680
695
|
};
|
|
681
696
|
let match;
|
|
682
697
|
for (const key in lookup) {
|
|
683
|
-
if (this.modelID
|
|
698
|
+
if (this.modelID?.match(key)) {
|
|
684
699
|
match = key;
|
|
685
700
|
break;
|
|
686
701
|
}
|
|
@@ -688,22 +703,18 @@ class Device extends entity_1.default {
|
|
|
688
703
|
if (match) {
|
|
689
704
|
const info = lookup[match];
|
|
690
705
|
logger_1.logger.debug(`Interview procedure failed but got modelID matching '${match}', assuming interview succeeded`, NS);
|
|
691
|
-
this._type = this._type ===
|
|
706
|
+
this._type = this._type === "Unknown" && info.type ? info.type : this._type;
|
|
692
707
|
this._manufacturerID = this._manufacturerID || info.manufacturerID;
|
|
693
708
|
this._manufacturerName = this._manufacturerName || info.manufacturerName;
|
|
694
709
|
this._powerSource = this._powerSource || info.powerSource;
|
|
695
|
-
this._interviewing = false;
|
|
696
|
-
this._interviewCompleted = true;
|
|
697
710
|
logger_1.logger.debug(`Interview - quirks matched on '${match}'`, NS);
|
|
698
711
|
return true;
|
|
699
712
|
}
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
return false;
|
|
703
|
-
}
|
|
713
|
+
logger_1.logger.debug("Interview - quirks did not match", NS);
|
|
714
|
+
return false;
|
|
704
715
|
}
|
|
705
716
|
async interviewInternal(ignoreCache) {
|
|
706
|
-
const hasNodeDescriptor = () => this._manufacturerID !== undefined && this._type !==
|
|
717
|
+
const hasNodeDescriptor = () => this._manufacturerID !== undefined && this._type !== "Unknown";
|
|
707
718
|
if (ignoreCache || !hasNodeDescriptor()) {
|
|
708
719
|
for (let attempt = 0; attempt < 6; attempt++) {
|
|
709
720
|
try {
|
|
@@ -715,10 +726,8 @@ class Device extends entity_1.default {
|
|
|
715
726
|
logger_1.logger.debug(`Interview - completed for device '${this.ieeeAddr}' because of quirks ('${error}')`, NS);
|
|
716
727
|
return;
|
|
717
728
|
}
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
logger_1.logger.debug(`Interview - node descriptor request failed for '${this.ieeeAddr}', attempt ${attempt + 1}`, NS);
|
|
721
|
-
}
|
|
729
|
+
// Most of the times the first node descriptor query fails and the seconds one succeeds.
|
|
730
|
+
logger_1.logger.debug(`Interview - node descriptor request failed for '${this.ieeeAddr}', attempt ${attempt + 1}`, NS);
|
|
722
731
|
}
|
|
723
732
|
}
|
|
724
733
|
}
|
|
@@ -728,10 +737,10 @@ class Device extends entity_1.default {
|
|
|
728
737
|
if (!hasNodeDescriptor()) {
|
|
729
738
|
throw new Error(`Interview failed because can not get node descriptor ('${this.ieeeAddr}')`);
|
|
730
739
|
}
|
|
731
|
-
if (this.manufacturerID === 4619 && this._type ===
|
|
740
|
+
if (this.manufacturerID === 4619 && this._type === "EndDevice") {
|
|
732
741
|
// Give Tuya end device some time to pair. Otherwise they leave immediately.
|
|
733
742
|
// https://github.com/Koenkk/zigbee2mqtt/issues/5814
|
|
734
|
-
logger_1.logger.debug(
|
|
743
|
+
logger_1.logger.debug("Interview - Detected Tuya end device, waiting 10 seconds...", NS);
|
|
735
744
|
await (0, utils_1.wait)(10000);
|
|
736
745
|
}
|
|
737
746
|
else if (this.manufacturerID === 0 || this.manufacturerID === 4098) {
|
|
@@ -739,12 +748,12 @@ class Device extends entity_1.default {
|
|
|
739
748
|
// In case the device responds, the endoint and modelID/manufacturerName are set
|
|
740
749
|
// in controller.onZclOrRawData()
|
|
741
750
|
// https://github.com/Koenkk/zigbee2mqtt/issues/7553
|
|
742
|
-
logger_1.logger.debug(
|
|
751
|
+
logger_1.logger.debug("Interview - Detected potential Tuya end device, reading modelID and manufacturerName...", NS);
|
|
743
752
|
try {
|
|
744
753
|
const endpoint = endpoint_1.default.create(1, undefined, undefined, [], [], this.networkAddress, this.ieeeAddr);
|
|
745
|
-
const result = await endpoint.read(
|
|
754
|
+
const result = await endpoint.read("genBasic", ["modelId", "manufacturerName"], { sendPolicy: "immediate" });
|
|
746
755
|
for (const key in result) {
|
|
747
|
-
Device.
|
|
756
|
+
Device.REPORTABLE_PROPERTIES_MAPPING[key].set(result[key], this);
|
|
748
757
|
}
|
|
749
758
|
}
|
|
750
759
|
catch (error) {
|
|
@@ -768,30 +777,30 @@ class Device extends entity_1.default {
|
|
|
768
777
|
throw new Error(`Interview failed because can not get active endpoints ('${this.ieeeAddr}')`);
|
|
769
778
|
}
|
|
770
779
|
logger_1.logger.debug(`Interview - got active endpoints for device '${this.ieeeAddr}'`, NS);
|
|
771
|
-
const coordinator = Device.byType(
|
|
780
|
+
const coordinator = Device.byType("Coordinator")[0];
|
|
772
781
|
for (const endpoint of this._endpoints) {
|
|
773
782
|
await endpoint.updateSimpleDescriptor();
|
|
774
783
|
logger_1.logger.debug(`Interview - got simple descriptor for endpoint '${endpoint.ID}' device '${this.ieeeAddr}'`, NS);
|
|
775
784
|
// Read attributes
|
|
776
785
|
// nice to have but not required for successful pairing as most of the attributes are not mandatory in ZCL specification
|
|
777
|
-
if (endpoint.supportsInputCluster(
|
|
778
|
-
for (const key in Device.
|
|
779
|
-
const item = Device.
|
|
786
|
+
if (endpoint.supportsInputCluster("genBasic")) {
|
|
787
|
+
for (const key in Device.REPORTABLE_PROPERTIES_MAPPING) {
|
|
788
|
+
const item = Device.REPORTABLE_PROPERTIES_MAPPING[key];
|
|
780
789
|
if (ignoreCache || !this[item.key]) {
|
|
781
790
|
try {
|
|
782
791
|
let result;
|
|
783
792
|
try {
|
|
784
|
-
result = await endpoint.read(
|
|
793
|
+
result = await endpoint.read("genBasic", [key], { sendPolicy: "immediate" });
|
|
785
794
|
}
|
|
786
795
|
catch (error) {
|
|
787
796
|
// Reading attributes can fail for many reason, e.g. it could be that device rejoins
|
|
788
797
|
// while joining like in:
|
|
789
798
|
// https://github.com/Koenkk/zigbee-herdsman-converters/issues/2485.
|
|
790
799
|
// The modelID and manufacturerName are crucial for device identification, so retry.
|
|
791
|
-
if (item.key ===
|
|
800
|
+
if (item.key === "modelID" || item.key === "manufacturerName") {
|
|
792
801
|
logger_1.logger.debug(`Interview - first ${item.key} retrieval attempt failed, retrying after 10 seconds...`, NS);
|
|
793
802
|
await (0, utils_1.wait)(10000);
|
|
794
|
-
result = await endpoint.read(
|
|
803
|
+
result = await endpoint.read("genBasic", [key], { sendPolicy: "immediate" });
|
|
795
804
|
}
|
|
796
805
|
else {
|
|
797
806
|
throw error;
|
|
@@ -807,15 +816,15 @@ class Device extends entity_1.default {
|
|
|
807
816
|
}
|
|
808
817
|
}
|
|
809
818
|
// Enroll IAS device
|
|
810
|
-
if (endpoint.supportsInputCluster(
|
|
819
|
+
if (endpoint.supportsInputCluster("ssIasZone")) {
|
|
811
820
|
logger_1.logger.debug(`Interview - IAS - enrolling '${this.ieeeAddr}' endpoint '${endpoint.ID}'`, NS);
|
|
812
|
-
const stateBefore = await endpoint.read(
|
|
821
|
+
const stateBefore = await endpoint.read("ssIasZone", ["iasCieAddr", "zoneState"], { sendPolicy: "immediate" });
|
|
813
822
|
logger_1.logger.debug(`Interview - IAS - before enrolling state: '${JSON.stringify(stateBefore)}'`, NS);
|
|
814
823
|
// Do not enroll when device has already been enrolled
|
|
815
824
|
if (stateBefore.zoneState !== 1 || stateBefore.iasCieAddr !== coordinator.ieeeAddr) {
|
|
816
|
-
logger_1.logger.debug(
|
|
817
|
-
await endpoint.write(
|
|
818
|
-
logger_1.logger.debug(
|
|
825
|
+
logger_1.logger.debug("Interview - IAS - not enrolled, enrolling", NS);
|
|
826
|
+
await endpoint.write("ssIasZone", { iasCieAddr: coordinator.ieeeAddr }, { sendPolicy: "immediate" });
|
|
827
|
+
logger_1.logger.debug("Interview - IAS - wrote iasCieAddr", NS);
|
|
819
828
|
// There are 2 enrollment procedures:
|
|
820
829
|
// - Auto enroll: coordinator has to send enrollResponse without receiving an enroll request
|
|
821
830
|
// this case is handled below.
|
|
@@ -825,11 +834,11 @@ class Device extends entity_1.default {
|
|
|
825
834
|
await (0, utils_1.wait)(500);
|
|
826
835
|
logger_1.logger.debug(`IAS - '${this.ieeeAddr}' sending enroll response (auto enroll)`, NS);
|
|
827
836
|
const payload = { enrollrspcode: 0, zoneid: 23 };
|
|
828
|
-
await endpoint.command(
|
|
837
|
+
await endpoint.command("ssIasZone", "enrollRsp", payload, { disableDefaultResponse: true, sendPolicy: "immediate" });
|
|
829
838
|
let enrolled = false;
|
|
830
839
|
for (let attempt = 0; attempt < 20; attempt++) {
|
|
831
840
|
await (0, utils_1.wait)(500);
|
|
832
|
-
const stateAfter = await endpoint.read(
|
|
841
|
+
const stateAfter = await endpoint.read("ssIasZone", ["iasCieAddr", "zoneState"], { sendPolicy: "immediate" });
|
|
833
842
|
logger_1.logger.debug(`Interview - IAS - after enrolling state (${attempt}): '${JSON.stringify(stateAfter)}'`, NS);
|
|
834
843
|
if (stateAfter.zoneState === 1) {
|
|
835
844
|
enrolled = true;
|
|
@@ -844,16 +853,16 @@ class Device extends entity_1.default {
|
|
|
844
853
|
}
|
|
845
854
|
}
|
|
846
855
|
else {
|
|
847
|
-
logger_1.logger.debug(
|
|
856
|
+
logger_1.logger.debug("Interview - IAS - already enrolled, skipping enroll", NS);
|
|
848
857
|
}
|
|
849
858
|
}
|
|
850
859
|
}
|
|
851
860
|
// Bind poll control
|
|
852
861
|
try {
|
|
853
|
-
for (const endpoint of this.endpoints.filter((e) => e.supportsInputCluster(
|
|
862
|
+
for (const endpoint of this.endpoints.filter((e) => e.supportsInputCluster("genPollCtrl"))) {
|
|
854
863
|
logger_1.logger.debug(`Interview - Poll control - binding '${this.ieeeAddr}' endpoint '${endpoint.ID}'`, NS);
|
|
855
|
-
await endpoint.bind(
|
|
856
|
-
const pollPeriod = await endpoint.read(
|
|
864
|
+
await endpoint.bind("genPollCtrl", coordinator.endpoints[0]);
|
|
865
|
+
const pollPeriod = await endpoint.read("genPollCtrl", ["checkinInterval"], { sendPolicy: "immediate" });
|
|
857
866
|
this._checkinInterval = pollPeriod.checkinInterval / 4; // convert to seconds
|
|
858
867
|
this.resetPendingRequestTimeout();
|
|
859
868
|
}
|
|
@@ -866,7 +875,9 @@ class Device extends entity_1.default {
|
|
|
866
875
|
}
|
|
867
876
|
async updateNodeDescriptor() {
|
|
868
877
|
const clusterId = Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST;
|
|
878
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
869
879
|
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.adapter.hasZdoMessageOverhead, clusterId, this.networkAddress);
|
|
880
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
870
881
|
const response = await entity_1.default.adapter.sendZdo(this.ieeeAddr, this.networkAddress, clusterId, zdoPayload, false);
|
|
871
882
|
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
872
883
|
throw new Zdo.StatusError(response[0]);
|
|
@@ -876,13 +887,13 @@ class Device extends entity_1.default {
|
|
|
876
887
|
this._manufacturerID = nodeDescriptor.manufacturerCode;
|
|
877
888
|
switch (nodeDescriptor.logicalType) {
|
|
878
889
|
case 0x0:
|
|
879
|
-
this._type =
|
|
890
|
+
this._type = "Coordinator";
|
|
880
891
|
break;
|
|
881
892
|
case 0x1:
|
|
882
|
-
this._type =
|
|
893
|
+
this._type = "Router";
|
|
883
894
|
break;
|
|
884
895
|
case 0x2:
|
|
885
|
-
this._type =
|
|
896
|
+
this._type = "EndDevice";
|
|
886
897
|
break;
|
|
887
898
|
}
|
|
888
899
|
logger_1.logger.debug(`Interview - got node descriptor for device '${this.ieeeAddr}'`, NS);
|
|
@@ -890,13 +901,15 @@ class Device extends entity_1.default {
|
|
|
890
901
|
// log for devices older than 1 from current revision
|
|
891
902
|
if (nodeDescriptor.serverMask.stackComplianceRevision < ZSpec.ZIGBEE_REVISION - 1) {
|
|
892
903
|
// always 0 before revision 21 where field was added
|
|
893
|
-
const rev = nodeDescriptor.serverMask.stackComplianceRevision < 21 ?
|
|
904
|
+
const rev = nodeDescriptor.serverMask.stackComplianceRevision < 21 ? "pre-21" : nodeDescriptor.serverMask.stackComplianceRevision;
|
|
894
905
|
logger_1.logger.info(`Device '${this.ieeeAddr}' is only compliant to revision '${rev}' of the ZigBee specification (current revision: ${ZSpec.ZIGBEE_REVISION}).`, NS);
|
|
895
906
|
}
|
|
896
907
|
}
|
|
897
908
|
async updateActiveEndpoints() {
|
|
898
909
|
const clusterId = Zdo.ClusterId.ACTIVE_ENDPOINTS_REQUEST;
|
|
910
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
899
911
|
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.adapter.hasZdoMessageOverhead, clusterId, this.networkAddress);
|
|
912
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
900
913
|
const response = await entity_1.default.adapter.sendZdo(this.ieeeAddr, this.networkAddress, clusterId, zdoPayload, false);
|
|
901
914
|
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
902
915
|
throw new Zdo.StatusError(response[0]);
|
|
@@ -921,21 +934,27 @@ class Device extends entity_1.default {
|
|
|
921
934
|
*/
|
|
922
935
|
async requestNetworkAddress() {
|
|
923
936
|
const clusterId = Zdo.ClusterId.NETWORK_ADDRESS_REQUEST;
|
|
937
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
924
938
|
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.adapter.hasZdoMessageOverhead, clusterId, this.ieeeAddr, false, 0);
|
|
939
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
925
940
|
await entity_1.default.adapter.sendZdo(this.ieeeAddr, ZSpec.BroadcastAddress.RX_ON_WHEN_IDLE, clusterId, zdoPayload, true);
|
|
926
941
|
}
|
|
927
942
|
async removeFromNetwork() {
|
|
928
|
-
if (this._type ===
|
|
943
|
+
if (this._type === "GreenPower") {
|
|
929
944
|
const payload = {
|
|
930
945
|
options: 0x002550,
|
|
931
946
|
srcID: Number(this.ieeeAddr),
|
|
932
947
|
};
|
|
933
|
-
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, Zcl.Direction.SERVER_TO_CLIENT, true, undefined, zclTransactionSequenceNumber_1.default.next(),
|
|
948
|
+
const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, Zcl.Direction.SERVER_TO_CLIENT, true, undefined, zclTransactionSequenceNumber_1.default.next(), "pairing", 33, payload, this.customClusters);
|
|
949
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
934
950
|
await entity_1.default.adapter.sendZclFrameToAll(242, frame, 242, enums_1.BroadcastAddress.RX_ON_WHEN_IDLE);
|
|
935
951
|
}
|
|
936
952
|
else {
|
|
937
953
|
const clusterId = Zdo.ClusterId.LEAVE_REQUEST;
|
|
938
|
-
const zdoPayload = Zdo.Buffalo.buildRequest(
|
|
954
|
+
const zdoPayload = Zdo.Buffalo.buildRequest(
|
|
955
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
956
|
+
entity_1.default.adapter.hasZdoMessageOverhead, clusterId, this.ieeeAddr, Zdo.LeaveRequestFlags.WITHOUT_REJOIN);
|
|
957
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
939
958
|
const response = await entity_1.default.adapter.sendZdo(this.ieeeAddr, this.networkAddress, clusterId, zdoPayload, false);
|
|
940
959
|
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
941
960
|
throw new Zdo.StatusError(response[0]);
|
|
@@ -948,14 +967,16 @@ class Device extends entity_1.default {
|
|
|
948
967
|
for (const endpoint of this.endpoints) {
|
|
949
968
|
endpoint.removeFromAllGroupsDatabase();
|
|
950
969
|
}
|
|
970
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
951
971
|
if (entity_1.default.database.has(this.ID)) {
|
|
972
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
952
973
|
entity_1.default.database.remove(this.ID);
|
|
953
974
|
}
|
|
954
975
|
Device.deletedDevices.set(this.ieeeAddr, this);
|
|
955
976
|
Device.devices.delete(this.ieeeAddr);
|
|
956
977
|
// Clear all data in case device joins again
|
|
957
|
-
|
|
958
|
-
this.
|
|
978
|
+
// Green power devices are never interviewed, keep existing interview state.
|
|
979
|
+
this._interviewState = this.type === "GreenPower" ? this._interviewState : InterviewState.Pending;
|
|
959
980
|
this.meta = {};
|
|
960
981
|
const newEndpoints = [];
|
|
961
982
|
for (const endpoint of this.endpoints) {
|
|
@@ -968,7 +989,9 @@ class Device extends entity_1.default {
|
|
|
968
989
|
// TODO return Zdo.LQITableEntry directly (requires updates in other repos)
|
|
969
990
|
const neighbors = [];
|
|
970
991
|
const request = async (startIndex) => {
|
|
992
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
971
993
|
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.adapter.hasZdoMessageOverhead, clusterId, startIndex);
|
|
994
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
972
995
|
const response = await entity_1.default.adapter.sendZdo(this.ieeeAddr, this.networkAddress, clusterId, zdoPayload, false);
|
|
973
996
|
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
974
997
|
throw new Zdo.StatusError(response[0]);
|
|
@@ -999,7 +1022,9 @@ class Device extends entity_1.default {
|
|
|
999
1022
|
// TODO return Zdo.RoutingTableEntry directly (requires updates in other repos)
|
|
1000
1023
|
const table = [];
|
|
1001
1024
|
const request = async (startIndex) => {
|
|
1025
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
1002
1026
|
const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.adapter.hasZdoMessageOverhead, clusterId, startIndex);
|
|
1027
|
+
// biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
|
|
1003
1028
|
const response = await entity_1.default.adapter.sendZdo(this.ieeeAddr, this.networkAddress, clusterId, zdoPayload, false);
|
|
1004
1029
|
if (!Zdo.Buffalo.checkStatus(response)) {
|
|
1005
1030
|
throw new Zdo.StatusError(response[0]);
|
|
@@ -1028,10 +1053,10 @@ class Device extends entity_1.default {
|
|
|
1028
1053
|
// of a mandatory basic cluster attribute to keep it as lightweight as
|
|
1029
1054
|
// possible.
|
|
1030
1055
|
const endpoint = this.endpoints.find((ep) => ep.inputClusters.includes(0)) ?? this.endpoints[0];
|
|
1031
|
-
await endpoint.read(
|
|
1056
|
+
await endpoint.read("genBasic", ["zclVersion"], { disableRecovery });
|
|
1032
1057
|
}
|
|
1033
1058
|
addCustomCluster(name, cluster) {
|
|
1034
|
-
(0, node_assert_1.default)(![Zcl.Clusters.touchlink.ID, Zcl.Clusters.greenPower.ID].includes(cluster.ID),
|
|
1059
|
+
(0, node_assert_1.default)(![Zcl.Clusters.touchlink.ID, Zcl.Clusters.greenPower.ID].includes(cluster.ID), "Overriding of greenPower or touchlink cluster is not supported");
|
|
1035
1060
|
if (Zcl.Utils.isClusterName(name)) {
|
|
1036
1061
|
const existingCluster = Zcl.Clusters[name];
|
|
1037
1062
|
// Extend existing cluster
|