@willieee802/zigbee-herdsman 0.19.21 → 0.34.3

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 (522) hide show
  1. package/.babelrc.js +0 -4
  2. package/.release-please-manifest.json +1 -2
  3. package/CHANGELOG.md +376 -0
  4. package/README.md +1 -1
  5. package/dist/adapter/adapter.d.ts +61 -61
  6. package/dist/adapter/adapter.d.ts.map +1 -1
  7. package/dist/adapter/adapter.js +158 -153
  8. package/dist/adapter/adapter.js.map +1 -1
  9. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +68 -68
  10. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  11. package/dist/adapter/deconz/adapter/deconzAdapter.js +1081 -1060
  12. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  13. package/dist/adapter/deconz/adapter/index.d.ts +2 -2
  14. package/dist/adapter/deconz/adapter/index.js +10 -10
  15. package/dist/adapter/deconz/driver/constants.d.ts +104 -104
  16. package/dist/adapter/deconz/driver/constants.js +55 -55
  17. package/dist/adapter/deconz/driver/driver.d.ts +81 -81
  18. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
  19. package/dist/adapter/deconz/driver/driver.js +750 -732
  20. package/dist/adapter/deconz/driver/driver.js.map +1 -1
  21. package/dist/adapter/deconz/driver/frame.d.ts +6 -6
  22. package/dist/adapter/deconz/driver/frame.js +13 -13
  23. package/dist/adapter/deconz/driver/frameParser.d.ts +2 -2
  24. package/dist/adapter/deconz/driver/frameParser.js +443 -443
  25. package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
  26. package/dist/adapter/deconz/driver/parser.d.ts +12 -12
  27. package/dist/adapter/deconz/driver/parser.js +63 -61
  28. package/dist/adapter/deconz/driver/parser.js.map +1 -1
  29. package/dist/adapter/deconz/driver/writer.d.ts +8 -8
  30. package/dist/adapter/deconz/driver/writer.js +44 -44
  31. package/dist/adapter/ember/adapter/emberAdapter.d.ts +817 -0
  32. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -0
  33. package/dist/adapter/ember/adapter/emberAdapter.js +2981 -0
  34. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -0
  35. package/dist/adapter/ember/adapter/endpoints.d.ts +25 -0
  36. package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -0
  37. package/dist/adapter/ember/adapter/endpoints.js +66 -0
  38. package/dist/adapter/ember/adapter/endpoints.js.map +1 -0
  39. package/dist/adapter/ember/adapter/index.d.ts +3 -0
  40. package/dist/adapter/ember/adapter/index.d.ts.map +1 -0
  41. package/dist/adapter/ember/adapter/index.js +6 -0
  42. package/dist/adapter/ember/adapter/index.js.map +1 -0
  43. package/dist/adapter/ember/adapter/oneWaitress.d.ts +97 -0
  44. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -0
  45. package/dist/adapter/ember/adapter/oneWaitress.js +226 -0
  46. package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -0
  47. package/dist/adapter/ember/adapter/requestQueue.d.ts +59 -0
  48. package/dist/adapter/ember/adapter/requestQueue.d.ts.map +1 -0
  49. package/dist/adapter/ember/adapter/requestQueue.js +144 -0
  50. package/dist/adapter/ember/adapter/requestQueue.js.map +1 -0
  51. package/dist/adapter/ember/adapter/tokensManager.d.ts +69 -0
  52. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -0
  53. package/dist/adapter/ember/adapter/tokensManager.js +685 -0
  54. package/dist/adapter/ember/adapter/tokensManager.js.map +1 -0
  55. package/dist/adapter/ember/consts.d.ts +198 -0
  56. package/dist/adapter/ember/consts.d.ts.map +1 -0
  57. package/dist/adapter/ember/consts.js +253 -0
  58. package/dist/adapter/ember/consts.js.map +1 -0
  59. package/dist/adapter/ember/enums.d.ts +2184 -0
  60. package/dist/adapter/ember/enums.d.ts.map +1 -0
  61. package/dist/adapter/ember/enums.js +2391 -0
  62. package/dist/adapter/ember/enums.js.map +1 -0
  63. package/dist/adapter/ember/ezsp/buffalo.d.ts +156 -0
  64. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +1 -0
  65. package/dist/adapter/ember/ezsp/buffalo.js +1033 -0
  66. package/dist/adapter/ember/ezsp/buffalo.js.map +1 -0
  67. package/dist/adapter/ember/ezsp/consts.d.ts +116 -0
  68. package/dist/adapter/ember/ezsp/consts.d.ts.map +1 -0
  69. package/dist/adapter/ember/ezsp/consts.js +128 -0
  70. package/dist/adapter/ember/ezsp/consts.js.map +1 -0
  71. package/dist/adapter/ember/ezsp/enums.d.ts +879 -0
  72. package/dist/adapter/ember/ezsp/enums.d.ts.map +1 -0
  73. package/dist/adapter/ember/ezsp/enums.js +948 -0
  74. package/dist/adapter/ember/ezsp/enums.js.map +1 -0
  75. package/dist/adapter/ember/ezsp/ezsp.d.ts +2664 -0
  76. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -0
  77. package/dist/adapter/ember/ezsp/ezsp.js +6438 -0
  78. package/dist/adapter/ember/ezsp/ezsp.js.map +1 -0
  79. package/dist/adapter/ember/types.d.ts +733 -0
  80. package/dist/adapter/ember/types.d.ts.map +1 -0
  81. package/dist/adapter/ember/types.js +3 -0
  82. package/dist/adapter/ember/types.js.map +1 -0
  83. package/dist/adapter/ember/uart/ash.d.ts +451 -0
  84. package/dist/adapter/ember/uart/ash.d.ts.map +1 -0
  85. package/dist/adapter/ember/uart/ash.js +1584 -0
  86. package/dist/adapter/ember/uart/ash.js.map +1 -0
  87. package/dist/adapter/ember/uart/consts.d.ts +91 -0
  88. package/dist/adapter/ember/uart/consts.d.ts.map +1 -0
  89. package/dist/adapter/ember/uart/consts.js +100 -0
  90. package/dist/adapter/ember/uart/consts.js.map +1 -0
  91. package/dist/adapter/ember/uart/enums.d.ts +191 -0
  92. package/dist/adapter/ember/uart/enums.d.ts.map +1 -0
  93. package/dist/adapter/ember/uart/enums.js +197 -0
  94. package/dist/adapter/ember/uart/enums.js.map +1 -0
  95. package/dist/adapter/ember/uart/parser.d.ts +10 -0
  96. package/dist/adapter/ember/uart/parser.d.ts.map +1 -0
  97. package/dist/adapter/ember/uart/parser.js +41 -0
  98. package/dist/adapter/ember/uart/parser.js.map +1 -0
  99. package/dist/adapter/ember/uart/queues.d.ts +85 -0
  100. package/dist/adapter/ember/uart/queues.d.ts.map +1 -0
  101. package/dist/adapter/ember/uart/queues.js +212 -0
  102. package/dist/adapter/ember/uart/queues.js.map +1 -0
  103. package/dist/adapter/ember/uart/writer.d.ts +15 -0
  104. package/dist/adapter/ember/uart/writer.d.ts.map +1 -0
  105. package/dist/adapter/ember/uart/writer.js +48 -0
  106. package/dist/adapter/ember/uart/writer.js.map +1 -0
  107. package/dist/adapter/ember/utils/initters.d.ts +20 -0
  108. package/dist/adapter/ember/utils/initters.d.ts.map +1 -0
  109. package/dist/adapter/ember/utils/initters.js +58 -0
  110. package/dist/adapter/ember/utils/initters.js.map +1 -0
  111. package/dist/adapter/ember/utils/math.d.ts +51 -0
  112. package/dist/adapter/ember/utils/math.d.ts.map +1 -0
  113. package/dist/adapter/ember/utils/math.js +102 -0
  114. package/dist/adapter/ember/utils/math.js.map +1 -0
  115. package/dist/adapter/ember/zdo.d.ts +921 -0
  116. package/dist/adapter/ember/zdo.d.ts.map +1 -0
  117. package/dist/adapter/ember/zdo.js +723 -0
  118. package/dist/adapter/ember/zdo.js.map +1 -0
  119. package/dist/adapter/events.d.ts +47 -47
  120. package/dist/adapter/events.js +13 -14
  121. package/dist/adapter/events.js.map +1 -1
  122. package/dist/adapter/ezsp/adapter/backup.d.ts +9 -9
  123. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
  124. package/dist/adapter/ezsp/adapter/backup.js +72 -53
  125. package/dist/adapter/ezsp/adapter/backup.js.map +1 -1
  126. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +61 -60
  127. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  128. package/dist/adapter/ezsp/adapter/ezspAdapter.js +629 -608
  129. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  130. package/dist/adapter/ezsp/adapter/index.d.ts +2 -2
  131. package/dist/adapter/ezsp/adapter/index.js +10 -10
  132. package/dist/adapter/ezsp/driver/commands.d.ts +36 -36
  133. package/dist/adapter/ezsp/driver/commands.d.ts.map +1 -1
  134. package/dist/adapter/ezsp/driver/commands.js +2388 -2359
  135. package/dist/adapter/ezsp/driver/commands.js.map +1 -1
  136. package/dist/adapter/ezsp/driver/consts.d.ts +10 -10
  137. package/dist/adapter/ezsp/driver/consts.js +13 -13
  138. package/dist/adapter/ezsp/driver/driver.d.ts +106 -101
  139. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  140. package/dist/adapter/ezsp/driver/driver.js +731 -638
  141. package/dist/adapter/ezsp/driver/driver.js.map +1 -1
  142. package/dist/adapter/ezsp/driver/ezsp.d.ts +105 -96
  143. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
  144. package/dist/adapter/ezsp/driver/ezsp.js +651 -586
  145. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
  146. package/dist/adapter/ezsp/driver/frame.d.ts +40 -0
  147. package/dist/adapter/ezsp/driver/frame.d.ts.map +1 -0
  148. package/dist/adapter/ezsp/driver/frame.js +101 -0
  149. package/dist/adapter/ezsp/driver/frame.js.map +1 -0
  150. package/dist/adapter/ezsp/driver/index.d.ts +3 -3
  151. package/dist/adapter/ezsp/driver/index.js +8 -8
  152. package/dist/adapter/ezsp/driver/multicast.d.ts +12 -12
  153. package/dist/adapter/ezsp/driver/multicast.js +77 -72
  154. package/dist/adapter/ezsp/driver/multicast.js.map +1 -1
  155. package/dist/adapter/ezsp/driver/parser.d.ts +11 -12
  156. package/dist/adapter/ezsp/driver/parser.d.ts.map +1 -1
  157. package/dist/adapter/ezsp/driver/parser.js +104 -111
  158. package/dist/adapter/ezsp/driver/parser.js.map +1 -1
  159. package/dist/adapter/ezsp/driver/types/basic.d.ts +62 -62
  160. package/dist/adapter/ezsp/driver/types/basic.js +208 -208
  161. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
  162. package/dist/adapter/ezsp/driver/types/index.d.ts +9 -9
  163. package/dist/adapter/ezsp/driver/types/index.d.ts.map +1 -1
  164. package/dist/adapter/ezsp/driver/types/index.js +138 -133
  165. package/dist/adapter/ezsp/driver/types/index.js.map +1 -1
  166. package/dist/adapter/ezsp/driver/types/named.d.ts +1287 -697
  167. package/dist/adapter/ezsp/driver/types/named.d.ts.map +1 -1
  168. package/dist/adapter/ezsp/driver/types/named.js +2329 -1726
  169. package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
  170. package/dist/adapter/ezsp/driver/types/struct.d.ts +270 -251
  171. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +1 -1
  172. package/dist/adapter/ezsp/driver/types/struct.js +803 -708
  173. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  174. package/dist/adapter/ezsp/driver/uart.d.ts +48 -44
  175. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
  176. package/dist/adapter/ezsp/driver/uart.js +382 -368
  177. package/dist/adapter/ezsp/driver/uart.js.map +1 -1
  178. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +2 -2
  179. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +55 -55
  180. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +1 -1
  181. package/dist/adapter/ezsp/driver/utils/index.d.ts +18 -18
  182. package/dist/adapter/ezsp/driver/utils/index.js +72 -67
  183. package/dist/adapter/ezsp/driver/utils/index.js.map +1 -1
  184. package/dist/adapter/ezsp/driver/writer.d.ts +13 -13
  185. package/dist/adapter/ezsp/driver/writer.d.ts.map +1 -1
  186. package/dist/adapter/ezsp/driver/writer.js +85 -88
  187. package/dist/adapter/ezsp/driver/writer.js.map +1 -1
  188. package/dist/adapter/index.d.ts +4 -4
  189. package/dist/adapter/index.js +35 -35
  190. package/dist/adapter/serialPort.d.ts +10 -8
  191. package/dist/adapter/serialPort.d.ts.map +1 -1
  192. package/dist/adapter/serialPort.js +53 -22
  193. package/dist/adapter/serialPort.js.map +1 -1
  194. package/dist/adapter/serialPortUtils.d.ts +12 -12
  195. package/dist/adapter/serialPortUtils.js +18 -18
  196. package/dist/adapter/serialPortUtils.js.map +1 -1
  197. package/dist/adapter/socketPortUtils.d.ts +10 -10
  198. package/dist/adapter/socketPortUtils.js +16 -16
  199. package/dist/adapter/tstype.d.ts +85 -85
  200. package/dist/adapter/tstype.d.ts.map +1 -1
  201. package/dist/adapter/tstype.js +2 -2
  202. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +62 -62
  203. package/dist/adapter/z-stack/adapter/adapter-backup.js +462 -461
  204. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
  205. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +150 -150
  206. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +258 -258
  207. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +1 -1
  208. package/dist/adapter/z-stack/adapter/endpoints.d.ts +11 -11
  209. package/dist/adapter/z-stack/adapter/endpoints.js +73 -73
  210. package/dist/adapter/z-stack/adapter/index.d.ts +2 -2
  211. package/dist/adapter/z-stack/adapter/index.js +8 -8
  212. package/dist/adapter/z-stack/adapter/manager.d.ts +86 -86
  213. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  214. package/dist/adapter/z-stack/adapter/manager.js +482 -476
  215. package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
  216. package/dist/adapter/z-stack/adapter/tstype.d.ts +6 -6
  217. package/dist/adapter/z-stack/adapter/tstype.js +9 -10
  218. package/dist/adapter/z-stack/adapter/tstype.js.map +1 -1
  219. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +81 -81
  220. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  221. package/dist/adapter/z-stack/adapter/zStackAdapter.js +891 -868
  222. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  223. package/dist/adapter/z-stack/constants/af.d.ts +23 -23
  224. package/dist/adapter/z-stack/constants/af.js +27 -27
  225. package/dist/adapter/z-stack/constants/common.d.ts +278 -278
  226. package/dist/adapter/z-stack/constants/common.d.ts.map +1 -1
  227. package/dist/adapter/z-stack/constants/common.js +292 -289
  228. package/dist/adapter/z-stack/constants/common.js.map +1 -1
  229. package/dist/adapter/z-stack/constants/dbg.d.ts +22 -22
  230. package/dist/adapter/z-stack/constants/dbg.js +24 -24
  231. package/dist/adapter/z-stack/constants/index.d.ts +10 -10
  232. package/dist/adapter/z-stack/constants/index.js +47 -47
  233. package/dist/adapter/z-stack/constants/mac.d.ts +127 -127
  234. package/dist/adapter/z-stack/constants/mac.js +129 -129
  235. package/dist/adapter/z-stack/constants/sapi.d.ts +24 -24
  236. package/dist/adapter/z-stack/constants/sapi.js +26 -26
  237. package/dist/adapter/z-stack/constants/sys.d.ts +71 -71
  238. package/dist/adapter/z-stack/constants/sys.js +73 -73
  239. package/dist/adapter/z-stack/constants/util.d.ts +81 -81
  240. package/dist/adapter/z-stack/constants/util.js +83 -83
  241. package/dist/adapter/z-stack/constants/utils.d.ts +4 -4
  242. package/dist/adapter/z-stack/constants/utils.js +14 -14
  243. package/dist/adapter/z-stack/constants/zdo.d.ts +102 -102
  244. package/dist/adapter/z-stack/constants/zdo.js +104 -104
  245. package/dist/adapter/z-stack/models/index.d.ts +1 -1
  246. package/dist/adapter/z-stack/models/index.js +17 -17
  247. package/dist/adapter/z-stack/models/startup-options.d.ts +12 -12
  248. package/dist/adapter/z-stack/models/startup-options.js +2 -2
  249. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +23 -23
  250. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +45 -45
  251. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +1 -1
  252. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +10 -10
  253. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +22 -22
  254. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +10 -10
  255. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +21 -21
  256. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +10 -10
  257. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +23 -23
  258. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +10 -10
  259. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +24 -24
  260. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +10 -10
  261. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +23 -23
  262. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +8 -8
  263. package/dist/adapter/z-stack/structs/entries/channel-list.js +15 -15
  264. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +8 -8
  265. package/dist/adapter/z-stack/structs/entries/has-configured.js +16 -16
  266. package/dist/adapter/z-stack/structs/entries/index.d.ts +16 -16
  267. package/dist/adapter/z-stack/structs/entries/index.js +32 -32
  268. package/dist/adapter/z-stack/structs/entries/nib.d.ts +10 -10
  269. package/dist/adapter/z-stack/structs/entries/nib.js +68 -68
  270. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +10 -10
  271. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +18 -18
  272. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +8 -8
  273. package/dist/adapter/z-stack/structs/entries/nwk-key.js +15 -15
  274. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +8 -8
  275. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +15 -15
  276. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +13 -13
  277. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +23 -23
  278. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +10 -10
  279. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +22 -22
  280. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +20 -20
  281. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +36 -36
  282. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +1 -1
  283. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +10 -10
  284. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +24 -24
  285. package/dist/adapter/z-stack/structs/index.d.ts +4 -4
  286. package/dist/adapter/z-stack/structs/index.js +20 -20
  287. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +13 -13
  288. package/dist/adapter/z-stack/structs/serializable-memory-object.js +2 -2
  289. package/dist/adapter/z-stack/structs/struct.d.ts +99 -99
  290. package/dist/adapter/z-stack/structs/struct.js +296 -295
  291. package/dist/adapter/z-stack/structs/struct.js.map +1 -1
  292. package/dist/adapter/z-stack/structs/table.d.ts +94 -94
  293. package/dist/adapter/z-stack/structs/table.js +163 -161
  294. package/dist/adapter/z-stack/structs/table.js.map +1 -1
  295. package/dist/adapter/z-stack/unpi/constants.d.ts +28 -28
  296. package/dist/adapter/z-stack/unpi/constants.js +39 -41
  297. package/dist/adapter/z-stack/unpi/constants.js.map +1 -1
  298. package/dist/adapter/z-stack/unpi/frame.d.ts +16 -16
  299. package/dist/adapter/z-stack/unpi/frame.js +54 -48
  300. package/dist/adapter/z-stack/unpi/frame.js.map +1 -1
  301. package/dist/adapter/z-stack/unpi/index.d.ts +5 -5
  302. package/dist/adapter/z-stack/unpi/index.js +37 -37
  303. package/dist/adapter/z-stack/unpi/parser.d.ts +10 -10
  304. package/dist/adapter/z-stack/unpi/parser.js +75 -74
  305. package/dist/adapter/z-stack/unpi/parser.js.map +1 -1
  306. package/dist/adapter/z-stack/unpi/writer.d.ts +10 -10
  307. package/dist/adapter/z-stack/unpi/writer.js +44 -44
  308. package/dist/adapter/z-stack/utils/channel-list.d.ts +20 -20
  309. package/dist/adapter/z-stack/utils/channel-list.js +40 -40
  310. package/dist/adapter/z-stack/utils/channel-list.js.map +1 -1
  311. package/dist/adapter/z-stack/utils/index.d.ts +2 -2
  312. package/dist/adapter/z-stack/utils/index.js +18 -18
  313. package/dist/adapter/z-stack/utils/network-options.d.ts +8 -8
  314. package/dist/adapter/z-stack/utils/network-options.js +22 -22
  315. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +11 -11
  316. package/dist/adapter/z-stack/znp/buffaloZnp.js +113 -113
  317. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -1
  318. package/dist/adapter/z-stack/znp/definition.d.ts +5 -5
  319. package/dist/adapter/z-stack/znp/definition.js +3050 -3050
  320. package/dist/adapter/z-stack/znp/index.d.ts +3 -3
  321. package/dist/adapter/z-stack/znp/index.js +10 -10
  322. package/dist/adapter/z-stack/znp/parameterType.d.ts +22 -22
  323. package/dist/adapter/z-stack/znp/parameterType.js +25 -25
  324. package/dist/adapter/z-stack/znp/tstype.d.ts +21 -21
  325. package/dist/adapter/z-stack/znp/tstype.js +2 -2
  326. package/dist/adapter/z-stack/znp/znp.d.ts +44 -43
  327. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  328. package/dist/adapter/z-stack/znp/znp.js +326 -325
  329. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  330. package/dist/adapter/z-stack/znp/zpiObject.d.ts +19 -19
  331. package/dist/adapter/z-stack/znp/zpiObject.js +102 -96
  332. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
  333. package/dist/adapter/zigate/adapter/index.d.ts +2 -2
  334. package/dist/adapter/zigate/adapter/index.js +10 -10
  335. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +70 -70
  336. package/dist/adapter/zigate/adapter/zigateAdapter.js +689 -684
  337. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  338. package/dist/adapter/zigate/debug.d.ts +7 -7
  339. package/dist/adapter/zigate/debug.d.ts.map +1 -1
  340. package/dist/adapter/zigate/debug.js +19 -22
  341. package/dist/adapter/zigate/debug.js.map +1 -1
  342. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +18 -18
  343. package/dist/adapter/zigate/driver/buffaloZiGate.js +139 -139
  344. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  345. package/dist/adapter/zigate/driver/commandType.d.ts +41 -41
  346. package/dist/adapter/zigate/driver/commandType.js +385 -385
  347. package/dist/adapter/zigate/driver/commandType.js.map +1 -1
  348. package/dist/adapter/zigate/driver/constants.d.ts +276 -276
  349. package/dist/adapter/zigate/driver/constants.d.ts.map +1 -1
  350. package/dist/adapter/zigate/driver/constants.js +371 -371
  351. package/dist/adapter/zigate/driver/constants.js.map +1 -1
  352. package/dist/adapter/zigate/driver/frame.d.ts +26 -26
  353. package/dist/adapter/zigate/driver/frame.js +172 -172
  354. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  355. package/dist/adapter/zigate/driver/messageType.d.ts +11 -11
  356. package/dist/adapter/zigate/driver/messageType.js +278 -278
  357. package/dist/adapter/zigate/driver/messageType.js.map +1 -1
  358. package/dist/adapter/zigate/driver/parameterType.d.ts +20 -20
  359. package/dist/adapter/zigate/driver/parameterType.js +23 -23
  360. package/dist/adapter/zigate/driver/ziGateObject.d.ts +23 -23
  361. package/dist/adapter/zigate/driver/ziGateObject.js +110 -106
  362. package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -1
  363. package/dist/adapter/zigate/driver/zigate.d.ts +49 -49
  364. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  365. package/dist/adapter/zigate/driver/zigate.js +296 -303
  366. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  367. package/dist/buffalo/buffalo.d.ts +50 -50
  368. package/dist/buffalo/buffalo.js +324 -322
  369. package/dist/buffalo/buffalo.js.map +1 -1
  370. package/dist/buffalo/index.d.ts +3 -3
  371. package/dist/buffalo/index.js +33 -33
  372. package/dist/buffalo/tstype.d.ts +8 -8
  373. package/dist/buffalo/tstype.js +2 -2
  374. package/dist/controller/controller.d.ts +113 -113
  375. package/dist/controller/controller.d.ts.map +1 -1
  376. package/dist/controller/controller.js +641 -619
  377. package/dist/controller/controller.js.map +1 -1
  378. package/dist/controller/database.d.ts +18 -18
  379. package/dist/controller/database.js +96 -93
  380. package/dist/controller/database.js.map +1 -1
  381. package/dist/controller/events.d.ts +58 -58
  382. package/dist/controller/events.d.ts.map +1 -1
  383. package/dist/controller/events.js +108 -102
  384. package/dist/controller/events.js.map +1 -1
  385. package/dist/controller/greenPower.d.ts +12 -12
  386. package/dist/controller/greenPower.js +221 -220
  387. package/dist/controller/greenPower.js.map +1 -1
  388. package/dist/controller/helpers/index.d.ts +2 -2
  389. package/dist/controller/helpers/index.js +28 -28
  390. package/dist/controller/helpers/request.d.ts +21 -22
  391. package/dist/controller/helpers/request.d.ts.map +1 -1
  392. package/dist/controller/helpers/request.js +77 -71
  393. package/dist/controller/helpers/request.js.map +1 -1
  394. package/dist/controller/helpers/requestQueue.d.ts +13 -0
  395. package/dist/controller/helpers/requestQueue.d.ts.map +1 -0
  396. package/dist/controller/helpers/requestQueue.js +116 -0
  397. package/dist/controller/helpers/requestQueue.js.map +1 -0
  398. package/dist/controller/helpers/zclFrameConverter.d.ts +7 -7
  399. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
  400. package/dist/controller/helpers/zclFrameConverter.js +50 -31
  401. package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
  402. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +5 -5
  403. package/dist/controller/helpers/zclTransactionSequenceNumber.js +13 -13
  404. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +1 -1
  405. package/dist/controller/index.d.ts +5 -5
  406. package/dist/controller/index.js +8 -8
  407. package/dist/controller/logger-stub.d.ts +6 -6
  408. package/dist/controller/logger-stub.js +2 -2
  409. package/dist/controller/model/device.d.ts +132 -133
  410. package/dist/controller/model/device.d.ts.map +1 -1
  411. package/dist/controller/model/device.js +724 -717
  412. package/dist/controller/model/device.js.map +1 -1
  413. package/dist/controller/model/endpoint.d.ts +128 -131
  414. package/dist/controller/model/endpoint.d.ts.map +1 -1
  415. package/dist/controller/model/endpoint.js +755 -821
  416. package/dist/controller/model/endpoint.js.map +1 -1
  417. package/dist/controller/model/entity.d.ts +14 -14
  418. package/dist/controller/model/entity.js +26 -26
  419. package/dist/controller/model/entity.js.map +1 -1
  420. package/dist/controller/model/group.d.ts +38 -38
  421. package/dist/controller/model/group.d.ts.map +1 -1
  422. package/dist/controller/model/group.js +225 -221
  423. package/dist/controller/model/group.js.map +1 -1
  424. package/dist/controller/model/index.d.ts +5 -5
  425. package/dist/controller/model/index.js +14 -14
  426. package/dist/controller/touchlink.d.ts +19 -19
  427. package/dist/controller/touchlink.js +159 -157
  428. package/dist/controller/touchlink.js.map +1 -1
  429. package/dist/controller/tstype.d.ts +20 -21
  430. package/dist/controller/tstype.d.ts.map +1 -1
  431. package/dist/controller/tstype.js +8 -9
  432. package/dist/controller/tstype.js.map +1 -1
  433. package/dist/index.d.ts +3 -3
  434. package/dist/index.js +33 -33
  435. package/dist/models/backup-storage-legacy.d.ts +26 -26
  436. package/dist/models/backup-storage-legacy.js +2 -2
  437. package/dist/models/backup-storage-unified.d.ts +49 -49
  438. package/dist/models/backup-storage-unified.js +2 -2
  439. package/dist/models/backup.d.ts +37 -37
  440. package/dist/models/backup.js +2 -2
  441. package/dist/models/index.d.ts +4 -4
  442. package/dist/models/index.js +20 -20
  443. package/dist/models/network-options.d.ts +12 -12
  444. package/dist/models/network-options.js +2 -2
  445. package/dist/utils/assertString.d.ts +2 -2
  446. package/dist/utils/assertString.js +8 -8
  447. package/dist/utils/assertString.js.map +1 -1
  448. package/dist/utils/backup.d.ts +20 -20
  449. package/dist/utils/backup.d.ts.map +1 -1
  450. package/dist/utils/backup.js +189 -187
  451. package/dist/utils/backup.js.map +1 -1
  452. package/dist/utils/equalsPartial.d.ts +2 -2
  453. package/dist/utils/equalsPartial.js +11 -11
  454. package/dist/utils/index.d.ts +9 -9
  455. package/dist/utils/index.js +45 -45
  456. package/dist/utils/isNumberArray.d.ts +2 -2
  457. package/dist/utils/isNumberArray.js +6 -6
  458. package/dist/utils/queue.d.ts +11 -11
  459. package/dist/utils/queue.d.ts.map +1 -1
  460. package/dist/utils/queue.js +61 -50
  461. package/dist/utils/queue.js.map +1 -1
  462. package/dist/utils/realpathSync.d.ts +2 -2
  463. package/dist/utils/realpathSync.js +12 -12
  464. package/dist/utils/wait.d.ts +2 -2
  465. package/dist/utils/wait.js +8 -8
  466. package/dist/utils/waitress.d.ts +21 -21
  467. package/dist/utils/waitress.d.ts.map +1 -1
  468. package/dist/utils/waitress.js +68 -61
  469. package/dist/utils/waitress.js.map +1 -1
  470. package/dist/zcl/buffaloZcl.d.ts +41 -41
  471. package/dist/zcl/buffaloZcl.d.ts.map +1 -1
  472. package/dist/zcl/buffaloZcl.js +594 -591
  473. package/dist/zcl/buffaloZcl.js.map +1 -1
  474. package/dist/zcl/definition/buffaloZclDataType.d.ts +17 -17
  475. package/dist/zcl/definition/buffaloZclDataType.js +20 -20
  476. package/dist/zcl/definition/cluster.d.ts +29 -29
  477. package/dist/zcl/definition/cluster.d.ts.map +1 -1
  478. package/dist/zcl/definition/cluster.js +5520 -5335
  479. package/dist/zcl/definition/cluster.js.map +1 -1
  480. package/dist/zcl/definition/dataType.d.ts +59 -59
  481. package/dist/zcl/definition/dataType.js +64 -64
  482. package/dist/zcl/definition/direction.d.ts +5 -5
  483. package/dist/zcl/definition/direction.js +8 -8
  484. package/dist/zcl/definition/endpointDeviceType.d.ts +4 -4
  485. package/dist/zcl/definition/endpointDeviceType.js +15 -15
  486. package/dist/zcl/definition/foundation.d.ts +11 -11
  487. package/dist/zcl/definition/foundation.js +167 -167
  488. package/dist/zcl/definition/frameControl.d.ts +10 -10
  489. package/dist/zcl/definition/frameControl.js +2 -2
  490. package/dist/zcl/definition/frameType.d.ts +5 -5
  491. package/dist/zcl/definition/frameType.js +8 -8
  492. package/dist/zcl/definition/index.d.ts +13 -13
  493. package/dist/zcl/definition/index.js +51 -51
  494. package/dist/zcl/definition/manufacturerCode.d.ts +1077 -1074
  495. package/dist/zcl/definition/manufacturerCode.d.ts.map +1 -1
  496. package/dist/zcl/definition/manufacturerCode.js +1082 -1079
  497. package/dist/zcl/definition/manufacturerCode.js.map +1 -1
  498. package/dist/zcl/definition/powerSource.d.ts +4 -4
  499. package/dist/zcl/definition/powerSource.js +12 -12
  500. package/dist/zcl/definition/status.d.ts +38 -38
  501. package/dist/zcl/definition/status.js +41 -41
  502. package/dist/zcl/definition/tstype.d.ts +16 -16
  503. package/dist/zcl/definition/tstype.js +2 -2
  504. package/dist/zcl/index.d.ts +16 -16
  505. package/dist/zcl/index.js +55 -55
  506. package/dist/zcl/tstype.d.ts +56 -56
  507. package/dist/zcl/tstype.js +9 -10
  508. package/dist/zcl/tstype.js.map +1 -1
  509. package/dist/zcl/utils.d.ts +6 -6
  510. package/dist/zcl/utils.js +164 -165
  511. package/dist/zcl/utils.js.map +1 -1
  512. package/dist/zcl/zclFrame.d.ts +40 -40
  513. package/dist/zcl/zclFrame.js +351 -347
  514. package/dist/zcl/zclFrame.js.map +1 -1
  515. package/dist/zcl/zclHeader.d.ts +8 -8
  516. package/dist/zcl/zclHeader.js +2 -2
  517. package/dist/zcl/zclStatusError.d.ts +5 -5
  518. package/dist/zcl/zclStatusError.js +14 -13
  519. package/dist/zcl/zclStatusError.js.map +1 -1
  520. package/package.json +11 -11
  521. package/release-please-config.json +1 -5
  522. package/tsconfig.json +4 -2
