@willieee802/zigbee-herdsman 0.48.2 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +2 -2
  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,1159 @@
1
+ import assert from "node:assert";
2
+ import events from "node:events";
3
+ import fs from "node:fs";
4
+ import {Adapter, type Events as AdapterEvents, type TsType as AdapterTsType} from "../adapter";
5
+ import type {ZclPayload} from "../adapter/events";
6
+ import {BackupUtils, wait} from "../utils";
7
+ import {logger} from "../utils/logger";
8
+ import {isNumberArrayOfLength} from "../utils/utils";
9
+ import * as ZSpec from "../zspec";
10
+ import type {Eui64} from "../zspec/tstypes";
11
+ import * as Zcl from "../zspec/zcl";
12
+ import type {TPartialClusterAttributes} from "../zspec/zcl/definition/clusters-types";
13
+ import type {CustomClusters, FrameControl} from "../zspec/zcl/definition/tstype";
14
+ import * as Zdo from "../zspec/zdo";
15
+ import type * as ZdoTypes from "../zspec/zdo/definition/tstypes";
16
+ import Database from "./database";
17
+ import type * as Events from "./events";
18
+ import GreenPower from "./greenPower";
19
+ import {ZclFrameConverter} from "./helpers";
20
+ import {checkInstallCode, parseInstallCode} from "./helpers/installCodes";
21
+ import zclTransactionSequenceNumber from "./helpers/zclTransactionSequenceNumber";
22
+ import {Device, Entity} from "./model";
23
+ import {InterviewState} from "./model/device";
24
+ import Group from "./model/group";
25
+ import Touchlink from "./touchlink";
26
+ import type {DeviceType, GreenPowerDeviceJoinedPayload, RawPayload} from "./tstype";
27
+ import {KonnextConfig} from "./model/konnextConfig";
28
+
29
+ const NS = "zh:controller";
30
+
31
+ interface Options {
32
+ network: AdapterTsType.NetworkOptions;
33
+ serialPort: AdapterTsType.SerialPortOptions;
34
+ databasePath: string;
35
+ databaseBackupPath: string;
36
+ backupPath: string;
37
+ adapter: AdapterTsType.AdapterOptions;
38
+ konnextConfig: KonnextConfig;
39
+ /**
40
+ * This lambda can be used by an application to explictly reject or accept an incoming device.
41
+ * When false is returned zigbee-herdsman will not start the interview process and immidiately
42
+ * try to remove the device from the network.
43
+ */
44
+ acceptJoiningDeviceHandler: (ieeeAddr: string) => Promise<boolean>;
45
+ }
46
+
47
+ export interface ControllerEventMap {
48
+ message: [data: Events.MessagePayload];
49
+ adapterDisconnected: [];
50
+ deviceJoined: [data: Events.DeviceJoinedPayload];
51
+ deviceInterview: [data: Events.DeviceInterviewPayload];
52
+ deviceAnnounce: [data: Events.DeviceAnnouncePayload];
53
+ deviceNetworkAddressChanged: [data: Events.DeviceNetworkAddressChangedPayload];
54
+ deviceLeave: [data: Events.DeviceLeavePayload];
55
+ permitJoinChanged: [data: Events.PermitJoinChangedPayload];
56
+ lastSeenChanged: [data: Events.LastSeenChangedPayload];
57
+ }
58
+
59
+ /**
60
+ * @noInheritDoc
61
+ */
62
+ export class Controller extends events.EventEmitter<ControllerEventMap> {
63
+ private options: Options;
64
+ private database!: Database;
65
+ private adapter!: Adapter;
66
+ #greenPower!: GreenPower;
67
+ #touchlink!: Touchlink;
68
+
69
+ private permitJoinTimer: NodeJS.Timeout | undefined;
70
+ private permitJoinEnd?: number;
71
+ private backupTimer: NodeJS.Timeout | undefined;
72
+ private databaseSaveTimer: NodeJS.Timeout | undefined;
73
+ private stopping: boolean;
74
+ private adapterDisconnected: boolean;
75
+ private networkParametersCached: AdapterTsType.NetworkParameters | undefined;
76
+ /** List of unknown devices detected during a single runtime session. Serves as de-dupe and anti-spam. */
77
+ private unknownDevices: Set<number>;
78
+
79
+ /**
80
+ * Create a controller
81
+ *
82
+ * To auto detect the port provide `null` for `options.serialPort.path`
83
+ */
84
+ public constructor(options: Options) {
85
+ super();
86
+ this.stopping = false;
87
+ this.adapterDisconnected = true; // set false after adapter.start() is successfully called
88
+ const {network: networkOpts, serialPort: serialPortOpts, adapter: adapterOpts, konnextConfig: konnextConfigOpts, ...restOpts} = options;
89
+ this.options = {
90
+ network: {
91
+ networkKeyDistribute: false,
92
+ networkKey: [0x01, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0d],
93
+ extendedPanID: [0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd],
94
+ ...networkOpts,
95
+ },
96
+ serialPort: {...serialPortOpts},
97
+ adapter: {
98
+ ...adapterOpts,
99
+ },
100
+ konnextConfig: {
101
+ // @ts-ignore-next-line we need to set a default value for isEncrypted
102
+ isEncrypted: 0,
103
+ ...konnextConfigOpts,
104
+ },
105
+ ...restOpts,
106
+ };
107
+ this.unknownDevices = new Set();
108
+
109
+ // Validate options
110
+ for (const channel of this.options.network.channelList) {
111
+ if (channel < 11 || channel > 26) {
112
+ throw new Error(`'${channel}' is an invalid channel, use a channel between 11 - 26.`);
113
+ }
114
+ }
115
+
116
+ if (!isNumberArrayOfLength(this.options.network.networkKey, 16)) {
117
+ throw new Error(`Network key must be a 16 digits long array, got ${this.options.network.networkKey}.`);
118
+ }
119
+
120
+ if (!isNumberArrayOfLength(this.options.network.extendedPanID, 8)) {
121
+ throw new Error(`ExtendedPanID must be an 8 digits long array, got ${this.options.network.extendedPanID}.`);
122
+ }
123
+
124
+ if (this.options.network.panID < 1 || this.options.network.panID >= 0xffff) {
125
+ throw new Error(`PanID must have a value of 0x0001 (1) - 0xFFFE (65534), got ${this.options.network.panID}.`);
126
+ }
127
+ }
128
+
129
+ get greenPower() {
130
+ return this.#greenPower;
131
+ }
132
+
133
+ get touchlink() {
134
+ return this.#touchlink;
135
+ }
136
+
137
+ /**
138
+ * Start the Herdsman controller
139
+ */
140
+ public async start(abortSignal?: AbortSignal): Promise<AdapterTsType.StartResult> {
141
+ // Database (create end inject)
142
+ this.database = Database.open(this.options.databasePath);
143
+ Entity.injectDatabase(this.database);
144
+
145
+ // Adapter (create and inject)
146
+ this.adapter = await Adapter.create(this.options.network, this.options.serialPort, this.options.backupPath, this.options.adapter, this.options.konnextConfig);
147
+
148
+ abortSignal?.throwIfAborted();
149
+
150
+ const stringifiedOptions = JSON.stringify(this.options).replaceAll(JSON.stringify(this.options.network.networkKey), '"HIDDEN"');
151
+ logger.debug(`Starting with options '${stringifiedOptions}'`, NS);
152
+ const startResult = await this.adapter.start();
153
+ logger.debug(`Started with result '${startResult}'`, NS);
154
+ this.adapterDisconnected = false;
155
+
156
+ abortSignal?.throwIfAborted();
157
+
158
+ // Check if we have to change the channel, only do this when adapter `resumed` because:
159
+ // - `getNetworkParameters` might be return wrong info because it needs to propogate after backup restore
160
+ // - If result is not `resumed` (`reset` or `restored`), the adapter should comission with the channel from `this.options.network`
161
+ if (startResult === "resumed") {
162
+ const netParams = await this.getNetworkParameters();
163
+ const configuredChannel = this.options.network.channelList[0];
164
+ const adapterChannel = netParams.channel;
165
+ const nwkUpdateID = netParams.nwkUpdateID;
166
+
167
+ if (configuredChannel !== adapterChannel) {
168
+ logger.info(`Configured channel '${configuredChannel}' does not match adapter channel '${adapterChannel}', changing channel`, NS);
169
+ await this.changeChannel(adapterChannel, configuredChannel, nwkUpdateID);
170
+
171
+ abortSignal?.throwIfAborted();
172
+ }
173
+ }
174
+
175
+ Entity.injectAdapter(this.database.id, this.adapter);
176
+
177
+ // log injection
178
+ logger.debug(`Injected database: ${this.database !== undefined}, adapter: ${this.adapter !== undefined}`, NS);
179
+
180
+ this.#greenPower = new GreenPower(this.adapter, this.database.id);
181
+ this.#greenPower.on("deviceJoined", this.onDeviceJoinedGreenPower.bind(this));
182
+ this.#greenPower.on("deviceLeave", this.onDeviceLeaveGreenPower.bind(this));
183
+
184
+ // Register adapter events
185
+ this.adapter.on("deviceJoined", this.onDeviceJoined.bind(this));
186
+ this.adapter.on("zclPayload", this.onZclPayload.bind(this));
187
+ this.adapter.on("zdoResponse", this.onZdoResponse.bind(this));
188
+ this.adapter.on("disconnected", this.onAdapterDisconnected.bind(this));
189
+ this.adapter.on("deviceLeave", this.onDeviceLeave.bind(this));
190
+
191
+ if (startResult === "reset") {
192
+ if (this.options.databaseBackupPath && fs.existsSync(this.options.databasePath)) {
193
+ fs.copyFileSync(this.options.databasePath, this.options.databaseBackupPath);
194
+ }
195
+
196
+ this.database.clear();
197
+ Group.resetCache();
198
+ Device.resetCache();
199
+
200
+ abortSignal?.throwIfAborted();
201
+ }
202
+
203
+ if (startResult === "reset" || (this.options.backupPath && !fs.existsSync(this.options.backupPath))) {
204
+ await this.backup();
205
+
206
+ abortSignal?.throwIfAborted();
207
+ }
208
+
209
+ // Add coordinator to the database if it is not there yet.
210
+ const coordinatorIEEE = await this.adapter.getCoordinatorIEEE();
211
+
212
+ if (Device.byType(this.database.id, "Coordinator").length === 0) {
213
+ logger.debug("No coordinator in database, querying...", NS);
214
+ const coordinator = Device.create(
215
+ "Coordinator",
216
+ coordinatorIEEE,
217
+ ZSpec.COORDINATOR_ADDRESS,
218
+ this.adapter.manufacturerID,
219
+ undefined,
220
+ undefined,
221
+ undefined,
222
+ InterviewState.Successful,
223
+ undefined,
224
+ this.database.id,
225
+ );
226
+
227
+ await coordinator.updateActiveEndpoints();
228
+
229
+ abortSignal?.throwIfAborted();
230
+
231
+ for (const endpoint of coordinator.endpoints) {
232
+ await endpoint.updateSimpleDescriptor();
233
+
234
+ abortSignal?.throwIfAborted();
235
+ }
236
+
237
+ coordinator.save();
238
+ }
239
+
240
+ // Update coordinator ieeeAddr if changed, can happen due to e.g. reflashing
241
+ const databaseCoordinator = Device.byType(this.database.id, "Coordinator")[0];
242
+ if (databaseCoordinator.ieeeAddr !== coordinatorIEEE) {
243
+ logger.info(`Coordinator address changed, updating to '${coordinatorIEEE}'`, NS);
244
+ databaseCoordinator.changeIeeeAddress(coordinatorIEEE);
245
+ }
246
+
247
+ // Set backup timer to 1 day.
248
+ this.backupTimer = setInterval(() => this.backup(), 86400000);
249
+
250
+ // Set database save timer to 5 minutes.
251
+ this.databaseSaveTimer = setInterval(() => this.databaseSave(), 300000);
252
+
253
+ this.#touchlink = new Touchlink(this.adapter);
254
+
255
+ return startResult;
256
+ }
257
+
258
+ /**
259
+ * Send a request according to given payload.
260
+ * @param rawPayload Payload used to determine and build the request
261
+ * @param customClusters Manually passed custom clusters used in ZCL serialization (if any, if matching)
262
+ * @returns A response may or may not be returned depending on given payload (up to caller to verify)
263
+ */
264
+ public async sendRaw(rawPayload: RawPayload, customClusters: CustomClusters = {}): Promise<ZdoTypes.GenericZdoResponse | ZclPayload | undefined> {
265
+ const {
266
+ ieeeAddress,
267
+ networkAddress,
268
+ groupId,
269
+ dstEndpoint,
270
+ srcEndpoint = ZSpec.HA_ENDPOINT,
271
+ interPan = false,
272
+ profileId = ZSpec.HA_PROFILE_ID,
273
+ clusterKey,
274
+ zdoParams,
275
+ zcl,
276
+ disableResponse = false,
277
+ timeout = 10000,
278
+ } = rawPayload;
279
+
280
+ if (profileId === Zdo.ZDO_PROFILE_ID) {
281
+ assert(ieeeAddress);
282
+ assert(networkAddress !== undefined);
283
+ assert(clusterKey !== undefined && typeof clusterKey === "number");
284
+ // no ZDO request takes 0 params
285
+ assert(Array.isArray(zdoParams) && zdoParams.length > 0);
286
+
287
+ // will fail if args are incorrect for request
288
+ const buf = Zdo.Buffalo.buildRequest(this.adapter.hasZdoMessageOverhead, clusterKey, ...zdoParams);
289
+
290
+ return (await this.adapter.sendZdo(ieeeAddress, networkAddress, clusterKey, buf, disableResponse)) as ZdoTypes.GenericZdoResponse;
291
+ }
292
+
293
+ assert(zcl);
294
+
295
+ if (interPan) {
296
+ assert(zcl.commandKey);
297
+ assert(zcl.payload);
298
+ assert(zcl.frameType === undefined);
299
+ assert(zcl.direction === undefined);
300
+
301
+ const zclFrame = Zcl.Frame.create(
302
+ zcl.frameType ?? Zcl.FrameType.SPECIFIC,
303
+ zcl.direction ?? Zcl.Direction.CLIENT_TO_SERVER,
304
+ true,
305
+ zcl.manufacturerCode,
306
+ 0,
307
+ zcl.commandKey,
308
+ clusterKey ?? Zcl.Clusters.touchlink.ID,
309
+ zcl.payload,
310
+ customClusters,
311
+ );
312
+
313
+ if (ieeeAddress) {
314
+ await this.adapter.sendZclFrameInterPANToIeeeAddr(zclFrame, ieeeAddress);
315
+ return;
316
+ }
317
+
318
+ return await this.adapter.sendZclFrameInterPANBroadcast(zclFrame, timeout, disableResponse);
319
+ }
320
+
321
+ assert(clusterKey !== undefined);
322
+ assert(zcl.frameType !== undefined);
323
+ assert(zcl.direction !== undefined);
324
+
325
+ const zclFrame = Zcl.Frame.create(
326
+ zcl.frameType,
327
+ zcl.direction,
328
+ zcl.disableDefaultResponse ?? false,
329
+ zcl.manufacturerCode,
330
+ zcl.tsn ?? zclTransactionSequenceNumber.next(),
331
+ zcl.commandKey,
332
+ clusterKey,
333
+ zcl.payload,
334
+ customClusters,
335
+ );
336
+
337
+ if (groupId !== undefined) {
338
+ assert(groupId >= 0x0000 && groupId <= 0xffff);
339
+
340
+ await this.adapter.sendZclFrameToGroup(groupId, zclFrame, srcEndpoint, profileId);
341
+ return;
342
+ }
343
+
344
+ assert(dstEndpoint !== undefined && dstEndpoint >= 0x01 && dstEndpoint <= 0xff);
345
+ assert(srcEndpoint >= 0x01 && srcEndpoint <= 0xff);
346
+ assert(networkAddress !== undefined && networkAddress >= 0x0000 && networkAddress <= 0xffff);
347
+
348
+ if (networkAddress >= ZSpec.BROADCAST_MIN) {
349
+ await this.adapter.sendZclFrameToAll(dstEndpoint, zclFrame, srcEndpoint, networkAddress, profileId);
350
+ return;
351
+ }
352
+
353
+ assert(ieeeAddress);
354
+
355
+ return await this.adapter.sendZclFrameToEndpoint(
356
+ ieeeAddress,
357
+ networkAddress,
358
+ dstEndpoint,
359
+ zclFrame,
360
+ timeout,
361
+ disableResponse,
362
+ false,
363
+ srcEndpoint,
364
+ profileId,
365
+ );
366
+ }
367
+
368
+ public async addInstallCode(installCode: string): Promise<void> {
369
+ // will throw if code cannot be parsed
370
+ const [ieeeAddr, keyStr] = parseInstallCode(installCode);
371
+ // biome-ignore lint/style/noNonNullAssertion: valid from above parsing
372
+ const key = Buffer.from(keyStr.match(/.{1,2}/g)!.map((d) => Number.parseInt(d, 16)));
373
+ // will throw if code cannot be fixed and is invalid
374
+ const [adjustedKey, adjusted] = checkInstallCode(key, true);
375
+
376
+ if (adjusted) {
377
+ logger.info(`Install code was adjusted for reason '${adjusted}'.`, NS);
378
+ }
379
+
380
+ logger.info(`Adding install code for ${ieeeAddr}.`, NS);
381
+
382
+ await this.adapter.addInstallCode(ieeeAddr, adjustedKey, false);
383
+
384
+ if (adjusted === "missing CRC") {
385
+ // in case the CRC was missing, could also be a "already-hashed" key, send both
386
+ // XXX: seems to be the case for old HA1.2 devices
387
+ await this.adapter.addInstallCode(ieeeAddr, key, true);
388
+ }
389
+ }
390
+
391
+ public async permitJoin(time: number, device?: Device): Promise<void> {
392
+ clearTimeout(this.permitJoinTimer);
393
+ this.permitJoinTimer = undefined;
394
+ this.permitJoinEnd = undefined;
395
+
396
+ if (time > 0) {
397
+ // never permit more than uint8, and never permit 255 that is often equal to "forever"
398
+ assert(time <= 254, "Cannot permit join for more than 254 seconds.");
399
+
400
+ await this.adapter.permitJoin(time, device?.networkAddress);
401
+ await this.#greenPower.permitJoin(time, device?.networkAddress);
402
+
403
+ const timeMs = time * 1000;
404
+ this.permitJoinEnd = Date.now() + timeMs;
405
+ this.permitJoinTimer = setTimeout((): void => {
406
+ this.emit("permitJoinChanged", {permitted: false});
407
+
408
+ this.permitJoinTimer = undefined;
409
+ this.permitJoinEnd = undefined;
410
+ }, timeMs);
411
+
412
+ this.emit("permitJoinChanged", {permitted: true, time});
413
+ } else {
414
+ logger.debug("Disable joining", NS);
415
+
416
+ await this.#greenPower.permitJoin(0);
417
+ await this.adapter.permitJoin(0);
418
+
419
+ this.emit("permitJoinChanged", {permitted: false});
420
+ }
421
+ }
422
+
423
+ public getPermitJoin(): boolean {
424
+ return this.permitJoinTimer !== undefined;
425
+ }
426
+
427
+ public getPermitJoinEnd(): number | undefined {
428
+ return this.permitJoinEnd;
429
+ }
430
+
431
+ public isStopping(): boolean {
432
+ return this.stopping;
433
+ }
434
+
435
+ public isAdapterDisconnected(): boolean {
436
+ return this.adapterDisconnected;
437
+ }
438
+
439
+ public async stop(): Promise<void> {
440
+ this.stopping = true;
441
+
442
+ // Unregister adapter events
443
+ this.adapter.removeAllListeners();
444
+
445
+ clearInterval(this.backupTimer);
446
+ clearInterval(this.databaseSaveTimer);
447
+
448
+ if (this.adapterDisconnected) {
449
+ this.databaseSave();
450
+ } else {
451
+ try {
452
+ await this.#touchlink.stop();
453
+ } catch (error) {
454
+ logger.error(`Failed to stop Touchlink: ${error}`, NS);
455
+ }
456
+
457
+ try {
458
+ await this.permitJoin(0);
459
+ } catch (error) {
460
+ logger.error(`Failed to disable join on stop: ${error}`, NS);
461
+ }
462
+
463
+ await this.backup(); // always calls databaseSave()
464
+ await this.adapter.stop();
465
+
466
+ this.adapterDisconnected = true;
467
+ }
468
+
469
+ Device.resetCache();
470
+ Group.resetCache();
471
+ Entity.removeAdapter(this.database.id);
472
+ Entity.removeDatabase(this.database.id);
473
+ }
474
+
475
+ private databaseSave(): void {
476
+ for (const device of Device.allIterator(this.database.id)) {
477
+ device.save(false);
478
+ }
479
+
480
+ for (const group of Group.allIterator(this.database.id)) {
481
+ group.save(false);
482
+ }
483
+
484
+ this.database.write();
485
+ }
486
+
487
+ public async backup(): Promise<void> {
488
+ this.databaseSave();
489
+ if (this.options.backupPath && (await this.adapter.supportsBackup())) {
490
+ logger.debug("Creating coordinator backup", NS);
491
+ const backup = await this.adapter.backup(this.getDeviceIeeeAddresses());
492
+ const unifiedBackup = BackupUtils.toUnifiedBackup(backup);
493
+ const tmpBackupPath = `${this.options.backupPath}.tmp`;
494
+ fs.writeFileSync(tmpBackupPath, JSON.stringify(unifiedBackup, null, 2));
495
+ fs.renameSync(tmpBackupPath, this.options.backupPath);
496
+ logger.info(`Wrote coordinator backup to '${this.options.backupPath}'`, NS);
497
+ }
498
+ }
499
+
500
+ public async coordinatorCheck(): Promise<{missingRouters: Device[]}> {
501
+ if (await this.adapter.supportsBackup()) {
502
+ const backup = await this.adapter.backup(this.getDeviceIeeeAddresses());
503
+ const devicesInBackup = backup.devices.map((d) => ZSpec.Utils.eui64BEBufferToHex(d.ieeeAddress));
504
+ const missingRouters = [];
505
+
506
+ for (const device of this.getDevicesIterator((d) => d.type === "Router" && !devicesInBackup.includes(d.ieeeAddr as Eui64))) {
507
+ missingRouters.push(device);
508
+ }
509
+
510
+ return {missingRouters};
511
+ }
512
+
513
+ throw new Error("Coordinator does not coordinator check because it doesn't support backups");
514
+ }
515
+
516
+ public async reset(type: "soft" | "hard"): Promise<void> {
517
+ await this.adapter.reset(type);
518
+ }
519
+
520
+ public async getCoordinatorVersion(): Promise<AdapterTsType.CoordinatorVersion> {
521
+ return await this.adapter.getCoordinatorVersion();
522
+ }
523
+
524
+ public async getNetworkParameters(): Promise<AdapterTsType.NetworkParameters> {
525
+ // Cache network parameters as they don't change anymore after start.
526
+ if (!this.networkParametersCached) {
527
+ this.networkParametersCached = await this.adapter.getNetworkParameters();
528
+ }
529
+
530
+ return this.networkParametersCached;
531
+ }
532
+
533
+ /**
534
+ * Get the database ID for this controller's database.
535
+ */
536
+ public getDatabaseId(): number {
537
+ return this.database.id;
538
+ }
539
+
540
+ /**
541
+ * Get all devices
542
+ * @deprecated use getDevicesIterator()
543
+ */
544
+ public getDevices(): Device[] {
545
+ return Device.allByDatabaseID(this.database.id);
546
+ }
547
+
548
+ /**
549
+ * Get iterator for all devices
550
+ */
551
+ public getDevicesIterator(predicate?: (value: Device) => boolean): Generator<Device> {
552
+ return Device.allIterator(this.database.id, predicate);
553
+ }
554
+
555
+ /**
556
+ * Get all devices with a specific type
557
+ */
558
+ public getDevicesByType(type: DeviceType): Device[] {
559
+ return Device.byType(this.database.id, type);
560
+ }
561
+
562
+ /**
563
+ * Get device by ieeeAddr
564
+ */
565
+ public getDeviceByIeeeAddr(ieeeAddr: string): Device | undefined {
566
+ return Device.byIeeeAddr(this.database.id, ieeeAddr);
567
+ }
568
+
569
+ /**
570
+ * Get device by networkAddress
571
+ */
572
+ public getDeviceByNetworkAddress(networkAddress: number): Device | undefined {
573
+ return Device.byNetworkAddress(this.database.id, networkAddress);
574
+ }
575
+
576
+ /**
577
+ * Get IEEE address for all devices
578
+ */
579
+ public getDeviceIeeeAddresses(): string[] {
580
+ const deviceIeeeAddresses = [];
581
+
582
+ for (const device of Device.allIterator(this.database.id)) {
583
+ deviceIeeeAddresses.push(device.ieeeAddr);
584
+ }
585
+
586
+ return deviceIeeeAddresses;
587
+ }
588
+
589
+ /**
590
+ * Get group by ID
591
+ */
592
+ public getGroupByID(groupID: number): Group | undefined {
593
+ return Group.byGroupID(groupID, this.database.id);
594
+ }
595
+
596
+ /**
597
+ * Get all groups
598
+ * @deprecated use getGroupsIterator()
599
+ */
600
+ public getGroups(): Group[] {
601
+ return Group.allByDatabaseID(this.database.id);
602
+ }
603
+
604
+ /**
605
+ * Get iterator for all groups
606
+ */
607
+ public getGroupsIterator(predicate?: (value: Group) => boolean): Generator<Group> {
608
+ return Group.allIterator(this.database.id, predicate);
609
+ }
610
+
611
+ /**
612
+ * Create a Group
613
+ */
614
+ public createGroup(groupID: number): Group {
615
+ return Group.create(groupID, this.database.id);
616
+ }
617
+
618
+ /**
619
+ * Broadcast a network-wide channel change.
620
+ */
621
+ private async changeChannel(oldChannel: number, newChannel: number, nwkUpdateID: number): Promise<void> {
622
+ logger.warning(`Changing channel from '${oldChannel}' to '${newChannel}'`, NS);
623
+
624
+ // According to the Zigbee specification:
625
+ // When broadcasting a Mgmt_NWK_Update_req to notify devices of a new channel, the nwkUpdateId parameter should be incremented in the NIB and included in the Mgmt_NWK_Update_req.
626
+ // The valid range of nwkUpdateId is 0x00 to 0xFF, and it should wrap back to 0 if necessary.
627
+ if (++nwkUpdateID > 0xff) {
628
+ nwkUpdateID = 0x00;
629
+ }
630
+
631
+ const clusterId = Zdo.ClusterId.NWK_UPDATE_REQUEST;
632
+ const zdoPayload = Zdo.Buffalo.buildRequest(
633
+ this.adapter.hasZdoMessageOverhead,
634
+ clusterId,
635
+ [newChannel],
636
+ 0xfe,
637
+ undefined,
638
+ nwkUpdateID,
639
+ undefined,
640
+ );
641
+
642
+ await this.adapter.sendZdo(ZSpec.BLANK_EUI64, ZSpec.BroadcastAddress.SLEEPY, clusterId, zdoPayload, true);
643
+ logger.info(`Channel changed to '${newChannel}'`, NS);
644
+
645
+ this.networkParametersCached = undefined; // invalidate cache
646
+ // wait for the broadcast to propagate and the adapter to actually change
647
+ // NOTE: observed to ~9sec on `ember` with actual stack event
648
+ await wait(12000);
649
+ }
650
+
651
+ public async identifyUnknownDevice(nwkAddress: number): Promise<Device | undefined> {
652
+ if (this.unknownDevices.has(nwkAddress)) {
653
+ // prevent duplicate triggering
654
+ return;
655
+ }
656
+
657
+ logger.debug(`Trying to identify unknown device with address '${nwkAddress}'`, NS);
658
+ this.unknownDevices.add(nwkAddress);
659
+ const clusterId = Zdo.ClusterId.IEEE_ADDRESS_REQUEST;
660
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.adapter.hasZdoMessageOverhead, clusterId, nwkAddress, false, 0);
661
+
662
+ try {
663
+ const response = await this.adapter.sendZdo(ZSpec.BLANK_EUI64, nwkAddress, clusterId, zdoPayload, false);
664
+
665
+ if (Zdo.Buffalo.checkStatus<Zdo.ClusterId.IEEE_ADDRESS_RESPONSE>(response)) {
666
+ const payload = response[1];
667
+ const device = Device.byIeeeAddr(this.database.id, payload.eui64);
668
+
669
+ if (device) {
670
+ this.checkDeviceNetworkAddress(device, payload.eui64, payload.nwkAddress);
671
+ this.unknownDevices.delete(payload.nwkAddress);
672
+ }
673
+
674
+ return device;
675
+ }
676
+
677
+ throw new Zdo.StatusError(response[0]);
678
+ } catch (error) {
679
+ // Catches 2 types of exception: Zdo.StatusError and no response from `adapter.sendZdo()`.
680
+ logger.debug(`Failed to retrieve IEEE address for device '${nwkAddress}': ${error}`, NS);
681
+ }
682
+
683
+ // NOTE: by keeping nwkAddress in `this.unknownDevices` on fail, it prevents a non-responding device from potentially spamming identify.
684
+ // This only lasts until next reboot (runtime Set), allowing to 'force' another trigger if necessary.
685
+ }
686
+
687
+ private checkDeviceNetworkAddress(device: Device, ieeeAddress: string, nwkAddress: number): void {
688
+ if (device.networkAddress !== nwkAddress) {
689
+ logger.debug(`Device '${ieeeAddress}' got new networkAddress '${nwkAddress}'`, NS);
690
+ device.networkAddress = nwkAddress;
691
+ device.save();
692
+
693
+ this.selfAndDeviceEmit(device, "deviceNetworkAddressChanged", {device});
694
+ }
695
+ }
696
+
697
+ private onNetworkAddress(payload: ZdoTypes.NetworkAddressResponse): void {
698
+ logger.debug(`Network address from '${payload.eui64}:${payload.nwkAddress}'`, NS);
699
+ const device = Device.byIeeeAddr(this.database.id, payload.eui64);
700
+
701
+ if (!device) {
702
+ logger.debug(`Network address is from unknown device '${payload.eui64}:${payload.nwkAddress}'`, NS);
703
+ return;
704
+ }
705
+
706
+ device.updateLastSeen();
707
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "networkAddress"});
708
+ this.checkDeviceNetworkAddress(device, payload.eui64, payload.nwkAddress);
709
+ }
710
+
711
+ private onIEEEAddress(payload: ZdoTypes.IEEEAddressResponse): void {
712
+ logger.debug(`IEEE address from '${payload.eui64}:${payload.nwkAddress}'`, NS);
713
+ const device = Device.byIeeeAddr(this.database.id, payload.eui64);
714
+
715
+ if (!device) {
716
+ logger.debug(`IEEE address is from unknown device '${payload.eui64}:${payload.nwkAddress}'`, NS);
717
+ return;
718
+ }
719
+
720
+ device.updateLastSeen();
721
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "networkAddress"});
722
+ this.checkDeviceNetworkAddress(device, payload.eui64, payload.nwkAddress);
723
+ }
724
+
725
+ private onDeviceAnnounce(payload: ZdoTypes.EndDeviceAnnounce): void {
726
+ logger.debug(`Device announce from '${payload.eui64}:${payload.nwkAddress}'`, NS);
727
+ const device = Device.byIeeeAddr(this.database.id, payload.eui64);
728
+
729
+ if (!device) {
730
+ logger.debug(`Device announce is from unknown device '${payload.eui64}:${payload.nwkAddress}'`, NS);
731
+ return;
732
+ }
733
+
734
+ device.updateLastSeen();
735
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "deviceAnnounce"});
736
+ device.implicitCheckin();
737
+ this.checkDeviceNetworkAddress(device, payload.eui64, payload.nwkAddress);
738
+ this.selfAndDeviceEmit(device, "deviceAnnounce", {device});
739
+ }
740
+
741
+ private onDeviceLeave(payload: AdapterEvents.DeviceLeavePayload): void {
742
+ logger.debug(`Device leave '${payload.ieeeAddr}'`, NS);
743
+
744
+ // XXX: seems type is not properly detected?
745
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
746
+ const device = payload.ieeeAddr ? Device.byIeeeAddr(this.database.id, payload.ieeeAddr) : Device.byNetworkAddress(this.database.id, payload.networkAddress!);
747
+
748
+ if (!device) {
749
+ logger.debug(`Device leave is from unknown or already deleted device '${payload.ieeeAddr ?? payload.networkAddress}'`, NS);
750
+ return;
751
+ }
752
+
753
+ logger.debug(`Removing device from database '${device.ieeeAddr}'`, NS);
754
+ device.removeFromDatabase();
755
+
756
+ this.selfAndDeviceEmit(device, "deviceLeave", {ieeeAddr: device.ieeeAddr});
757
+ }
758
+
759
+ private async onAdapterDisconnected(): Promise<void> {
760
+ logger.debug("Adapter disconnected", NS);
761
+
762
+ this.adapterDisconnected = true;
763
+
764
+ try {
765
+ await this.adapter.stop();
766
+ } catch (error) {
767
+ logger.error(`Failed to stop adapter on disconnect: ${error}`, NS);
768
+ }
769
+
770
+ this.emit("adapterDisconnected");
771
+ }
772
+
773
+ private onDeviceJoinedGreenPower(payload: GreenPowerDeviceJoinedPayload): void {
774
+ logger.debug(() => `Green power device '${JSON.stringify(payload).replaceAll(/\[[\d,]+\]/g, "HIDDEN")}' joined`, NS);
775
+
776
+ // Green power devices don't have an ieeeAddr, the sourceID is unique and static so use this.
777
+ const ieeeAddr = GreenPower.sourceIdToIeeeAddress(payload.sourceID);
778
+ // Green power devices dont' have a modelID, create a modelID based on the deviceID (=type)
779
+ const modelID = `GreenPower_${payload.deviceID}`;
780
+ let device = Device.byIeeeAddr(this.database.id, ieeeAddr, true);
781
+
782
+ if (!device) {
783
+ logger.debug(`New green power device '${ieeeAddr}' joined`, NS);
784
+ logger.debug(`Creating device '${ieeeAddr}'`, NS);
785
+ device = Device.create(
786
+ "GreenPower",
787
+ ieeeAddr,
788
+ payload.networkAddress,
789
+ undefined,
790
+ undefined,
791
+ undefined,
792
+ modelID,
793
+ InterviewState.Successful,
794
+ payload.securityKey ? Array.from(payload.securityKey) : /* v8 ignore next */ undefined,
795
+ this.database.id,
796
+ );
797
+
798
+ device.save();
799
+
800
+ this.selfAndDeviceEmit(device, "deviceJoined", {device});
801
+ this.selfAndDeviceEmit(device, "deviceInterview", {status: "successful", device});
802
+ } else if (device.isDeleted) {
803
+ logger.debug(`Deleted green power device '${ieeeAddr}' joined, undeleting`, NS);
804
+
805
+ device.undelete();
806
+
807
+ this.selfAndDeviceEmit(device, "deviceJoined", {device});
808
+ this.selfAndDeviceEmit(device, "deviceInterview", {status: "successful", device});
809
+ }
810
+ }
811
+
812
+ private onDeviceLeaveGreenPower(sourceID: number): void {
813
+ logger.debug(`Green power device '${sourceID}' left`, NS);
814
+
815
+ // Green power devices don't have an ieeeAddr, the sourceID is unique and static so use this.
816
+ const ieeeAddr = GreenPower.sourceIdToIeeeAddress(sourceID);
817
+ const device = Device.byIeeeAddr(this.database.id, ieeeAddr);
818
+
819
+ if (!device) {
820
+ logger.debug(`Green power device leave is from unknown or already deleted device '${ieeeAddr}'`, NS);
821
+ return;
822
+ }
823
+
824
+ logger.debug(`Removing green power device from database '${device.ieeeAddr}'`, NS);
825
+ device.removeFromDatabase();
826
+
827
+ this.selfAndDeviceEmit(device, "deviceLeave", {ieeeAddr: device.ieeeAddr});
828
+ }
829
+
830
+ private selfAndDeviceEmit<K extends keyof ControllerEventMap>(
831
+ device: Device,
832
+ event: K,
833
+ ...args: K extends keyof ControllerEventMap ? ControllerEventMap[K] : never
834
+ ): void {
835
+ device.emit(event, ...args);
836
+ this.emit(event, ...args);
837
+ }
838
+
839
+ private async onDeviceJoined(payload: AdapterEvents.DeviceJoinedPayload): Promise<void> {
840
+ logger.debug(`Device '${payload.ieeeAddr}' joined`, NS);
841
+
842
+ if (this.options.acceptJoiningDeviceHandler) {
843
+ if (!(await this.options.acceptJoiningDeviceHandler(payload.ieeeAddr))) {
844
+ logger.debug(`Device '${payload.ieeeAddr}' rejected by handler, removing it`, NS);
845
+
846
+ // XXX: GP devices? see Device.removeFromNetwork
847
+ try {
848
+ const clusterId = Zdo.ClusterId.LEAVE_REQUEST;
849
+ const zdoPayload = Zdo.Buffalo.buildRequest(
850
+ this.adapter.hasZdoMessageOverhead,
851
+ clusterId,
852
+ payload.ieeeAddr as Eui64,
853
+ Zdo.LeaveRequestFlags.WITHOUT_REJOIN,
854
+ );
855
+ const response = await this.adapter.sendZdo(payload.ieeeAddr, payload.networkAddress, clusterId, zdoPayload, false);
856
+
857
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.LEAVE_RESPONSE>(response)) {
858
+ throw new Zdo.StatusError(response[0]);
859
+ }
860
+ } catch (error) {
861
+ logger.error(`Failed to remove rejected device: ${(error as Error).message}`, NS);
862
+ }
863
+
864
+ return;
865
+ }
866
+
867
+ logger.debug(`Device '${payload.ieeeAddr}' accepted by handler`, NS);
868
+ }
869
+
870
+ let device = Device.byIeeeAddr(this.database.id, payload.ieeeAddr, true);
871
+ if (!device) {
872
+ logger.debug(`New device '${payload.ieeeAddr}' joined`, NS);
873
+ logger.debug(`Creating device '${payload.ieeeAddr}'`, NS);
874
+ device = Device.create(
875
+ "Unknown",
876
+ payload.ieeeAddr,
877
+ payload.networkAddress,
878
+ undefined,
879
+ undefined,
880
+ undefined,
881
+ undefined,
882
+ InterviewState.Pending,
883
+ undefined,
884
+ this.database.id,
885
+ );
886
+ this.selfAndDeviceEmit(device, "deviceJoined", {device});
887
+ } else if (device.isDeleted) {
888
+ logger.debug(`Deleted device '${payload.ieeeAddr}' joined, undeleting`, NS);
889
+ device.undelete();
890
+ this.selfAndDeviceEmit(device, "deviceJoined", {device});
891
+ }
892
+
893
+ if (device.networkAddress !== payload.networkAddress) {
894
+ logger.debug(`Device '${payload.ieeeAddr}' is already in database with different network address, updating network address`, NS);
895
+ device.networkAddress = payload.networkAddress;
896
+ device.save();
897
+ }
898
+
899
+ device.updateLastSeen();
900
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "deviceJoined"});
901
+ device.implicitCheckin();
902
+
903
+ if (device.interviewState === InterviewState.Pending || device.interviewState === InterviewState.Failed) {
904
+ logger.info(`Interview for '${device.ieeeAddr}' started`, NS);
905
+ this.selfAndDeviceEmit(device, "deviceInterview", {status: "started", device});
906
+
907
+ try {
908
+ await device.interview();
909
+ logger.info(`Succesfully interviewed '${device.ieeeAddr}'`, NS);
910
+ this.selfAndDeviceEmit(device, "deviceInterview", {status: "successful", device});
911
+ } catch (error) {
912
+ logger.error(`Interview failed for '${device.ieeeAddr} with error '${error}'`, NS);
913
+ this.selfAndDeviceEmit(device, "deviceInterview", {status: "failed", device});
914
+ }
915
+ } else {
916
+ logger.debug(`Not interviewing '${payload.ieeeAddr}', interviewState=${device.interviewState}'`, NS);
917
+ }
918
+ }
919
+
920
+ private onZdoResponse(clusterId: Zdo.ClusterId, response: ZdoTypes.GenericZdoResponse): void {
921
+ logger.debug(
922
+ `Received ZDO response: clusterId=${Zdo.ClusterId[clusterId]}, status=${Zdo.Status[response[0]]}, payload=${JSON.stringify(response[1])}`,
923
+ NS,
924
+ );
925
+
926
+ switch (clusterId) {
927
+ case Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE: {
928
+ if (Zdo.Buffalo.checkStatus<typeof clusterId>(response)) {
929
+ this.onNetworkAddress(response[1]);
930
+ }
931
+ break;
932
+ }
933
+
934
+ case Zdo.ClusterId.IEEE_ADDRESS_RESPONSE: {
935
+ if (Zdo.Buffalo.checkStatus<typeof clusterId>(response)) {
936
+ this.onIEEEAddress(response[1]);
937
+ }
938
+ break;
939
+ }
940
+
941
+ case Zdo.ClusterId.END_DEVICE_ANNOUNCE: {
942
+ if (Zdo.Buffalo.checkStatus<typeof clusterId>(response)) {
943
+ this.onDeviceAnnounce(response[1]);
944
+ }
945
+ break;
946
+ }
947
+ }
948
+ }
949
+
950
+ private async onZclPayload(payload: AdapterEvents.ZclPayload): Promise<void> {
951
+ let frame: Zcl.Frame | undefined;
952
+ let device: Device | undefined;
953
+
954
+ if (payload.clusterID === Zcl.Clusters.touchlink.ID) {
955
+ // This is handled by touchlink
956
+ return;
957
+ }
958
+
959
+ if (payload.clusterID === Zcl.Clusters.greenPower.ID) {
960
+ try {
961
+ // Custom clusters are not supported for Green Power since we need to parse the frame to get the device.
962
+ frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
963
+ } catch (error) {
964
+ logger.debug(`Failed to parse frame green power frame, ignoring it: ${error}`, NS);
965
+ return;
966
+ }
967
+
968
+ if (frame.payload.commandID === undefined) {
969
+ // can be from gpd or gpp
970
+ // can be:
971
+ // - greenPower.commandsResponse.commissioningMode
972
+ // - Foundation.defaultRsp for greenPower.commandsResponse.pairing with status INVALID_FIELD or INSUFFICIENT_SPACE
973
+ // - ...
974
+ device = Device.find(this.database.id, payload.address);
975
+ } else {
976
+ if (frame.payload.srcID === undefined) {
977
+ logger.debug("Data is from unsupported green power device with IEEE addressing, skipping...", NS);
978
+ return;
979
+ }
980
+
981
+ const ieeeAddr = GreenPower.sourceIdToIeeeAddress(frame.payload.srcID);
982
+ device = Device.byIeeeAddr(this.database.id, ieeeAddr);
983
+ frame = await this.#greenPower.processCommand(payload, frame, device?.gpSecurityKey ? Buffer.from(device.gpSecurityKey) : undefined);
984
+
985
+ // lookup encapsulated gpDevice for further processing (re-fetch, may have been created by above call)
986
+ device = Device.byIeeeAddr(this.database.id, ieeeAddr);
987
+
988
+ if (!device) {
989
+ logger.debug(`Data is from unknown green power device with address '${ieeeAddr}' (${frame.payload.srcID}), skipping...`, NS);
990
+ return;
991
+ }
992
+ }
993
+ } else {
994
+ /**
995
+ * Handling of re-transmitted Xiaomi messages.
996
+ * https://github.com/Koenkk/zigbee2mqtt/issues/1238
997
+ * https://github.com/Koenkk/zigbee2mqtt/issues/3592
998
+ *
999
+ * Some Xiaomi router devices re-transmit messages from Xiaomi end devices.
1000
+ * The network address of these message is set to the one of the Xiaomi router.
1001
+ * Therefore it looks like if the message came from the Xiaomi router, while in
1002
+ * fact it came from the end device.
1003
+ * Handling these message would result in false state updates.
1004
+ * The group ID attribute of these message defines the network address of the end device.
1005
+ */
1006
+ device = Device.find(this.database.id, payload.address);
1007
+
1008
+ if (device?.manufacturerName === "LUMI" && device?.type === "Router" && payload.groupID) {
1009
+ logger.debug(`Handling re-transmitted Xiaomi message ${device.networkAddress} -> ${payload.groupID}`, NS);
1010
+ device = Device.byNetworkAddress(this.database.id, payload.groupID);
1011
+ }
1012
+
1013
+ try {
1014
+ frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, device ? device.customClusters : {});
1015
+ } catch (error) {
1016
+ logger.debug(`Failed to parse frame: ${error}`, NS);
1017
+ }
1018
+ }
1019
+
1020
+ if (!device) {
1021
+ if (typeof payload.address === "number" && !Device.isDeletedByNetworkAddress(this.database.id, payload.address)) {
1022
+ device = await this.identifyUnknownDevice(payload.address);
1023
+ }
1024
+
1025
+ if (!device) {
1026
+ logger.debug(`Data is from unknown device with address '${payload.address}', skipping...`, NS);
1027
+ return;
1028
+ }
1029
+ }
1030
+
1031
+ logger.debug(
1032
+ `Received payload: clusterID=${payload.clusterID}, address=${payload.address}, groupID=${payload.groupID}, ` +
1033
+ `endpoint=${payload.endpoint}, destinationEndpoint=${payload.destinationEndpoint}, wasBroadcast=${payload.wasBroadcast}, ` +
1034
+ `linkQuality=${payload.linkquality}, frame=${frame?.toString()}`,
1035
+ NS,
1036
+ );
1037
+
1038
+ device.updateLastSeen();
1039
+
1040
+ //no implicit checkin for genPollCtrl data because it might interfere with the explicit checkin
1041
+ if (frame?.cluster.name !== "genPollCtrl") {
1042
+ device.implicitCheckin();
1043
+ }
1044
+
1045
+ device.linkquality = payload.linkquality;
1046
+ let endpoint = device.getEndpoint(payload.endpoint);
1047
+
1048
+ if (!endpoint) {
1049
+ logger.debug(
1050
+ `Data is from unknown endpoint '${payload.endpoint}' from device with network address '${payload.address}', creating it...`,
1051
+ NS,
1052
+ );
1053
+
1054
+ endpoint = device.createEndpoint(payload.endpoint);
1055
+ }
1056
+
1057
+ // Parse command for event
1058
+ let type: Events.MessagePayload["type"] | undefined;
1059
+ let data: Events.MessagePayload["data"] = {};
1060
+ let clusterName: Events.MessagePayload["cluster"];
1061
+ const meta: {
1062
+ zclTransactionSequenceNumber?: number;
1063
+ manufacturerCode?: number;
1064
+ frameControl?: FrameControl;
1065
+ rawData: Buffer;
1066
+ } = {rawData: payload.data};
1067
+
1068
+ if (frame) {
1069
+ const command = frame.command;
1070
+ clusterName = frame.cluster.name;
1071
+ meta.zclTransactionSequenceNumber = frame.header.transactionSequenceNumber;
1072
+ meta.manufacturerCode = frame.header.manufacturerCode;
1073
+ meta.frameControl = frame.header.frameControl;
1074
+
1075
+ if (frame.header.isGlobal) {
1076
+ switch (frame.command.name) {
1077
+ case "report": {
1078
+ type = "attributeReport";
1079
+ data = ZclFrameConverter.attributeKeyValue(frame, device.manufacturerID, device.customClusters);
1080
+ break;
1081
+ }
1082
+
1083
+ case "read": {
1084
+ type = "read";
1085
+ data = ZclFrameConverter.attributeList(frame, device.manufacturerID, device.customClusters);
1086
+ break;
1087
+ }
1088
+
1089
+ case "write": {
1090
+ type = "write";
1091
+ data = ZclFrameConverter.attributeKeyValue(frame, device.manufacturerID, device.customClusters);
1092
+ break;
1093
+ }
1094
+
1095
+ case "readRsp": {
1096
+ type = "readResponse";
1097
+ data = ZclFrameConverter.attributeKeyValue(frame, device.manufacturerID, device.customClusters);
1098
+ break;
1099
+ }
1100
+
1101
+ case "defaultRsp": {
1102
+ if (frame.payload.statusCode !== Zcl.Status.SUCCESS) {
1103
+ logger.debug(
1104
+ `Failure default response from '${payload.address}': clusterID=${payload.clusterID} cmdId=${frame.payload.cmdId} status=${Zcl.Status[frame.payload.statusCode]}`,
1105
+ NS,
1106
+ );
1107
+ }
1108
+
1109
+ break;
1110
+ }
1111
+ }
1112
+
1113
+ if (type === "readResponse" || type === "attributeReport") {
1114
+ // devices report attributes through readRsp or attributeReport
1115
+ if (frame.cluster.name === "genBasic") {
1116
+ device.updateGenBasic(data as TPartialClusterAttributes<"genBasic">);
1117
+ }
1118
+
1119
+ endpoint.saveClusterAttributeKeyValue(frame.cluster.ID, data);
1120
+ }
1121
+ } else {
1122
+ if (frame.header.isSpecific) {
1123
+ type = `command${command.name.charAt(0).toUpperCase()}${command.name.slice(1)}`;
1124
+ data = frame.payload;
1125
+ }
1126
+ }
1127
+ } else {
1128
+ type = "raw";
1129
+ data = payload.data;
1130
+ const name = Zcl.Utils.getCluster(payload.clusterID, device.manufacturerID, device.customClusters).name;
1131
+ clusterName = Number.isNaN(Number(name)) ? name : Number(name);
1132
+ }
1133
+
1134
+ if (type && data) {
1135
+ const linkquality = payload.linkquality;
1136
+ const groupID = payload.groupID;
1137
+
1138
+ this.selfAndDeviceEmit(device, "message", {
1139
+ type,
1140
+ device,
1141
+ endpoint,
1142
+ data,
1143
+ linkquality,
1144
+ groupID,
1145
+ cluster: clusterName,
1146
+ meta,
1147
+ });
1148
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "messageEmitted"});
1149
+ } else {
1150
+ this.selfAndDeviceEmit(device, "lastSeenChanged", {device, reason: "messageNonEmitted"});
1151
+ }
1152
+
1153
+ if (frame) {
1154
+ await device.onZclData(payload, frame, endpoint);
1155
+ }
1156
+ }
1157
+ }
1158
+
1159
+ export default Controller;