@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,1409 @@
1
+ import type {MockInstance} from "vitest";
2
+ import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from "vitest";
3
+ import type {ZclPayload} from "../src/adapter/events";
4
+ import {GreenPower} from "../src/controller/greenPower";
5
+ import type {GreenPowerDeviceJoinedPayload} from "../src/controller/tstype";
6
+ import {logger} from "../src/utils/logger";
7
+ import {GP_ENDPOINT, GP_GROUP_ID} from "../src/zspec/consts";
8
+ import * as Zcl from "../src/zspec/zcl";
9
+
10
+ describe("GreenPower", () => {
11
+ let gp: GreenPower;
12
+ let logDebugSpy: MockInstance;
13
+ let logInfoSpy: MockInstance;
14
+ let logWarningSpy: MockInstance;
15
+ let logErrorSpy: MockInstance;
16
+
17
+ const clearLogMocks = (): void => {
18
+ logDebugSpy.mockClear();
19
+ logInfoSpy.mockClear();
20
+ logWarningSpy.mockClear();
21
+ logErrorSpy.mockClear();
22
+ };
23
+
24
+ const makeNotificationOptions = (
25
+ applicationId: number,
26
+ gpdfSecurityLevel: number,
27
+ gpdfSecurityKeyType: number,
28
+ bidirectionalInfo: number,
29
+ ): number => {
30
+ return (applicationId & 0x7) | ((gpdfSecurityLevel & 0x3) << 6) | ((gpdfSecurityKeyType & 0x7) << 8) | ((bidirectionalInfo & 0x3) << 11);
31
+ };
32
+
33
+ const makeHeader = (
34
+ sequenceNumber: number,
35
+ commandIdentifier: number,
36
+ applicationId: number,
37
+ gpdfSecurityLevel: number,
38
+ gpdfSecurityKeyType: number,
39
+ bidirectionalInfo: number,
40
+ sourceId: number,
41
+ gpdSecurityFrameCounter: number,
42
+ gpdCommandId: number,
43
+ payloadLength: number,
44
+ options?: number,
45
+ ): Buffer => {
46
+ const gpdHeader = Buffer.alloc(15);
47
+ gpdHeader.writeUInt8(0b00000001, 0); // frameControl: FrameType.SPECIFIC + Direction.CLIENT_TO_SERVER + disableDefaultResponse=false
48
+ gpdHeader.writeUInt8(sequenceNumber, 1);
49
+ gpdHeader.writeUInt8(commandIdentifier, 2);
50
+ gpdHeader.writeUInt16LE(options ?? makeNotificationOptions(applicationId, gpdfSecurityLevel, gpdfSecurityKeyType, bidirectionalInfo), 3);
51
+ gpdHeader.writeUInt32LE(sourceId, 5);
52
+ gpdHeader.writeUInt32LE(gpdSecurityFrameCounter, 9);
53
+ gpdHeader.writeUInt8(gpdCommandId, 13);
54
+ gpdHeader.writeUInt8(payloadLength, 14);
55
+
56
+ return gpdHeader;
57
+ };
58
+
59
+ const makeFooter = (options: number, gppNwkAddr?: number, gppGpdLink?: number, mic?: number): Buffer => {
60
+ const hasGppData = options & 0x800;
61
+ const hasMic = options & 0x200;
62
+ const gpdFooter = Buffer.alloc((hasGppData ? 3 : 0) + (hasMic ? 4 : 0));
63
+
64
+ if (hasGppData) {
65
+ gpdFooter.writeUInt16LE(gppNwkAddr!, 0);
66
+ gpdFooter.writeUInt8(gppGpdLink!, 2);
67
+ }
68
+
69
+ if (hasMic) {
70
+ gpdFooter.writeUInt32LE(mic!, hasGppData ? 3 : 0);
71
+ }
72
+
73
+ return gpdFooter;
74
+ };
75
+
76
+ const makePayload = (sourceId: number, buffer: Buffer, linkQuality: number): ZclPayload => {
77
+ return {
78
+ clusterID: Zcl.Clusters.greenPower.ID,
79
+ header: Zcl.Header.fromBuffer(buffer),
80
+ address: sourceId & 0xffff,
81
+ data: buffer,
82
+ endpoint: GP_ENDPOINT,
83
+ linkquality: linkQuality,
84
+ groupID: GP_GROUP_ID,
85
+ wasBroadcast: true,
86
+ destinationEndpoint: GP_ENDPOINT,
87
+ };
88
+ };
89
+
90
+ beforeAll(() => {
91
+ vi.useFakeTimers();
92
+
93
+ logDebugSpy = vi.spyOn(logger, "debug");
94
+ logInfoSpy = vi.spyOn(logger, "info");
95
+ logWarningSpy = vi.spyOn(logger, "warning");
96
+ logErrorSpy = vi.spyOn(logger, "error");
97
+ });
98
+
99
+ beforeEach(() => {
100
+ clearLogMocks();
101
+
102
+ gp = new GreenPower(
103
+ // @ts-expect-error minimal mock
104
+ {
105
+ getCoordinatorIEEE: vi.fn(),
106
+ sendZclFrameToAll: vi.fn(),
107
+ sendZclFrameToEndpoint: vi.fn(),
108
+ getNetworkParameters: vi.fn(),
109
+ },
110
+ 1,
111
+ );
112
+ });
113
+
114
+ afterAll(() => {
115
+ vi.useRealTimers();
116
+ });
117
+
118
+ it("encodes & decodes pairing options", () => {
119
+ let rawByte = 0b000000000110101000;
120
+ let rawOptions = {
121
+ appId: 0,
122
+ addSink: true,
123
+ removeGpd: false,
124
+ communicationMode: 0b01,
125
+ gpdFixed: true,
126
+ gpdMacSeqNumCapabilities: true,
127
+ securityLevel: 0,
128
+ securityKeyType: 0,
129
+ gpdSecurityFrameCounterPresent: false,
130
+ gpdSecurityKeyPresent: false,
131
+ assignedAliasPresent: false,
132
+ groupcastRadiusPresent: false,
133
+ };
134
+ let options = GreenPower.decodePairingOptions(rawByte);
135
+ let byte = GreenPower.encodePairingOptions(rawOptions);
136
+
137
+ expect(options).toStrictEqual(rawOptions);
138
+ expect(rawByte).toStrictEqual(byte);
139
+
140
+ rawByte = 0b001110010101001000;
141
+ rawOptions = {
142
+ appId: 0,
143
+ addSink: true,
144
+ removeGpd: false,
145
+ communicationMode: 0b10,
146
+ gpdFixed: false,
147
+ gpdMacSeqNumCapabilities: true,
148
+ securityLevel: 0b10,
149
+ securityKeyType: 0b100,
150
+ gpdSecurityFrameCounterPresent: true,
151
+ gpdSecurityKeyPresent: true,
152
+ assignedAliasPresent: false,
153
+ groupcastRadiusPresent: false,
154
+ };
155
+ options = GreenPower.decodePairingOptions(rawByte);
156
+ byte = GreenPower.encodePairingOptions(rawOptions);
157
+
158
+ expect(options).toStrictEqual(rawOptions);
159
+ expect(rawByte).toStrictEqual(byte);
160
+
161
+ rawByte = 0b001110010101101000;
162
+ rawOptions = {
163
+ appId: 0,
164
+ addSink: true,
165
+ removeGpd: false,
166
+ communicationMode: 0b11,
167
+ gpdFixed: false,
168
+ gpdMacSeqNumCapabilities: true,
169
+ securityLevel: 0b10,
170
+ securityKeyType: 0b100,
171
+ gpdSecurityFrameCounterPresent: true,
172
+ gpdSecurityKeyPresent: true,
173
+ assignedAliasPresent: false,
174
+ groupcastRadiusPresent: false,
175
+ };
176
+ options = GreenPower.decodePairingOptions(rawByte);
177
+ byte = GreenPower.encodePairingOptions(rawOptions);
178
+
179
+ expect(options).toStrictEqual(rawOptions);
180
+ expect(rawByte).toStrictEqual(byte);
181
+
182
+ rawByte = 0b000000000110110000;
183
+ rawOptions = {
184
+ appId: 0,
185
+ addSink: false,
186
+ removeGpd: true,
187
+ communicationMode: 0b01,
188
+ gpdFixed: true,
189
+ gpdMacSeqNumCapabilities: true,
190
+ securityLevel: 0b00,
191
+ securityKeyType: 0b000,
192
+ gpdSecurityFrameCounterPresent: false,
193
+ gpdSecurityKeyPresent: false,
194
+ assignedAliasPresent: false,
195
+ groupcastRadiusPresent: false,
196
+ };
197
+ options = GreenPower.decodePairingOptions(rawByte);
198
+ byte = GreenPower.encodePairingOptions(rawOptions);
199
+
200
+ expect(options).toStrictEqual(rawOptions);
201
+ expect(rawByte).toStrictEqual(byte);
202
+
203
+ // coverage
204
+ rawByte = 0b110000000010110000;
205
+ rawOptions = {
206
+ appId: 0,
207
+ addSink: false,
208
+ removeGpd: true,
209
+ communicationMode: 0b01,
210
+ gpdFixed: true,
211
+ gpdMacSeqNumCapabilities: false,
212
+ securityLevel: 0b00,
213
+ securityKeyType: 0b000,
214
+ gpdSecurityFrameCounterPresent: false,
215
+ gpdSecurityKeyPresent: false,
216
+ assignedAliasPresent: true,
217
+ groupcastRadiusPresent: true,
218
+ };
219
+ options = GreenPower.decodePairingOptions(rawByte);
220
+ byte = GreenPower.encodePairingOptions(rawOptions);
221
+
222
+ expect(options).toStrictEqual(rawOptions);
223
+ expect(rawByte).toStrictEqual(byte);
224
+ });
225
+
226
+ it("encodes & decodes commissioning mode options", () => {
227
+ let rawByte = 0x0b;
228
+ let rawOptions = {action: 1, commissioningWindowPresent: true, exitMode: 0b10, channelPresent: false, unicastCommunication: false};
229
+ let options = GreenPower.decodeCommissioningModeOptions(rawByte);
230
+ let byte = GreenPower.encodeCommissioningModeOptions(rawOptions);
231
+
232
+ expect(options).toStrictEqual(rawOptions);
233
+ expect(rawByte).toStrictEqual(byte);
234
+ rawByte = 0x2b;
235
+ rawOptions = {action: 1, commissioningWindowPresent: true, exitMode: 0b10, channelPresent: false, unicastCommunication: true};
236
+ options = GreenPower.decodeCommissioningModeOptions(rawByte);
237
+ byte = GreenPower.encodeCommissioningModeOptions(rawOptions);
238
+
239
+ expect(options).toStrictEqual(rawOptions);
240
+ expect(rawByte).toStrictEqual(byte);
241
+ rawByte = 0x0a;
242
+ rawOptions = {action: 0, commissioningWindowPresent: true, exitMode: 0b10, channelPresent: false, unicastCommunication: false};
243
+ options = GreenPower.decodeCommissioningModeOptions(rawByte);
244
+ byte = GreenPower.encodeCommissioningModeOptions(rawOptions);
245
+
246
+ expect(options).toStrictEqual(rawOptions);
247
+ expect(rawByte).toStrictEqual(byte);
248
+ expect(options).toStrictEqual(rawOptions);
249
+ expect(rawByte).toStrictEqual(byte);
250
+
251
+ // coverage
252
+ rawByte = 0b111100;
253
+ rawOptions = {action: 0, commissioningWindowPresent: false, exitMode: 0b11, channelPresent: true, unicastCommunication: true};
254
+ options = GreenPower.decodeCommissioningModeOptions(rawByte);
255
+ byte = GreenPower.encodeCommissioningModeOptions(rawOptions);
256
+
257
+ expect(options).toStrictEqual(rawOptions);
258
+ expect(rawByte).toStrictEqual(byte);
259
+ });
260
+
261
+ it("omits GPP data from raw payload", async () => {
262
+ const addr = {applicationId: 0, sourceId: 2777252112, endpoint: 0};
263
+ const options = 0x800;
264
+ const sequenceNumber = 18;
265
+ const gpdSecurityFrameCounter = 17326;
266
+ const gpdCommandId = 38;
267
+ const gpdCommandPayload = Buffer.from([0x3e]);
268
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
269
+ const gppNwkAddr = 24404;
270
+ const gppGpdLink = 207;
271
+
272
+ const gpdHeader = makeHeader(
273
+ sequenceNumber,
274
+ commandIdentifier,
275
+ 0,
276
+ 0,
277
+ 0,
278
+ 0,
279
+ addr.sourceId,
280
+ gpdSecurityFrameCounter,
281
+ gpdCommandId,
282
+ gpdCommandPayload.length,
283
+ options,
284
+ );
285
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink);
286
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
287
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
288
+ const retFrame = await gp.processCommand(payload, frame, undefined);
289
+
290
+ expect(frame.payload.gppNwkAddr).toStrictEqual(gppNwkAddr);
291
+ expect(frame.payload.gppGpdLink).toStrictEqual(gppGpdLink);
292
+ expect(retFrame.payload.commandFrame).toStrictEqual({raw: gpdCommandPayload});
293
+ expect(retFrame.payload.gppNwkAddr).toStrictEqual(gppNwkAddr);
294
+ expect(retFrame.payload.gppGpdLink).toStrictEqual(gppGpdLink);
295
+ });
296
+
297
+ it("omits MIC from raw payload", async () => {
298
+ const securityKey = Buffer.from([227, 227, 225, 134, 235, 104, 141, 250, 162, 211, 104, 147, 201, 146, 67, 175]);
299
+ const addr = {applicationId: 0, sourceId: 2777252112, endpoint: 0};
300
+ const options = 0x30 | 0x200;
301
+ const sequenceNumber = 18;
302
+ const gpdSecurityFrameCounter = 17326;
303
+ const gpdCommandId = 38;
304
+ const gpdCommandPayload = Buffer.from([0x3e]);
305
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
306
+ const mic = 1441399364;
307
+
308
+ const gpdHeader = makeHeader(
309
+ sequenceNumber,
310
+ commandIdentifier,
311
+ 0,
312
+ 0,
313
+ 0,
314
+ 0,
315
+ addr.sourceId,
316
+ gpdSecurityFrameCounter,
317
+ gpdCommandId,
318
+ gpdCommandPayload.length,
319
+ options,
320
+ );
321
+ const gpdFooter = makeFooter(options, undefined, undefined, mic);
322
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
323
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
324
+ const retFrame = await gp.processCommand(payload, frame, securityKey);
325
+
326
+ expect(frame.payload.mic).toBeDefined(); // garbage
327
+ expect(retFrame.payload.commandID).toStrictEqual(0x21); // just to be sure it decrypted properly
328
+ expect(retFrame.payload.commandFrame).toStrictEqual({raw: Buffer.from([207 /* decrypted, bogus data */])});
329
+ expect(retFrame.payload.mic).toStrictEqual(undefined); // removed once decrypted
330
+ });
331
+
332
+ it("omits GPP data and MIC from raw payload", async () => {
333
+ const securityKey = Buffer.from([227, 227, 225, 134, 235, 104, 141, 250, 162, 211, 104, 147, 201, 146, 67, 175]);
334
+ const addr = {applicationId: 0, sourceId: 2777252112, endpoint: 0};
335
+ const options = 0x30 | 0x200 | 0x800;
336
+ const sequenceNumber = 18;
337
+ const gpdSecurityFrameCounter = 17326;
338
+ const gpdCommandId = 38;
339
+ const gpdCommandPayload = Buffer.from([0x3e]);
340
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
341
+ const gppNwkAddr = 24404;
342
+ const gppGpdLink = 207;
343
+ const mic = 1441399364;
344
+
345
+ const gpdHeader = makeHeader(
346
+ sequenceNumber,
347
+ commandIdentifier,
348
+ 0,
349
+ 0,
350
+ 0,
351
+ 0,
352
+ addr.sourceId,
353
+ gpdSecurityFrameCounter,
354
+ gpdCommandId,
355
+ gpdCommandPayload.length,
356
+ options,
357
+ );
358
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
359
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
360
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
361
+ const retFrame = await gp.processCommand(payload, frame, securityKey);
362
+
363
+ expect(frame.payload.gppNwkAddr).toBeDefined(); // garbage
364
+ expect(frame.payload.gppGpdLink).toBeDefined(); // garbage
365
+ expect(frame.payload.mic).toBeDefined(); // garbage
366
+ expect(retFrame.payload.commandID).toStrictEqual(0x21); // just to be sure it decrypted properly
367
+ expect(retFrame.payload.commandFrame).toStrictEqual({raw: Buffer.from([207 /* decrypted, bogus data */])});
368
+ expect(retFrame.payload.gppNwkAddr).toStrictEqual(gppNwkAddr); // removed once decrypted
369
+ expect(retFrame.payload.gppGpdLink).toStrictEqual(gppGpdLink); // removed once decrypted
370
+ expect(retFrame.payload.mic).toStrictEqual(undefined); // removed once decrypted
371
+ });
372
+
373
+ it("does not parse command frame when FULLENCR security level - SINK", async () => {
374
+ const addr = {applicationId: 0, sourceId: 2888399791, endpoint: 0};
375
+ const securityLevelFullEncr = 3;
376
+ const securityKeyTypeNWK = 1;
377
+ const gpdLink = 207;
378
+ const sequenceNumber = 143;
379
+ const bidirectionalInfo = 0;
380
+ const gpdSecurityFrameCounter = 3727;
381
+ const gpdCommandId = 227; // this would otherwise be CHANNEL_REQUEST and result in bad parsing
382
+ const gpdCommandPayload = Buffer.from("", "hex");
383
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
384
+
385
+ const gpdHeader = makeHeader(
386
+ sequenceNumber,
387
+ commandIdentifier,
388
+ addr.applicationId,
389
+ securityLevelFullEncr,
390
+ securityKeyTypeNWK,
391
+ bidirectionalInfo,
392
+ addr.sourceId,
393
+ gpdSecurityFrameCounter,
394
+ gpdCommandId,
395
+ gpdCommandPayload.length,
396
+ );
397
+
398
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
399
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
400
+
401
+ expect(frame.payload.commandFrame).toBeUndefined(); // as opposed to `{}` when parsing (payloadSize=0)
402
+
403
+ const retFrame = await gp.processCommand(payload, frame, Buffer.alloc(16) /* just for the codepath, decrypting not important */);
404
+
405
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
406
+ 1,
407
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x9d srcID=2888399791 gpp=NO",
408
+ "zh:controller:greenpower",
409
+ );
410
+
411
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
412
+ clonedFrame.payload.commandID = 0x9d;
413
+ clonedFrame.payload.options = 256;
414
+ clonedFrame.payload.commandFrame = {};
415
+
416
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
417
+ });
418
+
419
+ it("does not parse command frame when FULLENCR security level - GPP", async () => {
420
+ const addr = {applicationId: 0, sourceId: 2888399791, endpoint: 0};
421
+ const gpdLink = 207;
422
+ const sequenceNumber = 143;
423
+ const gpdSecurityFrameCounter = 3727;
424
+ const gpdCommandId = 227; // this would otherwise be CHANNEL_REQUEST and result in bad parsing
425
+ const gpdCommandPayload = Buffer.from("", "hex");
426
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
427
+ const gppNwkAddr = 24404;
428
+ const gppGpdLink = 123;
429
+ const mic = 456;
430
+ const options = 2864;
431
+
432
+ const gpdHeader = makeHeader(
433
+ sequenceNumber,
434
+ commandIdentifier,
435
+ 0,
436
+ 0,
437
+ 0,
438
+ 0,
439
+ addr.sourceId,
440
+ gpdSecurityFrameCounter,
441
+ gpdCommandId,
442
+ gpdCommandPayload.length,
443
+ options,
444
+ );
445
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
446
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), gpdLink);
447
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
448
+
449
+ expect(frame.payload.commandFrame).toBeUndefined(); // as opposed to `{}` when parsing (payloadSize=0)
450
+
451
+ const retFrame = await gp.processCommand(payload, frame, Buffer.alloc(16) /* just for the codepath, decrypting not important */);
452
+
453
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
454
+ 1,
455
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x9d srcID=2888399791 gpp=24404 rssi=59 linkQuality=Moderate",
456
+ "zh:controller:greenpower",
457
+ );
458
+
459
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
460
+ clonedFrame.payload.commandID = 0x9d;
461
+ clonedFrame.payload.options = 2304;
462
+ clonedFrame.payload.commandFrame = {};
463
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
464
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
465
+ delete clonedFrame.payload.mic;
466
+
467
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
468
+ });
469
+
470
+ // @see https://github.com/Koenkk/zigbee2mqtt/issues/19405#issuecomment-2727338024
471
+ it("FULLENCR ZT-LP-ZEU2S-WH-MS MOES 2-gang vectors from ember", async () => {
472
+ let joinData: GreenPowerDeviceJoinedPayload | undefined;
473
+
474
+ gp.on("deviceJoined", (payload) => {
475
+ joinData = payload;
476
+ });
477
+
478
+ const addr = {applicationId: 0, sourceId: 1496140231, endpoint: 0};
479
+
480
+ {
481
+ const gpdLink = 214;
482
+ const sequenceNumber = 19;
483
+ const gpdfSecurityLevel = 0; // NONE
484
+ const gpdfSecurityKeyType = 0; // NONE
485
+ const bidirectionalInfo = 0;
486
+ const gpdSecurityFrameCounter = 4294967295;
487
+ const gpdCommandId = 224;
488
+ const gpdCommandPayload = Buffer.from("0289f31adb70a88d71196ee50c03580537767de27ad5331309000037647a62697061304047503030303157", "hex");
489
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
490
+
491
+ const gpdHeader = makeHeader(
492
+ sequenceNumber,
493
+ commandIdentifier,
494
+ addr.applicationId,
495
+ gpdfSecurityLevel,
496
+ gpdfSecurityKeyType,
497
+ bidirectionalInfo,
498
+ addr.sourceId,
499
+ gpdSecurityFrameCounter,
500
+ gpdCommandId,
501
+ gpdCommandPayload.length,
502
+ );
503
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
504
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
505
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey); // always undefined since not yet joined
506
+
507
+ await vi.waitUntil(() => joinData !== undefined);
508
+
509
+ expect(joinData).toStrictEqual({
510
+ sourceID: addr.sourceId,
511
+ deviceID: frame.payload.commandFrame.deviceID,
512
+ networkAddress: addr.sourceId & 0xffff,
513
+ securityKey: frame.payload.commandFrame.securityKey,
514
+ });
515
+ expect(logInfoSpy).toHaveBeenNthCalledWith(1, "[COMMISSIONING] srcID=1496140231 gpp=NO", "zh:controller:greenpower");
516
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
517
+ 1,
518
+ "[PAIRING] srcID=1496140231 gpp=NO options=58696 (addSink=true commMode=2)",
519
+ "zh:controller:greenpower",
520
+ );
521
+
522
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
523
+ clonedFrame.payload.commandID = 0xe0;
524
+ clonedFrame.payload.options = 0;
525
+ clonedFrame.payload.commandFrame = {
526
+ deviceID: 2,
527
+ options: 137,
528
+ extendedOptions: 243,
529
+ securityKey: joinData?.securityKey,
530
+ keyMic: 869628642,
531
+ outgoingCounter: 2323,
532
+ applicationInfo: addr.applicationId,
533
+ manufacturerID: 0,
534
+ modelID: 0,
535
+ numGpdCommands: 0,
536
+ gpdCommandIdList: Buffer.from([]),
537
+ numServerClusters: 0,
538
+ numClientClusters: 0,
539
+ gpdServerClusters: Buffer.from([]),
540
+ gpdClientClusters: Buffer.from([]),
541
+ genericSwitchConfig: 0,
542
+ currentContactStatus: 0,
543
+ };
544
+
545
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
546
+ expect(retFrame.payload.commandFrame.securityKey).toStrictEqual(joinData?.securityKey);
547
+ }
548
+
549
+ clearLogMocks();
550
+
551
+ const securityLevelFullEncr = 3;
552
+ const securityKeyTypeNWK = 1;
553
+
554
+ // left
555
+ {
556
+ const gpdLink = 220;
557
+ const sequenceNumber = 28;
558
+ const bidirectionalInfo = 0;
559
+ const gpdSecurityFrameCounter = 2332;
560
+ const gpdCommandId = 136;
561
+ const gpdCommandPayload = Buffer.from("", "hex");
562
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
563
+
564
+ const gpdHeader = makeHeader(
565
+ sequenceNumber,
566
+ commandIdentifier,
567
+ addr.applicationId,
568
+ securityLevelFullEncr,
569
+ securityKeyTypeNWK,
570
+ bidirectionalInfo,
571
+ addr.sourceId,
572
+ gpdSecurityFrameCounter,
573
+ gpdCommandId,
574
+ gpdCommandPayload.length,
575
+ );
576
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
577
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
578
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
579
+
580
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
581
+ 1,
582
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=1496140231 gpp=NO",
583
+ "zh:controller:greenpower",
584
+ );
585
+
586
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
587
+ clonedFrame.payload.commandID = 0x20;
588
+ clonedFrame.payload.options = 256;
589
+ clonedFrame.payload.commandFrame = {};
590
+
591
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
592
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
593
+ }
594
+
595
+ clearLogMocks();
596
+
597
+ // left
598
+ {
599
+ const gpdLink = 220;
600
+ const sequenceNumber = 46;
601
+ const bidirectionalInfo = 0;
602
+ const gpdSecurityFrameCounter = 2350;
603
+ const gpdCommandId = 152;
604
+ const gpdCommandPayload = Buffer.from("", "hex");
605
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
606
+
607
+ const gpdHeader = makeHeader(
608
+ sequenceNumber,
609
+ commandIdentifier,
610
+ addr.applicationId,
611
+ securityLevelFullEncr,
612
+ securityKeyTypeNWK,
613
+ bidirectionalInfo,
614
+ addr.sourceId,
615
+ gpdSecurityFrameCounter,
616
+ gpdCommandId,
617
+ gpdCommandPayload.length,
618
+ );
619
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
620
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
621
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
622
+
623
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
624
+ 1,
625
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=1496140231 gpp=NO",
626
+ "zh:controller:greenpower",
627
+ );
628
+
629
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
630
+ clonedFrame.payload.commandID = 0x20;
631
+ clonedFrame.payload.options = 256;
632
+ clonedFrame.payload.commandFrame = {};
633
+
634
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
635
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
636
+ }
637
+
638
+ clearLogMocks();
639
+
640
+ // left
641
+ {
642
+ const gpdLink = 223;
643
+ const sequenceNumber = 55;
644
+ const bidirectionalInfo = 0;
645
+ const gpdSecurityFrameCounter = 2359;
646
+ const gpdCommandId = 189;
647
+ const gpdCommandPayload = Buffer.from("", "hex");
648
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
649
+
650
+ const gpdHeader = makeHeader(
651
+ sequenceNumber,
652
+ commandIdentifier,
653
+ addr.applicationId,
654
+ securityLevelFullEncr,
655
+ securityKeyTypeNWK,
656
+ bidirectionalInfo,
657
+ addr.sourceId,
658
+ gpdSecurityFrameCounter,
659
+ gpdCommandId,
660
+ gpdCommandPayload.length,
661
+ );
662
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
663
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
664
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
665
+
666
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
667
+ 1,
668
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=1496140231 gpp=NO",
669
+ "zh:controller:greenpower",
670
+ );
671
+
672
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
673
+ clonedFrame.payload.commandID = 0x20;
674
+ clonedFrame.payload.options = 256;
675
+ clonedFrame.payload.commandFrame = {};
676
+
677
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
678
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
679
+ }
680
+
681
+ clearLogMocks();
682
+
683
+ // right
684
+ {
685
+ const gpdLink = 218;
686
+ const sequenceNumber = 37;
687
+ const bidirectionalInfo = 0;
688
+ const gpdSecurityFrameCounter = 2341;
689
+ const gpdCommandId = 172;
690
+ const gpdCommandPayload = Buffer.from("", "hex");
691
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
692
+
693
+ const gpdHeader = makeHeader(
694
+ sequenceNumber,
695
+ commandIdentifier,
696
+ addr.applicationId,
697
+ securityLevelFullEncr,
698
+ securityKeyTypeNWK,
699
+ bidirectionalInfo,
700
+ addr.sourceId,
701
+ gpdSecurityFrameCounter,
702
+ gpdCommandId,
703
+ gpdCommandPayload.length,
704
+ );
705
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
706
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
707
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
708
+
709
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
710
+ 1,
711
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=1496140231 gpp=NO",
712
+ "zh:controller:greenpower",
713
+ );
714
+
715
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
716
+ clonedFrame.payload.commandID = 0x21;
717
+ clonedFrame.payload.options = 256;
718
+ clonedFrame.payload.commandFrame = {};
719
+
720
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
721
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
722
+ }
723
+
724
+ clearLogMocks();
725
+
726
+ // right
727
+ {
728
+ const gpdLink = 222;
729
+ const sequenceNumber = 64;
730
+ const bidirectionalInfo = 0;
731
+ const gpdSecurityFrameCounter = 2368;
732
+ const gpdCommandId = 159;
733
+ const gpdCommandPayload = Buffer.from("", "hex");
734
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
735
+
736
+ const gpdHeader = makeHeader(
737
+ sequenceNumber,
738
+ commandIdentifier,
739
+ addr.applicationId,
740
+ securityLevelFullEncr,
741
+ securityKeyTypeNWK,
742
+ bidirectionalInfo,
743
+ addr.sourceId,
744
+ gpdSecurityFrameCounter,
745
+ gpdCommandId,
746
+ gpdCommandPayload.length,
747
+ );
748
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
749
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
750
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
751
+
752
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
753
+ 1,
754
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=1496140231 gpp=NO",
755
+ "zh:controller:greenpower",
756
+ );
757
+
758
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
759
+ clonedFrame.payload.commandID = 0x21;
760
+ clonedFrame.payload.options = 256;
761
+ clonedFrame.payload.commandFrame = {};
762
+
763
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
764
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
765
+ }
766
+
767
+ clearLogMocks();
768
+
769
+ // right
770
+ {
771
+ const gpdLink = 222;
772
+ const sequenceNumber = 73;
773
+ const bidirectionalInfo = 0;
774
+ const gpdSecurityFrameCounter = 2377;
775
+ const gpdCommandId = 11;
776
+ const gpdCommandPayload = Buffer.from("", "hex");
777
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
778
+
779
+ const gpdHeader = makeHeader(
780
+ sequenceNumber,
781
+ commandIdentifier,
782
+ addr.applicationId,
783
+ securityLevelFullEncr,
784
+ securityKeyTypeNWK,
785
+ bidirectionalInfo,
786
+ addr.sourceId,
787
+ gpdSecurityFrameCounter,
788
+ gpdCommandId,
789
+ gpdCommandPayload.length,
790
+ );
791
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
792
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
793
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
794
+
795
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
796
+ 1,
797
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=1496140231 gpp=NO",
798
+ "zh:controller:greenpower",
799
+ );
800
+
801
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
802
+ clonedFrame.payload.commandID = 0x21;
803
+ clonedFrame.payload.options = 256;
804
+ clonedFrame.payload.commandFrame = {};
805
+
806
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
807
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
808
+ }
809
+
810
+ clearLogMocks();
811
+
812
+ // mock FULLENCR with unknown security key
813
+ {
814
+ const gpdLink = 222;
815
+ const sequenceNumber = 73;
816
+ const bidirectionalInfo = 0;
817
+ const gpdSecurityFrameCounter = 2377;
818
+ const gpdCommandId = 11;
819
+ const gpdCommandPayload = Buffer.from("", "hex");
820
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
821
+
822
+ const gpdHeader = makeHeader(
823
+ sequenceNumber,
824
+ commandIdentifier,
825
+ addr.applicationId,
826
+ securityLevelFullEncr,
827
+ securityKeyTypeNWK,
828
+ bidirectionalInfo,
829
+ addr.sourceId,
830
+ gpdSecurityFrameCounter,
831
+ gpdCommandId,
832
+ gpdCommandPayload.length,
833
+ );
834
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
835
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
836
+ const retFrame = await gp.processCommand(payload, frame, undefined);
837
+
838
+ expect(logErrorSpy).toHaveBeenNthCalledWith(
839
+ 1,
840
+ "[FULLENCR] srcID=1496140231 gpp=NO commandIdentifier=0 Unknown security key",
841
+ "zh:controller:greenpower",
842
+ );
843
+
844
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(frame)));
845
+ }
846
+
847
+ clearLogMocks();
848
+
849
+ // mock FULLENCR with gpp data
850
+ {
851
+ const gpdLink = 222;
852
+ const sequenceNumber = 73;
853
+ const gpdSecurityFrameCounter = 2377;
854
+ const gpdCommandId = 11;
855
+ const gpdCommandPayload = Buffer.from("", "hex");
856
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
857
+ const gppNwkAddr = 24404;
858
+ const gppGpdLink = 207;
859
+ const options = ((0b11 & 0x3) << 6) | 0x4000;
860
+
861
+ const gpdHeader = makeHeader(
862
+ sequenceNumber,
863
+ commandIdentifier,
864
+ 0,
865
+ 0,
866
+ 0,
867
+ 0,
868
+ addr.sourceId,
869
+ gpdSecurityFrameCounter,
870
+ gpdCommandId,
871
+ gpdCommandPayload.length,
872
+ options,
873
+ );
874
+ const gpdFooter = Buffer.alloc(3);
875
+ gpdFooter.writeUInt16LE(gppNwkAddr, 0);
876
+ gpdFooter.writeUInt8(gppGpdLink, 2);
877
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), gpdLink);
878
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
879
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
880
+
881
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
882
+ 1,
883
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=1496140231 gpp=24404 rssi=15 linkQuality=Excellent",
884
+ "zh:controller:greenpower",
885
+ );
886
+
887
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
888
+ clonedFrame.payload.commandID = 0x21;
889
+ clonedFrame.payload.options = 16384;
890
+ clonedFrame.payload.commandFrame = {};
891
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
892
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
893
+
894
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
895
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
896
+ }
897
+ });
898
+
899
+ // @see https://github.com/Koenkk/zigbee2mqtt/issues/19405#issuecomment-2732204071
900
+ it("FULLENCR ZT-LP-ZEU2S-WH-MS MOES 3-gang vectors from ember", async () => {
901
+ let joinData: GreenPowerDeviceJoinedPayload | undefined;
902
+
903
+ gp.on("deviceJoined", (payload) => {
904
+ joinData = payload;
905
+ });
906
+
907
+ const addr = {applicationId: 0, sourceId: 344902069, endpoint: 0};
908
+
909
+ {
910
+ const gpdLink = 219;
911
+ const sequenceNumber = 139;
912
+ const gpdfSecurityLevel = 0; // NONE
913
+ const gpdfSecurityKeyType = 0; // NONE
914
+ const bidirectionalInfo = 0;
915
+ const gpdSecurityFrameCounter = 4294967295;
916
+ const gpdCommandId = 224;
917
+ const gpdCommandPayload = Buffer.from("0289f35690230a93ea5f1951926f200236c7820891812a8b0400007165726837706f7840475030303031be", "hex");
918
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
919
+
920
+ const gpdHeader = makeHeader(
921
+ sequenceNumber,
922
+ commandIdentifier,
923
+ addr.applicationId,
924
+ gpdfSecurityLevel,
925
+ gpdfSecurityKeyType,
926
+ bidirectionalInfo,
927
+ addr.sourceId,
928
+ gpdSecurityFrameCounter,
929
+ gpdCommandId,
930
+ gpdCommandPayload.length,
931
+ );
932
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
933
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
934
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey); // always undefined since not yet joined
935
+
936
+ await vi.waitUntil(() => joinData !== undefined);
937
+
938
+ expect(joinData).toStrictEqual({
939
+ sourceID: addr.sourceId,
940
+ deviceID: frame.payload.commandFrame.deviceID,
941
+ networkAddress: addr.sourceId & 0xffff,
942
+ securityKey: frame.payload.commandFrame.securityKey,
943
+ });
944
+ expect(logInfoSpy).toHaveBeenNthCalledWith(1, "[COMMISSIONING] srcID=344902069 gpp=NO", "zh:controller:greenpower");
945
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
946
+ 1,
947
+ "[PAIRING] srcID=344902069 gpp=NO options=58696 (addSink=true commMode=2)",
948
+ "zh:controller:greenpower",
949
+ );
950
+
951
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
952
+ clonedFrame.payload.commandID = 0xe0;
953
+ clonedFrame.payload.options = 0;
954
+ clonedFrame.payload.commandFrame = {
955
+ deviceID: 2,
956
+ options: 137,
957
+ extendedOptions: 243,
958
+ securityKey: joinData?.securityKey,
959
+ keyMic: 713134344,
960
+ outgoingCounter: 1163,
961
+ applicationInfo: addr.applicationId,
962
+ manufacturerID: 0,
963
+ modelID: 0,
964
+ numGpdCommands: 0,
965
+ gpdCommandIdList: Buffer.from([]),
966
+ numServerClusters: 0,
967
+ numClientClusters: 0,
968
+ gpdServerClusters: Buffer.from([]),
969
+ gpdClientClusters: Buffer.from([]),
970
+ genericSwitchConfig: 0,
971
+ currentContactStatus: 0,
972
+ };
973
+
974
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
975
+ expect(retFrame.payload.commandFrame.securityKey).toStrictEqual(joinData?.securityKey);
976
+ }
977
+
978
+ clearLogMocks();
979
+
980
+ const securityLevelFullEncr = 3;
981
+ const securityKeyTypeNWK = 1;
982
+
983
+ // left
984
+ {
985
+ const gpdLink = 224;
986
+ const sequenceNumber = 175;
987
+ const bidirectionalInfo = 0;
988
+ const gpdSecurityFrameCounter = 1199;
989
+ const gpdCommandId = 92;
990
+ const gpdCommandPayload = Buffer.from("", "hex");
991
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
992
+
993
+ const gpdHeader = makeHeader(
994
+ sequenceNumber,
995
+ commandIdentifier,
996
+ addr.applicationId,
997
+ securityLevelFullEncr,
998
+ securityKeyTypeNWK,
999
+ bidirectionalInfo,
1000
+ addr.sourceId,
1001
+ gpdSecurityFrameCounter,
1002
+ gpdCommandId,
1003
+ gpdCommandPayload.length,
1004
+ );
1005
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
1006
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1007
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1008
+
1009
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1010
+ 1,
1011
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=344902069 gpp=NO",
1012
+ "zh:controller:greenpower",
1013
+ );
1014
+
1015
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1016
+ clonedFrame.payload.commandID = 0x20;
1017
+ clonedFrame.payload.options = 256;
1018
+ clonedFrame.payload.commandFrame = {};
1019
+
1020
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1021
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1022
+ }
1023
+
1024
+ clearLogMocks();
1025
+
1026
+ // middle
1027
+ {
1028
+ const gpdLink = 225;
1029
+ const sequenceNumber = 184;
1030
+ const bidirectionalInfo = 0;
1031
+ const gpdSecurityFrameCounter = 1208;
1032
+ const gpdCommandId = 109;
1033
+ const gpdCommandPayload = Buffer.from("", "hex");
1034
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
1035
+
1036
+ const gpdHeader = makeHeader(
1037
+ sequenceNumber,
1038
+ commandIdentifier,
1039
+ addr.applicationId,
1040
+ securityLevelFullEncr,
1041
+ securityKeyTypeNWK,
1042
+ bidirectionalInfo,
1043
+ addr.sourceId,
1044
+ gpdSecurityFrameCounter,
1045
+ gpdCommandId,
1046
+ gpdCommandPayload.length,
1047
+ );
1048
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
1049
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1050
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1051
+
1052
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1053
+ 1,
1054
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=344902069 gpp=NO",
1055
+ "zh:controller:greenpower",
1056
+ );
1057
+
1058
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1059
+ clonedFrame.payload.commandID = 0x21;
1060
+ clonedFrame.payload.options = 256;
1061
+ clonedFrame.payload.commandFrame = {};
1062
+
1063
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1064
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1065
+ }
1066
+
1067
+ clearLogMocks();
1068
+
1069
+ // right
1070
+ {
1071
+ const gpdLink = 225;
1072
+ const sequenceNumber = 193;
1073
+ const bidirectionalInfo = 0;
1074
+ const gpdSecurityFrameCounter = 1217;
1075
+ const gpdCommandId = 219;
1076
+ const gpdCommandPayload = Buffer.from("", "hex");
1077
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.notification.ID;
1078
+
1079
+ const gpdHeader = makeHeader(
1080
+ sequenceNumber,
1081
+ commandIdentifier,
1082
+ addr.applicationId,
1083
+ securityLevelFullEncr,
1084
+ securityKeyTypeNWK,
1085
+ bidirectionalInfo,
1086
+ addr.sourceId,
1087
+ gpdSecurityFrameCounter,
1088
+ gpdCommandId,
1089
+ gpdCommandPayload.length,
1090
+ );
1091
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload]), gpdLink);
1092
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1093
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1094
+
1095
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1096
+ 1,
1097
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x11 srcID=344902069 gpp=NO",
1098
+ "zh:controller:greenpower",
1099
+ );
1100
+
1101
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1102
+ clonedFrame.payload.commandID = 0x11;
1103
+ clonedFrame.payload.options = 256;
1104
+ clonedFrame.payload.commandFrame = {};
1105
+
1106
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1107
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1108
+ }
1109
+ });
1110
+
1111
+ // @see https://github.com/Koenkk/zigbee2mqtt/issues/19405#issuecomment-2744667458
1112
+ it("FULLENCR ZT-LP-ZEU2S-WH-MS MOES 2-gang vectors from zstack through GPP", async () => {
1113
+ const joinData: GreenPowerDeviceJoinedPayload = {
1114
+ sourceID: 2777252112,
1115
+ deviceID: 2,
1116
+ networkAddress: 2777252112 & 0xffff,
1117
+ securityKey: Buffer.from([227, 227, 225, 134, 235, 104, 141, 250, 162, 211, 104, 147, 201, 146, 67, 175]),
1118
+ };
1119
+ const addr = {applicationId: 0, sourceId: 2777252112, endpoint: 0};
1120
+ const gppNwkAddr = 24404;
1121
+ const options = 2864;
1122
+
1123
+ // right
1124
+ {
1125
+ const sequenceNumber = 18;
1126
+ const gpdSecurityFrameCounter = 17326;
1127
+ const gpdCommandId = 38;
1128
+ const gpdCommandPayload = Buffer.from("", "hex");
1129
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1130
+ const gppGpdLink = 207;
1131
+ const mic = 1441399364;
1132
+
1133
+ const gpdHeader = makeHeader(
1134
+ sequenceNumber,
1135
+ commandIdentifier,
1136
+ 0,
1137
+ 0,
1138
+ 0,
1139
+ 0,
1140
+ addr.sourceId,
1141
+ gpdSecurityFrameCounter,
1142
+ gpdCommandId,
1143
+ gpdCommandPayload.length,
1144
+ options,
1145
+ );
1146
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1147
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
1148
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1149
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1150
+
1151
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1152
+ 1,
1153
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=2777252112 gpp=24404 rssi=15 linkQuality=Excellent",
1154
+ "zh:controller:greenpower",
1155
+ );
1156
+
1157
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1158
+ clonedFrame.payload.commandID = 0x21;
1159
+ clonedFrame.payload.options = 2304;
1160
+ clonedFrame.payload.commandFrame = {};
1161
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1162
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1163
+ delete clonedFrame.payload.mic;
1164
+
1165
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1166
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1167
+ }
1168
+
1169
+ clearLogMocks();
1170
+
1171
+ // right
1172
+ {
1173
+ const sequenceNumber = 19;
1174
+ const gpdSecurityFrameCounter = 17335;
1175
+ const gpdCommandId = 17;
1176
+ const gpdCommandPayload = Buffer.from("", "hex");
1177
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1178
+ const gppGpdLink = 207;
1179
+ const mic = 3064327344;
1180
+
1181
+ const gpdHeader = makeHeader(
1182
+ sequenceNumber,
1183
+ commandIdentifier,
1184
+ 0,
1185
+ 0,
1186
+ 0,
1187
+ 0,
1188
+ addr.sourceId,
1189
+ gpdSecurityFrameCounter,
1190
+ gpdCommandId,
1191
+ gpdCommandPayload.length,
1192
+ options,
1193
+ );
1194
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1195
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 127);
1196
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1197
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1198
+
1199
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1200
+ 1,
1201
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=2777252112 gpp=24404 rssi=15 linkQuality=Excellent",
1202
+ "zh:controller:greenpower",
1203
+ );
1204
+
1205
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1206
+ clonedFrame.payload.commandID = 0x21;
1207
+ clonedFrame.payload.options = 2304;
1208
+ clonedFrame.payload.commandFrame = {};
1209
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1210
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1211
+ delete clonedFrame.payload.mic;
1212
+
1213
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1214
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1215
+ }
1216
+
1217
+ clearLogMocks();
1218
+
1219
+ // right
1220
+ {
1221
+ const sequenceNumber = 20;
1222
+ const gpdSecurityFrameCounter = 17344;
1223
+ const gpdCommandId = 211;
1224
+ const gpdCommandPayload = Buffer.from("", "hex");
1225
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1226
+ const gppGpdLink = 207;
1227
+ const mic = 3315864057;
1228
+
1229
+ const gpdHeader = makeHeader(
1230
+ sequenceNumber,
1231
+ commandIdentifier,
1232
+ 0,
1233
+ 0,
1234
+ 0,
1235
+ 0,
1236
+ addr.sourceId,
1237
+ gpdSecurityFrameCounter,
1238
+ gpdCommandId,
1239
+ gpdCommandPayload.length,
1240
+ options,
1241
+ );
1242
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1243
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
1244
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1245
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1246
+
1247
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1248
+ 1,
1249
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x21 srcID=2777252112 gpp=24404 rssi=15 linkQuality=Excellent",
1250
+ "zh:controller:greenpower",
1251
+ );
1252
+
1253
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1254
+ clonedFrame.payload.commandID = 0x21;
1255
+ clonedFrame.payload.options = 2304;
1256
+ clonedFrame.payload.commandFrame = {};
1257
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1258
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1259
+ delete clonedFrame.payload.mic;
1260
+
1261
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1262
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1263
+ }
1264
+
1265
+ clearLogMocks();
1266
+
1267
+ // left
1268
+ {
1269
+ const sequenceNumber = 21;
1270
+ const gpdSecurityFrameCounter = 17353;
1271
+ const gpdCommandId = 174;
1272
+ const gpdCommandPayload = Buffer.from("", "hex");
1273
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1274
+ const gppGpdLink = 142;
1275
+ const mic = 827946906;
1276
+
1277
+ const gpdHeader = makeHeader(
1278
+ sequenceNumber,
1279
+ commandIdentifier,
1280
+ 0,
1281
+ 0,
1282
+ 0,
1283
+ 0,
1284
+ addr.sourceId,
1285
+ gpdSecurityFrameCounter,
1286
+ gpdCommandId,
1287
+ gpdCommandPayload.length,
1288
+ options,
1289
+ );
1290
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1291
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
1292
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1293
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1294
+
1295
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1296
+ 1,
1297
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=2777252112 gpp=24404 rssi=14 linkQuality=High",
1298
+ "zh:controller:greenpower",
1299
+ );
1300
+
1301
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1302
+ clonedFrame.payload.commandID = 0x20;
1303
+ clonedFrame.payload.options = 2304;
1304
+ clonedFrame.payload.commandFrame = {};
1305
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1306
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1307
+ delete clonedFrame.payload.mic;
1308
+
1309
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1310
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1311
+ }
1312
+
1313
+ clearLogMocks();
1314
+
1315
+ // left
1316
+ {
1317
+ const sequenceNumber = 22;
1318
+ const gpdSecurityFrameCounter = 17362;
1319
+ const gpdCommandId = 230;
1320
+ const gpdCommandPayload = Buffer.from("", "hex");
1321
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1322
+ const gppGpdLink = 209;
1323
+ const mic = 2941277720;
1324
+
1325
+ const gpdHeader = makeHeader(
1326
+ sequenceNumber,
1327
+ commandIdentifier,
1328
+ 0,
1329
+ 0,
1330
+ 0,
1331
+ 0,
1332
+ addr.sourceId,
1333
+ gpdSecurityFrameCounter,
1334
+ gpdCommandId,
1335
+ gpdCommandPayload.length,
1336
+ options,
1337
+ );
1338
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1339
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 142);
1340
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1341
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1342
+
1343
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1344
+ 1,
1345
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=2777252112 gpp=24404 rssi=17 linkQuality=Excellent",
1346
+ "zh:controller:greenpower",
1347
+ );
1348
+
1349
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1350
+ clonedFrame.payload.commandID = 0x20;
1351
+ clonedFrame.payload.options = 2304;
1352
+ clonedFrame.payload.commandFrame = {};
1353
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1354
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1355
+ delete clonedFrame.payload.mic;
1356
+
1357
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1358
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1359
+ }
1360
+
1361
+ clearLogMocks();
1362
+
1363
+ // left
1364
+ {
1365
+ const sequenceNumber = 23;
1366
+ const gpdSecurityFrameCounter = 17371;
1367
+ const gpdCommandId = 59;
1368
+ const gpdCommandPayload = Buffer.from("", "hex");
1369
+ const commandIdentifier = Zcl.Clusters.greenPower.commands.commissioningNotification.ID;
1370
+ const gppGpdLink = 209;
1371
+ const mic = 3231351307;
1372
+
1373
+ const gpdHeader = makeHeader(
1374
+ sequenceNumber,
1375
+ commandIdentifier,
1376
+ 0,
1377
+ 0,
1378
+ 0,
1379
+ 0,
1380
+ addr.sourceId,
1381
+ gpdSecurityFrameCounter,
1382
+ gpdCommandId,
1383
+ gpdCommandPayload.length,
1384
+ options,
1385
+ );
1386
+ const gpdFooter = makeFooter(options, gppNwkAddr, gppGpdLink, mic);
1387
+ const payload = makePayload(addr.sourceId, Buffer.concat([gpdHeader, gpdCommandPayload, gpdFooter]), 138);
1388
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1389
+ const retFrame = await gp.processCommand(payload, frame, joinData?.securityKey);
1390
+
1391
+ expect(logDebugSpy).toHaveBeenNthCalledWith(
1392
+ 1,
1393
+ "[UNHANDLED_CMD/PASSTHROUGH] command=0x20 srcID=2777252112 gpp=24404 rssi=17 linkQuality=Excellent",
1394
+ "zh:controller:greenpower",
1395
+ );
1396
+
1397
+ const clonedFrame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, {});
1398
+ clonedFrame.payload.commandID = 0x20;
1399
+ clonedFrame.payload.options = 2304;
1400
+ clonedFrame.payload.commandFrame = {};
1401
+ clonedFrame.payload.gppNwkAddr = gppNwkAddr;
1402
+ clonedFrame.payload.gppGpdLink = gppGpdLink;
1403
+ delete clonedFrame.payload.mic;
1404
+
1405
+ expect(JSON.parse(JSON.stringify(retFrame))).toStrictEqual(JSON.parse(JSON.stringify(clonedFrame)));
1406
+ expect(retFrame.payload.commandFrame).toStrictEqual({});
1407
+ }
1408
+ });
1409
+ });