@@ -1,685 +1,690 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const Events = __importStar(require("../../events"));
30
- const adapter_1 = __importDefault(require("../../adapter"));
31
- const zcl_1 = require("../../../zcl");
32
- const utils_1 = require("../../../utils");
33
- const zigate_1 = __importDefault(require("../driver/zigate"));
34
- const debug_1 = require("../debug");
35
- const constants_1 = require("../driver/constants");
36
- const buffalo_1 = require("../../../buffalo");
37
- const debug = (0, debug_1.Debug)('adapter');
38
- const default_bind_group = 901; // https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/lib/constants.js#L3
39
- const channelsToMask = (channels) => channels.map((x) => 2 ** x).reduce((acc, x) => acc + x, 0);
40
- class ZiGateAdapter extends adapter_1.default {
41
- constructor(networkOptions, serialPortOptions, backupPath, adapterOptions, logger) {
42
- super(networkOptions, serialPortOptions, backupPath, adapterOptions, logger);
43
- this.joinPermitted = false;
44
- this.driver = new zigate_1.default(serialPortOptions.path, serialPortOptions);
45
- this.waitress = new utils_1.Waitress(this.waitressValidator, this.waitressTimeoutFormatter);
46
- this.driver.on('received', this.zclDataListener.bind(this));
47
- this.driver.on('receivedRaw', this.rawDataListener.bind(this));
48
- this.driver.on('LeaveIndication', this.leaveIndicationListener.bind(this));
49
- this.driver.on('DeviceAnnounce', this.deviceAnnounceListener.bind(this));
50
- this.driver.on('close', this.onZiGateClose.bind(this));
51
- }
52
- /**
53
- * Adapter methods
54
- */
55
- async start() {
56
- let startResult = 'resumed';
57
- try {
58
- await this.driver.open();
59
- debug.log("Connected to ZiGate adapter successfully.");
60
- const resetResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.Reset, {}, 5000);
61
- if (resetResponse.code === constants_1.ZiGateMessageCode.RestartNonFactoryNew) {
62
- startResult = 'resumed';
63
- }
64
- else if (resetResponse.code === constants_1.ZiGateMessageCode.RestartFactoryNew) {
65
- startResult = 'reset';
66
- }
67
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawMode, { enabled: 0x01 });
68
- // @todo check
69
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetDeviceType, {
70
- deviceType: constants_1.DEVICE_TYPE.coordinator
71
- });
72
- await this.initNetwork();
73
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.AddGroup, {
74
- addressMode: constants_1.ADDRESS_MODE.short,
75
- shortAddress: 0x0000,
76
- sourceEndpoint: 0x01,
77
- destinationEndpoint: 0x01,
78
- groupAddress: default_bind_group
79
- });
80
- }
81
- catch (error) {
82
- throw new Error("failed to connect to zigate adapter " + error.message);
83
- }
84
- const concurrent = this.adapterOptions && this.adapterOptions.concurrent ?
85
- this.adapterOptions.concurrent : 2;
86
- debug.log(`Adapter concurrent: ${concurrent}`);
87
- this.queue = new utils_1.Queue(concurrent);
88
- return startResult; // 'resumed' | 'reset' | 'restored'
89
- }
90
- async stop() {
91
- this.closing = true;
92
- await this.driver.close();
93
- }
94
- async getCoordinator() {
95
- debug.log('getCoordinator');
96
- const networkResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.GetNetworkState);
97
- // @TODO deal hardcoded endpoints, made by analogy with deconz
98
- // polling the coordinator on some firmware went into a memory leak, so we don't ask this info
99
- const response = {
100
- networkAddress: 0,
101
- manufacturerID: 0,
102
- ieeeAddr: networkResponse.payload.extendedAddress,
103
- endpoints: constants_1.coordinatorEndpoints
104
- };
105
- debug.log('getCoordinator %o', response);
106
- return response;
107
- }
108
- ;
109
- async getCoordinatorVersion() {
110
- debug.log('getCoordinatorVersion');
111
- return this.driver.sendCommand(constants_1.ZiGateCommandCode.GetVersion, {})
112
- .then((result) => {
113
- const meta = {
114
- "transportrev": 0,
115
- "product": 0,
116
- "majorrel": parseInt(result.payload.major).toString(16),
117
- "minorrel": parseInt(result.payload.minor).toString(16),
118
- "maintrel": parseInt(result.payload.revision).toString(16),
119
- "revision": parseInt(result.payload.revision).toString(16),
120
- };
121
- const version = {
122
- type: 'zigate',
123
- meta: meta,
124
- };
125
- return Promise.resolve(version);
126
- })
127
- .catch((e) => {
128
- debug.error(e);
129
- return Promise.reject(new Error("" + e));
130
- });
131
- }
132
- ;
133
- async permitJoin(seconds, networkAddress) {
134
- const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.PermitJoin, {
135
- targetShortAddress: networkAddress || 0xFFFC,
136
- interval: seconds,
137
- TCsignificance: 0
138
- });
139
- // const result = await this.driver.sendCommand(ZiGateCommandCode.PermitJoinStatus, {});
140
- // Suitable only for the coordinator, not the entire network or point-to-point for routers
141
- this.joinPermitted = result.payload.status === 0;
142
- }
143
- ;
144
- async addInstallCode(ieeeAddress, key) {
145
- return Promise.reject(new Error('Add install code is not supported'));
146
- }
147
- async reset(type) {
148
- debug.log('reset %s', type);
149
- if (type === 'soft') {
150
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.Reset, {}, 5000);
151
- }
152
- else if (type === 'hard') {
153
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.ErasePersistentData, {}, 5000);
154
- }
155
- return Promise.resolve();
156
- }
157
- ;
158
- async getNetworkParameters() {
159
- debug.log('getNetworkParameters');
160
- return this.driver.sendCommand(constants_1.ZiGateCommandCode.GetNetworkState, {}, 10000)
161
- .then((NetworkStateResponse) => {
162
- const resultPayload = {
163
- panID: NetworkStateResponse.payload.PANID,
164
- extendedPanID: NetworkStateResponse.payload.ExtPANID,
165
- channel: NetworkStateResponse.payload.Channel
166
- };
167
- return Promise.resolve(resultPayload);
168
- }).catch(() => Promise.reject(new Error("Get network parameters failed")));
169
- }
170
- ;
171
- /**
172
- * https://zigate.fr/documentation/deplacer-le-pdm-de-la-zigate/
173
- * pdm from host
174
- */
175
- async supportsBackup() {
176
- return false;
177
- }
178
- ;
179
- async backup() {
180
- throw new Error("This adapter does not support backup");
181
- }
182
- ;
183
- async setTransmitPower(value) {
184
- debug.log('setTransmitPower, %o', arguments);
185
- return this.driver.sendCommand(constants_1.ZiGateCommandCode.SetTXpower, { value: value })
186
- .then(() => Promise.resolve()).catch(() => Promise.reject(new Error("Set transmitpower failed")));
187
- }
188
- ;
189
- async lqi(networkAddress) {
190
- return this.queue.execute(async () => {
191
- debug.log('lqi, %o', arguments);
192
- const neighbors = [];
193
- const add = (list) => {
194
- for (const entry of list) {
195
- const relationByte = entry.readUInt8(18);
196
- const extAddr = entry.slice(8, 16);
197
- neighbors.push({
198
- linkquality: entry.readUInt8(21),
199
- networkAddress: entry.readUInt16LE(16),
200
- ieeeAddr: new buffalo_1.Buffalo(extAddr).readIeeeAddr(),
201
- relationship: (relationByte >> 1) & ((1 << 3) - 1),
202
- depth: entry.readUInt8(20)
203
- });
204
- }
205
- };
206
- const request = async (startIndex) => {
207
- try {
208
- const resultPayload = await this.driver.sendCommand(constants_1.ZiGateCommandCode.ManagementLQI, { targetAddress: networkAddress, startIndex: startIndex });
209
- const data = resultPayload.payload.payload;
210
- if (data[1] !== 0) { // status
211
- throw new Error(`LQI for '${networkAddress}' failed`);
212
- }
213
- const tableList = [];
214
- const response = {
215
- status: data[1],
216
- tableEntrys: data[2],
217
- startIndex: data[3],
218
- tableListCount: data[4],
219
- tableList: tableList
220
- };
221
- let tableEntry = [];
222
- let counter = 0;
223
- for (let i = 5; i < ((response.tableListCount * 22) + 5); i++) { // one tableentry = 22 bytes
224
- tableEntry.push(data[i]);
225
- counter++;
226
- if (counter === 22) {
227
- response.tableList.push(Buffer.from(tableEntry));
228
- tableEntry = [];
229
- counter = 0;
230
- }
231
- }
232
- debug.log("LQI RESPONSE - addr: " + networkAddress.toString(16) + " status: "
233
- + response.status + " read " + (response.tableListCount + response.startIndex)
234
- + "/" + response.tableEntrys + " entrys");
235
- return response;
236
- }
237
- catch (error) {
238
- const msg = "LQI REQUEST FAILED - addr: 0x" + networkAddress.toString(16) + " " + error;
239
- debug.log(msg);
240
- return Promise.reject(new Error(msg));
241
- }
242
- };
243
- let response = await request(0);
244
- add(response.tableList);
245
- let nextStartIndex = response.tableListCount;
246
- while (neighbors.length < response.tableEntrys) {
247
- response = await request(nextStartIndex);
248
- add(response.tableList);
249
- nextStartIndex += response.tableListCount;
250
- }
251
- return { neighbors };
252
- }, networkAddress);
253
- }
254
- ;
255
- // @TODO
256
- routingTable(networkAddress) {
257
- debug.log('RoutingTable, %o', arguments);
258
- return;
259
- }
260
- ;
261
- async nodeDescriptor(networkAddress) {
262
- return this.queue.execute(async () => {
263
- debug.log('nodeDescriptor, \n %o', arguments);
264
- try {
265
- const nodeDescriptorResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.NodeDescriptor, {
266
- targetShortAddress: networkAddress
267
- });
268
- const data = nodeDescriptorResponse.payload.payload;
269
- const buf = data;
270
- const logicaltype = (data[4] & 7);
271
- let type = 'Unknown';
272
- switch (logicaltype) {
273
- case 1:
274
- type = 'Router';
275
- break;
276
- case 2:
277
- type = 'EndDevice';
278
- break;
279
- case 0:
280
- type = 'Coordinator';
281
- break;
282
- }
283
- const manufacturer = buf.readUInt16LE(7);
284
- debug.log("RECEIVING NODE_DESCRIPTOR - addr: 0x" + networkAddress.toString(16)
285
- + " type: " + type + " manufacturer: 0x" + manufacturer.toString(16));
286
- return { manufacturerCode: manufacturer, type };
287
- }
288
- catch (error) {
289
- const msg = "RECEIVING NODE_DESCRIPTOR FAILED - addr: 0x" + networkAddress.toString(16) + " " + error;
290
- debug.error(msg);
291
- return Promise.reject(new Error(msg));
292
- }
293
- }, networkAddress);
294
- }
295
- ;
296
- async activeEndpoints(networkAddress) {
297
- return this.queue.execute(async () => {
298
- debug.log('ActiveEndpoints request');
299
- const payload = {
300
- targetShortAddress: networkAddress
301
- };
302
- try {
303
- const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.ActiveEndpoint, payload);
304
- const buf = Buffer.from(result.payload.payload);
305
- const epCount = buf.readUInt8(4);
306
- const epList = [];
307
- for (let i = 5; i < (epCount + 5); i++) {
308
- epList.push(buf.readUInt8(i));
309
- }
310
- const payloadAE = {
311
- endpoints: epList
312
- };
313
- debug.log('ActiveEndpoints response: %o', payloadAE);
314
- return payloadAE;
315
- }
316
- catch (error) {
317
- debug.error("RECEIVING ActiveEndpoints FAILED, %o", error);
318
- return Promise.reject(new Error("RECEIVING ActiveEndpoints FAILED " + error));
319
- }
320
- }, networkAddress);
321
- }
322
- ;
323
- async simpleDescriptor(networkAddress, endpointID) {
324
- return this.queue.execute(async () => {
325
- debug.log('SimpleDescriptor request: %o', arguments);
326
- try {
327
- const payload = {
328
- targetShortAddress: networkAddress,
329
- endpoint: endpointID
330
- };
331
- const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.SimpleDescriptor, payload);
332
- const buf = result.payload.payload;
333
- if (buf.length > 11) {
334
- const inCount = buf.readUInt8(11);
335
- const inClusters = [];
336
- let cIndex = 12;
337
- for (let i = 0; i < inCount; i++) {
338
- inClusters[i] = buf.readUInt16LE(cIndex);
339
- cIndex += 2;
340
- }
341
- const outCount = buf.readUInt8(12 + (inCount * 2));
342
- const outClusters = [];
343
- cIndex = 13 + (inCount * 2);
344
- for (let l = 0; l < outCount; l++) {
345
- outClusters[l] = buf.readUInt16LE(cIndex);
346
- cIndex += 2;
347
- }
348
- const resultPayload = {
349
- profileID: buf.readUInt16LE(6),
350
- endpointID: buf.readUInt8(5),
351
- deviceID: buf.readUInt16LE(8),
352
- inputClusters: inClusters,
353
- outputClusters: outClusters
354
- };
355
- return resultPayload;
356
- }
357
- }
358
- catch (error) {
359
- const msg = "RECEIVING SIMPLE_DESCRIPTOR FAILED - addr: 0x" + networkAddress.toString(16)
360
- + " EP:" + endpointID + " " + error;
361
- debug.error(msg);
362
- return Promise.reject(new Error(msg));
363
- }
364
- }, networkAddress);
365
- }
366
- ;
367
- async bind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
368
- return this.queue.execute(async () => {
369
- debug.log('bind %o', arguments);
370
- let payload = {
371
- targetExtendedAddress: sourceIeeeAddress,
372
- targetEndpoint: sourceEndpoint,
373
- clusterID: clusterID,
374
- destinationAddressMode: (type === 'group') ? constants_1.ADDRESS_MODE.group : constants_1.ADDRESS_MODE.ieee,
375
- destinationAddress: destinationAddressOrGroup,
376
- };
377
- if (typeof destinationEndpoint !== undefined) {
378
- // @ts-ignore
379
- payload['destinationEndpoint'] = destinationEndpoint;
380
- }
381
- const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.Bind, payload, null, { destinationNetworkAddress });
382
- let data = result.payload.payload;
383
- if (data[1] === 0) {
384
- debug.log('Bind %s success', sourceIeeeAddress);
385
- return Promise.resolve();
386
- }
387
- else {
388
- const msg = `Bind ${sourceIeeeAddress} failed`;
389
- debug.error(msg);
390
- return Promise.reject(new Error(msg));
391
- }
392
- }, destinationNetworkAddress);
393
- }
394
- ;
395
- async unbind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
396
- return this.queue.execute(async () => {
397
- debug.log('unbind %o', arguments);
398
- let payload = {
399
- targetExtendedAddress: sourceIeeeAddress,
400
- targetEndpoint: sourceEndpoint,
401
- clusterID: clusterID,
402
- destinationAddressMode: (type === 'group') ? constants_1.ADDRESS_MODE.group : constants_1.ADDRESS_MODE.ieee,
403
- destinationAddress: destinationAddressOrGroup,
404
- };
405
- if (typeof destinationEndpoint !== undefined) {
406
- // @ts-ignore
407
- payload['destinationEndpoint'] = destinationEndpoint;
408
- }
409
- const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.UnBind, payload, null, { destinationNetworkAddress });
410
- let data = result.payload.payload;
411
- if (data[1] === 0) {
412
- debug.log('Unbind %s success', sourceIeeeAddress);
413
- return Promise.resolve();
414
- }
415
- else {
416
- const msg = `Unbind ${sourceIeeeAddress} failed`;
417
- debug.error(msg);
418
- return Promise.reject(new Error(msg));
419
- }
420
- }, destinationNetworkAddress);
421
- }
422
- ;
423
- async removeDevice(networkAddress, ieeeAddr) {
424
- return this.queue.execute(async () => {
425
- const payload = {
426
- shortAddress: networkAddress,
427
- extendedAddress: ieeeAddr,
428
- rejoin: 0,
429
- removeChildren: 0
430
- };
431
- return this.driver.sendCommand(constants_1.ZiGateCommandCode.ManagementLeaveRequest, payload)
432
- .then((Response) => {
433
- return Promise.resolve();
434
- }).catch(() => Promise.reject(new Error("ManagementLeaveRequest failed")));
435
- }, networkAddress);
436
- }
437
- ;
438
- async sendZclFrameToEndpoint(ieeeAddr, networkAddress, endpoint, zclFrame, timeout, disableResponse, disableRecovery, sourceEndpoint) {
439
- return this.queue.execute(async () => {
440
- return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint || 1, zclFrame, timeout, disableResponse, disableRecovery, 0, 0, false, false);
441
- }, networkAddress);
442
- }
443
- ;
444
- async sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt, dataRequestAttempt, checkedNetworkAddress, discoveredRoute) {
445
- debug.info('sendZclFrameToEndpointInternal %s:%i/%i (%i,%i,%i)', ieeeAddr, networkAddress, endpoint, responseAttempt, dataRequestAttempt, this.queue.count());
446
- let response = null;
447
- const data = zclFrame.toBuffer();
448
- const command = zclFrame.getCommand();
449
- const payload = {
450
- addressMode: constants_1.ADDRESS_MODE.short,
451
- targetShortAddress: networkAddress,
452
- sourceEndpoint: sourceEndpoint || 0x01,
453
- destinationEndpoint: endpoint,
454
- profileID: 0x0104,
455
- clusterID: zclFrame.Cluster.ID,
456
- securityMode: 0x02,
457
- radius: 30,
458
- dataLength: data.length,
459
- data: data,
460
- };
461
- if (command.hasOwnProperty('response') && disableResponse === false) {
462
- response = this.waitFor(networkAddress, endpoint, zclFrame.Header.frameControl.frameType, zcl_1.Direction.SERVER_TO_CLIENT, zclFrame.Header.transactionSequenceNumber, zclFrame.Cluster.ID, command.response, timeout);
463
- }
464
- else if (!zclFrame.Header.frameControl.disableDefaultResponse) {
465
- response = this.waitFor(networkAddress, endpoint, zcl_1.FrameType.GLOBAL, zcl_1.Direction.SERVER_TO_CLIENT, zclFrame.Header.transactionSequenceNumber, zclFrame.Cluster.ID, zcl_1.Foundation.defaultRsp.ID, timeout);
466
- }
467
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, disableResponse).catch((e) => {
468
- if (responseAttempt < 1 && !disableRecovery) {
469
- // @todo discover route
470
- return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt + 1, dataRequestAttempt, checkedNetworkAddress, discoveredRoute);
471
- }
472
- });
473
- // @TODO add dataConfirmResult
474
- // @TODO if error codes route / no_resourses wait and resend
475
- if (response !== null) {
476
- try {
477
- // @ts-ignore
478
- return await response.promise;
479
- // @todo discover route
480
- }
481
- catch (error) {
482
- debug.error('Response error %s (%s:%d,%d)', error.toString(), ieeeAddr, networkAddress, responseAttempt);
483
- if (responseAttempt < 1 && !disableRecovery) {
484
- return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt + 1, dataRequestAttempt, checkedNetworkAddress, discoveredRoute);
485
- }
486
- else {
487
- throw error;
488
- }
489
- }
490
- }
491
- else {
492
- return null;
493
- }
494
- }
495
- async sendZclFrameToAll(endpoint, zclFrame, sourceEndpoint) {
496
- return this.queue.execute(async () => {
497
- if (sourceEndpoint !== 0x01 /*&& sourceEndpoint !== 242*/) { // @todo on zigate firmware without gp causes hang
498
- debug.error('source endpoint %d, not supported', sourceEndpoint);
499
- return;
500
- }
501
- const data = zclFrame.toBuffer();
502
- const payload = {
503
- addressMode: constants_1.ADDRESS_MODE.short,
504
- targetShortAddress: 0xFFFD,
505
- sourceEndpoint: sourceEndpoint,
506
- destinationEndpoint: endpoint,
507
- profileID: /*sourceEndpoint === 242 ? 0xa1e0 :*/ 0x0104,
508
- clusterID: zclFrame.Cluster.ID,
509
- securityMode: 0x02,
510
- radius: 30,
511
- dataLength: data.length,
512
- data: data,
513
- };
514
- debug.log('sendZclFrameToAll %o', payload);
515
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, true);
516
- await (0, utils_1.Wait)(200);
517
- });
518
- }
519
- ;
520
- async sendZclFrameToGroup(groupID, zclFrame, sourceEndpoint) {
521
- return this.queue.execute(async () => {
522
- debug.log('sendZclFrameToGroup %o', arguments);
523
- const data = zclFrame.toBuffer();
524
- const payload = {
525
- addressMode: constants_1.ADDRESS_MODE.group,
526
- targetShortAddress: groupID,
527
- sourceEndpoint: sourceEndpoint || 0x01,
528
- destinationEndpoint: 0xFF,
529
- profileID: 0x0104,
530
- clusterID: zclFrame.Cluster.ID,
531
- securityMode: 0x02,
532
- radius: 30,
533
- dataLength: data.length,
534
- data: data,
535
- };
536
- debug.log('sendZclFrameToGroup: \n %o', payload);
537
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, true);
538
- await (0, utils_1.Wait)(200);
539
- });
540
- }
541
- ;
542
- /**
543
- * Supplementary functions
544
- */
545
- async initNetwork() {
546
- debug.log(`Set channel mask ${this.networkOptions.channelList} key`);
547
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetChannelMask, { channelMask: channelsToMask(this.networkOptions.channelList) });
548
- debug.log(`Set security key`);
549
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetSecurityStateKey, {
550
- keyType: this.networkOptions.networkKeyDistribute ?
551
- constants_1.ZPSNwkKeyState.ZPS_ZDO_DISTRIBUTED_LINK_KEY :
552
- constants_1.ZPSNwkKeyState.ZPS_ZDO_PRECONFIGURED_LINK_KEY,
553
- key: this.networkOptions.networkKey,
554
- });
555
- try {
556
- // The block is wrapped in trapping because if the network is already created, the firmware does not accept the new key.
557
- debug.log('Set EPanID %h', this.networkOptions.extendedPanID);
558
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetExtendedPANID, {
559
- panId: this.networkOptions.extendedPanID,
560
- });
561
- await this.driver.sendCommand(constants_1.ZiGateCommandCode.StartNetwork, {});
562
- }
563
- catch (e) {
564
- // @TODO Depending on the type of error, output clear text to the user
565
- debug.error("%o", e);
566
- }
567
- return Promise.resolve();
568
- }
569
- waitFor(networkAddress, endpoint, frameType, direction, transactionSequenceNumber, clusterID, commandIdentifier, timeout) {
570
- debug.log('waitForInternal %o', arguments);
571
- const payload = {
572
- address: networkAddress,
573
- endpoint,
574
- clusterID,
575
- commandIdentifier,
576
- frameType,
577
- direction,
578
- transactionSequenceNumber,
579
- };
580
- const waiter = this.waitress.waitFor(payload, timeout);
581
- const cancel = () => this.waitress.remove(waiter.ID);
582
- return { promise: waiter.start().promise, cancel };
583
- }
584
- ;
585
- static async isValidPath(path) {
586
- return zigate_1.default.isValidPath(path);
587
- }
588
- static async autoDetectPath() {
589
- return zigate_1.default.autoDetectPath();
590
- }
591
- /**
592
- * InterPAN !!! not implemented
593
- */
594
- async setChannelInterPAN(channel) {
595
- debug.log('setChannelInterPAN', arguments);
596
- return Promise.reject("Not supported");
597
- }
598
- ;
599
- async sendZclFrameInterPANToIeeeAddr(zclFrame, ieeeAddress) {
600
- debug.log('sendZclFrameInterPANToIeeeAddr', arguments);
601
- return Promise.reject("Not supported");
602
- }
603
- ;
604
- async sendZclFrameInterPANBroadcast(zclFrame, timeout) {
605
- debug.log('sendZclFrameInterPANBroadcast', arguments);
606
- return Promise.reject("Not supported");
607
- }
608
- ;
609
- restoreChannelInterPAN() {
610
- debug.log('restoreChannelInterPAN', arguments);
611
- return Promise.reject("Not supported");
612
- }
613
- ;
614
- deviceAnnounceListener(networkAddress, ieeeAddr) {
615
- // @todo debounce
616
- const payload = { networkAddress, ieeeAddr };
617
- if (this.joinPermitted === true) {
618
- this.emit(Events.Events.deviceJoined, payload);
619
- }
620
- else {
621
- this.emit(Events.Events.deviceAnnounce, payload);
622
- }
623
- }
624
- zclDataListener(data) {
625
- if (data.zclFrame instanceof zcl_1.ZclFrame) {
626
- const payload = {
627
- address: data.ziGateObject.payload.sourceAddress,
628
- frame: data.zclFrame,
629
- endpoint: data.ziGateObject.payload.sourceEndpoint,
630
- linkquality: data.ziGateObject.frame.readRSSI(),
631
- groupID: null,
632
- wasBroadcast: false,
633
- destinationEndpoint: data.ziGateObject.payload.destinationEndpoint,
634
- };
635
- this.waitress.resolve(payload);
636
- this.emit(Events.Events.zclData, payload);
637
- }
638
- else {
639
- debug.error('msg not zclFrame', data.zclFrame);
640
- }
641
- }
642
- rawDataListener(data) {
643
- const payload = {
644
- clusterID: data.ziGateObject.payload.clusterID,
645
- data: data.ziGateObject.payload.payload,
646
- address: data.ziGateObject.payload.sourceAddress,
647
- endpoint: data.ziGateObject.payload.sourceEndpoint,
648
- linkquality: data.ziGateObject.frame.readRSSI(),
649
- groupID: null,
650
- wasBroadcast: false,
651
- destinationEndpoint: data.ziGateObject.payload.destinationEndpoint,
652
- };
653
- this.emit(Events.Events.rawData, payload);
654
- }
655
- leaveIndicationListener(data) {
656
- debug.log('LeaveIndication %o', data);
657
- const payload = {
658
- networkAddress: data.ziGateObject.payload.extendedAddress,
659
- ieeeAddr: data.ziGateObject.payload.extendedAddress
660
- };
661
- this.emit(Events.Events.deviceLeave, payload);
662
- }
663
- waitressTimeoutFormatter(matcher, timeout) {
664
- return `Timeout - ${matcher.address} - ${matcher.endpoint}` +
665
- ` - ${matcher.transactionSequenceNumber} - ${matcher.clusterID}` +
666
- ` - ${matcher.commandIdentifier} after ${timeout}ms`;
667
- }
668
- waitressValidator(payload, matcher) {
669
- const transactionSequenceNumber = payload.frame.Header.transactionSequenceNumber;
670
- return (!matcher.address || payload.address === matcher.address) &&
671
- matcher.endpoint === payload.endpoint &&
672
- (!matcher.transactionSequenceNumber || transactionSequenceNumber === matcher.transactionSequenceNumber) &&
673
- matcher.clusterID === payload.frame.Cluster.ID &&
674
- matcher.frameType === payload.frame.Header.frameControl.frameType &&
675
- matcher.commandIdentifier === payload.frame.Header.commandIdentifier &&
676
- matcher.direction === payload.frame.Header.frameControl.direction;
677
- }
678
- onZiGateClose() {
679
- if (!this.closing) {
680
- this.emit(Events.Events.disconnected);
681
- }
682
- }
683
- }
684
- exports.default = ZiGateAdapter;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const Events = __importStar(require("../../events"));
30
+ const adapter_1 = __importDefault(require("../../adapter"));
31
+ const zcl_1 = require("../../../zcl");
32
+ const utils_1 = require("../../../utils");
33
+ const zigate_1 = __importDefault(require("../driver/zigate"));
34
+ const debug_1 = require("../debug");
35
+ const constants_1 = require("../driver/constants");
36
+ const buffalo_1 = require("../../../buffalo");
37
+ const debug = (0, debug_1.Debug)('adapter');
38
+ const default_bind_group = 901; // https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/lib/constants.js#L3
39
+ const channelsToMask = (channels) => channels.map((x) => 2 ** x).reduce((acc, x) => acc + x, 0);
40
+ class ZiGateAdapter extends adapter_1.default {
41
+ driver;
42
+ joinPermitted;
43
+ waitress;
44
+ closing;
45
+ queue;
46
+ constructor(networkOptions, serialPortOptions, backupPath, adapterOptions, logger) {
47
+ super(networkOptions, serialPortOptions, backupPath, adapterOptions, logger);
48
+ this.joinPermitted = false;
49
+ this.driver = new zigate_1.default(serialPortOptions.path, serialPortOptions);
50
+ this.waitress = new utils_1.Waitress(this.waitressValidator, this.waitressTimeoutFormatter);
51
+ this.driver.on('received', this.zclDataListener.bind(this));
52
+ this.driver.on('receivedRaw', this.rawDataListener.bind(this));
53
+ this.driver.on('LeaveIndication', this.leaveIndicationListener.bind(this));
54
+ this.driver.on('DeviceAnnounce', this.deviceAnnounceListener.bind(this));
55
+ this.driver.on('close', this.onZiGateClose.bind(this));
56
+ }
57
+ /**
58
+ * Adapter methods
59
+ */
60
+ async start() {
61
+ let startResult = 'resumed';
62
+ try {
63
+ await this.driver.open();
64
+ debug.log("Connected to ZiGate adapter successfully.");
65
+ const resetResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.Reset, {}, 5000);
66
+ if (resetResponse.code === constants_1.ZiGateMessageCode.RestartNonFactoryNew) {
67
+ startResult = 'resumed';
68
+ }
69
+ else if (resetResponse.code === constants_1.ZiGateMessageCode.RestartFactoryNew) {
70
+ startResult = 'reset';
71
+ }
72
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawMode, { enabled: 0x01 });
73
+ // @todo check
74
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetDeviceType, {
75
+ deviceType: constants_1.DEVICE_TYPE.coordinator
76
+ });
77
+ await this.initNetwork();
78
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.AddGroup, {
79
+ addressMode: constants_1.ADDRESS_MODE.short,
80
+ shortAddress: 0x0000,
81
+ sourceEndpoint: 0x01,
82
+ destinationEndpoint: 0x01,
83
+ groupAddress: default_bind_group
84
+ });
85
+ }
86
+ catch (error) {
87
+ throw new Error("failed to connect to zigate adapter " + error.message);
88
+ }
89
+ const concurrent = this.adapterOptions && this.adapterOptions.concurrent ?
90
+ this.adapterOptions.concurrent : 2;
91
+ debug.log(`Adapter concurrent: ${concurrent}`);
92
+ this.queue = new utils_1.Queue(concurrent);
93
+ return startResult; // 'resumed' | 'reset' | 'restored'
94
+ }
95
+ async stop() {
96
+ this.closing = true;
97
+ await this.driver.close();
98
+ }
99
+ async getCoordinator() {
100
+ debug.log('getCoordinator');
101
+ const networkResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.GetNetworkState);
102
+ // @TODO deal hardcoded endpoints, made by analogy with deconz
103
+ // polling the coordinator on some firmware went into a memory leak, so we don't ask this info
104
+ const response = {
105
+ networkAddress: 0,
106
+ manufacturerID: 0,
107
+ ieeeAddr: networkResponse.payload.extendedAddress,
108
+ endpoints: constants_1.coordinatorEndpoints
109
+ };
110
+ debug.log('getCoordinator %o', response);
111
+ return response;
112
+ }
113
+ ;
114
+ async getCoordinatorVersion() {
115
+ debug.log('getCoordinatorVersion');
116
+ return this.driver.sendCommand(constants_1.ZiGateCommandCode.GetVersion, {})
117
+ .then((result) => {
118
+ const meta = {
119
+ "transportrev": 0,
120
+ "product": 0,
121
+ "majorrel": parseInt(result.payload.major).toString(16),
122
+ "minorrel": parseInt(result.payload.minor).toString(16),
123
+ "maintrel": parseInt(result.payload.revision).toString(16),
124
+ "revision": parseInt(result.payload.revision).toString(16),
125
+ };
126
+ const version = {
127
+ type: 'zigate',
128
+ meta: meta,
129
+ };
130
+ return Promise.resolve(version);
131
+ })
132
+ .catch((e) => {
133
+ debug.error(e);
134
+ return Promise.reject(new Error("" + e));
135
+ });
136
+ }
137
+ ;
138
+ async permitJoin(seconds, networkAddress) {
139
+ const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.PermitJoin, {
140
+ targetShortAddress: networkAddress || 0xFFFC,
141
+ interval: seconds,
142
+ TCsignificance: 0
143
+ });
144
+ // const result = await this.driver.sendCommand(ZiGateCommandCode.PermitJoinStatus, {});
145
+ // Suitable only for the coordinator, not the entire network or point-to-point for routers
146
+ this.joinPermitted = result.payload.status === 0;
147
+ }
148
+ ;
149
+ async addInstallCode(ieeeAddress, key) {
150
+ return Promise.reject(new Error('Add install code is not supported'));
151
+ }
152
+ async reset(type) {
153
+ debug.log('reset %s', type);
154
+ if (type === 'soft') {
155
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.Reset, {}, 5000);
156
+ }
157
+ else if (type === 'hard') {
158
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.ErasePersistentData, {}, 5000);
159
+ }
160
+ return Promise.resolve();
161
+ }
162
+ ;
163
+ async getNetworkParameters() {
164
+ debug.log('getNetworkParameters');
165
+ return this.driver.sendCommand(constants_1.ZiGateCommandCode.GetNetworkState, {}, 10000)
166
+ .then((NetworkStateResponse) => {
167
+ const resultPayload = {
168
+ panID: NetworkStateResponse.payload.PANID,
169
+ extendedPanID: NetworkStateResponse.payload.ExtPANID,
170
+ channel: NetworkStateResponse.payload.Channel
171
+ };
172
+ return Promise.resolve(resultPayload);
173
+ }).catch(() => Promise.reject(new Error("Get network parameters failed")));
174
+ }
175
+ ;
176
+ /**
177
+ * https://zigate.fr/documentation/deplacer-le-pdm-de-la-zigate/
178
+ * pdm from host
179
+ */
180
+ async supportsBackup() {
181
+ return false;
182
+ }
183
+ ;
184
+ async backup() {
185
+ throw new Error("This adapter does not support backup");
186
+ }
187
+ ;
188
+ async setTransmitPower(value) {
189
+ debug.log('setTransmitPower, %o', arguments);
190
+ return this.driver.sendCommand(constants_1.ZiGateCommandCode.SetTXpower, { value: value })
191
+ .then(() => Promise.resolve()).catch(() => Promise.reject(new Error("Set transmitpower failed")));
192
+ }
193
+ ;
194
+ async lqi(networkAddress) {
195
+ return this.queue.execute(async () => {
196
+ debug.log('lqi, %o', arguments);
197
+ const neighbors = [];
198
+ const add = (list) => {
199
+ for (const entry of list) {
200
+ const relationByte = entry.readUInt8(18);
201
+ const extAddr = entry.slice(8, 16);
202
+ neighbors.push({
203
+ linkquality: entry.readUInt8(21),
204
+ networkAddress: entry.readUInt16LE(16),
205
+ ieeeAddr: new buffalo_1.Buffalo(extAddr).readIeeeAddr(),
206
+ relationship: (relationByte >> 1) & ((1 << 3) - 1),
207
+ depth: entry.readUInt8(20)
208
+ });
209
+ }
210
+ };
211
+ const request = async (startIndex) => {
212
+ try {
213
+ const resultPayload = await this.driver.sendCommand(constants_1.ZiGateCommandCode.ManagementLQI, { targetAddress: networkAddress, startIndex: startIndex });
214
+ const data = resultPayload.payload.payload;
215
+ if (data[1] !== 0) { // status
216
+ throw new Error(`LQI for '${networkAddress}' failed`);
217
+ }
218
+ const tableList = [];
219
+ const response = {
220
+ status: data[1],
221
+ tableEntrys: data[2],
222
+ startIndex: data[3],
223
+ tableListCount: data[4],
224
+ tableList: tableList
225
+ };
226
+ let tableEntry = [];
227
+ let counter = 0;
228
+ for (let i = 5; i < ((response.tableListCount * 22) + 5); i++) { // one tableentry = 22 bytes
229
+ tableEntry.push(data[i]);
230
+ counter++;
231
+ if (counter === 22) {
232
+ response.tableList.push(Buffer.from(tableEntry));
233
+ tableEntry = [];
234
+ counter = 0;
235
+ }
236
+ }
237
+ debug.log("LQI RESPONSE - addr: " + networkAddress.toString(16) + " status: "
238
+ + response.status + " read " + (response.tableListCount + response.startIndex)
239
+ + "/" + response.tableEntrys + " entrys");
240
+ return response;
241
+ }
242
+ catch (error) {
243
+ const msg = "LQI REQUEST FAILED - addr: 0x" + networkAddress.toString(16) + " " + error;
244
+ debug.log(msg);
245
+ return Promise.reject(new Error(msg));
246
+ }
247
+ };
248
+ let response = await request(0);
249
+ add(response.tableList);
250
+ let nextStartIndex = response.tableListCount;
251
+ while (neighbors.length < response.tableEntrys) {
252
+ response = await request(nextStartIndex);
253
+ add(response.tableList);
254
+ nextStartIndex += response.tableListCount;
255
+ }
256
+ return { neighbors };
257
+ }, networkAddress);
258
+ }
259
+ ;
260
+ // @TODO
261
+ routingTable(networkAddress) {
262
+ debug.log('RoutingTable, %o', arguments);
263
+ return;
264
+ }
265
+ ;
266
+ async nodeDescriptor(networkAddress) {
267
+ return this.queue.execute(async () => {
268
+ debug.log('nodeDescriptor, \n %o', arguments);
269
+ try {
270
+ const nodeDescriptorResponse = await this.driver.sendCommand(constants_1.ZiGateCommandCode.NodeDescriptor, {
271
+ targetShortAddress: networkAddress
272
+ });
273
+ const data = nodeDescriptorResponse.payload.payload;
274
+ const buf = data;
275
+ const logicaltype = (data[4] & 7);
276
+ let type = 'Unknown';
277
+ switch (logicaltype) {
278
+ case 1:
279
+ type = 'Router';
280
+ break;
281
+ case 2:
282
+ type = 'EndDevice';
283
+ break;
284
+ case 0:
285
+ type = 'Coordinator';
286
+ break;
287
+ }
288
+ const manufacturer = buf.readUInt16LE(7);
289
+ debug.log("RECEIVING NODE_DESCRIPTOR - addr: 0x" + networkAddress.toString(16)
290
+ + " type: " + type + " manufacturer: 0x" + manufacturer.toString(16));
291
+ return { manufacturerCode: manufacturer, type };
292
+ }
293
+ catch (error) {
294
+ const msg = "RECEIVING NODE_DESCRIPTOR FAILED - addr: 0x" + networkAddress.toString(16) + " " + error;
295
+ debug.error(msg);
296
+ return Promise.reject(new Error(msg));
297
+ }
298
+ }, networkAddress);
299
+ }
300
+ ;
301
+ async activeEndpoints(networkAddress) {
302
+ return this.queue.execute(async () => {
303
+ debug.log('ActiveEndpoints request');
304
+ const payload = {
305
+ targetShortAddress: networkAddress
306
+ };
307
+ try {
308
+ const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.ActiveEndpoint, payload);
309
+ const buf = Buffer.from(result.payload.payload);
310
+ const epCount = buf.readUInt8(4);
311
+ const epList = [];
312
+ for (let i = 5; i < (epCount + 5); i++) {
313
+ epList.push(buf.readUInt8(i));
314
+ }
315
+ const payloadAE = {
316
+ endpoints: epList
317
+ };
318
+ debug.log('ActiveEndpoints response: %o', payloadAE);
319
+ return payloadAE;
320
+ }
321
+ catch (error) {
322
+ debug.error("RECEIVING ActiveEndpoints FAILED, %o", error);
323
+ return Promise.reject(new Error("RECEIVING ActiveEndpoints FAILED " + error));
324
+ }
325
+ }, networkAddress);
326
+ }
327
+ ;
328
+ async simpleDescriptor(networkAddress, endpointID) {
329
+ return this.queue.execute(async () => {
330
+ debug.log('SimpleDescriptor request: %o', arguments);
331
+ try {
332
+ const payload = {
333
+ targetShortAddress: networkAddress,
334
+ endpoint: endpointID
335
+ };
336
+ const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.SimpleDescriptor, payload);
337
+ const buf = result.payload.payload;
338
+ if (buf.length > 11) {
339
+ const inCount = buf.readUInt8(11);
340
+ const inClusters = [];
341
+ let cIndex = 12;
342
+ for (let i = 0; i < inCount; i++) {
343
+ inClusters[i] = buf.readUInt16LE(cIndex);
344
+ cIndex += 2;
345
+ }
346
+ const outCount = buf.readUInt8(12 + (inCount * 2));
347
+ const outClusters = [];
348
+ cIndex = 13 + (inCount * 2);
349
+ for (let l = 0; l < outCount; l++) {
350
+ outClusters[l] = buf.readUInt16LE(cIndex);
351
+ cIndex += 2;
352
+ }
353
+ const resultPayload = {
354
+ profileID: buf.readUInt16LE(6),
355
+ endpointID: buf.readUInt8(5),
356
+ deviceID: buf.readUInt16LE(8),
357
+ inputClusters: inClusters,
358
+ outputClusters: outClusters
359
+ };
360
+ return resultPayload;
361
+ }
362
+ }
363
+ catch (error) {
364
+ const msg = "RECEIVING SIMPLE_DESCRIPTOR FAILED - addr: 0x" + networkAddress.toString(16)
365
+ + " EP:" + endpointID + " " + error;
366
+ debug.error(msg);
367
+ return Promise.reject(new Error(msg));
368
+ }
369
+ }, networkAddress);
370
+ }
371
+ ;
372
+ async bind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
373
+ return this.queue.execute(async () => {
374
+ debug.log('bind %o', arguments);
375
+ let payload = {
376
+ targetExtendedAddress: sourceIeeeAddress,
377
+ targetEndpoint: sourceEndpoint,
378
+ clusterID: clusterID,
379
+ destinationAddressMode: (type === 'group') ? constants_1.ADDRESS_MODE.group : constants_1.ADDRESS_MODE.ieee,
380
+ destinationAddress: destinationAddressOrGroup,
381
+ };
382
+ if (typeof destinationEndpoint !== undefined) {
383
+ // @ts-ignore
384
+ payload['destinationEndpoint'] = destinationEndpoint;
385
+ }
386
+ const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.Bind, payload, null, { destinationNetworkAddress });
387
+ let data = result.payload.payload;
388
+ if (data[1] === 0) {
389
+ debug.log('Bind %s success', sourceIeeeAddress);
390
+ return Promise.resolve();
391
+ }
392
+ else {
393
+ const msg = `Bind ${sourceIeeeAddress} failed`;
394
+ debug.error(msg);
395
+ return Promise.reject(new Error(msg));
396
+ }
397
+ }, destinationNetworkAddress);
398
+ }
399
+ ;
400
+ async unbind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
401
+ return this.queue.execute(async () => {
402
+ debug.log('unbind %o', arguments);
403
+ let payload = {
404
+ targetExtendedAddress: sourceIeeeAddress,
405
+ targetEndpoint: sourceEndpoint,
406
+ clusterID: clusterID,
407
+ destinationAddressMode: (type === 'group') ? constants_1.ADDRESS_MODE.group : constants_1.ADDRESS_MODE.ieee,
408
+ destinationAddress: destinationAddressOrGroup,
409
+ };
410
+ if (typeof destinationEndpoint !== undefined) {
411
+ // @ts-ignore
412
+ payload['destinationEndpoint'] = destinationEndpoint;
413
+ }
414
+ const result = await this.driver.sendCommand(constants_1.ZiGateCommandCode.UnBind, payload, null, { destinationNetworkAddress });
415
+ let data = result.payload.payload;
416
+ if (data[1] === 0) {
417
+ debug.log('Unbind %s success', sourceIeeeAddress);
418
+ return Promise.resolve();
419
+ }
420
+ else {
421
+ const msg = `Unbind ${sourceIeeeAddress} failed`;
422
+ debug.error(msg);
423
+ return Promise.reject(new Error(msg));
424
+ }
425
+ }, destinationNetworkAddress);
426
+ }
427
+ ;
428
+ async removeDevice(networkAddress, ieeeAddr) {
429
+ return this.queue.execute(async () => {
430
+ const payload = {
431
+ shortAddress: networkAddress,
432
+ extendedAddress: ieeeAddr,
433
+ rejoin: 0,
434
+ removeChildren: 0
435
+ };
436
+ return this.driver.sendCommand(constants_1.ZiGateCommandCode.ManagementLeaveRequest, payload)
437
+ .then((Response) => {
438
+ return Promise.resolve();
439
+ }).catch(() => Promise.reject(new Error("ManagementLeaveRequest failed")));
440
+ }, networkAddress);
441
+ }
442
+ ;
443
+ async sendZclFrameToEndpoint(ieeeAddr, networkAddress, endpoint, zclFrame, timeout, disableResponse, disableRecovery, sourceEndpoint) {
444
+ return this.queue.execute(async () => {
445
+ return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint || 1, zclFrame, timeout, disableResponse, disableRecovery, 0, 0, false, false);
446
+ }, networkAddress);
447
+ }
448
+ ;
449
+ async sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt, dataRequestAttempt, checkedNetworkAddress, discoveredRoute) {
450
+ debug.info('sendZclFrameToEndpointInternal %s:%i/%i (%i,%i,%i)', ieeeAddr, networkAddress, endpoint, responseAttempt, dataRequestAttempt, this.queue.count());
451
+ let response = null;
452
+ const data = zclFrame.toBuffer();
453
+ const command = zclFrame.getCommand();
454
+ const payload = {
455
+ addressMode: constants_1.ADDRESS_MODE.short, //nwk
456
+ targetShortAddress: networkAddress,
457
+ sourceEndpoint: sourceEndpoint || 0x01,
458
+ destinationEndpoint: endpoint,
459
+ profileID: 0x0104,
460
+ clusterID: zclFrame.Cluster.ID,
461
+ securityMode: 0x02,
462
+ radius: 30,
463
+ dataLength: data.length,
464
+ data: data,
465
+ };
466
+ if (command.hasOwnProperty('response') && disableResponse === false) {
467
+ response = this.waitFor(networkAddress, endpoint, zclFrame.Header.frameControl.frameType, zcl_1.Direction.SERVER_TO_CLIENT, zclFrame.Header.transactionSequenceNumber, zclFrame.Cluster.ID, command.response, timeout);
468
+ }
469
+ else if (!zclFrame.Header.frameControl.disableDefaultResponse) {
470
+ response = this.waitFor(networkAddress, endpoint, zcl_1.FrameType.GLOBAL, zcl_1.Direction.SERVER_TO_CLIENT, zclFrame.Header.transactionSequenceNumber, zclFrame.Cluster.ID, zcl_1.Foundation.defaultRsp.ID, timeout);
471
+ }
472
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, disableResponse).catch((e) => {
473
+ if (responseAttempt < 1 && !disableRecovery) {
474
+ // @todo discover route
475
+ return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt + 1, dataRequestAttempt, checkedNetworkAddress, discoveredRoute);
476
+ }
477
+ });
478
+ // @TODO add dataConfirmResult
479
+ // @TODO if error codes route / no_resourses wait and resend
480
+ if (response !== null) {
481
+ try {
482
+ // @ts-ignore
483
+ return await response.promise;
484
+ // @todo discover route
485
+ }
486
+ catch (error) {
487
+ debug.error('Response error %s (%s:%d,%d)', error.toString(), ieeeAddr, networkAddress, responseAttempt);
488
+ if (responseAttempt < 1 && !disableRecovery) {
489
+ return this.sendZclFrameToEndpointInternal(ieeeAddr, networkAddress, endpoint, sourceEndpoint, zclFrame, timeout, disableResponse, disableRecovery, responseAttempt + 1, dataRequestAttempt, checkedNetworkAddress, discoveredRoute);
490
+ }
491
+ else {
492
+ throw error;
493
+ }
494
+ }
495
+ }
496
+ else {
497
+ return null;
498
+ }
499
+ }
500
+ async sendZclFrameToAll(endpoint, zclFrame, sourceEndpoint) {
501
+ return this.queue.execute(async () => {
502
+ if (sourceEndpoint !== 0x01 /*&& sourceEndpoint !== 242*/) { // @todo on zigate firmware without gp causes hang
503
+ debug.error('source endpoint %d, not supported', sourceEndpoint);
504
+ return;
505
+ }
506
+ const data = zclFrame.toBuffer();
507
+ const payload = {
508
+ addressMode: constants_1.ADDRESS_MODE.short, //nwk
509
+ targetShortAddress: 0xFFFD,
510
+ sourceEndpoint: sourceEndpoint,
511
+ destinationEndpoint: endpoint,
512
+ profileID: /*sourceEndpoint === 242 ? 0xa1e0 :*/ 0x0104,
513
+ clusterID: zclFrame.Cluster.ID,
514
+ securityMode: 0x02,
515
+ radius: 30,
516
+ dataLength: data.length,
517
+ data: data,
518
+ };
519
+ debug.log('sendZclFrameToAll %o', payload);
520
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, true);
521
+ await (0, utils_1.Wait)(200);
522
+ });
523
+ }
524
+ ;
525
+ async sendZclFrameToGroup(groupID, zclFrame, sourceEndpoint) {
526
+ return this.queue.execute(async () => {
527
+ debug.log('sendZclFrameToGroup %o', arguments);
528
+ const data = zclFrame.toBuffer();
529
+ const payload = {
530
+ addressMode: constants_1.ADDRESS_MODE.group, //nwk
531
+ targetShortAddress: groupID,
532
+ sourceEndpoint: sourceEndpoint || 0x01,
533
+ destinationEndpoint: 0xFF,
534
+ profileID: 0x0104,
535
+ clusterID: zclFrame.Cluster.ID,
536
+ securityMode: 0x02,
537
+ radius: 30,
538
+ dataLength: data.length,
539
+ data: data,
540
+ };
541
+ debug.log('sendZclFrameToGroup: \n %o', payload);
542
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.RawAPSDataRequest, payload, undefined, {}, true);
543
+ await (0, utils_1.Wait)(200);
544
+ });
545
+ }
546
+ ;
547
+ /**
548
+ * Supplementary functions
549
+ */
550
+ async initNetwork() {
551
+ debug.log(`Set channel mask ${this.networkOptions.channelList} key`);
552
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetChannelMask, { channelMask: channelsToMask(this.networkOptions.channelList) });
553
+ debug.log(`Set security key`);
554
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetSecurityStateKey, {
555
+ keyType: this.networkOptions.networkKeyDistribute ?
556
+ constants_1.ZPSNwkKeyState.ZPS_ZDO_DISTRIBUTED_LINK_KEY :
557
+ constants_1.ZPSNwkKeyState.ZPS_ZDO_PRECONFIGURED_LINK_KEY,
558
+ key: this.networkOptions.networkKey,
559
+ });
560
+ try {
561
+ // The block is wrapped in trapping because if the network is already created, the firmware does not accept the new key.
562
+ debug.log('Set EPanID %h', this.networkOptions.extendedPanID.toString());
563
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.SetExtendedPANID, {
564
+ panId: this.networkOptions.extendedPanID,
565
+ });
566
+ await this.driver.sendCommand(constants_1.ZiGateCommandCode.StartNetwork, {});
567
+ }
568
+ catch (e) {
569
+ // @TODO Depending on the type of error, output clear text to the user
570
+ debug.error("%o", e);
571
+ }
572
+ return Promise.resolve();
573
+ }
574
+ waitFor(networkAddress, endpoint, frameType, direction, transactionSequenceNumber, clusterID, commandIdentifier, timeout) {
575
+ debug.log('waitForInternal %o', arguments);
576
+ const payload = {
577
+ address: networkAddress,
578
+ endpoint,
579
+ clusterID,
580
+ commandIdentifier,
581
+ frameType,
582
+ direction,
583
+ transactionSequenceNumber,
584
+ };
585
+ const waiter = this.waitress.waitFor(payload, timeout);
586
+ const cancel = () => this.waitress.remove(waiter.ID);
587
+ return { promise: waiter.start().promise, cancel };
588
+ }
589
+ ;
590
+ static async isValidPath(path) {
591
+ return zigate_1.default.isValidPath(path);
592
+ }
593
+ static async autoDetectPath() {
594
+ return zigate_1.default.autoDetectPath();
595
+ }
596
+ /**
597
+ * InterPAN !!! not implemented
598
+ */
599
+ async setChannelInterPAN(channel) {
600
+ debug.log('setChannelInterPAN', arguments);
601
+ return Promise.reject("Not supported");
602
+ }
603
+ ;
604
+ async sendZclFrameInterPANToIeeeAddr(zclFrame, ieeeAddress) {
605
+ debug.log('sendZclFrameInterPANToIeeeAddr', arguments);
606
+ return Promise.reject("Not supported");
607
+ }
608
+ ;
609
+ async sendZclFrameInterPANBroadcast(zclFrame, timeout) {
610
+ debug.log('sendZclFrameInterPANBroadcast', arguments);
611
+ return Promise.reject("Not supported");
612
+ }
613
+ ;
614
+ restoreChannelInterPAN() {
615
+ debug.log('restoreChannelInterPAN', arguments);
616
+ return Promise.reject("Not supported");
617
+ }
618
+ ;
619
+ deviceAnnounceListener(networkAddress, ieeeAddr) {
620
+ // @todo debounce
621
+ const payload = { networkAddress, ieeeAddr };
622
+ if (this.joinPermitted === true) {
623
+ this.emit(Events.Events.deviceJoined, payload);
624
+ }
625
+ else {
626
+ this.emit(Events.Events.deviceAnnounce, payload);
627
+ }
628
+ }
629
+ zclDataListener(data) {
630
+ if (data.zclFrame instanceof zcl_1.ZclFrame) {
631
+ const payload = {
632
+ address: data.ziGateObject.payload.sourceAddress,
633
+ frame: data.zclFrame,
634
+ endpoint: data.ziGateObject.payload.sourceEndpoint,
635
+ linkquality: data.ziGateObject.frame.readRSSI(),
636
+ groupID: null, // @todo
637
+ wasBroadcast: false, // TODO
638
+ destinationEndpoint: data.ziGateObject.payload.destinationEndpoint,
639
+ };
640
+ this.waitress.resolve(payload);
641
+ this.emit(Events.Events.zclData, payload);
642
+ }
643
+ else {
644
+ debug.error('msg not zclFrame', data.zclFrame);
645
+ }
646
+ }
647
+ rawDataListener(data) {
648
+ const payload = {
649
+ clusterID: data.ziGateObject.payload.clusterID,
650
+ data: data.ziGateObject.payload.payload,
651
+ address: data.ziGateObject.payload.sourceAddress,
652
+ endpoint: data.ziGateObject.payload.sourceEndpoint,
653
+ linkquality: data.ziGateObject.frame.readRSSI(),
654
+ groupID: null,
655
+ wasBroadcast: false, // TODO
656
+ destinationEndpoint: data.ziGateObject.payload.destinationEndpoint,
657
+ };
658
+ this.emit(Events.Events.rawData, payload);
659
+ }
660
+ leaveIndicationListener(data) {
661
+ debug.log('LeaveIndication %o', data);
662
+ const payload = {
663
+ networkAddress: data.ziGateObject.payload.extendedAddress,
664
+ ieeeAddr: data.ziGateObject.payload.extendedAddress
665
+ };
666
+ this.emit(Events.Events.deviceLeave, payload);
667
+ }
668
+ waitressTimeoutFormatter(matcher, timeout) {
669
+ return `Timeout - ${matcher.address} - ${matcher.endpoint}` +
670
+ ` - ${matcher.transactionSequenceNumber} - ${matcher.clusterID}` +
671
+ ` - ${matcher.commandIdentifier} after ${timeout}ms`;
672
+ }
673
+ waitressValidator(payload, matcher) {
674
+ const transactionSequenceNumber = payload.frame.Header.transactionSequenceNumber;
675
+ return (!matcher.address || payload.address === matcher.address) &&
676
+ matcher.endpoint === payload.endpoint &&
677
+ (!matcher.transactionSequenceNumber || transactionSequenceNumber === matcher.transactionSequenceNumber) &&
678
+ matcher.clusterID === payload.frame.Cluster.ID &&
679
+ matcher.frameType === payload.frame.Header.frameControl.frameType &&
680
+ matcher.commandIdentifier === payload.frame.Header.commandIdentifier &&
681
+ matcher.direction === payload.frame.Header.frameControl.direction;
682
+ }
683
+ onZiGateClose() {
684
+ if (!this.closing) {
685
+ this.emit(Events.Events.disconnected);
686
+ }
687
+ }
688
+ }
689
+ exports.default = ZiGateAdapter;
685
690
  //# sourceMappingURL=zigateAdapter.js.map