@willieee802/zigbee-herdsman 0.48.3 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1025) hide show
  1. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  2. package/.github/copilot-instructions.md +689 -0
  3. package/.github/dependabot.yml +22 -0
  4. package/.github/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
  5. package/.github/prompts/create-agentsmd.prompt.md +249 -0
  6. package/.github/prompts/create-specification.prompt.md +127 -0
  7. package/.github/prompts/review-and-refactor.prompt.md +15 -0
  8. package/.github/prompts/update-specification.prompt.md +127 -0
  9. package/.github/workflows/ci.yml +70 -0
  10. package/.github/workflows/release-please.yml +18 -0
  11. package/.github/workflows/stale.yml +20 -0
  12. package/.github/workflows/typedoc.yaml +47 -0
  13. package/.release-please-manifest.json +2 -2
  14. package/.vscode/extensions.json +3 -0
  15. package/.vscode/settings.json +11 -0
  16. package/AGENTS.md +441 -0
  17. package/CHANGELOG.md +1245 -0
  18. package/README.md +1 -1
  19. package/biome.json +103 -0
  20. package/examples/join-and-log.js +18 -18
  21. package/package.json +83 -70
  22. package/release-please-config.json +8 -8
  23. package/scripts/check-clusters-changes.ts +328 -0
  24. package/scripts/clusters-changes.log +584 -0
  25. package/scripts/clusters-typegen.ts +608 -0
  26. package/scripts/utils.ts +88 -0
  27. package/scripts/zap-update-clusters-report.json +303 -0
  28. package/scripts/zap-update-clusters.ts +1520 -0
  29. package/scripts/zap-update-types.ts +707 -0
  30. package/scripts/zap-xml-clusters-overrides-data.ts +52 -0
  31. package/scripts/zap-xml-clusters-overrides.ts +400 -0
  32. package/scripts/zap-xml-types.ts +146 -0
  33. package/src/adapter/adapter.ts +210 -0
  34. package/src/adapter/adapterDiscovery.ts +736 -0
  35. package/src/adapter/const.ts +12 -0
  36. package/src/adapter/deconz/adapter/deconzAdapter.ts +888 -0
  37. package/src/adapter/deconz/driver/constants.ts +246 -0
  38. package/src/adapter/deconz/driver/driver.ts +1528 -0
  39. package/src/adapter/deconz/driver/frame.ts +11 -0
  40. package/src/adapter/deconz/driver/frameParser.ts +766 -0
  41. package/src/adapter/deconz/driver/parser.ts +45 -0
  42. package/src/adapter/deconz/driver/writer.ts +22 -0
  43. package/src/adapter/deconz/types.d.ts +13 -0
  44. package/src/adapter/ember/adapter/emberAdapter.ts +2262 -0
  45. package/src/adapter/ember/adapter/endpoints.ts +86 -0
  46. package/src/adapter/ember/adapter/oneWaitress.ts +324 -0
  47. package/src/adapter/ember/adapter/tokensManager.ts +780 -0
  48. package/src/adapter/ember/consts.ts +178 -0
  49. package/src/adapter/ember/enums.ts +1746 -0
  50. package/src/adapter/ember/ezsp/buffalo.ts +1392 -0
  51. package/src/adapter/ember/ezsp/consts.ts +148 -0
  52. package/src/adapter/ember/ezsp/enums.ts +1114 -0
  53. package/src/adapter/ember/ezsp/ezsp.ts +9073 -0
  54. package/src/adapter/ember/ezspError.ts +10 -0
  55. package/src/adapter/ember/types.ts +866 -0
  56. package/src/adapter/ember/uart/ash.ts +1933 -0
  57. package/src/adapter/ember/uart/consts.ts +109 -0
  58. package/src/adapter/ember/uart/enums.ts +192 -0
  59. package/src/adapter/ember/uart/parser.ts +42 -0
  60. package/src/adapter/ember/uart/queues.ts +247 -0
  61. package/src/adapter/ember/uart/writer.ts +50 -0
  62. package/src/adapter/ember/utils/initters.ts +58 -0
  63. package/src/adapter/ember/utils/math.ts +71 -0
  64. package/src/adapter/events.ts +21 -0
  65. package/src/adapter/ezsp/adapter/backup.ts +100 -0
  66. package/src/adapter/ezsp/adapter/ezspAdapter.ts +632 -0
  67. package/src/adapter/ezsp/driver/commands.ts +2497 -0
  68. package/src/adapter/ezsp/driver/consts.ts +11 -0
  69. package/src/adapter/ezsp/driver/driver.ts +1002 -0
  70. package/src/adapter/ezsp/driver/ezsp.ts +802 -0
  71. package/src/adapter/ezsp/driver/frame.ts +101 -0
  72. package/src/adapter/ezsp/driver/index.ts +4 -0
  73. package/src/adapter/ezsp/driver/multicast.ts +78 -0
  74. package/src/adapter/ezsp/driver/parser.ts +81 -0
  75. package/src/adapter/ezsp/driver/types/basic.ts +201 -0
  76. package/src/adapter/ezsp/driver/types/index.ts +239 -0
  77. package/src/adapter/ezsp/driver/types/named.ts +2330 -0
  78. package/src/adapter/ezsp/driver/types/struct.ts +844 -0
  79. package/src/adapter/ezsp/driver/uart.ts +460 -0
  80. package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +44 -0
  81. package/src/adapter/ezsp/driver/utils/index.ts +32 -0
  82. package/src/adapter/ezsp/driver/writer.ts +64 -0
  83. package/src/adapter/index.ts +3 -0
  84. package/src/adapter/serialPort.ts +58 -0
  85. package/src/adapter/tstype.ts +57 -0
  86. package/src/adapter/utils.ts +41 -0
  87. package/src/adapter/z-stack/adapter/adapter-backup.ts +509 -0
  88. package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
  89. package/src/adapter/z-stack/adapter/endpoints.ts +60 -0
  90. package/src/adapter/z-stack/adapter/manager.ts +543 -0
  91. package/src/adapter/z-stack/adapter/tstype.ts +6 -0
  92. package/src/adapter/z-stack/adapter/zStackAdapter.ts +1350 -0
  93. package/src/adapter/z-stack/constants/af.ts +27 -0
  94. package/src/adapter/z-stack/constants/common.ts +285 -0
  95. package/src/adapter/z-stack/constants/dbg.ts +23 -0
  96. package/src/adapter/z-stack/constants/index.ts +11 -0
  97. package/src/adapter/z-stack/constants/mac.ts +128 -0
  98. package/src/adapter/z-stack/constants/sapi.ts +25 -0
  99. package/src/adapter/z-stack/constants/sys.ts +72 -0
  100. package/src/adapter/z-stack/constants/util.ts +82 -0
  101. package/src/adapter/z-stack/constants/utils.ts +14 -0
  102. package/src/adapter/z-stack/constants/zdo.ts +103 -0
  103. package/src/adapter/z-stack/models/startup-options.ts +13 -0
  104. package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +44 -0
  105. package/src/adapter/z-stack/structs/entries/address-manager-table.ts +19 -0
  106. package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +12 -0
  107. package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +21 -0
  108. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +19 -0
  109. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +21 -0
  110. package/src/adapter/z-stack/structs/entries/channel-list.ts +8 -0
  111. package/src/adapter/z-stack/structs/entries/has-configured.ts +16 -0
  112. package/src/adapter/z-stack/structs/entries/index.ts +16 -0
  113. package/src/adapter/z-stack/structs/entries/nib.ts +66 -0
  114. package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +15 -0
  115. package/src/adapter/z-stack/structs/entries/nwk-key.ts +13 -0
  116. package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +8 -0
  117. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +20 -0
  118. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +19 -0
  119. package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +33 -0
  120. package/src/adapter/z-stack/structs/entries/security-manager-table.ts +22 -0
  121. package/src/adapter/z-stack/structs/index.ts +4 -0
  122. package/src/adapter/z-stack/structs/serializable-memory-object.ts +14 -0
  123. package/src/adapter/z-stack/structs/struct.ts +367 -0
  124. package/src/adapter/z-stack/structs/table.ts +198 -0
  125. package/src/adapter/z-stack/unpi/constants.ts +33 -0
  126. package/src/adapter/z-stack/unpi/frame.ts +62 -0
  127. package/src/adapter/z-stack/unpi/index.ts +4 -0
  128. package/src/adapter/z-stack/unpi/parser.ts +67 -0
  129. package/src/adapter/z-stack/unpi/writer.ts +37 -0
  130. package/src/adapter/z-stack/utils/channel-list.ts +40 -0
  131. package/src/adapter/z-stack/utils/index.ts +2 -0
  132. package/src/adapter/z-stack/utils/network-options.ts +26 -0
  133. package/src/adapter/z-stack/znp/buffaloZnp.ts +175 -0
  134. package/src/adapter/z-stack/znp/definition.ts +2713 -0
  135. package/src/adapter/z-stack/znp/index.ts +2 -0
  136. package/src/adapter/z-stack/znp/parameterType.ts +22 -0
  137. package/src/adapter/z-stack/znp/tstype.ts +44 -0
  138. package/src/adapter/z-stack/znp/utils.ts +10 -0
  139. package/src/adapter/z-stack/znp/znp.ts +345 -0
  140. package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
  141. package/src/adapter/zboss/adapter/zbossAdapter.ts +535 -0
  142. package/src/adapter/zboss/commands.ts +1184 -0
  143. package/src/adapter/zboss/consts.ts +9 -0
  144. package/src/adapter/zboss/driver.ts +422 -0
  145. package/src/adapter/zboss/enums.ts +360 -0
  146. package/src/adapter/zboss/frame.ts +227 -0
  147. package/src/adapter/zboss/reader.ts +65 -0
  148. package/src/adapter/zboss/types.ts +0 -0
  149. package/src/adapter/zboss/uart.ts +428 -0
  150. package/src/adapter/zboss/utils.ts +58 -0
  151. package/src/adapter/zboss/writer.ts +49 -0
  152. package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +25 -0
  153. package/src/adapter/zigate/adapter/zigateAdapter.ts +633 -0
  154. package/src/adapter/zigate/driver/LICENSE +17 -0
  155. package/src/adapter/zigate/driver/buffaloZiGate.ts +210 -0
  156. package/src/adapter/zigate/driver/commandType.ts +418 -0
  157. package/src/adapter/zigate/driver/constants.ts +150 -0
  158. package/src/adapter/zigate/driver/frame.ts +197 -0
  159. package/src/adapter/zigate/driver/messageType.ts +287 -0
  160. package/src/adapter/zigate/driver/parameterType.ts +32 -0
  161. package/src/adapter/zigate/driver/ziGateObject.ts +146 -0
  162. package/src/adapter/zigate/driver/zigate.ts +422 -0
  163. package/src/adapter/zoh/adapter/utils.ts +27 -0
  164. package/src/adapter/zoh/adapter/zohAdapter.ts +931 -0
  165. package/src/buffalo/buffalo.ts +336 -0
  166. package/src/buffalo/index.ts +1 -0
  167. package/src/controller/controller.ts +1159 -0
  168. package/src/controller/database.ts +148 -0
  169. package/src/controller/events.ts +52 -0
  170. package/src/controller/greenPower.ts +613 -0
  171. package/src/controller/helpers/index.ts +1 -0
  172. package/src/controller/helpers/installCodes.ts +107 -0
  173. package/src/controller/helpers/ota.ts +575 -0
  174. package/src/controller/helpers/request.ts +96 -0
  175. package/src/controller/helpers/requestQueue.ts +126 -0
  176. package/src/controller/helpers/zclFrameConverter.ts +64 -0
  177. package/src/controller/helpers/zclTransactionSequenceNumber.ts +15 -0
  178. package/src/controller/index.ts +6 -0
  179. package/src/controller/model/device.ts +1791 -0
  180. package/src/controller/model/endpoint.ts +1235 -0
  181. package/src/controller/model/entity.ts +43 -0
  182. package/src/controller/model/group.ts +446 -0
  183. package/src/controller/model/index.ts +5 -0
  184. package/src/controller/model/konnextConfig.ts +6 -0
  185. package/src/controller/model/zigbeeEntity.ts +30 -0
  186. package/src/controller/touchlink.ts +195 -0
  187. package/src/controller/tstype.ts +374 -0
  188. package/src/index.ts +14 -0
  189. package/src/models/backup-storage-legacy.ts +48 -0
  190. package/src/models/backup-storage-unified.ts +47 -0
  191. package/src/models/backup.ts +37 -0
  192. package/src/models/index.ts +5 -0
  193. package/src/models/network-options.ts +11 -0
  194. package/src/utils/aes.ts +218 -0
  195. package/src/utils/async-mutex.ts +31 -0
  196. package/src/utils/backup.ts +152 -0
  197. package/src/utils/index.ts +5 -0
  198. package/src/utils/logger.ts +20 -0
  199. package/src/utils/patchBigIntSerialization.ts +8 -0
  200. package/src/utils/queue.ts +79 -0
  201. package/src/utils/timeService.ts +139 -0
  202. package/src/utils/utils.ts +19 -0
  203. package/src/utils/wait.ts +5 -0
  204. package/src/utils/waitress.ts +96 -0
  205. package/src/zspec/consts.ts +89 -0
  206. package/src/zspec/enums.ts +22 -0
  207. package/src/zspec/index.ts +3 -0
  208. package/src/zspec/tstypes.ts +18 -0
  209. package/src/zspec/utils.ts +247 -0
  210. package/src/zspec/zcl/buffaloZcl.ts +1073 -0
  211. package/src/zspec/zcl/definition/cluster.ts +7845 -0
  212. package/src/zspec/zcl/definition/clusters-types.ts +8577 -0
  213. package/src/zspec/zcl/definition/consts.ts +24 -0
  214. package/src/zspec/zcl/definition/datatypes.ts +2454 -0
  215. package/src/zspec/zcl/definition/enums.ts +224 -0
  216. package/src/zspec/zcl/definition/foundation.ts +342 -0
  217. package/src/zspec/zcl/definition/manufacturerCode.ts +730 -0
  218. package/src/zspec/zcl/definition/status.ts +69 -0
  219. package/src/zspec/zcl/definition/tstype.ts +446 -0
  220. package/src/zspec/zcl/index.ts +11 -0
  221. package/src/zspec/zcl/utils.ts +521 -0
  222. package/src/zspec/zcl/zclFrame.ts +383 -0
  223. package/src/zspec/zcl/zclHeader.ts +102 -0
  224. package/src/zspec/zcl/zclStatusError.ts +10 -0
  225. package/src/zspec/zdo/buffaloZdo.ts +2336 -0
  226. package/src/zspec/zdo/definition/clusters.ts +722 -0
  227. package/src/zspec/zdo/definition/consts.ts +16 -0
  228. package/src/zspec/zdo/definition/enums.ts +99 -0
  229. package/src/zspec/zdo/definition/status.ts +105 -0
  230. package/src/zspec/zdo/definition/tstypes.ts +1062 -0
  231. package/src/zspec/zdo/index.ts +7 -0
  232. package/src/zspec/zdo/utils.ts +76 -0
  233. package/src/zspec/zdo/zdoStatusError.ts +10 -0
  234. package/test/adapter/adapter.test.ts +1276 -0
  235. package/test/adapter/ember/ash.test.ts +337 -0
  236. package/test/adapter/ember/consts.ts +131 -0
  237. package/test/adapter/ember/emberAdapter.test.ts +3447 -0
  238. package/test/adapter/ember/ezsp.test.ts +389 -0
  239. package/test/adapter/ember/ezspBuffalo.test.ts +93 -0
  240. package/test/adapter/ember/ezspError.test.ts +12 -0
  241. package/test/adapter/ember/math.test.ts +190 -0
  242. package/test/adapter/ezsp/frame.test.ts +30 -0
  243. package/test/adapter/ezsp/uart.test.ts +181 -0
  244. package/test/adapter/z-stack/adapter.test.ts +4260 -0
  245. package/test/adapter/z-stack/constants.test.ts +33 -0
  246. package/test/adapter/z-stack/structs.test.ts +115 -0
  247. package/test/adapter/z-stack/unpi.test.ts +213 -0
  248. package/test/adapter/z-stack/znp.test.ts +1288 -0
  249. package/test/adapter/zboss/fixZdoResponse.test.ts +179 -0
  250. package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +81 -0
  251. package/test/adapter/zigate/zdo.test.ts +187 -0
  252. package/test/adapter/zoh/utils.test.ts +36 -0
  253. package/test/adapter/zoh/zohAdapter.test.ts +1451 -0
  254. package/test/benchOptions.ts +14 -0
  255. package/test/buffalo.test.ts +431 -0
  256. package/test/controller.bench.ts +215 -0
  257. package/test/controller.test.ts +10030 -0
  258. package/test/data/integrity-code-1166-012B-24031511-upgradeMe-RB 249 T.zigbee +0 -0
  259. package/test/data/manuf-tags-tradfri-cv-cct-unified_release_prod_v587757105_33e34452-9267-4665-bc5a-844c8f61f063.ota +0 -0
  260. package/test/data/padded-tretakt_smart_plug_soc-0x1100-2.4.25-prod.ota.ota.signed +0 -0
  261. package/test/data/telink-aes-A60_RGBW_T-0x00B6-0x03483712-MF_DIS.OTA +0 -0
  262. package/test/data/zbminir2_v1.0.8.ota +0 -0
  263. package/test/device-ota.test.ts +3332 -0
  264. package/test/greenpower.test.ts +1409 -0
  265. package/test/mockAdapters.ts +95 -0
  266. package/test/mockDevices.ts +623 -0
  267. package/test/requests.bench.ts +321 -0
  268. package/test/testUtils.ts +20 -0
  269. package/test/timeService.test.ts +214 -0
  270. package/test/tsconfig.json +9 -0
  271. package/test/utils/math.ts +19 -0
  272. package/test/utils.test.ts +352 -0
  273. package/test/vitest.config.mts +28 -0
  274. package/test/vitest.ts +9 -0
  275. package/test/zcl.test.ts +2858 -0
  276. package/test/zspec/utils.test.ts +68 -0
  277. package/test/zspec/zcl/buffalo.test.ts +1316 -0
  278. package/test/zspec/zcl/frame.test.ts +1056 -0
  279. package/test/zspec/zcl/utils.test.ts +650 -0
  280. package/test/zspec/zdo/buffalo.test.ts +1850 -0
  281. package/test/zspec/zdo/utils.test.ts +241 -0
  282. package/tsconfig.json +8 -10
  283. package/.babelrc.js +0 -6
  284. package/.eslintignore +0 -3
  285. package/dist/adapter/adapter.d.ts +0 -64
  286. package/dist/adapter/adapter.d.ts.map +0 -1
  287. package/dist/adapter/adapter.js +0 -157
  288. package/dist/adapter/adapter.js.map +0 -1
  289. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -71
  290. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +0 -1
  291. package/dist/adapter/deconz/adapter/deconzAdapter.js +0 -1072
  292. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +0 -1
  293. package/dist/adapter/deconz/adapter/index.d.ts +0 -3
  294. package/dist/adapter/deconz/adapter/index.d.ts.map +0 -1
  295. package/dist/adapter/deconz/adapter/index.js +0 -11
  296. package/dist/adapter/deconz/adapter/index.js.map +0 -1
  297. package/dist/adapter/deconz/driver/constants.d.ts +0 -105
  298. package/dist/adapter/deconz/driver/constants.d.ts.map +0 -1
  299. package/dist/adapter/deconz/driver/constants.js +0 -56
  300. package/dist/adapter/deconz/driver/constants.js.map +0 -1
  301. package/dist/adapter/deconz/driver/driver.d.ts +0 -82
  302. package/dist/adapter/deconz/driver/driver.d.ts.map +0 -1
  303. package/dist/adapter/deconz/driver/driver.js +0 -751
  304. package/dist/adapter/deconz/driver/driver.js.map +0 -1
  305. package/dist/adapter/deconz/driver/frame.d.ts +0 -7
  306. package/dist/adapter/deconz/driver/frame.d.ts.map +0 -1
  307. package/dist/adapter/deconz/driver/frame.js +0 -14
  308. package/dist/adapter/deconz/driver/frame.js.map +0 -1
  309. package/dist/adapter/deconz/driver/frameParser.d.ts +0 -3
  310. package/dist/adapter/deconz/driver/frameParser.d.ts.map +0 -1
  311. package/dist/adapter/deconz/driver/frameParser.js +0 -444
  312. package/dist/adapter/deconz/driver/frameParser.js.map +0 -1
  313. package/dist/adapter/deconz/driver/parser.d.ts +0 -13
  314. package/dist/adapter/deconz/driver/parser.d.ts.map +0 -1
  315. package/dist/adapter/deconz/driver/parser.js +0 -64
  316. package/dist/adapter/deconz/driver/parser.js.map +0 -1
  317. package/dist/adapter/deconz/driver/writer.d.ts +0 -9
  318. package/dist/adapter/deconz/driver/writer.d.ts.map +0 -1
  319. package/dist/adapter/deconz/driver/writer.js +0 -45
  320. package/dist/adapter/deconz/driver/writer.js.map +0 -1
  321. package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -806
  322. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +0 -1
  323. package/dist/adapter/ember/adapter/emberAdapter.js +0 -2942
  324. package/dist/adapter/ember/adapter/emberAdapter.js.map +0 -1
  325. package/dist/adapter/ember/adapter/endpoints.d.ts +0 -27
  326. package/dist/adapter/ember/adapter/endpoints.d.ts.map +0 -1
  327. package/dist/adapter/ember/adapter/endpoints.js +0 -68
  328. package/dist/adapter/ember/adapter/endpoints.js.map +0 -1
  329. package/dist/adapter/ember/adapter/index.d.ts +0 -3
  330. package/dist/adapter/ember/adapter/index.d.ts.map +0 -1
  331. package/dist/adapter/ember/adapter/index.js +0 -6
  332. package/dist/adapter/ember/adapter/index.js.map +0 -1
  333. package/dist/adapter/ember/adapter/oneWaitress.d.ts +0 -108
  334. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +0 -1
  335. package/dist/adapter/ember/adapter/oneWaitress.js +0 -241
  336. package/dist/adapter/ember/adapter/oneWaitress.js.map +0 -1
  337. package/dist/adapter/ember/adapter/requestQueue.d.ts +0 -57
  338. package/dist/adapter/ember/adapter/requestQueue.d.ts.map +0 -1
  339. package/dist/adapter/ember/adapter/requestQueue.js +0 -139
  340. package/dist/adapter/ember/adapter/requestQueue.js.map +0 -1
  341. package/dist/adapter/ember/adapter/tokensManager.d.ts +0 -69
  342. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +0 -1
  343. package/dist/adapter/ember/adapter/tokensManager.js +0 -688
  344. package/dist/adapter/ember/adapter/tokensManager.js.map +0 -1
  345. package/dist/adapter/ember/consts.d.ts +0 -191
  346. package/dist/adapter/ember/consts.d.ts.map +0 -1
  347. package/dist/adapter/ember/consts.js +0 -246
  348. package/dist/adapter/ember/consts.js.map +0 -1
  349. package/dist/adapter/ember/enums.d.ts +0 -2172
  350. package/dist/adapter/ember/enums.d.ts.map +0 -1
  351. package/dist/adapter/ember/enums.js +0 -2375
  352. package/dist/adapter/ember/enums.js.map +0 -1
  353. package/dist/adapter/ember/ezsp/buffalo.d.ts +0 -156
  354. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +0 -1
  355. package/dist/adapter/ember/ezsp/buffalo.js +0 -1033
  356. package/dist/adapter/ember/ezsp/buffalo.js.map +0 -1
  357. package/dist/adapter/ember/ezsp/consts.d.ts +0 -116
  358. package/dist/adapter/ember/ezsp/consts.d.ts.map +0 -1
  359. package/dist/adapter/ember/ezsp/consts.js +0 -128
  360. package/dist/adapter/ember/ezsp/consts.js.map +0 -1
  361. package/dist/adapter/ember/ezsp/enums.d.ts +0 -879
  362. package/dist/adapter/ember/ezsp/enums.d.ts.map +0 -1
  363. package/dist/adapter/ember/ezsp/enums.js +0 -948
  364. package/dist/adapter/ember/ezsp/enums.js.map +0 -1
  365. package/dist/adapter/ember/ezsp/ezsp.d.ts +0 -2662
  366. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +0 -1
  367. package/dist/adapter/ember/ezsp/ezsp.js +0 -6454
  368. package/dist/adapter/ember/ezsp/ezsp.js.map +0 -1
  369. package/dist/adapter/ember/types.d.ts +0 -733
  370. package/dist/adapter/ember/types.d.ts.map +0 -1
  371. package/dist/adapter/ember/types.js +0 -3
  372. package/dist/adapter/ember/types.js.map +0 -1
  373. package/dist/adapter/ember/uart/ash.d.ts +0 -464
  374. package/dist/adapter/ember/uart/ash.d.ts.map +0 -1
  375. package/dist/adapter/ember/uart/ash.js +0 -1633
  376. package/dist/adapter/ember/uart/ash.js.map +0 -1
  377. package/dist/adapter/ember/uart/consts.d.ts +0 -91
  378. package/dist/adapter/ember/uart/consts.d.ts.map +0 -1
  379. package/dist/adapter/ember/uart/consts.js +0 -100
  380. package/dist/adapter/ember/uart/consts.js.map +0 -1
  381. package/dist/adapter/ember/uart/enums.d.ts +0 -191
  382. package/dist/adapter/ember/uart/enums.d.ts.map +0 -1
  383. package/dist/adapter/ember/uart/enums.js +0 -197
  384. package/dist/adapter/ember/uart/enums.js.map +0 -1
  385. package/dist/adapter/ember/uart/parser.d.ts +0 -10
  386. package/dist/adapter/ember/uart/parser.d.ts.map +0 -1
  387. package/dist/adapter/ember/uart/parser.js +0 -37
  388. package/dist/adapter/ember/uart/parser.js.map +0 -1
  389. package/dist/adapter/ember/uart/queues.d.ts +0 -85
  390. package/dist/adapter/ember/uart/queues.d.ts.map +0 -1
  391. package/dist/adapter/ember/uart/queues.js +0 -214
  392. package/dist/adapter/ember/uart/queues.js.map +0 -1
  393. package/dist/adapter/ember/uart/writer.d.ts +0 -15
  394. package/dist/adapter/ember/uart/writer.d.ts.map +0 -1
  395. package/dist/adapter/ember/uart/writer.js +0 -46
  396. package/dist/adapter/ember/uart/writer.js.map +0 -1
  397. package/dist/adapter/ember/utils/initters.d.ts +0 -20
  398. package/dist/adapter/ember/utils/initters.d.ts.map +0 -1
  399. package/dist/adapter/ember/utils/initters.js +0 -58
  400. package/dist/adapter/ember/utils/initters.js.map +0 -1
  401. package/dist/adapter/ember/utils/math.d.ts +0 -51
  402. package/dist/adapter/ember/utils/math.d.ts.map +0 -1
  403. package/dist/adapter/ember/utils/math.js +0 -102
  404. package/dist/adapter/ember/utils/math.js.map +0 -1
  405. package/dist/adapter/ember/zdo.d.ts +0 -925
  406. package/dist/adapter/ember/zdo.d.ts.map +0 -1
  407. package/dist/adapter/ember/zdo.js +0 -723
  408. package/dist/adapter/ember/zdo.js.map +0 -1
  409. package/dist/adapter/events.d.ts +0 -42
  410. package/dist/adapter/events.d.ts.map +0 -1
  411. package/dist/adapter/events.js +0 -13
  412. package/dist/adapter/events.js.map +0 -1
  413. package/dist/adapter/ezsp/adapter/backup.d.ts +0 -13
  414. package/dist/adapter/ezsp/adapter/backup.d.ts.map +0 -1
  415. package/dist/adapter/ezsp/adapter/backup.js +0 -101
  416. package/dist/adapter/ezsp/adapter/backup.js.map +0 -1
  417. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -65
  418. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +0 -1
  419. package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -634
  420. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +0 -1
  421. package/dist/adapter/ezsp/adapter/index.d.ts +0 -3
  422. package/dist/adapter/ezsp/adapter/index.d.ts.map +0 -1
  423. package/dist/adapter/ezsp/adapter/index.js +0 -11
  424. package/dist/adapter/ezsp/adapter/index.js.map +0 -1
  425. package/dist/adapter/ezsp/driver/commands.d.ts +0 -37
  426. package/dist/adapter/ezsp/driver/commands.d.ts.map +0 -1
  427. package/dist/adapter/ezsp/driver/commands.js +0 -2387
  428. package/dist/adapter/ezsp/driver/commands.js.map +0 -1
  429. package/dist/adapter/ezsp/driver/consts.d.ts +0 -11
  430. package/dist/adapter/ezsp/driver/consts.d.ts.map +0 -1
  431. package/dist/adapter/ezsp/driver/consts.js +0 -14
  432. package/dist/adapter/ezsp/driver/consts.js.map +0 -1
  433. package/dist/adapter/ezsp/driver/driver.d.ts +0 -109
  434. package/dist/adapter/ezsp/driver/driver.d.ts.map +0 -1
  435. package/dist/adapter/ezsp/driver/driver.js +0 -796
  436. package/dist/adapter/ezsp/driver/driver.js.map +0 -1
  437. package/dist/adapter/ezsp/driver/ezsp.d.ts +0 -106
  438. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +0 -1
  439. package/dist/adapter/ezsp/driver/ezsp.js +0 -664
  440. package/dist/adapter/ezsp/driver/ezsp.js.map +0 -1
  441. package/dist/adapter/ezsp/driver/frame.d.ts +0 -40
  442. package/dist/adapter/ezsp/driver/frame.d.ts.map +0 -1
  443. package/dist/adapter/ezsp/driver/frame.js +0 -101
  444. package/dist/adapter/ezsp/driver/frame.js.map +0 -1
  445. package/dist/adapter/ezsp/driver/index.d.ts +0 -4
  446. package/dist/adapter/ezsp/driver/index.d.ts.map +0 -1
  447. package/dist/adapter/ezsp/driver/index.js +0 -9
  448. package/dist/adapter/ezsp/driver/index.js.map +0 -1
  449. package/dist/adapter/ezsp/driver/multicast.d.ts +0 -13
  450. package/dist/adapter/ezsp/driver/multicast.d.ts.map +0 -1
  451. package/dist/adapter/ezsp/driver/multicast.js +0 -74
  452. package/dist/adapter/ezsp/driver/multicast.js.map +0 -1
  453. package/dist/adapter/ezsp/driver/parser.d.ts +0 -12
  454. package/dist/adapter/ezsp/driver/parser.d.ts.map +0 -1
  455. package/dist/adapter/ezsp/driver/parser.js +0 -105
  456. package/dist/adapter/ezsp/driver/parser.js.map +0 -1
  457. package/dist/adapter/ezsp/driver/types/basic.d.ts +0 -63
  458. package/dist/adapter/ezsp/driver/types/basic.d.ts.map +0 -1
  459. package/dist/adapter/ezsp/driver/types/basic.js +0 -209
  460. package/dist/adapter/ezsp/driver/types/basic.js.map +0 -1
  461. package/dist/adapter/ezsp/driver/types/index.d.ts +0 -10
  462. package/dist/adapter/ezsp/driver/types/index.d.ts.map +0 -1
  463. package/dist/adapter/ezsp/driver/types/index.js +0 -139
  464. package/dist/adapter/ezsp/driver/types/index.js.map +0 -1
  465. package/dist/adapter/ezsp/driver/types/named.d.ts +0 -1288
  466. package/dist/adapter/ezsp/driver/types/named.d.ts.map +0 -1
  467. package/dist/adapter/ezsp/driver/types/named.js +0 -2330
  468. package/dist/adapter/ezsp/driver/types/named.js.map +0 -1
  469. package/dist/adapter/ezsp/driver/types/struct.d.ts +0 -271
  470. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +0 -1
  471. package/dist/adapter/ezsp/driver/types/struct.js +0 -804
  472. package/dist/adapter/ezsp/driver/types/struct.js.map +0 -1
  473. package/dist/adapter/ezsp/driver/uart.d.ts +0 -49
  474. package/dist/adapter/ezsp/driver/uart.d.ts.map +0 -1
  475. package/dist/adapter/ezsp/driver/uart.js +0 -383
  476. package/dist/adapter/ezsp/driver/uart.js.map +0 -1
  477. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +0 -3
  478. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +0 -1
  479. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +0 -56
  480. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +0 -1
  481. package/dist/adapter/ezsp/driver/utils/index.d.ts +0 -20
  482. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +0 -1
  483. package/dist/adapter/ezsp/driver/utils/index.js +0 -73
  484. package/dist/adapter/ezsp/driver/utils/index.js.map +0 -1
  485. package/dist/adapter/ezsp/driver/writer.d.ts +0 -14
  486. package/dist/adapter/ezsp/driver/writer.d.ts.map +0 -1
  487. package/dist/adapter/ezsp/driver/writer.js +0 -83
  488. package/dist/adapter/ezsp/driver/writer.js.map +0 -1
  489. package/dist/adapter/index.d.ts +0 -5
  490. package/dist/adapter/index.d.ts.map +0 -1
  491. package/dist/adapter/index.js +0 -36
  492. package/dist/adapter/index.js.map +0 -1
  493. package/dist/adapter/serialPort.d.ts +0 -14
  494. package/dist/adapter/serialPort.d.ts.map +0 -1
  495. package/dist/adapter/serialPort.js +0 -47
  496. package/dist/adapter/serialPort.js.map +0 -1
  497. package/dist/adapter/serialPortUtils.d.ts +0 -13
  498. package/dist/adapter/serialPortUtils.d.ts.map +0 -1
  499. package/dist/adapter/serialPortUtils.js +0 -19
  500. package/dist/adapter/serialPortUtils.js.map +0 -1
  501. package/dist/adapter/socketPortUtils.d.ts +0 -11
  502. package/dist/adapter/socketPortUtils.d.ts.map +0 -1
  503. package/dist/adapter/socketPortUtils.js +0 -17
  504. package/dist/adapter/socketPortUtils.js.map +0 -1
  505. package/dist/adapter/tstype.d.ts +0 -86
  506. package/dist/adapter/tstype.d.ts.map +0 -1
  507. package/dist/adapter/tstype.js +0 -3
  508. package/dist/adapter/tstype.js.map +0 -1
  509. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -62
  510. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +0 -1
  511. package/dist/adapter/z-stack/adapter/adapter-backup.js +0 -459
  512. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +0 -1
  513. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +0 -151
  514. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +0 -1
  515. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +0 -259
  516. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +0 -1
  517. package/dist/adapter/z-stack/adapter/endpoints.d.ts +0 -12
  518. package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +0 -1
  519. package/dist/adapter/z-stack/adapter/endpoints.js +0 -74
  520. package/dist/adapter/z-stack/adapter/endpoints.js.map +0 -1
  521. package/dist/adapter/z-stack/adapter/index.d.ts +0 -3
  522. package/dist/adapter/z-stack/adapter/index.d.ts.map +0 -1
  523. package/dist/adapter/z-stack/adapter/index.js +0 -9
  524. package/dist/adapter/z-stack/adapter/index.js.map +0 -1
  525. package/dist/adapter/z-stack/adapter/manager.d.ts +0 -84
  526. package/dist/adapter/z-stack/adapter/manager.d.ts.map +0 -1
  527. package/dist/adapter/z-stack/adapter/manager.js +0 -474
  528. package/dist/adapter/z-stack/adapter/manager.js.map +0 -1
  529. package/dist/adapter/z-stack/adapter/tstype.d.ts +0 -7
  530. package/dist/adapter/z-stack/adapter/tstype.d.ts.map +0 -1
  531. package/dist/adapter/z-stack/adapter/tstype.js +0 -10
  532. package/dist/adapter/z-stack/adapter/tstype.js.map +0 -1
  533. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -86
  534. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +0 -1
  535. package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -912
  536. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +0 -1
  537. package/dist/adapter/z-stack/constants/af.d.ts +0 -24
  538. package/dist/adapter/z-stack/constants/af.d.ts.map +0 -1
  539. package/dist/adapter/z-stack/constants/af.js +0 -28
  540. package/dist/adapter/z-stack/constants/af.js.map +0 -1
  541. package/dist/adapter/z-stack/constants/common.d.ts +0 -279
  542. package/dist/adapter/z-stack/constants/common.d.ts.map +0 -1
  543. package/dist/adapter/z-stack/constants/common.js +0 -293
  544. package/dist/adapter/z-stack/constants/common.js.map +0 -1
  545. package/dist/adapter/z-stack/constants/dbg.d.ts +0 -23
  546. package/dist/adapter/z-stack/constants/dbg.d.ts.map +0 -1
  547. package/dist/adapter/z-stack/constants/dbg.js +0 -25
  548. package/dist/adapter/z-stack/constants/dbg.js.map +0 -1
  549. package/dist/adapter/z-stack/constants/index.d.ts +0 -11
  550. package/dist/adapter/z-stack/constants/index.d.ts.map +0 -1
  551. package/dist/adapter/z-stack/constants/index.js +0 -48
  552. package/dist/adapter/z-stack/constants/index.js.map +0 -1
  553. package/dist/adapter/z-stack/constants/mac.d.ts +0 -128
  554. package/dist/adapter/z-stack/constants/mac.d.ts.map +0 -1
  555. package/dist/adapter/z-stack/constants/mac.js +0 -130
  556. package/dist/adapter/z-stack/constants/mac.js.map +0 -1
  557. package/dist/adapter/z-stack/constants/sapi.d.ts +0 -25
  558. package/dist/adapter/z-stack/constants/sapi.d.ts.map +0 -1
  559. package/dist/adapter/z-stack/constants/sapi.js +0 -27
  560. package/dist/adapter/z-stack/constants/sapi.js.map +0 -1
  561. package/dist/adapter/z-stack/constants/sys.d.ts +0 -72
  562. package/dist/adapter/z-stack/constants/sys.d.ts.map +0 -1
  563. package/dist/adapter/z-stack/constants/sys.js +0 -74
  564. package/dist/adapter/z-stack/constants/sys.js.map +0 -1
  565. package/dist/adapter/z-stack/constants/util.d.ts +0 -82
  566. package/dist/adapter/z-stack/constants/util.d.ts.map +0 -1
  567. package/dist/adapter/z-stack/constants/util.js +0 -84
  568. package/dist/adapter/z-stack/constants/util.js.map +0 -1
  569. package/dist/adapter/z-stack/constants/utils.d.ts +0 -5
  570. package/dist/adapter/z-stack/constants/utils.d.ts.map +0 -1
  571. package/dist/adapter/z-stack/constants/utils.js +0 -15
  572. package/dist/adapter/z-stack/constants/utils.js.map +0 -1
  573. package/dist/adapter/z-stack/constants/zdo.d.ts +0 -103
  574. package/dist/adapter/z-stack/constants/zdo.d.ts.map +0 -1
  575. package/dist/adapter/z-stack/constants/zdo.js +0 -105
  576. package/dist/adapter/z-stack/constants/zdo.js.map +0 -1
  577. package/dist/adapter/z-stack/models/index.d.ts +0 -2
  578. package/dist/adapter/z-stack/models/index.d.ts.map +0 -1
  579. package/dist/adapter/z-stack/models/index.js +0 -18
  580. package/dist/adapter/z-stack/models/index.js.map +0 -1
  581. package/dist/adapter/z-stack/models/startup-options.d.ts +0 -13
  582. package/dist/adapter/z-stack/models/startup-options.d.ts.map +0 -1
  583. package/dist/adapter/z-stack/models/startup-options.js +0 -3
  584. package/dist/adapter/z-stack/models/startup-options.js.map +0 -1
  585. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +0 -24
  586. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +0 -1
  587. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +0 -46
  588. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +0 -1
  589. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +0 -11
  590. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +0 -1
  591. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +0 -23
  592. package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +0 -1
  593. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +0 -11
  594. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +0 -1
  595. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +0 -22
  596. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +0 -1
  597. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +0 -11
  598. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +0 -1
  599. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +0 -24
  600. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +0 -1
  601. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +0 -11
  602. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +0 -1
  603. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +0 -25
  604. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +0 -1
  605. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +0 -11
  606. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +0 -1
  607. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +0 -24
  608. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +0 -1
  609. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +0 -9
  610. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +0 -1
  611. package/dist/adapter/z-stack/structs/entries/channel-list.js +0 -16
  612. package/dist/adapter/z-stack/structs/entries/channel-list.js.map +0 -1
  613. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +0 -9
  614. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +0 -1
  615. package/dist/adapter/z-stack/structs/entries/has-configured.js +0 -17
  616. package/dist/adapter/z-stack/structs/entries/has-configured.js.map +0 -1
  617. package/dist/adapter/z-stack/structs/entries/index.d.ts +0 -17
  618. package/dist/adapter/z-stack/structs/entries/index.d.ts.map +0 -1
  619. package/dist/adapter/z-stack/structs/entries/index.js +0 -33
  620. package/dist/adapter/z-stack/structs/entries/index.js.map +0 -1
  621. package/dist/adapter/z-stack/structs/entries/nib.d.ts +0 -11
  622. package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +0 -1
  623. package/dist/adapter/z-stack/structs/entries/nib.js +0 -69
  624. package/dist/adapter/z-stack/structs/entries/nib.js.map +0 -1
  625. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +0 -11
  626. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +0 -1
  627. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +0 -19
  628. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +0 -1
  629. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +0 -9
  630. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +0 -1
  631. package/dist/adapter/z-stack/structs/entries/nwk-key.js +0 -16
  632. package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +0 -1
  633. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +0 -9
  634. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +0 -1
  635. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +0 -16
  636. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +0 -1
  637. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +0 -14
  638. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +0 -1
  639. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +0 -24
  640. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +0 -1
  641. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +0 -11
  642. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +0 -1
  643. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +0 -23
  644. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +0 -1
  645. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +0 -21
  646. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +0 -1
  647. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +0 -37
  648. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +0 -1
  649. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +0 -11
  650. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +0 -1
  651. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +0 -25
  652. package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +0 -1
  653. package/dist/adapter/z-stack/structs/index.d.ts +0 -5
  654. package/dist/adapter/z-stack/structs/index.d.ts.map +0 -1
  655. package/dist/adapter/z-stack/structs/index.js +0 -21
  656. package/dist/adapter/z-stack/structs/index.js.map +0 -1
  657. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +0 -14
  658. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +0 -1
  659. package/dist/adapter/z-stack/structs/serializable-memory-object.js +0 -3
  660. package/dist/adapter/z-stack/structs/serializable-memory-object.js.map +0 -1
  661. package/dist/adapter/z-stack/structs/struct.d.ts +0 -100
  662. package/dist/adapter/z-stack/structs/struct.d.ts.map +0 -1
  663. package/dist/adapter/z-stack/structs/struct.js +0 -297
  664. package/dist/adapter/z-stack/structs/struct.js.map +0 -1
  665. package/dist/adapter/z-stack/structs/table.d.ts +0 -95
  666. package/dist/adapter/z-stack/structs/table.d.ts.map +0 -1
  667. package/dist/adapter/z-stack/structs/table.js +0 -164
  668. package/dist/adapter/z-stack/structs/table.js.map +0 -1
  669. package/dist/adapter/z-stack/unpi/constants.d.ts +0 -29
  670. package/dist/adapter/z-stack/unpi/constants.d.ts.map +0 -1
  671. package/dist/adapter/z-stack/unpi/constants.js +0 -40
  672. package/dist/adapter/z-stack/unpi/constants.js.map +0 -1
  673. package/dist/adapter/z-stack/unpi/frame.d.ts +0 -17
  674. package/dist/adapter/z-stack/unpi/frame.d.ts.map +0 -1
  675. package/dist/adapter/z-stack/unpi/frame.js +0 -55
  676. package/dist/adapter/z-stack/unpi/frame.js.map +0 -1
  677. package/dist/adapter/z-stack/unpi/index.d.ts +0 -6
  678. package/dist/adapter/z-stack/unpi/index.d.ts.map +0 -1
  679. package/dist/adapter/z-stack/unpi/index.js +0 -38
  680. package/dist/adapter/z-stack/unpi/index.js.map +0 -1
  681. package/dist/adapter/z-stack/unpi/parser.d.ts +0 -13
  682. package/dist/adapter/z-stack/unpi/parser.d.ts.map +0 -1
  683. package/dist/adapter/z-stack/unpi/parser.js +0 -86
  684. package/dist/adapter/z-stack/unpi/parser.js.map +0 -1
  685. package/dist/adapter/z-stack/unpi/writer.d.ts +0 -12
  686. package/dist/adapter/z-stack/unpi/writer.d.ts.map +0 -1
  687. package/dist/adapter/z-stack/unpi/writer.js +0 -55
  688. package/dist/adapter/z-stack/unpi/writer.js.map +0 -1
  689. package/dist/adapter/z-stack/utils/channel-list.d.ts +0 -21
  690. package/dist/adapter/z-stack/utils/channel-list.d.ts.map +0 -1
  691. package/dist/adapter/z-stack/utils/channel-list.js +0 -41
  692. package/dist/adapter/z-stack/utils/channel-list.js.map +0 -1
  693. package/dist/adapter/z-stack/utils/index.d.ts +0 -3
  694. package/dist/adapter/z-stack/utils/index.d.ts.map +0 -1
  695. package/dist/adapter/z-stack/utils/index.js +0 -19
  696. package/dist/adapter/z-stack/utils/index.js.map +0 -1
  697. package/dist/adapter/z-stack/utils/network-options.d.ts +0 -9
  698. package/dist/adapter/z-stack/utils/network-options.d.ts.map +0 -1
  699. package/dist/adapter/z-stack/utils/network-options.js +0 -23
  700. package/dist/adapter/z-stack/utils/network-options.js.map +0 -1
  701. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +0 -14
  702. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +0 -1
  703. package/dist/adapter/z-stack/znp/buffaloZnp.js +0 -243
  704. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +0 -1
  705. package/dist/adapter/z-stack/znp/definition.d.ts +0 -6
  706. package/dist/adapter/z-stack/znp/definition.d.ts.map +0 -1
  707. package/dist/adapter/z-stack/znp/definition.js +0 -3052
  708. package/dist/adapter/z-stack/znp/definition.js.map +0 -1
  709. package/dist/adapter/z-stack/znp/index.d.ts +0 -4
  710. package/dist/adapter/z-stack/znp/index.d.ts.map +0 -1
  711. package/dist/adapter/z-stack/znp/index.js +0 -11
  712. package/dist/adapter/z-stack/znp/index.js.map +0 -1
  713. package/dist/adapter/z-stack/znp/parameterType.d.ts +0 -23
  714. package/dist/adapter/z-stack/znp/parameterType.d.ts.map +0 -1
  715. package/dist/adapter/z-stack/znp/parameterType.js +0 -26
  716. package/dist/adapter/z-stack/znp/parameterType.js.map +0 -1
  717. package/dist/adapter/z-stack/znp/tstype.d.ts +0 -23
  718. package/dist/adapter/z-stack/znp/tstype.d.ts.map +0 -1
  719. package/dist/adapter/z-stack/znp/tstype.js +0 -3
  720. package/dist/adapter/z-stack/znp/tstype.js.map +0 -1
  721. package/dist/adapter/z-stack/znp/znp.d.ts +0 -47
  722. package/dist/adapter/z-stack/znp/znp.d.ts.map +0 -1
  723. package/dist/adapter/z-stack/znp/znp.js +0 -322
  724. package/dist/adapter/z-stack/znp/znp.js.map +0 -1
  725. package/dist/adapter/z-stack/znp/zpiObject.d.ts +0 -20
  726. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +0 -1
  727. package/dist/adapter/z-stack/znp/zpiObject.js +0 -103
  728. package/dist/adapter/z-stack/znp/zpiObject.js.map +0 -1
  729. package/dist/adapter/zigate/adapter/index.d.ts +0 -3
  730. package/dist/adapter/zigate/adapter/index.d.ts.map +0 -1
  731. package/dist/adapter/zigate/adapter/index.js +0 -11
  732. package/dist/adapter/zigate/adapter/index.js.map +0 -1
  733. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -72
  734. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +0 -1
  735. package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -681
  736. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +0 -1
  737. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +0 -18
  738. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +0 -1
  739. package/dist/adapter/zigate/driver/buffaloZiGate.js +0 -190
  740. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +0 -1
  741. package/dist/adapter/zigate/driver/commandType.d.ts +0 -43
  742. package/dist/adapter/zigate/driver/commandType.d.ts.map +0 -1
  743. package/dist/adapter/zigate/driver/commandType.js +0 -390
  744. package/dist/adapter/zigate/driver/commandType.js.map +0 -1
  745. package/dist/adapter/zigate/driver/constants.d.ts +0 -277
  746. package/dist/adapter/zigate/driver/constants.d.ts.map +0 -1
  747. package/dist/adapter/zigate/driver/constants.js +0 -372
  748. package/dist/adapter/zigate/driver/constants.js.map +0 -1
  749. package/dist/adapter/zigate/driver/frame.d.ts +0 -27
  750. package/dist/adapter/zigate/driver/frame.d.ts.map +0 -1
  751. package/dist/adapter/zigate/driver/frame.js +0 -173
  752. package/dist/adapter/zigate/driver/frame.js.map +0 -1
  753. package/dist/adapter/zigate/driver/messageType.d.ts +0 -13
  754. package/dist/adapter/zigate/driver/messageType.d.ts.map +0 -1
  755. package/dist/adapter/zigate/driver/messageType.js +0 -284
  756. package/dist/adapter/zigate/driver/messageType.js.map +0 -1
  757. package/dist/adapter/zigate/driver/parameterType.d.ts +0 -28
  758. package/dist/adapter/zigate/driver/parameterType.d.ts.map +0 -1
  759. package/dist/adapter/zigate/driver/parameterType.js +0 -33
  760. package/dist/adapter/zigate/driver/parameterType.js.map +0 -1
  761. package/dist/adapter/zigate/driver/ziGateObject.d.ts +0 -24
  762. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +0 -1
  763. package/dist/adapter/zigate/driver/ziGateObject.js +0 -111
  764. package/dist/adapter/zigate/driver/ziGateObject.js.map +0 -1
  765. package/dist/adapter/zigate/driver/zigate.d.ts +0 -50
  766. package/dist/adapter/zigate/driver/zigate.d.ts.map +0 -1
  767. package/dist/adapter/zigate/driver/zigate.js +0 -289
  768. package/dist/adapter/zigate/driver/zigate.js.map +0 -1
  769. package/dist/buffalo/buffalo.d.ts +0 -55
  770. package/dist/buffalo/buffalo.d.ts.map +0 -1
  771. package/dist/buffalo/buffalo.js +0 -230
  772. package/dist/buffalo/buffalo.js.map +0 -1
  773. package/dist/buffalo/index.d.ts +0 -3
  774. package/dist/buffalo/index.d.ts.map +0 -1
  775. package/dist/buffalo/index.js +0 -9
  776. package/dist/buffalo/index.js.map +0 -1
  777. package/dist/controller/controller.d.ts +0 -119
  778. package/dist/controller/controller.d.ts.map +0 -1
  779. package/dist/controller/controller.js +0 -700
  780. package/dist/controller/controller.js.map +0 -1
  781. package/dist/controller/database.d.ts +0 -20
  782. package/dist/controller/database.d.ts.map +0 -1
  783. package/dist/controller/database.js +0 -94
  784. package/dist/controller/database.js.map +0 -1
  785. package/dist/controller/events.d.ts +0 -59
  786. package/dist/controller/events.d.ts.map +0 -1
  787. package/dist/controller/events.js +0 -113
  788. package/dist/controller/events.js.map +0 -1
  789. package/dist/controller/greenPower.d.ts +0 -14
  790. package/dist/controller/greenPower.d.ts.map +0 -1
  791. package/dist/controller/greenPower.js +0 -216
  792. package/dist/controller/greenPower.js.map +0 -1
  793. package/dist/controller/helpers/index.d.ts +0 -3
  794. package/dist/controller/helpers/index.d.ts.map +0 -1
  795. package/dist/controller/helpers/index.js +0 -29
  796. package/dist/controller/helpers/index.js.map +0 -1
  797. package/dist/controller/helpers/request.d.ts +0 -22
  798. package/dist/controller/helpers/request.d.ts.map +0 -1
  799. package/dist/controller/helpers/request.js +0 -78
  800. package/dist/controller/helpers/request.js.map +0 -1
  801. package/dist/controller/helpers/requestQueue.d.ts +0 -13
  802. package/dist/controller/helpers/requestQueue.d.ts.map +0 -1
  803. package/dist/controller/helpers/requestQueue.js +0 -106
  804. package/dist/controller/helpers/requestQueue.js.map +0 -1
  805. package/dist/controller/helpers/zclFrameConverter.d.ts +0 -9
  806. package/dist/controller/helpers/zclFrameConverter.d.ts.map +0 -1
  807. package/dist/controller/helpers/zclFrameConverter.js +0 -70
  808. package/dist/controller/helpers/zclFrameConverter.js.map +0 -1
  809. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +0 -6
  810. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +0 -1
  811. package/dist/controller/helpers/zclTransactionSequenceNumber.js +0 -14
  812. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +0 -1
  813. package/dist/controller/index.d.ts +0 -6
  814. package/dist/controller/index.d.ts.map +0 -1
  815. package/dist/controller/index.js +0 -9
  816. package/dist/controller/index.js.map +0 -1
  817. package/dist/controller/model/device.d.ts +0 -140
  818. package/dist/controller/model/device.d.ts.map +0 -1
  819. package/dist/controller/model/device.js +0 -746
  820. package/dist/controller/model/device.js.map +0 -1
  821. package/dist/controller/model/endpoint.d.ts +0 -134
  822. package/dist/controller/model/endpoint.d.ts.map +0 -1
  823. package/dist/controller/model/endpoint.js +0 -667
  824. package/dist/controller/model/endpoint.js.map +0 -1
  825. package/dist/controller/model/entity.d.ts +0 -15
  826. package/dist/controller/model/entity.d.ts.map +0 -1
  827. package/dist/controller/model/entity.js +0 -27
  828. package/dist/controller/model/entity.js.map +0 -1
  829. package/dist/controller/model/group.d.ts +0 -39
  830. package/dist/controller/model/group.d.ts.map +0 -1
  831. package/dist/controller/model/group.js +0 -226
  832. package/dist/controller/model/group.js.map +0 -1
  833. package/dist/controller/model/index.d.ts +0 -6
  834. package/dist/controller/model/index.d.ts.map +0 -1
  835. package/dist/controller/model/index.js +0 -15
  836. package/dist/controller/model/index.js.map +0 -1
  837. package/dist/controller/model/konnextConfig.d.ts +0 -7
  838. package/dist/controller/model/konnextConfig.d.ts.map +0 -1
  839. package/dist/controller/model/konnextConfig.js +0 -3
  840. package/dist/controller/model/konnextConfig.js.map +0 -1
  841. package/dist/controller/touchlink.d.ts +0 -20
  842. package/dist/controller/touchlink.d.ts.map +0 -1
  843. package/dist/controller/touchlink.js +0 -157
  844. package/dist/controller/touchlink.js.map +0 -1
  845. package/dist/controller/tstype.d.ts +0 -21
  846. package/dist/controller/tstype.d.ts.map +0 -1
  847. package/dist/controller/tstype.js +0 -9
  848. package/dist/controller/tstype.js.map +0 -1
  849. package/dist/index.d.ts +0 -6
  850. package/dist/index.d.ts.map +0 -1
  851. package/dist/index.js +0 -37
  852. package/dist/index.js.map +0 -1
  853. package/dist/models/backup-storage-legacy.d.ts +0 -27
  854. package/dist/models/backup-storage-legacy.d.ts.map +0 -1
  855. package/dist/models/backup-storage-legacy.js +0 -3
  856. package/dist/models/backup-storage-legacy.js.map +0 -1
  857. package/dist/models/backup-storage-unified.d.ts +0 -50
  858. package/dist/models/backup-storage-unified.d.ts.map +0 -1
  859. package/dist/models/backup-storage-unified.js +0 -3
  860. package/dist/models/backup-storage-unified.js.map +0 -1
  861. package/dist/models/backup.d.ts +0 -38
  862. package/dist/models/backup.d.ts.map +0 -1
  863. package/dist/models/backup.js +0 -3
  864. package/dist/models/backup.js.map +0 -1
  865. package/dist/models/index.d.ts +0 -5
  866. package/dist/models/index.d.ts.map +0 -1
  867. package/dist/models/index.js +0 -21
  868. package/dist/models/index.js.map +0 -1
  869. package/dist/models/network-options.d.ts +0 -13
  870. package/dist/models/network-options.d.ts.map +0 -1
  871. package/dist/models/network-options.js +0 -3
  872. package/dist/models/network-options.js.map +0 -1
  873. package/dist/utils/aes.d.ts +0 -40
  874. package/dist/utils/aes.d.ts.map +0 -1
  875. package/dist/utils/aes.js +0 -198
  876. package/dist/utils/aes.js.map +0 -1
  877. package/dist/utils/assertString.d.ts +0 -3
  878. package/dist/utils/assertString.d.ts.map +0 -1
  879. package/dist/utils/assertString.js +0 -9
  880. package/dist/utils/assertString.js.map +0 -1
  881. package/dist/utils/backup.d.ts +0 -21
  882. package/dist/utils/backup.d.ts.map +0 -1
  883. package/dist/utils/backup.js +0 -190
  884. package/dist/utils/backup.js.map +0 -1
  885. package/dist/utils/equalsPartial.d.ts +0 -3
  886. package/dist/utils/equalsPartial.d.ts.map +0 -1
  887. package/dist/utils/equalsPartial.js +0 -12
  888. package/dist/utils/equalsPartial.js.map +0 -1
  889. package/dist/utils/index.d.ts +0 -10
  890. package/dist/utils/index.d.ts.map +0 -1
  891. package/dist/utils/index.js +0 -46
  892. package/dist/utils/index.js.map +0 -1
  893. package/dist/utils/isNumberArray.d.ts +0 -3
  894. package/dist/utils/isNumberArray.d.ts.map +0 -1
  895. package/dist/utils/isNumberArray.js +0 -7
  896. package/dist/utils/isNumberArray.js.map +0 -1
  897. package/dist/utils/logger.d.ts +0 -9
  898. package/dist/utils/logger.d.ts.map +0 -1
  899. package/dist/utils/logger.js +0 -14
  900. package/dist/utils/logger.js.map +0 -1
  901. package/dist/utils/queue.d.ts +0 -12
  902. package/dist/utils/queue.d.ts.map +0 -1
  903. package/dist/utils/queue.js +0 -62
  904. package/dist/utils/queue.js.map +0 -1
  905. package/dist/utils/realpathSync.d.ts +0 -3
  906. package/dist/utils/realpathSync.d.ts.map +0 -1
  907. package/dist/utils/realpathSync.js +0 -13
  908. package/dist/utils/realpathSync.js.map +0 -1
  909. package/dist/utils/wait.d.ts +0 -3
  910. package/dist/utils/wait.d.ts.map +0 -1
  911. package/dist/utils/wait.js +0 -9
  912. package/dist/utils/wait.js.map +0 -1
  913. package/dist/utils/waitress.d.ts +0 -22
  914. package/dist/utils/waitress.d.ts.map +0 -1
  915. package/dist/utils/waitress.js +0 -69
  916. package/dist/utils/waitress.js.map +0 -1
  917. package/dist/zspec/consts.d.ts +0 -60
  918. package/dist/zspec/consts.d.ts.map +0 -1
  919. package/dist/zspec/consts.js +0 -64
  920. package/dist/zspec/consts.js.map +0 -1
  921. package/dist/zspec/enums.d.ts +0 -19
  922. package/dist/zspec/enums.d.ts.map +0 -1
  923. package/dist/zspec/enums.js +0 -28
  924. package/dist/zspec/enums.js.map +0 -1
  925. package/dist/zspec/index.d.ts +0 -4
  926. package/dist/zspec/index.d.ts.map +0 -1
  927. package/dist/zspec/index.js +0 -43
  928. package/dist/zspec/index.js.map +0 -1
  929. package/dist/zspec/tstypes.d.ts +0 -19
  930. package/dist/zspec/tstypes.d.ts.map +0 -1
  931. package/dist/zspec/tstypes.js +0 -3
  932. package/dist/zspec/tstypes.js.map +0 -1
  933. package/dist/zspec/utils.d.ts +0 -14
  934. package/dist/zspec/utils.d.ts.map +0 -1
  935. package/dist/zspec/utils.js +0 -29
  936. package/dist/zspec/utils.js.map +0 -1
  937. package/dist/zspec/zcl/buffaloZcl.d.ts +0 -55
  938. package/dist/zspec/zcl/buffaloZcl.d.ts.map +0 -1
  939. package/dist/zspec/zcl/buffaloZcl.js +0 -929
  940. package/dist/zspec/zcl/buffaloZcl.js.map +0 -1
  941. package/dist/zspec/zcl/definition/cluster.d.ts +0 -3
  942. package/dist/zspec/zcl/definition/cluster.d.ts.map +0 -1
  943. package/dist/zspec/zcl/definition/cluster.js +0 -5500
  944. package/dist/zspec/zcl/definition/cluster.js.map +0 -1
  945. package/dist/zspec/zcl/definition/consts.d.ts +0 -9
  946. package/dist/zspec/zcl/definition/consts.d.ts.map +0 -1
  947. package/dist/zspec/zcl/definition/consts.js +0 -27
  948. package/dist/zspec/zcl/definition/consts.js.map +0 -1
  949. package/dist/zspec/zcl/definition/enums.d.ts +0 -177
  950. package/dist/zspec/zcl/definition/enums.d.ts.map +0 -1
  951. package/dist/zspec/zcl/definition/enums.js +0 -187
  952. package/dist/zspec/zcl/definition/enums.js.map +0 -1
  953. package/dist/zspec/zcl/definition/foundation.d.ts +0 -11
  954. package/dist/zspec/zcl/definition/foundation.d.ts.map +0 -1
  955. package/dist/zspec/zcl/definition/foundation.js +0 -241
  956. package/dist/zspec/zcl/definition/foundation.js.map +0 -1
  957. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +0 -727
  958. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +0 -1
  959. package/dist/zspec/zcl/definition/manufacturerCode.js +0 -733
  960. package/dist/zspec/zcl/definition/manufacturerCode.js.map +0 -1
  961. package/dist/zspec/zcl/definition/status.d.ts +0 -69
  962. package/dist/zspec/zcl/definition/status.d.ts.map +0 -1
  963. package/dist/zspec/zcl/definition/status.js +0 -74
  964. package/dist/zspec/zcl/definition/status.js.map +0 -1
  965. package/dist/zspec/zcl/definition/tstype.d.ts +0 -114
  966. package/dist/zspec/zcl/definition/tstype.d.ts.map +0 -1
  967. package/dist/zspec/zcl/definition/tstype.js +0 -4
  968. package/dist/zspec/zcl/definition/tstype.js.map +0 -1
  969. package/dist/zspec/zcl/index.d.ts +0 -11
  970. package/dist/zspec/zcl/index.d.ts.map +0 -1
  971. package/dist/zspec/zcl/index.js +0 -47
  972. package/dist/zspec/zcl/index.js.map +0 -1
  973. package/dist/zspec/zcl/utils.d.ts +0 -7
  974. package/dist/zspec/zcl/utils.d.ts.map +0 -1
  975. package/dist/zspec/zcl/utils.js +0 -234
  976. package/dist/zspec/zcl/utils.js.map +0 -1
  977. package/dist/zspec/zcl/zclFrame.d.ts +0 -36
  978. package/dist/zspec/zcl/zclFrame.d.ts.map +0 -1
  979. package/dist/zspec/zcl/zclFrame.js +0 -304
  980. package/dist/zspec/zcl/zclFrame.js.map +0 -1
  981. package/dist/zspec/zcl/zclHeader.d.ts +0 -17
  982. package/dist/zspec/zcl/zclHeader.d.ts.map +0 -1
  983. package/dist/zspec/zcl/zclHeader.js +0 -88
  984. package/dist/zspec/zcl/zclHeader.js.map +0 -1
  985. package/dist/zspec/zcl/zclStatusError.d.ts +0 -6
  986. package/dist/zspec/zcl/zclStatusError.d.ts.map +0 -1
  987. package/dist/zspec/zcl/zclStatusError.js +0 -13
  988. package/dist/zspec/zcl/zclStatusError.js.map +0 -1
  989. package/dist/zspec/zdo/buffaloZdo.d.ts +0 -438
  990. package/dist/zspec/zdo/buffaloZdo.d.ts.map +0 -1
  991. package/dist/zspec/zdo/buffaloZdo.js +0 -1892
  992. package/dist/zspec/zdo/buffaloZdo.js.map +0 -1
  993. package/dist/zspec/zdo/definition/clusters.d.ts +0 -624
  994. package/dist/zspec/zdo/definition/clusters.d.ts.map +0 -1
  995. package/dist/zspec/zdo/definition/clusters.js +0 -687
  996. package/dist/zspec/zdo/definition/clusters.js.map +0 -1
  997. package/dist/zspec/zdo/definition/consts.d.ts +0 -13
  998. package/dist/zspec/zdo/definition/consts.d.ts.map +0 -1
  999. package/dist/zspec/zdo/definition/consts.js +0 -16
  1000. package/dist/zspec/zdo/definition/consts.js.map +0 -1
  1001. package/dist/zspec/zdo/definition/enums.d.ts +0 -75
  1002. package/dist/zspec/zdo/definition/enums.d.ts.map +0 -1
  1003. package/dist/zspec/zdo/definition/enums.js +0 -97
  1004. package/dist/zspec/zdo/definition/enums.js.map +0 -1
  1005. package/dist/zspec/zdo/definition/status.d.ts +0 -99
  1006. package/dist/zspec/zdo/definition/status.d.ts.map +0 -1
  1007. package/dist/zspec/zdo/definition/status.js +0 -109
  1008. package/dist/zspec/zdo/definition/status.js.map +0 -1
  1009. package/dist/zspec/zdo/definition/tstypes.d.ts +0 -787
  1010. package/dist/zspec/zdo/definition/tstypes.d.ts.map +0 -1
  1011. package/dist/zspec/zdo/definition/tstypes.js +0 -3
  1012. package/dist/zspec/zdo/definition/tstypes.js.map +0 -1
  1013. package/dist/zspec/zdo/index.d.ts +0 -7
  1014. package/dist/zspec/zdo/index.d.ts.map +0 -1
  1015. package/dist/zspec/zdo/index.js +0 -39
  1016. package/dist/zspec/zdo/index.js.map +0 -1
  1017. package/dist/zspec/zdo/utils.d.ts +0 -25
  1018. package/dist/zspec/zdo/utils.d.ts.map +0 -1
  1019. package/dist/zspec/zdo/utils.js +0 -75
  1020. package/dist/zspec/zdo/utils.js.map +0 -1
  1021. package/dist/zspec/zdo/zdoStatusError.d.ts +0 -6
  1022. package/dist/zspec/zdo/zdoStatusError.d.ts.map +0 -1
  1023. package/dist/zspec/zdo/zdoStatusError.js +0 -13
  1024. package/dist/zspec/zdo/zdoStatusError.js.map +0 -1
  1025. package/typedoc-tsconfig.json +0 -44
