@willieee802/zigbee-herdsman 0.34.3 → 0.48.1

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 (438) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +403 -0
  3. package/dist/adapter/adapter.d.ts +14 -13
  4. package/dist/adapter/adapter.d.ts.map +1 -1
  5. package/dist/adapter/adapter.js +15 -17
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +14 -12
  8. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  9. package/dist/adapter/deconz/adapter/deconzAdapter.js +118 -128
  10. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  11. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
  12. package/dist/adapter/deconz/driver/driver.js +44 -44
  13. package/dist/adapter/deconz/driver/driver.js.map +1 -1
  14. package/dist/adapter/deconz/driver/frameParser.js +43 -43
  15. package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
  16. package/dist/adapter/deconz/driver/parser.js +6 -6
  17. package/dist/adapter/deconz/driver/parser.js.map +1 -1
  18. package/dist/adapter/deconz/driver/writer.js +3 -3
  19. package/dist/adapter/deconz/driver/writer.js.map +1 -1
  20. package/dist/adapter/ember/adapter/emberAdapter.d.ts +60 -71
  21. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  22. package/dist/adapter/ember/adapter/emberAdapter.js +453 -492
  23. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
  24. package/dist/adapter/ember/adapter/endpoints.d.ts +5 -3
  25. package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -1
  26. package/dist/adapter/ember/adapter/endpoints.js +33 -31
  27. package/dist/adapter/ember/adapter/endpoints.js.map +1 -1
  28. package/dist/adapter/ember/adapter/oneWaitress.d.ts +16 -5
  29. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
  30. package/dist/adapter/ember/adapter/oneWaitress.js +19 -4
  31. package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -1
  32. package/dist/adapter/ember/adapter/requestQueue.d.ts +2 -4
  33. package/dist/adapter/ember/adapter/requestQueue.d.ts.map +1 -1
  34. package/dist/adapter/ember/adapter/requestQueue.js +17 -22
  35. package/dist/adapter/ember/adapter/requestQueue.js.map +1 -1
  36. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -1
  37. package/dist/adapter/ember/adapter/tokensManager.js +23 -20
  38. package/dist/adapter/ember/adapter/tokensManager.js.map +1 -1
  39. package/dist/adapter/ember/consts.d.ts +0 -7
  40. package/dist/adapter/ember/consts.d.ts.map +1 -1
  41. package/dist/adapter/ember/consts.js +2 -9
  42. package/dist/adapter/ember/consts.js.map +1 -1
  43. package/dist/adapter/ember/enums.d.ts +133 -145
  44. package/dist/adapter/ember/enums.d.ts.map +1 -1
  45. package/dist/adapter/ember/enums.js +132 -148
  46. package/dist/adapter/ember/enums.js.map +1 -1
  47. package/dist/adapter/ember/ezsp/buffalo.js +4 -4
  48. package/dist/adapter/ember/ezsp/buffalo.js.map +1 -1
  49. package/dist/adapter/ember/ezsp/ezsp.d.ts +1 -3
  50. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
  51. package/dist/adapter/ember/ezsp/ezsp.js +224 -208
  52. package/dist/adapter/ember/ezsp/ezsp.js.map +1 -1
  53. package/dist/adapter/ember/types.d.ts +9 -9
  54. package/dist/adapter/ember/types.d.ts.map +1 -1
  55. package/dist/adapter/ember/uart/ash.d.ts +27 -14
  56. package/dist/adapter/ember/uart/ash.d.ts.map +1 -1
  57. package/dist/adapter/ember/uart/ash.js +158 -109
  58. package/dist/adapter/ember/uart/ash.js.map +1 -1
  59. package/dist/adapter/ember/uart/consts.d.ts +1 -1
  60. package/dist/adapter/ember/uart/consts.js +1 -1
  61. package/dist/adapter/ember/uart/parser.d.ts.map +1 -1
  62. package/dist/adapter/ember/uart/parser.js +5 -9
  63. package/dist/adapter/ember/uart/parser.js.map +1 -1
  64. package/dist/adapter/ember/uart/queues.d.ts.map +1 -1
  65. package/dist/adapter/ember/uart/queues.js +3 -1
  66. package/dist/adapter/ember/uart/queues.js.map +1 -1
  67. package/dist/adapter/ember/uart/writer.d.ts.map +1 -1
  68. package/dist/adapter/ember/uart/writer.js +4 -6
  69. package/dist/adapter/ember/uart/writer.js.map +1 -1
  70. package/dist/adapter/ember/zdo.d.ts +6 -2
  71. package/dist/adapter/ember/zdo.d.ts.map +1 -1
  72. package/dist/adapter/ember/zdo.js +2 -2
  73. package/dist/adapter/ember/zdo.js.map +1 -1
  74. package/dist/adapter/events.d.ts +17 -23
  75. package/dist/adapter/events.d.ts.map +1 -1
  76. package/dist/adapter/events.js +1 -2
  77. package/dist/adapter/events.js.map +1 -1
  78. package/dist/adapter/ezsp/adapter/backup.d.ts +4 -1
  79. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
  80. package/dist/adapter/ezsp/adapter/backup.js +35 -7
  81. package/dist/adapter/ezsp/adapter/backup.js.map +1 -1
  82. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +12 -9
  83. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  84. package/dist/adapter/ezsp/adapter/ezspAdapter.js +79 -75
  85. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  86. package/dist/adapter/ezsp/driver/commands.d.ts.map +1 -1
  87. package/dist/adapter/ezsp/driver/commands.js +3 -5
  88. package/dist/adapter/ezsp/driver/commands.js.map +1 -1
  89. package/dist/adapter/ezsp/driver/driver.d.ts +4 -2
  90. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  91. package/dist/adapter/ezsp/driver/driver.js +183 -119
  92. package/dist/adapter/ezsp/driver/driver.js.map +1 -1
  93. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
  94. package/dist/adapter/ezsp/driver/ezsp.js +62 -50
  95. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
  96. package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -1
  97. package/dist/adapter/ezsp/driver/multicast.js +8 -12
  98. package/dist/adapter/ezsp/driver/multicast.js.map +1 -1
  99. package/dist/adapter/ezsp/driver/parser.js +5 -5
  100. package/dist/adapter/ezsp/driver/parser.js.map +1 -1
  101. package/dist/adapter/ezsp/driver/types/basic.js +1 -1
  102. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
  103. package/dist/adapter/ezsp/driver/types/named.js +2 -2
  104. package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
  105. package/dist/adapter/ezsp/driver/types/struct.d.ts +1 -1
  106. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +1 -1
  107. package/dist/adapter/ezsp/driver/types/struct.js +2 -2
  108. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  109. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
  110. package/dist/adapter/ezsp/driver/uart.js +46 -46
  111. package/dist/adapter/ezsp/driver/uart.js.map +1 -1
  112. package/dist/adapter/ezsp/driver/utils/index.d.ts +2 -1
  113. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +1 -1
  114. package/dist/adapter/ezsp/driver/utils/index.js +2 -2
  115. package/dist/adapter/ezsp/driver/utils/index.js.map +1 -1
  116. package/dist/adapter/ezsp/driver/writer.js +3 -6
  117. package/dist/adapter/ezsp/driver/writer.js.map +1 -1
  118. package/dist/adapter/serialPort.d.ts +3 -0
  119. package/dist/adapter/serialPort.d.ts.map +1 -1
  120. package/dist/adapter/serialPort.js +16 -23
  121. package/dist/adapter/serialPort.js.map +1 -1
  122. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -1
  123. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -1
  124. package/dist/adapter/z-stack/adapter/adapter-backup.js +25 -29
  125. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
  126. package/dist/adapter/z-stack/adapter/endpoints.js +4 -4
  127. package/dist/adapter/z-stack/adapter/endpoints.js.map +1 -1
  128. package/dist/adapter/z-stack/adapter/manager.d.ts +1 -4
  129. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  130. package/dist/adapter/z-stack/adapter/manager.js +52 -61
  131. package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
  132. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +12 -10
  133. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  134. package/dist/adapter/z-stack/adapter/zStackAdapter.js +102 -84
  135. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  136. package/dist/adapter/z-stack/unpi/parser.js +6 -6
  137. package/dist/adapter/z-stack/unpi/parser.js.map +1 -1
  138. package/dist/adapter/z-stack/unpi/writer.js +4 -7
  139. package/dist/adapter/z-stack/unpi/writer.js.map +1 -1
  140. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +4 -2
  141. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +1 -1
  142. package/dist/adapter/z-stack/znp/buffaloZnp.js +154 -25
  143. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -1
  144. package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -1
  145. package/dist/adapter/z-stack/znp/definition.js +2 -1
  146. package/dist/adapter/z-stack/znp/definition.js.map +1 -1
  147. package/dist/adapter/z-stack/znp/tstype.d.ts +4 -3
  148. package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -1
  149. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  150. package/dist/adapter/z-stack/znp/znp.js +18 -25
  151. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  152. package/dist/adapter/z-stack/znp/zpiObject.js +2 -2
  153. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
  154. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +13 -12
  155. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  156. package/dist/adapter/zigate/adapter/zigateAdapter.js +81 -90
  157. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  158. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +7 -8
  159. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
  160. package/dist/adapter/zigate/driver/buffaloZiGate.js +150 -100
  161. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  162. package/dist/adapter/zigate/driver/commandType.d.ts +2 -1
  163. package/dist/adapter/zigate/driver/commandType.d.ts.map +1 -1
  164. package/dist/adapter/zigate/driver/commandType.js +56 -52
  165. package/dist/adapter/zigate/driver/commandType.js.map +1 -1
  166. package/dist/adapter/zigate/driver/frame.d.ts.map +1 -1
  167. package/dist/adapter/zigate/driver/frame.js +8 -8
  168. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  169. package/dist/adapter/zigate/driver/messageType.d.ts +2 -1
  170. package/dist/adapter/zigate/driver/messageType.d.ts.map +1 -1
  171. package/dist/adapter/zigate/driver/messageType.js +113 -108
  172. package/dist/adapter/zigate/driver/messageType.js.map +1 -1
  173. package/dist/adapter/zigate/driver/parameterType.d.ts +8 -1
  174. package/dist/adapter/zigate/driver/parameterType.d.ts.map +1 -1
  175. package/dist/adapter/zigate/driver/parameterType.js +9 -0
  176. package/dist/adapter/zigate/driver/parameterType.js.map +1 -1
  177. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
  178. package/dist/adapter/zigate/driver/ziGateObject.js +9 -9
  179. package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -1
  180. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  181. package/dist/adapter/zigate/driver/zigate.js +23 -31
  182. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  183. package/dist/buffalo/buffalo.d.ts +23 -19
  184. package/dist/buffalo/buffalo.d.ts.map +1 -1
  185. package/dist/buffalo/buffalo.js +74 -169
  186. package/dist/buffalo/buffalo.js.map +1 -1
  187. package/dist/buffalo/index.d.ts +1 -2
  188. package/dist/buffalo/index.d.ts.map +1 -1
  189. package/dist/buffalo/index.js +1 -26
  190. package/dist/buffalo/index.js.map +1 -1
  191. package/dist/controller/controller.d.ts +8 -5
  192. package/dist/controller/controller.d.ts.map +1 -1
  193. package/dist/controller/controller.js +181 -126
  194. package/dist/controller/controller.js.map +1 -1
  195. package/dist/controller/database.d.ts +1 -0
  196. package/dist/controller/database.d.ts.map +1 -1
  197. package/dist/controller/database.js +7 -10
  198. package/dist/controller/database.js.map +1 -1
  199. package/dist/controller/events.d.ts +2 -2
  200. package/dist/controller/events.d.ts.map +1 -1
  201. package/dist/controller/events.js +4 -0
  202. package/dist/controller/events.js.map +1 -1
  203. package/dist/controller/greenPower.d.ts +2 -1
  204. package/dist/controller/greenPower.d.ts.map +1 -1
  205. package/dist/controller/greenPower.js +51 -57
  206. package/dist/controller/greenPower.js.map +1 -1
  207. package/dist/controller/helpers/request.d.ts +3 -3
  208. package/dist/controller/helpers/request.d.ts.map +1 -1
  209. package/dist/controller/helpers/request.js +2 -2
  210. package/dist/controller/helpers/request.js.map +1 -1
  211. package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
  212. package/dist/controller/helpers/requestQueue.js +26 -36
  213. package/dist/controller/helpers/requestQueue.js.map +1 -1
  214. package/dist/controller/helpers/zclFrameConverter.d.ts +4 -3
  215. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
  216. package/dist/controller/helpers/zclFrameConverter.js +33 -14
  217. package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
  218. package/dist/controller/model/device.d.ts +12 -5
  219. package/dist/controller/model/device.d.ts.map +1 -1
  220. package/dist/controller/model/device.js +108 -87
  221. package/dist/controller/model/device.js.map +1 -1
  222. package/dist/controller/model/endpoint.d.ts +22 -17
  223. package/dist/controller/model/endpoint.d.ts.map +1 -1
  224. package/dist/controller/model/endpoint.js +139 -228
  225. package/dist/controller/model/endpoint.js.map +1 -1
  226. package/dist/controller/model/group.d.ts +1 -1
  227. package/dist/controller/model/group.d.ts.map +1 -1
  228. package/dist/controller/model/group.js +18 -18
  229. package/dist/controller/model/group.js.map +1 -1
  230. package/dist/controller/touchlink.js +25 -28
  231. package/dist/controller/touchlink.js.map +1 -1
  232. package/dist/index.d.ts +5 -3
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +8 -5
  235. package/dist/index.js.map +1 -1
  236. package/dist/utils/logger.d.ts +9 -0
  237. package/dist/utils/logger.d.ts.map +1 -0
  238. package/dist/utils/logger.js +14 -0
  239. package/dist/utils/logger.js.map +1 -0
  240. package/dist/zspec/consts.d.ts +60 -0
  241. package/dist/zspec/consts.d.ts.map +1 -0
  242. package/dist/zspec/consts.js +64 -0
  243. package/dist/zspec/consts.js.map +1 -0
  244. package/dist/zspec/enums.d.ts +19 -0
  245. package/dist/zspec/enums.d.ts.map +1 -0
  246. package/dist/zspec/enums.js +28 -0
  247. package/dist/zspec/enums.js.map +1 -0
  248. package/dist/zspec/index.d.ts +4 -0
  249. package/dist/zspec/index.d.ts.map +1 -0
  250. package/dist/zspec/index.js +43 -0
  251. package/dist/zspec/index.js.map +1 -0
  252. package/dist/zspec/tstypes.d.ts +19 -0
  253. package/dist/zspec/tstypes.d.ts.map +1 -0
  254. package/dist/{buffalo/tstype.js → zspec/tstypes.js} +1 -1
  255. package/dist/zspec/tstypes.js.map +1 -0
  256. package/dist/zspec/utils.d.ts +14 -0
  257. package/dist/zspec/utils.d.ts.map +1 -0
  258. package/dist/zspec/utils.js +29 -0
  259. package/dist/zspec/utils.js.map +1 -0
  260. package/dist/zspec/zcl/buffaloZcl.d.ts +55 -0
  261. package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -0
  262. package/dist/zspec/zcl/buffaloZcl.js +929 -0
  263. package/dist/zspec/zcl/buffaloZcl.js.map +1 -0
  264. package/dist/zspec/zcl/definition/cluster.d.ts +3 -0
  265. package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -0
  266. package/dist/zspec/zcl/definition/cluster.js +5500 -0
  267. package/dist/zspec/zcl/definition/cluster.js.map +1 -0
  268. package/dist/zspec/zcl/definition/consts.d.ts +9 -0
  269. package/dist/zspec/zcl/definition/consts.d.ts.map +1 -0
  270. package/dist/zspec/zcl/definition/consts.js +27 -0
  271. package/dist/zspec/zcl/definition/consts.js.map +1 -0
  272. package/dist/zspec/zcl/definition/enums.d.ts +177 -0
  273. package/dist/zspec/zcl/definition/enums.d.ts.map +1 -0
  274. package/dist/zspec/zcl/definition/enums.js +187 -0
  275. package/dist/zspec/zcl/definition/enums.js.map +1 -0
  276. package/dist/zspec/zcl/definition/foundation.d.ts +11 -0
  277. package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -0
  278. package/dist/zspec/zcl/definition/foundation.js +241 -0
  279. package/dist/zspec/zcl/definition/foundation.js.map +1 -0
  280. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +727 -0
  281. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +1 -0
  282. package/dist/zspec/zcl/definition/manufacturerCode.js +733 -0
  283. package/dist/zspec/zcl/definition/manufacturerCode.js.map +1 -0
  284. package/dist/zspec/zcl/definition/status.d.ts +69 -0
  285. package/dist/zspec/zcl/definition/status.d.ts.map +1 -0
  286. package/dist/zspec/zcl/definition/status.js +74 -0
  287. package/dist/zspec/zcl/definition/status.js.map +1 -0
  288. package/dist/zspec/zcl/definition/tstype.d.ts +114 -0
  289. package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -0
  290. package/dist/{zcl/zclHeader.js → zspec/zcl/definition/tstype.js} +2 -1
  291. package/dist/zspec/zcl/definition/tstype.js.map +1 -0
  292. package/dist/zspec/zcl/index.d.ts +11 -0
  293. package/dist/zspec/zcl/index.d.ts.map +1 -0
  294. package/dist/zspec/zcl/index.js +47 -0
  295. package/dist/zspec/zcl/index.js.map +1 -0
  296. package/dist/zspec/zcl/utils.d.ts +7 -0
  297. package/dist/zspec/zcl/utils.d.ts.map +1 -0
  298. package/dist/zspec/zcl/utils.js +234 -0
  299. package/dist/zspec/zcl/utils.js.map +1 -0
  300. package/dist/zspec/zcl/zclFrame.d.ts +36 -0
  301. package/dist/zspec/zcl/zclFrame.d.ts.map +1 -0
  302. package/dist/zspec/zcl/zclFrame.js +304 -0
  303. package/dist/zspec/zcl/zclFrame.js.map +1 -0
  304. package/dist/zspec/zcl/zclHeader.d.ts +17 -0
  305. package/dist/zspec/zcl/zclHeader.d.ts.map +1 -0
  306. package/dist/zspec/zcl/zclHeader.js +88 -0
  307. package/dist/zspec/zcl/zclHeader.js.map +1 -0
  308. package/dist/zspec/zcl/zclStatusError.d.ts +6 -0
  309. package/dist/zspec/zcl/zclStatusError.d.ts.map +1 -0
  310. package/dist/zspec/zcl/zclStatusError.js +13 -0
  311. package/dist/zspec/zcl/zclStatusError.js.map +1 -0
  312. package/dist/zspec/zdo/buffaloZdo.d.ts +438 -0
  313. package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -0
  314. package/dist/zspec/zdo/buffaloZdo.js +1892 -0
  315. package/dist/zspec/zdo/buffaloZdo.js.map +1 -0
  316. package/dist/zspec/zdo/definition/clusters.d.ts +624 -0
  317. package/dist/zspec/zdo/definition/clusters.d.ts.map +1 -0
  318. package/dist/zspec/zdo/definition/clusters.js +687 -0
  319. package/dist/zspec/zdo/definition/clusters.js.map +1 -0
  320. package/dist/zspec/zdo/definition/consts.d.ts +13 -0
  321. package/dist/zspec/zdo/definition/consts.d.ts.map +1 -0
  322. package/dist/zspec/zdo/definition/consts.js +16 -0
  323. package/dist/zspec/zdo/definition/consts.js.map +1 -0
  324. package/dist/zspec/zdo/definition/enums.d.ts +75 -0
  325. package/dist/zspec/zdo/definition/enums.d.ts.map +1 -0
  326. package/dist/zspec/zdo/definition/enums.js +97 -0
  327. package/dist/zspec/zdo/definition/enums.js.map +1 -0
  328. package/dist/zspec/zdo/definition/status.d.ts +99 -0
  329. package/dist/zspec/zdo/definition/status.d.ts.map +1 -0
  330. package/dist/zspec/zdo/definition/status.js +109 -0
  331. package/dist/zspec/zdo/definition/status.js.map +1 -0
  332. package/dist/zspec/zdo/definition/tstypes.d.ts +787 -0
  333. package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -0
  334. package/dist/{zcl/definition/tstype.js → zspec/zdo/definition/tstypes.js} +1 -1
  335. package/dist/zspec/zdo/definition/tstypes.js.map +1 -0
  336. package/dist/zspec/zdo/index.d.ts +7 -0
  337. package/dist/zspec/zdo/index.d.ts.map +1 -0
  338. package/dist/zspec/zdo/index.js +39 -0
  339. package/dist/zspec/zdo/index.js.map +1 -0
  340. package/dist/zspec/zdo/utils.d.ts +25 -0
  341. package/dist/zspec/zdo/utils.d.ts.map +1 -0
  342. package/dist/zspec/zdo/utils.js +75 -0
  343. package/dist/zspec/zdo/utils.js.map +1 -0
  344. package/dist/zspec/zdo/zdoStatusError.d.ts +6 -0
  345. package/dist/zspec/zdo/zdoStatusError.d.ts.map +1 -0
  346. package/dist/zspec/zdo/zdoStatusError.js +13 -0
  347. package/dist/zspec/zdo/zdoStatusError.js.map +1 -0
  348. package/examples/join-and-log.js +7 -12
  349. package/package.json +5 -5
  350. package/dist/adapter/zigate/debug.d.ts +0 -8
  351. package/dist/adapter/zigate/debug.d.ts.map +0 -1
  352. package/dist/adapter/zigate/debug.js +0 -20
  353. package/dist/adapter/zigate/debug.js.map +0 -1
  354. package/dist/buffalo/tstype.d.ts +0 -9
  355. package/dist/buffalo/tstype.d.ts.map +0 -1
  356. package/dist/buffalo/tstype.js.map +0 -1
  357. package/dist/controller/logger-stub.d.ts +0 -7
  358. package/dist/controller/logger-stub.d.ts.map +0 -1
  359. package/dist/controller/logger-stub.js +0 -3
  360. package/dist/controller/logger-stub.js.map +0 -1
  361. package/dist/zcl/buffaloZcl.d.ts +0 -42
  362. package/dist/zcl/buffaloZcl.d.ts.map +0 -1
  363. package/dist/zcl/buffaloZcl.js +0 -595
  364. package/dist/zcl/buffaloZcl.js.map +0 -1
  365. package/dist/zcl/definition/buffaloZclDataType.d.ts +0 -18
  366. package/dist/zcl/definition/buffaloZclDataType.d.ts.map +0 -1
  367. package/dist/zcl/definition/buffaloZclDataType.js +0 -21
  368. package/dist/zcl/definition/buffaloZclDataType.js.map +0 -1
  369. package/dist/zcl/definition/cluster.d.ts +0 -30
  370. package/dist/zcl/definition/cluster.d.ts.map +0 -1
  371. package/dist/zcl/definition/cluster.js +0 -5521
  372. package/dist/zcl/definition/cluster.js.map +0 -1
  373. package/dist/zcl/definition/dataType.d.ts +0 -60
  374. package/dist/zcl/definition/dataType.d.ts.map +0 -1
  375. package/dist/zcl/definition/dataType.js +0 -65
  376. package/dist/zcl/definition/dataType.js.map +0 -1
  377. package/dist/zcl/definition/direction.d.ts +0 -6
  378. package/dist/zcl/definition/direction.d.ts.map +0 -1
  379. package/dist/zcl/definition/direction.js +0 -9
  380. package/dist/zcl/definition/direction.js.map +0 -1
  381. package/dist/zcl/definition/endpointDeviceType.d.ts +0 -5
  382. package/dist/zcl/definition/endpointDeviceType.d.ts.map +0 -1
  383. package/dist/zcl/definition/endpointDeviceType.js +0 -16
  384. package/dist/zcl/definition/endpointDeviceType.js.map +0 -1
  385. package/dist/zcl/definition/foundation.d.ts +0 -12
  386. package/dist/zcl/definition/foundation.d.ts.map +0 -1
  387. package/dist/zcl/definition/foundation.js +0 -168
  388. package/dist/zcl/definition/foundation.js.map +0 -1
  389. package/dist/zcl/definition/frameControl.d.ts +0 -11
  390. package/dist/zcl/definition/frameControl.d.ts.map +0 -1
  391. package/dist/zcl/definition/frameControl.js +0 -3
  392. package/dist/zcl/definition/frameControl.js.map +0 -1
  393. package/dist/zcl/definition/frameType.d.ts +0 -6
  394. package/dist/zcl/definition/frameType.d.ts.map +0 -1
  395. package/dist/zcl/definition/frameType.js +0 -9
  396. package/dist/zcl/definition/frameType.js.map +0 -1
  397. package/dist/zcl/definition/index.d.ts +0 -14
  398. package/dist/zcl/definition/index.d.ts.map +0 -1
  399. package/dist/zcl/definition/index.js +0 -52
  400. package/dist/zcl/definition/index.js.map +0 -1
  401. package/dist/zcl/definition/manufacturerCode.d.ts +0 -1078
  402. package/dist/zcl/definition/manufacturerCode.d.ts.map +0 -1
  403. package/dist/zcl/definition/manufacturerCode.js +0 -1083
  404. package/dist/zcl/definition/manufacturerCode.js.map +0 -1
  405. package/dist/zcl/definition/powerSource.d.ts +0 -5
  406. package/dist/zcl/definition/powerSource.d.ts.map +0 -1
  407. package/dist/zcl/definition/powerSource.js +0 -13
  408. package/dist/zcl/definition/powerSource.js.map +0 -1
  409. package/dist/zcl/definition/status.d.ts +0 -39
  410. package/dist/zcl/definition/status.d.ts.map +0 -1
  411. package/dist/zcl/definition/status.js +0 -42
  412. package/dist/zcl/definition/status.js.map +0 -1
  413. package/dist/zcl/definition/tstype.d.ts +0 -17
  414. package/dist/zcl/definition/tstype.d.ts.map +0 -1
  415. package/dist/zcl/definition/tstype.js.map +0 -1
  416. package/dist/zcl/index.d.ts +0 -17
  417. package/dist/zcl/index.d.ts.map +0 -1
  418. package/dist/zcl/index.js +0 -56
  419. package/dist/zcl/index.js.map +0 -1
  420. package/dist/zcl/tstype.d.ts +0 -57
  421. package/dist/zcl/tstype.d.ts.map +0 -1
  422. package/dist/zcl/tstype.js +0 -10
  423. package/dist/zcl/tstype.js.map +0 -1
  424. package/dist/zcl/utils.d.ts +0 -7
  425. package/dist/zcl/utils.d.ts.map +0 -1
  426. package/dist/zcl/utils.js +0 -165
  427. package/dist/zcl/utils.js.map +0 -1
  428. package/dist/zcl/zclFrame.d.ts +0 -41
  429. package/dist/zcl/zclFrame.d.ts.map +0 -1
  430. package/dist/zcl/zclFrame.js +0 -352
  431. package/dist/zcl/zclFrame.js.map +0 -1
  432. package/dist/zcl/zclHeader.d.ts +0 -9
  433. package/dist/zcl/zclHeader.d.ts.map +0 -1
  434. package/dist/zcl/zclHeader.js.map +0 -1
  435. package/dist/zcl/zclStatusError.d.ts +0 -6
  436. package/dist/zcl/zclStatusError.d.ts.map +0 -1
  437. package/dist/zcl/zclStatusError.js +0 -15
  438. package/dist/zcl/zclStatusError.js.map +0 -1
