zigbee-herdsman 3.5.2 → 4.0.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 (725) hide show
  1. package/.github/workflows/ci.yml +2 -4
  2. package/.github/workflows/stale.yml +1 -1
  3. package/.release-please-manifest.json +1 -1
  4. package/.vscode/extensions.json +3 -0
  5. package/.vscode/settings.json +11 -0
  6. package/CHANGELOG.md +17 -0
  7. package/biome.json +89 -0
  8. package/dist/adapter/adapter.d.ts +11 -11
  9. package/dist/adapter/adapter.d.ts.map +1 -1
  10. package/dist/adapter/adapter.js +14 -14
  11. package/dist/adapter/adapterDiscovery.d.ts +6 -6
  12. package/dist/adapter/adapterDiscovery.d.ts.map +1 -1
  13. package/dist/adapter/adapterDiscovery.js +139 -141
  14. package/dist/adapter/adapterDiscovery.js.map +1 -1
  15. package/dist/adapter/const.d.ts +1 -1
  16. package/dist/adapter/const.js +2 -2
  17. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +16 -16
  18. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  19. package/dist/adapter/deconz/adapter/deconzAdapter.js +95 -100
  20. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  21. package/dist/adapter/deconz/driver/constants.d.ts +5 -5
  22. package/dist/adapter/deconz/driver/constants.d.ts.map +1 -1
  23. package/dist/adapter/deconz/driver/driver.d.ts +9 -9
  24. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
  25. package/dist/adapter/deconz/driver/driver.js +112 -106
  26. package/dist/adapter/deconz/driver/driver.js.map +1 -1
  27. package/dist/adapter/deconz/driver/frame.d.ts +1 -1
  28. package/dist/adapter/deconz/driver/frame.d.ts.map +1 -1
  29. package/dist/adapter/deconz/driver/frame.js +1 -2
  30. package/dist/adapter/deconz/driver/frame.js.map +1 -1
  31. package/dist/adapter/deconz/driver/frameParser.d.ts +1 -1
  32. package/dist/adapter/deconz/driver/frameParser.d.ts.map +1 -1
  33. package/dist/adapter/deconz/driver/frameParser.js +66 -70
  34. package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
  35. package/dist/adapter/deconz/driver/parser.d.ts +1 -1
  36. package/dist/adapter/deconz/driver/parser.d.ts.map +1 -1
  37. package/dist/adapter/deconz/driver/parser.js +2 -2
  38. package/dist/adapter/deconz/driver/parser.js.map +1 -1
  39. package/dist/adapter/deconz/driver/writer.d.ts +2 -2
  40. package/dist/adapter/deconz/driver/writer.d.ts.map +1 -1
  41. package/dist/adapter/deconz/driver/writer.js +1 -1
  42. package/dist/adapter/ember/adapter/emberAdapter.d.ts +19 -19
  43. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  44. package/dist/adapter/ember/adapter/emberAdapter.js +117 -97
  45. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
  46. package/dist/adapter/ember/adapter/endpoints.d.ts +1 -1
  47. package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -1
  48. package/dist/adapter/ember/adapter/oneWaitress.d.ts +5 -5
  49. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
  50. package/dist/adapter/ember/adapter/oneWaitress.js +2 -2
  51. package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -1
  52. package/dist/adapter/ember/adapter/tokensManager.d.ts +3 -3
  53. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -1
  54. package/dist/adapter/ember/adapter/tokensManager.js +20 -23
  55. package/dist/adapter/ember/adapter/tokensManager.js.map +1 -1
  56. package/dist/adapter/ember/enums.d.ts +4 -4
  57. package/dist/adapter/ember/enums.d.ts.map +1 -1
  58. package/dist/adapter/ember/enums.js +4 -6
  59. package/dist/adapter/ember/enums.js.map +1 -1
  60. package/dist/adapter/ember/ezsp/buffalo.d.ts +4 -4
  61. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +1 -1
  62. package/dist/adapter/ember/ezsp/buffalo.js +30 -32
  63. package/dist/adapter/ember/ezsp/buffalo.js.map +1 -1
  64. package/dist/adapter/ember/ezsp/ezsp.d.ts +46 -46
  65. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
  66. package/dist/adapter/ember/ezsp/ezsp.js +85 -111
  67. package/dist/adapter/ember/ezsp/ezsp.js.map +1 -1
  68. package/dist/adapter/ember/ezspError.d.ts +1 -1
  69. package/dist/adapter/ember/types.d.ts +14 -14
  70. package/dist/adapter/ember/types.d.ts.map +1 -1
  71. package/dist/adapter/ember/uart/ash.d.ts +5 -5
  72. package/dist/adapter/ember/uart/ash.d.ts.map +1 -1
  73. package/dist/adapter/ember/uart/ash.js +80 -71
  74. package/dist/adapter/ember/uart/ash.js.map +1 -1
  75. package/dist/adapter/ember/uart/parser.d.ts +2 -2
  76. package/dist/adapter/ember/uart/parser.d.ts.map +1 -1
  77. package/dist/adapter/ember/uart/parser.js +2 -1
  78. package/dist/adapter/ember/uart/parser.js.map +1 -1
  79. package/dist/adapter/ember/uart/queues.js +27 -29
  80. package/dist/adapter/ember/uart/queues.js.map +1 -1
  81. package/dist/adapter/ember/uart/writer.d.ts +1 -1
  82. package/dist/adapter/ember/uart/writer.d.ts.map +1 -1
  83. package/dist/adapter/ember/uart/writer.js +3 -5
  84. package/dist/adapter/ember/uart/writer.js.map +1 -1
  85. package/dist/adapter/ember/utils/initters.d.ts +2 -2
  86. package/dist/adapter/ember/utils/initters.d.ts.map +1 -1
  87. package/dist/adapter/ember/utils/initters.js +1 -1
  88. package/dist/adapter/ember/utils/math.js +1 -1
  89. package/dist/adapter/events.d.ts +1 -1
  90. package/dist/adapter/events.d.ts.map +1 -1
  91. package/dist/adapter/ezsp/adapter/backup.d.ts +3 -3
  92. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
  93. package/dist/adapter/ezsp/adapter/backup.js +8 -10
  94. package/dist/adapter/ezsp/adapter/backup.js.map +1 -1
  95. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +12 -12
  96. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  97. package/dist/adapter/ezsp/adapter/ezspAdapter.js +45 -44
  98. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  99. package/dist/adapter/ezsp/driver/driver.d.ts +12 -12
  100. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  101. package/dist/adapter/ezsp/driver/driver.js +148 -141
  102. package/dist/adapter/ezsp/driver/driver.js.map +1 -1
  103. package/dist/adapter/ezsp/driver/ezsp.d.ts +7 -7
  104. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
  105. package/dist/adapter/ezsp/driver/ezsp.js +61 -59
  106. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
  107. package/dist/adapter/ezsp/driver/frame.js +2 -2
  108. package/dist/adapter/ezsp/driver/index.d.ts +2 -2
  109. package/dist/adapter/ezsp/driver/multicast.d.ts +8 -5
  110. package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -1
  111. package/dist/adapter/ezsp/driver/multicast.js +9 -9
  112. package/dist/adapter/ezsp/driver/multicast.js.map +1 -1
  113. package/dist/adapter/ezsp/driver/parser.d.ts +1 -1
  114. package/dist/adapter/ezsp/driver/parser.js +3 -3
  115. package/dist/adapter/ezsp/driver/types/basic.d.ts +5 -5
  116. package/dist/adapter/ezsp/driver/types/basic.d.ts.map +1 -1
  117. package/dist/adapter/ezsp/driver/types/basic.js +12 -33
  118. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
  119. package/dist/adapter/ezsp/driver/types/index.d.ts +3 -3
  120. package/dist/adapter/ezsp/driver/types/index.d.ts.map +1 -1
  121. package/dist/adapter/ezsp/driver/types/index.js +8 -9
  122. package/dist/adapter/ezsp/driver/types/index.js.map +1 -1
  123. package/dist/adapter/ezsp/driver/types/named.d.ts +2 -2
  124. package/dist/adapter/ezsp/driver/types/named.d.ts.map +1 -1
  125. package/dist/adapter/ezsp/driver/types/named.js +8 -11
  126. package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
  127. package/dist/adapter/ezsp/driver/types/struct.d.ts +2 -2
  128. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +1 -1
  129. package/dist/adapter/ezsp/driver/types/struct.js +207 -214
  130. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  131. package/dist/adapter/ezsp/driver/uart.d.ts +2 -2
  132. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
  133. package/dist/adapter/ezsp/driver/uart.js +48 -37
  134. package/dist/adapter/ezsp/driver/uart.js.map +1 -1
  135. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +3 -3
  136. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +1 -1
  137. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +16 -34
  138. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +1 -1
  139. package/dist/adapter/ezsp/driver/utils/index.d.ts +4 -4
  140. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +1 -1
  141. package/dist/adapter/ezsp/driver/utils/index.js +4 -4
  142. package/dist/adapter/ezsp/driver/utils/index.js.map +1 -1
  143. package/dist/adapter/ezsp/driver/writer.d.ts +1 -1
  144. package/dist/adapter/ezsp/driver/writer.js +2 -2
  145. package/dist/adapter/index.d.ts +3 -3
  146. package/dist/adapter/serialPort.d.ts +3 -3
  147. package/dist/adapter/serialPort.d.ts.map +1 -1
  148. package/dist/adapter/serialPort.js +1 -0
  149. package/dist/adapter/serialPort.js.map +1 -1
  150. package/dist/adapter/socketPortUtils.js +3 -3
  151. package/dist/adapter/tstype.d.ts +6 -6
  152. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +4 -4
  153. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -1
  154. package/dist/adapter/z-stack/adapter/adapter-backup.js +106 -119
  155. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
  156. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +10 -10
  157. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +1 -1
  158. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +23 -24
  159. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +1 -1
  160. package/dist/adapter/z-stack/adapter/manager.d.ts +6 -6
  161. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  162. package/dist/adapter/z-stack/adapter/manager.js +115 -127
  163. package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
  164. package/dist/adapter/z-stack/adapter/tstype.d.ts +3 -3
  165. package/dist/adapter/z-stack/adapter/tstype.js +3 -3
  166. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +10 -10
  167. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  168. package/dist/adapter/z-stack/adapter/zStackAdapter.js +125 -137
  169. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  170. package/dist/adapter/z-stack/constants/common.d.ts.map +1 -1
  171. package/dist/adapter/z-stack/constants/common.js +0 -3
  172. package/dist/adapter/z-stack/constants/common.js.map +1 -1
  173. package/dist/adapter/z-stack/constants/index.d.ts +10 -10
  174. package/dist/adapter/z-stack/constants/index.d.ts.map +1 -1
  175. package/dist/adapter/z-stack/constants/index.js +2 -2
  176. package/dist/adapter/z-stack/constants/index.js.map +1 -1
  177. package/dist/adapter/z-stack/constants/utils.d.ts +1 -1
  178. package/dist/adapter/z-stack/constants/utils.js +2 -2
  179. package/dist/adapter/z-stack/constants/utils.js.map +1 -1
  180. package/dist/adapter/z-stack/models/startup-options.d.ts +2 -2
  181. package/dist/adapter/z-stack/models/startup-options.d.ts.map +1 -1
  182. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +1 -1
  183. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +1 -1
  184. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +4 -5
  185. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +1 -1
  186. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +2 -2
  187. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +1 -1
  188. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +3 -4
  189. package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +1 -1
  190. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +1 -1
  191. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +1 -1
  192. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +1 -2
  193. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +1 -1
  194. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +2 -2
  195. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +1 -1
  196. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +3 -4
  197. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +1 -1
  198. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +1 -1
  199. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +1 -1
  200. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +6 -7
  201. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +1 -1
  202. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +2 -2
  203. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +1 -1
  204. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +3 -4
  205. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +1 -1
  206. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +1 -1
  207. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +1 -1
  208. package/dist/adapter/z-stack/structs/entries/channel-list.js +1 -2
  209. package/dist/adapter/z-stack/structs/entries/channel-list.js.map +1 -1
  210. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +1 -1
  211. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +1 -1
  212. package/dist/adapter/z-stack/structs/entries/has-configured.js +2 -3
  213. package/dist/adapter/z-stack/structs/entries/has-configured.js.map +1 -1
  214. package/dist/adapter/z-stack/structs/entries/index.d.ts +16 -16
  215. package/dist/adapter/z-stack/structs/entries/nib.d.ts +1 -1
  216. package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +1 -1
  217. package/dist/adapter/z-stack/structs/entries/nib.js +49 -50
  218. package/dist/adapter/z-stack/structs/entries/nib.js.map +1 -1
  219. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +1 -1
  220. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +1 -1
  221. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +1 -2
  222. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +1 -1
  223. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +1 -1
  224. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +1 -1
  225. package/dist/adapter/z-stack/structs/entries/nwk-key.js +1 -2
  226. package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +1 -1
  227. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +1 -1
  228. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +1 -1
  229. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +1 -2
  230. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +1 -1
  231. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +1 -1
  232. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +1 -1
  233. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +3 -4
  234. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +1 -1
  235. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +2 -2
  236. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +1 -1
  237. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +3 -4
  238. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +1 -1
  239. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +1 -1
  240. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +1 -1
  241. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +4 -5
  242. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +1 -1
  243. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +2 -2
  244. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +1 -1
  245. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +3 -4
  246. package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +1 -1
  247. package/dist/adapter/z-stack/structs/index.d.ts +4 -4
  248. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +2 -2
  249. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +1 -1
  250. package/dist/adapter/z-stack/structs/struct.d.ts +8 -8
  251. package/dist/adapter/z-stack/structs/struct.d.ts.map +1 -1
  252. package/dist/adapter/z-stack/structs/struct.js +42 -43
  253. package/dist/adapter/z-stack/structs/struct.js.map +1 -1
  254. package/dist/adapter/z-stack/structs/table.d.ts +3 -3
  255. package/dist/adapter/z-stack/structs/table.d.ts.map +1 -1
  256. package/dist/adapter/z-stack/structs/table.js +10 -10
  257. package/dist/adapter/z-stack/structs/table.js.map +1 -1
  258. package/dist/adapter/z-stack/unpi/frame.d.ts +1 -1
  259. package/dist/adapter/z-stack/unpi/frame.d.ts.map +1 -1
  260. package/dist/adapter/z-stack/unpi/frame.js +2 -4
  261. package/dist/adapter/z-stack/unpi/frame.js.map +1 -1
  262. package/dist/adapter/z-stack/unpi/index.d.ts +4 -4
  263. package/dist/adapter/z-stack/unpi/parser.d.ts +1 -1
  264. package/dist/adapter/z-stack/unpi/parser.js +3 -3
  265. package/dist/adapter/z-stack/unpi/parser.js.map +1 -1
  266. package/dist/adapter/z-stack/unpi/writer.d.ts +2 -2
  267. package/dist/adapter/z-stack/unpi/writer.d.ts.map +1 -1
  268. package/dist/adapter/z-stack/unpi/writer.js +1 -1
  269. package/dist/adapter/z-stack/utils/index.d.ts +2 -2
  270. package/dist/adapter/z-stack/utils/network-options.d.ts +1 -1
  271. package/dist/adapter/z-stack/utils/network-options.d.ts.map +1 -1
  272. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +3 -3
  273. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +1 -1
  274. package/dist/adapter/z-stack/znp/buffaloZnp.js +34 -20
  275. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -1
  276. package/dist/adapter/z-stack/znp/definition.d.ts +2 -2
  277. package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -1
  278. package/dist/adapter/z-stack/znp/definition.js +1111 -1111
  279. package/dist/adapter/z-stack/znp/index.d.ts +2 -2
  280. package/dist/adapter/z-stack/znp/tstype.d.ts +7 -7
  281. package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -1
  282. package/dist/adapter/z-stack/znp/utils.d.ts +1 -1
  283. package/dist/adapter/z-stack/znp/utils.d.ts.map +1 -1
  284. package/dist/adapter/z-stack/znp/utils.js +2 -2
  285. package/dist/adapter/z-stack/znp/znp.d.ts +7 -7
  286. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  287. package/dist/adapter/z-stack/znp/znp.js +46 -45
  288. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  289. package/dist/adapter/z-stack/znp/zpiObject.d.ts +8 -8
  290. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +1 -1
  291. package/dist/adapter/z-stack/znp/zpiObject.js +6 -6
  292. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
  293. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +11 -11
  294. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
  295. package/dist/adapter/zboss/adapter/zbossAdapter.js +37 -36
  296. package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
  297. package/dist/adapter/zboss/commands.d.ts +4 -6
  298. package/dist/adapter/zboss/commands.d.ts.map +1 -1
  299. package/dist/adapter/zboss/commands.js +321 -287
  300. package/dist/adapter/zboss/commands.js.map +1 -1
  301. package/dist/adapter/zboss/driver.d.ts +9 -9
  302. package/dist/adapter/zboss/driver.d.ts.map +1 -1
  303. package/dist/adapter/zboss/driver.js +25 -25
  304. package/dist/adapter/zboss/driver.js.map +1 -1
  305. package/dist/adapter/zboss/frame.d.ts +9 -9
  306. package/dist/adapter/zboss/frame.d.ts.map +1 -1
  307. package/dist/adapter/zboss/frame.js +15 -15
  308. package/dist/adapter/zboss/frame.js.map +1 -1
  309. package/dist/adapter/zboss/reader.d.ts +2 -2
  310. package/dist/adapter/zboss/reader.d.ts.map +1 -1
  311. package/dist/adapter/zboss/reader.js +6 -5
  312. package/dist/adapter/zboss/reader.js.map +1 -1
  313. package/dist/adapter/zboss/uart.d.ts +3 -3
  314. package/dist/adapter/zboss/uart.d.ts.map +1 -1
  315. package/dist/adapter/zboss/uart.js +36 -36
  316. package/dist/adapter/zboss/uart.js.map +1 -1
  317. package/dist/adapter/zboss/writer.d.ts +1 -1
  318. package/dist/adapter/zboss/writer.d.ts.map +1 -1
  319. package/dist/adapter/zboss/writer.js +3 -5
  320. package/dist/adapter/zboss/writer.js.map +1 -1
  321. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js +2 -2
  322. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js.map +1 -1
  323. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +14 -14
  324. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  325. package/dist/adapter/zigate/adapter/zigateAdapter.js +52 -53
  326. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  327. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +6 -6
  328. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
  329. package/dist/adapter/zigate/driver/buffaloZiGate.js +41 -23
  330. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  331. package/dist/adapter/zigate/driver/commandType.d.ts +2 -2
  332. package/dist/adapter/zigate/driver/commandType.d.ts.map +1 -1
  333. package/dist/adapter/zigate/driver/commandType.js +37 -37
  334. package/dist/adapter/zigate/driver/commandType.js.map +1 -1
  335. package/dist/adapter/zigate/driver/constants.d.ts +27 -200
  336. package/dist/adapter/zigate/driver/constants.d.ts.map +1 -1
  337. package/dist/adapter/zigate/driver/constants.js +40 -236
  338. package/dist/adapter/zigate/driver/constants.js.map +1 -1
  339. package/dist/adapter/zigate/driver/frame.d.ts.map +1 -1
  340. package/dist/adapter/zigate/driver/frame.js +4 -3
  341. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  342. package/dist/adapter/zigate/driver/messageType.d.ts +1 -1
  343. package/dist/adapter/zigate/driver/messageType.js +76 -76
  344. package/dist/adapter/zigate/driver/ziGateObject.d.ts +3 -3
  345. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
  346. package/dist/adapter/zigate/driver/ziGateObject.js +7 -6
  347. package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -1
  348. package/dist/adapter/zigate/driver/zigate.d.ts +8 -8
  349. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  350. package/dist/adapter/zigate/driver/zigate.js +59 -54
  351. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  352. package/dist/adapter/zoh/adapter/utils.js +1 -1
  353. package/dist/adapter/zoh/adapter/zohAdapter.d.ts +13 -13
  354. package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -1
  355. package/dist/adapter/zoh/adapter/zohAdapter.js +101 -67
  356. package/dist/adapter/zoh/adapter/zohAdapter.js.map +1 -1
  357. package/dist/buffalo/buffalo.d.ts +2 -2
  358. package/dist/buffalo/buffalo.js +4 -4
  359. package/dist/buffalo/buffalo.js.map +1 -1
  360. package/dist/buffalo/index.d.ts +1 -1
  361. package/dist/controller/controller.d.ts +7 -7
  362. package/dist/controller/controller.d.ts.map +1 -1
  363. package/dist/controller/controller.js +94 -98
  364. package/dist/controller/controller.js.map +1 -1
  365. package/dist/controller/database.d.ts +1 -1
  366. package/dist/controller/database.d.ts.map +1 -1
  367. package/dist/controller/database.js +9 -9
  368. package/dist/controller/database.js.map +1 -1
  369. package/dist/controller/events.d.ts +6 -6
  370. package/dist/controller/events.d.ts.map +1 -1
  371. package/dist/controller/greenPower.d.ts +21 -21
  372. package/dist/controller/greenPower.d.ts.map +1 -1
  373. package/dist/controller/greenPower.js +41 -41
  374. package/dist/controller/greenPower.js.map +1 -1
  375. package/dist/controller/helpers/index.d.ts +1 -1
  376. package/dist/controller/helpers/request.d.ts +2 -2
  377. package/dist/controller/helpers/request.d.ts.map +1 -1
  378. package/dist/controller/helpers/request.js +31 -27
  379. package/dist/controller/helpers/request.js.map +1 -1
  380. package/dist/controller/helpers/requestQueue.d.ts +3 -3
  381. package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
  382. package/dist/controller/helpers/requestQueue.js +20 -20
  383. package/dist/controller/helpers/requestQueue.js.map +1 -1
  384. package/dist/controller/helpers/zclFrameConverter.d.ts +2 -2
  385. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
  386. package/dist/controller/helpers/zclFrameConverter.js +1 -1
  387. package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
  388. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +6 -4
  389. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +1 -1
  390. package/dist/controller/helpers/zclTransactionSequenceNumber.js +6 -5
  391. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +1 -1
  392. package/dist/controller/index.d.ts +1 -1
  393. package/dist/controller/model/device.d.ts +23 -19
  394. package/dist/controller/model/device.d.ts.map +1 -1
  395. package/dist/controller/model/device.js +153 -128
  396. package/dist/controller/model/device.js.map +1 -1
  397. package/dist/controller/model/endpoint.d.ts +11 -11
  398. package/dist/controller/model/endpoint.d.ts.map +1 -1
  399. package/dist/controller/model/endpoint.js +84 -67
  400. package/dist/controller/model/endpoint.js.map +1 -1
  401. package/dist/controller/model/entity.d.ts +3 -3
  402. package/dist/controller/model/entity.d.ts.map +1 -1
  403. package/dist/controller/model/group.d.ts +4 -4
  404. package/dist/controller/model/group.d.ts.map +1 -1
  405. package/dist/controller/model/group.js +21 -9
  406. package/dist/controller/model/group.js.map +1 -1
  407. package/dist/controller/model/index.d.ts +4 -4
  408. package/dist/controller/touchlink.d.ts +1 -1
  409. package/dist/controller/touchlink.d.ts.map +1 -1
  410. package/dist/controller/touchlink.js +11 -11
  411. package/dist/controller/tstype.d.ts +3 -3
  412. package/dist/index.d.ts +10 -10
  413. package/dist/models/backup-storage-legacy.d.ts +14 -16
  414. package/dist/models/backup-storage-legacy.d.ts.map +1 -1
  415. package/dist/models/backup-storage-unified.d.ts +1 -1
  416. package/dist/models/backup.d.ts +2 -2
  417. package/dist/models/backup.d.ts.map +1 -1
  418. package/dist/models/index.d.ts +4 -4
  419. package/dist/utils/backup.d.ts +1 -1
  420. package/dist/utils/backup.d.ts.map +1 -1
  421. package/dist/utils/backup.js +26 -26
  422. package/dist/utils/backup.js.map +1 -1
  423. package/dist/utils/index.d.ts +5 -5
  424. package/dist/utils/logger.js +3 -3
  425. package/dist/utils/patchBigIntSerialization.js +1 -1
  426. package/dist/utils/patchBigIntSerialization.js.map +1 -1
  427. package/dist/utils/queue.d.ts.map +1 -1
  428. package/dist/utils/queue.js +1 -0
  429. package/dist/utils/queue.js.map +1 -1
  430. package/dist/utils/utils.d.ts.map +1 -1
  431. package/dist/utils/utils.js +5 -4
  432. package/dist/utils/utils.js.map +1 -1
  433. package/dist/utils/waitress.d.ts +1 -1
  434. package/dist/utils/waitress.js +3 -3
  435. package/dist/zspec/consts.d.ts +1 -1
  436. package/dist/zspec/consts.d.ts.map +1 -1
  437. package/dist/zspec/consts.js +1 -1
  438. package/dist/zspec/index.d.ts +3 -3
  439. package/dist/zspec/tstypes.d.ts +1 -1
  440. package/dist/zspec/utils.d.ts +4 -4
  441. package/dist/zspec/utils.d.ts.map +1 -1
  442. package/dist/zspec/utils.js +9 -13
  443. package/dist/zspec/utils.js.map +1 -1
  444. package/dist/zspec/zcl/buffaloZcl.d.ts +3 -3
  445. package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -1
  446. package/dist/zspec/zcl/buffaloZcl.js +127 -84
  447. package/dist/zspec/zcl/buffaloZcl.js.map +1 -1
  448. package/dist/zspec/zcl/definition/cluster.d.ts +1 -1
  449. package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
  450. package/dist/zspec/zcl/definition/cluster.js +894 -893
  451. package/dist/zspec/zcl/definition/cluster.js.map +1 -1
  452. package/dist/zspec/zcl/definition/consts.js +7 -7
  453. package/dist/zspec/zcl/definition/foundation.d.ts +3 -3
  454. package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -1
  455. package/dist/zspec/zcl/definition/foundation.js +88 -89
  456. package/dist/zspec/zcl/definition/foundation.js.map +1 -1
  457. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +1 -1
  458. package/dist/zspec/zcl/definition/manufacturerCode.js +1 -1
  459. package/dist/zspec/zcl/definition/manufacturerCode.js.map +1 -1
  460. package/dist/zspec/zcl/definition/status.d.ts +3 -3
  461. package/dist/zspec/zcl/definition/status.js +3 -3
  462. package/dist/zspec/zcl/definition/tstype.d.ts +3 -3
  463. package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -1
  464. package/dist/zspec/zcl/index.d.ts +10 -10
  465. package/dist/zspec/zcl/utils.d.ts +3 -3
  466. package/dist/zspec/zcl/utils.d.ts.map +1 -1
  467. package/dist/zspec/zcl/utils.js +18 -21
  468. package/dist/zspec/zcl/utils.js.map +1 -1
  469. package/dist/zspec/zcl/zclFrame.d.ts +7 -7
  470. package/dist/zspec/zcl/zclFrame.d.ts.map +1 -1
  471. package/dist/zspec/zcl/zclFrame.js +38 -41
  472. package/dist/zspec/zcl/zclFrame.js.map +1 -1
  473. package/dist/zspec/zcl/zclHeader.d.ts +2 -2
  474. package/dist/zspec/zcl/zclHeader.d.ts.map +1 -1
  475. package/dist/zspec/zcl/zclHeader.js +3 -3
  476. package/dist/zspec/zcl/zclStatusError.d.ts +1 -1
  477. package/dist/zspec/zdo/buffaloZdo.d.ts +7 -7
  478. package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -1
  479. package/dist/zspec/zdo/buffaloZdo.js +4 -4
  480. package/dist/zspec/zdo/buffaloZdo.js.map +1 -1
  481. package/dist/zspec/zdo/definition/status.d.ts +1 -1
  482. package/dist/zspec/zdo/definition/status.js +1 -1
  483. package/dist/zspec/zdo/definition/tstypes.d.ts +48 -48
  484. package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -1
  485. package/dist/zspec/zdo/index.d.ts +7 -7
  486. package/dist/zspec/zdo/utils.d.ts +2 -2
  487. package/dist/zspec/zdo/utils.d.ts.map +1 -1
  488. package/dist/zspec/zdo/utils.js +1 -1
  489. package/dist/zspec/zdo/utils.js.map +1 -1
  490. package/dist/zspec/zdo/zdoStatusError.d.ts +1 -1
  491. package/examples/join-and-log.js +5 -5
  492. package/package.json +4 -11
  493. package/src/adapter/adapter.ts +189 -0
  494. package/src/adapter/adapterDiscovery.ts +653 -0
  495. package/src/adapter/const.ts +12 -0
  496. package/src/adapter/deconz/adapter/deconzAdapter.ts +768 -0
  497. package/src/adapter/deconz/driver/constants.ts +180 -0
  498. package/src/adapter/deconz/driver/driver.ts +900 -0
  499. package/src/adapter/deconz/driver/frame.ts +11 -0
  500. package/src/adapter/deconz/driver/frameParser.ts +557 -0
  501. package/src/adapter/deconz/driver/parser.ts +45 -0
  502. package/src/adapter/deconz/driver/writer.ts +22 -0
  503. package/src/adapter/deconz/types.d.ts +13 -0
  504. package/src/adapter/ember/adapter/emberAdapter.ts +2266 -0
  505. package/src/adapter/ember/adapter/endpoints.ts +86 -0
  506. package/src/adapter/ember/adapter/oneWaitress.ts +322 -0
  507. package/src/adapter/ember/adapter/tokensManager.ts +782 -0
  508. package/src/adapter/ember/consts.ts +178 -0
  509. package/src/adapter/ember/enums.ts +2123 -0
  510. package/src/adapter/ember/ezsp/buffalo.ts +1397 -0
  511. package/src/adapter/ember/ezsp/consts.ts +148 -0
  512. package/src/adapter/ember/ezsp/enums.ts +1087 -0
  513. package/src/adapter/ember/ezsp/ezsp.ts +8985 -0
  514. package/src/adapter/ember/ezspError.ts +10 -0
  515. package/src/adapter/ember/types.ts +866 -0
  516. package/src/adapter/ember/uart/ash.ts +1969 -0
  517. package/src/adapter/ember/uart/consts.ts +109 -0
  518. package/src/adapter/ember/uart/enums.ts +192 -0
  519. package/src/adapter/ember/uart/parser.ts +48 -0
  520. package/src/adapter/ember/uart/queues.ts +247 -0
  521. package/src/adapter/ember/uart/writer.ts +53 -0
  522. package/src/adapter/ember/utils/initters.ts +58 -0
  523. package/src/adapter/ember/utils/math.ts +73 -0
  524. package/src/adapter/events.ts +21 -0
  525. package/src/adapter/ezsp/adapter/backup.ts +109 -0
  526. package/src/adapter/ezsp/adapter/ezspAdapter.ts +614 -0
  527. package/src/adapter/ezsp/driver/commands.ts +2497 -0
  528. package/src/adapter/ezsp/driver/consts.ts +11 -0
  529. package/src/adapter/ezsp/driver/driver.ts +1002 -0
  530. package/src/adapter/ezsp/driver/ezsp.ts +802 -0
  531. package/src/adapter/ezsp/driver/frame.ts +101 -0
  532. package/src/adapter/ezsp/driver/index.ts +4 -0
  533. package/src/adapter/ezsp/driver/multicast.ts +78 -0
  534. package/src/adapter/ezsp/driver/parser.ts +81 -0
  535. package/src/adapter/ezsp/driver/types/basic.ts +201 -0
  536. package/src/adapter/ezsp/driver/types/index.ts +239 -0
  537. package/src/adapter/ezsp/driver/types/named.ts +2330 -0
  538. package/src/adapter/ezsp/driver/types/struct.ts +844 -0
  539. package/src/adapter/ezsp/driver/uart.ts +460 -0
  540. package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +44 -0
  541. package/src/adapter/ezsp/driver/utils/index.ts +32 -0
  542. package/src/adapter/ezsp/driver/writer.ts +64 -0
  543. package/src/adapter/index.ts +3 -0
  544. package/src/adapter/serialPort.ts +58 -0
  545. package/src/adapter/socketPortUtils.ts +16 -0
  546. package/src/adapter/tstype.ts +78 -0
  547. package/src/adapter/z-stack/adapter/adapter-backup.ts +519 -0
  548. package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
  549. package/src/adapter/z-stack/adapter/endpoints.ts +57 -0
  550. package/src/adapter/z-stack/adapter/manager.ts +543 -0
  551. package/src/adapter/z-stack/adapter/tstype.ts +6 -0
  552. package/src/adapter/z-stack/adapter/zStackAdapter.ts +1190 -0
  553. package/src/adapter/z-stack/constants/af.ts +27 -0
  554. package/src/adapter/z-stack/constants/common.ts +285 -0
  555. package/src/adapter/z-stack/constants/dbg.ts +23 -0
  556. package/src/adapter/z-stack/constants/index.ts +11 -0
  557. package/src/adapter/z-stack/constants/mac.ts +128 -0
  558. package/src/adapter/z-stack/constants/sapi.ts +25 -0
  559. package/src/adapter/z-stack/constants/sys.ts +72 -0
  560. package/src/adapter/z-stack/constants/util.ts +82 -0
  561. package/src/adapter/z-stack/constants/utils.ts +14 -0
  562. package/src/adapter/z-stack/constants/zdo.ts +103 -0
  563. package/src/adapter/z-stack/models/startup-options.ts +13 -0
  564. package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +44 -0
  565. package/src/adapter/z-stack/structs/entries/address-manager-table.ts +19 -0
  566. package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +12 -0
  567. package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +21 -0
  568. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +19 -0
  569. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +21 -0
  570. package/src/adapter/z-stack/structs/entries/channel-list.ts +8 -0
  571. package/src/adapter/z-stack/structs/entries/has-configured.ts +16 -0
  572. package/src/adapter/z-stack/structs/entries/index.ts +16 -0
  573. package/src/adapter/z-stack/structs/entries/nib.ts +66 -0
  574. package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +15 -0
  575. package/src/adapter/z-stack/structs/entries/nwk-key.ts +13 -0
  576. package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +8 -0
  577. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +20 -0
  578. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +19 -0
  579. package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +33 -0
  580. package/src/adapter/z-stack/structs/entries/security-manager-table.ts +22 -0
  581. package/src/adapter/z-stack/structs/index.ts +4 -0
  582. package/src/adapter/z-stack/structs/serializable-memory-object.ts +14 -0
  583. package/src/adapter/z-stack/structs/struct.ts +367 -0
  584. package/src/adapter/z-stack/structs/table.ts +198 -0
  585. package/src/adapter/z-stack/unpi/constants.ts +33 -0
  586. package/src/adapter/z-stack/unpi/frame.ts +62 -0
  587. package/src/adapter/z-stack/unpi/index.ts +4 -0
  588. package/src/adapter/z-stack/unpi/parser.ts +56 -0
  589. package/src/adapter/z-stack/unpi/writer.ts +21 -0
  590. package/src/adapter/z-stack/utils/channel-list.ts +40 -0
  591. package/src/adapter/z-stack/utils/index.ts +2 -0
  592. package/src/adapter/z-stack/utils/network-options.ts +26 -0
  593. package/src/adapter/z-stack/znp/buffaloZnp.ts +175 -0
  594. package/src/adapter/z-stack/znp/definition.ts +2713 -0
  595. package/src/adapter/z-stack/znp/index.ts +2 -0
  596. package/src/adapter/z-stack/znp/parameterType.ts +22 -0
  597. package/src/adapter/z-stack/znp/tstype.ts +44 -0
  598. package/src/adapter/z-stack/znp/utils.ts +10 -0
  599. package/src/adapter/z-stack/znp/znp.ts +342 -0
  600. package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
  601. package/src/adapter/zboss/adapter/zbossAdapter.ts +527 -0
  602. package/src/adapter/zboss/commands.ts +1184 -0
  603. package/src/adapter/zboss/consts.ts +9 -0
  604. package/src/adapter/zboss/driver.ts +423 -0
  605. package/src/adapter/zboss/enums.ts +360 -0
  606. package/src/adapter/zboss/frame.ts +227 -0
  607. package/src/adapter/zboss/reader.ts +65 -0
  608. package/src/adapter/zboss/types.ts +0 -0
  609. package/src/adapter/zboss/uart.ts +428 -0
  610. package/src/adapter/zboss/utils.ts +58 -0
  611. package/src/adapter/zboss/writer.ts +49 -0
  612. package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +27 -0
  613. package/src/adapter/zigate/adapter/zigateAdapter.ts +618 -0
  614. package/src/adapter/zigate/driver/LICENSE +17 -0
  615. package/src/adapter/zigate/driver/buffaloZiGate.ts +212 -0
  616. package/src/adapter/zigate/driver/commandType.ts +418 -0
  617. package/src/adapter/zigate/driver/constants.ts +150 -0
  618. package/src/adapter/zigate/driver/frame.ts +197 -0
  619. package/src/adapter/zigate/driver/messageType.ts +287 -0
  620. package/src/adapter/zigate/driver/parameterType.ts +32 -0
  621. package/src/adapter/zigate/driver/ziGateObject.ts +146 -0
  622. package/src/adapter/zigate/driver/zigate.ts +426 -0
  623. package/src/adapter/zoh/adapter/utils.ts +27 -0
  624. package/src/adapter/zoh/adapter/zohAdapter.ts +837 -0
  625. package/src/buffalo/buffalo.ts +335 -0
  626. package/src/buffalo/index.ts +1 -0
  627. package/src/controller/controller.ts +1048 -0
  628. package/src/controller/database.ts +124 -0
  629. package/src/controller/events.ts +51 -0
  630. package/src/controller/greenPower.ts +603 -0
  631. package/src/controller/helpers/index.ts +1 -0
  632. package/src/controller/helpers/request.ts +94 -0
  633. package/src/controller/helpers/requestQueue.ts +125 -0
  634. package/src/controller/helpers/zclFrameConverter.ts +51 -0
  635. package/src/controller/helpers/zclTransactionSequenceNumber.ts +19 -0
  636. package/src/controller/index.ts +6 -0
  637. package/src/controller/model/device.ts +1320 -0
  638. package/src/controller/model/endpoint.ts +1040 -0
  639. package/src/controller/model/entity.ts +23 -0
  640. package/src/controller/model/group.ts +333 -0
  641. package/src/controller/model/index.ts +4 -0
  642. package/src/controller/touchlink.ts +189 -0
  643. package/src/controller/tstype.ts +39 -0
  644. package/src/index.ts +12 -0
  645. package/src/models/backup-storage-legacy.ts +48 -0
  646. package/src/models/backup-storage-unified.ts +47 -0
  647. package/src/models/backup.ts +37 -0
  648. package/src/models/index.ts +5 -0
  649. package/src/models/network-options.ts +11 -0
  650. package/src/utils/backup.ts +152 -0
  651. package/src/utils/index.ts +5 -0
  652. package/src/utils/logger.ts +20 -0
  653. package/src/utils/patchBigIntSerialization.ts +8 -0
  654. package/src/utils/queue.ts +76 -0
  655. package/src/utils/types.d.ts +3 -0
  656. package/src/utils/utils.ts +20 -0
  657. package/src/utils/wait.ts +5 -0
  658. package/src/utils/waitress.ts +95 -0
  659. package/src/zspec/consts.ts +84 -0
  660. package/src/zspec/enums.ts +22 -0
  661. package/src/zspec/index.ts +3 -0
  662. package/src/zspec/tstypes.ts +18 -0
  663. package/src/zspec/utils.ts +308 -0
  664. package/src/zspec/zcl/buffaloZcl.ts +1133 -0
  665. package/src/zspec/zcl/definition/cluster.ts +5398 -0
  666. package/src/zspec/zcl/definition/consts.ts +24 -0
  667. package/src/zspec/zcl/definition/enums.ts +194 -0
  668. package/src/zspec/zcl/definition/foundation.ts +301 -0
  669. package/src/zspec/zcl/definition/manufacturerCode.ts +729 -0
  670. package/src/zspec/zcl/definition/status.ts +69 -0
  671. package/src/zspec/zcl/definition/tstype.ts +236 -0
  672. package/src/zspec/zcl/index.ts +10 -0
  673. package/src/zspec/zcl/utils.ts +342 -0
  674. package/src/zspec/zcl/zclFrame.ts +336 -0
  675. package/src/zspec/zcl/zclHeader.ts +102 -0
  676. package/src/zspec/zcl/zclStatusError.ts +10 -0
  677. package/src/zspec/zdo/buffaloZdo.ts +2345 -0
  678. package/src/zspec/zdo/definition/clusters.ts +722 -0
  679. package/src/zspec/zdo/definition/consts.ts +16 -0
  680. package/src/zspec/zdo/definition/enums.ts +99 -0
  681. package/src/zspec/zdo/definition/status.ts +105 -0
  682. package/src/zspec/zdo/definition/tstypes.ts +1062 -0
  683. package/src/zspec/zdo/index.ts +7 -0
  684. package/src/zspec/zdo/utils.ts +76 -0
  685. package/src/zspec/zdo/zdoStatusError.ts +10 -0
  686. package/test/adapter/adapter.test.ts +1062 -0
  687. package/test/adapter/ember/ash.test.ts +337 -0
  688. package/test/adapter/ember/consts.ts +131 -0
  689. package/test/adapter/ember/emberAdapter.test.ts +3449 -0
  690. package/test/adapter/ember/ezsp.test.ts +386 -0
  691. package/test/adapter/ember/ezspBuffalo.test.ts +92 -0
  692. package/test/adapter/ember/ezspError.test.ts +11 -0
  693. package/test/adapter/ember/math.test.ts +205 -0
  694. package/test/adapter/ezsp/frame.test.ts +29 -0
  695. package/test/adapter/ezsp/uart.test.ts +180 -0
  696. package/test/adapter/z-stack/adapter.test.ts +3985 -0
  697. package/test/adapter/z-stack/constants.test.ts +32 -0
  698. package/test/adapter/z-stack/structs.test.ts +114 -0
  699. package/test/adapter/z-stack/unpi.test.ts +212 -0
  700. package/test/adapter/z-stack/znp.test.ts +1284 -0
  701. package/test/adapter/zboss/fixZdoResponse.test.ts +178 -0
  702. package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +80 -0
  703. package/test/adapter/zigate/zdo.test.ts +187 -0
  704. package/test/adapter/zoh/utils.test.ts +35 -0
  705. package/test/adapter/zoh/zohAdapter.test.ts +1306 -0
  706. package/test/buffalo.test.ts +430 -0
  707. package/test/controller.test.ts +10005 -0
  708. package/test/greenpower.test.ts +1421 -0
  709. package/test/mockAdapters.ts +65 -0
  710. package/test/mockDevices.ts +472 -0
  711. package/test/testUtils.ts +20 -0
  712. package/test/tsconfig.json +10 -0
  713. package/test/utils/math.ts +19 -0
  714. package/test/utils.test.ts +227 -0
  715. package/test/vitest.config.mts +25 -0
  716. package/test/zcl.test.ts +2832 -0
  717. package/test/zspec/utils.test.ts +131 -0
  718. package/test/zspec/zcl/buffalo.test.ts +1231 -0
  719. package/test/zspec/zcl/frame.test.ts +925 -0
  720. package/test/zspec/zcl/utils.test.ts +280 -0
  721. package/test/zspec/zdo/buffalo.test.ts +1849 -0
  722. package/test/zspec/zdo/utils.test.ts +240 -0
  723. package/.prettierignore +0 -2
  724. package/.prettierrc +0 -26
  725. package/eslint.config.mjs +0 -32