@@ -0,0 +1,1350 @@
1
+ import assert from "node:assert";
2
+
3
+ import debounce from "debounce";
4
+
5
+ import type * as Models from "../../../models";
6
+ import {Queue, Waitress, wait} from "../../../utils";
7
+ import {logger} from "../../../utils/logger";
8
+ import * as ZSpec from "../../../zspec";
9
+ import type {BroadcastAddress} from "../../../zspec/enums";
10
+ import type {Eui64} from "../../../zspec/tstypes";
11
+ import * as Zcl from "../../../zspec/zcl";
12
+ import * as Zdo from "../../../zspec/zdo";
13
+ import type * as ZdoTypes from "../../../zspec/zdo/definition/tstypes";
14
+ import Adapter from "../../adapter";
15
+ import type * as Events from "../../events";
16
+ import type {AdapterOptions, CoordinatorVersion, NetworkOptions, NetworkParameters, SerialPortOptions, StartResult} from "../../tstype";
17
+ import * as Constants from "../constants";
18
+ import {Constants as UnpiConstants} from "../unpi";
19
+ import {Znp, type ZpiObject} from "../znp";
20
+ import Definition from "../znp/definition";
21
+ import {isMtCmdAreqZdo} from "../znp/utils";
22
+ import {Endpoints} from "./endpoints";
23
+ import {ZnpAdapterManager} from "./manager";
24
+ import {ZnpVersion} from "./tstype";
25
+ import {KonnextConfig} from "../../../controller/model/konnextConfig";
26
+
27
+ const NS = "zh:zstack";
28
+ const Subsystem = UnpiConstants.Subsystem;
29
+ const Type = UnpiConstants.Type;
30
+ const {ZnpCommandStatus, AddressMode} = Constants.COMMON;
31
+
32
+ const DataConfirmTimeout = 9999; // Not an actual code
33
+
34
+ interface WaitressMatcher {
35
+ address?: number | string;
36
+ endpoint: number;
37
+ transactionSequenceNumber?: number;
38
+ frameType: Zcl.FrameType;
39
+ clusterID: number;
40
+ commandIdentifier: number;
41
+ direction: number;
42
+ }
43
+
44
+ class DataConfirmError extends Error {
45
+ public code: number;
46
+ constructor(code: number) {
47
+ const error = code === DataConfirmTimeout ? "'TIMEOUT'" : `'${ZnpCommandStatus[code]}' (0x${code.toString(16)})`;
48
+ const message = `Data request failed with error: ${error}`;
49
+ super(message);
50
+ this.code = code;
51
+ }
52
+ }
53
+
54
+ export class ZStackAdapter extends Adapter {
55
+ private deviceAnnounceRouteDiscoveryDebouncers: Map<number, () => void>;
56
+ private znp: Znp;
57
+ // @ts-expect-error initialized in `start`
58
+ private adapterManager: ZnpAdapterManager;
59
+ private transactionID: number;
60
+ // @ts-expect-error initialized in `start`
61
+ private version: {
62
+ product: number;
63
+ transportrev: number;
64
+ majorrel: number;
65
+ minorrel: number;
66
+ maintrel: number;
67
+ revision: string;
68
+ };
69
+ private closing: boolean;
70
+ // @ts-expect-error initialized in `start`
71
+ private queue: Queue;
72
+ private supportsLED?: boolean;
73
+ private interpanLock: boolean;
74
+ private interpanEndpointRegistered: boolean;
75
+ private waitress: Waitress<Events.ZclPayload, WaitressMatcher>;
76
+ private konnextConfig: KonnextConfig;
77
+
78
+ public constructor(networkOptions: NetworkOptions, serialPortOptions: SerialPortOptions, backupPath: string, adapterOptions: AdapterOptions, konnextConfig: KonnextConfig) {
79
+ super(networkOptions, serialPortOptions, backupPath, adapterOptions);
80
+ this.hasZdoMessageOverhead = false;
81
+ this.manufacturerID = Zcl.ManufacturerCode.TEXAS_INSTRUMENTS;
82
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
83
+ this.znp = new Znp(this.serialPortOptions.path!, this.serialPortOptions.baudRate!, this.serialPortOptions.rtscts!, konnextConfig);
84
+
85
+ this.konnextConfig = konnextConfig;
86
+ this.transactionID = 0;
87
+ this.deviceAnnounceRouteDiscoveryDebouncers = new Map();
88
+ this.interpanLock = false;
89
+ this.interpanEndpointRegistered = false;
90
+ this.closing = false;
91
+ this.waitress = new Waitress<Events.ZclPayload, WaitressMatcher>(this.waitressValidator, this.waitressTimeoutFormatter);
92
+
93
+ this.znp.on("received", this.onZnpRecieved.bind(this));
94
+ this.znp.on("close", this.onZnpClose.bind(this));
95
+ }
96
+
97
+ /**
98
+ * Adapter methods
99
+ */
100
+ public async start(): Promise<StartResult> {
101
+ await this.znp.open();
102
+
103
+ const attempts = 3;
104
+ for (let i = 0; i < attempts; i++) {
105
+ try {
106
+ await this.znp.request(Subsystem.SYS, "ping", {capabilities: 1});
107
+ break;
108
+ } catch (e) {
109
+ if (attempts - 1 === i) {
110
+ throw new Error(`Failed to connect to the adapter (${e})`);
111
+ }
112
+ }
113
+ }
114
+
115
+ // Old firmware did not support version, assume it's Z-Stack 1.2 for now.
116
+ try {
117
+ this.version = (await this.znp.requestWithReply(Subsystem.SYS, "version", {})).payload as typeof this.version;
118
+ } catch {
119
+ logger.debug("Failed to get zStack version, assuming 1.2", NS);
120
+ this.version = {transportrev: 2, product: 0, majorrel: 2, minorrel: 0, maintrel: 0, revision: ""};
121
+ }
122
+
123
+ const concurrent = this.adapterOptions?.concurrent ? this.adapterOptions.concurrent : this.version.product === ZnpVersion.ZStack3x0 ? 16 : 2;
124
+
125
+ logger.debug(`Adapter concurrent: ${concurrent}`, NS);
126
+
127
+ this.queue = new Queue(concurrent);
128
+
129
+ logger.debug(() => `Detected znp version '${ZnpVersion[this.version.product]}' (${JSON.stringify(this.version)})`, NS);
130
+ this.adapterManager = new ZnpAdapterManager(this, this.znp, {
131
+ backupPath: this.backupPath,
132
+ version: this.version.product,
133
+ greenPowerGroup: ZSpec.GP_GROUP_ID,
134
+ networkOptions: this.networkOptions,
135
+ adapterOptions: this.adapterOptions,
136
+ });
137
+
138
+ const startResult = this.adapterManager.start();
139
+
140
+ if (this.adapterOptions.disableLED) {
141
+ // Wait a bit for adapter to startup, otherwise led doesn't disable (tested with CC2531)
142
+ await wait(200);
143
+ await this.setLED("disable");
144
+ }
145
+
146
+ if (this.adapterOptions.transmitPower != null) {
147
+ await this.znp.request(Subsystem.SYS, "stackTune", {operation: 0, value: this.adapterOptions.transmitPower});
148
+ }
149
+
150
+ return await startResult;
151
+ }
152
+
153
+ public async stop(): Promise<void> {
154
+ this.closing = true;
155
+ await this.znp.close();
156
+ }
157
+
158
+ public async getCoordinatorIEEE(): Promise<string> {
159
+ return await this.queue.execute(async () => {
160
+ this.checkInterpanLock();
161
+ const deviceInfo = await this.znp.requestWithReply(Subsystem.UTIL, "getDeviceInfo", {});
162
+
163
+ return deviceInfo.payload.ieeeaddr;
164
+ });
165
+ }
166
+
167
+ public async getCoordinatorVersion(): Promise<CoordinatorVersion> {
168
+ return await Promise.resolve({type: ZnpVersion[this.version.product], meta: this.version});
169
+ }
170
+
171
+ public async permitJoin(seconds: number, networkAddress?: number): Promise<void> {
172
+ const clusterId = Zdo.ClusterId.PERMIT_JOINING_REQUEST;
173
+ // `authentication`: TC significance always 1 (zb specs)
174
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, seconds, 1, []);
175
+
176
+ if (networkAddress === undefined) {
177
+ await this.sendZdo(ZSpec.BLANK_EUI64, ZSpec.BroadcastAddress.DEFAULT, clusterId, zdoPayload, true);
178
+ } else {
179
+ // NOTE: `sendZdo` takes care of adjusting the payload as appropriate based on `networkAddress === 0` or not
180
+ const result = await this.sendZdo(ZSpec.BLANK_EUI64, networkAddress, clusterId, zdoPayload, false);
181
+
182
+ /* v8 ignore start */
183
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.PERMIT_JOINING_RESPONSE>(result)) {
184
+ // TODO: will disappear once moved upstream
185
+ throw new Zdo.StatusError(result[0]);
186
+ }
187
+ /* v8 ignore stop */
188
+ }
189
+
190
+ await this.queue.execute<void>(async () => {
191
+ this.checkInterpanLock();
192
+ await this.setLED(seconds === 0 ? "off" : "on");
193
+ });
194
+ }
195
+
196
+ public async reset(type: "soft" | "hard"): Promise<void> {
197
+ if (type === "soft") {
198
+ await this.znp.request(Subsystem.SYS, "resetReq", {type: Constants.SYS.resetType.SOFT});
199
+ } else {
200
+ await this.znp.request(Subsystem.SYS, "resetReq", {type: Constants.SYS.resetType.HARD});
201
+ }
202
+ }
203
+
204
+ private async setLED(action: "disable" | "on" | "off"): Promise<void> {
205
+ if (this.supportsLED == null) {
206
+ // Only zStack3x0 with 20210430 and greater support LED
207
+ const zStack3x0 = this.version.product === ZnpVersion.ZStack3x0;
208
+ this.supportsLED = !zStack3x0 || (zStack3x0 && Number.parseInt(this.version.revision, 10) >= 20210430);
209
+ }
210
+
211
+ if (!this.supportsLED || (this.adapterOptions.disableLED && action !== "disable")) {
212
+ return;
213
+ }
214
+
215
+ // Firmwares build on and after 20211029 should handle LED themselves
216
+ const firmwareControlsLed = Number.parseInt(this.version.revision, 10) >= 20211029;
217
+ const lookup = {
218
+ disable: firmwareControlsLed ? {ledid: 0xff, mode: 5} : {ledid: 3, mode: 0},
219
+ on: firmwareControlsLed ? null : {ledid: 3, mode: 1},
220
+ off: firmwareControlsLed ? null : {ledid: 3, mode: 0},
221
+ };
222
+
223
+ const payload = lookup[action];
224
+ if (payload) {
225
+ await this.znp.request(Subsystem.UTIL, "ledControl", payload, undefined, 500).catch(() => {
226
+ // We cannot 100% correctly determine if an adapter supports LED. E.g. the zStack 1.2 20190608
227
+ // fw supports led on the CC2531 but not on the CC2530. Therefore if a led request fails never thrown
228
+ // an error but instead mark the led as unsupported.
229
+ // https://github.com/Koenkk/zigbee-herdsman/issues/377
230
+ // https://github.com/Koenkk/zigbee2mqtt/issues/7693
231
+ this.supportsLED = false;
232
+ });
233
+ }
234
+ }
235
+
236
+ private async requestNetworkAddress(ieeeAddr: string): Promise<number> {
237
+ /**
238
+ * NOTE: There are cases where multiple nwkAddrRsp are recevied with different network addresses,
239
+ * this is currently not handled, the first nwkAddrRsp is taken.
240
+ */
241
+ logger.debug(`Request network address of '${ieeeAddr}'`, NS);
242
+
243
+ const clusterId = Zdo.ClusterId.NETWORK_ADDRESS_REQUEST;
244
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, ieeeAddr as Eui64, false, 0);
245
+
246
+ const result = await this.sendZdoInternal(ieeeAddr, ZSpec.NULL_NODE_ID, clusterId, zdoPayload, false, true);
247
+
248
+ if (Zdo.Buffalo.checkStatus<Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE>(result)) {
249
+ return result[1].nwkAddress;
250
+ /* v8 ignore start */
251
+ }
252
+
253
+ // TODO: will disappear once moved upstream
254
+ throw new Zdo.StatusError(result[0]);
255
+ /* v8 ignore stop */
256
+ }
257
+
258
+ private supportsAssocRemove(): boolean {
259
+ return this.version.product === ZnpVersion.ZStack3x0 && Number.parseInt(this.version.revision, 10) >= 20200805;
260
+ }
261
+
262
+ private supportsAssocAdd(): boolean {
263
+ return this.version.product === ZnpVersion.ZStack3x0 && Number.parseInt(this.version.revision, 10) >= 20201026;
264
+ }
265
+
266
+ private async discoverRoute(networkAddress: number, waitSettled = true): Promise<void> {
267
+ logger.debug(`Discovering route to ${networkAddress}`, NS);
268
+ const payload = {dstAddr: networkAddress, options: 0, radius: Constants.AF.DEFAULT_RADIUS};
269
+ await this.znp.request(Subsystem.ZDO, "extRouteDisc", payload);
270
+
271
+ if (waitSettled) {
272
+ await wait(3000);
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Retrieve all data for AF_INCOMING_MSG_EXT with huge data byte count.
278
+ *
279
+ * @param timestamp
280
+ * @param length full data length
281
+ *
282
+ * @returns Buffer containing the full data or undefined on error
283
+ */
284
+ private async dataRetrieveAll(timestamp: number, length: number): Promise<Buffer | undefined> {
285
+ const buf = Buffer.alloc(length);
286
+ const blockSize = 240;
287
+
288
+ const freeExtMessage = async () => {
289
+ // A length of zero is special and triggers the freeing of
290
+ // the corresponding incoming message.
291
+ await this.znp.requestWithReply(Subsystem.AF, "dataRetrieve", {timestamp: timestamp, index: 0, length: 0});
292
+ };
293
+ for (let index = 0; index < length; index += blockSize) {
294
+ const chunkSize = Math.min(blockSize, length - index);
295
+ const rsp = await this.znp.requestWithReply(
296
+ Subsystem.AF,
297
+ "dataRetrieve",
298
+ {
299
+ timestamp: timestamp,
300
+ index: index,
301
+ length: chunkSize,
302
+ },
303
+ undefined,
304
+ );
305
+ // 0x00 = afStatus_SUCCESS
306
+ if (rsp.payload.status !== 0x00) {
307
+ logger.error(
308
+ `dataRetrieve [timestamp: ${timestamp}, index: ${index}, chunkSize: ${chunkSize}] error status: ${rsp.payload.status}`,
309
+ NS,
310
+ );
311
+ await freeExtMessage();
312
+ return undefined;
313
+ }
314
+ if (rsp.payload.length !== chunkSize) {
315
+ logger.error(`dataRetrieve length mismatch [${chunkSize} requested, ${rsp.payload.length} returned`, NS);
316
+ await freeExtMessage();
317
+ return undefined;
318
+ }
319
+ rsp.payload.data.copy(buf, index);
320
+ }
321
+ await freeExtMessage();
322
+ return buf;
323
+ }
324
+
325
+ public async sendZdo(
326
+ ieeeAddress: string,
327
+ networkAddress: number,
328
+ clusterId: Zdo.ClusterId,
329
+ payload: Buffer,
330
+ disableResponse: true,
331
+ ): Promise<void>;
332
+ public async sendZdo<K extends keyof ZdoTypes.RequestToResponseMap>(
333
+ ieeeAddress: string,
334
+ networkAddress: number,
335
+ clusterId: K,
336
+ payload: Buffer,
337
+ disableResponse: false,
338
+ ): Promise<ZdoTypes.RequestToResponseMap[K]>;
339
+ public async sendZdo<K extends keyof ZdoTypes.RequestToResponseMap>(
340
+ ieeeAddress: string,
341
+ networkAddress: number,
342
+ clusterId: K,
343
+ payload: Buffer,
344
+ disableResponse: boolean,
345
+ ): Promise<ZdoTypes.RequestToResponseMap[K] | undefined> {
346
+ return await this.sendZdoInternal(ieeeAddress, networkAddress, clusterId, payload, disableResponse, false);
347
+ }
348
+
349
+ private async sendZdoInternal(
350
+ ieeeAddress: string,
351
+ networkAddress: number,
352
+ clusterId: Zdo.ClusterId,
353
+ payload: Buffer,
354
+ disableResponse: boolean,
355
+ skipQueue: boolean,
356
+ ): Promise<undefined>;
357
+ private async sendZdoInternal<K extends keyof ZdoTypes.RequestToResponseMap>(
358
+ ieeeAddress: string,
359
+ networkAddress: number,
360
+ clusterId: K,
361
+ payload: Buffer,
362
+ disableResponse: false,
363
+ skipQueue: boolean,
364
+ ): Promise<ZdoTypes.RequestToResponseMap[K]>;
365
+ private async sendZdoInternal<K extends keyof ZdoTypes.RequestToResponseMap>(
366
+ ieeeAddress: string,
367
+ networkAddress: number,
368
+ clusterId: K,
369
+ payload: Buffer,
370
+ disableResponse: boolean,
371
+ skipQueue: boolean,
372
+ ): Promise<ZdoTypes.RequestToResponseMap[K] | undefined> {
373
+ const func = async (): Promise<ZdoTypes.RequestToResponseMap[K] | undefined> => {
374
+ this.checkInterpanLock();
375
+
376
+ // stack-specific requirements
377
+ switch (clusterId) {
378
+ case Zdo.ClusterId.PERMIT_JOINING_REQUEST: {
379
+ const finalPayload = Buffer.alloc(payload.length + 3);
380
+ finalPayload.writeUInt8(ZSpec.BroadcastAddress[networkAddress] ? AddressMode.ADDR_BROADCAST : AddressMode.ADDR_16BIT, 0);
381
+ // zstack uses AddressMode.ADDR_16BIT + ZSpec.BroadcastAddress.DEFAULT to signal "coordinator-only"
382
+ finalPayload.writeUInt16LE(networkAddress === 0 ? ZSpec.BroadcastAddress.DEFAULT : networkAddress, 1);
383
+ finalPayload.set(payload, 3);
384
+
385
+ payload = finalPayload;
386
+ break;
387
+ }
388
+
389
+ case Zdo.ClusterId.NWK_UPDATE_REQUEST: {
390
+ // extra zeroes for empty nwkManagerAddr if necessary
391
+ const zeroes = 9 - payload.length - 1; /* zstack doesn't have nwkUpdateId */
392
+ const finalPayload = Buffer.alloc(payload.length + 3 + zeroes);
393
+ finalPayload.writeUInt16LE(networkAddress, 0);
394
+ finalPayload.writeUInt8(ZSpec.BroadcastAddress[networkAddress] ? AddressMode.ADDR_BROADCAST : AddressMode.ADDR_16BIT, 2);
395
+ finalPayload.set(payload, 3);
396
+
397
+ payload = finalPayload;
398
+ break;
399
+ }
400
+
401
+ case Zdo.ClusterId.BIND_REQUEST:
402
+ case Zdo.ClusterId.UNBIND_REQUEST: {
403
+ // extra zeroes for uint16 (in place of ieee when MULTICAST) and endpoint (not used when MULTICAST)
404
+ const zeroes = 21 - payload.length;
405
+ const finalPayload = Buffer.alloc(payload.length + 2 + zeroes);
406
+ finalPayload.writeUInt16LE(networkAddress, 0);
407
+ finalPayload.set(payload, 2);
408
+
409
+ payload = finalPayload;
410
+ break;
411
+ }
412
+
413
+ case Zdo.ClusterId.NETWORK_ADDRESS_REQUEST:
414
+ case Zdo.ClusterId.IEEE_ADDRESS_REQUEST: {
415
+ // no modification necessary
416
+ break;
417
+ }
418
+
419
+ default: {
420
+ const finalPayload = Buffer.alloc(payload.length + 2);
421
+ finalPayload.writeUInt16LE(networkAddress, 0);
422
+ finalPayload.set(payload, 2);
423
+
424
+ payload = finalPayload;
425
+ break;
426
+ }
427
+ }
428
+
429
+ let waiter: ReturnType<typeof this.znp.waitFor> | undefined;
430
+
431
+ if (!disableResponse) {
432
+ const responseClusterId = Zdo.Utils.getResponseClusterId(clusterId);
433
+
434
+ if (responseClusterId) {
435
+ const cmd = Definition[Subsystem.ZDO].find((c) => isMtCmdAreqZdo(c) && c.zdoClusterId === responseClusterId);
436
+ assert(cmd, `Response for ZDO cluster ID '${responseClusterId}' not supported.`);
437
+
438
+ waiter = this.znp.waitFor(
439
+ UnpiConstants.Type.AREQ,
440
+ Subsystem.ZDO,
441
+ cmd.name,
442
+ responseClusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE ? ieeeAddress : networkAddress,
443
+ undefined,
444
+ undefined,
445
+ );
446
+ }
447
+ }
448
+
449
+ try {
450
+ await this.znp.requestZdo(clusterId, payload, waiter?.ID);
451
+ } catch (error) {
452
+ if (clusterId === Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST) {
453
+ // Discover route when node descriptor request fails
454
+ // https://github.com/Koenkk/zigbee2mqtt/issues/3276
455
+ logger.debug(`Discover route to '${networkAddress}' because node descriptor request failed`, NS);
456
+ await this.discoverRoute(networkAddress);
457
+ await this.znp.requestZdo(clusterId, payload, /* v8 ignore next */ waiter?.ID);
458
+ } else {
459
+ throw error;
460
+ }
461
+ }
462
+
463
+ if (waiter) {
464
+ const response = await waiter.start().promise;
465
+
466
+ return response.payload.zdo;
467
+ }
468
+ };
469
+ return skipQueue ? await func() : await this.queue.execute(func, networkAddress);
470
+ }
471
+
472
+ public async sendZclFrameToEndpoint(
473
+ ieeeAddr: string,
474
+ networkAddress: number,
475
+ endpoint: number,
476
+ zclFrame: Zcl.Frame,
477
+ timeout: number,
478
+ disableResponse: boolean,
479
+ disableRecovery: boolean,
480
+ sourceEndpoint?: number,
481
+ profileId?: number,
482
+ ): Promise<Events.ZclPayload | undefined> {
483
+ const srcEndpoint = this.selectSourceEndpoint(sourceEndpoint, profileId);
484
+
485
+ return await this.queue.execute<Events.ZclPayload | undefined>(async () => {
486
+ this.checkInterpanLock();
487
+ return await this.sendZclFrameToEndpointInternal(
488
+ ieeeAddr,
489
+ networkAddress,
490
+ endpoint,
491
+ srcEndpoint,
492
+ zclFrame,
493
+ timeout,
494
+ disableResponse,
495
+ disableRecovery,
496
+ 0,
497
+ 0,
498
+ false,
499
+ false,
500
+ false,
501
+ undefined,
502
+ );
503
+ }, networkAddress);
504
+ }
505
+
506
+ private async sendZclFrameToEndpointInternal(
507
+ ieeeAddr: string,
508
+ networkAddress: number,
509
+ endpoint: number,
510
+ sourceEndpoint: number,
511
+ zclFrame: Zcl.Frame,
512
+ timeout: number,
513
+ disableResponse: boolean,
514
+ disableRecovery: boolean,
515
+ responseAttempt: number,
516
+ dataRequestAttempt: number,
517
+ checkedNetworkAddress: boolean,
518
+ discoveredRoute: boolean,
519
+ assocRemove: boolean,
520
+ assocRestore?: {ieeeadr: string; nwkaddr: number; noderelation: number},
521
+ ): Promise<Events.ZclPayload | undefined> {
522
+ logger.debug(
523
+ `sendZclFrameToEndpointInternal ${ieeeAddr}:${networkAddress}/${endpoint} ` +
524
+ `(${responseAttempt},${dataRequestAttempt},${this.queue.count()})`,
525
+ NS,
526
+ );
527
+ let response = null;
528
+ const command = zclFrame.command;
529
+ if (command.response !== undefined && disableResponse === false) {
530
+ response = this.waitForInternal(
531
+ networkAddress,
532
+ endpoint,
533
+ zclFrame.header.frameControl.frameType,
534
+ Zcl.Direction.SERVER_TO_CLIENT,
535
+ zclFrame.header.transactionSequenceNumber,
536
+ zclFrame.cluster.ID,
537
+ command.response,
538
+ timeout,
539
+ );
540
+ } else if (!zclFrame.header.frameControl.disableDefaultResponse) {
541
+ response = this.waitForInternal(
542
+ networkAddress,
543
+ endpoint,
544
+ Zcl.FrameType.GLOBAL,
545
+ Zcl.Direction.SERVER_TO_CLIENT,
546
+ zclFrame.header.transactionSequenceNumber,
547
+ zclFrame.cluster.ID,
548
+ Zcl.Foundation.defaultRsp.ID,
549
+ timeout,
550
+ );
551
+ }
552
+
553
+ const dataConfirmResult = await this.dataRequest(
554
+ networkAddress,
555
+ endpoint,
556
+ sourceEndpoint,
557
+ zclFrame.cluster.ID,
558
+ Constants.AF.DEFAULT_RADIUS,
559
+ zclFrame.toBuffer(),
560
+ timeout,
561
+ );
562
+
563
+ if (dataConfirmResult !== ZnpCommandStatus.SUCCESS) {
564
+ // In case dataConfirm timesout (= null) or gives an error, try to recover
565
+ logger.debug(`Data confirm error (${ieeeAddr}:${networkAddress},${dataConfirmResult},${dataRequestAttempt})`, NS);
566
+ if (response !== null) response.cancel();
567
+
568
+ /**
569
+ * In case we did an assocRemove in the previous attempt and it still fails after this, assume that the
570
+ * coordinator is still the parent of the device (but for some reason the device is not available now).
571
+ * Re-add the device to the assoc table, otherwise we will never be able to reach it anymore.
572
+ */
573
+ if (assocRemove && assocRestore && this.supportsAssocAdd()) {
574
+ logger.debug(`assocAdd(${assocRestore.ieeeadr})`, NS);
575
+ await this.znp.request(Subsystem.UTIL, "assocAdd", assocRestore);
576
+ assocRestore = undefined;
577
+ }
578
+
579
+ const recoverableErrors = [
580
+ ZnpCommandStatus.NWK_NO_ROUTE,
581
+ ZnpCommandStatus.MAC_NO_ACK,
582
+ ZnpCommandStatus.MAC_CHANNEL_ACCESS_FAILURE,
583
+ ZnpCommandStatus.MAC_TRANSACTION_EXPIRED,
584
+ ZnpCommandStatus.BUFFER_FULL,
585
+ ZnpCommandStatus.MAC_NO_RESOURCES,
586
+ ];
587
+
588
+ if (dataRequestAttempt >= 4 || !recoverableErrors.includes(dataConfirmResult) || disableRecovery) {
589
+ throw new DataConfirmError(dataConfirmResult);
590
+ }
591
+
592
+ if (
593
+ dataConfirmResult === ZnpCommandStatus.MAC_CHANNEL_ACCESS_FAILURE ||
594
+ dataConfirmResult === ZnpCommandStatus.BUFFER_FULL ||
595
+ dataConfirmResult === ZnpCommandStatus.MAC_NO_RESOURCES
596
+ ) {
597
+ /**
598
+ * MAC_CHANNEL_ACCESS_FAILURE: When many commands at once are executed we can end up in a MAC
599
+ * channel access failure error. This is because there is too much traffic on the network.
600
+ * Retry this command once after a cooling down period.
601
+ * BUFFER_FULL: When many commands are executed at once the buffer can get full, wait
602
+ * some time and retry.
603
+ * MAC_NO_RESOURCES: Operation could not be completed because no memory resources are available,
604
+ * wait some time and retry.
605
+ */
606
+ await wait(2000);
607
+ return await this.sendZclFrameToEndpointInternal(
608
+ ieeeAddr,
609
+ networkAddress,
610
+ endpoint,
611
+ sourceEndpoint,
612
+ zclFrame,
613
+ timeout,
614
+ disableResponse,
615
+ disableRecovery,
616
+ responseAttempt,
617
+ dataRequestAttempt + 1,
618
+ checkedNetworkAddress,
619
+ discoveredRoute,
620
+ assocRemove,
621
+ assocRestore,
622
+ );
623
+ }
624
+
625
+ let doAssocRemove = false;
626
+ if (
627
+ !assocRemove &&
628
+ dataConfirmResult === ZnpCommandStatus.MAC_TRANSACTION_EXPIRED &&
629
+ dataRequestAttempt >= 1 &&
630
+ this.supportsAssocRemove()
631
+ ) {
632
+ const match = await this.znp.requestWithReply(Subsystem.UTIL, "assocGetWithAddress", {
633
+ extaddr: ieeeAddr,
634
+ nwkaddr: networkAddress,
635
+ });
636
+
637
+ if (match.payload.nwkaddr !== 0xfffe && match.payload.noderelation !== 255) {
638
+ doAssocRemove = true;
639
+ assocRestore = {ieeeadr: ieeeAddr, nwkaddr: networkAddress, noderelation: match.payload.noderelation};
640
+ }
641
+
642
+ assocRemove = true;
643
+ }
644
+
645
+ // NWK_NO_ROUTE: no network route => rediscover route
646
+ // MAC_NO_ACK: route may be corrupted
647
+ // MAC_TRANSACTION_EXPIRED: Mac layer is sleeping
648
+ if (doAssocRemove) {
649
+ /**
650
+ * Since child aging is disabled on the firmware, when a end device is directly connected
651
+ * to the coordinator and changes parent and the coordinator does not recevie this update,
652
+ * it still thinks it's directly connected.
653
+ * A discoverRoute() is not send out in this case, therefore remove it from the associated device
654
+ * list and try again.
655
+ * Note: assocRemove is a custom command, not available by default, only available on recent
656
+ * z-stack-firmware firmware version. In case it's not supported by the coordinator we will
657
+ * automatically timeout after 60000ms.
658
+ */
659
+ logger.debug(`assocRemove(${ieeeAddr})`, NS);
660
+ await this.znp.request(Subsystem.UTIL, "assocRemove", {ieeeadr: ieeeAddr});
661
+ } else if (!discoveredRoute && dataRequestAttempt >= 1) {
662
+ discoveredRoute = true;
663
+ await this.discoverRoute(networkAddress);
664
+ } else if (!checkedNetworkAddress && dataRequestAttempt >= 1) {
665
+ // Figure out once if the network address has been changed.
666
+ try {
667
+ checkedNetworkAddress = true;
668
+ const actualNetworkAddress = await this.requestNetworkAddress(ieeeAddr);
669
+ if (networkAddress !== actualNetworkAddress) {
670
+ logger.debug("Failed because request was done with wrong network address", NS);
671
+ discoveredRoute = true;
672
+ networkAddress = actualNetworkAddress;
673
+ await this.discoverRoute(actualNetworkAddress);
674
+ } else {
675
+ logger.debug("Network address did not change", NS);
676
+ }
677
+ /* v8 ignore start */
678
+ } catch {
679
+ /* empty */
680
+ }
681
+ /* v8 ignore stop */
682
+ } else {
683
+ logger.debug("Wait 2000ms", NS);
684
+ await wait(2000);
685
+ }
686
+
687
+ return await this.sendZclFrameToEndpointInternal(
688
+ ieeeAddr,
689
+ networkAddress,
690
+ endpoint,
691
+ sourceEndpoint,
692
+ zclFrame,
693
+ timeout,
694
+ disableResponse,
695
+ disableRecovery,
696
+ responseAttempt,
697
+ dataRequestAttempt + 1,
698
+ checkedNetworkAddress,
699
+ discoveredRoute,
700
+ assocRemove,
701
+ assocRestore,
702
+ );
703
+ }
704
+
705
+ if (response !== null) {
706
+ try {
707
+ const result = await response.start().promise;
708
+ return result;
709
+ } catch (error) {
710
+ logger.debug(`Response timeout (${ieeeAddr}:${networkAddress},${responseAttempt})`, NS);
711
+ if (responseAttempt < 1 && !disableRecovery) {
712
+ // No response could be because the radio of the end device is turned off:
713
+ // Sometimes the coordinator does not properly set the PENDING flag.
714
+ // Try to rewrite the device entry in the association table, this fixes it sometimes.
715
+ const match = await this.znp.requestWithReply(Subsystem.UTIL, "assocGetWithAddress", {
716
+ extaddr: ieeeAddr,
717
+ nwkaddr: networkAddress,
718
+ });
719
+ logger.debug(
720
+ `Response timeout recovery: Node relation ${match.payload.noderelation} (${ieeeAddr} / ${match.payload.nwkaddr})`,
721
+ NS,
722
+ );
723
+ if (
724
+ this.supportsAssocAdd() &&
725
+ this.supportsAssocRemove() &&
726
+ match.payload.nwkaddr !== 0xfffe &&
727
+ match.payload.noderelation === 1
728
+ ) {
729
+ logger.debug(`Response timeout recovery: Rewrite association table entry (${ieeeAddr})`, NS);
730
+ await this.znp.request(Subsystem.UTIL, "assocRemove", {ieeeadr: ieeeAddr});
731
+ await this.znp.request(Subsystem.UTIL, "assocAdd", {
732
+ ieeeadr: ieeeAddr,
733
+ nwkaddr: networkAddress,
734
+ noderelation: match.payload.noderelation,
735
+ });
736
+ }
737
+ // No response could be of invalid route, e.g. when message is send to wrong parent of end device.
738
+ await this.discoverRoute(networkAddress);
739
+ return await this.sendZclFrameToEndpointInternal(
740
+ ieeeAddr,
741
+ networkAddress,
742
+ endpoint,
743
+ sourceEndpoint,
744
+ zclFrame,
745
+ timeout,
746
+ disableResponse,
747
+ disableRecovery,
748
+ responseAttempt + 1,
749
+ dataRequestAttempt,
750
+ checkedNetworkAddress,
751
+ discoveredRoute,
752
+ assocRemove,
753
+ assocRestore,
754
+ );
755
+ }
756
+
757
+ throw error;
758
+ }
759
+ }
760
+ }
761
+
762
+ public async sendZclFrameToGroup(groupID: number, zclFrame: Zcl.Frame, sourceEndpoint?: number, profileId?: number): Promise<void> {
763
+ const srcEndpoint = this.selectSourceEndpoint(sourceEndpoint, profileId);
764
+
765
+ return await this.queue.execute<void>(async () => {
766
+ this.checkInterpanLock();
767
+ await this.dataRequestExtended(
768
+ AddressMode.ADDR_GROUP,
769
+ groupID,
770
+ 0xff,
771
+ 0,
772
+ srcEndpoint,
773
+ zclFrame.cluster.ID,
774
+ Constants.AF.DEFAULT_RADIUS,
775
+ zclFrame.toBuffer(),
776
+ 3000,
777
+ true,
778
+ );
779
+
780
+ /**
781
+ * As a group command is not confirmed and thus immidiately returns
782
+ * (contrary to network address requests) we will give the
783
+ * command some time to 'settle' in the network.
784
+ */
785
+ await wait(200);
786
+ });
787
+ }
788
+
789
+ public async sendZclFrameToAll(
790
+ endpoint: number,
791
+ zclFrame: Zcl.Frame,
792
+ sourceEndpoint: number,
793
+ destination: BroadcastAddress,
794
+ profileId?: number,
795
+ ): Promise<void> {
796
+ const srcEndpoint = this.selectSourceEndpoint(sourceEndpoint, profileId);
797
+
798
+ return await this.queue.execute<void>(async () => {
799
+ this.checkInterpanLock();
800
+ await this.dataRequestExtended(
801
+ AddressMode.ADDR_16BIT,
802
+ destination,
803
+ endpoint,
804
+ 0,
805
+ srcEndpoint,
806
+ zclFrame.cluster.ID,
807
+ Constants.AF.DEFAULT_RADIUS,
808
+ zclFrame.toBuffer(),
809
+ 3000,
810
+ false,
811
+ 0,
812
+ );
813
+
814
+ /**
815
+ * As a broadcast command is not confirmed and thus immidiately returns
816
+ * (contrary to network address requests) we will give the
817
+ * command some time to 'settle' in the network.
818
+ */
819
+ await wait(200);
820
+ });
821
+ }
822
+
823
+ public async addInstallCode(ieeeAddress: string, key: Buffer, hashed: boolean): Promise<void> {
824
+ assert(this.version.product !== ZnpVersion.ZStack12, "Install code is not supported for ZStack 1.2 adapter");
825
+ // TODO: always use 0x2? => const hashedKey = hashed ? key : ZSpec.Utils.aes128MmoHash(key);
826
+ const payload = {installCodeFormat: hashed ? 0x2 : 0x1, ieeeaddr: ieeeAddress, installCode: key};
827
+ await this.znp.request(Subsystem.APP_CNF, "bdbAddInstallCode", payload);
828
+ }
829
+
830
+ /**
831
+ * Event handlers
832
+ */
833
+ public onZnpClose(): void {
834
+ if (!this.closing) {
835
+ this.emit("disconnected");
836
+ }
837
+ }
838
+
839
+ private onZnpRecieved(object: ZpiObject): void {
840
+ if (object.type !== UnpiConstants.Type.AREQ) {
841
+ return;
842
+ }
843
+
844
+ if (object.subsystem === Subsystem.ZDO) {
845
+ if (isMtCmdAreqZdo(object.command)) {
846
+ this.emit("zdoResponse", object.command.zdoClusterId, object.payload.zdo);
847
+ }
848
+
849
+ if (object.command.name === "tcDeviceInd") {
850
+ const payload: Events.DeviceJoinedPayload = {
851
+ networkAddress: object.payload.nwkaddr,
852
+ ieeeAddr: object.payload.extaddr,
853
+ };
854
+
855
+ this.emit("deviceJoined", payload);
856
+ } else if (object.command.name === "endDeviceAnnceInd") {
857
+ // TODO: better way???
858
+ if (Zdo.Buffalo.checkStatus<Zdo.ClusterId.END_DEVICE_ANNOUNCE>(object.payload.zdo)) {
859
+ const zdoPayload = object.payload.zdo[1];
860
+ // Only discover routes to end devices, if bit 1 of capabilities === 0 it's an end device.
861
+ const isEndDevice = zdoPayload.capabilities.deviceType === 0;
862
+
863
+ if (isEndDevice) {
864
+ if (!this.deviceAnnounceRouteDiscoveryDebouncers.has(zdoPayload.nwkAddress)) {
865
+ // If a device announces multiple times in a very short time, it makes no sense
866
+ // to rediscover the route every time.
867
+ const debouncer = debounce(
868
+ () => {
869
+ this.queue
870
+ .execute<void>(async () => {
871
+ await this.discoverRoute(zdoPayload.nwkAddress, false).catch(() => {});
872
+ }, zdoPayload.nwkAddress)
873
+ .catch(() => {});
874
+ },
875
+ 60 * 1000,
876
+ {immediate: true},
877
+ );
878
+ this.deviceAnnounceRouteDiscoveryDebouncers.set(zdoPayload.nwkAddress, debouncer);
879
+ }
880
+
881
+ const debouncer = this.deviceAnnounceRouteDiscoveryDebouncers.get(zdoPayload.nwkAddress);
882
+ assert(debouncer);
883
+ debouncer();
884
+ }
885
+ }
886
+ } else if (object.command.name === "concentratorIndCb") {
887
+ // Some routers may change short addresses and the announcement
888
+ // is missed by the coordinator. This can happen when there are
889
+ // power outages or other interruptions in service. They may
890
+ // not send additional announcements, causing the device to go
891
+ // offline. However, those devices may instead send
892
+ // Concentrator Indicator Callback commands, which contain both
893
+ // the short and the long address allowing us to update our own
894
+ // mappings.
895
+ // https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/158/4403.zstacktask.c
896
+ // https://github.com/Koenkk/zigbee-herdsman/issues/74
897
+ this.emit("zdoResponse", Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE, [
898
+ Zdo.Status.SUCCESS,
899
+ {
900
+ eui64: object.payload.extaddr,
901
+ nwkAddress: object.payload.srcaddr,
902
+ startIndex: 0,
903
+ assocDevList: [],
904
+ } as ZdoTypes.NetworkAddressResponse,
905
+ ]);
906
+ } else {
907
+ if (object.command.name === "leaveInd") {
908
+ if (object.payload.rejoin) {
909
+ logger.debug("Device leave: Got leave indication with rejoin=true, nothing to do", NS);
910
+ } else {
911
+ const payload: Events.DeviceLeavePayload = {
912
+ networkAddress: object.payload.srcaddr,
913
+ ieeeAddr: object.payload.extaddr,
914
+ };
915
+
916
+ this.emit("deviceLeave", payload);
917
+ }
918
+ }
919
+ }
920
+ } else {
921
+ if (object.subsystem === Subsystem.AF) {
922
+ if (object.command.name === "incomingMsg" || object.command.name === "incomingMsgExt") {
923
+ // TI ZNP API docs
924
+ // ---------------
925
+ // AF_INCOMING_MSG_EXT - SrcAddrMode
926
+ // A value of 3 (i.e. the enumeration value for ‘afAddr64Bit’) indicates 8-
927
+ // byte/64-bit address mode; otherwise, only the 2 LSB’s of the 8 bytes are
928
+ // used to form a 2-byte short address.
929
+
930
+ // Addr is currently parsed by Buffalo as Eui64 (`0x${string}`), but it's
931
+ // possible future changes could read srcaddrmode and parse accordingly.
932
+ // Prior tests also passed an integer (e.g. 2), so best to handle all cases.
933
+ // If type is not a string, we assume a 16-bit address.
934
+
935
+ const isEui64Addr = typeof object.payload.srcaddr === "string";
936
+
937
+ const srcaddr =
938
+ object.command.name === "incomingMsgExt" && object.payload.srcaddrmode !== 0x03
939
+ ? isEui64Addr
940
+ ? Number.parseInt(object.payload.srcaddr.slice(-4), 16)
941
+ : object.payload.srcaddr
942
+ : object.payload.srcaddr;
943
+
944
+ // TI ZNP API docs suggest that payload.data should be zero length for messages
945
+ // with huge data, but testing shows it is 3-bytes, the first two of which are
946
+ // the 16-bit srcAddr.
947
+ // Possibly zh is not parsing incomingMsgExt correctly. Just compare len with
948
+ // payload length for now.
949
+ //if (object.command.name === "incomingMsgExt" && object.payload.len > 0 && object.payload.data.length === 0) {
950
+
951
+ if (object.command.name === "incomingMsgExt" && object.payload.data.length < object.payload.len) {
952
+ // The ZNP will send incomingMsgExt (AF_INCOMING_MSG_EXT)
953
+ // when data length is > about 223 bytes (or if INTER_PAN network
954
+ // is used).
955
+ //
956
+ // In the first case, the data is not included in the payload, but
957
+ // must be retrieved block by block from the ZNP buffer using the
958
+ // AF_DATA_RETRIEVE message.
959
+
960
+ this.queue
961
+ .execute<void>(async () => {
962
+ const data = await this.dataRetrieveAll(object.payload.timestamp, object.payload.len);
963
+ if (data === undefined) {
964
+ logger.error("Failed to retrieve chunked payload for incomingMsgExt", NS);
965
+ } else {
966
+ logger.debug(
967
+ `Retrieved ${data.length} bytes from huge data buffer for msg with timestamp ${object.payload.timestamp}`,
968
+ NS,
969
+ );
970
+ const payload: Events.ZclPayload = {
971
+ clusterID: object.payload.clusterid,
972
+ data: data,
973
+ header: Zcl.Header.fromBuffer(data),
974
+ address: srcaddr,
975
+ endpoint: object.payload.srcendpoint,
976
+ linkquality: object.payload.linkquality,
977
+ groupID: object.payload.groupid,
978
+ wasBroadcast: object.payload.wasbroadcast === 1,
979
+ destinationEndpoint: object.payload.dstendpoint,
980
+ };
981
+ this.waitress.resolve(payload);
982
+ this.emit("zclPayload", payload);
983
+ }
984
+ })
985
+ .catch(() => {});
986
+ } else {
987
+ // incomingMsg OR incomingMsgExt with data
988
+ // in the payload (i.e. INTER_PAN network)
989
+
990
+ const payload: Events.ZclPayload = {
991
+ clusterID: object.payload.clusterid,
992
+ data: object.payload.data,
993
+ header: Zcl.Header.fromBuffer(object.payload.data),
994
+ address: srcaddr,
995
+ endpoint: object.payload.srcendpoint,
996
+ linkquality: object.payload.linkquality,
997
+ groupID: object.payload.groupid,
998
+ wasBroadcast: object.payload.wasbroadcast === 1,
999
+ destinationEndpoint: object.payload.dstendpoint,
1000
+ };
1001
+
1002
+ this.waitress.resolve(payload);
1003
+ this.emit("zclPayload", payload);
1004
+ }
1005
+ }
1006
+ }
1007
+ }
1008
+ }
1009
+
1010
+ public async getNetworkParameters(): Promise<NetworkParameters> {
1011
+ const result = await this.znp.requestWithReply(Subsystem.ZDO, "extNwkInfo", {});
1012
+ return {
1013
+ panID: result.payload.panid as number,
1014
+ extendedPanID: result.payload.extendedpanid as string, // read as IEEEADDR, so `0x${string}`
1015
+ channel: result.payload.channel as number,
1016
+ /**
1017
+ * Return a dummy nwkUpdateId of 0, the nwkUpdateId is used when changing channels however the
1018
+ * zstack API does not allow to set this value. Instead it automatically increments the nwkUpdateId
1019
+ * based on the value in the NIB.
1020
+ * https://github.com/Koenkk/zigbee-herdsman/pull/1280#discussion_r1947815987
1021
+ */
1022
+ nwkUpdateID: 0,
1023
+ };
1024
+ }
1025
+
1026
+ public async supportsBackup(): Promise<boolean> {
1027
+ return await Promise.resolve(true);
1028
+ }
1029
+
1030
+ public async backup(ieeeAddressesInDatabase: string[]): Promise<Models.Backup> {
1031
+ return await this.adapterManager.backup.createBackup(ieeeAddressesInDatabase);
1032
+ }
1033
+
1034
+ public async setChannelInterPAN(channel: number): Promise<void> {
1035
+ return await this.queue.execute<void>(async () => {
1036
+ this.interpanLock = true;
1037
+ await this.znp.request(Subsystem.AF, "interPanCtl", {cmd: 1, data: [channel]});
1038
+
1039
+ if (!this.interpanEndpointRegistered) {
1040
+ // Make sure that endpoint 12 is registered to proxy the InterPAN messages.
1041
+ await this.znp.request(Subsystem.AF, "interPanCtl", {cmd: 2, data: [12]});
1042
+ this.interpanEndpointRegistered = true;
1043
+ }
1044
+ });
1045
+ }
1046
+
1047
+ public async sendZclFrameInterPANToIeeeAddr(zclFrame: Zcl.Frame, ieeeAddr: string): Promise<void> {
1048
+ return await this.queue.execute<void>(async () => {
1049
+ await this.dataRequestExtended(
1050
+ AddressMode.ADDR_64BIT,
1051
+ ieeeAddr,
1052
+ 0xfe,
1053
+ 0xffff,
1054
+ 12,
1055
+ zclFrame.cluster.ID,
1056
+ 30,
1057
+ zclFrame.toBuffer(),
1058
+ 10000,
1059
+ false,
1060
+ );
1061
+ });
1062
+ }
1063
+
1064
+ public async sendZclFrameInterPANBroadcast(zclFrame: Zcl.Frame, timeout: number, disableResponse: false): Promise<Events.ZclPayload>;
1065
+ public async sendZclFrameInterPANBroadcast(zclFrame: Zcl.Frame, timeout: number, disableResponse: true): Promise<undefined>;
1066
+ public async sendZclFrameInterPANBroadcast(
1067
+ zclFrame: Zcl.Frame,
1068
+ timeout: number,
1069
+ disableResponse: boolean,
1070
+ ): Promise<Events.ZclPayload | undefined> {
1071
+ return await this.queue.execute<Events.ZclPayload | undefined>(async () => {
1072
+ const command = zclFrame.command;
1073
+ if (!disableResponse && command.response === undefined) {
1074
+ throw new Error(`Command '${command.name}' has no response, cannot wait for response`);
1075
+ }
1076
+
1077
+ let response: ReturnType<typeof this.waitForInternal> | undefined;
1078
+
1079
+ if (!disableResponse && command.response !== undefined) {
1080
+ response = this.waitForInternal(
1081
+ undefined,
1082
+ 0xfe,
1083
+ zclFrame.header.frameControl.frameType,
1084
+ Zcl.Direction.SERVER_TO_CLIENT,
1085
+ undefined,
1086
+ zclFrame.cluster.ID,
1087
+ command.response,
1088
+ timeout,
1089
+ );
1090
+ }
1091
+
1092
+ try {
1093
+ await this.dataRequestExtended(
1094
+ AddressMode.ADDR_16BIT,
1095
+ 0xffff,
1096
+ 0xfe,
1097
+ 0xffff,
1098
+ 12,
1099
+ zclFrame.cluster.ID,
1100
+ 30,
1101
+ zclFrame.toBuffer(),
1102
+ 10000,
1103
+ false,
1104
+ );
1105
+ } catch (error) {
1106
+ response?.cancel();
1107
+ throw error;
1108
+ }
1109
+
1110
+ if (response) {
1111
+ return await response.start().promise;
1112
+ }
1113
+ });
1114
+ }
1115
+
1116
+ public async restoreChannelInterPAN(): Promise<void> {
1117
+ return await this.queue.execute<void>(async () => {
1118
+ await this.znp.request(Subsystem.AF, "interPanCtl", {cmd: 0, data: []});
1119
+ // Give adapter some time to restore, otherwise stuff crashes
1120
+ await wait(3000);
1121
+ this.interpanLock = false;
1122
+ });
1123
+ }
1124
+
1125
+ private waitForInternal(
1126
+ networkAddress: number | undefined,
1127
+ endpoint: number,
1128
+ frameType: Zcl.FrameType,
1129
+ direction: Zcl.Direction,
1130
+ transactionSequenceNumber: number | undefined,
1131
+ clusterID: number,
1132
+ commandIdentifier: number,
1133
+ timeout: number,
1134
+ ): {start: () => {promise: Promise<Events.ZclPayload>}; cancel: () => void} {
1135
+ const payload = {
1136
+ address: networkAddress,
1137
+ endpoint,
1138
+ clusterID,
1139
+ commandIdentifier,
1140
+ frameType,
1141
+ direction,
1142
+ transactionSequenceNumber,
1143
+ };
1144
+
1145
+ const waiter = this.waitress.waitFor(payload, timeout);
1146
+ const cancel = (): void => this.waitress.remove(waiter.ID);
1147
+ return {start: waiter.start, cancel};
1148
+ }
1149
+
1150
+ public waitFor(
1151
+ networkAddress: number | undefined,
1152
+ endpoint: number,
1153
+ frameType: Zcl.FrameType,
1154
+ direction: Zcl.Direction,
1155
+ transactionSequenceNumber: number | undefined,
1156
+ clusterID: number,
1157
+ commandIdentifier: number,
1158
+ timeout: number,
1159
+ ): {promise: Promise<Events.ZclPayload>; cancel: () => void} {
1160
+ const waiter = this.waitForInternal(
1161
+ networkAddress,
1162
+ endpoint,
1163
+ frameType,
1164
+ direction,
1165
+ transactionSequenceNumber,
1166
+ clusterID,
1167
+ commandIdentifier,
1168
+ timeout,
1169
+ );
1170
+
1171
+ return {cancel: waiter.cancel, promise: waiter.start().promise};
1172
+ }
1173
+
1174
+ /**
1175
+ * Private methods
1176
+ */
1177
+ private async dataRequest(
1178
+ destinationAddress: number,
1179
+ destinationEndpoint: number,
1180
+ sourceEndpoint: number,
1181
+ clusterID: number,
1182
+ radius: number,
1183
+ data: Buffer,
1184
+ timeout: number,
1185
+ ): Promise<number> {
1186
+ const transactionID = this.nextTransactionID();
1187
+ const response = this.znp.waitFor(Type.AREQ, Subsystem.AF, "dataConfirm", undefined, transactionID, undefined, timeout);
1188
+
1189
+ await this.znp.request(
1190
+ Subsystem.AF,
1191
+ "dataRequest",
1192
+ {
1193
+ dstaddr: destinationAddress,
1194
+ destendpoint: destinationEndpoint,
1195
+ srcendpoint: sourceEndpoint,
1196
+ clusterid: clusterID,
1197
+ transid: transactionID,
1198
+ options: 0,
1199
+ radius: radius,
1200
+ len: data.length,
1201
+ data: data,
1202
+ },
1203
+ response.ID,
1204
+ );
1205
+
1206
+ let result = null;
1207
+ try {
1208
+ const dataConfirm = await response.start().promise;
1209
+ result = dataConfirm.payload.status;
1210
+ } catch {
1211
+ result = DataConfirmTimeout;
1212
+ }
1213
+
1214
+ return result;
1215
+ }
1216
+
1217
+ private async dataRequestExtended(
1218
+ addressMode: number,
1219
+ destinationAddressOrGroupID: number | string,
1220
+ destinationEndpoint: number,
1221
+ panID: number,
1222
+ sourceEndpoint: number,
1223
+ clusterID: number,
1224
+ radius: number,
1225
+ data: Buffer,
1226
+ timeout: number,
1227
+ confirmation: boolean,
1228
+ attemptsLeft = 5,
1229
+ ): Promise<ZpiObject | undefined> {
1230
+ const transactionID = this.nextTransactionID();
1231
+ const response = confirmation
1232
+ ? this.znp.waitFor(Type.AREQ, Subsystem.AF, "dataConfirm", undefined, transactionID, undefined, timeout)
1233
+ : undefined;
1234
+
1235
+ await this.znp.request(
1236
+ Subsystem.AF,
1237
+ "dataRequestExt",
1238
+ {
1239
+ dstaddrmode: addressMode,
1240
+ dstaddr: this.toAddressString(destinationAddressOrGroupID),
1241
+ destendpoint: destinationEndpoint,
1242
+ dstpanid: panID,
1243
+ srcendpoint: sourceEndpoint,
1244
+ clusterid: clusterID,
1245
+ transid: transactionID,
1246
+ options: 0, // TODO: why was this here? Constants.AF.options.DISCV_ROUTE,
1247
+ radius,
1248
+ len: data.length,
1249
+ data: data,
1250
+ },
1251
+ response?.ID,
1252
+ );
1253
+
1254
+ if (confirmation && response) {
1255
+ const dataConfirm = await response.start().promise;
1256
+ if (dataConfirm.payload.status !== ZnpCommandStatus.SUCCESS) {
1257
+ if (
1258
+ attemptsLeft > 0 &&
1259
+ (dataConfirm.payload.status === ZnpCommandStatus.MAC_CHANNEL_ACCESS_FAILURE ||
1260
+ dataConfirm.payload.status === ZnpCommandStatus.BUFFER_FULL)
1261
+ ) {
1262
+ /**
1263
+ * 225: When many commands at once are executed we can end up in a MAC channel access failure
1264
+ * error. This is because there is too much traffic on the network.
1265
+ * Retry this command once after a cooling down period.
1266
+ */
1267
+ await wait(2000);
1268
+ return await this.dataRequestExtended(
1269
+ addressMode,
1270
+ destinationAddressOrGroupID,
1271
+ destinationEndpoint,
1272
+ panID,
1273
+ sourceEndpoint,
1274
+ clusterID,
1275
+ radius,
1276
+ data,
1277
+ timeout,
1278
+ confirmation,
1279
+ attemptsLeft - 1,
1280
+ );
1281
+ }
1282
+
1283
+ throw new DataConfirmError(dataConfirm.payload.status);
1284
+ }
1285
+
1286
+ return dataConfirm;
1287
+ }
1288
+ }
1289
+
1290
+ private nextTransactionID(): number {
1291
+ this.transactionID++;
1292
+
1293
+ if (this.transactionID > 255) {
1294
+ this.transactionID = 1;
1295
+ }
1296
+
1297
+ return this.transactionID;
1298
+ }
1299
+
1300
+ private toAddressString(address: number | string): string {
1301
+ return typeof address === "number" ? `0x${address.toString(16).padStart(16, "0")}` : address.toString();
1302
+ }
1303
+
1304
+ private waitressTimeoutFormatter(matcher: WaitressMatcher, timeout: number): string {
1305
+ return (
1306
+ `Timeout - ${matcher.address} - ${matcher.endpoint}` +
1307
+ ` - ${matcher.transactionSequenceNumber} - ${matcher.clusterID}` +
1308
+ ` - ${matcher.commandIdentifier} after ${timeout}ms`
1309
+ );
1310
+ }
1311
+
1312
+ private waitressValidator(payload: Events.ZclPayload, matcher: WaitressMatcher): boolean {
1313
+ return Boolean(
1314
+ payload.header &&
1315
+ (!matcher.address || payload.address === matcher.address) &&
1316
+ payload.endpoint === matcher.endpoint &&
1317
+ (matcher.transactionSequenceNumber === undefined || payload.header.transactionSequenceNumber === matcher.transactionSequenceNumber) &&
1318
+ payload.clusterID === matcher.clusterID &&
1319
+ matcher.frameType === payload.header.frameControl.frameType &&
1320
+ matcher.commandIdentifier === payload.header.commandIdentifier &&
1321
+ matcher.direction === payload.header.frameControl.direction,
1322
+ );
1323
+ }
1324
+
1325
+ private checkInterpanLock(): void {
1326
+ if (this.interpanLock) {
1327
+ throw new Error("Cannot execute command, in Inter-PAN mode");
1328
+ }
1329
+ }
1330
+
1331
+ private selectSourceEndpoint(sourceEndpoint?: number, profileId?: number): number {
1332
+ // Use provided sourceEndpoint as the highest priority
1333
+ let srcEndpoint = sourceEndpoint;
1334
+ // If sourceEndpoint is not provided, try to select the source endpoint based on the profileId.
1335
+ if (srcEndpoint === undefined && profileId !== undefined) {
1336
+ srcEndpoint = Endpoints.find((e) => e.appprofid === profileId)?.endpoint;
1337
+ }
1338
+ //If no profileId is provided, or if no corresponding endpoint exists, use endpoint 1.
1339
+ if (srcEndpoint === undefined) {
1340
+ srcEndpoint = 1;
1341
+ }
1342
+
1343
+ // Validate that the requested profileId can be satisfied by the adapter.
1344
+ if (profileId !== undefined && Endpoints.find((e) => e.endpoint === srcEndpoint)?.appprofid !== profileId) {
1345
+ throw new Error(`Profile ID ${profileId} is not supported by this adapter.`);
1346
+ }
1347
+
1348
+ return srcEndpoint;
1349
+ }
1350
+ }