@@ -12,12 +12,11 @@ const utils_1 = require("./utils");
12
12
  const named_1 = require("./types/named");
13
13
  const multicast_1 = require("./multicast");
14
14
  const utils_2 = require("../../../utils");
15
- const debug_1 = __importDefault(require("debug"));
16
15
  const es6_1 = __importDefault(require("fast-deep-equal/es6"));
17
- const debug = {
18
- error: (0, debug_1.default)('zigbee-herdsman:adapter:ezsp:erro'),
19
- log: (0, debug_1.default)('zigbee-herdsman:adapter:ezsp:driv'),
20
- };
16
+ const backup_1 = require("../adapter/backup");
17
+ const logger_1 = require("../../../utils/logger");
18
+ const cluster_1 = require("../../../zspec/zcl/definition/cluster");
19
+ const NS = 'zh:ezsp:driv';
21
20
  const IEEE_PREFIX_MFG_ID = [
22
21
  { mfgId: 0x115F, prefix: [0x04, 0xcf, 0xfc] },
23
22
  { mfgId: 0x115F, prefix: [0x54, 0xef, 0x44] },
@@ -38,12 +37,14 @@ class Driver extends events_1.EventEmitter {
38
37
  waitress;
39
38
  transactionID = 1;
40
39
  serialOpt;
41
- constructor(serialOpt, nwkOpt, greenPowerGroup) {
40
+ backupMan;
41
+ constructor(serialOpt, nwkOpt, greenPowerGroup, backupPath) {
42
42
  super();
43
43
  this.nwkOpt = nwkOpt;
44
44
  this.serialOpt = serialOpt;
45
45
  this.greenPowerGroup = greenPowerGroup;
46
46
  this.waitress = new utils_2.Waitress(this.waitressValidator, this.waitressTimeoutFormatter);
47
+ this.backupMan = new backup_1.EZSPAdapterBackup(this, backupPath);
47
48
  }
48
49
  /**
49
50
  * Requested by the EZSP watchdog after too many failures, or by UART layer after port closed unexpectedly.
@@ -51,40 +52,40 @@ class Driver extends events_1.EventEmitter {
51
52
  * @returns
52
53
  */
53
54
  async reset() {
54
- debug.log(`Reset connection.`);
55
+ logger_1.logger.debug(`Reset connection.`, NS);
55
56
  try {
56
57
  // don't emit 'close' on stop since we don't want this to bubble back up as 'disconnected' to the controller.
57
58
  await this.stop(false);
58
59
  }
59
60
  catch (err) {
60
- debug.error(`Stop error ${err.stack}`);
61
+ logger_1.logger.debug(`Stop error ${err.stack}`, NS);
61
62
  }
62
63
  try {
63
64
  await (0, utils_2.Wait)(1000);
64
- debug.log(`Startup again.`);
65
+ logger_1.logger.debug(`Startup again.`, NS);
65
66
  await this.startup();
66
67
  }
67
68
  catch (err) {
68
- debug.error(`Reset error ${err.stack}`);
69
+ logger_1.logger.debug(`Reset error ${err.stack}`, NS);
69
70
  try {
70
71
  // here we let emit
71
72
  await this.stop();
72
73
  }
73
74
  catch (stopErr) {
74
- debug.error(`Failed to stop after failed reset ${stopErr.stack}`);
75
+ logger_1.logger.debug(`Failed to stop after failed reset ${stopErr.stack}`, NS);
75
76
  }
76
77
  }
77
78
  }
78
79
  async onEzspReset() {
79
- debug.log('onEzspReset()');
80
+ logger_1.logger.debug('onEzspReset()', NS);
80
81
  await this.reset();
81
82
  }
82
83
  onEzspClose() {
83
- debug.log('onEzspClose()');
84
+ logger_1.logger.debug('onEzspClose()', NS);
84
85
  this.emit('close');
85
86
  }
86
87
  async stop(emitClose = true) {
87
- debug.log('Stopping driver');
88
+ logger_1.logger.debug('Stopping driver', NS);
88
89
  if (this.ezsp) {
89
90
  return this.ezsp.close(emitClose);
90
91
  }
@@ -99,7 +100,7 @@ class Driver extends events_1.EventEmitter {
99
100
  await this.ezsp.connect(this.serialOpt);
100
101
  }
101
102
  catch (error) {
102
- debug.error(`EZSP could not connect: ${error.cause ?? error}`);
103
+ logger_1.logger.debug(`EZSP could not connect: ${error.cause ?? error}`, NS);
103
104
  throw error;
104
105
  }
105
106
  this.ezsp.on('reset', this.onEzspReset.bind(this));
@@ -112,7 +113,7 @@ class Driver extends events_1.EventEmitter {
112
113
  await this.ezsp.setValue(named_1.EzspValueId.VALUE_CCA_THRESHOLD, 0);
113
114
  await this.ezsp.setSourceRouting();
114
115
  //const count = await ezsp.getConfigurationValue(EzspConfigId.CONFIG_APS_UNICAST_MESSAGE_COUNT);
115
- //debug.log("APS_UNICAST_MESSAGE_COUNT is set to %s", count);
116
+ //logger.info("APS_UNICAST_MESSAGE_COUNT is set to %s", count, NS);
116
117
  await this.addEndpoint({
117
118
  inputClusters: [0x0000, 0x0003, 0x0006, 0x000A, 0x0019, 0x001A, 0x0300],
118
119
  outputClusters: [0x0000, 0x0003, 0x0004, 0x0005, 0x0006, 0x0008, 0x0020,
@@ -137,7 +138,7 @@ class Driver extends events_1.EventEmitter {
137
138
  [special, verInfo] = types_1.uint8_t.deserialize(types_1.uint8_t, verInfo);
138
139
  /* eslint-enable prefer-const */
139
140
  const vers = `${major}.${minor}.${patch}.${special} build ${build}`;
140
- debug.log(`EmberZNet version: ${vers}`);
141
+ logger_1.logger.debug(`EmberZNet version: ${vers}`, NS);
141
142
  this.version = {
142
143
  product: this.ezsp.ezspV,
143
144
  majorrel: `${major}`,
@@ -146,33 +147,49 @@ class Driver extends events_1.EventEmitter {
146
147
  revision: vers
147
148
  };
148
149
  if (await this.needsToBeInitialised(this.nwkOpt)) {
150
+ // need to check the backup
151
+ const restore = await this.needsToBeRestore(this.nwkOpt);
149
152
  const res = await this.ezsp.execCommand('networkState');
150
- debug.log(`Network state ${res.status}`);
153
+ logger_1.logger.debug(`Network state ${res.status}`, NS);
151
154
  if (res.status == named_1.EmberNetworkStatus.JOINED_NETWORK) {
152
- debug.log(`Leaving current network and forming new network`);
155
+ logger_1.logger.info(`Leaving current network and forming new network`, NS);
153
156
  const st = await this.ezsp.leaveNetwork();
154
- console.assert(st == types_1.EmberStatus.NETWORK_DOWN, `leaveNetwork returned unexpected status: ${st}`);
157
+ if (st != types_1.EmberStatus.NETWORK_DOWN) {
158
+ logger_1.logger.error(`leaveNetwork returned unexpected status: ${st}`, NS);
159
+ }
160
+ }
161
+ if (restore) {
162
+ // restore
163
+ logger_1.logger.info("Restore network from backup", NS);
164
+ await this.formNetwork(true);
165
+ result = 'restored';
166
+ }
167
+ else {
168
+ // reset
169
+ logger_1.logger.info("Form network", NS);
170
+ await this.formNetwork(false);
171
+ result = 'reset';
155
172
  }
156
- await this.formNetwork();
157
- result = 'reset';
158
173
  }
159
174
  const state = (await this.ezsp.execCommand('networkState')).status;
160
- debug.log(`Network state ${state}`);
175
+ logger_1.logger.debug(`Network state ${state}`, NS);
161
176
  const netParams = await this.ezsp.execCommand('getNetworkParameters');
162
- console.assert(netParams.status == types_1.EmberStatus.SUCCESS, `Command (getNetworkParameters) returned unexpected state: ${netParams.status}`);
177
+ if (netParams.status != types_1.EmberStatus.SUCCESS) {
178
+ logger_1.logger.error(`Command (getNetworkParameters) returned unexpected state: ${netParams.status}`, NS);
179
+ }
163
180
  this.networkParams = netParams.parameters;
164
- debug.log("Node type: %s, Network parameters: %s", netParams.nodeType, this.networkParams);
181
+ logger_1.logger.debug(`Node type: ${netParams.nodeType}, Network parameters: ${this.networkParams}`, NS);
165
182
  const nwk = (await this.ezsp.execCommand('getNodeId')).nodeId;
166
183
  const ieee = (await this.ezsp.execCommand('getEui64')).eui64;
167
184
  this.ieee = new named_1.EmberEUI64(ieee);
168
- debug.log('Network ready');
185
+ logger_1.logger.debug('Network ready', NS);
169
186
  this.ezsp.on('frame', this.handleFrame.bind(this));
170
187
  this.handleNodeJoined(nwk, this.ieee);
171
- debug.log(`EZSP nwk=${nwk}, IEEE=0x${this.ieee}`);
188
+ logger_1.logger.debug(`EZSP nwk=${nwk}, IEEE=0x${this.ieee}`, NS);
172
189
  const linkResult = await this.getKey(named_1.EmberKeyType.TRUST_CENTER_LINK_KEY);
173
- debug.log(`TRUST_CENTER_LINK_KEY: ${JSON.stringify(linkResult)}`);
190
+ logger_1.logger.debug(`TRUST_CENTER_LINK_KEY: ${JSON.stringify(linkResult)}`, NS);
174
191
  const netResult = await this.getKey(named_1.EmberKeyType.CURRENT_NETWORK_KEY);
175
- debug.log(`CURRENT_NETWORK_KEY: ${JSON.stringify(netResult)}`);
192
+ logger_1.logger.debug(`CURRENT_NETWORK_KEY: ${JSON.stringify(netResult)}`, NS);
176
193
  await (0, utils_2.Wait)(1000);
177
194
  await this.ezsp.execCommand('setManufacturerCode', { code: DEFAULT_MFG_ID });
178
195
  this.multicast = new multicast_1.Multicast(this);
@@ -186,7 +203,7 @@ class Driver extends events_1.EventEmitter {
186
203
  valid = valid && (await this.ezsp.networkInit());
187
204
  const netParams = await this.ezsp.execCommand('getNetworkParameters');
188
205
  const networkParams = netParams.parameters;
189
- debug.log("Current Node type: %s, Network parameters: %s", netParams.nodeType, networkParams);
206
+ logger_1.logger.debug(`Current Node type: ${netParams.nodeType}, Network parameters: ${networkParams}`, NS);
190
207
  valid = valid && (netParams.status == types_1.EmberStatus.SUCCESS);
191
208
  valid = valid && (netParams.nodeType == types_1.EmberNodeType.COORDINATOR);
192
209
  valid = valid && (options.panID == networkParams.panId);
@@ -194,24 +211,39 @@ class Driver extends events_1.EventEmitter {
194
211
  valid = valid && ((0, es6_1.default)(options.extendedPanID, networkParams.extendedPanId));
195
212
  return !valid;
196
213
  }
197
- async formNetwork() {
198
- let status;
199
- status = (await this.ezsp.execCommand('clearKeyTable')).status;
200
- console.assert(status == types_1.EmberStatus.SUCCESS, `Command clearKeyTable returned unexpected state: ${status}`);
214
+ async formNetwork(restore) {
215
+ let backup;
201
216
  await this.ezsp.execCommand('clearTransientLinkKeys');
202
- const panID = this.nwkOpt.panID;
203
- const extendedPanID = this.nwkOpt.extendedPanID;
204
- const initial_security_state = (0, utils_1.ember_security)(this.nwkOpt);
205
- status = await this.ezsp.setInitialSecurityState(initial_security_state);
217
+ let initial_security_state;
218
+ if (restore) {
219
+ backup = await this.backupMan.getStoredBackup();
220
+ initial_security_state = (0, utils_1.ember_security)(backup.networkOptions.networkKey);
221
+ initial_security_state.bitmask |= named_1.EmberInitialSecurityBitmask.NO_FRAME_COUNTER_RESET;
222
+ initial_security_state.networkKeySequenceNumber = backup.networkKeyInfo.sequenceNumber;
223
+ initial_security_state.preconfiguredKey.contents = backup.ezsp.hashed_tclk;
224
+ }
225
+ else {
226
+ await this.ezsp.execCommand('clearKeyTable');
227
+ initial_security_state = (0, utils_1.ember_security)(Buffer.from(this.nwkOpt.networkKey));
228
+ }
229
+ await this.ezsp.setInitialSecurityState(initial_security_state);
206
230
  const parameters = new struct_1.EmberNetworkParameters();
207
- parameters.panId = panID;
208
- parameters.extendedPanId = extendedPanID;
209
231
  parameters.radioTxPower = 5;
210
- parameters.radioChannel = this.nwkOpt.channelList[0];
211
232
  parameters.joinMethod = named_1.EmberJoinMethod.USE_MAC_ASSOCIATION;
212
233
  parameters.nwkManagerId = 0;
213
234
  parameters.nwkUpdateId = 0;
214
235
  parameters.channels = 0x07FFF800; // all channels
236
+ if (restore) {
237
+ parameters.panId = backup.networkOptions.panId;
238
+ parameters.extendedPanId = backup.networkOptions.extendedPanId;
239
+ parameters.radioChannel = backup.logicalChannel;
240
+ parameters.nwkUpdateId = backup.networkUpdateId;
241
+ }
242
+ else {
243
+ parameters.radioChannel = this.nwkOpt.channelList[0];
244
+ parameters.panId = this.nwkOpt.panID;
245
+ parameters.extendedPanId = Buffer.from(this.nwkOpt.extendedPanID);
246
+ }
215
247
  await this.ezsp.formNetwork(parameters);
216
248
  await this.ezsp.setValue(named_1.EzspValueId.VALUE_STACK_TOKEN_WRITING, 1);
217
249
  }
@@ -286,7 +318,7 @@ class Driver extends events_1.EventEmitter {
286
318
  }
287
319
  case (frameName === 'macFilterMatchMessageHandler'): {
288
320
  const [rawFrame, data] = struct_1.EmberIeeeRawFrame.deserialize(struct_1.EmberIeeeRawFrame, frame.message);
289
- debug.log(`macFilterMatchMessageHandler frame message: ${rawFrame}`);
321
+ logger_1.logger.debug(`macFilterMatchMessageHandler frame message: ${rawFrame}`, NS);
290
322
  this.emit('incomingMessage', {
291
323
  messageType: null,
292
324
  apsFrame: rawFrame,
@@ -301,7 +333,7 @@ class Driver extends events_1.EventEmitter {
301
333
  break;
302
334
  }
303
335
  case (frameName === 'stackStatusHandler'): {
304
- debug.log(`stackStatusHandler: ${types_1.EmberStatus.valueToName(types_1.EmberStatus, frame.status)}`);
336
+ logger_1.logger.debug(`stackStatusHandler: ${types_1.EmberStatus.valueToName(types_1.EmberStatus, frame.status)}`, NS);
305
337
  break;
306
338
  }
307
339
  // case (frameName === 'childJoinHandler'): {
@@ -313,7 +345,39 @@ class Driver extends events_1.EventEmitter {
313
345
  // break;
314
346
  // }
315
347
  case (frameName == 'gpepIncomingMessageHandler'): {
316
- this.handleGPMessage(frame);
348
+ let commandIdentifier = cluster_1.Clusters.greenPower.commands.notification.ID;
349
+ if (frame.gpdCommandId === 0xE0) {
350
+ if (!frame.gpdCommandPayload.length) {
351
+ // XXX: seem to be receiving duplicate commissioningNotification from some devices, second one with empty payload?
352
+ // this will mess with the process no doubt, so dropping them
353
+ return;
354
+ }
355
+ commandIdentifier = cluster_1.Clusters.greenPower.commands.commissioningNotification.ID;
356
+ }
357
+ const gpdHeader = Buffer.alloc(15);
358
+ gpdHeader.writeUInt8(0b00000001, 0); // frameControl: FrameType.SPECIFIC + Direction.CLIENT_TO_SERVER + disableDefaultResponse=false
359
+ gpdHeader.writeUInt8(frame.sequenceNumber, 1); // transactionSequenceNumber
360
+ gpdHeader.writeUInt8(commandIdentifier, 2); // commandIdentifier
361
+ gpdHeader.writeUInt16LE(0, 3); // options XXX: bypassed, same as deconz https://github.com/Koenkk/zigbee-herdsman/pull/536
362
+ gpdHeader.writeUInt32LE(frame.srcId, 5); // srcID
363
+ // omitted: gpdIEEEAddr ieeeAddr
364
+ // omitted: gpdEndpoint uint8
365
+ gpdHeader.writeUInt32LE(frame.gpdSecurityFrameCounter, 9); // frameCounter
366
+ gpdHeader.writeUInt8(frame.gpdCommandId, 13); // commandID
367
+ gpdHeader.writeUInt8(frame.gpdCommandPayload.length, 14); // payloadSize
368
+ const gpdMessage = {
369
+ messageType: frame.gpdCommandId,
370
+ apsFrame: {
371
+ profileId: 0xA1E0,
372
+ sourceEndpoint: 242,
373
+ clusterId: 0x0021,
374
+ sequence: frame.sequenceNumber,
375
+ },
376
+ lqi: frame.gpdLink,
377
+ message: Buffer.concat([gpdHeader, frame.gpdCommandPayload]),
378
+ sender: frame.addr,
379
+ };
380
+ this.emit('incomingMessage', gpdMessage);
317
381
  break;
318
382
  }
319
383
  default:
@@ -326,12 +390,12 @@ class Driver extends events_1.EventEmitter {
326
390
  // <=== Application frame 155 (zigbeeKeyEstablishmentHandler) received: 2ebd08feff9ffd9006 +2ms
327
391
  // <=== Application frame 155 (zigbeeKeyEstablishmentHandler) parsed: 144,253,159,255,254,8,189,46,6 +2ms
328
392
  // Unhandled frame zigbeeKeyEstablishmentHandler
329
- debug.log(`Unhandled frame ${frameName}`);
393
+ logger_1.logger.debug(`Unhandled frame ${frameName}`, NS);
330
394
  }
331
395
  }
332
396
  handleRouteRecord(nwk, ieee, lqi, rssi, relays) {
333
397
  // todo
334
- debug.log(`handleRouteRecord: nwk=${nwk}, ieee=${ieee.toString()}, lqi=${lqi}, rssi=${rssi}, relays=${relays}`);
398
+ logger_1.logger.debug(`handleRouteRecord: nwk=${nwk}, ieee=${ieee.toString()}, lqi=${lqi}, rssi=${rssi}, relays=${relays}`, NS);
335
399
  this.setNode(nwk, ieee);
336
400
  // if (ieee && !(ieee instanceof EmberEUI64)) {
337
401
  // ieee = new EmberEUI64(ieee);
@@ -340,7 +404,7 @@ class Driver extends events_1.EventEmitter {
340
404
  }
341
405
  handleRouteError(status, nwk) {
342
406
  // todo
343
- debug.log(`handleRouteError: nwk=${nwk}, status=${status}`);
407
+ logger_1.logger.debug(`handleRouteError: nwk=${nwk}, status=${status}`, NS);
344
408
  //this.waitress.reject({address: nwk, payload: null, frame: null}, 'Route error');
345
409
  // const ieee = await this.networkIdToEUI64(nwk);
346
410
  // this.eui64ToRelays.set(ieee.toString(), null);
@@ -356,7 +420,7 @@ class Driver extends events_1.EventEmitter {
356
420
  // "target":50564
357
421
  // }
358
422
  // https://docs.silabs.com/d/zigbee-stack-api/7.4.0/message#ember-incoming-network-status-handler
359
- debug.log(`handleNetworkStatus: nwk=${nwk}, errorCode=${errorCode}`);
423
+ logger_1.logger.debug(`handleNetworkStatus: nwk=${nwk}, errorCode=${errorCode}`, NS);
360
424
  }
361
425
  handleNodeLeft(nwk, ieee) {
362
426
  if (ieee && !(ieee instanceof named_1.EmberEUI64)) {
@@ -378,7 +442,7 @@ class Driver extends events_1.EventEmitter {
378
442
  for (const rec of IEEE_PREFIX_MFG_ID) {
379
443
  if ((Buffer.from(ieee.value)).indexOf(Buffer.from(rec.prefix)) == 0) {
380
444
  // set ManufacturerCode
381
- debug.log(`handleNodeJoined: change ManufacturerCode for ieee ${ieee} to ${rec.mfgId}`);
445
+ logger_1.logger.debug(`handleNodeJoined: change ManufacturerCode for ieee ${ieee} to ${rec.mfgId}`, NS);
382
446
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
383
447
  this.resetMfgId(rec.mfgId);
384
448
  break;
@@ -431,7 +495,7 @@ class Driver extends events_1.EventEmitter {
431
495
  if ([types_1.EmberStatus.MAX_MESSAGE_LIMIT_REACHED, types_1.EmberStatus.NO_BUFFERS, types_1.EmberStatus.NETWORK_BUSY]
432
496
  .includes(sendResult.status)) {
433
497
  // need to repeat after pause
434
- debug.log(`Request send status ${sendResult.status}. Attempt to repeat the request`);
498
+ logger_1.logger.error(`Request send status ${sendResult.status}. Attempt to repeat the request`, NS);
435
499
  await (0, utils_2.Wait)(delay);
436
500
  }
437
501
  else {
@@ -440,7 +504,7 @@ class Driver extends events_1.EventEmitter {
440
504
  }
441
505
  }
442
506
  catch (e) {
443
- debug.error(`Request error ${e}: ${e.stack}`);
507
+ logger_1.logger.debug(`Request error ${e}: ${e.stack}`, NS);
444
508
  break;
445
509
  }
446
510
  }
@@ -465,7 +529,7 @@ class Driver extends events_1.EventEmitter {
465
529
  return true;
466
530
  }
467
531
  catch (e) {
468
- debug.error(`Request error ${e}: ${e.stack}`);
532
+ logger_1.logger.debug(`Request error ${e}: ${e.stack}`, NS);
469
533
  return false;
470
534
  }
471
535
  }
@@ -477,7 +541,7 @@ class Driver extends events_1.EventEmitter {
477
541
  return true;
478
542
  }
479
543
  catch (e) {
480
- debug.error(`Request error ${e}: ${e.stack}`);
544
+ logger_1.logger.debug(`Request error ${e}: ${e.stack}`, NS);
481
545
  return false;
482
546
  }
483
547
  }
@@ -524,7 +588,7 @@ class Driver extends events_1.EventEmitter {
524
588
  async zdoRequest(networkAddress, requestCmd, responseCmd, params) {
525
589
  const requestName = types_1.EmberZDOCmd.valueName(types_1.EmberZDOCmd, requestCmd);
526
590
  const responseName = types_1.EmberZDOCmd.valueName(types_1.EmberZDOCmd, responseCmd);
527
- debug.log(`ZDO ${requestName} params: ${JSON.stringify(params)}`);
591
+ logger_1.logger.debug(`ZDO ${requestName} params: ${JSON.stringify(params)}`, NS);
528
592
  const frame = this.makeApsFrame(requestCmd, false);
529
593
  const payload = this.makeZDOframe(requestCmd, { transId: frame.sequence, ...params });
530
594
  const waiter = this.waitFor(networkAddress, responseCmd, frame.sequence);
@@ -534,14 +598,14 @@ class Driver extends events_1.EventEmitter {
534
598
  throw Error('zdoRequest>request error');
535
599
  }
536
600
  const response = await waiter.start().promise;
537
- debug.log(`${responseName} frame: ${JSON.stringify(response.payload)}`);
601
+ logger_1.logger.debug(`${responseName} frame: ${JSON.stringify(response.payload)}`, NS);
538
602
  const result = new ezsp_1.EZSPZDOResponseFrameData(responseCmd, response.payload);
539
- debug.log(`${responseName} parsed: ${JSON.stringify(result)}`);
603
+ logger_1.logger.debug(`${responseName} parsed: ${JSON.stringify(result)}`, NS);
540
604
  return result;
541
605
  }
542
606
  catch (e) {
543
607
  this.waitress.remove(waiter.ID);
544
- debug.error(`zdoRequest error: ${e} ${e.stack}`);
608
+ logger_1.logger.debug(`zdoRequest error: ${e} ${e.stack}`, NS);
545
609
  throw e;
546
610
  }
547
611
  }
@@ -595,7 +659,7 @@ class Driver extends events_1.EventEmitter {
595
659
  inputClusterList: inputClusters,
596
660
  outputClusterList: outputClusters,
597
661
  });
598
- debug.log(`Ezsp adding endpoint: ${JSON.stringify(res)}`);
662
+ logger_1.logger.debug(`Ezsp adding endpoint: ${JSON.stringify(res)}`, NS);
599
663
  }
600
664
  waitFor(address, clusterId, sequence, timeout = 10000) {
601
665
  return this.waitress.waitFor({ address, clusterId, sequence }, timeout);
@@ -641,70 +705,18 @@ class Driver extends events_1.EventEmitter {
641
705
  throw new Error(`Add install code for '${ieeeAddress}' failed`);
642
706
  }
643
707
  }
644
- handleGPMessage(frame) {
645
- // Commissioning
646
- if (frame.gpdCommandId == 0xE0) {
647
- let data = frame.payload.subarray(5);
648
- /* eslint-disable */
649
- let st, deviceId, options, extOptions, key, mic, counter;
650
- [st, data] = types_1.uint8_t.deserialize(types_1.uint8_t, data);
651
- [deviceId, data] = types_1.uint8_t.deserialize(types_1.uint8_t, data);
652
- [options, data] = types_1.uint8_t.deserialize(types_1.uint8_t, data);
653
- [extOptions, data] = types_1.uint8_t.deserialize(types_1.uint8_t, data);
654
- [key, data] = types_1.EmberKeyData.deserialize(types_1.EmberKeyData, data);
655
- [mic, data] = types_1.uint32_t.deserialize(types_1.uint32_t, data);
656
- [counter, data] = types_1.uint32_t.deserialize(types_1.uint32_t, data);
657
- /* eslint-enable */
658
- const gpdMessage = {
659
- messageType: frame.gpdCommandId,
660
- apsFrame: {
661
- profileId: 0xA1E0,
662
- sourceEndpoint: 242,
663
- clusterId: 0x0021,
664
- sequence: frame.sequenceNumber,
665
- },
666
- lqi: frame.gpdLink,
667
- message: {
668
- commandID: frame.gpdCommandId,
669
- commandFrame: {
670
- options: options,
671
- securityKey: Buffer.from(key.contents),
672
- deviceID: deviceId,
673
- outgoingCounter: counter,
674
- },
675
- srcID: frame.srcId,
676
- },
677
- sender: frame.addr,
678
- };
679
- this.emit('incomingMessage', gpdMessage);
680
- }
681
- else {
682
- const gpdMessage = {
683
- messageType: frame.gpdCommandId,
684
- apsFrame: {
685
- profileId: 0xA1E0,
686
- sourceEndpoint: 242,
687
- clusterId: 0x0021,
688
- sequence: frame.sequenceNumber,
689
- },
690
- lqi: frame.gpdLink,
691
- message: {
692
- commandID: frame.gpdCommandId,
693
- frameCounter: frame.sequenceNumber,
694
- srcID: frame.srcId,
695
- },
696
- sender: frame.addr,
697
- };
698
- this.emit('incomingMessage', gpdMessage);
699
- }
700
- }
701
708
  async getKey(keyType) {
702
709
  if (this.ezsp.ezspV < 13) {
703
710
  return this.ezsp.execCommand('getKey', { keyType });
704
711
  }
705
712
  else {
713
+ // Mapping EmberKeyType to SecManKeyType (ezsp13)
714
+ const SecManKeyType = {
715
+ [named_1.EmberKeyType.TRUST_CENTER_LINK_KEY]: 2,
716
+ [named_1.EmberKeyType.CURRENT_NETWORK_KEY]: 1,
717
+ };
706
718
  const smc = new struct_1.EmberSecurityManagerContext();
707
- smc.type = keyType;
719
+ smc.type = SecManKeyType[keyType];
708
720
  smc.index = 0;
709
721
  smc.derivedType = named_1.EmberDerivedKeyType.NONE;
710
722
  smc.eui64 = new named_1.EmberEUI64('0x0000000000000000');
@@ -712,8 +724,10 @@ class Driver extends events_1.EventEmitter {
712
724
  smc.flags = 0;
713
725
  smc.psaKeyAlgPermission = 0;
714
726
  const keyInfo = await this.ezsp.execCommand('exportKey', { context: smc });
715
- console.assert(keyInfo.status === named_1.SLStatus.SL_STATUS_OK, `exportKey(${named_1.EmberKeyType.valueToName(named_1.EmberKeyType, keyType)}) `
716
- + `returned unexpected SL status: ${keyInfo.status}`);
727
+ if (keyInfo.status !== named_1.SLStatus.SL_STATUS_OK) {
728
+ logger_1.logger.error(`exportKey(${named_1.EmberKeyType.valueToName(named_1.EmberKeyType, keyType)}) `
729
+ + `returned unexpected SL status: ${keyInfo.status}`, NS);
730
+ }
717
731
  return keyInfo;
718
732
  }
719
733
  }
@@ -723,10 +737,60 @@ class Driver extends events_1.EventEmitter {
723
737
  }
724
738
  else {
725
739
  const keyInfo = await this.ezsp.execCommand('getNetworkKeyInfo');
726
- console.assert(keyInfo.status === named_1.SLStatus.SL_STATUS_OK, `getNetworkKeyInfo() returned unexpected SL status: ${keyInfo.status}`);
740
+ if (keyInfo.status !== named_1.SLStatus.SL_STATUS_OK) {
741
+ logger_1.logger.error(`getNetworkKeyInfo() returned unexpected SL status: ${keyInfo.status}`, NS);
742
+ }
727
743
  return keyInfo;
728
744
  }
729
745
  }
746
+ async needsToBeRestore(options) {
747
+ // if no backup and the settings have been changed, then need to start a new network
748
+ const backup = await this.backupMan.getStoredBackup();
749
+ if (!backup)
750
+ return false;
751
+ let valid = true;
752
+ //valid = valid && (await this.ezsp.networkInit());
753
+ const netParams = await this.ezsp.execCommand('getNetworkParameters');
754
+ const networkParams = netParams.parameters;
755
+ logger_1.logger.debug(`Current Node type: ${netParams.nodeType}, Network parameters: ${networkParams}`, NS);
756
+ logger_1.logger.debug(`Backuped network parameters: ${backup.networkOptions}`, NS);
757
+ const networkKey = await this.getKey(named_1.EmberKeyType.CURRENT_NETWORK_KEY);
758
+ let netKey = null;
759
+ if (this.ezsp.ezspV < 13) {
760
+ netKey = Buffer.from(networkKey.keyStruct.key.contents);
761
+ }
762
+ else {
763
+ netKey = Buffer.from(networkKey.keyData.contents);
764
+ }
765
+ // if the settings in the backup match the chip, then need to warn to delete the backup file first
766
+ valid = valid && (networkParams.panId == backup.networkOptions.panId);
767
+ valid = valid && (networkParams.radioChannel == backup.logicalChannel);
768
+ valid = valid && (Buffer.from(networkParams.extendedPanId).equals(backup.networkOptions.extendedPanId));
769
+ valid = valid && (Buffer.from(netKey).equals(backup.networkOptions.networkKey));
770
+ if (valid) {
771
+ logger_1.logger.error(`Configuration is not consistent with adapter backup!`, NS);
772
+ logger_1.logger.error(`- PAN ID: configured=${options.panID}, adapter=${networkParams.panId}, backup=${backup.networkOptions.panId}`, NS);
773
+ logger_1.logger.error(`- Extended PAN ID: configured=${Buffer.from(options.extendedPanID).toString("hex")}, ` +
774
+ `adapter=${Buffer.from(networkParams.extendedPanId).toString("hex")}, ` +
775
+ `backup=${Buffer.from(networkParams.extendedPanId).toString("hex")}`, NS);
776
+ logger_1.logger.error(`- Channel: configured=${options.channelList}, adapter=${networkParams.radioChannel}, ` +
777
+ `backup=${backup.logicalChannel}`, NS);
778
+ logger_1.logger.error(`- Network key: configured=${Buffer.from(options.networkKey).toString("hex")}, ` +
779
+ `adapter=${Buffer.from(netKey).toString("hex")}, ` +
780
+ `backup=${backup.networkOptions.networkKey.toString("hex")}`, NS);
781
+ logger_1.logger.error(`Please update configuration to prevent further issues.`, NS);
782
+ logger_1.logger.error(`If you wish to re-commission your network, please remove coordinator backup.`, NS);
783
+ logger_1.logger.error(`Re-commissioning your network will require re-pairing of all devices!`, NS);
784
+ throw new Error("startup failed - configuration-adapter mismatch - see logs above for more information");
785
+ }
786
+ valid = true;
787
+ // if the settings in the backup match the config, then the old network is in the chip and needs to be restored
788
+ valid = valid && (options.panID == backup.networkOptions.panId);
789
+ valid = valid && (options.channelList.includes(backup.logicalChannel));
790
+ valid = valid && (Buffer.from(options.extendedPanID).equals(backup.networkOptions.extendedPanId));
791
+ valid = valid && (Buffer.from(options.networkKey).equals(backup.networkOptions.networkKey));
792
+ return valid;
793
+ }
730
794
  }
731
795
  exports.Driver = Driver;
732
796
  //# sourceMappingURL=driver.js.map