@@ -0,0 +1,768 @@
1
+ /* v8 ignore start */
2
+
3
+ import Device from "../../../controller/model/device";
4
+ import type * as Models from "../../../models";
5
+ import {Waitress, wait} from "../../../utils";
6
+ import {logger} from "../../../utils/logger";
7
+ import * as ZSpec from "../../../zspec";
8
+ import type {BroadcastAddress} from "../../../zspec/enums";
9
+ import * as Zcl from "../../../zspec/zcl";
10
+ import * as Zdo from "../../../zspec/zdo";
11
+ import type * as ZdoTypes from "../../../zspec/zdo/definition/tstypes";
12
+ import Adapter from "../../adapter";
13
+ import type * as Events from "../../events";
14
+ import type {AdapterOptions, CoordinatorVersion, NetworkOptions, NetworkParameters, SerialPortOptions, StartResult} from "../../tstype";
15
+ import PARAM, {type ApsDataRequest, type GpDataInd, type ReceivedDataResponse, type WaitForDataRequest} from "../driver/constants";
16
+ import Driver from "../driver/driver";
17
+ import processFrame, {frameParserEvents} from "../driver/frameParser";
18
+
19
+ const NS = "zh:deconz";
20
+
21
+ interface WaitressMatcher {
22
+ address?: number | string;
23
+ endpoint: number;
24
+ transactionSequenceNumber?: number;
25
+ frameType: Zcl.FrameType;
26
+ clusterID: number;
27
+ commandIdentifier: number;
28
+ direction: number;
29
+ }
30
+
31
+ export class DeconzAdapter extends Adapter {
32
+ private driver: Driver;
33
+ private openRequestsQueue: WaitForDataRequest[];
34
+ private transactionID: number;
35
+ private frameParserEvent = frameParserEvents;
36
+ private fwVersion?: CoordinatorVersion;
37
+ private waitress: Waitress<Events.ZclPayload, WaitressMatcher>;
38
+ private readonly txOptions;
39
+ private joinPermitted = false;
40
+
41
+ public constructor(networkOptions: NetworkOptions, serialPortOptions: SerialPortOptions, backupPath: string, adapterOptions: AdapterOptions) {
42
+ super(networkOptions, serialPortOptions, backupPath, adapterOptions);
43
+ this.hasZdoMessageOverhead = true;
44
+ this.manufacturerID = Zcl.ManufacturerCode.DRESDEN_ELEKTRONIK_INGENIEURTECHNIK_GMBH;
45
+
46
+ // const concurrent = this.adapterOptions && this.adapterOptions.concurrent ? this.adapterOptions.concurrent : 2;
47
+
48
+ // TODO: https://github.com/Koenkk/zigbee2mqtt/issues/4884#issuecomment-728903121
49
+ const delay = this.adapterOptions && typeof this.adapterOptions.delay === "number" ? this.adapterOptions.delay : 0;
50
+
51
+ this.waitress = new Waitress<Events.ZclPayload, WaitressMatcher>(this.waitressValidator, this.waitressTimeoutFormatter);
52
+
53
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
54
+ this.driver = new Driver(serialPortOptions.path!);
55
+ this.driver.setDelay(delay);
56
+
57
+ this.txOptions = delay >= 200 ? 0x04 /* activate APS ACKs */ : 0x00 /* no APS ACKs */;
58
+
59
+ this.driver.on("rxFrame", (frame) => {
60
+ processFrame(frame);
61
+ });
62
+ this.transactionID = 0;
63
+ this.openRequestsQueue = [];
64
+ this.fwVersion = undefined;
65
+
66
+ this.frameParserEvent.on("receivedDataPayload", (data) => {
67
+ this.checkReceivedDataPayload(data);
68
+ });
69
+ this.frameParserEvent.on("receivedGreenPowerIndication", (data) => {
70
+ this.checkReceivedGreenPowerIndication(data);
71
+ });
72
+
73
+ setInterval(() => {
74
+ this.checkReceivedDataPayload(null);
75
+ }, 1000);
76
+ }
77
+
78
+ /**
79
+ * Adapter methods
80
+ */
81
+ public async start(): Promise<StartResult> {
82
+ const baudrate = this.serialPortOptions.baudRate || 38400;
83
+ await this.driver.open(baudrate);
84
+
85
+ let changed = false;
86
+ const panid = await this.driver.readParameterRequest(PARAM.PARAM.Network.PAN_ID);
87
+ const expanid = await this.driver.readParameterRequest(PARAM.PARAM.Network.APS_EXT_PAN_ID);
88
+ const channel = await this.driver.readParameterRequest(PARAM.PARAM.Network.CHANNEL);
89
+ const networkKey = await this.driver.readParameterRequest(PARAM.PARAM.Network.NETWORK_KEY);
90
+
91
+ // check current channel against configuration.yaml
92
+ if (this.networkOptions.channelList[0] !== channel) {
93
+ logger.debug(
94
+ `Channel in configuration.yaml (${this.networkOptions.channelList[0]}) differs from current channel (${channel}). Changing channel.`,
95
+ NS,
96
+ );
97
+
98
+ let setChannelMask = 0;
99
+ switch (this.networkOptions.channelList[0]) {
100
+ case 11:
101
+ setChannelMask = 0x800;
102
+ break;
103
+ case 12:
104
+ setChannelMask = 0x1000;
105
+ break;
106
+ case 13:
107
+ setChannelMask = 0x2000;
108
+ break;
109
+ case 14:
110
+ setChannelMask = 0x4000;
111
+ break;
112
+ case 15:
113
+ setChannelMask = 0x8000;
114
+ break;
115
+ case 16:
116
+ setChannelMask = 0x10000;
117
+ break;
118
+ case 17:
119
+ setChannelMask = 0x20000;
120
+ break;
121
+ case 18:
122
+ setChannelMask = 0x40000;
123
+ break;
124
+ case 19:
125
+ setChannelMask = 0x80000;
126
+ break;
127
+ case 20:
128
+ setChannelMask = 0x100000;
129
+ break;
130
+ case 21:
131
+ setChannelMask = 0x200000;
132
+ break;
133
+ case 22:
134
+ setChannelMask = 0x400000;
135
+ break;
136
+ case 23:
137
+ setChannelMask = 0x800000;
138
+ break;
139
+ case 24:
140
+ setChannelMask = 0x1000000;
141
+ break;
142
+ case 25:
143
+ setChannelMask = 0x2000000;
144
+ break;
145
+ case 26:
146
+ setChannelMask = 0x4000000;
147
+ break;
148
+ default:
149
+ break;
150
+ }
151
+
152
+ try {
153
+ await this.driver.writeParameterRequest(PARAM.PARAM.Network.CHANNEL_MASK, setChannelMask);
154
+ await wait(500);
155
+ changed = true;
156
+ } catch (error) {
157
+ logger.debug(`Could not set channel: ${error}`, NS);
158
+ }
159
+ }
160
+
161
+ // check current panid against configuration.yaml
162
+ if (this.networkOptions.panID !== panid) {
163
+ logger.debug(`panid in configuration.yaml (${this.networkOptions.panID}) differs from current panid (${panid}). Changing panid.`, NS);
164
+
165
+ try {
166
+ await this.driver.writeParameterRequest(PARAM.PARAM.Network.PAN_ID, this.networkOptions.panID);
167
+ await wait(500);
168
+ changed = true;
169
+ } catch (error) {
170
+ logger.debug(`Could not set panid: ${error}`, NS);
171
+ }
172
+ }
173
+
174
+ // check current extended_panid against configuration.yaml
175
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
176
+ if (this.driver.generalArrayToString(this.networkOptions.extendedPanID!, 8) !== expanid) {
177
+ logger.debug(
178
+ `extended panid in configuration.yaml (${
179
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
180
+ this.driver.macAddrArrayToString(this.networkOptions.extendedPanID!)
181
+ }) differs from current extended panid (${expanid}). Changing extended panid.`,
182
+ NS,
183
+ );
184
+
185
+ try {
186
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
187
+ await this.driver.writeParameterRequest(PARAM.PARAM.Network.APS_EXT_PAN_ID, this.networkOptions.extendedPanID!);
188
+ await wait(500);
189
+ changed = true;
190
+ } catch (error) {
191
+ logger.debug(`Could not set extended panid: ${error}`, NS);
192
+ }
193
+ }
194
+
195
+ // check current network key against configuration.yaml
196
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
197
+ if (this.driver.generalArrayToString(this.networkOptions.networkKey!, 16) !== networkKey) {
198
+ logger.debug(`network key in configuration.yaml (hidden) differs from current network key (${networkKey}). Changing network key.`, NS);
199
+
200
+ try {
201
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
202
+ await this.driver.writeParameterRequest(PARAM.PARAM.Network.NETWORK_KEY, this.networkOptions.networkKey!);
203
+ await wait(500);
204
+ changed = true;
205
+ } catch (error) {
206
+ logger.debug(`Could not set network key: ${error}`, NS);
207
+ }
208
+ }
209
+
210
+ if (changed) {
211
+ await this.driver.changeNetworkStateRequest(PARAM.PARAM.Network.NET_OFFLINE);
212
+ await wait(2000);
213
+ await this.driver.changeNetworkStateRequest(PARAM.PARAM.Network.NET_CONNECTED);
214
+ await wait(2000);
215
+ }
216
+
217
+ // write endpoints
218
+ //[ sd1 ep proId devId vers #inCl iCl1 iCl2 iCl3 iCl4 iCl5 #outC oCl1 oCl2 oCl3 oCl4 ]
219
+ const sd = [
220
+ 0x00, 0x01, 0x04, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x19, 0x00, 0x01, 0x05, 0x04, 0x01, 0x00, 0x20, 0x00,
221
+ 0x00, 0x05, 0x02, 0x05,
222
+ ];
223
+ const sd1 = sd.reverse();
224
+ await this.driver.writeParameterRequest(PARAM.PARAM.STK.Endpoint, sd1);
225
+
226
+ return "resumed";
227
+ }
228
+
229
+ public async stop(): Promise<void> {
230
+ await this.driver.close();
231
+ }
232
+
233
+ public async getCoordinatorIEEE(): Promise<string> {
234
+ return (await this.driver.readParameterRequest(PARAM.PARAM.Network.MAC)) as string;
235
+ }
236
+
237
+ public async permitJoin(seconds: number, networkAddress?: number): Promise<void> {
238
+ const clusterId = Zdo.ClusterId.PERMIT_JOINING_REQUEST;
239
+
240
+ if (networkAddress) {
241
+ // `authentication`: TC significance always 1 (zb specs)
242
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, seconds, 1, []);
243
+
244
+ const result = await this.sendZdo(ZSpec.BLANK_EUI64, networkAddress, clusterId, zdoPayload, false);
245
+
246
+ if (!Zdo.Buffalo.checkStatus<Zdo.ClusterId.PERMIT_JOINING_RESPONSE>(result)) {
247
+ // TODO: will disappear once moved upstream
248
+ throw new Zdo.StatusError(result[0]);
249
+ }
250
+ } else {
251
+ await this.driver.writeParameterRequest(PARAM.PARAM.Network.PERMIT_JOIN, seconds);
252
+
253
+ logger.debug(`Permit joining on coordinator for ${seconds} sec.`, NS);
254
+
255
+ // broadcast permit joining ZDO
256
+ if (networkAddress === undefined) {
257
+ // `authentication`: TC significance always 1 (zb specs)
258
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, seconds, 1, []);
259
+
260
+ await this.sendZdo(ZSpec.BLANK_EUI64, ZSpec.BroadcastAddress.DEFAULT, clusterId, zdoPayload, true);
261
+ }
262
+ }
263
+
264
+ this.joinPermitted = seconds !== 0;
265
+ }
266
+
267
+ public async getCoordinatorVersion(): Promise<CoordinatorVersion> {
268
+ // product: number; transportrev: number; majorrel: number; minorrel: number; maintrel: number; revision: string;
269
+ if (this.fwVersion !== undefined) {
270
+ return this.fwVersion;
271
+ }
272
+
273
+ try {
274
+ const fw = await this.driver.readFirmwareVersionRequest();
275
+ const buf = Buffer.from(fw);
276
+ const fwString = `0x${buf.readUInt32LE(0).toString(16)}`;
277
+ let type = "";
278
+ if (fw[1] === 5) {
279
+ type = "ConBee/RaspBee";
280
+ } else if (fw[1] === 7) {
281
+ type = "ConBee2/RaspBee2";
282
+ } else {
283
+ type = "ConBee3";
284
+ }
285
+ const meta = {transportrev: 0, product: 0, majorrel: fw[3], minorrel: fw[2], maintrel: 0, revision: fwString};
286
+ this.fwVersion = {type: type, meta: meta};
287
+ return {type: type, meta: meta};
288
+ } catch (error) {
289
+ throw new Error(`Get coordinator version Error: ${error}`);
290
+ }
291
+ }
292
+
293
+ public async addInstallCode(ieeeAddress: string, key: Buffer, hashed: boolean): Promise<void> {
294
+ await this.driver.writeLinkKey(ieeeAddress, hashed ? key : ZSpec.Utils.aes128MmoHash(key));
295
+ }
296
+ public async reset(_type: "soft" | "hard"): Promise<void> {
297
+ return await Promise.reject(new Error("Reset is not supported"));
298
+ }
299
+
300
+ public waitFor(
301
+ networkAddress: number | undefined,
302
+ endpoint: number,
303
+ frameType: Zcl.FrameType,
304
+ direction: Zcl.Direction,
305
+ transactionSequenceNumber: number | undefined,
306
+ clusterID: number,
307
+ commandIdentifier: number,
308
+ timeout: number,
309
+ ): {promise: Promise<Events.ZclPayload>; cancel: () => void} {
310
+ const payload = {
311
+ address: networkAddress,
312
+ endpoint,
313
+ clusterID,
314
+ commandIdentifier,
315
+ frameType,
316
+ direction,
317
+ transactionSequenceNumber,
318
+ };
319
+ const waiter = this.waitress.waitFor(payload, timeout);
320
+ const cancel = (): void => this.waitress.remove(waiter.ID);
321
+ return {promise: waiter.start().promise, cancel};
322
+ }
323
+
324
+ public async sendZdo(
325
+ ieeeAddress: string,
326
+ networkAddress: number,
327
+ clusterId: Zdo.ClusterId,
328
+ payload: Buffer,
329
+ disableResponse: true,
330
+ ): Promise<void>;
331
+ public async sendZdo<K extends keyof ZdoTypes.RequestToResponseMap>(
332
+ ieeeAddress: string,
333
+ networkAddress: number,
334
+ clusterId: K,
335
+ payload: Buffer,
336
+ disableResponse: false,
337
+ ): Promise<ZdoTypes.RequestToResponseMap[K]>;
338
+ public async sendZdo<K extends keyof ZdoTypes.RequestToResponseMap>(
339
+ ieeeAddress: string,
340
+ networkAddress: number,
341
+ clusterId: K,
342
+ payload: Buffer,
343
+ disableResponse: boolean,
344
+ ): Promise<ZdoTypes.RequestToResponseMap[K] | undefined> {
345
+ const transactionID = this.nextTransactionID();
346
+ payload[0] = transactionID;
347
+ const isNwkAddrRequest = clusterId === Zdo.ClusterId.NETWORK_ADDRESS_REQUEST;
348
+ const req: ApsDataRequest = {
349
+ requestId: transactionID,
350
+ destAddrMode: isNwkAddrRequest ? PARAM.PARAM.addressMode.IEEE_ADDR : PARAM.PARAM.addressMode.NWK_ADDR,
351
+ destAddr16: isNwkAddrRequest ? undefined : networkAddress,
352
+ destAddr64: isNwkAddrRequest ? ieeeAddress : undefined,
353
+ destEndpoint: Zdo.ZDO_ENDPOINT,
354
+ profileId: Zdo.ZDO_PROFILE_ID,
355
+ clusterId,
356
+ srcEndpoint: Zdo.ZDO_ENDPOINT,
357
+ asduLength: payload.length,
358
+ asduPayload: payload,
359
+ txOptions: 0,
360
+ radius: PARAM.PARAM.txRadius.DEFAULT_RADIUS,
361
+ timeout: 30,
362
+ };
363
+
364
+ this.driver
365
+ .enqueueSendDataRequest(req)
366
+ .then(() => {})
367
+ .catch(() => {});
368
+
369
+ if (!disableResponse) {
370
+ const responseClusterId = Zdo.Utils.getResponseClusterId(clusterId);
371
+
372
+ if (responseClusterId) {
373
+ try {
374
+ const response = await this.waitForData(isNwkAddrRequest ? ieeeAddress : networkAddress, Zdo.ZDO_PROFILE_ID, responseClusterId);
375
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
376
+ return response.zdo! as ZdoTypes.RequestToResponseMap[K];
377
+ } catch (error) {
378
+ if (responseClusterId === Zdo.ClusterId.ACTIVE_ENDPOINTS_RESPONSE && networkAddress === 0) {
379
+ logger.warning("Failed to determine active endpoints of coordinator, falling back to [1]", NS);
380
+ // Some Conbee adapaters don't provide a response to an active endpoint request of the coordinator, always return
381
+ // an endpoint here. Before an active endpoint request was done to determine the endpoints, they were hardcoded:
382
+ // https://github.com/Koenkk/zigbee-herdsman/blob/d855b3bf85a066cb7c325fe3ef0006873c735add/src/adapter/deconz/adapter/deconzAdapter.ts#L105
383
+ const response: ZdoTypes.ResponseMap[Zdo.ClusterId.ACTIVE_ENDPOINTS_RESPONSE] = [
384
+ Zdo.Status.SUCCESS,
385
+ {endpointList: [1], nwkAddress: 0},
386
+ ];
387
+ return response as ZdoTypes.RequestToResponseMap[K];
388
+ }
389
+
390
+ throw error;
391
+ }
392
+ }
393
+ }
394
+ }
395
+
396
+ public async sendZclFrameToEndpoint(
397
+ _ieeeAddr: string,
398
+ networkAddress: number,
399
+ endpoint: number,
400
+ zclFrame: Zcl.Frame,
401
+ timeout: number,
402
+ disableResponse: boolean,
403
+ _disableRecovery: boolean,
404
+ sourceEndpoint?: number,
405
+ ): Promise<Events.ZclPayload | undefined> {
406
+ const transactionID = this.nextTransactionID();
407
+ const payload = zclFrame.toBuffer();
408
+ const request: ApsDataRequest = {
409
+ requestId: transactionID,
410
+ destAddrMode: PARAM.PARAM.addressMode.NWK_ADDR,
411
+ destAddr16: networkAddress,
412
+ destEndpoint: endpoint,
413
+ profileId: sourceEndpoint === 242 && endpoint === 242 ? 0xa1e0 : 0x104,
414
+ clusterId: zclFrame.cluster.ID,
415
+ srcEndpoint: sourceEndpoint || 1,
416
+ asduLength: payload.length,
417
+ asduPayload: payload,
418
+ txOptions: this.txOptions, // 0x00 normal, 0x04 APS ACK
419
+ radius: PARAM.PARAM.txRadius.DEFAULT_RADIUS,
420
+ timeout: timeout,
421
+ };
422
+
423
+ const command = zclFrame.command;
424
+
425
+ this.driver
426
+ .enqueueSendDataRequest(request)
427
+ .then(() => {
428
+ logger.debug(`sendZclFrameToEndpoint - message send with transSeq Nr.: ${zclFrame.header.transactionSequenceNumber}`, NS);
429
+ logger.debug(
430
+ `${command.response !== undefined}, ${zclFrame.header.frameControl.disableDefaultResponse}, ${disableResponse}, ${request.timeout}`,
431
+ NS,
432
+ );
433
+
434
+ if (command.response === undefined || zclFrame.header.frameControl.disableDefaultResponse || !disableResponse) {
435
+ logger.debug(`resolve request (${zclFrame.header.transactionSequenceNumber})`, NS);
436
+ return Promise.resolve();
437
+ }
438
+ })
439
+ .catch((error) => {
440
+ logger.debug(`sendZclFrameToEndpoint ERROR (${zclFrame.header.transactionSequenceNumber})`, NS);
441
+ logger.debug(error, NS);
442
+ //return Promise.reject(new Error("sendZclFrameToEndpoint ERROR " + error));
443
+ });
444
+
445
+ try {
446
+ let data = null;
447
+ if ((command.response !== undefined && !disableResponse) || !zclFrame.header.frameControl.disableDefaultResponse) {
448
+ data = await this.waitForData(
449
+ networkAddress,
450
+ ZSpec.HA_PROFILE_ID,
451
+ zclFrame.cluster.ID,
452
+ zclFrame.header.transactionSequenceNumber,
453
+ request.timeout,
454
+ );
455
+ }
456
+
457
+ if (data !== null) {
458
+ const response: Events.ZclPayload = {
459
+ address:
460
+ data.srcAddr16 ??
461
+ `0x${
462
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
463
+ data.srcAddr64!
464
+ }`,
465
+ data: data.asduPayload,
466
+ clusterID: zclFrame.cluster.ID,
467
+ header: Zcl.Header.fromBuffer(data.asduPayload),
468
+ endpoint: data.srcEndpoint,
469
+ linkquality: data.lqi,
470
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
471
+ groupID: data.srcAddrMode === 0x01 ? data.srcAddr16! : 0,
472
+ wasBroadcast: data.srcAddrMode === 0x01 || data.srcAddrMode === 0xf,
473
+ destinationEndpoint: data.destEndpoint,
474
+ };
475
+ logger.debug(`response received (${zclFrame.header.transactionSequenceNumber})`, NS);
476
+ return response;
477
+ }
478
+
479
+ logger.debug(`no response expected (${zclFrame.header.transactionSequenceNumber})`, NS);
480
+ } catch (error) {
481
+ throw new Error(`no response received (${zclFrame.header.transactionSequenceNumber}) ${error}`);
482
+ }
483
+ }
484
+
485
+ public async sendZclFrameToGroup(groupID: number, zclFrame: Zcl.Frame): Promise<void> {
486
+ const transactionID = this.nextTransactionID();
487
+ const payload = zclFrame.toBuffer();
488
+
489
+ logger.debug(`zclFrame to group - ${groupID}`, NS);
490
+
491
+ const request: ApsDataRequest = {
492
+ requestId: transactionID,
493
+ destAddrMode: PARAM.PARAM.addressMode.GROUP_ADDR,
494
+ destAddr16: groupID,
495
+ profileId: 0x104,
496
+ clusterId: zclFrame.cluster.ID,
497
+ srcEndpoint: 1,
498
+ asduLength: payload.length,
499
+ asduPayload: payload,
500
+ txOptions: 0,
501
+ radius: PARAM.PARAM.txRadius.UNLIMITED,
502
+ };
503
+
504
+ logger.debug("sendZclFrameToGroup - message send", NS);
505
+ return await (this.driver.enqueueSendDataRequest(request) as Promise<void>);
506
+ }
507
+
508
+ public async sendZclFrameToAll(endpoint: number, zclFrame: Zcl.Frame, sourceEndpoint: number, destination: BroadcastAddress): Promise<void> {
509
+ const transactionID = this.nextTransactionID();
510
+ const payload = zclFrame.toBuffer();
511
+
512
+ logger.debug(`zclFrame to all - ${endpoint}`, NS);
513
+
514
+ const request: ApsDataRequest = {
515
+ requestId: transactionID,
516
+ destAddrMode: PARAM.PARAM.addressMode.NWK_ADDR,
517
+ destAddr16: destination,
518
+ destEndpoint: endpoint,
519
+ profileId: sourceEndpoint === 242 && endpoint === 242 ? 0xa1e0 : 0x104,
520
+ clusterId: zclFrame.cluster.ID,
521
+ srcEndpoint: sourceEndpoint,
522
+ asduLength: payload.length,
523
+ asduPayload: payload,
524
+ txOptions: 0,
525
+ radius: PARAM.PARAM.txRadius.UNLIMITED,
526
+ };
527
+
528
+ logger.debug("sendZclFrameToAll - message send", NS);
529
+ return await (this.driver.enqueueSendDataRequest(request) as Promise<void>);
530
+ }
531
+
532
+ public async supportsBackup(): Promise<boolean> {
533
+ return await Promise.resolve(false);
534
+ }
535
+
536
+ public async backup(): Promise<Models.Backup> {
537
+ return await Promise.reject(new Error("This adapter does not support backup"));
538
+ }
539
+
540
+ public async getNetworkParameters(): Promise<NetworkParameters> {
541
+ try {
542
+ const panid = await this.driver.readParameterRequest(PARAM.PARAM.Network.PAN_ID);
543
+ const expanid = await this.driver.readParameterRequest(PARAM.PARAM.Network.APS_EXT_PAN_ID);
544
+ const channel = await this.driver.readParameterRequest(PARAM.PARAM.Network.CHANNEL);
545
+ // For some reason, reading NWK_UPDATE_ID always returns `null` (tested with `0x26780700` on Conbee II)
546
+ // 0x24 was taken from https://github.com/zigpy/zigpy-deconz/blob/70910bc6a63e607332b4f12754ba470651eb878c/zigpy_deconz/api.py#L152
547
+ // const nwkUpdateId = await this.driver.readParameterRequest(0x24 /*PARAM.PARAM.Network.NWK_UPDATE_ID*/);
548
+
549
+ return {
550
+ panID: panid as number,
551
+ extendedPanID: expanid as string, // read as `0x...`
552
+ channel: channel as number,
553
+ nwkUpdateID: 0 as number,
554
+ };
555
+ } catch (error) {
556
+ const msg = `get network parameters Error:${error}`;
557
+ logger.debug(msg, NS);
558
+ return await Promise.reject(new Error(msg));
559
+ }
560
+ }
561
+
562
+ public async restoreChannelInterPAN(): Promise<void> {
563
+ await Promise.reject(new Error("not supported"));
564
+ }
565
+ public async sendZclFrameInterPANToIeeeAddr(_zclFrame: Zcl.Frame, _ieeeAddr: string): Promise<void> {
566
+ await Promise.reject(new Error("not supported"));
567
+ }
568
+ public async sendZclFrameInterPANBroadcast(_zclFrame: Zcl.Frame, _timeout: number): Promise<Events.ZclPayload> {
569
+ return await Promise.reject(new Error("not supported"));
570
+ }
571
+ public async sendZclFrameInterPANBroadcastWithResponse(_zclFrame: Zcl.Frame, _timeout: number): Promise<Events.ZclPayload> {
572
+ return await Promise.reject(new Error("not supported"));
573
+ }
574
+ public async setChannelInterPAN(_channel: number): Promise<void> {
575
+ await Promise.reject(new Error("not supported"));
576
+ }
577
+ public async sendZclFrameInterPANIeeeAddr(_zclFrame: Zcl.Frame, _ieeeAddr: string): Promise<void> {
578
+ await Promise.reject(new Error("not supported"));
579
+ }
580
+
581
+ /**
582
+ * Private methods
583
+ */
584
+
585
+ private waitForData(
586
+ addr: number | string,
587
+ profileId: number,
588
+ clusterId: number,
589
+ transactionSequenceNumber?: number,
590
+ timeout?: number,
591
+ ): Promise<ReceivedDataResponse> {
592
+ return new Promise((resolve, reject): void => {
593
+ const ts = Date.now();
594
+ // const commandId = PARAM.PARAM.APS.DATA_INDICATION;
595
+ const req: WaitForDataRequest = {addr, profileId, clusterId, transactionSequenceNumber, resolve, reject, ts, timeout};
596
+ this.openRequestsQueue.push(req);
597
+ });
598
+ }
599
+
600
+ private checkReceivedGreenPowerIndication(ind: GpDataInd): void {
601
+ const gpdHeader = Buffer.alloc(15); // applicationId === IEEE_ADDRESS ? 20 : 15
602
+ gpdHeader.writeUInt8(0b00000001, 0); // frameControl: FrameType.SPECIFIC + Direction.CLIENT_TO_SERVER + disableDefaultResponse=false
603
+ gpdHeader.writeUInt8(ind.seqNr, 1);
604
+ gpdHeader.writeUInt8(ind.id, 2); // commandIdentifier
605
+ gpdHeader.writeUInt16LE(ind.options, 3); // options
606
+ gpdHeader.writeUInt32LE(ind.srcId, 5);
607
+ // omitted: gpdIEEEAddr (ieeeAddr)
608
+ // omitted: gpdEndpoint (uint8)
609
+ gpdHeader.writeUInt32LE(ind.frameCounter, 9);
610
+ gpdHeader.writeUInt8(ind.commandId, 13);
611
+ gpdHeader.writeUInt8(ind.commandFrameSize, 14);
612
+
613
+ const payBuf = Buffer.concat([gpdHeader, ind.commandFrame]);
614
+ const payload: Events.ZclPayload = {
615
+ header: Zcl.Header.fromBuffer(payBuf),
616
+ data: payBuf,
617
+ clusterID: Zcl.Clusters.greenPower.ID,
618
+ address: ind.srcId & 0xffff,
619
+ endpoint: ZSpec.GP_ENDPOINT,
620
+ linkquality: 0xff, // bogus
621
+ groupID: ZSpec.GP_GROUP_ID,
622
+ wasBroadcast: true, // Take the codepath that doesn't require `gppNwkAddr` as its not present in the payload
623
+ destinationEndpoint: ZSpec.GP_ENDPOINT,
624
+ };
625
+
626
+ this.waitress.resolve(payload);
627
+ this.emit("zclPayload", payload);
628
+ }
629
+
630
+ private checkReceivedDataPayload(resp: ReceivedDataResponse | null): void {
631
+ let srcAddr: number | undefined;
632
+ let srcEUI64: string | undefined;
633
+ let header: Zcl.Header | undefined;
634
+
635
+ if (resp) {
636
+ if (resp.srcAddr16 != null) {
637
+ srcAddr = resp.srcAddr16;
638
+ } else {
639
+ // For some devices srcAddr64 is reported by ConBee 3, even if the frame contains both
640
+ // srcAddr16 and srcAddr64. This happens even if the request was sent to a short address.
641
+ // At least some parts, e.g. the while loop below, only work with srcAddr16 (i.e. the network
642
+ // address) being set. So we try to look up the network address in the list of know devices.
643
+ if (resp.srcAddr64 != null) {
644
+ logger.debug(`Try to find network address of ${resp.srcAddr64}`, NS);
645
+ // Note: Device expects addresses with a 0x prefix...
646
+ srcAddr = Device.byIeeeAddr(`0x${resp.srcAddr64}`, false)?.networkAddress;
647
+ // apperantly some functions furhter up in the protocol stack expect this to be set.
648
+ // so let's make sure they get the network address
649
+ // Note: srcAddr16 can be undefined after this and this is intended behavior
650
+ // there are zigbee frames which do not contain a 16 bit address, e.g. during joining.
651
+ // So any code that relies on srcAddr16 must handle this in some way.
652
+ resp.srcAddr16 = srcAddr;
653
+ }
654
+ }
655
+
656
+ if (resp.profileId === Zdo.ZDO_PROFILE_ID) {
657
+ if (resp.clusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE) {
658
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
659
+ if (Zdo.Buffalo.checkStatus<Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE>(resp.zdo!)) {
660
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
661
+ srcEUI64 = resp.zdo![1].eui64;
662
+ }
663
+ } else if (resp.clusterId === Zdo.ClusterId.END_DEVICE_ANNOUNCE) {
664
+ // XXX: using same response for announce (handled by controller) or joined depending on permit join status?
665
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
666
+ if (this.joinPermitted === true && Zdo.Buffalo.checkStatus<Zdo.ClusterId.END_DEVICE_ANNOUNCE>(resp.zdo!)) {
667
+ const payload = resp.zdo[1];
668
+
669
+ this.emit("deviceJoined", {networkAddress: payload.nwkAddress, ieeeAddr: payload.eui64});
670
+ }
671
+ }
672
+
673
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
674
+ this.emit("zdoResponse", resp.clusterId, resp.zdo!);
675
+ } else {
676
+ header = Zcl.Header.fromBuffer(resp.asduPayload);
677
+ }
678
+ }
679
+
680
+ let i = this.openRequestsQueue.length;
681
+
682
+ while (i--) {
683
+ const req: WaitForDataRequest = this.openRequestsQueue[i];
684
+
685
+ if (
686
+ resp &&
687
+ (req.addr === undefined ||
688
+ (typeof req.addr === "number" ? srcAddr !== undefined && req.addr === srcAddr : srcEUI64 && req.addr === srcEUI64)) &&
689
+ req.clusterId === resp.clusterId &&
690
+ req.profileId === resp.profileId &&
691
+ (header === undefined ||
692
+ req.transactionSequenceNumber === undefined ||
693
+ req.transactionSequenceNumber === header.transactionSequenceNumber)
694
+ ) {
695
+ this.openRequestsQueue.splice(i, 1);
696
+ req.resolve(resp);
697
+ }
698
+
699
+ const now = Date.now();
700
+
701
+ // Default timeout: 60 seconds.
702
+ // Comparison is negated to prevent orphans when invalid timeout is entered (resulting in NaN).
703
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
704
+ if (!(now - req.ts! <= (req.timeout ?? 60000))) {
705
+ //logger.debug("Timeout for request in openRequestsQueue addr: " + req.addr.toString(16) + " clusterId: " + req.clusterId.toString(16) + " profileId: " + req.profileId.toString(16), NS);
706
+ //remove from busyQueue
707
+ this.openRequestsQueue.splice(i, 1);
708
+ req.reject(new Error("waiting for response TIMEOUT"));
709
+ }
710
+ }
711
+
712
+ if (resp && resp.profileId !== Zdo.ZDO_PROFILE_ID) {
713
+ const payload: Events.ZclPayload = {
714
+ clusterID: resp.clusterId,
715
+ header,
716
+ data: resp.asduPayload,
717
+ address:
718
+ resp.srcAddrMode === 0x03
719
+ ? `0x${
720
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
721
+ resp.srcAddr64!
722
+ }`
723
+ : // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
724
+ resp.srcAddr16!,
725
+ endpoint: resp.srcEndpoint,
726
+ linkquality: resp.lqi,
727
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
728
+ groupID: resp.destAddrMode === 0x01 ? resp.destAddr16! : 0,
729
+ wasBroadcast: resp.destAddrMode === 0x01 || resp.destAddrMode === 0xf,
730
+ destinationEndpoint: resp.destEndpoint,
731
+ };
732
+
733
+ this.waitress.resolve(payload);
734
+ this.emit("zclPayload", payload);
735
+ }
736
+ }
737
+
738
+ private nextTransactionID(): number {
739
+ this.transactionID++;
740
+
741
+ if (this.transactionID > 255) {
742
+ this.transactionID = 1;
743
+ }
744
+
745
+ return this.transactionID;
746
+ }
747
+
748
+ private waitressTimeoutFormatter(matcher: WaitressMatcher, timeout: number): string {
749
+ return (
750
+ `Timeout - ${matcher.address} - ${matcher.endpoint}` +
751
+ ` - ${matcher.transactionSequenceNumber} - ${matcher.clusterID}` +
752
+ ` - ${matcher.commandIdentifier} after ${timeout}ms`
753
+ );
754
+ }
755
+
756
+ private waitressValidator(payload: Events.ZclPayload, matcher: WaitressMatcher): boolean {
757
+ return Boolean(
758
+ payload.header &&
759
+ (!matcher.address || payload.address === matcher.address) &&
760
+ payload.endpoint === matcher.endpoint &&
761
+ (!matcher.transactionSequenceNumber || payload.header.transactionSequenceNumber === matcher.transactionSequenceNumber) &&
762
+ payload.clusterID === matcher.clusterID &&
763
+ matcher.frameType === payload.header.frameControl.frameType &&
764
+ matcher.commandIdentifier === payload.header.commandIdentifier &&
765
+ matcher.direction === payload.header.frameControl.direction,
766
+ );
767
+ }
768
+ }