@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,1235 @@
1
+ import assert from "node:assert";
2
+ import type {Events as AdapterEvents} from "../../adapter";
3
+ import {logger} from "../../utils/logger";
4
+ import * as ZSpec from "../../zspec";
5
+ import {BroadcastAddress} from "../../zspec/enums";
6
+ import type {Eui64} from "../../zspec/tstypes";
7
+ import * as Zcl from "../../zspec/zcl";
8
+ import type {TFoundation} from "../../zspec/zcl/definition/clusters-types";
9
+ import type * as ZclTypes from "../../zspec/zcl/definition/tstype";
10
+ import * as Zdo from "../../zspec/zdo";
11
+ import Request from "../helpers/request";
12
+ import RequestQueue from "../helpers/requestQueue";
13
+ import * as ZclFrameConverter from "../helpers/zclFrameConverter";
14
+ import zclTransactionSequenceNumber from "../helpers/zclTransactionSequenceNumber";
15
+ import type {
16
+ ClusterOrRawAttributeKeys,
17
+ ClusterOrRawAttributes,
18
+ ClusterOrRawPayload,
19
+ ClusterOrRawWriteAttributes,
20
+ FoundationOrRawPayload,
21
+ KeyValue,
22
+ PartialClusterOrRawWriteAttributes,
23
+ SendPolicy,
24
+ TCustomCluster,
25
+ } from "../tstype";
26
+ import Device from "./device";
27
+ import Entity from "./entity";
28
+ import Group from "./group";
29
+ import {ZigbeeEntity} from "./zigbeeEntity";
30
+
31
+ const NS = "zh:controller:endpoint";
32
+
33
+ export interface ConfigureReportingItem<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> {
34
+ attribute: ClusterOrRawAttributeKeys<Cl, Custom>[number] | {ID: number; type: number};
35
+ minimumReportInterval: number;
36
+ maximumReportInterval: number;
37
+ reportableChange?: number;
38
+ }
39
+
40
+ export interface ReadReportConfigItem<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> {
41
+ direction?: Zcl.Direction;
42
+ attribute: ClusterOrRawAttributeKeys<Cl, Custom>[number] | {ID: number};
43
+ }
44
+
45
+ interface Options {
46
+ manufacturerCode?: number;
47
+ disableDefaultResponse?: boolean;
48
+ disableResponse?: boolean;
49
+ timeout?: number;
50
+ direction?: Zcl.Direction;
51
+ srcEndpoint?: number;
52
+ profileId?: number;
53
+ reservedBits?: number;
54
+ transactionSequenceNumber?: number;
55
+ disableRecovery?: boolean;
56
+ writeUndiv?: boolean;
57
+ sendPolicy?: SendPolicy;
58
+ }
59
+
60
+ interface OptionsWithDefaults extends Options {
61
+ disableDefaultResponse: boolean;
62
+ disableResponse: boolean;
63
+ timeout: number;
64
+ direction: Zcl.Direction;
65
+ reservedBits: number;
66
+ disableRecovery: boolean;
67
+ writeUndiv: boolean;
68
+ }
69
+
70
+ interface Clusters {
71
+ [cluster: string]: {
72
+ attributes: {[attribute: string]: number | string};
73
+ };
74
+ }
75
+
76
+ export interface BindInternal {
77
+ cluster: number;
78
+ type: "endpoint" | "group";
79
+ deviceIeeeAddress?: string;
80
+ endpointID?: number;
81
+ groupID?: number;
82
+ }
83
+
84
+ interface Bind {
85
+ cluster: ZclTypes.Cluster;
86
+ target: Endpoint | Group;
87
+ }
88
+
89
+ interface ConfiguredReportingInternal {
90
+ cluster: number;
91
+ attrId: number;
92
+ minRepIntval: number;
93
+ maxRepIntval: number;
94
+ repChange: number;
95
+ manufacturerCode?: number | undefined;
96
+ }
97
+
98
+ interface ConfiguredReporting {
99
+ cluster: ZclTypes.Cluster;
100
+ attribute: ZclTypes.Attribute;
101
+ minimumReportInterval: number;
102
+ maximumReportInterval: number;
103
+ reportableChange: number;
104
+ }
105
+
106
+ export class Endpoint extends ZigbeeEntity {
107
+ private databaseID: number;
108
+ public deviceID?: number;
109
+ public inputClusters: number[];
110
+ public outputClusters: number[];
111
+ public profileID?: number;
112
+ // biome-ignore lint/style/useNamingConvention: cross-repo impact
113
+ public readonly ID: number;
114
+ public readonly clusters: Clusters;
115
+ public deviceIeeeAddress: string;
116
+ public deviceNetworkAddress: number;
117
+ private _binds: BindInternal[];
118
+ private _configuredReportings: ConfiguredReportingInternal[];
119
+ public meta: KeyValue;
120
+ private pendingRequests: RequestQueue;
121
+
122
+ // Getters/setters
123
+ get binds(): Bind[] {
124
+ const binds: Bind[] = [];
125
+
126
+ for (const bind of this._binds) {
127
+ // XXX: properties assumed valid when associated to `type`
128
+ const target: Group | Endpoint | undefined =
129
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
130
+ bind.type === "endpoint" ? Device.byIeeeAddr(this.databaseID, bind.deviceIeeeAddress!)?.getEndpoint(bind.endpointID!) : Group.byGroupID(bind.groupID!, this.databaseID);
131
+
132
+ if (target) {
133
+ binds.push({target, cluster: this.getCluster(bind.cluster)});
134
+ }
135
+ }
136
+
137
+ return binds;
138
+ }
139
+
140
+ get configuredReportings(): ConfiguredReporting[] {
141
+ const device = this.getDevice();
142
+
143
+ return this._configuredReportings.map((entry, index) => {
144
+ const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode, device.customClusters);
145
+ const attribute: ZclTypes.Attribute = cluster.getAttribute(entry.attrId) ?? {
146
+ ID: entry.attrId,
147
+ name: `attr${index}`,
148
+ type: Zcl.DataType.UNKNOWN,
149
+ manufacturerCode: undefined,
150
+ };
151
+
152
+ return {
153
+ cluster,
154
+ attribute,
155
+ minimumReportInterval: entry.minRepIntval,
156
+ maximumReportInterval: entry.maxRepIntval,
157
+ reportableChange: entry.repChange,
158
+ };
159
+ });
160
+ }
161
+
162
+ private constructor(
163
+ databaseID: number,
164
+ id: number,
165
+ profileID: number | undefined,
166
+ deviceID: number | undefined,
167
+ inputClusters: number[],
168
+ outputClusters: number[],
169
+ deviceNetworkAddress: number,
170
+ deviceIeeeAddress: string,
171
+ clusters: Clusters,
172
+ binds: BindInternal[],
173
+ configuredReportings: ConfiguredReportingInternal[],
174
+ meta: KeyValue,
175
+ ) {
176
+ super();
177
+ this.databaseID = databaseID;
178
+ this.ID = id;
179
+ this.profileID = profileID;
180
+ this.deviceID = deviceID;
181
+ this.inputClusters = inputClusters;
182
+ this.outputClusters = outputClusters;
183
+ this.deviceNetworkAddress = deviceNetworkAddress;
184
+ this.deviceIeeeAddress = deviceIeeeAddress;
185
+ this.clusters = clusters;
186
+ this._binds = binds;
187
+ this._configuredReportings = configuredReportings;
188
+ this.meta = meta;
189
+ this.pendingRequests = new RequestQueue(this);
190
+ }
191
+
192
+ /**
193
+ * Get device of this endpoint
194
+ */
195
+ public getDevice(): Device {
196
+ const device = Device.byIeeeAddr(this.databaseID, this.deviceIeeeAddress);
197
+
198
+ if (!device) {
199
+ logger.error(`Tried to get unknown/deleted device ${this.deviceIeeeAddress} from endpoint ${this.ID}.`, NS);
200
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
201
+ logger.debug(new Error().stack!, NS);
202
+ }
203
+
204
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
205
+ return device!;
206
+ }
207
+
208
+ /**
209
+ * @param {number|string} clusterKey
210
+ * @returns {boolean}
211
+ */
212
+ public supportsInputCluster(clusterKey: number | string): boolean {
213
+ const cluster = this.getCluster(clusterKey);
214
+ return this.inputClusters.includes(cluster.ID);
215
+ }
216
+
217
+ /**
218
+ * @param {number|string} clusterKey
219
+ * @returns {boolean}
220
+ */
221
+ public supportsOutputCluster(clusterKey: number | string): boolean {
222
+ const cluster = this.getCluster(clusterKey);
223
+ return this.outputClusters.includes(cluster.ID);
224
+ }
225
+
226
+ /**
227
+ * @returns {ZclTypes.Cluster[]}
228
+ */
229
+ public getInputClusters(): ZclTypes.Cluster[] {
230
+ return this.clusterNumbersToClusters(this.inputClusters);
231
+ }
232
+
233
+ /**
234
+ * @returns {ZclTypes.Cluster[]}
235
+ */
236
+ public getOutputClusters(): ZclTypes.Cluster[] {
237
+ return this.clusterNumbersToClusters(this.outputClusters);
238
+ }
239
+
240
+ private clusterNumbersToClusters(clusterNumbers: number[]): ZclTypes.Cluster[] {
241
+ return clusterNumbers.map((c) => this.getCluster(c));
242
+ }
243
+
244
+ /*
245
+ * CRUD
246
+ */
247
+
248
+ public static fromDatabaseRecord(record: KeyValue, deviceNetworkAddress: number, deviceIeeeAddress: string, databaseID: number): Endpoint {
249
+ // Migrate attrs to attributes
250
+ for (const entryKey in record.clusters) {
251
+ const entry = record.clusters[entryKey];
252
+
253
+ if (entry.attrs != null) {
254
+ entry.attributes = entry.attrs;
255
+ delete entry.attrs;
256
+ }
257
+ }
258
+
259
+ // Migrate cluster renames from https://github.com/Koenkk/zigbee-herdsman/pull/1503 @deprecated 3.0
260
+ /* v8 ignore start */
261
+ if (record.clusters.piRetailTunnel) {
262
+ record.clusters.retailTunnel = record.clusters.piRetailTunnel;
263
+ delete record.clusters.piRetailTunnel;
264
+ }
265
+ if (record.clusters.tunneling) {
266
+ record.clusters.seTunneling = record.clusters.tunneling;
267
+ delete record.clusters.tunneling;
268
+ }
269
+ if (record.clusters.haMeterIdentification) {
270
+ record.clusters.seMeterIdentification = record.clusters.haMeterIdentification;
271
+ delete record.clusters.haMeterIdentification;
272
+ }
273
+ /* v8 ignore stop */
274
+
275
+ return new Endpoint(
276
+ databaseID,
277
+ record.epId,
278
+ record.profId,
279
+ record.devId,
280
+ record.inClusterList,
281
+ record.outClusterList,
282
+ deviceNetworkAddress,
283
+ deviceIeeeAddress,
284
+ record.clusters,
285
+ record.binds || [],
286
+ record.configuredReportings || [],
287
+ record.meta || {},
288
+ );
289
+ }
290
+
291
+ public toDatabaseRecord(): KeyValue {
292
+ return {
293
+ profId: this.profileID,
294
+ epId: this.ID,
295
+ devId: this.deviceID,
296
+ inClusterList: this.inputClusters,
297
+ outClusterList: this.outputClusters,
298
+ clusters: this.clusters,
299
+ binds: this._binds,
300
+ configuredReportings: this._configuredReportings,
301
+ meta: this.meta,
302
+ };
303
+ }
304
+
305
+ public static create(
306
+ databaseID: number,
307
+ id: number,
308
+ profileID: number | undefined,
309
+ deviceID: number | undefined,
310
+ inputClusters: number[],
311
+ outputClusters: number[],
312
+ deviceNetworkAddress: number,
313
+ deviceIeeeAddress: string,
314
+ ): Endpoint {
315
+ return new Endpoint(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, {}, [], [], {});
316
+ }
317
+
318
+ public saveClusterAttributeKeyValue(clusterKey: number | string, list: KeyValue): void {
319
+ const cluster = this.getCluster(clusterKey);
320
+
321
+ if (!this.clusters[cluster.name]) {
322
+ this.clusters[cluster.name] = {attributes: {}};
323
+ }
324
+
325
+ for (const attribute in list) {
326
+ this.clusters[cluster.name].attributes[attribute] = list[attribute];
327
+ }
328
+ }
329
+
330
+ public getClusterAttributeValue(clusterKey: number | string, attributeKey: number | string): number | string | undefined {
331
+ const cluster = this.getCluster(clusterKey);
332
+
333
+ if (this.clusters[cluster.name] && this.clusters[cluster.name].attributes) {
334
+ // XXX: used to throw (behavior changed in #1455)
335
+ const attribute = cluster.getAttribute(attributeKey);
336
+
337
+ if (attribute) {
338
+ return this.clusters[cluster.name].attributes[attribute.name];
339
+ }
340
+ }
341
+
342
+ return undefined;
343
+ }
344
+
345
+ public saveClusterAttributeReportConfig(
346
+ clusterId: number,
347
+ manufacturerCode: Zcl.ManufacturerCode | undefined,
348
+ reportConfigs: TFoundation["readReportConfigRsp"],
349
+ ): void {
350
+ for (const entry of reportConfigs) {
351
+ if (entry.direction === Zcl.Direction.SERVER_TO_CLIENT) {
352
+ continue;
353
+ }
354
+
355
+ const existingConfigIdx = this._configuredReportings.findIndex(
356
+ (r) =>
357
+ r.cluster === clusterId &&
358
+ r.attrId === entry.attrId &&
359
+ (manufacturerCode === undefined || manufacturerCode === r.manufacturerCode),
360
+ );
361
+
362
+ if (entry.status === Zcl.Status.SUCCESS) {
363
+ if (existingConfigIdx > -1) {
364
+ this._configuredReportings[existingConfigIdx].minRepIntval = entry.minRepIntval as number;
365
+ this._configuredReportings[existingConfigIdx].maxRepIntval = entry.maxRepIntval as number;
366
+ this._configuredReportings[existingConfigIdx].repChange = entry.repChange as number;
367
+ } else {
368
+ this._configuredReportings.push({
369
+ cluster: clusterId,
370
+ attrId: entry.attrId,
371
+ minRepIntval: entry.minRepIntval as number,
372
+ maxRepIntval: entry.maxRepIntval as number,
373
+ repChange: entry.repChange as number,
374
+ manufacturerCode,
375
+ });
376
+ }
377
+ } else {
378
+ // UNSUPPORTED_ATTRIBUTE, UNREPORTABLE_ATTRIBUTE, NOT_FOUND
379
+ if (existingConfigIdx > -1) {
380
+ this._configuredReportings.splice(existingConfigIdx, 1);
381
+ }
382
+ }
383
+ }
384
+
385
+ this.save();
386
+ }
387
+
388
+ public saveBindings(binds: BindInternal[]): void {
389
+ this._binds = binds;
390
+
391
+ this.save();
392
+ }
393
+
394
+ public clearBindings(): void {
395
+ this._binds.length = 0;
396
+
397
+ this.save();
398
+ }
399
+
400
+ public hasPendingRequests(): boolean {
401
+ return this.pendingRequests.size > 0;
402
+ }
403
+
404
+ public async sendPendingRequests(fastPolling: boolean): Promise<void> {
405
+ return await this.pendingRequests.send(fastPolling);
406
+ }
407
+
408
+ private async sendRequest(frame: Zcl.Frame, options: OptionsWithDefaults): Promise<AdapterEvents.ZclPayload>;
409
+ private async sendRequest<Type>(frame: Zcl.Frame, options: OptionsWithDefaults, func: () => Promise<Type>): Promise<Type>;
410
+ private async sendRequest<Type>(
411
+ frame: Zcl.Frame,
412
+ options: OptionsWithDefaults,
413
+ func: () => Promise<Type> = (): Promise<Type> => {
414
+ return Entity.getAdapterByID(this.databaseID)?.sendZclFrameToEndpoint(
415
+ this.deviceIeeeAddress,
416
+ this.deviceNetworkAddress,
417
+ this.ID,
418
+ frame,
419
+ options.timeout,
420
+ options.disableResponse,
421
+ options.disableRecovery,
422
+ options.srcEndpoint,
423
+ options.profileId,
424
+ ) as Promise<Type>;
425
+ },
426
+ ): Promise<Type> {
427
+ const logPrefix = `Request Queue (${this.deviceIeeeAddress}/${this.ID}): `;
428
+ const device = this.getDevice();
429
+ const request = new Request(func, frame, device.pendingRequestTimeout, options.sendPolicy);
430
+
431
+ if (request.sendPolicy !== "bulk") {
432
+ // Check if such a request is already in the queue and remove the old one(s) if necessary
433
+ this.pendingRequests.filter(request);
434
+ }
435
+
436
+ // send without queueing if sendPolicy is 'immediate' or if the device has no timeout set
437
+ if (request.sendPolicy === "immediate" || !device.pendingRequestTimeout) {
438
+ if (device.pendingRequestTimeout > 0) {
439
+ logger.debug(`${logPrefix}send ${frame.command.name} request immediately (sendPolicy=${options.sendPolicy})`, NS);
440
+ }
441
+ return await request.send();
442
+ }
443
+ // If this is a bulk message, we queue directly.
444
+ if (request.sendPolicy === "bulk") {
445
+ logger.debug(`${logPrefix}queue request (${this.pendingRequests.size})`, NS);
446
+ return await this.pendingRequests.queue(request);
447
+ }
448
+
449
+ try {
450
+ logger.debug(`${logPrefix}send request`, NS);
451
+ return await request.send();
452
+ } catch (error) {
453
+ // If we got a failed transaction, the device is likely sleeping.
454
+ // Queue for transmission later.
455
+ logger.debug(`${logPrefix}queue request (transaction failed) (${error})`, NS);
456
+ return await this.pendingRequests.queue(request);
457
+ }
458
+ }
459
+
460
+ /*
461
+ * Zigbee functions
462
+ */
463
+ private checkStatus(payload: [{status: Zcl.Status}] | {cmdId: number; statusCode: number}): void {
464
+ const codes = Array.isArray(payload) ? payload.map((i) => i.status) : [payload.statusCode];
465
+ const invalid = codes.find((c) => c !== Zcl.Status.SUCCESS);
466
+ if (invalid) throw new Zcl.StatusError(invalid);
467
+ }
468
+
469
+ public async report<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
470
+ clusterKey: Cl,
471
+ attributes: PartialClusterOrRawWriteAttributes<Cl, Custom>,
472
+ options?: Options,
473
+ ): Promise<void> {
474
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
475
+ const payload: TFoundation["report"] = [];
476
+
477
+ // TODO: handle `attr.report !== true`
478
+
479
+ for (const nameOrID in attributes) {
480
+ const attribute = cluster.getAttribute(nameOrID);
481
+
482
+ if (attribute) {
483
+ payload.push({attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type});
484
+ } else if (!Number.isNaN(Number(nameOrID))) {
485
+ const value = attributes[nameOrID];
486
+
487
+ payload.push({attrId: Number(nameOrID), attrData: value.value, dataType: value.type});
488
+ } else {
489
+ throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
490
+ }
491
+ }
492
+
493
+ await this.zclCommand(cluster, "report", payload, options, attributes);
494
+ }
495
+
496
+ public async write<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
497
+ clusterKey: Cl,
498
+ attributes: PartialClusterOrRawWriteAttributes<Cl, Custom>,
499
+ options?: Options,
500
+ ): Promise<void> {
501
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
502
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
503
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet<Cl, Custom>(
504
+ cluster,
505
+ Object.keys(attributes),
506
+ optionsWithDefaults.manufacturerCode,
507
+ "write",
508
+ );
509
+ const payload: TFoundation["write"] = [];
510
+
511
+ for (const nameOrID in attributes) {
512
+ const attribute = cluster.getAttribute(nameOrID);
513
+
514
+ if (attribute) {
515
+ // TODO: handle `attr.writeOptional !== true`
516
+ const attrData = Zcl.Utils.processAttributeWrite(attribute, attributes[nameOrID]);
517
+
518
+ payload.push({attrId: attribute.ID, attrData, dataType: attribute.type});
519
+ } else if (!Number.isNaN(Number(nameOrID))) {
520
+ const value = attributes[nameOrID];
521
+
522
+ payload.push({attrId: Number(nameOrID), attrData: value.value, dataType: value.type});
523
+ } else {
524
+ throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
525
+ }
526
+ }
527
+
528
+ await this.zclCommand(cluster, optionsWithDefaults.writeUndiv ? "writeUndiv" : "write", payload, optionsWithDefaults, attributes, true);
529
+ }
530
+
531
+ public async writeResponse<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
532
+ clusterKey: Cl,
533
+ transactionSequenceNumber: number,
534
+ attributes: Partial<Record<ClusterOrRawAttributeKeys<Cl, Custom>[number], TFoundation["writeRsp"][number]>> &
535
+ Record<number, TFoundation["writeRsp"][number]>,
536
+ options?: Options,
537
+ ): Promise<void> {
538
+ assert(options?.transactionSequenceNumber === undefined, "Use parameter");
539
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
540
+ const payload: TFoundation["writeRsp"] = [];
541
+
542
+ for (const nameOrID in attributes) {
543
+ // biome-ignore lint/style/noNonNullAssertion: from loop
544
+ const value = attributes[nameOrID]!;
545
+
546
+ if (value.status !== undefined) {
547
+ const attribute = cluster.getAttribute(nameOrID);
548
+
549
+ if (attribute) {
550
+ payload.push({attrId: attribute.ID, status: value.status});
551
+ } else if (!Number.isNaN(Number(nameOrID))) {
552
+ payload.push({attrId: Number(nameOrID), status: value.status});
553
+ } else {
554
+ throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
555
+ }
556
+ } else {
557
+ throw new Error(`Missing attribute 'status'`);
558
+ }
559
+ }
560
+
561
+ await this.zclCommand(
562
+ cluster,
563
+ "writeRsp",
564
+ payload,
565
+ {direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber},
566
+ attributes,
567
+ );
568
+ }
569
+
570
+ // XXX: ideally, the return type should limit to the contents of the `attributes` param
571
+ public async read<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
572
+ clusterKey: Cl,
573
+ attributes: ClusterOrRawAttributeKeys<Cl, Custom>,
574
+ options?: Options,
575
+ ): Promise<ClusterOrRawAttributes<Cl, Custom>> {
576
+ const device = this.getDevice();
577
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
578
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
579
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet<Cl, Custom>(
580
+ cluster,
581
+ attributes,
582
+ optionsWithDefaults.manufacturerCode,
583
+ "read",
584
+ );
585
+ const payload: TFoundation["read"] = [];
586
+
587
+ // TODO: handle `attr.required !== true` => should not throw
588
+
589
+ for (const attribute of attributes) {
590
+ if (typeof attribute === "number") {
591
+ payload.push({attrId: attribute});
592
+ } else {
593
+ const attr = cluster.getAttribute(attribute);
594
+
595
+ if (attr) {
596
+ Zcl.Utils.processAttributePreRead(attr);
597
+ payload.push({attrId: attr.ID});
598
+ } else {
599
+ logger.warning(`Ignoring unknown attribute ${attribute} in cluster ${cluster.name}`, NS);
600
+ }
601
+ }
602
+ }
603
+
604
+ // TODO: could be sending empty array payload
605
+ const resultFrame = await this.zclCommand(cluster, "read", payload, optionsWithDefaults, attributes, true);
606
+
607
+ return resultFrame
608
+ ? ZclFrameConverter.attributeKeyValue<Cl, Custom>(resultFrame, device.manufacturerID, device.customClusters)
609
+ : ({} as ClusterOrRawWriteAttributes<Cl, Custom>);
610
+ }
611
+
612
+ public async readResponse<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
613
+ clusterKey: Cl,
614
+ transactionSequenceNumber: number,
615
+ attributes: PartialClusterOrRawWriteAttributes<Cl, Custom>,
616
+ options?: Options,
617
+ ): Promise<void> {
618
+ assert(options?.transactionSequenceNumber === undefined, "Use parameter");
619
+
620
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
621
+ const payload: TFoundation["readRsp"] = [];
622
+
623
+ for (const nameOrID in attributes) {
624
+ const attribute = cluster.getAttribute(nameOrID);
625
+
626
+ if (attribute) {
627
+ payload.push({attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type, status: 0});
628
+ } else if (!Number.isNaN(Number(nameOrID))) {
629
+ const value = attributes[nameOrID];
630
+
631
+ payload.push({attrId: Number(nameOrID), attrData: value.value, dataType: value.type, status: 0});
632
+ } else {
633
+ throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
634
+ }
635
+ }
636
+
637
+ await this.zclCommand(
638
+ cluster,
639
+ "readRsp",
640
+ payload,
641
+ {direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber},
642
+ attributes,
643
+ );
644
+ }
645
+
646
+ public async updateSimpleDescriptor(): Promise<void> {
647
+ const clusterId = Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST;
648
+ const adapter = Entity.getAdapterByID(this.databaseID);
649
+ if (!adapter) {
650
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
651
+ }
652
+ const zdoPayload = Zdo.Buffalo.buildRequest(adapter.hasZdoMessageOverhead ?? false, clusterId, this.deviceNetworkAddress, this.ID);
653
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, clusterId, zdoPayload, false);
654
+
655
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.SIMPLE_DESCRIPTOR_RESPONSE>(response)) {
656
+ throw new Zdo.StatusError(response[0]);
657
+ }
658
+
659
+ const simpleDescriptor = response[1];
660
+
661
+ this.profileID = simpleDescriptor.profileId;
662
+ this.deviceID = simpleDescriptor.deviceId;
663
+ this.inputClusters = simpleDescriptor.inClusterList;
664
+ this.outputClusters = simpleDescriptor.outClusterList;
665
+ }
666
+
667
+ public hasBind(clusterId: number, target: Endpoint | Group): boolean {
668
+ return this.getBindIndex(clusterId, target) !== -1;
669
+ }
670
+
671
+ public getBindIndex(clusterId: number, target: Endpoint | Group): number {
672
+ return this.binds.findIndex((b) => b.cluster.ID === clusterId && b.target === target);
673
+ }
674
+
675
+ public addBinding(clusterKey: number | string, target: Endpoint | Group | number): void {
676
+ const cluster = this.getCluster(clusterKey);
677
+
678
+ if (typeof target === "number") {
679
+ target = Group.byGroupID(target, this.databaseID) || Group.create(target, this.databaseID);
680
+ }
681
+
682
+ this.addBindingInternal(cluster, target);
683
+ }
684
+
685
+ private addBindingInternal(cluster: ZclTypes.Cluster, target: Endpoint | Group): void {
686
+ if (!this.hasBind(cluster.ID, target)) {
687
+ if (target instanceof Group) {
688
+ this._binds.push({cluster: cluster.ID, groupID: target.groupID, type: "group"});
689
+ } else {
690
+ this._binds.push({
691
+ cluster: cluster.ID,
692
+ type: "endpoint",
693
+ deviceIeeeAddress: target.deviceIeeeAddress,
694
+ endpointID: target.ID,
695
+ });
696
+ }
697
+
698
+ this.save();
699
+ }
700
+ }
701
+
702
+ public async bind(clusterKey: number | string, target: Endpoint | Group | number): Promise<void> {
703
+ const cluster = this.getCluster(clusterKey);
704
+
705
+ if (typeof target === "number") {
706
+ target = Group.byGroupID(target, this.databaseID) || Group.create(target, this.databaseID);
707
+ }
708
+
709
+ const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target.groupID;
710
+
711
+ const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
712
+ logger.debug(log, NS);
713
+
714
+ try {
715
+ const zdoClusterId = Zdo.ClusterId.BIND_REQUEST;
716
+ const zdoPayload = Zdo.Buffalo.buildRequest(
717
+ Entity.getAdapterByID(this.databaseID)?.hasZdoMessageOverhead ?? false,
718
+ zdoClusterId,
719
+ this.deviceIeeeAddress as Eui64,
720
+ this.ID,
721
+ cluster.ID,
722
+ target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING,
723
+ target instanceof Endpoint ? (target.deviceIeeeAddress as Eui64) : ZSpec.BLANK_EUI64,
724
+ target instanceof Group ? target.groupID : 0,
725
+ target instanceof Endpoint ? target.ID : 0xff,
726
+ );
727
+ const adapter = Entity.getAdapterByID(this.databaseID);
728
+ if (!adapter) {
729
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
730
+ }
731
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
732
+
733
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.BIND_RESPONSE>(response)) {
734
+ throw new Zdo.StatusError(response[0]);
735
+ }
736
+
737
+ this.addBindingInternal(cluster, target);
738
+ } catch (error) {
739
+ const err = error as Error;
740
+ err.message = `${log} failed (${err.message})`;
741
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
742
+ logger.debug(err.stack!, NS);
743
+ throw error;
744
+ }
745
+ }
746
+
747
+ public save(): void {
748
+ this.getDevice().save();
749
+ }
750
+
751
+ public async unbind(clusterKey: number | string, target: Endpoint | Group | number, force = false): Promise<void> {
752
+ // When force is true the unbind is done even when the bind is not in the bind list, additionally when the target is a number
753
+ // it will not check if the group exists.
754
+ const cluster = this.getCluster(clusterKey);
755
+ const action = `Unbind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name}`;
756
+
757
+ if (typeof target === "number") {
758
+ const groupTarget = Group.byGroupID(target, this.databaseID);
759
+ if (groupTarget) {
760
+ target = groupTarget;
761
+ } else if (!force) {
762
+ throw new Error(`${action} invalid target '${target}' (no group with this ID exists).`);
763
+ }
764
+ }
765
+
766
+ const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target instanceof Group ? target.groupID : target;
767
+ const log = `${action} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
768
+ const index = target instanceof Endpoint || target instanceof Group ? this.getBindIndex(cluster.ID, target) : -1;
769
+
770
+ if (index === -1 && !force) {
771
+ logger.debug(`${log} no bind present, skipping.`, NS);
772
+ return;
773
+ }
774
+
775
+ logger.debug(log, NS);
776
+
777
+ try {
778
+ const zdoClusterId = Zdo.ClusterId.UNBIND_REQUEST;
779
+ const adapter = Entity.getAdapterByID(this.databaseID);
780
+ if (!adapter) {
781
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
782
+ }
783
+ const zdoPayload = Zdo.Buffalo.buildRequest(
784
+ adapter.hasZdoMessageOverhead,
785
+ zdoClusterId,
786
+ this.deviceIeeeAddress as Eui64,
787
+ this.ID,
788
+ cluster.ID,
789
+ target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING,
790
+ target instanceof Endpoint ? (target.deviceIeeeAddress as Eui64) : ZSpec.BLANK_EUI64,
791
+ target instanceof Group ? target.groupID : typeof target === "number" ? target : 0,
792
+ target instanceof Endpoint ? target.ID : 0xff,
793
+ );
794
+
795
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
796
+
797
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.UNBIND_RESPONSE>(response)) {
798
+ if (response[0] === Zdo.Status.NO_ENTRY) {
799
+ logger.debug(`${log} no entry on device, removing entry from database.`, NS);
800
+ } else {
801
+ throw new Zdo.StatusError(response[0]);
802
+ }
803
+ }
804
+
805
+ if (index !== -1) {
806
+ this._binds.splice(index, 1);
807
+ this.save();
808
+ }
809
+ } catch (error) {
810
+ const err = error as Error;
811
+ err.message = `${log} failed (${err.message})`;
812
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
813
+ logger.debug(err.stack!, NS);
814
+ throw error;
815
+ }
816
+ }
817
+
818
+ public async defaultResponse(
819
+ commandID: number,
820
+ status: number,
821
+ clusterID: number,
822
+ transactionSequenceNumber: number,
823
+ options?: Options,
824
+ ): Promise<void> {
825
+ assert(options?.transactionSequenceNumber === undefined, "Use parameter");
826
+ const payload = {cmdId: commandID, statusCode: status};
827
+ await this.zclCommand(clusterID, "defaultRsp", payload, {direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber});
828
+ }
829
+
830
+ public async configureReporting<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
831
+ clusterKey: Cl,
832
+ items: ConfigureReportingItem<Cl, Custom>[],
833
+ options?: Options,
834
+ ): Promise<void> {
835
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
836
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
837
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet<Cl, Custom>(
838
+ cluster,
839
+ items,
840
+ optionsWithDefaults.manufacturerCode,
841
+ "configureReporting",
842
+ );
843
+
844
+ const payload = items.map((item): TFoundation["configReport"][number] => {
845
+ let dataType: number;
846
+ let attrId: number;
847
+
848
+ if (typeof item.attribute === "object") {
849
+ dataType = item.attribute.type;
850
+ attrId = item.attribute.ID;
851
+ } else {
852
+ const attribute = cluster.getAttribute(item.attribute);
853
+
854
+ if (attribute) {
855
+ dataType = attribute.type;
856
+ attrId = attribute.ID;
857
+ } else {
858
+ throw new Error(`Invalid attribute '${item.attribute}' for cluster '${clusterKey}'`);
859
+ }
860
+ }
861
+
862
+ return {
863
+ direction: Zcl.Direction.CLIENT_TO_SERVER,
864
+ attrId,
865
+ dataType,
866
+ minRepIntval: item.minimumReportInterval,
867
+ maxRepIntval: item.maximumReportInterval,
868
+ repChange: item.reportableChange,
869
+ };
870
+ });
871
+
872
+ await this.zclCommand(cluster, "configReport", payload, optionsWithDefaults, items, true);
873
+
874
+ for (const e of payload) {
875
+ this._configuredReportings = this._configuredReportings.filter(
876
+ (c) =>
877
+ !(
878
+ c.attrId === e.attrId &&
879
+ c.cluster === cluster.ID &&
880
+ (!("manufacturerCode" in c) || c.manufacturerCode === optionsWithDefaults.manufacturerCode)
881
+ ),
882
+ );
883
+ }
884
+
885
+ for (const entry of payload) {
886
+ if (entry.maxRepIntval !== 0xffff) {
887
+ this._configuredReportings.push({
888
+ cluster: cluster.ID,
889
+ attrId: entry.attrId,
890
+ minRepIntval: entry.minRepIntval as number,
891
+ maxRepIntval: entry.maxRepIntval as number,
892
+ // expects items[].attribute to always point to a number DataType
893
+ repChange: entry.repChange as number,
894
+ manufacturerCode: optionsWithDefaults.manufacturerCode,
895
+ });
896
+ }
897
+ }
898
+
899
+ this.save();
900
+ }
901
+
902
+ public async readReportingConfig<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(
903
+ clusterKey: Cl,
904
+ items: ReadReportConfigItem<Cl, Custom>[],
905
+ options?: Options,
906
+ ): Promise<TFoundation["readReportConfigRsp"]> {
907
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
908
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
909
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet<Cl, Custom>(
910
+ cluster,
911
+ items,
912
+ optionsWithDefaults.manufacturerCode,
913
+ "readReportingConfig",
914
+ );
915
+
916
+ const payload: TFoundation["readReportConfig"] = [];
917
+
918
+ for (const item of items) {
919
+ if (typeof item.attribute === "object") {
920
+ payload.push({direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: item.attribute.ID});
921
+ } else {
922
+ const attribute = cluster.getAttribute(item.attribute);
923
+
924
+ if (attribute) {
925
+ payload.push({direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: attribute.ID});
926
+ } else {
927
+ logger.warning(`Ignoring unknown attribute ${item.attribute} in cluster ${cluster.name}`, NS);
928
+ }
929
+ }
930
+ }
931
+
932
+ // TODO: could be sending empty array payload
933
+ // don't check status otherwise whole command fails (we want to cherry-pick here)
934
+ const response = await this.zclCommand(cluster, "readReportConfig", payload, optionsWithDefaults, items, false);
935
+
936
+ if (response) {
937
+ this.saveClusterAttributeReportConfig(response.cluster.ID, optionsWithDefaults.manufacturerCode, response.payload);
938
+
939
+ return response.payload;
940
+ }
941
+
942
+ throw new Error("No response received");
943
+ }
944
+
945
+ public async writeStructured<Cl extends number | string>(
946
+ clusterKey: Cl,
947
+ payload: TFoundation["writeStructured"],
948
+ options?: Options,
949
+ ): Promise<void> {
950
+ await this.zclCommand(clusterKey, "writeStructured", payload, options);
951
+ // TODO: support `writeStructuredResponse`
952
+ }
953
+
954
+ public async command<Cl extends number | string, Co extends number | string, Custom extends TCustomCluster | undefined = undefined>(
955
+ clusterKey: Cl,
956
+ commandKey: Co,
957
+ payload: ClusterOrRawPayload<Cl, Co, Custom>,
958
+ options?: Options,
959
+ ): Promise<undefined | KeyValue> {
960
+ const frame = await this.zclCommand(clusterKey, commandKey, payload, options, undefined, false, Zcl.FrameType.SPECIFIC);
961
+ if (frame) {
962
+ return frame.payload;
963
+ }
964
+ }
965
+
966
+ public async commandResponse<Cl extends number | string, Co extends number | string, Custom extends TCustomCluster | undefined = undefined>(
967
+ clusterKey: Cl,
968
+ commandKey: Co,
969
+ payload: ClusterOrRawPayload<Cl, Co, Custom>,
970
+ options?: Options,
971
+ transactionSequenceNumber?: number,
972
+ ): Promise<void> {
973
+ assert(options?.transactionSequenceNumber === undefined, "Use parameter");
974
+
975
+ const device = this.getDevice();
976
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
977
+ const command = cluster.getCommandResponse(commandKey);
978
+ transactionSequenceNumber = transactionSequenceNumber ?? zclTransactionSequenceNumber.next();
979
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
980
+
981
+ const frame = Zcl.Frame.create(
982
+ Zcl.FrameType.SPECIFIC,
983
+ optionsWithDefaults.direction,
984
+ optionsWithDefaults.disableDefaultResponse,
985
+ optionsWithDefaults.manufacturerCode,
986
+ transactionSequenceNumber,
987
+ command,
988
+ cluster,
989
+ payload,
990
+ device.customClusters,
991
+ optionsWithDefaults.reservedBits,
992
+ );
993
+
994
+ const createLogMessage = (): string =>
995
+ `CommandResponse ${this.deviceIeeeAddress}/${this.ID} ` +
996
+ `${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(optionsWithDefaults)})`;
997
+ logger.debug(createLogMessage, NS);
998
+
999
+ try {
1000
+ // Broadcast Green Power responses
1001
+ if (this.ID === 242) {
1002
+ await this.sendRequest(frame, optionsWithDefaults, async () => {
1003
+ await Entity.getAdapterByID(this.databaseID)?.sendZclFrameToAll(242, frame, 242, BroadcastAddress.RX_ON_WHEN_IDLE);
1004
+ });
1005
+ } else {
1006
+ await this.sendRequest(frame, optionsWithDefaults);
1007
+ }
1008
+ } catch (error) {
1009
+ const err = error as Error;
1010
+ err.message = `${createLogMessage()} failed (${err.message})`;
1011
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
1012
+ logger.debug(err.stack!, NS);
1013
+ throw error;
1014
+ }
1015
+ }
1016
+
1017
+ private getOptionsWithDefaults(
1018
+ options: Options | undefined,
1019
+ disableDefaultResponse: boolean,
1020
+ direction: Zcl.Direction,
1021
+ manufacturerCode: number | undefined,
1022
+ ): OptionsWithDefaults {
1023
+ return {
1024
+ timeout: 10000,
1025
+ disableResponse: false,
1026
+ disableRecovery: false,
1027
+ disableDefaultResponse,
1028
+ direction,
1029
+ srcEndpoint: undefined,
1030
+ reservedBits: 0,
1031
+ manufacturerCode,
1032
+ transactionSequenceNumber: undefined,
1033
+ writeUndiv: false,
1034
+ ...(options || {}),
1035
+ };
1036
+ }
1037
+
1038
+ private ensureManufacturerCodeIsUniqueAndGet<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined>(
1039
+ cluster: ZclTypes.Cluster,
1040
+ attributes: (string | number)[] | ConfigureReportingItem<Cl, Custom>[] | ReadReportConfigItem<Cl, Custom>[],
1041
+ fallbackManufacturerCode: number | undefined, // XXX: problematic undefined for a "fallback"?
1042
+ caller: string,
1043
+ ): number | undefined {
1044
+ let firstManufacturerCode: number | undefined;
1045
+ let codeSet = false;
1046
+
1047
+ for (const nameOrID of attributes) {
1048
+ let attributeID: number | string;
1049
+
1050
+ if (typeof nameOrID === "object") {
1051
+ // ConfigureReportingItem
1052
+ if (typeof nameOrID.attribute !== "object") {
1053
+ attributeID = nameOrID.attribute;
1054
+ } else {
1055
+ if (!codeSet) {
1056
+ firstManufacturerCode = fallbackManufacturerCode;
1057
+ codeSet = true;
1058
+ } else if (firstManufacturerCode !== fallbackManufacturerCode) {
1059
+ throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
1060
+ }
1061
+
1062
+ continue;
1063
+ }
1064
+ } else {
1065
+ // string || number
1066
+ attributeID = nameOrID;
1067
+ }
1068
+
1069
+ // we fall back to caller|cluster provided manufacturerCode
1070
+ const attribute = cluster.getAttribute(attributeID);
1071
+ const manufacturerCode = attribute
1072
+ ? attribute.manufacturerCode === undefined
1073
+ ? fallbackManufacturerCode
1074
+ : attribute.manufacturerCode
1075
+ : fallbackManufacturerCode;
1076
+
1077
+ if (!codeSet) {
1078
+ firstManufacturerCode = manufacturerCode;
1079
+ codeSet = true;
1080
+ } else if (firstManufacturerCode !== manufacturerCode) {
1081
+ throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
1082
+ }
1083
+ }
1084
+
1085
+ return firstManufacturerCode;
1086
+ }
1087
+
1088
+ public async addToGroup(group: Group): Promise<void> {
1089
+ await this.zclCommand("genGroups", "add", {groupid: group.groupID, groupname: ""}, undefined, undefined, true, Zcl.FrameType.SPECIFIC);
1090
+ group.addMember(this);
1091
+ }
1092
+
1093
+ private getCluster(
1094
+ clusterKey: number | string,
1095
+ device: Device | undefined = undefined,
1096
+ manufacturerCode: number | undefined = undefined,
1097
+ ): ZclTypes.Cluster {
1098
+ if (!device) {
1099
+ device = this.getDevice();
1100
+ }
1101
+
1102
+ return Zcl.Utils.getCluster(clusterKey, manufacturerCode ?? device.manufacturerID, device.customClusters);
1103
+ }
1104
+
1105
+ /**
1106
+ * Remove endpoint from a group, accepts both a Group and number as parameter.
1107
+ * The number parameter type should only be used when removing from a group which is not known
1108
+ * to zigbee-herdsman.
1109
+ */
1110
+ public async removeFromGroup(group: Group | number): Promise<void> {
1111
+ await this.zclCommand(
1112
+ "genGroups",
1113
+ "remove",
1114
+ {groupid: group instanceof Group ? group.groupID : group},
1115
+ undefined,
1116
+ undefined,
1117
+ true,
1118
+ Zcl.FrameType.SPECIFIC,
1119
+ );
1120
+
1121
+ if (group instanceof Group) {
1122
+ group.removeMember(this);
1123
+ }
1124
+ }
1125
+
1126
+ public async removeFromAllGroups(): Promise<void> {
1127
+ await this.zclCommand("genGroups", "removeAll", {}, {disableDefaultResponse: true}, undefined, false, Zcl.FrameType.SPECIFIC);
1128
+ this.removeFromAllGroupsDatabase();
1129
+ }
1130
+
1131
+ public removeFromAllGroupsDatabase(): void {
1132
+ for (const group of Group.allByDatabaseID(this.databaseID)) {
1133
+ if (group.hasMember(this)) {
1134
+ group.removeMember(this);
1135
+ }
1136
+ }
1137
+ }
1138
+
1139
+ public async zclCommand<Cl extends number | string, Co extends number | string, Custom extends TCustomCluster | undefined = undefined>(
1140
+ clusterKey: Cl | ZclTypes.Cluster,
1141
+ commandKey: Co | ZclTypes.Command,
1142
+ payload: ClusterOrRawPayload<Cl, Co, Custom> | FoundationOrRawPayload<Co>,
1143
+ options?: Options,
1144
+ logPayload?: KeyValue,
1145
+ checkStatus = false,
1146
+ frameType: Zcl.FrameType = Zcl.FrameType.GLOBAL,
1147
+ ): Promise<undefined | Zcl.Frame> {
1148
+ const device = this.getDevice();
1149
+ const cluster = typeof clusterKey === "object" ? clusterKey : this.getCluster(clusterKey, device, options?.manufacturerCode);
1150
+ const command =
1151
+ typeof commandKey === "object"
1152
+ ? commandKey
1153
+ : frameType === Zcl.FrameType.GLOBAL
1154
+ ? Zcl.Utils.getGlobalCommand(commandKey)
1155
+ : cluster.getCommand(commandKey);
1156
+ const hasResponse = frameType === Zcl.FrameType.GLOBAL ? true : command.response !== undefined;
1157
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
1158
+
1159
+ const frame = Zcl.Frame.create(
1160
+ frameType,
1161
+ optionsWithDefaults.direction,
1162
+ optionsWithDefaults.disableDefaultResponse,
1163
+ optionsWithDefaults.manufacturerCode,
1164
+ optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber.next(),
1165
+ command,
1166
+ cluster,
1167
+ payload,
1168
+ device.customClusters,
1169
+ optionsWithDefaults.reservedBits,
1170
+ );
1171
+
1172
+ const createLogMessage = (): string =>
1173
+ `ZCL command ${this.deviceIeeeAddress}/${this.ID} ` +
1174
+ `${cluster.name}.${command.name}(${JSON.stringify(logPayload ? logPayload : payload)}, ${JSON.stringify(optionsWithDefaults)})`;
1175
+ logger.debug(createLogMessage, NS);
1176
+
1177
+ try {
1178
+ const result = await this.sendRequest(frame, optionsWithDefaults);
1179
+
1180
+ if (result) {
1181
+ const resultFrame = Zcl.Frame.fromBuffer(result.clusterID, result.header, result.data, device.customClusters);
1182
+ if (checkStatus && !optionsWithDefaults.disableResponse) {
1183
+ this.checkStatus(resultFrame.payload);
1184
+ }
1185
+ return resultFrame;
1186
+ }
1187
+ } catch (error) {
1188
+ const err = error as Error;
1189
+ err.message = `${createLogMessage()} failed (${err.message})`;
1190
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
1191
+ logger.debug(err.stack!, NS);
1192
+ throw error;
1193
+ }
1194
+ }
1195
+
1196
+ public async zclCommandBroadcast<Cl extends number | string, Co extends number | string, Custom extends TCustomCluster | undefined = undefined>(
1197
+ endpoint: number,
1198
+ destination: BroadcastAddress,
1199
+ clusterKey: Cl,
1200
+ commandKey: Co,
1201
+ payload: ClusterOrRawPayload<Cl, Co, Custom> | FoundationOrRawPayload<Co>,
1202
+ options?: Options,
1203
+ ): Promise<void> {
1204
+ const device = this.getDevice();
1205
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
1206
+ const command = cluster.getCommand(commandKey);
1207
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
1208
+ const sourceEndpoint = optionsWithDefaults.srcEndpoint ?? this.ID;
1209
+
1210
+ const frame = Zcl.Frame.create(
1211
+ Zcl.FrameType.SPECIFIC,
1212
+ optionsWithDefaults.direction,
1213
+ true,
1214
+ optionsWithDefaults.manufacturerCode,
1215
+ optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber.next(),
1216
+ command,
1217
+ cluster,
1218
+ payload,
1219
+ device.customClusters,
1220
+ optionsWithDefaults.reservedBits,
1221
+ );
1222
+
1223
+ logger.debug(
1224
+ () =>
1225
+ `ZCL command broadcast ${this.deviceIeeeAddress}/${sourceEndpoint} to ${destination}/${endpoint} ` +
1226
+ `${cluster.name}.${command.name}(${JSON.stringify({payload, optionsWithDefaults})})`,
1227
+ NS,
1228
+ );
1229
+
1230
+ // if endpoint===0xFF ("broadcast endpoint"), deliver to all endpoints supporting cluster, should be avoided whenever possible
1231
+ await Entity.getAdapterByID(this.databaseID)?.sendZclFrameToAll(endpoint, frame, sourceEndpoint, destination);
1232
+ }
1233
+ }
1234
+
1235
+ export default Endpoint;