@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,2858 @@
1
+ import {beforeEach, describe, expect, it, test, vi} from "vitest";
2
+ import * as Zcl from "../src/zspec/zcl";
3
+ import {BuffaloZcl} from "../src/zspec/zcl/buffaloZcl";
4
+ import {BuffaloZclDataType, DataType, Direction, FrameType, StructuredIndicatorType} from "../src/zspec/zcl/definition/enums";
5
+
6
+ describe("Zcl", () => {
7
+ it("Get cluster by name", () => {
8
+ const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
9
+ expect(cluster.ID).toBe(3);
10
+ expect(cluster.name).toBe("genIdentify");
11
+ expect(cluster.commands.identifyQuery.ID).toBe(1);
12
+ expect(cluster.commands.identifyQuery.name).toBe("identifyQuery");
13
+ expect(cluster.commandsResponse.identifyQueryRsp.ID).toBe(0);
14
+ expect(cluster.commandsResponse.identifyQueryRsp.name).toBe("identifyQueryRsp");
15
+ });
16
+
17
+ it("Get cluster by ID", () => {
18
+ const cluster1 = Zcl.Utils.getCluster(0, undefined, {});
19
+ // @ts-expect-error testing
20
+ delete cluster1.getAttribute;
21
+ // @ts-expect-error testing
22
+ delete cluster1.getCommand;
23
+ // @ts-expect-error testing
24
+ delete cluster1.getCommandResponse;
25
+ const cluster2 = Zcl.Utils.getCluster("genBasic", undefined, {});
26
+ // @ts-expect-error testing
27
+ delete cluster2.getAttribute;
28
+ // @ts-expect-error testing
29
+ delete cluster2.getCommand;
30
+ // @ts-expect-error testing
31
+ delete cluster2.getCommandResponse;
32
+ expect(cluster1).toStrictEqual(cluster2);
33
+ });
34
+
35
+ it("Get cluster attribute by ID", () => {
36
+ const cluster = Zcl.Utils.getCluster(0, undefined, {});
37
+ const attribute = cluster.getAttribute(1);
38
+ expect(attribute).toStrictEqual({ID: 1, type: DataType.UINT8, name: "appVersion", default: 0, max: 255});
39
+ });
40
+
41
+ it("Cluster has attribute", () => {
42
+ const cluster = Zcl.Utils.getCluster(0, undefined, {});
43
+ expect(cluster.getAttribute("zclVersion")).not.toBeUndefined();
44
+ expect(cluster.getAttribute("NOTEXISTING")).toBeUndefined();
45
+ expect(cluster.getAttribute(0)).not.toBeUndefined();
46
+ expect(cluster.getAttribute(910293)).toBeUndefined();
47
+ });
48
+
49
+ it("Get specific command by name", () => {
50
+ const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
51
+ const command = cluster.getCommand("ezmodeInvoke");
52
+ expect(command.ID).toBe(2);
53
+ expect(command.name).toBe("ezmodeInvoke");
54
+ });
55
+
56
+ it("Get global command by name", () => {
57
+ const command = Zcl.Utils.getGlobalCommand("readRsp");
58
+ expect(command.ID).toBe(1);
59
+ expect(command.name).toBe("readRsp");
60
+ });
61
+
62
+ it("Get global command non existing", () => {
63
+ expect(() => {
64
+ Zcl.Utils.getGlobalCommand("nonexisting");
65
+ }).toThrow("Global command with key 'nonexisting' does not exist");
66
+ });
67
+
68
+ it("Get cluster by name non-existing", () => {
69
+ expect(() => {
70
+ Zcl.Utils.getCluster("notExisting", undefined, {});
71
+ }).toThrow("Cluster with name 'notExisting' does not exist");
72
+ });
73
+
74
+ it("Get cluster by id non-existing", () => {
75
+ expect(JSON.parse(JSON.stringify(Zcl.Utils.getCluster(0x190231, undefined, {})))).toStrictEqual({
76
+ ID: 1638961,
77
+ attributes: {},
78
+ name: "1638961",
79
+ commands: {},
80
+ commandsResponse: {},
81
+ });
82
+ });
83
+
84
+ it("Get specific command by ID", () => {
85
+ const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
86
+ const command = cluster.getCommand(2);
87
+ expect(command).toStrictEqual(cluster.getCommand("ezmodeInvoke"));
88
+ });
89
+
90
+ it("Get specific command by name server to client", () => {
91
+ const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
92
+ const command = cluster.getCommandResponse(0);
93
+ expect(command.ID).toBe(0);
94
+ expect(command.name).toBe("identifyQueryRsp");
95
+ });
96
+
97
+ it("Get specific command by name non existing", () => {
98
+ expect(() => {
99
+ const cluster = Zcl.Utils.getCluster("genIdentify", undefined, {});
100
+ cluster.getCommandResponse("nonexisting");
101
+ }).toThrow("Cluster 'genIdentify' has no command response 'nonexisting'");
102
+ });
103
+
104
+ it("Get discrete or analog of unkown type", () => {
105
+ expect(() => {
106
+ // @ts-expect-error invalid on purpose
107
+ Zcl.Utils.getDataTypeClass(99999);
108
+ }).toThrow("Don't know value type for 'undefined'");
109
+ });
110
+
111
+ it("ZclFrame from buffer parse payload with unknown frame type", () => {
112
+ expect(() => {
113
+ // @ts-expect-error
114
+ Zcl.Frame.parsePayload({frameControl: {frameType: 9}}, undefined);
115
+ }).toThrow("Unsupported frameType '9'");
116
+ });
117
+
118
+ it("ZclFrame from buffer report", () => {
119
+ const buffer = Buffer.from([0x18, 0x4a, 0x0a, 0x55, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00]);
120
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genAnalogInput.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
121
+ const header = new Zcl.Header(
122
+ {
123
+ reservedBits: 0,
124
+ direction: 1,
125
+ disableDefaultResponse: true,
126
+ frameType: 0,
127
+ manufacturerSpecific: false,
128
+ },
129
+ undefined,
130
+ 74,
131
+ 10,
132
+ );
133
+
134
+ const payload = [
135
+ {
136
+ attrData: 0,
137
+ attrId: 85,
138
+ dataType: 57,
139
+ },
140
+ ];
141
+
142
+ expect(frame.header).toStrictEqual(header);
143
+ expect(frame.payload).toStrictEqual(payload);
144
+ expect(frame.header.isGlobal).toBe(true);
145
+ expect(frame.header.isSpecific).toBe(false);
146
+ expect(frame.isCluster("genAnalogInput")).toBe(true);
147
+ expect(frame.isCommand("report")).toBe(true);
148
+ });
149
+
150
+ it("ZclFrame from buffer tradfriArrowSingle", () => {
151
+ const buffer = Buffer.from([0x05, 0x7c, 0x11, 0x1d, 0x07, 0x00, 0x01, 0x0d, 0x00]);
152
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genScenes.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
153
+ const header = new Zcl.Header(
154
+ {
155
+ reservedBits: 0,
156
+ direction: 0,
157
+ disableDefaultResponse: false,
158
+ frameType: 1,
159
+ manufacturerSpecific: true,
160
+ },
161
+ 4476,
162
+ 29,
163
+ 7,
164
+ );
165
+
166
+ const payload = {value: 256, value2: 13};
167
+
168
+ expect(frame.header).toStrictEqual(header);
169
+ expect(frame.payload).toStrictEqual(payload);
170
+ expect(frame.command.ID).toStrictEqual(7);
171
+ expect(frame.command.name).toStrictEqual("tradfriArrowSingle");
172
+ });
173
+
174
+ it("ZclFrame from buffer genGroups getMembership", () => {
175
+ const buffer = Buffer.from([0x11, 0x7c, 0x02, 2, 10, 0, 20, 0]);
176
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
177
+ const header = new Zcl.Header(
178
+ {
179
+ reservedBits: 0,
180
+ direction: 0,
181
+ disableDefaultResponse: true,
182
+ frameType: 1,
183
+ manufacturerSpecific: false,
184
+ },
185
+ undefined,
186
+ 124,
187
+ 2,
188
+ );
189
+
190
+ const payload = {groupcount: 2, grouplist: [10, 20]};
191
+
192
+ expect(frame.header).toStrictEqual(header);
193
+ expect(frame.payload).toStrictEqual(payload);
194
+ });
195
+
196
+ it("ZclFrame from buffer genGroups getMembership", () => {
197
+ const buffer = Buffer.from([0x19, 0x7c, 0x03, 0, 10, 0]);
198
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
199
+ const header = new Zcl.Header(
200
+ {
201
+ reservedBits: 0,
202
+ direction: 1,
203
+ disableDefaultResponse: true,
204
+ frameType: 1,
205
+ manufacturerSpecific: false,
206
+ },
207
+ undefined,
208
+ 124,
209
+ 3,
210
+ );
211
+
212
+ const payload = {groupid: 10, status: 0};
213
+
214
+ expect(frame.header).toStrictEqual(header);
215
+ expect(frame.payload).toStrictEqual(payload);
216
+ });
217
+
218
+ it("ZclFrame from buffer occupancy report", () => {
219
+ const buffer = Buffer.from([24, 169, 10, 0, 0, 24, 1]);
220
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.msOccupancySensing.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
221
+ const header = new Zcl.Header(
222
+ {
223
+ reservedBits: 0,
224
+ direction: 1,
225
+ disableDefaultResponse: true,
226
+ frameType: 0,
227
+ manufacturerSpecific: false,
228
+ },
229
+ undefined,
230
+ 169,
231
+ 10,
232
+ );
233
+
234
+ const payload = [{attrId: 0, dataType: 24, attrData: 1}];
235
+
236
+ expect(frame.header).toStrictEqual(header);
237
+ expect(frame.payload).toStrictEqual(payload);
238
+ });
239
+
240
+ it("ZclFrame from buffer configReportRsp - short", () => {
241
+ const buffer = Buffer.from([0x08, 0x01, 0x07, 0x00]);
242
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
243
+ const header = new Zcl.Header(
244
+ {
245
+ reservedBits: 0,
246
+ direction: 1,
247
+ disableDefaultResponse: false,
248
+ frameType: 0,
249
+ manufacturerSpecific: false,
250
+ },
251
+ undefined,
252
+ 1,
253
+ 7,
254
+ );
255
+
256
+ const payload = [{status: 0}];
257
+
258
+ expect(frame.header).toStrictEqual(header);
259
+ expect(frame.payload).toStrictEqual(payload);
260
+ });
261
+
262
+ it("ZclFrame from buffer configReportRsp - long", () => {
263
+ const buffer = Buffer.from([0x08, 0x01, 0x07, 0x00, 0x01, 0x34, 0x12, 0x01, 0x01, 0x35, 0x12]);
264
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
265
+ const header = new Zcl.Header(
266
+ {
267
+ reservedBits: 0,
268
+ direction: 1,
269
+ disableDefaultResponse: false,
270
+ frameType: 0,
271
+ manufacturerSpecific: false,
272
+ },
273
+ undefined,
274
+ 1,
275
+ 7,
276
+ );
277
+
278
+ const payload = [
279
+ {status: 0, direction: 1, attrId: 0x1234},
280
+ {status: 1, direction: 1, attrId: 0x1235},
281
+ ];
282
+
283
+ expect(frame.header).toStrictEqual(header);
284
+ expect(frame.payload).toStrictEqual(payload);
285
+ });
286
+
287
+ it("ZclFrame from buffer configReportRsp (hvacThermostat)", () => {
288
+ const buffer = Buffer.from([0x18, 0x03, 0x07, 0x00, 0x00, 0x12, 0x00]);
289
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
290
+ const header = new Zcl.Header(
291
+ {
292
+ reservedBits: 0,
293
+ direction: 1,
294
+ disableDefaultResponse: true,
295
+ frameType: 0,
296
+ manufacturerSpecific: false,
297
+ },
298
+ undefined,
299
+ 3,
300
+ 7,
301
+ );
302
+
303
+ const payload = [{status: 0, direction: 0, attrId: 18}];
304
+
305
+ expect(frame.payload).toStrictEqual(payload);
306
+ expect(frame.header).toStrictEqual(header);
307
+ });
308
+
309
+ it("ZclFrame from buffer getWeeklyScheduleRsp (hvacThermostat)", () => {
310
+ const bufferHeat = Buffer.from([
311
+ 9, 7, 0, 6, 64, 1, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8,
312
+ ]);
313
+ const frameHeat = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(bufferHeat)!, bufferHeat, {});
314
+ expect(frameHeat.payload).toStrictEqual({
315
+ numoftrans: 6,
316
+ dayofweek: 64,
317
+ mode: 1,
318
+ transitions: [
319
+ {transitionTime: 360, heatSetpoint: 2300},
320
+ {transitionTime: 570, heatSetpoint: 2200},
321
+ {transitionTime: 720, heatSetpoint: 2150},
322
+ {transitionTime: 840, heatSetpoint: 2150},
323
+ {transitionTime: 990, heatSetpoint: 2300},
324
+ {transitionTime: 1380, heatSetpoint: 2100},
325
+ ],
326
+ });
327
+
328
+ const bufferCool = Buffer.from([
329
+ 9, 7, 0, 6, 64, 2, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8,
330
+ ]);
331
+ const frameCool = Zcl.Frame.fromBuffer(Zcl.Clusters.hvacThermostat.ID, Zcl.Header.fromBuffer(bufferCool)!, bufferCool, {});
332
+ expect(frameCool.payload).toStrictEqual({
333
+ numoftrans: 6,
334
+ dayofweek: 64,
335
+ mode: 2,
336
+ transitions: [
337
+ {transitionTime: 360, coolSetpoint: 2300},
338
+ {transitionTime: 570, coolSetpoint: 2200},
339
+ {transitionTime: 720, coolSetpoint: 2150},
340
+ {transitionTime: 840, coolSetpoint: 2150},
341
+ {transitionTime: 990, coolSetpoint: 2300},
342
+ {transitionTime: 1380, coolSetpoint: 2100},
343
+ ],
344
+ });
345
+
346
+ const bufferHeatAndCool = Buffer.from([9, 7, 0, 1, 64, 3, 104, 1, 252, 8, 58, 2]);
347
+ const frameHeatAndCool = Zcl.Frame.fromBuffer(
348
+ Zcl.Clusters.hvacThermostat.ID,
349
+ Zcl.Header.fromBuffer(bufferHeatAndCool)!,
350
+ bufferHeatAndCool,
351
+ {},
352
+ );
353
+ expect(frameHeatAndCool.payload).toStrictEqual({
354
+ numoftrans: 1,
355
+ dayofweek: 64,
356
+ mode: 3,
357
+ transitions: [{transitionTime: 360, coolSetpoint: 570, heatSetpoint: 2300}],
358
+ });
359
+ });
360
+
361
+ it("ZclFrame to buffer setWeeklyScheduleRsp (hvacThermostat)", () => {
362
+ const payloadHeat = {
363
+ numoftrans: 6,
364
+ dayofweek: 64,
365
+ mode: 1,
366
+ transitions: [
367
+ {transitionTime: 360, heatSetpoint: 23},
368
+ {transitionTime: 570, heatSetpoint: 2200},
369
+ {transitionTime: 720, heatSetpoint: 2150},
370
+ {transitionTime: 840, heatSetpoint: 2150},
371
+ {transitionTime: 990, heatSetpoint: 2300},
372
+ {transitionTime: 1380, heatSetpoint: 2100},
373
+ ],
374
+ };
375
+ const frameHeat = Zcl.Frame.create(
376
+ FrameType.SPECIFIC,
377
+ Direction.CLIENT_TO_SERVER,
378
+ false,
379
+ undefined,
380
+ 8,
381
+ "setWeeklySchedule",
382
+ 513,
383
+ payloadHeat,
384
+ {},
385
+ );
386
+ expect(frameHeat.toBuffer()).toStrictEqual(
387
+ Buffer.from([1, 8, 1, 6, 64, 1, 104, 1, 23, 0, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8]),
388
+ );
389
+
390
+ const payloadCool = {
391
+ numoftrans: 6,
392
+ dayofweek: 64,
393
+ mode: 2,
394
+ transitions: [
395
+ {transitionTime: 360, coolSetpoint: 2300},
396
+ {transitionTime: 570, coolSetpoint: 2200},
397
+ {transitionTime: 720, coolSetpoint: 2150},
398
+ {transitionTime: 840, coolSetpoint: 2150},
399
+ {transitionTime: 990, coolSetpoint: 2300},
400
+ {transitionTime: 1380, coolSetpoint: 2100},
401
+ ],
402
+ };
403
+ const frameCool = Zcl.Frame.create(
404
+ FrameType.SPECIFIC,
405
+ Direction.CLIENT_TO_SERVER,
406
+ false,
407
+ undefined,
408
+ 8,
409
+ "setWeeklySchedule",
410
+ 513,
411
+ payloadCool,
412
+ {},
413
+ );
414
+ expect(frameCool.toBuffer()).toStrictEqual(
415
+ Buffer.from([1, 8, 1, 6, 64, 2, 104, 1, 252, 8, 58, 2, 152, 8, 208, 2, 102, 8, 72, 3, 102, 8, 222, 3, 252, 8, 100, 5, 52, 8]),
416
+ );
417
+
418
+ const payloadHeatAndCool = {
419
+ numoftrans: 6,
420
+ dayofweek: 64,
421
+ mode: 2,
422
+ transitions: [{transitionTime: 360, coolSetpoint: 570, heatSetpoint: 2300}],
423
+ };
424
+ const frameHeatAndCool = Zcl.Frame.create(
425
+ FrameType.SPECIFIC,
426
+ Direction.CLIENT_TO_SERVER,
427
+ false,
428
+ undefined,
429
+ 8,
430
+ "setWeeklySchedule",
431
+ 513,
432
+ payloadHeatAndCool,
433
+ {},
434
+ );
435
+ expect(frameHeatAndCool.toBuffer()).toStrictEqual(Buffer.from([1, 8, 1, 6, 64, 2, 104, 1, 252, 8, 58, 2]));
436
+ });
437
+
438
+ it("ZclFrame from buffer configReportRsp failed", () => {
439
+ const buffer = Buffer.from([0x08, 0x01, 0x07, 0x02, 0x01, 0x01, 0x01]);
440
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
441
+ const header = new Zcl.Header(
442
+ {
443
+ reservedBits: 0,
444
+ direction: 1,
445
+ disableDefaultResponse: false,
446
+ frameType: 0,
447
+ manufacturerSpecific: false,
448
+ },
449
+ undefined,
450
+ 1,
451
+ 7,
452
+ );
453
+
454
+ const payload = [{status: 2, direction: 1, attrId: 257}];
455
+
456
+ expect(frame.header).toStrictEqual(header);
457
+ expect(frame.payload).toStrictEqual(payload);
458
+ });
459
+
460
+ it("ZclFrame from buffer defaultRsp", () => {
461
+ const buffer = Buffer.from([0x18, 0x04, 0x0b, 0x0c, 0x82]);
462
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
463
+ const header = new Zcl.Header(
464
+ {
465
+ reservedBits: 0,
466
+ direction: 1,
467
+ disableDefaultResponse: true,
468
+ frameType: 0,
469
+ manufacturerSpecific: false,
470
+ },
471
+ undefined,
472
+ 4,
473
+ 11,
474
+ );
475
+
476
+ const payload = {cmdId: 12, statusCode: 130};
477
+
478
+ expect(frame.header).toStrictEqual(header);
479
+ expect(frame.payload).toStrictEqual(payload);
480
+ });
481
+
482
+ test.each([
483
+ [
484
+ [
485
+ 28, 95, 17, 3, 10, 1, 255, 66, 68, 3, 40, 29, 5, 33, 190, 45, 8, 33, 47, 18, 9, 33, 2, 21, 100, 16, 1, 101, 16, 0, 110, 32, 255, 111,
486
+ 32, 255, 148, 32, 4, 149, 57, 184, 30, 21, 62, 150, 57, 211, 249, 17, 69, 151, 57, 0, 48, 104, 59, 152, 57, 0, 0, 0, 0, 155, 33, 1, 0,
487
+ 156, 32, 1, 10, 33, 56, 38, 12, 40, 0, 0,
488
+ ],
489
+ [
490
+ {
491
+ attrId: 65281,
492
+ dataType: 66,
493
+ attrData: {
494
+ "3": 29,
495
+ "5": 11710,
496
+ "8": 4655,
497
+ "9": 5378,
498
+ "10": 9784,
499
+ "12": 0,
500
+ "100": 1,
501
+ "101": 0,
502
+ "110": 255,
503
+ "111": 255,
504
+ "148": 4,
505
+ "149": 0.14562499523162842,
506
+ "150": 2335.614013671875,
507
+ "151": 0.0035429000854492188,
508
+ "152": 0,
509
+ "155": 1,
510
+ "156": 1,
511
+ },
512
+ },
513
+ ],
514
+ ],
515
+ [
516
+ [
517
+ 28, 95, 17, 3, 10, 5, 0, 66, 21, 108, 117, 109, 105, 46, 115, 101, 110, 115, 111, 114, 95, 119, 108, 101, 97, 107, 46, 97, 113, 49, 1,
518
+ 255, 66, 34, 1, 33, 213, 12, 3, 40, 33, 4, 33, 168, 19, 5, 33, 43, 0, 6, 36, 0, 0, 5, 0, 0, 8, 33, 4, 2, 10, 33, 0, 0, 100, 16, 0,
519
+ ],
520
+ [
521
+ {attrId: 5, dataType: 66, attrData: "lumi.sensor_wleak.aq1"},
522
+ {attrId: 65281, dataType: 66, attrData: {"1": 3285, "3": 33, "4": 5032, "5": 43, "6": 327680, "8": 516, "10": 0, "100": 0}},
523
+ ],
524
+ ],
525
+ ])("ZclFrame from buffer xiaomiStruct", (data, payload) => {
526
+ const buffer = Buffer.from(data);
527
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
528
+ const header = new Zcl.Header(
529
+ {
530
+ reservedBits: 0,
531
+ direction: 1,
532
+ disableDefaultResponse: true,
533
+ frameType: 0,
534
+ manufacturerSpecific: true,
535
+ },
536
+ 4447,
537
+ 3,
538
+ 10,
539
+ );
540
+
541
+ expect(frame.header).toStrictEqual(header);
542
+ expect(frame.payload).toStrictEqual(payload);
543
+ });
544
+
545
+ it("ZclFrame from buffer struct", () => {
546
+ const buffer = Buffer.from([28, 52, 18, 194, 10, 2, 255, 76, 6, 0, 16, 1, 33, 206, 11, 33, 168, 67, 36, 1, 0, 0, 0, 0, 33, 48, 2, 32, 86]);
547
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
548
+ const header = new Zcl.Header(
549
+ {
550
+ reservedBits: 0,
551
+ direction: 1,
552
+ disableDefaultResponse: true,
553
+ frameType: 0,
554
+ manufacturerSpecific: true,
555
+ },
556
+ 4660,
557
+ 194,
558
+ 10,
559
+ );
560
+
561
+ const payload = [
562
+ {
563
+ attrId: 65282,
564
+ dataType: 76,
565
+ numElms: 6,
566
+ structElms: [
567
+ {elmType: 16, elmVal: 1},
568
+ {elmType: 33, elmVal: 3022},
569
+ {elmType: 33, elmVal: 17320},
570
+ {elmType: 36, elmVal: 1},
571
+ {elmType: 33, elmVal: 560},
572
+ {elmType: 32, elmVal: 86},
573
+ ],
574
+ attrData: [
575
+ {elmType: 16, elmVal: 1},
576
+ {elmType: 33, elmVal: 3022},
577
+ {elmType: 33, elmVal: 17320},
578
+ {elmType: 36, elmVal: 1},
579
+ {elmType: 33, elmVal: 560},
580
+ {elmType: 32, elmVal: 86},
581
+ ],
582
+ },
583
+ ];
584
+
585
+ expect(frame.header).toStrictEqual(header);
586
+ expect(frame.payload).toStrictEqual(payload);
587
+ });
588
+
589
+ it("ZclFrame from buffer discoverRsp", () => {
590
+ const buffer = Buffer.from([24, 23, 13, 0, 32, 0, 32, 33, 0, 32, 49, 0, 48, 51, 0, 32, 53, 0, 24]);
591
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
592
+ const header = new Zcl.Header(
593
+ {
594
+ reservedBits: 0,
595
+ direction: 1,
596
+ disableDefaultResponse: true,
597
+ frameType: 0,
598
+ manufacturerSpecific: false,
599
+ },
600
+ undefined,
601
+ 23,
602
+ 13,
603
+ );
604
+
605
+ const payload = {
606
+ discComplete: 0,
607
+ attrInfos: [
608
+ {attrId: 32, dataType: 32},
609
+ {attrId: 33, dataType: 32},
610
+ {attrId: 49, dataType: 48},
611
+ {attrId: 51, dataType: 32},
612
+ {attrId: 53, dataType: 24},
613
+ ],
614
+ };
615
+
616
+ expect(frame.header).toStrictEqual(header);
617
+ expect(frame.payload).toStrictEqual(payload);
618
+ expect(frame.cluster.name).toEqual("genPowerCfg");
619
+ expect(frame.command.name).toEqual("discoverRsp");
620
+ });
621
+
622
+ it("ZclFrame from buffer error on malformed", () => {
623
+ const buffer = Buffer.from([0x08, 0x01]);
624
+ expect(() => {
625
+ Zcl.Frame.fromBuffer(Zcl.Clusters.genPowerCfg.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
626
+ }).toThrow("Invalid ZclHeader");
627
+ });
628
+
629
+ it("ZclFrame from buffer readRsp failed", () => {
630
+ const buffer = Buffer.from([8, 1, 1, 1, 0, 2]);
631
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
632
+ const header = new Zcl.Header(
633
+ {
634
+ reservedBits: 0,
635
+ direction: 1,
636
+ disableDefaultResponse: false,
637
+ frameType: 0,
638
+ manufacturerSpecific: false,
639
+ },
640
+ undefined,
641
+ 1,
642
+ 1,
643
+ );
644
+
645
+ const payload = [{status: 2, attrId: 1}];
646
+
647
+ expect(frame.header).toStrictEqual(header);
648
+ expect(frame.payload).toStrictEqual(payload);
649
+ });
650
+
651
+ it("ZclFrame from buffer readRsp success", () => {
652
+ const buffer = Buffer.from([8, 1, 1, 1, 0, 0, 32, 3]);
653
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
654
+ const header = new Zcl.Header(
655
+ {
656
+ reservedBits: 0,
657
+ direction: 1,
658
+ disableDefaultResponse: false,
659
+ frameType: 0,
660
+ manufacturerSpecific: false,
661
+ },
662
+ undefined,
663
+ 1,
664
+ 1,
665
+ );
666
+
667
+ const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.UINT8, attrData: 3}];
668
+
669
+ expect(frame.header).toStrictEqual(header);
670
+ expect(frame.payload).toStrictEqual(payload);
671
+ });
672
+
673
+ it("ZclFrame from buffer GPD commission", () => {
674
+ const buffer = Buffer.from([
675
+ 0x11, 0x00, 0x04, 0x00, 0x00, 0xfe, 0xf4, 0x46, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xe0, 0x1b, 0x02, 0x81, 0xf2, 0xf1, 0xec, 0x92, 0xab, 0xff,
676
+ 0x8f, 0x13, 0x63, 0xe1, 0x46, 0xbe, 0xb5, 0x18, 0xc9, 0x0c, 0xab, 0xa4, 0x46, 0xd4, 0xd5, 0xf9, 0x01, 0x00, 0x00,
677
+ ]);
678
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
679
+ const header = new Zcl.Header(
680
+ {
681
+ reservedBits: 0,
682
+ direction: 0,
683
+ disableDefaultResponse: true,
684
+ frameType: 1,
685
+ manufacturerSpecific: false,
686
+ },
687
+ undefined,
688
+ 0,
689
+ 4,
690
+ );
691
+
692
+ const payload = {
693
+ options: 0,
694
+ srcID: 4650238,
695
+ frameCounter: 249,
696
+ commandID: 224,
697
+ payloadSize: 27,
698
+ commandFrame: {
699
+ deviceID: 2,
700
+ options: 129,
701
+ extendedOptions: 242,
702
+ gpdClientClusters: Buffer.alloc(0),
703
+ gpdServerClusters: Buffer.alloc(0),
704
+ manufacturerID: 0,
705
+ modelID: 0,
706
+ numClientClusters: 0,
707
+ numServerClusters: 0,
708
+ securityKey: Buffer.from([0xf1, 0xec, 0x92, 0xab, 0xff, 0x8f, 0x13, 0x63, 0xe1, 0x46, 0xbe, 0xb5, 0x18, 0xc9, 0x0c, 0xab]),
709
+ keyMic: 3587458724,
710
+ outgoingCounter: 505,
711
+ applicationInfo: 0,
712
+ numGpdCommands: 0,
713
+ gpdCommandIdList: Buffer.alloc(0),
714
+ genericSwitchConfig: 0,
715
+ currentContactStatus: 0,
716
+ },
717
+ };
718
+
719
+ expect(frame.header).toStrictEqual(header);
720
+ expect(frame.payload).toStrictEqual(payload);
721
+ });
722
+
723
+ it("ZclFrame from buffer GPD scene 0", () => {
724
+ const buffer = Buffer.from([0x11, 0x00, 0x00, 0xa0, 0x14, 0xfe, 0xf4, 0x46, 0x00, 0xe5, 0x04, 0x00, 0x00, 0x10, 0xff]);
725
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
726
+ const header = new Zcl.Header(
727
+ {
728
+ reservedBits: 0,
729
+ direction: 0,
730
+ disableDefaultResponse: true,
731
+ frameType: 1,
732
+ manufacturerSpecific: false,
733
+ },
734
+ undefined,
735
+ 0,
736
+ 0,
737
+ );
738
+
739
+ const payload = {
740
+ srcID: 4650238,
741
+ commandFrame: {},
742
+ commandID: 16,
743
+ frameCounter: 1253,
744
+ options: 5280,
745
+ payloadSize: Number.NaN,
746
+ };
747
+
748
+ expect(frame.header).toStrictEqual(header);
749
+ expect(frame.payload).toStrictEqual(payload);
750
+ });
751
+
752
+ it("ZclFrame from buffer GPD with extra data", () => {
753
+ const buffer = Buffer.from([0x11, 0x00, 0x00, 0xa0, 0x14, 0xfe, 0xf4, 0x46, 0x00, 0xe5, 0x04, 0x00, 0x00, 0x10, 0x01, 0x01]);
754
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
755
+ const header = new Zcl.Header(
756
+ {
757
+ reservedBits: 0,
758
+ direction: 0,
759
+ disableDefaultResponse: true,
760
+ frameType: 1,
761
+ manufacturerSpecific: false,
762
+ },
763
+ undefined,
764
+ 0,
765
+ 0,
766
+ );
767
+
768
+ const payload = {
769
+ srcID: 4650238,
770
+ commandFrame: {raw: Buffer.from([1])},
771
+ commandID: 16,
772
+ frameCounter: 1253,
773
+ options: 5280,
774
+ payloadSize: 1,
775
+ };
776
+
777
+ expect(frame.header).toStrictEqual(header);
778
+ expect(frame.payload).toStrictEqual(payload);
779
+ });
780
+
781
+ it("ZclFrame from buffer GPD pairing", () => {
782
+ const buffer = Buffer.from([
783
+ 0x19, 0x17, 0x01, 0x68, 0xe5, 0x00, 0xf8, 0x71, 0x71, 0x01, 0x47, 0x65, 0xa1, 0x1c, 0x00, 0x4b, 0x12, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x12,
784
+ 0x00, 0x00, 0x09, 0x3c, 0xed, 0x1d, 0xbf, 0x25, 0x63, 0xf9, 0x29, 0x5c, 0x0d, 0x3d, 0x9f, 0xc5, 0x76, 0xe1, 0, 0, 0, 0, 0, 0,
785
+ ]);
786
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
787
+ const header = new Zcl.Header(
788
+ {
789
+ reservedBits: 0,
790
+ direction: 1,
791
+ disableDefaultResponse: true,
792
+ frameType: 1,
793
+ manufacturerSpecific: false,
794
+ },
795
+ undefined,
796
+ 23,
797
+ 1,
798
+ );
799
+
800
+ const payload = {
801
+ options: 0x00e568,
802
+ srcID: 0x017171f8,
803
+ sinkIEEEAddr: "0x00124b001ca16547",
804
+ sinkNwkAddr: 0,
805
+ deviceID: 2,
806
+ frameCounter: 4636,
807
+ gpdKey: Buffer.from([0x09, 0x3c, 0xed, 0x1d, 0xbf, 0x25, 0x63, 0xf9, 0x29, 0x5c, 0x0d, 0x3d, 0x9f, 0xc5, 0x76, 0xe1]),
808
+ };
809
+
810
+ expect(frame.header).toStrictEqual(header);
811
+ expect(frame.payload).toStrictEqual(payload);
812
+ });
813
+
814
+ it("ZclFrame from buffer readRsp alias type", () => {
815
+ const buffer = Buffer.from([8, 1, 1, 1, 0, 0, 8, 3]);
816
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
817
+ const header = new Zcl.Header(
818
+ {
819
+ reservedBits: 0,
820
+ direction: 1,
821
+ disableDefaultResponse: false,
822
+ frameType: 0,
823
+ manufacturerSpecific: false,
824
+ },
825
+ undefined,
826
+ 1,
827
+ 1,
828
+ );
829
+
830
+ const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.DATA8, attrData: 3}];
831
+
832
+ expect(frame.header).toStrictEqual(header);
833
+ expect(frame.payload).toStrictEqual(payload);
834
+ });
835
+
836
+ it("ZclFrame from buffer configReportRsp server to client", () => {
837
+ const buffer = Buffer.from([8, 1, 6, 1, 1, 0, 10, 10]);
838
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
839
+ const header = new Zcl.Header(
840
+ {
841
+ reservedBits: 0,
842
+ direction: 1,
843
+ disableDefaultResponse: false,
844
+ frameType: 0,
845
+ manufacturerSpecific: false,
846
+ },
847
+ undefined,
848
+ 1,
849
+ 6,
850
+ );
851
+
852
+ const payload = [{attrId: 1, direction: 1, timeout: 2570}];
853
+
854
+ expect(frame.header).toStrictEqual(header);
855
+ expect(frame.payload).toStrictEqual(payload);
856
+ });
857
+
858
+ it("ZclFrame from buffer configReportRsp client to server analog", () => {
859
+ const buffer = Buffer.from([8, 1, 6, 0, 0, 1, 32, 1, 0, 10, 0, 20]);
860
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
861
+ const header = new Zcl.Header(
862
+ {
863
+ reservedBits: 0,
864
+ direction: 1,
865
+ disableDefaultResponse: false,
866
+ frameType: 0,
867
+ manufacturerSpecific: false,
868
+ },
869
+ undefined,
870
+ 1,
871
+ 6,
872
+ );
873
+
874
+ const payload = [{attrId: 256, dataType: 32, direction: 0, maxRepIntval: 10, minRepIntval: 1, repChange: 20}];
875
+
876
+ expect(frame.header).toStrictEqual(header);
877
+ expect(frame.payload).toStrictEqual(payload);
878
+ });
879
+
880
+ it("ZclFrame from buffer configReportRsp client to server analog", () => {
881
+ const buffer = Buffer.from([8, 1, 6, 0, 0, 1, 8, 1, 0, 10, 0]);
882
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
883
+ const header = new Zcl.Header(
884
+ {
885
+ reservedBits: 0,
886
+ direction: 1,
887
+ disableDefaultResponse: false,
888
+ frameType: 0,
889
+ manufacturerSpecific: false,
890
+ },
891
+ undefined,
892
+ 1,
893
+ 6,
894
+ );
895
+
896
+ const payload = [{attrId: 256, dataType: 8, direction: 0, maxRepIntval: 10, minRepIntval: 1}];
897
+
898
+ expect(frame.header).toStrictEqual(header);
899
+ expect(frame.payload).toStrictEqual(payload);
900
+ });
901
+
902
+ it("ZclFrame from buffer readRsp", () => {
903
+ const buffer = Buffer.from([
904
+ 24, 7, 1, 5, 0, 0, 66, 30, 84, 82, 65, 68, 70, 82, 73, 32, 98, 117, 108, 98, 32, 69, 50, 55, 32, 87, 83, 32, 111, 112, 97, 108, 32, 57,
905
+ 56, 48, 108, 109, 6, 0, 0, 66, 8, 50, 48, 49, 55, 48, 51, 51, 49, 7, 0, 0, 48, 1, 10, 0, 0, 65, 15, 76, 69, 68, 49, 53, 52, 53, 71, 49,
906
+ 50, 69, 50, 55, 69, 85,
907
+ ]);
908
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
909
+ const header = new Zcl.Header(
910
+ {
911
+ reservedBits: 0,
912
+ direction: 1,
913
+ disableDefaultResponse: true,
914
+ frameType: 0,
915
+ manufacturerSpecific: false,
916
+ },
917
+ undefined,
918
+ 7,
919
+ 1,
920
+ );
921
+
922
+ const payload = [
923
+ {attrId: 5, status: 0, dataType: 66, attrData: "TRADFRI bulb E27 WS opal 980lm"},
924
+ {attrId: 6, status: 0, dataType: 66, attrData: "20170331"},
925
+ {attrId: 7, status: 0, dataType: 48, attrData: 1},
926
+ {attrId: 10, status: 0, dataType: 65, attrData: Buffer.from([76, 69, 68, 49, 53, 52, 53, 71, 49, 50, 69, 50, 55, 69, 85])},
927
+ ];
928
+
929
+ expect(frame.header).toStrictEqual(header);
930
+ expect(frame.payload).toStrictEqual(payload);
931
+ });
932
+
933
+ it("ZclFrame with Assa (manufacturer specific) cluster create", () => {
934
+ const payload = [{attrId: 0x0012, status: 0, attrData: 1, dataType: 32}];
935
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, 0x101d, 8, "readRsp", 0xfc00, payload, {});
936
+
937
+ expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
938
+ });
939
+
940
+ it("ZclFrame with Assa (manufacturer specific) cluster create with non Assamanufcode", () => {
941
+ const payload = [{attrId: 0x0012, status: 0, attrData: 1, dataType: 32}];
942
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, 0x10f3, 8, "readRsp", 0xfc00, payload, {});
943
+
944
+ expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
945
+ });
946
+
947
+ it("ZclFrame with Assa (manufacturer specific) cluster fromBuffer", () => {
948
+ const buffer = Buffer.from([0x04, 0xf2, 0x10, 0x08, 0x01, 0x00, 0x00, 0x00, 0x20, 0x01]);
949
+ const frame = Zcl.Frame.fromBuffer(0xfc00, Zcl.Header.fromBuffer(buffer)!, buffer, {});
950
+ expect(frame.cluster.name).toBe("manuSpecificAssaDoorLock");
951
+ });
952
+
953
+ it("ZclFrame to buffer with reservered bits", () => {
954
+ const expected = Buffer.from([224, 8, 12, 0, 0, 240]);
955
+ const payload = {startAttrId: 0, maxAttrIds: 240};
956
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, undefined, 8, "discover", 0, payload, {}, 7);
957
+
958
+ expect(frame.toBuffer()).toStrictEqual(expected);
959
+ });
960
+
961
+ it("ZclFrame from buffer with reservered bits", () => {
962
+ const buffer = Buffer.from([224, 8, 12, 0, 0, 240]);
963
+ const frame = Zcl.Frame.fromBuffer(0, Zcl.Header.fromBuffer(buffer)!, buffer, {});
964
+ const header = new Zcl.Header(
965
+ {
966
+ reservedBits: 7,
967
+ direction: 0,
968
+ disableDefaultResponse: false,
969
+ frameType: 0,
970
+ manufacturerSpecific: false,
971
+ },
972
+ undefined,
973
+ 8,
974
+ 12,
975
+ );
976
+
977
+ const payload = {startAttrId: 0, maxAttrIds: 240};
978
+
979
+ expect(frame.header).toStrictEqual(header);
980
+ expect(frame.payload).toStrictEqual(payload);
981
+ });
982
+
983
+ it("ZclFrame to buffer discover", () => {
984
+ const expected = Buffer.from([0, 8, 12, 0, 0, 240]);
985
+ const payload = {startAttrId: 0, maxAttrIds: 240};
986
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, false, undefined, 8, "discover", 0, payload, {});
987
+
988
+ expect(frame.toBuffer()).toStrictEqual(expected);
989
+ });
990
+
991
+ it("ZclFrame to buffer genScenes.add", () => {
992
+ const payload = {
993
+ groupid: 0,
994
+ sceneid: 3,
995
+ scenename: "",
996
+ transtime: 1,
997
+ extensionfieldsets: [
998
+ {clstId: 6, len: 1, extField: [1]},
999
+ {clstId: 768, len: 4, extField: [31260, 27110]},
1000
+ {clstId: 8, len: 1, extField: [254]},
1001
+ ],
1002
+ };
1003
+ const frame = Zcl.Frame.create(
1004
+ FrameType.SPECIFIC,
1005
+ Direction.CLIENT_TO_SERVER,
1006
+ false,
1007
+ undefined,
1008
+ 1,
1009
+ "add",
1010
+ Zcl.Clusters.genScenes.ID,
1011
+ payload,
1012
+ {},
1013
+ );
1014
+
1015
+ expect(frame.toBuffer()).toStrictEqual(Buffer.from([1, 1, 0, 0, 0, 3, 1, 0, 0, 6, 0, 1, 1, 0, 3, 4, 28, 122, 230, 105, 8, 0, 1, 254]));
1016
+ });
1017
+
1018
+ it("ZclFrame to buffer queryNextImageResponse with non zero status", () => {
1019
+ const expected = Buffer.from([9, 8, 2, 1]);
1020
+ const payload = {status: 1};
1021
+ const frame = Zcl.Frame.create(
1022
+ FrameType.SPECIFIC,
1023
+ Direction.SERVER_TO_CLIENT,
1024
+ false,
1025
+ undefined,
1026
+ 8,
1027
+ "queryNextImageResponse",
1028
+ 25,
1029
+ payload,
1030
+ {},
1031
+ );
1032
+
1033
+ expect(frame.toBuffer()).toStrictEqual(expected);
1034
+ });
1035
+
1036
+ it("ZclFrame to buffer queryNextImageResponse with zero status", () => {
1037
+ const expected = Buffer.from([9, 8, 2, 0, 1, 0, 3, 0, 5, 0, 0, 0, 6, 0, 0, 0]);
1038
+ const payload = {status: 0, manufacturerCode: 1, imageType: 3, fileVersion: 5, imageSize: 6};
1039
+ const frame = Zcl.Frame.create(
1040
+ FrameType.SPECIFIC,
1041
+ Direction.SERVER_TO_CLIENT,
1042
+ false,
1043
+ undefined,
1044
+ 8,
1045
+ "queryNextImageResponse",
1046
+ 25,
1047
+ payload,
1048
+ {},
1049
+ );
1050
+
1051
+ expect(frame.toBuffer()).toStrictEqual(expected);
1052
+ });
1053
+
1054
+ it("ZclFrame to buffer queryNextImageResponse with zero status and missing parameters", () => {
1055
+ const payload = {status: 0};
1056
+ const frame = Zcl.Frame.create(
1057
+ FrameType.SPECIFIC,
1058
+ Direction.SERVER_TO_CLIENT,
1059
+ false,
1060
+ undefined,
1061
+ 8,
1062
+ "queryNextImageResponse",
1063
+ 25,
1064
+ payload,
1065
+ {},
1066
+ );
1067
+
1068
+ let error;
1069
+ try {
1070
+ frame.toBuffer();
1071
+ } catch (e) {
1072
+ error = e;
1073
+ }
1074
+ expect(error).toStrictEqual(new Error(`Parameter 'manufacturerCode' is missing`));
1075
+ });
1076
+
1077
+ it("ZclFrame to buffer readRsp UTC", () => {
1078
+ const expected = Buffer.from([24, 74, 1, 0, 0, 0, 226, 234, 83, 218, 36]);
1079
+ const payload = [{attrId: 0, status: 0, attrData: 618288106, dataType: 226}];
1080
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 74, "readRsp", 0, payload, {});
1081
+
1082
+ expect(frame.toBuffer()).toStrictEqual(expected);
1083
+ });
1084
+
1085
+ it("ZclFrame to buffer write Livolo malformed", () => {
1086
+ // Created as example for https://github.com/Koenkk/zigbee-herdsman/issues/127
1087
+ const expectedOn = Buffer.from([0x1c, 0xd2, 0x1a, 0xe9, 0x02, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
1088
+ const payloadOn = [{attrId: 1, attrData: Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), dataType: 1}];
1089
+ const frameOn = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, 0x1ad2, 233, "write", 0, payloadOn, {});
1090
+ expect(frameOn.toBuffer()).toStrictEqual(expectedOn);
1091
+
1092
+ const expectedOff = Buffer.from([0x1c, 0xd2, 0x1a, 0xe9, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
1093
+ const payloadOff = [{attrId: 1, attrData: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), dataType: 1}];
1094
+ const frameOff = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, 0x1ad2, 233, "write", 0, payloadOff, {});
1095
+ expect(frameOff.toBuffer()).toStrictEqual(expectedOff);
1096
+ });
1097
+
1098
+ it("ZclFrame write request with string as bytes array", () => {
1099
+ const payload = [{attrId: 0x0401, attrData: [0x07, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x14], dataType: 0x42}];
1100
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, 0x115f, 15, "write", 0, payload, {});
1101
+
1102
+ const expected = [0x14, 0x5f, 0x11, 0x0f, 0x02, 0x01, 0x04, 0x42, 0x07, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x14];
1103
+ expect(Buffer.from(expected)).toStrictEqual(frame.toBuffer());
1104
+ });
1105
+
1106
+ it("ZclFrame write rsp", () => {
1107
+ const payload = [{status: 0x11, attrId: 0x22}];
1108
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, 0x115f, 15, "writeRsp", 0, payload, {});
1109
+ const buffer = frame.toBuffer();
1110
+
1111
+ const expected = [0x14, 0x5f, 0x11, 0x0f, 0x04, 0x11, 0x22, 0x00];
1112
+ expect(Buffer.from(expected)).toStrictEqual(buffer);
1113
+ });
1114
+
1115
+ //{ frameType: 0, manufSpec: 0, direction: 0, disDefaultRsp: 0 } 0 8 'discover' { startAttrId: 0, maxAttrIds: 240 }
1116
+ it("ZclFrame to buffer readRsp success", () => {
1117
+ const expected = Buffer.from([8, 1, 1, 1, 0, 0, 32, 3]);
1118
+ const payload = [{status: Zcl.Status.SUCCESS, attrId: 1, dataType: Zcl.DataType.UINT8, attrData: 3}];
1119
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, false, undefined, 1, 1, 0, payload, {});
1120
+
1121
+ expect(frame.toBuffer()).toStrictEqual(expected);
1122
+ });
1123
+
1124
+ it("ZclFrame to buffer defaultRsp success", () => {
1125
+ const expected = Buffer.from([0x18, 0x04, 0x0b, 0x0c, 0x82]);
1126
+ const payload = {cmdId: 12, statusCode: 130};
1127
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 4, 11, 0, payload, {});
1128
+
1129
+ expect(frame.toBuffer()).toStrictEqual(expected);
1130
+ });
1131
+
1132
+ it("ZclFrame to buffer readStructured single element", () => {
1133
+ const expected = Buffer.from([0x18, 0x02, 0x0e, 0x01, 0x00, 0x01, 0x02, 0x00]);
1134
+ const payload = [{attrId: 0x0001, selector: {indexes: [2]}}];
1135
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
1136
+
1137
+ expect(frame.toBuffer()).toStrictEqual(expected);
1138
+ });
1139
+
1140
+ it("ZclFrame to buffer readStructured multiple elements", () => {
1141
+ const expected = Buffer.from([
1142
+ 0x18, 0x02, 0x0e, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00,
1143
+ ]);
1144
+ const payload = [
1145
+ {attrId: 0x0002, selector: {indexes: [3, 4]}},
1146
+ {attrId: 0x0005, selector: {indexes: [6, 7, 8]}},
1147
+ ];
1148
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
1149
+
1150
+ expect(frame.toBuffer()).toStrictEqual(expected);
1151
+ });
1152
+
1153
+ it("ZclFrame to buffer readStructured whole attribute", () => {
1154
+ const expected = Buffer.from([0x18, 0x02, 0x0e, 0x09, 0x00, 0x00]);
1155
+ const payload = [{attrId: 0x0009, selector: {}}];
1156
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 2, 0x0e, Zcl.Clusters.genBasic.ID, payload, {});
1157
+
1158
+ expect(frame.toBuffer()).toStrictEqual(expected);
1159
+ });
1160
+
1161
+ it("ZclFrame from buffer readStructured single elements", () => {
1162
+ const buffer = Buffer.from([0x18, 0x02, 0x0e, 0x01, 0x00, 0x01, 0x02, 0x00]);
1163
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1164
+ const header = new Zcl.Header(
1165
+ {
1166
+ reservedBits: 0,
1167
+ direction: Direction.SERVER_TO_CLIENT,
1168
+ disableDefaultResponse: true,
1169
+ frameType: FrameType.GLOBAL,
1170
+ manufacturerSpecific: false,
1171
+ },
1172
+ undefined,
1173
+ 2,
1174
+ 0x0e,
1175
+ );
1176
+ const payload = [{attrId: 0x0001, selector: {indexes: [2]}}];
1177
+
1178
+ expect(frame.header).toStrictEqual(header);
1179
+ expect(frame.payload).toStrictEqual(payload);
1180
+ });
1181
+
1182
+ it("ZclFrame from buffer readStructured multiple elements", () => {
1183
+ const buffer = Buffer.from([
1184
+ 0x18, 0x02, 0x0e, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00,
1185
+ ]);
1186
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1187
+ const header = new Zcl.Header(
1188
+ {
1189
+ reservedBits: 0,
1190
+ direction: Direction.SERVER_TO_CLIENT,
1191
+ disableDefaultResponse: true,
1192
+ frameType: FrameType.GLOBAL,
1193
+ manufacturerSpecific: false,
1194
+ },
1195
+ undefined,
1196
+ 2,
1197
+ 0x0e,
1198
+ );
1199
+ const payload = [
1200
+ {attrId: 0x0002, selector: {indexes: [3, 4]}},
1201
+ {attrId: 0x0005, selector: {indexes: [6, 7, 8]}},
1202
+ ];
1203
+
1204
+ expect(frame.header).toStrictEqual(header);
1205
+ expect(frame.payload).toStrictEqual(payload);
1206
+ });
1207
+
1208
+ it("ZclFrame from buffer readStructured whole attribute", () => {
1209
+ const buffer = Buffer.from([0x18, 0x02, 0x0e, 0x09, 0x00, 0x00]);
1210
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1211
+ const header = new Zcl.Header(
1212
+ {
1213
+ reservedBits: 0,
1214
+ direction: Direction.SERVER_TO_CLIENT,
1215
+ disableDefaultResponse: true,
1216
+ frameType: FrameType.GLOBAL,
1217
+ manufacturerSpecific: false,
1218
+ },
1219
+ undefined,
1220
+ 2,
1221
+ 0x0e,
1222
+ );
1223
+ const payload = [{attrId: 0x0009, selector: {indicatorType: StructuredIndicatorType.Whole}}];
1224
+
1225
+ expect(frame.header).toStrictEqual(header);
1226
+ expect(frame.payload).toStrictEqual(payload);
1227
+ });
1228
+
1229
+ it("ZclFrame to buffer writeStructured single element", () => {
1230
+ const expected = Buffer.from([0x10, 0x02, 0x0f, 0x01, 0x00, 0x01, 0x02, 0x00, 0x20, 0x03]);
1231
+ const payload = [{attrId: 0x0001, selector: {indexes: [2]}, dataType: Zcl.DataType.UINT8, elementData: 3}];
1232
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
1233
+
1234
+ expect(frame.toBuffer()).toStrictEqual(expected);
1235
+ });
1236
+
1237
+ it("ZclFrame to buffer writeStructured multiple elements", () => {
1238
+ const expected = Buffer.from([
1239
+ 0x10, 0x02, 0x0f, 0x02, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x42, 0x03, 0x66, 0x6f, 0x6f, 0x05, 0x00, 0x03, 0x06, 0x00, 0x07, 0x00, 0x08,
1240
+ 0x00, 0x42, 0x03, 0x62, 0x61, 0x72,
1241
+ ]);
1242
+ const payload = [
1243
+ {attrId: 0x0002, selector: {indexes: [3, 4]}, dataType: Zcl.DataType.CHAR_STR, elementData: "foo"},
1244
+ {attrId: 0x0005, selector: {indexes: [6, 7, 8]}, dataType: Zcl.DataType.CHAR_STR, elementData: "bar"},
1245
+ ];
1246
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
1247
+
1248
+ expect(frame.toBuffer()).toStrictEqual(expected);
1249
+ });
1250
+
1251
+ it("ZclFrame to buffer writeStructured whole attribute", () => {
1252
+ const expected = Buffer.from([0x10, 0x02, 0x0f, 0x09, 0x00, 0x00, 0x48, 0x20, 0x03, 0x00, 0x0a, 0x0b, 0x0c]);
1253
+ const payload = [
1254
+ {attrId: 0x0009, selector: {}, dataType: Zcl.DataType.ARRAY, elementData: {elementType: Zcl.DataType.UINT8, elements: [10, 11, 12]}},
1255
+ ];
1256
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
1257
+
1258
+ expect(frame.toBuffer()).toStrictEqual(expected);
1259
+ });
1260
+
1261
+ it("ZclFrame to buffer writeStructured add element into set/bag", () => {
1262
+ const expected = Buffer.from([0x10, 0x02, 0x0f, 0x0d, 0x00, 0x10, 0x42, 0x03, 0x66, 0x6f, 0x6f]);
1263
+ const payload = [
1264
+ {attrId: 0x000d, selector: {indicatorType: StructuredIndicatorType.WriteAdd}, dataType: Zcl.DataType.CHAR_STR, elementData: "foo"},
1265
+ ];
1266
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
1267
+
1268
+ expect(frame.toBuffer()).toStrictEqual(expected);
1269
+ });
1270
+
1271
+ it("ZclFrame to buffer writeStructured remove element from set/bag", () => {
1272
+ const expected = Buffer.from([0x10, 0x02, 0x0f, 0x0e, 0x00, 0x20, 0x42, 0x03, 0x62, 0x61, 0x72]);
1273
+ const payload = [
1274
+ {attrId: 0x000e, selector: {indicatorType: StructuredIndicatorType.WriteRemove}, dataType: Zcl.DataType.CHAR_STR, elementData: "bar"},
1275
+ ];
1276
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.CLIENT_TO_SERVER, true, undefined, 2, 0x0f, Zcl.Clusters.genBasic.ID, payload, {});
1277
+
1278
+ expect(frame.toBuffer()).toStrictEqual(expected);
1279
+ });
1280
+
1281
+ it("ZclFrame to buffer writeStructured Livolo malformed", () => {
1282
+ const expected = Buffer.from([0x7c, 0xd2, 0x1a, 0xe9, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
1283
+ const payload = [{attrId: 0x0000, selector: null, elementData: [0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}];
1284
+ const frame = Zcl.Frame.create(
1285
+ FrameType.GLOBAL,
1286
+ Direction.SERVER_TO_CLIENT,
1287
+ true,
1288
+ 0x1ad2,
1289
+ 0xe9,
1290
+ 0x0f,
1291
+ Zcl.Clusters.genBasic.ID,
1292
+ payload,
1293
+ {},
1294
+ 3,
1295
+ );
1296
+
1297
+ expect(frame.toBuffer()).toStrictEqual(expected);
1298
+ });
1299
+
1300
+ it("ZclFrame to buffer writeStructuredRsp success", () => {
1301
+ const expected = Buffer.from([8, 1, 0x10, 0]);
1302
+ const payload = [{status: Zcl.Status.SUCCESS}];
1303
+ const frame = Zcl.Frame.create(
1304
+ FrameType.GLOBAL,
1305
+ Direction.SERVER_TO_CLIENT,
1306
+ false,
1307
+ undefined,
1308
+ 1,
1309
+ 0x10,
1310
+ Zcl.Clusters.genBasic.ID,
1311
+ payload,
1312
+ {},
1313
+ );
1314
+
1315
+ expect(frame.toBuffer()).toStrictEqual(expected);
1316
+ });
1317
+
1318
+ it("ZclFrame to buffer writeStructuredRsp failed selector unknown or none for type", () => {
1319
+ const expected = Buffer.from([8, 1, 0x10, 147, 1, 0, 0]);
1320
+ const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indicatorType: StructuredIndicatorType.Whole}}];
1321
+ const frame = Zcl.Frame.create(
1322
+ FrameType.GLOBAL,
1323
+ Direction.SERVER_TO_CLIENT,
1324
+ false,
1325
+ undefined,
1326
+ 1,
1327
+ 0x10,
1328
+ Zcl.Clusters.genBasic.ID,
1329
+ payload,
1330
+ {},
1331
+ );
1332
+
1333
+ expect(frame.toBuffer()).toStrictEqual(expected);
1334
+ });
1335
+
1336
+ it("ZclFrame to buffer writeStructuredRsp failed with selector", () => {
1337
+ const expected = Buffer.from([8, 1, 0x10, 147, 1, 0, 1, 254, 0]);
1338
+ const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indexes: [254]}}];
1339
+ const frame = Zcl.Frame.create(
1340
+ FrameType.GLOBAL,
1341
+ Direction.SERVER_TO_CLIENT,
1342
+ false,
1343
+ undefined,
1344
+ 1,
1345
+ 0x10,
1346
+ Zcl.Clusters.genBasic.ID,
1347
+ payload,
1348
+ {},
1349
+ );
1350
+
1351
+ expect(frame.toBuffer()).toStrictEqual(expected);
1352
+ });
1353
+
1354
+ it("ZclFrame to buffer writeStructuredRsp failed mixed selectors", () => {
1355
+ const expected = Buffer.from([8, 1, 0x10, 147, 16, 0, 0, 149, 14, 0, 2, 254, 0, 32, 0]);
1356
+ const payload = [
1357
+ {status: Zcl.Status.ACTION_DENIED, attrId: 16, selector: {indicatorType: StructuredIndicatorType.Whole}},
1358
+ {status: Zcl.Status.ABORT, attrId: 14, selector: {indexes: [254, 32]}},
1359
+ ];
1360
+ const frame = Zcl.Frame.create(
1361
+ FrameType.GLOBAL,
1362
+ Direction.SERVER_TO_CLIENT,
1363
+ false,
1364
+ undefined,
1365
+ 1,
1366
+ 0x10,
1367
+ Zcl.Clusters.genBasic.ID,
1368
+ payload,
1369
+ {},
1370
+ );
1371
+
1372
+ expect(frame.toBuffer()).toStrictEqual(expected);
1373
+ });
1374
+
1375
+ it("ZclFrame from buffer writeStructuredRsp success", () => {
1376
+ const buffer = Buffer.from([8, 1, 0x10, 0]);
1377
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1378
+ const header = new Zcl.Header(
1379
+ {
1380
+ reservedBits: 0,
1381
+ direction: Direction.SERVER_TO_CLIENT,
1382
+ disableDefaultResponse: false,
1383
+ frameType: FrameType.GLOBAL,
1384
+ manufacturerSpecific: false,
1385
+ },
1386
+ undefined,
1387
+ 1,
1388
+ 0x10,
1389
+ );
1390
+ const payload = [{status: Zcl.Status.SUCCESS}];
1391
+
1392
+ expect(frame.header).toStrictEqual(header);
1393
+ expect(frame.payload).toStrictEqual(payload);
1394
+ });
1395
+
1396
+ it("ZclFrame from buffer writeStructuredRsp failed selector unknown or none for type", () => {
1397
+ const buffer = Buffer.from([8, 1, 0x10, 147, 1, 0, 0]);
1398
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1399
+ const header = new Zcl.Header(
1400
+ {
1401
+ reservedBits: 0,
1402
+ direction: Direction.SERVER_TO_CLIENT,
1403
+ disableDefaultResponse: false,
1404
+ frameType: FrameType.GLOBAL,
1405
+ manufacturerSpecific: false,
1406
+ },
1407
+ undefined,
1408
+ 1,
1409
+ 0x10,
1410
+ );
1411
+ const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indicatorType: StructuredIndicatorType.Whole}}];
1412
+
1413
+ expect(frame.header).toStrictEqual(header);
1414
+ expect(frame.payload).toStrictEqual(payload);
1415
+ });
1416
+
1417
+ it("ZclFrame from buffer writeStructuredRsp failed with selector", () => {
1418
+ const buffer = Buffer.from([8, 1, 0x10, 147, 1, 0, 1, 254, 0]);
1419
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1420
+ const header = new Zcl.Header(
1421
+ {
1422
+ reservedBits: 0,
1423
+ direction: Direction.SERVER_TO_CLIENT,
1424
+ disableDefaultResponse: false,
1425
+ frameType: FrameType.GLOBAL,
1426
+ manufacturerSpecific: false,
1427
+ },
1428
+ undefined,
1429
+ 1,
1430
+ 0x10,
1431
+ );
1432
+ const payload = [{status: Zcl.Status.ACTION_DENIED, attrId: 1, selector: {indexes: [254]}}];
1433
+
1434
+ expect(frame.header).toStrictEqual(header);
1435
+ expect(frame.payload).toStrictEqual(payload);
1436
+ });
1437
+
1438
+ it("ZclFrame from buffer writeStructuredRsp failed mixed selectors", () => {
1439
+ const buffer = Buffer.from([8, 1, 0x10, 147, 16, 0, 0, 149, 14, 0, 2, 254, 0, 32, 0]);
1440
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.genBasic.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1441
+ const header = new Zcl.Header(
1442
+ {
1443
+ reservedBits: 0,
1444
+ direction: Direction.SERVER_TO_CLIENT,
1445
+ disableDefaultResponse: false,
1446
+ frameType: FrameType.GLOBAL,
1447
+ manufacturerSpecific: false,
1448
+ },
1449
+ undefined,
1450
+ 1,
1451
+ 0x10,
1452
+ );
1453
+ const payload = [
1454
+ {status: Zcl.Status.ACTION_DENIED, attrId: 16, selector: {indicatorType: StructuredIndicatorType.Whole}},
1455
+ {status: Zcl.Status.ABORT, attrId: 14, selector: {indexes: [254, 32]}},
1456
+ ];
1457
+
1458
+ expect(frame.header).toStrictEqual(header);
1459
+ expect(frame.payload).toStrictEqual(payload);
1460
+ });
1461
+
1462
+ it("ZclFrame from buffer ssIasAce arm command", () => {
1463
+ const buffer = Buffer.from([1, 87, 0, 0, 6, 49, 50, 51, 52, 53, 54, 0]);
1464
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.ssIasAce.ID, Zcl.Header.fromBuffer(buffer)!, buffer, {});
1465
+ const header = new Zcl.Header(
1466
+ {
1467
+ reservedBits: 0,
1468
+ direction: 0,
1469
+ disableDefaultResponse: false,
1470
+ frameType: 1,
1471
+ manufacturerSpecific: false,
1472
+ },
1473
+ undefined,
1474
+ 87,
1475
+ 0,
1476
+ );
1477
+
1478
+ const payload = {
1479
+ armmode: 0,
1480
+ code: "123456",
1481
+ zoneid: 0,
1482
+ };
1483
+
1484
+ expect(frame.header).toStrictEqual(header);
1485
+ expect(frame.payload).toStrictEqual(payload);
1486
+ expect(frame.header.isGlobal).toBe(false);
1487
+ expect(frame.header.isSpecific).toBe(true);
1488
+ expect(frame.isCluster("ssIasAce")).toBe(true);
1489
+ expect(frame.isCommand("arm")).toBe(true);
1490
+ });
1491
+
1492
+ it("ZclFrame to buffer discoverRsp", () => {
1493
+ const expected = Buffer.from([24, 23, 13, 0, 32, 0, 32, 33, 0, 32, 49, 0, 48, 51, 0, 32, 53, 0, 24]);
1494
+ const payload = {
1495
+ discComplete: 0,
1496
+ attrInfos: [
1497
+ {attrId: 32, dataType: 32},
1498
+ {attrId: 33, dataType: 32},
1499
+ {attrId: 49, dataType: 48},
1500
+ {attrId: 51, dataType: 32},
1501
+ {attrId: 53, dataType: 24},
1502
+ ],
1503
+ };
1504
+
1505
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, true, undefined, 23, 13, 0, payload, {});
1506
+
1507
+ expect(frame.toBuffer()).toStrictEqual(expected);
1508
+ });
1509
+
1510
+ it("ZclFrame to buffer tradfriArrowSingle", () => {
1511
+ const expected = Buffer.from([0x05, 0x7c, 0x11, 0x1d, 0x07, 0x00, 0x01, 0x0d, 0x00]);
1512
+ const payload = {value: 256, value2: 13};
1513
+
1514
+ const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.CLIENT_TO_SERVER, false, 4476, 29, 7, 5, payload, {});
1515
+
1516
+ expect(frame.toBuffer()).toStrictEqual(expected);
1517
+ });
1518
+
1519
+ it("ZclFrame to buffer readRsp failed", () => {
1520
+ const expected = Buffer.from([8, 1, 1, 1, 0, 2]);
1521
+ const payload = [{status: 2, attrId: 1}];
1522
+
1523
+ const frame = Zcl.Frame.create(FrameType.GLOBAL, Direction.SERVER_TO_CLIENT, false, undefined, 1, 1, 0, payload, {});
1524
+
1525
+ expect(frame.toBuffer()).toStrictEqual(expected);
1526
+ });
1527
+
1528
+ it("ZclFrame to buffer offWithEffect", () => {
1529
+ const expected = Buffer.from([0x1, 1, 64, 1, 0]);
1530
+ const payload = {effectid: 1, effectvariant: 0};
1531
+
1532
+ const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.CLIENT_TO_SERVER, false, undefined, 1, 64, 6, payload, {});
1533
+
1534
+ expect(frame.toBuffer()).toStrictEqual(expected);
1535
+ });
1536
+
1537
+ it("ZclFrame to buffer offWithEffect", () => {
1538
+ const expected = Buffer.from([9, 9, 0, 1]);
1539
+
1540
+ const frame = Zcl.Frame.create(FrameType.SPECIFIC, Direction.SERVER_TO_CLIENT, false, undefined, 9, "restartDeviceRsp", 21, {status: 1}, {});
1541
+
1542
+ expect(frame.toBuffer()).toStrictEqual(expected);
1543
+ });
1544
+
1545
+ it("ZclFrame to buffer invalid frametype", () => {
1546
+ expect(() => {
1547
+ Zcl.Frame.create(
1548
+ // @ts-expect-error invalid on purpose
1549
+ 3,
1550
+ Direction.CLIENT_TO_SERVER,
1551
+ false,
1552
+ undefined,
1553
+ 1,
1554
+ 64,
1555
+ 6,
1556
+ {},
1557
+ {},
1558
+ ).toBuffer();
1559
+ }).toThrow("Frametype '3' not valid");
1560
+ });
1561
+
1562
+ it("BuffaloZcl read array", () => {
1563
+ const buffer = Buffer.from([32, 3, 0, 1, 2, 3]);
1564
+ const buffalo = new BuffaloZcl(buffer);
1565
+ const value = buffalo.read(DataType.ARRAY, {});
1566
+ expect(buffalo.getPosition()).toBe(6);
1567
+ expect(value).toStrictEqual([1, 2, 3]);
1568
+ });
1569
+
1570
+ it("BuffaloZcl read struct", () => {
1571
+ const buffer = Buffer.from([0, 2, 0, 32, 8, 33, 4, 0]);
1572
+ const buffalo = new BuffaloZcl(buffer, 1);
1573
+ const value = buffalo.read(DataType.STRUCT, {});
1574
+ expect(buffalo.getPosition()).toBe(8);
1575
+ expect(value).toStrictEqual([
1576
+ {elmType: 32, elmVal: 8},
1577
+ {elmType: 33, elmVal: 4},
1578
+ ]);
1579
+ });
1580
+
1581
+ it("BuffaloZcl read longCharStr", () => {
1582
+ const buffer = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
1583
+ const buffalo = new BuffaloZcl(buffer);
1584
+ const value = buffalo.read(DataType.LONG_CHAR_STR, {});
1585
+ expect(buffalo.getPosition()).toBe(7);
1586
+ expect(value).toStrictEqual("hello");
1587
+ });
1588
+
1589
+ it("BuffaloZcl read longOctetStr", () => {
1590
+ const buffer = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
1591
+ const buffalo = new BuffaloZcl(buffer);
1592
+ const value = buffalo.read(DataType.LONG_OCTET_STR, {});
1593
+ expect(buffalo.getPosition()).toBe(7);
1594
+ expect(value).toStrictEqual(buffer.subarray(2));
1595
+ });
1596
+
1597
+ it("BuffaloZcl read extensionFieldSets", () => {
1598
+ const buffer = Buffer.from([0, 3, 8, 1, 0, 2, 0, 3, 0, 4, 5]);
1599
+ const buffalo = new BuffaloZcl(buffer);
1600
+ const value = buffalo.read(BuffaloZclDataType.EXTENSION_FIELD_SETS, {});
1601
+ expect(buffalo.getPosition()).toBe(11);
1602
+ expect(value).toStrictEqual([{clstId: 768, len: 8, extField: [1, 2, 3, 4, 5]}]);
1603
+ });
1604
+
1605
+ it("BuffaloZcl read list zoneinfo", () => {
1606
+ const buffer = Buffer.from([1, 5, 0, 2, 6, 0]);
1607
+ const buffalo = new BuffaloZcl(buffer);
1608
+ const value = buffalo.read(BuffaloZclDataType.LIST_ZONEINFO, {length: 2});
1609
+ expect(buffalo.getPosition()).toBe(6);
1610
+ expect(value).toStrictEqual([
1611
+ {zoneID: 1, zoneStatus: 5},
1612
+ {zoneID: 2, zoneStatus: 6},
1613
+ ]);
1614
+ });
1615
+
1616
+ it.each([DataType.UINT40, DataType.DATA40, DataType.BITMAP40])("BuffaloZcl read uint40, data40, bitmap40", (type) => {
1617
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7]);
1618
+ const buffalo = new BuffaloZcl(buffer);
1619
+ const value = buffalo.read(type, {});
1620
+ expect(buffalo.getPosition()).toBe(5);
1621
+ expect(value).toStrictEqual(25853953281);
1622
+ });
1623
+
1624
+ it.each([DataType.UINT48, DataType.DATA48, DataType.BITMAP48])("BuffaloZcl read uint48, data48, bitmap48", (type) => {
1625
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7]);
1626
+ const buffalo = new BuffaloZcl(buffer);
1627
+ const value = buffalo.read(type, {});
1628
+ expect(buffalo.getPosition()).toBe(6);
1629
+ expect(value).toStrictEqual(7722435347713);
1630
+ });
1631
+
1632
+ it.each([DataType.UINT56, DataType.DATA56, DataType.BITMAP56])("BuffaloZcl read uint56, data56, bitmap56", (type) => {
1633
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
1634
+ const buffalo = new BuffaloZcl(buffer);
1635
+ const value = buffalo.read(type, {});
1636
+ expect(buffalo.getPosition()).toBe(7);
1637
+ expect(value).toStrictEqual(1978047272322305n);
1638
+ });
1639
+
1640
+ it.each([DataType.UINT64, DataType.DATA64, DataType.BITMAP64])("BuffaloZcl read uint64, data64, bitmap64", (type) => {
1641
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
1642
+ const buffalo = new BuffaloZcl(buffer);
1643
+ const value = buffalo.read(type, {});
1644
+ expect(buffalo.getPosition()).toBe(8);
1645
+ expect(value).toStrictEqual(0x0907070605040501n);
1646
+ });
1647
+
1648
+ it("BuffaloZcl read int40", () => {
1649
+ const buffer = Buffer.from([254, 255, 255, 255, 127]);
1650
+ const buffalo = new BuffaloZcl(buffer);
1651
+ const value = buffalo.read(DataType.INT40, {});
1652
+ expect(buffalo.getPosition()).toBe(5);
1653
+ expect(value).toStrictEqual(549755813886);
1654
+ });
1655
+
1656
+ it("BuffaloZcl read int56", () => {
1657
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
1658
+ const buffalo = new BuffaloZcl(buffer);
1659
+ const value = buffalo.read(DataType.INT56, {});
1660
+ expect(buffalo.getPosition()).toBe(7);
1661
+ expect(value).toStrictEqual(1978047272322305n);
1662
+ });
1663
+
1664
+ it("BuffaloZcl read int64", () => {
1665
+ const buffer = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
1666
+ const buffalo = new BuffaloZcl(buffer);
1667
+ const value = buffalo.read(DataType.INT64, {});
1668
+ expect(buffalo.getPosition()).toBe(8);
1669
+ expect(value).toStrictEqual(650496393613673729n);
1670
+ });
1671
+
1672
+ it.each([
1673
+ ["no data point", Buffer.from([]), []],
1674
+ ["single data point", Buffer.from([1, 4, 0, 1, 1]), [{dp: 1, datatype: 4, data: Buffer.from([1])}]],
1675
+ [
1676
+ "two data points",
1677
+ Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0, 90]),
1678
+ [
1679
+ {dp: 1, datatype: 4, data: Buffer.from([1])},
1680
+ {dp: 4, datatype: 2, data: Buffer.from([0, 0, 0, 90])},
1681
+ ],
1682
+ ],
1683
+ ["incomplete data point is ignored", Buffer.from([1, 4, 0, 1, 1, 4]), [{dp: 1, datatype: 4, data: Buffer.from([1])}]],
1684
+ [
1685
+ "incomplete data buffer",
1686
+ Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0]),
1687
+ [
1688
+ {dp: 1, datatype: 4, data: Buffer.from([1])},
1689
+ {dp: 4, datatype: 2, data: Buffer.from([0, 0, 0])},
1690
+ ],
1691
+ ],
1692
+ ])("BuffaloZcl read readListTuyaDataPointValues %s", (_name, buffer, payload) => {
1693
+ const buffalo = new BuffaloZcl(buffer);
1694
+ const value = buffalo.read(BuffaloZclDataType.LIST_TUYA_DATAPOINT_VALUES, {});
1695
+ expect(buffalo.isMore()).not.toBeTruthy();
1696
+ expect(value).toStrictEqual(payload);
1697
+ });
1698
+
1699
+ it("BuffaloZcl write charStr", () => {
1700
+ const payload = "hello";
1701
+ const buffer = Buffer.alloc(7);
1702
+ const expected = Buffer.from([5, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0]);
1703
+ const buffalo = new BuffaloZcl(buffer);
1704
+ buffalo.write(DataType.CHAR_STR, payload, {});
1705
+ expect(buffalo.getPosition()).toBe(6);
1706
+ expect(buffer).toStrictEqual(expected);
1707
+ });
1708
+
1709
+ it("BuffaloZcl write longCharStr", () => {
1710
+ const payload = "hello";
1711
+ const buffer = Buffer.alloc(7);
1712
+ const expected = Buffer.from([5, 0, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
1713
+ const buffalo = new BuffaloZcl(buffer);
1714
+ buffalo.write(DataType.LONG_CHAR_STR, payload, {});
1715
+ expect(buffalo.getPosition()).toBe(7);
1716
+ expect(buffer).toStrictEqual(expected);
1717
+ });
1718
+
1719
+ it("BuffaloZcl write octetStr", () => {
1720
+ const payload = [1, 2, 4];
1721
+ const buffer = Buffer.alloc(5);
1722
+ const expected = Buffer.from([3, 1, 2, 4, 0]);
1723
+ const buffalo = new BuffaloZcl(buffer);
1724
+ buffalo.write(DataType.OCTET_STR, payload, {});
1725
+ expect(buffalo.getPosition()).toBe(4);
1726
+ expect(buffer).toStrictEqual(expected);
1727
+ });
1728
+
1729
+ it("BuffaloZcl write longOctetStr", () => {
1730
+ const payload = [1, 2, 3, 4, 5];
1731
+ const buffer = Buffer.alloc(7);
1732
+ const expected = Buffer.from([5, 0, 1, 2, 3, 4, 5]);
1733
+ const buffalo = new BuffaloZcl(buffer);
1734
+ buffalo.write(DataType.LONG_OCTET_STR, payload, {});
1735
+ expect(buffalo.getPosition()).toBe(7);
1736
+ expect(buffer).toStrictEqual(expected);
1737
+ });
1738
+
1739
+ it("BuffaloZcl write extensionFieldSets", () => {
1740
+ const payload = [{clstId: 768, len: 8, extField: [1, 2, 3, 4, 5]}];
1741
+ const buffer = Buffer.alloc(12);
1742
+ const expected = Buffer.from([0, 3, 8, 1, 0, 2, 0, 3, 0, 4, 5, 0]);
1743
+ const buffalo = new BuffaloZcl(buffer);
1744
+ buffalo.write(BuffaloZclDataType.EXTENSION_FIELD_SETS, payload, {});
1745
+ expect(buffalo.getPosition()).toBe(11);
1746
+ expect(buffer).toStrictEqual(expected);
1747
+ });
1748
+
1749
+ it("BuffaloZcl write zoneinfo", () => {
1750
+ const payload = [
1751
+ {zoneID: 1, zoneStatus: 5},
1752
+ {zoneID: 2, zoneStatus: 6},
1753
+ ];
1754
+ const buffer = Buffer.alloc(6);
1755
+ const expected = Buffer.from([1, 5, 0, 2, 6, 0]);
1756
+ const buffalo = new BuffaloZcl(buffer);
1757
+ buffalo.write(BuffaloZclDataType.LIST_ZONEINFO, payload, {});
1758
+ expect(buffalo.getPosition()).toBe(6);
1759
+ expect(buffer).toStrictEqual(expected);
1760
+ });
1761
+
1762
+ it.each([DataType.UINT40, DataType.DATA40, DataType.BITMAP40])("BuffaloZcl write uint40, data40, bitmap40", (type) => {
1763
+ const payload = 1099511627773;
1764
+ const buffer = Buffer.alloc(5);
1765
+ const expected = Buffer.from([253, 255, 255, 255, 255]);
1766
+ const buffalo = new BuffaloZcl(buffer);
1767
+ buffalo.write(type, payload, {});
1768
+ expect(buffalo.getPosition()).toBe(5);
1769
+ expect(buffer).toStrictEqual(expected);
1770
+ });
1771
+
1772
+ it.each([DataType.UINT48, DataType.DATA48, DataType.BITMAP48])("BuffaloZcl write uint48, data48, bitmap48", (type) => {
1773
+ const payload = 281474976710653;
1774
+ const buffer = Buffer.alloc(6);
1775
+ const expected = Buffer.from([253, 255, 255, 255, 255, 255]);
1776
+ const buffalo = new BuffaloZcl(buffer);
1777
+ buffalo.write(type, payload, {});
1778
+ expect(buffalo.getPosition()).toBe(6);
1779
+ expect(buffer).toStrictEqual(expected);
1780
+ });
1781
+
1782
+ it.each([DataType.UINT56, DataType.DATA56, DataType.BITMAP56])("BuffaloZcl write uint56, data56, bitmap56", (type) => {
1783
+ const payload = 1978047272322305n;
1784
+ const buffer = Buffer.alloc(7);
1785
+ const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
1786
+ const buffalo = new BuffaloZcl(buffer);
1787
+ buffalo.write(type, payload, {});
1788
+ expect(buffalo.getPosition()).toBe(7);
1789
+ expect(buffer).toStrictEqual(expected);
1790
+ });
1791
+
1792
+ it.each([DataType.UINT64, DataType.DATA64, DataType.BITMAP64])("BuffaloZcl write uint64, data64, bitmap64", (type) => {
1793
+ const payload = 0x0907070605040501n;
1794
+ const buffer = Buffer.alloc(8);
1795
+ const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
1796
+ const buffalo = new BuffaloZcl(buffer);
1797
+ buffalo.write(type, payload, {});
1798
+ expect(buffalo.getPosition()).toBe(8);
1799
+ expect(buffer).toStrictEqual(expected);
1800
+ });
1801
+
1802
+ it("BuffaloZcl write int40", () => {
1803
+ const payload = 549755813886;
1804
+ const buffer = Buffer.alloc(5);
1805
+ const expected = Buffer.from([254, 255, 255, 255, 127]);
1806
+ const buffalo = new BuffaloZcl(buffer);
1807
+ buffalo.write(DataType.INT40, payload, {});
1808
+ expect(buffalo.getPosition()).toBe(5);
1809
+ expect(buffer).toStrictEqual(expected);
1810
+ });
1811
+
1812
+ it("BuffaloZcl write int56", () => {
1813
+ const payload = 1978047272322305n;
1814
+ const buffer = Buffer.alloc(7);
1815
+ const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7]);
1816
+ const buffalo = new BuffaloZcl(buffer);
1817
+ buffalo.write(DataType.INT56, payload, {});
1818
+ expect(buffalo.getPosition()).toBe(7);
1819
+ expect(buffer).toStrictEqual(expected);
1820
+ });
1821
+
1822
+ it("BuffaloZcl write int64", () => {
1823
+ const payload = 650496393613673729n;
1824
+ const buffer = Buffer.alloc(8);
1825
+ const expected = Buffer.from([1, 5, 4, 5, 6, 7, 7, 9]);
1826
+ const buffalo = new BuffaloZcl(buffer);
1827
+ buffalo.write(DataType.INT64, payload, {});
1828
+ expect(buffalo.getPosition()).toBe(8);
1829
+ expect(buffer).toStrictEqual(expected);
1830
+ });
1831
+
1832
+ it("BuffaloZcl write array element type string", () => {
1833
+ const payload = {
1834
+ elementType: Zcl.DataType.OCTET_STR,
1835
+ elements: [
1836
+ [0, 13, 1, 6, 0, 2],
1837
+ [1, 13, 2, 6, 0, 2],
1838
+ [2, 13, 3, 6, 0, 2],
1839
+ [3, 13, 4, 6, 0, 2],
1840
+ ],
1841
+ };
1842
+ const expected = Buffer.from([0x41, 0x04, 0x00, 6, 0, 13, 1, 6, 0, 2, 6, 1, 13, 2, 6, 0, 2, 6, 2, 13, 3, 6, 0, 2, 6, 3, 13, 4, 6, 0, 2]);
1843
+ const buffer = Buffer.alloc(expected.length);
1844
+ const buffalo = new BuffaloZcl(buffer);
1845
+ buffalo.write(DataType.ARRAY, payload, {});
1846
+ expect(buffalo.getPosition()).toBe(expected.length);
1847
+ expect(buffer).toStrictEqual(expected);
1848
+ });
1849
+
1850
+ it("BuffaloZcl write array element type numeric", () => {
1851
+ const payload = {elementType: Zcl.DataType.DATA8, elements: [0, 0, 0, 0]};
1852
+ const expected = Buffer.from([0x08, 0x04, 0x00, 0, 0, 0, 0]);
1853
+ const buffer = Buffer.alloc(expected.length);
1854
+ const buffalo = new BuffaloZcl(buffer);
1855
+ buffalo.write(DataType.ARRAY, payload, {});
1856
+ expect(buffalo.getPosition()).toBe(expected.length);
1857
+ expect(buffer).toStrictEqual(expected);
1858
+ });
1859
+
1860
+ it("BuffaloZcl write array element type numeric passed as string of DataType", () => {
1861
+ const payload = {elementType: "DATA8", elements: [0, 0, 0, 0]};
1862
+ const expected = Buffer.from([0x08, 0x04, 0x00, 0, 0, 0, 0]);
1863
+ const buffer = Buffer.alloc(expected.length);
1864
+ const buffalo = new BuffaloZcl(buffer);
1865
+ buffalo.write(DataType.ARRAY, payload, {});
1866
+ expect(buffalo.getPosition()).toBe(expected.length);
1867
+ expect(buffer).toStrictEqual(expected);
1868
+ });
1869
+
1870
+ it("BuffaloZcl write struct", () => {
1871
+ const payload = [
1872
+ {elmType: Zcl.DataType.UINT8, elmVal: 3},
1873
+ {elmType: Zcl.DataType.CHAR_STR, elmVal: "a"},
1874
+ ];
1875
+ const expected = Buffer.from([2, 0, Zcl.DataType.UINT8, 3, Zcl.DataType.CHAR_STR, 1, 0x61]);
1876
+ const buffer = Buffer.alloc(expected.length);
1877
+ const buffalo = new BuffaloZcl(buffer);
1878
+ buffalo.write(DataType.STRUCT, payload, {});
1879
+ expect(buffalo.getPosition()).toBe(expected.length);
1880
+ expect(buffer).toStrictEqual(expected);
1881
+ });
1882
+
1883
+ it("BuffaloZcl write security key", () => {
1884
+ const payload = [0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01, 0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01];
1885
+ const buffer = Buffer.alloc(16);
1886
+ const expected = Buffer.from([0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01, 0x09, 0x07, 0x07, 0x06, 0x05, 0x04, 0x05, 0x01]);
1887
+ const buffalo = new BuffaloZcl(buffer);
1888
+ buffalo.write(DataType.SEC_KEY, payload, {});
1889
+ expect(buffalo.getPosition()).toBe(16);
1890
+ expect(buffer).toStrictEqual(expected);
1891
+ });
1892
+
1893
+ it.each([
1894
+ ["no data point", [], Buffer.from([])],
1895
+ ["single data point", [{dp: 1, datatype: 4, data: Buffer.from([1])}], Buffer.from([1, 4, 0, 1, 1])],
1896
+ [
1897
+ "two data points",
1898
+ [
1899
+ {dp: 1, datatype: 4, data: Buffer.from([1])},
1900
+ {dp: 4, datatype: 2, data: Buffer.from([0, 0, 0, 90])},
1901
+ ],
1902
+ Buffer.from([1, 4, 0, 1, 1, 4, 2, 0, 4, 0, 0, 0, 90]),
1903
+ ],
1904
+ ])("BuffaloZcl writeListTuyaDataPointValues %s", (_name, payload, expected) => {
1905
+ const buffer = Buffer.alloc(expected.length);
1906
+ const buffalo = new BuffaloZcl(buffer);
1907
+ buffalo.write(BuffaloZclDataType.LIST_TUYA_DATAPOINT_VALUES, payload, {});
1908
+ expect(buffalo.getPosition()).toBe(expected.length);
1909
+ expect(buffer).toStrictEqual(expected);
1910
+ });
1911
+
1912
+ it("Zcl utils get cluster without manufacturerCode", () => {
1913
+ const cluster = Zcl.Utils.getCluster(0xfc00, undefined, {});
1914
+ expect(cluster.ID).toBe(0xfc00);
1915
+ expect(cluster.name).toBe("manuSpecificAssaDoorLock");
1916
+ });
1917
+
1918
+ it("Zcl utils get cluster with manufacturerCode", () => {
1919
+ const cluster = Zcl.Utils.getCluster(0xfc00, 0x100b, {});
1920
+ expect(cluster.ID).toBe(0xfc00);
1921
+ expect(cluster.name).toBe("manuSpecificPhilips");
1922
+ });
1923
+
1924
+ it("Zcl utils get cluster manufacturerCode", () => {
1925
+ const cluster = Zcl.Utils.getCluster(0xfc00, 0x10f2, {});
1926
+ expect(cluster.ID).toBe(0xfc00);
1927
+ expect(cluster.name).toBe("manuSpecificAssaDoorLock");
1928
+ });
1929
+
1930
+ it("Zcl utils get cluster manufacturerCode wrong", () => {
1931
+ const cluster = Zcl.Utils.getCluster(0xfc00, 123, {});
1932
+ expect(cluster.ID).toBe(0xfc00);
1933
+ expect(cluster.name).toBe("manuSpecificAssaDoorLock");
1934
+ });
1935
+
1936
+ it("Zcl utils get cluster attributes manufacturerCode", () => {
1937
+ const cluster = Zcl.Utils.getCluster("closuresWindowCovering", 0x1021, {});
1938
+ const attribute = cluster.getAttribute(0xf004);
1939
+ expect(attribute).toStrictEqual(expect.objectContaining({ID: 0xf004, manufacturerCode: 0x1021, name: "stepPositionTilt", type: 48}));
1940
+ });
1941
+
1942
+ it("Zcl utils get cluster attributes manufacturerCode wrong", () => {
1943
+ const cluster = Zcl.Utils.getCluster("closuresWindowCovering", 123, {});
1944
+ expect(cluster.getAttribute(0x1000)).toBeUndefined();
1945
+ });
1946
+
1947
+ it("Zcl utils get command", () => {
1948
+ const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
1949
+ const command = cluster.getCommand(0);
1950
+ expect(command.name).toStrictEqual("off");
1951
+ expect(cluster.getCommand("off")).toStrictEqual(command);
1952
+ });
1953
+
1954
+ it("Zcl utils get attribute", () => {
1955
+ const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
1956
+ const attribute = cluster.getAttribute(16385);
1957
+ expect(attribute?.name).toStrictEqual("onTime");
1958
+ expect(cluster.getAttribute("onTime")).toStrictEqual(attribute);
1959
+ });
1960
+
1961
+ it("Zcl utils get attribute non-existing", () => {
1962
+ const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
1963
+ expect(cluster.getAttribute("notExisting")).toBeUndefined();
1964
+ });
1965
+
1966
+ it("Zcl utils get command non-existing", () => {
1967
+ const cluster = Zcl.Utils.getCluster("genOnOff", undefined, {});
1968
+ expect(() => cluster.getCommand("notExisting")).toThrow("Cluster 'genOnOff' has no command 'notExisting'");
1969
+ });
1970
+
1971
+ it("Zcl green power readGpd commissioning", () => {
1972
+ const buffer = [
1973
+ 0xff, // device
1974
+ 0x00, // options
1975
+ ];
1976
+ const frame = new BuffaloZcl(Buffer.from(buffer));
1977
+
1978
+ expect(
1979
+ frame.read(BuffaloZclDataType.GPD_FRAME, {
1980
+ payload: {
1981
+ payloadSize: buffer.length,
1982
+ commandID: 0xe0,
1983
+ },
1984
+ }),
1985
+ ).toStrictEqual({
1986
+ deviceID: 0xff,
1987
+ options: 0x00,
1988
+ extendedOptions: 0x00,
1989
+ securityKey: Buffer.alloc(16),
1990
+ keyMic: 0,
1991
+ outgoingCounter: 0,
1992
+ manufacturerID: 0,
1993
+ modelID: 0,
1994
+ numGpdCommands: 0,
1995
+ gpdCommandIdList: Buffer.alloc(0),
1996
+ numServerClusters: 0,
1997
+ numClientClusters: 0,
1998
+ gpdServerClusters: Buffer.alloc(0),
1999
+ gpdClientClusters: Buffer.alloc(0),
2000
+ applicationInfo: 0x00,
2001
+ genericSwitchConfig: 0,
2002
+ currentContactStatus: 0,
2003
+ });
2004
+ });
2005
+
2006
+ it("Zcl green power readGpd commissioning all options", () => {
2007
+ const buffer = [
2008
+ 0xff, // device
2009
+ 0x80 | 0x04, // options
2010
+ 0x20 | 0x40 | 0x80, // extended options
2011
+ 0,
2012
+ 0,
2013
+ 0,
2014
+ 0,
2015
+ 0,
2016
+ 0,
2017
+ 0,
2018
+ 0,
2019
+ 0,
2020
+ 0,
2021
+ 0,
2022
+ 0,
2023
+ 0,
2024
+ 0,
2025
+ 0,
2026
+ 0, // security key
2027
+ 0,
2028
+ 0,
2029
+ 0,
2030
+ 0, // key mic
2031
+ 0,
2032
+ 0,
2033
+ 0,
2034
+ 0, // outgoing counter
2035
+ 0x01 | 0x02 | 0x04 | 0x08 | 0x10, // application info
2036
+ 0,
2037
+ 0, // manufacturer ID
2038
+ 0,
2039
+ 0, // model ID
2040
+ 0, // num GPD commands + commands
2041
+ 0, // clusters
2042
+ 2, // switch info length
2043
+ 0, // generic switch config
2044
+ 1, // current contact status
2045
+ ];
2046
+ const frame = new BuffaloZcl(Buffer.from(buffer));
2047
+
2048
+ expect(
2049
+ frame.read(BuffaloZclDataType.GPD_FRAME, {
2050
+ payload: {
2051
+ payloadSize: buffer.length,
2052
+ commandID: 0xe0,
2053
+ },
2054
+ }),
2055
+ ).toStrictEqual({
2056
+ deviceID: 0xff,
2057
+ options: 0x80 | 0x04,
2058
+ extendedOptions: 0x20 | 0x40 | 0x80,
2059
+ securityKey: Buffer.alloc(16),
2060
+ keyMic: 0,
2061
+ outgoingCounter: 0,
2062
+ manufacturerID: 0,
2063
+ modelID: 0,
2064
+ numGpdCommands: 0,
2065
+ gpdCommandIdList: Buffer.alloc(0),
2066
+ numServerClusters: 0,
2067
+ numClientClusters: 0,
2068
+ gpdServerClusters: Buffer.alloc(0),
2069
+ gpdClientClusters: Buffer.alloc(0),
2070
+ applicationInfo: 0x01 | 0x02 | 0x04 | 0x08 | 0x10,
2071
+ genericSwitchConfig: 0,
2072
+ currentContactStatus: 1,
2073
+ });
2074
+ });
2075
+
2076
+ it("Zcl green power readGpd channel request", () => {
2077
+ const buffer = [0xfa];
2078
+ const frame = new BuffaloZcl(Buffer.from(buffer));
2079
+
2080
+ expect(
2081
+ frame.read(BuffaloZclDataType.GPD_FRAME, {
2082
+ payload: {
2083
+ payloadSize: buffer.length,
2084
+ commandID: 0xe3,
2085
+ },
2086
+ }),
2087
+ ).toStrictEqual({
2088
+ nextChannel: 0xa,
2089
+ nextNextChannel: 0xf,
2090
+ });
2091
+ });
2092
+
2093
+ it("Zcl green power readGpd attribute report", () => {
2094
+ const buffer = [
2095
+ 0x12,
2096
+ 0x34, // Manufacturer ID
2097
+ 0xff,
2098
+ 0xff, // Cluster ID
2099
+ 0x00,
2100
+ 0x00, // Attribute ID
2101
+ DataType.UINT32, // Attribute Type
2102
+ 0x00,
2103
+ 0x01,
2104
+ 0x02,
2105
+ 0x03,
2106
+ 0x01,
2107
+ 0x00,
2108
+ DataType.CHAR_STR,
2109
+ 0x06,
2110
+ 0x5a,
2111
+ 0x49,
2112
+ 0x47,
2113
+ 0x42,
2114
+ 0x45,
2115
+ 0x45,
2116
+ 0x02,
2117
+ 0x00,
2118
+ DataType.BOOLEAN,
2119
+ 0x01,
2120
+ ];
2121
+ const frame = new BuffaloZcl(Buffer.from(buffer));
2122
+
2123
+ expect(
2124
+ frame.read(BuffaloZclDataType.GPD_FRAME, {
2125
+ payload: {
2126
+ commandID: 0xa1,
2127
+ payloadSize: buffer.length,
2128
+ },
2129
+ }),
2130
+ ).toStrictEqual({
2131
+ manufacturerCode: 13330,
2132
+ clusterID: 65535,
2133
+ attributes: {
2134
+ "0": 50462976,
2135
+ "1": "ZIGBEE",
2136
+ "2": 1,
2137
+ },
2138
+ });
2139
+ });
2140
+
2141
+ it("Zcl green power writeGpd commissioning", () => {
2142
+ const expected = [
2143
+ 1, // length
2144
+ 0, // options
2145
+ ];
2146
+ const frame = new BuffaloZcl(Buffer.alloc(2));
2147
+
2148
+ frame.write(
2149
+ BuffaloZclDataType.GPD_FRAME,
2150
+ {
2151
+ commandID: 0xf0,
2152
+ options: 0,
2153
+ panID: 0,
2154
+ securityKey: Buffer.alloc(16),
2155
+ keyMic: 0,
2156
+ frameCounter: 0,
2157
+ },
2158
+ {},
2159
+ );
2160
+
2161
+ expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
2162
+ });
2163
+
2164
+ it("Zcl green power writeGpd commissioning all options", () => {
2165
+ const expected = [
2166
+ 27, // length
2167
+ 0b11111, // options
2168
+ 0xff,
2169
+ 0xff, // PAN ID
2170
+ 0,
2171
+ 0,
2172
+ 0,
2173
+ 0,
2174
+ 0,
2175
+ 0,
2176
+ 0,
2177
+ 0,
2178
+ 0,
2179
+ 0,
2180
+ 0,
2181
+ 0,
2182
+ 0,
2183
+ 0,
2184
+ 0,
2185
+ 0, // security key
2186
+ 0,
2187
+ 0,
2188
+ 0,
2189
+ 0, // key mic
2190
+ 0,
2191
+ 0,
2192
+ 0,
2193
+ 0, // frame counter
2194
+ ];
2195
+ const frame = new BuffaloZcl(Buffer.alloc(28));
2196
+
2197
+ frame.write(
2198
+ BuffaloZclDataType.GPD_FRAME,
2199
+ {
2200
+ commandID: 0xf0,
2201
+ options: 0b11111,
2202
+ panID: 0xffff,
2203
+ securityKey: Buffer.alloc(16),
2204
+ keyMic: 0,
2205
+ frameCounter: 0,
2206
+ },
2207
+ {},
2208
+ );
2209
+
2210
+ expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
2211
+ });
2212
+
2213
+ it("Zcl green power writeGpd custom reply", () => {
2214
+ const expected = [
2215
+ 6, // length
2216
+ 90,
2217
+ 73,
2218
+ 71,
2219
+ 66,
2220
+ 69,
2221
+ 69, // ZIGBEE
2222
+ ];
2223
+
2224
+ const frame = new BuffaloZcl(Buffer.alloc(7));
2225
+ frame.write(
2226
+ BuffaloZclDataType.GPD_FRAME,
2227
+ {
2228
+ commandID: 0xf4,
2229
+ buffer: Buffer.from("ZIGBEE"),
2230
+ },
2231
+ {},
2232
+ );
2233
+
2234
+ expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
2235
+ });
2236
+
2237
+ it("Zcl green power writeGpd unhandled command", () => {
2238
+ const frame = new BuffaloZcl(Buffer.alloc(7));
2239
+ frame.write(
2240
+ BuffaloZclDataType.GPD_FRAME,
2241
+ {
2242
+ commandID: 0x1ff,
2243
+ },
2244
+ {},
2245
+ );
2246
+
2247
+ expect(frame.getWritten()).toStrictEqual(Buffer.alloc(0));
2248
+ });
2249
+
2250
+ it("Zcl green power writeGpd channel configuration", () => {
2251
+ const expected = [
2252
+ 1, // length
2253
+ 0xf, // Channel 26
2254
+ ];
2255
+
2256
+ const frame = new BuffaloZcl(Buffer.alloc(2));
2257
+ frame.write(
2258
+ BuffaloZclDataType.GPD_FRAME,
2259
+ {
2260
+ commandID: 0xf3,
2261
+ operationalChannel: 0xf,
2262
+ basic: false,
2263
+ },
2264
+ {},
2265
+ );
2266
+
2267
+ expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
2268
+ });
2269
+
2270
+ it("Zcl green power writeGpd channel configuration basic", () => {
2271
+ const expected = [
2272
+ 1, // length
2273
+ 0x1f, // Channel 26 + Basic
2274
+ ];
2275
+
2276
+ const frame = new BuffaloZcl(Buffer.alloc(2));
2277
+ frame.write(
2278
+ BuffaloZclDataType.GPD_FRAME,
2279
+ {
2280
+ commandID: 0xf3,
2281
+ operationalChannel: 0xf,
2282
+ basic: true,
2283
+ },
2284
+ {},
2285
+ );
2286
+
2287
+ expect(frame.getWritten()).toStrictEqual(Buffer.from(expected));
2288
+ });
2289
+
2290
+ it("ZclFrame parse MiBoxer zone configuration command", () => {
2291
+ const zoneConfigPayload = Buffer.from([
2292
+ 0x11, 0x01, 0xf0, 0x08, 0x84, 0x2b, 0x01, 0x98, 0x2b, 0x02, 0xac, 0x2b, 0x03, 0xc0, 0x2b, 0x04, 0xd4, 0x2b, 0x05, 0xe8, 0x2b, 0x06, 0xfc,
2293
+ 0x2b, 0x07, 0x10, 0x2c, 0x08,
2294
+ ]);
2295
+ const zoneConfigFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zoneConfigPayload)!, zoneConfigPayload, {});
2296
+ expect(zoneConfigFrame.payload.zones).toStrictEqual([
2297
+ {zoneNum: 1, groupId: 0x2b84},
2298
+ {zoneNum: 2, groupId: 0x2b98},
2299
+ {zoneNum: 3, groupId: 0x2bac},
2300
+ {zoneNum: 4, groupId: 0x2bc0},
2301
+ {zoneNum: 5, groupId: 0x2bd4},
2302
+ {zoneNum: 6, groupId: 0x2be8},
2303
+ {zoneNum: 7, groupId: 0x2bfc},
2304
+ {zoneNum: 8, groupId: 0x2c10},
2305
+ ]);
2306
+ });
2307
+ it("ZclFrame serialize MiBoxer zone configuration command", () => {
2308
+ const testZones = [
2309
+ {zoneNum: 1, groupId: 0x2b84},
2310
+ {zoneNum: 2, groupId: 0x2b98},
2311
+ {zoneNum: 3, groupId: 0x2bac},
2312
+ {zoneNum: 4, groupId: 0x2bc0},
2313
+ {zoneNum: 5, groupId: 0x2bd4},
2314
+ {zoneNum: 6, groupId: 0x2be8},
2315
+ {zoneNum: 7, groupId: 0x2bfc},
2316
+ {zoneNum: 8, groupId: 0x2c10},
2317
+ ];
2318
+ const zoneConfigFrame = Zcl.Frame.create(
2319
+ FrameType.SPECIFIC,
2320
+ Direction.CLIENT_TO_SERVER,
2321
+ true,
2322
+ undefined,
2323
+ 1,
2324
+ "miboxerSetZones",
2325
+ Zcl.Clusters.genGroups.ID,
2326
+ {zones: testZones},
2327
+ {},
2328
+ );
2329
+ expect(zoneConfigFrame.toBuffer()).toStrictEqual(
2330
+ Buffer.from([
2331
+ 0x11, 0x01, 0xf0, 0x08, 0x84, 0x2b, 0x01, 0x98, 0x2b, 0x02, 0xac, 0x2b, 0x03, 0xc0, 0x2b, 0x04, 0xd4, 0x2b, 0x05, 0xe8, 0x2b, 0x06,
2332
+ 0xfc, 0x2b, 0x07, 0x10, 0x2c, 0x08,
2333
+ ]),
2334
+ );
2335
+ });
2336
+
2337
+ it("BuffaloZcl read BIG_ENDIAN_UINT24", () => {
2338
+ const buffer = Buffer.from([0x01, 0x01, 0x86, 0xa0, 0x02]);
2339
+ const buffalo = new BuffaloZcl(buffer, 1);
2340
+ const value = buffalo.read(BuffaloZclDataType.BIG_ENDIAN_UINT24, {});
2341
+ expect(buffalo.getPosition()).toBe(4);
2342
+ expect(value).toStrictEqual(100000);
2343
+ });
2344
+
2345
+ it("BuffaloZcl write BIG_ENDIAN_UINT24", () => {
2346
+ const payload = 16777200;
2347
+ const buffer = Buffer.alloc(4);
2348
+ const expected = Buffer.from([0x00, 0xff, 0xff, 0xf0]);
2349
+ const buffalo = new BuffaloZcl(buffer, 1);
2350
+ buffalo.write(BuffaloZclDataType.BIG_ENDIAN_UINT24, payload, {});
2351
+ expect(buffalo.getPosition()).toBe(4);
2352
+ expect(buffer).toStrictEqual(expected);
2353
+ });
2354
+
2355
+ it("BuffaloZcl read BUFFER whole", () => {
2356
+ const buffer = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
2357
+ const buffalo = new BuffaloZcl(buffer);
2358
+ const value = buffalo.read(BuffaloZclDataType.BUFFER, {});
2359
+ expect(value).toStrictEqual(Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]));
2360
+ });
2361
+
2362
+ it("BuffaloZcl read BUFFER with length", () => {
2363
+ const buffer = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
2364
+ const buffalo = new BuffaloZcl(buffer);
2365
+ const value = buffalo.read(BuffaloZclDataType.BUFFER, {length: 3});
2366
+ expect(value).toStrictEqual(Buffer.from([0x01, 0x02, 0x03]));
2367
+ });
2368
+
2369
+ it("BuffaloZcl write BUFFER whole", () => {
2370
+ const buffer = Buffer.alloc(5);
2371
+ const expected = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
2372
+ const buffalo = new BuffaloZcl(buffer);
2373
+ buffalo.write(BuffaloZclDataType.BUFFER, expected, {});
2374
+ expect(buffer).toStrictEqual(expected);
2375
+ });
2376
+
2377
+ it("BuffaloZcl write BUFFER always whole - length ignored", () => {
2378
+ const buffer = Buffer.alloc(5);
2379
+ const expected = Buffer.from([0x01, 0x02, 0x03, 0x04, 0x05]);
2380
+ const buffalo = new BuffaloZcl(buffer);
2381
+ buffalo.write(BuffaloZclDataType.BUFFER, expected, {length: 3});
2382
+ expect(buffer).toStrictEqual(expected);
2383
+ });
2384
+
2385
+ it("BuffaloZcl write non existing type", () => {
2386
+ expect(() => {
2387
+ const buffalo = new BuffaloZcl(Buffer.alloc(0));
2388
+ // @ts-expect-error invalid typing
2389
+ buffalo.write(9999, 1, {});
2390
+ }).toThrow(new Error("Write for '9999' not available"));
2391
+ });
2392
+
2393
+ it("BuffaloZcl read non existing type", () => {
2394
+ expect(() => {
2395
+ const buffalo = new BuffaloZcl(Buffer.alloc(0));
2396
+ // @ts-expect-error invalid typing
2397
+ buffalo.read(9999, {});
2398
+ }).toThrow(new Error("Read for '9999' not available"));
2399
+ });
2400
+
2401
+ it("BuffaloZcl write TOD", () => {
2402
+ const buffer = Buffer.alloc(4);
2403
+ const expected = Buffer.from([0, 59, 34, 88]);
2404
+ const buffalo = new BuffaloZcl(buffer);
2405
+ const payload = {hours: 0, minutes: 59, seconds: 34, hundredths: 88};
2406
+ buffalo.write(DataType.TOD, payload, {});
2407
+ expect(buffalo.getBuffer()).toStrictEqual(expected);
2408
+ });
2409
+
2410
+ it("BuffaloZcl read TOD", () => {
2411
+ const expected = {hours: 0, minutes: 59, seconds: 34, hundredths: 88};
2412
+ const buffalo = new BuffaloZcl(Buffer.from([0, 59, 34, 88]));
2413
+ const value = buffalo.read(DataType.TOD, {});
2414
+ expect(value).toStrictEqual(expected);
2415
+ });
2416
+
2417
+ it("BuffaloZcl write DATE", () => {
2418
+ const buffer = Buffer.alloc(4);
2419
+ const expected = Buffer.from([100, 8, 31, 3]);
2420
+ const buffalo = new BuffaloZcl(buffer);
2421
+ const payload = {year: 2000, month: 8, dayOfMonth: 31, dayOfWeek: 3};
2422
+ buffalo.write(DataType.DATE, payload, {});
2423
+ expect(buffalo.getBuffer()).toStrictEqual(expected);
2424
+ });
2425
+
2426
+ it("BuffaloZcl read DATE", () => {
2427
+ const expected = {year: 2000, month: 8, dayOfMonth: 31, dayOfWeek: 3};
2428
+ const buffalo = new BuffaloZcl(Buffer.from([100, 8, 31, 3]));
2429
+ const value = buffalo.read(DataType.DATE, {});
2430
+ expect(value).toStrictEqual(expected);
2431
+ });
2432
+
2433
+ it("BuffaloZcl write TOD non-value", () => {
2434
+ const buffer = Buffer.alloc(4);
2435
+ const expected = Buffer.from([0xff, 0xff, 0xff, 0xff]);
2436
+ const buffalo = new BuffaloZcl(buffer);
2437
+ const payload = {hours: Number.NaN, minutes: Number.NaN, seconds: Number.NaN, hundredths: Number.NaN};
2438
+ buffalo.write(DataType.TOD, payload, {});
2439
+ expect(buffalo.getBuffer()).toStrictEqual(expected);
2440
+ });
2441
+
2442
+ it("BuffaloZcl read DATE non-value", () => {
2443
+ const buffer = Buffer.alloc(4);
2444
+ const expected = Buffer.from([0xff, 0xff, 0xff, 0xff]);
2445
+ const buffalo = new BuffaloZcl(buffer);
2446
+ const payload = {year: Number.NaN, month: Number.NaN, dayOfMonth: Number.NaN, dayOfWeek: Number.NaN};
2447
+ buffalo.write(DataType.DATE, payload, {});
2448
+ expect(buffalo.getBuffer()).toStrictEqual(expected);
2449
+ });
2450
+
2451
+ it("BuffaloZcl read OCTET_STR non-value", () => {
2452
+ const buffalo = new BuffaloZcl(Buffer.from([0xff]));
2453
+ const value = buffalo.read(DataType.OCTET_STR, {});
2454
+ expect(value).toStrictEqual(Buffer.from([]));
2455
+ });
2456
+
2457
+ it("BuffaloZcl read CHAR_STR non-value", () => {
2458
+ const buffalo = new BuffaloZcl(Buffer.from([0xff]));
2459
+ const value = buffalo.read(DataType.CHAR_STR, {});
2460
+ expect(value).toStrictEqual("");
2461
+ });
2462
+
2463
+ it("BuffaloZcl read MI_STRUCT non-value", () => {
2464
+ const buffalo = new BuffaloZcl(Buffer.from([0xff]));
2465
+ const value = buffalo.read(BuffaloZclDataType.MI_STRUCT, {});
2466
+ expect(value).toStrictEqual({});
2467
+ });
2468
+
2469
+ it("BuffaloZcl read LONG_OCTET_STR non-value", () => {
2470
+ const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
2471
+ const value = buffalo.read(DataType.LONG_OCTET_STR, {});
2472
+ expect(value).toStrictEqual(Buffer.from([]));
2473
+ });
2474
+
2475
+ it("BuffaloZcl read LONG_CHAR_STR non-value", () => {
2476
+ const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
2477
+ const value = buffalo.read(DataType.LONG_CHAR_STR, {});
2478
+ expect(value).toStrictEqual("");
2479
+ });
2480
+
2481
+ it("BuffaloZcl read ARRAY non-value", () => {
2482
+ const buffalo = new BuffaloZcl(Buffer.from([DataType.UINT8, 0xff, 0xff]));
2483
+ const value = buffalo.read(DataType.ARRAY, {});
2484
+ expect(value).toStrictEqual([]);
2485
+ });
2486
+
2487
+ it("BuffaloZcl read STRUCT non-value", () => {
2488
+ const buffalo = new BuffaloZcl(Buffer.from([0xff, 0xff]));
2489
+ const value = buffalo.read(DataType.STRUCT, {});
2490
+ expect(value).toStrictEqual([]);
2491
+ });
2492
+
2493
+ it("BuffaloZcl write NO_DATA", () => {
2494
+ const buffalo = new BuffaloZcl(Buffer.alloc(2));
2495
+ const payload = null;
2496
+ buffalo.write(DataType.NO_DATA, payload, {});
2497
+ expect(buffalo.getPosition()).toStrictEqual(0);
2498
+ expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00]));
2499
+ });
2500
+
2501
+ it("BuffaloZcl read NO_DATA", () => {
2502
+ const buffalo = new BuffaloZcl(Buffer.from([0x00, 0x00]), 1);
2503
+ const value = buffalo.read(DataType.NO_DATA, {});
2504
+ expect(buffalo.getPosition()).toStrictEqual(1);
2505
+ expect(value).toStrictEqual(undefined);
2506
+ });
2507
+
2508
+ it("BuffaloZcl write UNKNOWN", () => {
2509
+ const buffalo = new BuffaloZcl(Buffer.alloc(2));
2510
+ const payload = null;
2511
+ buffalo.write(DataType.UNKNOWN, payload, {});
2512
+ expect(buffalo.getPosition()).toStrictEqual(0);
2513
+ expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00]));
2514
+ });
2515
+
2516
+ it("BuffaloZcl read UNKNOWN", () => {
2517
+ const buffalo = new BuffaloZcl(Buffer.from([0x00, 0x00]), 1);
2518
+ const value = buffalo.read(DataType.UNKNOWN, {});
2519
+ expect(buffalo.getPosition()).toStrictEqual(1);
2520
+ expect(value).toStrictEqual(undefined);
2521
+ });
2522
+
2523
+ it("ZclHeader return undefined when too short", () => {
2524
+ const header = Zcl.Header.fromBuffer(Buffer.from([0, 8]));
2525
+ expect(header).toStrictEqual(undefined);
2526
+ });
2527
+
2528
+ it("ZclHeader return undefined when too short manufacturer specific", () => {
2529
+ const header = Zcl.Header.fromBuffer(Buffer.from([4, 8, 3]));
2530
+ expect(header).toStrictEqual(undefined);
2531
+ });
2532
+
2533
+ describe("BuffaloZcl write passthrough to Buffalo", () => {
2534
+ let buffalo: BuffaloZcl;
2535
+
2536
+ beforeEach(() => {
2537
+ buffalo = new BuffaloZcl(Buffer.alloc(255));
2538
+ });
2539
+
2540
+ it("uint8", () => {
2541
+ const uint8Spy = vi.spyOn(buffalo, "writeUInt8");
2542
+ const types = [DataType.DATA8, DataType.BOOLEAN, DataType.BITMAP8, DataType.UINT8, DataType.ENUM8];
2543
+ let i = 0;
2544
+
2545
+ for (const type of types) {
2546
+ buffalo.write(type, 1, {});
2547
+ expect(uint8Spy).toHaveBeenCalledTimes(++i);
2548
+ }
2549
+ });
2550
+
2551
+ it("uint16", () => {
2552
+ const uint16Spy = vi.spyOn(buffalo, "writeUInt16");
2553
+ const types = [DataType.DATA16, DataType.BITMAP16, DataType.UINT16, DataType.ENUM16, DataType.CLUSTER_ID, DataType.ATTR_ID];
2554
+ let i = 0;
2555
+
2556
+ for (const type of types) {
2557
+ buffalo.write(type, 1, {});
2558
+ expect(uint16Spy).toHaveBeenCalledTimes(++i);
2559
+ }
2560
+ });
2561
+
2562
+ it("uint24", () => {
2563
+ const uint24Spy = vi.spyOn(buffalo, "writeUInt24");
2564
+ const types = [DataType.DATA24, DataType.BITMAP24, DataType.UINT24];
2565
+ let i = 0;
2566
+
2567
+ for (const type of types) {
2568
+ buffalo.write(type, 1, {});
2569
+ expect(uint24Spy).toHaveBeenCalledTimes(++i);
2570
+ }
2571
+ });
2572
+
2573
+ it("uint32", () => {
2574
+ const uint32Spy = vi.spyOn(buffalo, "writeUInt32");
2575
+ const types = [DataType.DATA32, DataType.BITMAP32, DataType.UINT32, DataType.UTC, DataType.BAC_OID];
2576
+ let i = 0;
2577
+
2578
+ for (const type of types) {
2579
+ buffalo.write(type, 1, {});
2580
+ expect(uint32Spy).toHaveBeenCalledTimes(++i);
2581
+ }
2582
+ });
2583
+
2584
+ it("int8", () => {
2585
+ const int8Spy = vi.spyOn(buffalo, "writeInt8");
2586
+ buffalo.write(DataType.INT8, 1, {});
2587
+ expect(int8Spy).toHaveBeenCalledTimes(1);
2588
+ });
2589
+
2590
+ it("int16", () => {
2591
+ const int16Spy = vi.spyOn(buffalo, "writeInt16");
2592
+ buffalo.write(DataType.INT16, 1, {});
2593
+ expect(int16Spy).toHaveBeenCalledTimes(1);
2594
+ });
2595
+
2596
+ it("int24", () => {
2597
+ const int24Spy = vi.spyOn(buffalo, "writeInt24");
2598
+ buffalo.write(DataType.INT24, 1, {});
2599
+ expect(int24Spy).toHaveBeenCalledTimes(1);
2600
+ });
2601
+
2602
+ it("int32", () => {
2603
+ const int32Spy = vi.spyOn(buffalo, "writeInt32");
2604
+ buffalo.write(DataType.INT32, 1, {});
2605
+ expect(int32Spy).toHaveBeenCalledTimes(1);
2606
+ });
2607
+
2608
+ it("int48", () => {
2609
+ const int48Spy = vi.spyOn(buffalo, "writeInt48");
2610
+ buffalo.write(DataType.INT48, 1, {});
2611
+ expect(int48Spy).toHaveBeenCalledTimes(1);
2612
+ });
2613
+
2614
+ it("list uint8", () => {
2615
+ const listuint8Spy = vi.spyOn(buffalo, "writeListUInt8");
2616
+ buffalo.write(BuffaloZclDataType.LIST_UINT8, [1], {});
2617
+ expect(listuint8Spy).toHaveBeenCalledTimes(1);
2618
+ });
2619
+
2620
+ it("list uint16", () => {
2621
+ const listuint16Spy = vi.spyOn(buffalo, "writeListUInt16");
2622
+ buffalo.write(BuffaloZclDataType.LIST_UINT16, [1], {});
2623
+ expect(listuint16Spy).toHaveBeenCalledTimes(1);
2624
+ });
2625
+
2626
+ it("list uint24", () => {
2627
+ const listuint24Spy = vi.spyOn(buffalo, "writeListUInt24");
2628
+ buffalo.write(BuffaloZclDataType.LIST_UINT24, [1], {});
2629
+ expect(listuint24Spy).toHaveBeenCalledTimes(1);
2630
+ });
2631
+
2632
+ it("list uint32", () => {
2633
+ const listuint32Spy = vi.spyOn(buffalo, "writeListUInt32");
2634
+ buffalo.write(BuffaloZclDataType.LIST_UINT32, [1], {});
2635
+ expect(listuint32Spy).toHaveBeenCalledTimes(1);
2636
+ });
2637
+
2638
+ // NOT SUPPORTED
2639
+ // it('semi prec', () => {
2640
+ // const semiPrecSpy = vi.spyOn(buffalo, 'writeSemiFloatLE');
2641
+ // buffalo.write(DataType.SEMI_PREC, 1, {});
2642
+ // expect(semiPrecSpy).toHaveBeenCalledTimes(1);
2643
+ // });
2644
+
2645
+ it("single prec", () => {
2646
+ const singlePrecSpy = vi.spyOn(buffalo, "writeFloatLE");
2647
+ buffalo.write(DataType.SINGLE_PREC, 1.1, {});
2648
+ expect(singlePrecSpy).toHaveBeenCalledTimes(1);
2649
+ });
2650
+
2651
+ it("double prec", () => {
2652
+ const doublePrecSpy = vi.spyOn(buffalo, "writeDoubleLE");
2653
+ buffalo.write(DataType.DOUBLE_PREC, 1.1, {});
2654
+ expect(doublePrecSpy).toHaveBeenCalledTimes(1);
2655
+ });
2656
+
2657
+ it("ieee add", () => {
2658
+ const doublePrecSpy = vi.spyOn(buffalo, "writeIeeeAddr");
2659
+ buffalo.write(DataType.IEEE_ADDR, "0xf1f1f1f1f1f1f1f1", {});
2660
+ expect(doublePrecSpy).toHaveBeenCalledTimes(1);
2661
+ });
2662
+ });
2663
+
2664
+ describe("BuffaloZcl read passthrough to Buffalo", () => {
2665
+ let buffalo: BuffaloZcl;
2666
+
2667
+ beforeEach(() => {
2668
+ buffalo = new BuffaloZcl(Buffer.alloc(255));
2669
+ });
2670
+
2671
+ it("uint8", () => {
2672
+ const uint8Spy = vi.spyOn(buffalo, "readUInt8");
2673
+ const types = [DataType.DATA8, DataType.BOOLEAN, DataType.BITMAP8, DataType.UINT8, DataType.ENUM8];
2674
+ let i = 0;
2675
+
2676
+ for (const type of types) {
2677
+ buffalo.read(type, {});
2678
+ expect(uint8Spy).toHaveBeenCalledTimes(++i);
2679
+ }
2680
+ });
2681
+
2682
+ it("uint16", () => {
2683
+ const uint16Spy = vi.spyOn(buffalo, "readUInt16");
2684
+ const types = [DataType.DATA16, DataType.BITMAP16, DataType.UINT16, DataType.ENUM16, DataType.CLUSTER_ID, DataType.ATTR_ID];
2685
+ let i = 0;
2686
+
2687
+ for (const type of types) {
2688
+ buffalo.read(type, {});
2689
+ expect(uint16Spy).toHaveBeenCalledTimes(++i);
2690
+ }
2691
+ });
2692
+
2693
+ it("uint24", () => {
2694
+ const uint24Spy = vi.spyOn(buffalo, "readUInt24");
2695
+ const types = [DataType.DATA24, DataType.BITMAP24, DataType.UINT24];
2696
+ let i = 0;
2697
+
2698
+ for (const type of types) {
2699
+ buffalo.read(type, {});
2700
+ expect(uint24Spy).toHaveBeenCalledTimes(++i);
2701
+ }
2702
+ });
2703
+
2704
+ it("uint32", () => {
2705
+ const uint32Spy = vi.spyOn(buffalo, "readUInt32");
2706
+ const types = [DataType.DATA32, DataType.BITMAP32, DataType.UINT32, DataType.UTC, DataType.BAC_OID];
2707
+ let i = 0;
2708
+
2709
+ for (const type of types) {
2710
+ buffalo.read(type, {});
2711
+ expect(uint32Spy).toHaveBeenCalledTimes(++i);
2712
+ }
2713
+ });
2714
+
2715
+ it("int8", () => {
2716
+ const int8Spy = vi.spyOn(buffalo, "readInt8");
2717
+ buffalo.read(DataType.INT8, {});
2718
+ expect(int8Spy).toHaveBeenCalledTimes(1);
2719
+ });
2720
+
2721
+ it("int16", () => {
2722
+ const int16Spy = vi.spyOn(buffalo, "readInt16");
2723
+ buffalo.read(DataType.INT16, {});
2724
+ expect(int16Spy).toHaveBeenCalledTimes(1);
2725
+ });
2726
+
2727
+ it("int24", () => {
2728
+ const int24Spy = vi.spyOn(buffalo, "readInt24");
2729
+ buffalo.read(DataType.INT24, {});
2730
+ expect(int24Spy).toHaveBeenCalledTimes(1);
2731
+ });
2732
+
2733
+ it("int32", () => {
2734
+ const int32Spy = vi.spyOn(buffalo, "readInt32");
2735
+ buffalo.read(DataType.INT32, {});
2736
+ expect(int32Spy).toHaveBeenCalledTimes(1);
2737
+ });
2738
+
2739
+ it("int48", () => {
2740
+ const int48Spy = vi.spyOn(buffalo, "readInt48");
2741
+ buffalo.read(DataType.INT48, {});
2742
+ expect(int48Spy).toHaveBeenCalledTimes(1);
2743
+ });
2744
+
2745
+ it("list uint8", () => {
2746
+ const listuint8Spy = vi.spyOn(buffalo, "readListUInt8");
2747
+ buffalo.read(BuffaloZclDataType.LIST_UINT8, {length: 1});
2748
+ expect(listuint8Spy).toHaveBeenCalledTimes(1);
2749
+ });
2750
+
2751
+ it("list uint16", () => {
2752
+ const listuint16Spy = vi.spyOn(buffalo, "readListUInt16");
2753
+ buffalo.read(BuffaloZclDataType.LIST_UINT16, {length: 1});
2754
+ expect(listuint16Spy).toHaveBeenCalledTimes(1);
2755
+ });
2756
+
2757
+ it("list uint24", () => {
2758
+ const listuint24Spy = vi.spyOn(buffalo, "readListUInt24");
2759
+ buffalo.read(BuffaloZclDataType.LIST_UINT24, {length: 1});
2760
+ expect(listuint24Spy).toHaveBeenCalledTimes(1);
2761
+ });
2762
+
2763
+ it("list uint32", () => {
2764
+ const listuint32Spy = vi.spyOn(buffalo, "readListUInt32");
2765
+ buffalo.read(BuffaloZclDataType.LIST_UINT32, {length: 1});
2766
+ expect(listuint32Spy).toHaveBeenCalledTimes(1);
2767
+ });
2768
+
2769
+ // NOT SUPPORTED
2770
+ // it('semi prec', () => {
2771
+ // const semiPrecSpy = vi.spyOn(buffalo, 'readSemiFloatLE');
2772
+ // buffalo.read(DataType.SEMI_PREC, {});
2773
+ // expect(semiPrecSpy).toHaveBeenCalledTimes(1);
2774
+ // });
2775
+
2776
+ it("single prec", () => {
2777
+ const singlePrecSpy = vi.spyOn(buffalo, "readFloatLE");
2778
+ buffalo.read(DataType.SINGLE_PREC, {});
2779
+ expect(singlePrecSpy).toHaveBeenCalledTimes(1);
2780
+ });
2781
+
2782
+ it("double prec", () => {
2783
+ const doublePrecSpy = vi.spyOn(buffalo, "readDoubleLE");
2784
+ buffalo.read(DataType.DOUBLE_PREC, {});
2785
+ expect(doublePrecSpy).toHaveBeenCalledTimes(1);
2786
+ });
2787
+
2788
+ it("ieee add", () => {
2789
+ const doublePrecSpy = vi.spyOn(buffalo, "readIeeeAddr");
2790
+ buffalo.read(DataType.IEEE_ADDR, {});
2791
+ expect(doublePrecSpy).toHaveBeenCalledTimes(1);
2792
+ });
2793
+ });
2794
+
2795
+ it.each([
2796
+ BuffaloZclDataType.LIST_UINT8,
2797
+ BuffaloZclDataType.LIST_UINT16,
2798
+ BuffaloZclDataType.LIST_UINT24,
2799
+ BuffaloZclDataType.LIST_UINT32,
2800
+ BuffaloZclDataType.LIST_ZONEINFO,
2801
+ ])("Throws when read is missing required length option - param %s", (type) => {
2802
+ expect(() => {
2803
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2804
+ buffalo.read(type, {});
2805
+ }).toThrow(`Cannot read ${BuffaloZclDataType[type]} without length option specified`);
2806
+ });
2807
+
2808
+ it("Reads as buffer when USE_DATA_TYPE is missing dataType option", () => {
2809
+ const buffalo = new BuffaloZcl(Buffer.from([12, 34]));
2810
+ const value = buffalo.read(BuffaloZclDataType.USE_DATA_TYPE, {});
2811
+ expect(value).toStrictEqual(Buffer.from([12, 34]));
2812
+ buffalo.setPosition(1);
2813
+ const value2 = buffalo.read(BuffaloZclDataType.USE_DATA_TYPE, {length: 1});
2814
+ expect(value2).toStrictEqual(Buffer.from([34]));
2815
+ });
2816
+
2817
+ it("Writes as buffer when USE_DATA_TYPE is missing dataType option", () => {
2818
+ const payload = Buffer.from([12, 34]);
2819
+ const buffer = Buffer.alloc(2);
2820
+ const buffalo = new BuffaloZcl(buffer);
2821
+ buffalo.write(BuffaloZclDataType.USE_DATA_TYPE, payload, {});
2822
+ expect(buffer).toStrictEqual(payload);
2823
+ });
2824
+
2825
+ it("Throws when write USE_DATA_TYPE is missing dataType option and value isnt buffer or number array", () => {
2826
+ expect(() => {
2827
+ const payload = "abcd";
2828
+ const buffalo = new BuffaloZcl(Buffer.alloc(2));
2829
+ buffalo.write(BuffaloZclDataType.USE_DATA_TYPE, payload, {});
2830
+ }).toThrow("Cannot write USE_DATA_TYPE without dataType option specified");
2831
+ });
2832
+
2833
+ it("Throws when read GPD_FRAME is missing payload.payloadSize option", () => {
2834
+ expect(() => {
2835
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2836
+ buffalo.read(BuffaloZclDataType.GPD_FRAME, {payload: {commandID: 0xa1}});
2837
+ }).toThrow("Cannot read GPD_FRAME without required payload options specified");
2838
+ });
2839
+
2840
+ it("Throws when read LIST_THERMO_TRANSITIONS is missing required payload options", () => {
2841
+ expect(() => {
2842
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2843
+ buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {});
2844
+ }).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
2845
+ expect(() => {
2846
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2847
+ buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {}});
2848
+ }).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
2849
+ expect(() => {
2850
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2851
+ buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {mode: 1}});
2852
+ }).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
2853
+ expect(() => {
2854
+ const buffalo = new BuffaloZcl(Buffer.alloc(1));
2855
+ buffalo.read(BuffaloZclDataType.LIST_THERMO_TRANSITIONS, {payload: {numoftrans: 1}});
2856
+ }).toThrow("Cannot read LIST_THERMO_TRANSITIONS without required payload options specified");
2857
+ });
2858
+ });