@willieee802/zigbee-herdsman 0.36.0 → 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 (428) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +317 -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 +32 -36
  21. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  22. package/dist/adapter/ember/adapter/emberAdapter.js +418 -446
  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 +10 -2
  29. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
  30. package/dist/adapter/ember/adapter/oneWaitress.js +19 -5
  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 +16 -21
  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 +12 -14
  44. package/dist/adapter/ember/enums.d.ts.map +1 -1
  45. package/dist/adapter/ember/enums.js +12 -14
  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 -2
  50. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
  51. package/dist/adapter/ember/ezsp/ezsp.js +218 -199
  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 +11 -5
  56. package/dist/adapter/ember/uart/ash.d.ts.map +1 -1
  57. package/dist/adapter/ember/uart/ash.js +125 -93
  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 +0 -1
  79. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
  80. package/dist/adapter/ezsp/adapter/backup.js +3 -7
  81. package/dist/adapter/ezsp/adapter/backup.js.map +1 -1
  82. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +13 -10
  83. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  84. package/dist/adapter/ezsp/adapter/ezspAdapter.js +79 -72
  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 +1 -4
  90. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  91. package/dist/adapter/ezsp/driver/driver.js +101 -122
  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 +61 -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.js +2 -2
  106. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  107. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
  108. package/dist/adapter/ezsp/driver/uart.js +46 -46
  109. package/dist/adapter/ezsp/driver/uart.js.map +1 -1
  110. package/dist/adapter/ezsp/driver/writer.js +3 -6
  111. package/dist/adapter/ezsp/driver/writer.js.map +1 -1
  112. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -1
  113. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -1
  114. package/dist/adapter/z-stack/adapter/adapter-backup.js +25 -29
  115. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
  116. package/dist/adapter/z-stack/adapter/endpoints.js +4 -4
  117. package/dist/adapter/z-stack/adapter/endpoints.js.map +1 -1
  118. package/dist/adapter/z-stack/adapter/manager.d.ts +1 -4
  119. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  120. package/dist/adapter/z-stack/adapter/manager.js +52 -61
  121. package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
  122. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +12 -10
  123. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  124. package/dist/adapter/z-stack/adapter/zStackAdapter.js +92 -68
  125. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  126. package/dist/adapter/z-stack/unpi/parser.js +6 -6
  127. package/dist/adapter/z-stack/unpi/parser.js.map +1 -1
  128. package/dist/adapter/z-stack/unpi/writer.js +4 -7
  129. package/dist/adapter/z-stack/unpi/writer.js.map +1 -1
  130. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +4 -2
  131. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +1 -1
  132. package/dist/adapter/z-stack/znp/buffaloZnp.js +154 -25
  133. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -1
  134. package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -1
  135. package/dist/adapter/z-stack/znp/definition.js +2 -1
  136. package/dist/adapter/z-stack/znp/definition.js.map +1 -1
  137. package/dist/adapter/z-stack/znp/tstype.d.ts +4 -3
  138. package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -1
  139. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  140. package/dist/adapter/z-stack/znp/znp.js +18 -25
  141. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  142. package/dist/adapter/z-stack/znp/zpiObject.js +2 -2
  143. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
  144. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +13 -12
  145. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  146. package/dist/adapter/zigate/adapter/zigateAdapter.js +81 -90
  147. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  148. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +7 -8
  149. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
  150. package/dist/adapter/zigate/driver/buffaloZiGate.js +150 -100
  151. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  152. package/dist/adapter/zigate/driver/commandType.d.ts +2 -1
  153. package/dist/adapter/zigate/driver/commandType.d.ts.map +1 -1
  154. package/dist/adapter/zigate/driver/commandType.js +56 -52
  155. package/dist/adapter/zigate/driver/commandType.js.map +1 -1
  156. package/dist/adapter/zigate/driver/frame.d.ts.map +1 -1
  157. package/dist/adapter/zigate/driver/frame.js +8 -8
  158. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  159. package/dist/adapter/zigate/driver/messageType.d.ts +2 -1
  160. package/dist/adapter/zigate/driver/messageType.d.ts.map +1 -1
  161. package/dist/adapter/zigate/driver/messageType.js +113 -108
  162. package/dist/adapter/zigate/driver/messageType.js.map +1 -1
  163. package/dist/adapter/zigate/driver/parameterType.d.ts +8 -1
  164. package/dist/adapter/zigate/driver/parameterType.d.ts.map +1 -1
  165. package/dist/adapter/zigate/driver/parameterType.js +9 -0
  166. package/dist/adapter/zigate/driver/parameterType.js.map +1 -1
  167. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
  168. package/dist/adapter/zigate/driver/ziGateObject.js +9 -9
  169. package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -1
  170. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  171. package/dist/adapter/zigate/driver/zigate.js +23 -31
  172. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  173. package/dist/buffalo/buffalo.d.ts +23 -19
  174. package/dist/buffalo/buffalo.d.ts.map +1 -1
  175. package/dist/buffalo/buffalo.js +74 -169
  176. package/dist/buffalo/buffalo.js.map +1 -1
  177. package/dist/buffalo/index.d.ts +1 -2
  178. package/dist/buffalo/index.d.ts.map +1 -1
  179. package/dist/buffalo/index.js +1 -26
  180. package/dist/buffalo/index.js.map +1 -1
  181. package/dist/controller/controller.d.ts +8 -5
  182. package/dist/controller/controller.d.ts.map +1 -1
  183. package/dist/controller/controller.js +181 -126
  184. package/dist/controller/controller.js.map +1 -1
  185. package/dist/controller/database.d.ts +1 -0
  186. package/dist/controller/database.d.ts.map +1 -1
  187. package/dist/controller/database.js +7 -10
  188. package/dist/controller/database.js.map +1 -1
  189. package/dist/controller/events.d.ts +2 -2
  190. package/dist/controller/events.d.ts.map +1 -1
  191. package/dist/controller/events.js +4 -0
  192. package/dist/controller/events.js.map +1 -1
  193. package/dist/controller/greenPower.d.ts +2 -1
  194. package/dist/controller/greenPower.d.ts.map +1 -1
  195. package/dist/controller/greenPower.js +51 -57
  196. package/dist/controller/greenPower.js.map +1 -1
  197. package/dist/controller/helpers/request.d.ts +3 -3
  198. package/dist/controller/helpers/request.d.ts.map +1 -1
  199. package/dist/controller/helpers/request.js +2 -2
  200. package/dist/controller/helpers/request.js.map +1 -1
  201. package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
  202. package/dist/controller/helpers/requestQueue.js +26 -36
  203. package/dist/controller/helpers/requestQueue.js.map +1 -1
  204. package/dist/controller/helpers/zclFrameConverter.d.ts +4 -3
  205. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
  206. package/dist/controller/helpers/zclFrameConverter.js +33 -14
  207. package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
  208. package/dist/controller/model/device.d.ts +12 -5
  209. package/dist/controller/model/device.d.ts.map +1 -1
  210. package/dist/controller/model/device.js +105 -86
  211. package/dist/controller/model/device.js.map +1 -1
  212. package/dist/controller/model/endpoint.d.ts +22 -17
  213. package/dist/controller/model/endpoint.d.ts.map +1 -1
  214. package/dist/controller/model/endpoint.js +139 -228
  215. package/dist/controller/model/endpoint.js.map +1 -1
  216. package/dist/controller/model/group.d.ts +1 -1
  217. package/dist/controller/model/group.d.ts.map +1 -1
  218. package/dist/controller/model/group.js +18 -18
  219. package/dist/controller/model/group.js.map +1 -1
  220. package/dist/controller/touchlink.js +25 -28
  221. package/dist/controller/touchlink.js.map +1 -1
  222. package/dist/index.d.ts +5 -3
  223. package/dist/index.d.ts.map +1 -1
  224. package/dist/index.js +8 -5
  225. package/dist/index.js.map +1 -1
  226. package/dist/utils/logger.d.ts +9 -0
  227. package/dist/utils/logger.d.ts.map +1 -0
  228. package/dist/utils/logger.js +14 -0
  229. package/dist/utils/logger.js.map +1 -0
  230. package/dist/zspec/consts.d.ts +60 -0
  231. package/dist/zspec/consts.d.ts.map +1 -0
  232. package/dist/zspec/consts.js +64 -0
  233. package/dist/zspec/consts.js.map +1 -0
  234. package/dist/zspec/enums.d.ts +19 -0
  235. package/dist/zspec/enums.d.ts.map +1 -0
  236. package/dist/zspec/enums.js +28 -0
  237. package/dist/zspec/enums.js.map +1 -0
  238. package/dist/zspec/index.d.ts +4 -0
  239. package/dist/zspec/index.d.ts.map +1 -0
  240. package/dist/zspec/index.js +43 -0
  241. package/dist/zspec/index.js.map +1 -0
  242. package/dist/zspec/tstypes.d.ts +19 -0
  243. package/dist/zspec/tstypes.d.ts.map +1 -0
  244. package/dist/{buffalo/tstype.js → zspec/tstypes.js} +1 -1
  245. package/dist/zspec/tstypes.js.map +1 -0
  246. package/dist/zspec/utils.d.ts +14 -0
  247. package/dist/zspec/utils.d.ts.map +1 -0
  248. package/dist/zspec/utils.js +29 -0
  249. package/dist/zspec/utils.js.map +1 -0
  250. package/dist/zspec/zcl/buffaloZcl.d.ts +55 -0
  251. package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -0
  252. package/dist/zspec/zcl/buffaloZcl.js +929 -0
  253. package/dist/zspec/zcl/buffaloZcl.js.map +1 -0
  254. package/dist/zspec/zcl/definition/cluster.d.ts +3 -0
  255. package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -0
  256. package/dist/zspec/zcl/definition/cluster.js +5500 -0
  257. package/dist/zspec/zcl/definition/cluster.js.map +1 -0
  258. package/dist/zspec/zcl/definition/consts.d.ts +9 -0
  259. package/dist/zspec/zcl/definition/consts.d.ts.map +1 -0
  260. package/dist/zspec/zcl/definition/consts.js +27 -0
  261. package/dist/zspec/zcl/definition/consts.js.map +1 -0
  262. package/dist/zspec/zcl/definition/enums.d.ts +177 -0
  263. package/dist/zspec/zcl/definition/enums.d.ts.map +1 -0
  264. package/dist/zspec/zcl/definition/enums.js +187 -0
  265. package/dist/zspec/zcl/definition/enums.js.map +1 -0
  266. package/dist/zspec/zcl/definition/foundation.d.ts +11 -0
  267. package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -0
  268. package/dist/zspec/zcl/definition/foundation.js +241 -0
  269. package/dist/zspec/zcl/definition/foundation.js.map +1 -0
  270. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +727 -0
  271. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +1 -0
  272. package/dist/zspec/zcl/definition/manufacturerCode.js +733 -0
  273. package/dist/zspec/zcl/definition/manufacturerCode.js.map +1 -0
  274. package/dist/zspec/zcl/definition/status.d.ts +69 -0
  275. package/dist/zspec/zcl/definition/status.d.ts.map +1 -0
  276. package/dist/zspec/zcl/definition/status.js +74 -0
  277. package/dist/zspec/zcl/definition/status.js.map +1 -0
  278. package/dist/zspec/zcl/definition/tstype.d.ts +114 -0
  279. package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -0
  280. package/dist/{zcl/zclHeader.js → zspec/zcl/definition/tstype.js} +2 -1
  281. package/dist/zspec/zcl/definition/tstype.js.map +1 -0
  282. package/dist/zspec/zcl/index.d.ts +11 -0
  283. package/dist/zspec/zcl/index.d.ts.map +1 -0
  284. package/dist/zspec/zcl/index.js +47 -0
  285. package/dist/zspec/zcl/index.js.map +1 -0
  286. package/dist/zspec/zcl/utils.d.ts +7 -0
  287. package/dist/zspec/zcl/utils.d.ts.map +1 -0
  288. package/dist/zspec/zcl/utils.js +234 -0
  289. package/dist/zspec/zcl/utils.js.map +1 -0
  290. package/dist/zspec/zcl/zclFrame.d.ts +36 -0
  291. package/dist/zspec/zcl/zclFrame.d.ts.map +1 -0
  292. package/dist/zspec/zcl/zclFrame.js +304 -0
  293. package/dist/zspec/zcl/zclFrame.js.map +1 -0
  294. package/dist/zspec/zcl/zclHeader.d.ts +17 -0
  295. package/dist/zspec/zcl/zclHeader.d.ts.map +1 -0
  296. package/dist/zspec/zcl/zclHeader.js +88 -0
  297. package/dist/zspec/zcl/zclHeader.js.map +1 -0
  298. package/dist/zspec/zcl/zclStatusError.d.ts +6 -0
  299. package/dist/zspec/zcl/zclStatusError.d.ts.map +1 -0
  300. package/dist/zspec/zcl/zclStatusError.js +13 -0
  301. package/dist/zspec/zcl/zclStatusError.js.map +1 -0
  302. package/dist/zspec/zdo/buffaloZdo.d.ts +438 -0
  303. package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -0
  304. package/dist/zspec/zdo/buffaloZdo.js +1892 -0
  305. package/dist/zspec/zdo/buffaloZdo.js.map +1 -0
  306. package/dist/zspec/zdo/definition/clusters.d.ts +624 -0
  307. package/dist/zspec/zdo/definition/clusters.d.ts.map +1 -0
  308. package/dist/zspec/zdo/definition/clusters.js +687 -0
  309. package/dist/zspec/zdo/definition/clusters.js.map +1 -0
  310. package/dist/zspec/zdo/definition/consts.d.ts +13 -0
  311. package/dist/zspec/zdo/definition/consts.d.ts.map +1 -0
  312. package/dist/zspec/zdo/definition/consts.js +16 -0
  313. package/dist/zspec/zdo/definition/consts.js.map +1 -0
  314. package/dist/zspec/zdo/definition/enums.d.ts +75 -0
  315. package/dist/zspec/zdo/definition/enums.d.ts.map +1 -0
  316. package/dist/zspec/zdo/definition/enums.js +97 -0
  317. package/dist/zspec/zdo/definition/enums.js.map +1 -0
  318. package/dist/zspec/zdo/definition/status.d.ts +99 -0
  319. package/dist/zspec/zdo/definition/status.d.ts.map +1 -0
  320. package/dist/zspec/zdo/definition/status.js +109 -0
  321. package/dist/zspec/zdo/definition/status.js.map +1 -0
  322. package/dist/zspec/zdo/definition/tstypes.d.ts +787 -0
  323. package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -0
  324. package/dist/{zcl/definition/tstype.js → zspec/zdo/definition/tstypes.js} +1 -1
  325. package/dist/zspec/zdo/definition/tstypes.js.map +1 -0
  326. package/dist/zspec/zdo/index.d.ts +7 -0
  327. package/dist/zspec/zdo/index.d.ts.map +1 -0
  328. package/dist/zspec/zdo/index.js +39 -0
  329. package/dist/zspec/zdo/index.js.map +1 -0
  330. package/dist/zspec/zdo/utils.d.ts +25 -0
  331. package/dist/zspec/zdo/utils.d.ts.map +1 -0
  332. package/dist/zspec/zdo/utils.js +75 -0
  333. package/dist/zspec/zdo/utils.js.map +1 -0
  334. package/dist/zspec/zdo/zdoStatusError.d.ts +6 -0
  335. package/dist/zspec/zdo/zdoStatusError.d.ts.map +1 -0
  336. package/dist/zspec/zdo/zdoStatusError.js +13 -0
  337. package/dist/zspec/zdo/zdoStatusError.js.map +1 -0
  338. package/examples/join-and-log.js +7 -12
  339. package/package.json +5 -5
  340. package/dist/adapter/zigate/debug.d.ts +0 -8
  341. package/dist/adapter/zigate/debug.d.ts.map +0 -1
  342. package/dist/adapter/zigate/debug.js +0 -20
  343. package/dist/adapter/zigate/debug.js.map +0 -1
  344. package/dist/buffalo/tstype.d.ts +0 -9
  345. package/dist/buffalo/tstype.d.ts.map +0 -1
  346. package/dist/buffalo/tstype.js.map +0 -1
  347. package/dist/controller/logger-stub.d.ts +0 -7
  348. package/dist/controller/logger-stub.d.ts.map +0 -1
  349. package/dist/controller/logger-stub.js +0 -3
  350. package/dist/controller/logger-stub.js.map +0 -1
  351. package/dist/zcl/buffaloZcl.d.ts +0 -42
  352. package/dist/zcl/buffaloZcl.d.ts.map +0 -1
  353. package/dist/zcl/buffaloZcl.js +0 -595
  354. package/dist/zcl/buffaloZcl.js.map +0 -1
  355. package/dist/zcl/definition/buffaloZclDataType.d.ts +0 -18
  356. package/dist/zcl/definition/buffaloZclDataType.d.ts.map +0 -1
  357. package/dist/zcl/definition/buffaloZclDataType.js +0 -21
  358. package/dist/zcl/definition/buffaloZclDataType.js.map +0 -1
  359. package/dist/zcl/definition/cluster.d.ts +0 -30
  360. package/dist/zcl/definition/cluster.d.ts.map +0 -1
  361. package/dist/zcl/definition/cluster.js +0 -5531
  362. package/dist/zcl/definition/cluster.js.map +0 -1
  363. package/dist/zcl/definition/dataType.d.ts +0 -60
  364. package/dist/zcl/definition/dataType.d.ts.map +0 -1
  365. package/dist/zcl/definition/dataType.js +0 -65
  366. package/dist/zcl/definition/dataType.js.map +0 -1
  367. package/dist/zcl/definition/direction.d.ts +0 -6
  368. package/dist/zcl/definition/direction.d.ts.map +0 -1
  369. package/dist/zcl/definition/direction.js +0 -9
  370. package/dist/zcl/definition/direction.js.map +0 -1
  371. package/dist/zcl/definition/endpointDeviceType.d.ts +0 -5
  372. package/dist/zcl/definition/endpointDeviceType.d.ts.map +0 -1
  373. package/dist/zcl/definition/endpointDeviceType.js +0 -16
  374. package/dist/zcl/definition/endpointDeviceType.js.map +0 -1
  375. package/dist/zcl/definition/foundation.d.ts +0 -12
  376. package/dist/zcl/definition/foundation.d.ts.map +0 -1
  377. package/dist/zcl/definition/foundation.js +0 -168
  378. package/dist/zcl/definition/foundation.js.map +0 -1
  379. package/dist/zcl/definition/frameControl.d.ts +0 -11
  380. package/dist/zcl/definition/frameControl.d.ts.map +0 -1
  381. package/dist/zcl/definition/frameControl.js +0 -3
  382. package/dist/zcl/definition/frameControl.js.map +0 -1
  383. package/dist/zcl/definition/frameType.d.ts +0 -6
  384. package/dist/zcl/definition/frameType.d.ts.map +0 -1
  385. package/dist/zcl/definition/frameType.js +0 -9
  386. package/dist/zcl/definition/frameType.js.map +0 -1
  387. package/dist/zcl/definition/index.d.ts +0 -14
  388. package/dist/zcl/definition/index.d.ts.map +0 -1
  389. package/dist/zcl/definition/index.js +0 -52
  390. package/dist/zcl/definition/index.js.map +0 -1
  391. package/dist/zcl/definition/manufacturerCode.d.ts +0 -1078
  392. package/dist/zcl/definition/manufacturerCode.d.ts.map +0 -1
  393. package/dist/zcl/definition/manufacturerCode.js +0 -1083
  394. package/dist/zcl/definition/manufacturerCode.js.map +0 -1
  395. package/dist/zcl/definition/powerSource.d.ts +0 -5
  396. package/dist/zcl/definition/powerSource.d.ts.map +0 -1
  397. package/dist/zcl/definition/powerSource.js +0 -13
  398. package/dist/zcl/definition/powerSource.js.map +0 -1
  399. package/dist/zcl/definition/status.d.ts +0 -39
  400. package/dist/zcl/definition/status.d.ts.map +0 -1
  401. package/dist/zcl/definition/status.js +0 -42
  402. package/dist/zcl/definition/status.js.map +0 -1
  403. package/dist/zcl/definition/tstype.d.ts +0 -17
  404. package/dist/zcl/definition/tstype.d.ts.map +0 -1
  405. package/dist/zcl/definition/tstype.js.map +0 -1
  406. package/dist/zcl/index.d.ts +0 -17
  407. package/dist/zcl/index.d.ts.map +0 -1
  408. package/dist/zcl/index.js +0 -56
  409. package/dist/zcl/index.js.map +0 -1
  410. package/dist/zcl/tstype.d.ts +0 -57
  411. package/dist/zcl/tstype.d.ts.map +0 -1
  412. package/dist/zcl/tstype.js +0 -10
  413. package/dist/zcl/tstype.js.map +0 -1
  414. package/dist/zcl/utils.d.ts +0 -7
  415. package/dist/zcl/utils.d.ts.map +0 -1
  416. package/dist/zcl/utils.js +0 -165
  417. package/dist/zcl/utils.js.map +0 -1
  418. package/dist/zcl/zclFrame.d.ts +0 -41
  419. package/dist/zcl/zclFrame.d.ts.map +0 -1
  420. package/dist/zcl/zclFrame.js +0 -352
  421. package/dist/zcl/zclFrame.js.map +0 -1
  422. package/dist/zcl/zclHeader.d.ts +0 -9
  423. package/dist/zcl/zclHeader.d.ts.map +0 -1
  424. package/dist/zcl/zclHeader.js.map +0 -1
  425. package/dist/zcl/zclStatusError.d.ts +0 -6
  426. package/dist/zcl/zclStatusError.d.ts.map +0 -1
  427. package/dist/zcl/zclStatusError.js +0 -15
  428. package/dist/zcl/zclStatusError.js.map +0 -1
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const entity_1 = __importDefault(require("./entity"));
30
- const Zcl = __importStar(require("../../zcl"));
30
+ const Zcl = __importStar(require("../../zspec/zcl"));
31
31
  const zclTransactionSequenceNumber_1 = __importDefault(require("../helpers/zclTransactionSequenceNumber"));
32
32
  const ZclFrameConverter = __importStar(require("../helpers/zclFrameConverter"));
33
33
  const request_1 = __importDefault(require("../helpers/request"));
@@ -40,6 +40,9 @@ const debug = {
40
40
  info: (0, debug_1.default)("zigbee-herdsman:controller:endpoint"),
41
41
  error: (0, debug_1.default)("zigbee-herdsman:controller:endpoint"),
42
42
  };
43
+ const logger_1 = require("../../utils/logger");
44
+ const enums_1 = require("../../zspec/enums");
45
+ const NS = 'zh:controller:endpoint';
43
46
  class Endpoint extends entity_1.default {
44
47
  databaseID;
45
48
  deviceID;
@@ -69,20 +72,16 @@ class Endpoint extends entity_1.default {
69
72
  target = group_1.default.byGroupID(entry.groupID, this.databaseID);
70
73
  }
71
74
  if (target) {
72
- return {
73
- target,
74
- cluster: Zcl.Utils.getCluster(entry.cluster, this.getDevice().manufacturerID),
75
- };
75
+ return { target, cluster: this.getCluster(entry.cluster) };
76
76
  }
77
77
  else {
78
78
  return undefined;
79
79
  }
80
- })
81
- .filter((b) => b !== undefined);
80
+ }).filter(b => b !== undefined);
82
81
  }
83
82
  get configuredReportings() {
84
83
  return this._configuredReportings.map((entry) => {
85
- const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode);
84
+ const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode, this.getDevice().customClusters);
86
85
  let attribute;
87
86
  if (cluster.hasAttribute(entry.attrId)) {
88
87
  attribute = cluster.getAttribute(entry.attrId);
@@ -127,35 +126,35 @@ class Endpoint extends entity_1.default {
127
126
  return device_1.default.byIeeeAddr(this.databaseID, this.deviceIeeeAddress);
128
127
  }
129
128
  /**
130
- * @param {number|string} clusterKey
131
- * @returns {boolean}
132
- */
129
+ * @param {number|string} clusterKey
130
+ * @returns {boolean}
131
+ */
133
132
  supportsInputCluster(clusterKey) {
134
- const cluster = Zcl.Utils.getCluster(clusterKey);
133
+ const cluster = this.getCluster(clusterKey);
135
134
  return this.inputClusters.includes(cluster.ID);
136
135
  }
137
136
  /**
138
- * @param {number|string} clusterKey
139
- * @returns {boolean}
140
- */
137
+ * @param {number|string} clusterKey
138
+ * @returns {boolean}
139
+ */
141
140
  supportsOutputCluster(clusterKey) {
142
- const cluster = Zcl.Utils.getCluster(clusterKey);
141
+ const cluster = this.getCluster(clusterKey);
143
142
  return this.outputClusters.includes(cluster.ID);
144
143
  }
145
144
  /**
146
- * @returns {Zcl.TsType.Cluster[]}
147
- */
145
+ * @returns {ZclTypes.Cluster[]}
146
+ */
148
147
  getInputClusters() {
149
148
  return this.clusterNumbersToClusters(this.inputClusters);
150
149
  }
151
150
  /**
152
- * @returns {Zcl.TsType.Cluster[]}
153
- */
151
+ * @returns {ZclTypes.Cluster[]}
152
+ */
154
153
  getOutputClusters() {
155
154
  return this.clusterNumbersToClusters(this.outputClusters);
156
155
  }
157
156
  clusterNumbersToClusters(clusterNumbers) {
158
- return clusterNumbers.map((c) => Zcl.Utils.getCluster(c, this.getDevice().manufacturerID));
157
+ return clusterNumbers.map((c) => this.getCluster(c));
159
158
  }
160
159
  /*
161
160
  * CRUD
@@ -189,7 +188,7 @@ class Endpoint extends entity_1.default {
189
188
  return new Endpoint(databaseID, ID, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, {}, [], [], {});
190
189
  }
191
190
  saveClusterAttributeKeyValue(clusterKey, list) {
192
- const cluster = Zcl.Utils.getCluster(clusterKey);
191
+ const cluster = this.getCluster(clusterKey);
193
192
  if (!this.clusters[cluster.name])
194
193
  this.clusters[cluster.name] = { attributes: {} };
195
194
  for (const [attribute, value] of Object.entries(list)) {
@@ -197,7 +196,7 @@ class Endpoint extends entity_1.default {
197
196
  }
198
197
  }
199
198
  getClusterAttributeValue(clusterKey, attributeKey) {
200
- const cluster = Zcl.Utils.getCluster(clusterKey);
199
+ const cluster = this.getCluster(clusterKey);
201
200
  const attribute = cluster.getAttribute(attributeKey);
202
201
  if (this.clusters[cluster.name] && this.clusters[cluster.name].attributes) {
203
202
  return this.clusters[cluster.name].attributes[attribute.name];
@@ -214,33 +213,32 @@ class Endpoint extends entity_1.default {
214
213
  return entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, d, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint);
215
214
  }) {
216
215
  const logPrefix = `Request Queue (${this.deviceIeeeAddress}/${this.ID}): `;
217
- const request = new request_1.default(func, frame, this.getDevice().pendingRequestTimeout, options.sendPolicy);
216
+ const device = this.getDevice();
217
+ const request = new request_1.default(func, frame, device.pendingRequestTimeout, options.sendPolicy);
218
218
  if (request.sendPolicy !== 'bulk') {
219
219
  // Check if such a request is already in the queue and remove the old one(s) if necessary
220
220
  this.pendingRequests.filter(request);
221
221
  }
222
222
  // send without queueing if sendPolicy is 'immediate' or if the device has no timeout set
223
- if (request.sendPolicy === 'immediate'
224
- || !this.getDevice().pendingRequestTimeout) {
225
- if (this.getDevice().pendingRequestTimeout > 0) {
226
- debug.info(logPrefix + `send ${frame.getCommand().name} request immediately ` +
227
- `(sendPolicy=${options.sendPolicy})`);
223
+ if (request.sendPolicy === 'immediate' || !device.pendingRequestTimeout) {
224
+ if (device.pendingRequestTimeout > 0) {
225
+ logger_1.logger.debug(logPrefix + `send ${frame.command.name} request immediately (sendPolicy=${options.sendPolicy})`, NS);
228
226
  }
229
227
  return request.send();
230
228
  }
231
229
  // If this is a bulk message, we queue directly.
232
230
  if (request.sendPolicy === 'bulk') {
233
- debug.info(logPrefix + `queue request (${this.pendingRequests.size})))`);
231
+ logger_1.logger.debug(logPrefix + `queue request (${this.pendingRequests.size})`, NS);
234
232
  return this.pendingRequests.queue(request);
235
233
  }
236
234
  try {
237
- debug.info(logPrefix + `send request`);
235
+ logger_1.logger.debug(logPrefix + `send request`, NS);
238
236
  return await request.send();
239
237
  }
240
238
  catch (error) {
241
239
  // If we got a failed transaction, the device is likely sleeping.
242
240
  // Queue for transmission later.
243
- debug.info(logPrefix + `queue request (transaction failed)`);
241
+ logger_1.logger.debug(logPrefix + `queue request (transaction failed)`, NS);
244
242
  return this.pendingRequests.queue(request);
245
243
  }
246
244
  }
@@ -253,11 +251,10 @@ class Endpoint extends entity_1.default {
253
251
  : [payload.statusCode];
254
252
  const invalid = codes.find((c) => c !== Zcl.Status.SUCCESS);
255
253
  if (invalid)
256
- throw new Zcl.ZclStatusError(invalid);
254
+ throw new Zcl.StatusError(invalid);
257
255
  }
258
256
  async report(clusterKey, attributes, options) {
259
- const cluster = Zcl.Utils.getCluster(clusterKey);
260
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
257
+ const cluster = this.getCluster(clusterKey);
261
258
  const payload = [];
262
259
  for (const [nameOrID, value] of Object.entries(attributes)) {
263
260
  if (cluster.hasAttribute(nameOrID)) {
@@ -279,22 +276,10 @@ class Endpoint extends entity_1.default {
279
276
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
280
277
  }
281
278
  }
282
- const log = `Report to ${this.deviceIeeeAddress}/${this.ID} ` +
283
- `${cluster.name}(${JSON.stringify(attributes)}, ${JSON.stringify(options)})`;
284
- debug.info(log);
285
- try {
286
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ??
287
- zclTransactionSequenceNumber_1.default.next(), "report", cluster.ID, payload, options.reservedBits);
288
- await this.sendRequest(frame, options);
289
- }
290
- catch (error) {
291
- error.message = `${log} failed (${error.message})`;
292
- debug.error(error.message);
293
- throw error;
294
- }
279
+ await this.zclCommand(clusterKey, "report", payload, options, attributes);
295
280
  }
296
281
  async write(clusterKey, attributes, options) {
297
- const cluster = Zcl.Utils.getCluster(clusterKey);
282
+ const cluster = this.getCluster(clusterKey);
298
283
  options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
299
284
  options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, Object.keys(attributes), options.manufacturerCode, 'write');
300
285
  const payload = [];
@@ -310,27 +295,11 @@ class Endpoint extends entity_1.default {
310
295
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
311
296
  }
312
297
  }
313
- const log = `Write ${this.deviceIeeeAddress}/${this.ID} ` +
314
- `${cluster.name}(${JSON.stringify(attributes)}, ${JSON.stringify(options)})`;
315
- debug.info(log);
316
- try {
317
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ??
318
- zclTransactionSequenceNumber_1.default.next(), options.writeUndiv ? "writeUndiv" : "write", cluster.ID, payload, options.reservedBits);
319
- const result = await this.sendRequest(frame, options);
320
- if (!options.disableResponse) {
321
- this.checkStatus(result.frame.Payload);
322
- }
323
- }
324
- catch (error) {
325
- error.message = `${log} failed (${error.message})`;
326
- debug.error(error.message);
327
- throw error;
328
- }
298
+ await this.zclCommand(clusterKey, options.writeUndiv ? "writeUndiv" : "write", payload, options, attributes, true);
329
299
  }
330
300
  async writeResponse(clusterKey, transactionSequenceNumber, attributes, options) {
331
301
  (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
332
- const cluster = Zcl.Utils.getCluster(clusterKey);
333
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
302
+ const cluster = this.getCluster(clusterKey);
334
303
  const payload = [];
335
304
  for (const [nameOrID, value] of Object.entries(attributes)) {
336
305
  if (value.hasOwnProperty('status')) {
@@ -349,51 +318,25 @@ class Endpoint extends entity_1.default {
349
318
  throw new Error(`Missing attribute 'status'`);
350
319
  }
351
320
  }
352
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, "writeRsp", cluster.ID, payload, options.reservedBits);
353
- const log = `WriteResponse ${this.deviceIeeeAddress}/${this.ID} ` +
354
- `${cluster.name}(${JSON.stringify(attributes)}, ${JSON.stringify(options)})`;
355
- debug.info(log);
356
- try {
357
- await this.sendRequest(frame, options);
358
- }
359
- catch (error) {
360
- error.message = `${log} failed (${error.message})`;
361
- debug.error(error.message);
362
- throw error;
363
- }
321
+ await this.zclCommand(clusterKey, 'writeRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
364
322
  }
365
323
  async read(clusterKey, attributes, options) {
366
- const cluster = Zcl.Utils.getCluster(clusterKey);
324
+ const device = this.getDevice();
325
+ const cluster = this.getCluster(clusterKey, device);
367
326
  options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
368
327
  options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, options.manufacturerCode, 'read');
369
328
  const payload = [];
370
329
  for (const attribute of attributes) {
371
330
  payload.push({ attrId: typeof attribute === 'number' ? attribute : cluster.getAttribute(attribute).ID });
372
331
  }
373
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), "read", cluster.ID, payload, options.reservedBits);
374
- const log = `Read ${this.deviceIeeeAddress}/${this.ID} ` +
375
- `${cluster.name}(${JSON.stringify(attributes)}, ${JSON.stringify(options)})`;
376
- debug.info(log);
377
- try {
378
- const result = await this.sendRequest(frame, options);
379
- if (!options.disableResponse) {
380
- this.checkStatus(result.frame.Payload);
381
- return ZclFrameConverter.attributeKeyValue(result.frame, this.getDevice().manufacturerID);
382
- }
383
- else {
384
- return null;
385
- }
386
- }
387
- catch (error) {
388
- error.message = `${log} failed (${error.message})`;
389
- debug.error(error.message);
390
- throw error;
332
+ const resultFrame = await this.zclCommand(clusterKey, 'read', payload, options, attributes, true);
333
+ if (resultFrame) {
334
+ return ZclFrameConverter.attributeKeyValue(resultFrame, device.manufacturerID, device.customClusters);
391
335
  }
392
336
  }
393
337
  async readResponse(clusterKey, transactionSequenceNumber, attributes, options) {
394
- (0, assert_1.default)(!options || !options.hasOwnProperty("transactionSequenceNumber"), "Use parameter");
395
- const cluster = Zcl.Utils.getCluster(clusterKey);
396
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
338
+ (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
339
+ const cluster = this.getCluster(clusterKey);
397
340
  const payload = [];
398
341
  for (const [nameOrID, value] of Object.entries(attributes)) {
399
342
  if (cluster.hasAttribute(nameOrID)) {
@@ -417,25 +360,12 @@ class Endpoint extends entity_1.default {
417
360
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
418
361
  }
419
362
  }
420
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, "readRsp", cluster.ID, payload, options.reservedBits);
421
- const log = `ReadResponse ${this.deviceIeeeAddress}/${this.ID} ` +
422
- `${cluster.name}(${JSON.stringify(attributes)}, ${JSON.stringify(options)})`;
423
- debug.info(log);
424
- try {
425
- await this.sendRequest(frame, options);
426
- }
427
- catch (error) {
428
- error.message = `${log} failed (${error.message})`;
429
- debug.error(error.message);
430
- throw error;
431
- }
363
+ await this.zclCommand(clusterKey, 'readRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
432
364
  }
433
365
  addBinding(clusterKey, target) {
434
- const cluster = Zcl.Utils.getCluster(clusterKey);
435
- if (typeof target === "number") {
436
- target =
437
- group_1.default.byGroupID(target, this.databaseID) ||
438
- group_1.default.create(target, this.databaseID);
366
+ const cluster = this.getCluster(clusterKey);
367
+ if (typeof target === 'number') {
368
+ target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
439
369
  }
440
370
  if (!this.binds.find((b) => b.cluster.ID === cluster.ID && b.target === target)) {
441
371
  if (target instanceof group_1.default) {
@@ -457,26 +387,22 @@ class Endpoint extends entity_1.default {
457
387
  }
458
388
  }
459
389
  async bind(clusterKey, target) {
460
- const cluster = Zcl.Utils.getCluster(clusterKey);
461
- const type = target instanceof Endpoint ? "endpoint" : "group";
462
- if (typeof target === "number") {
463
- target =
464
- group_1.default.byGroupID(target, this.databaseID) ||
465
- group_1.default.create(target, this.databaseID);
390
+ const cluster = this.getCluster(clusterKey);
391
+ const type = target instanceof Endpoint ? 'endpoint' : 'group';
392
+ if (typeof target === 'number') {
393
+ target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
466
394
  }
467
395
  const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target.groupID;
468
396
  const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from ` +
469
- `'${target instanceof Endpoint
470
- ? `${destinationAddress}/${target.ID}`
471
- : destinationAddress}'`;
472
- debug.info(log);
397
+ `'${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
398
+ logger_1.logger.debug(log, NS);
473
399
  try {
474
400
  await entity_1.default.getAdapterByID(this.databaseID).bind(this.deviceNetworkAddress, this.deviceIeeeAddress, this.ID, cluster.ID, destinationAddress, type, target instanceof Endpoint ? target.ID : null);
475
401
  this.addBinding(clusterKey, target);
476
402
  }
477
403
  catch (error) {
478
404
  error.message = `${log} failed (${error.message})`;
479
- debug.error(error.message);
405
+ logger_1.logger.debug(error, NS);
480
406
  throw error;
481
407
  }
482
408
  }
@@ -484,18 +410,16 @@ class Endpoint extends entity_1.default {
484
410
  this.getDevice().save();
485
411
  }
486
412
  async unbind(clusterKey, target) {
487
- const cluster = Zcl.Utils.getCluster(clusterKey);
488
- const type = target instanceof Endpoint ? "endpoint" : "group";
413
+ const cluster = this.getCluster(clusterKey);
414
+ const type = target instanceof Endpoint ? 'endpoint' : 'group';
489
415
  const destinationAddress = target instanceof Endpoint
490
416
  ? target.deviceIeeeAddress
491
417
  : target instanceof group_1.default
492
418
  ? target.groupID
493
419
  : target;
494
420
  const log = `Unbind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from ` +
495
- `'${target instanceof Endpoint
496
- ? `${destinationAddress}/${target.ID}`
497
- : destinationAddress}'`;
498
- debug.info(log);
421
+ `'${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
422
+ logger_1.logger.debug(log, NS);
499
423
  try {
500
424
  await entity_1.default.getAdapterByID(this.databaseID).unbind(this.deviceNetworkAddress, this.deviceIeeeAddress, this.ID, cluster.ID, destinationAddress, type, target instanceof Endpoint ? target.ID : null);
501
425
  if (typeof target === "number" &&
@@ -510,29 +434,17 @@ class Endpoint extends entity_1.default {
510
434
  }
511
435
  catch (error) {
512
436
  error.message = `${log} failed (${error.message})`;
513
- debug.error(error.message);
437
+ logger_1.logger.debug(error, NS);
514
438
  throw error;
515
439
  }
516
440
  }
517
441
  async defaultResponse(commandID, status, clusterID, transactionSequenceNumber, options) {
518
- (0, assert_1.default)(!options || !options.hasOwnProperty("transactionSequenceNumber"), "Use parameter");
519
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, null);
442
+ (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
520
443
  const payload = { cmdId: commandID, statusCode: status };
521
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, "defaultRsp", clusterID, payload, options.reservedBits);
522
- const log = `DefaultResponse ${this.deviceIeeeAddress}/${this.ID} ` +
523
- `${clusterID}(${commandID}, ${JSON.stringify(options)})`;
524
- debug.info(log);
525
- try {
526
- await this.sendRequest(frame, options);
527
- }
528
- catch (error) {
529
- error.message = `${log} failed (${error.message})`;
530
- debug.error(error.message);
531
- throw error;
532
- }
444
+ await this.zclCommand(clusterID, 'defaultRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber });
533
445
  }
534
446
  async configureReporting(clusterKey, items, options) {
535
- const cluster = Zcl.Utils.getCluster(clusterKey);
447
+ const cluster = this.getCluster(clusterKey);
536
448
  options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
537
449
  options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, options.manufacturerCode, 'configureReporting');
538
450
  const payload = items.map((item) => {
@@ -558,93 +470,48 @@ class Endpoint extends entity_1.default {
558
470
  repChange: item.reportableChange,
559
471
  };
560
472
  });
561
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), "configReport", cluster.ID, payload, options.reservedBits);
562
- const log = `ConfigureReporting ${this.deviceIeeeAddress}/${this.ID} ` +
563
- `${cluster.name}(${JSON.stringify(items)}, ${JSON.stringify(options)})`;
564
- debug.info(log);
565
- try {
566
- const result = await this.sendRequest(frame, options);
567
- if (!options.disableResponse) {
568
- this.checkStatus(result.frame.Payload);
569
- }
570
- for (const e of payload) {
571
- this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId && c.cluster === cluster.ID &&
572
- (!('manufacturerCode' in c) || c.manufacturerCode === options.manufacturerCode)));
573
- }
574
- for (const entry of payload) {
575
- if (entry.maxRepIntval !== 0xffff) {
576
- this._configuredReportings.push({
577
- cluster: cluster.ID,
578
- attrId: entry.attrId,
579
- minRepIntval: entry.minRepIntval,
580
- maxRepIntval: entry.maxRepIntval,
581
- repChange: entry.repChange,
582
- manufacturerCode: options.manufacturerCode,
583
- });
584
- }
473
+ await this.zclCommand(clusterKey, 'configReport', payload, options, items, true);
474
+ for (const e of payload) {
475
+ this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId && c.cluster === cluster.ID &&
476
+ (!('manufacturerCode' in c) || c.manufacturerCode === options.manufacturerCode)));
477
+ }
478
+ for (const entry of payload) {
479
+ if (entry.maxRepIntval !== 0xFFFF) {
480
+ this._configuredReportings.push({
481
+ cluster: cluster.ID, attrId: entry.attrId, minRepIntval: entry.minRepIntval,
482
+ maxRepIntval: entry.maxRepIntval, repChange: entry.repChange,
483
+ manufacturerCode: options.manufacturerCode,
484
+ });
585
485
  }
586
- this.save();
587
- }
588
- catch (error) {
589
- error.message = `${log} failed (${error.message})`;
590
- debug.error(error.message);
591
- throw error;
592
486
  }
487
+ this.save();
593
488
  }
594
489
  async writeStructured(clusterKey, payload, options) {
595
- const cluster = Zcl.Utils.getCluster(clusterKey);
596
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
597
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.GLOBAL, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), `writeStructured`, cluster.ID, payload, options.reservedBits);
598
- const log = `WriteStructured ${this.deviceIeeeAddress}/${this.ID} ` +
599
- `${cluster.name}(${JSON.stringify(payload)}, ${JSON.stringify(options)})`;
600
- debug.info(log);
601
- try {
602
- await this.sendRequest(frame, options);
603
- // TODO: support `writeStructuredResponse`
604
- }
605
- catch (error) {
606
- error.message = `${log} failed (${error.message})`;
607
- debug.error(error.message);
608
- throw error;
609
- }
490
+ await this.zclCommand(clusterKey, 'writeStructured', payload, options);
491
+ // TODO: support `writeStructuredResponse`
610
492
  }
611
493
  async command(clusterKey, commandKey, payload, options) {
612
- const cluster = Zcl.Utils.getCluster(clusterKey);
613
- const command = cluster.getCommand(commandKey);
614
- const hasResponse = command.hasOwnProperty("response");
615
- options = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
616
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.SPECIFIC, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command.name, cluster.name, payload, options.reservedBits);
617
- const log = `Command ${this.deviceIeeeAddress}/${this.ID} ` +
618
- `${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(options)})`;
619
- debug.info(log);
620
- try {
621
- const result = await this.sendRequest(frame, options);
622
- if (result) {
623
- return result.frame.Payload;
624
- }
625
- }
626
- catch (error) {
627
- error.message = `${log} failed (${error.message})`;
628
- debug.error(error.message);
629
- throw error;
494
+ const frame = await this.zclCommand(clusterKey, commandKey, payload, options, null, false, Zcl.FrameType.SPECIFIC);
495
+ if (frame) {
496
+ return frame.payload;
630
497
  }
631
498
  }
632
499
  async commandResponse(clusterKey, commandKey, payload, options, transactionSequenceNumber) {
633
- (0, assert_1.default)(!options || !options.hasOwnProperty("transactionSequenceNumber"), "Use parameter");
634
- const cluster = Zcl.Utils.getCluster(clusterKey);
500
+ (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
501
+ const device = this.getDevice();
502
+ const cluster = this.getCluster(clusterKey, device);
635
503
  const command = cluster.getCommandResponse(commandKey);
636
- transactionSequenceNumber =
637
- transactionSequenceNumber || zclTransactionSequenceNumber_1.default.next();
504
+ transactionSequenceNumber = transactionSequenceNumber || zclTransactionSequenceNumber_1.default.next();
638
505
  options = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
639
- const frame = Zcl.ZclFrame.create(Zcl.FrameType.SPECIFIC, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, command.name, cluster.name, payload, options.reservedBits);
506
+ const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, command.name, cluster.name, payload, device.customClusters, options.reservedBits);
640
507
  const log = `CommandResponse ${this.deviceIeeeAddress}/${this.ID} ` +
641
508
  `${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(options)})`;
642
- debug.info(log);
509
+ logger_1.logger.debug(log, NS);
643
510
  try {
644
511
  await this.sendRequest(frame, options, async (f) => {
645
512
  // Broadcast Green Power responses
646
513
  if (this.ID === 242) {
647
- await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToAll(242, f, 242);
514
+ await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToAll(242, f, 242, enums_1.BroadcastAddress.RX_ON_WHEN_IDLE);
648
515
  }
649
516
  else {
650
517
  await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, f, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint);
@@ -653,19 +520,20 @@ class Endpoint extends entity_1.default {
653
520
  }
654
521
  catch (error) {
655
522
  error.message = `${log} failed (${error.message})`;
656
- debug.error(error.message);
523
+ logger_1.logger.debug(error, NS);
657
524
  throw error;
658
525
  }
659
526
  }
660
527
  waitForCommand(clusterKey, commandKey, transactionSequenceNumber, timeout) {
661
- const cluster = Zcl.Utils.getCluster(clusterKey);
528
+ const device = this.getDevice();
529
+ const cluster = this.getCluster(clusterKey, device);
662
530
  const command = cluster.getCommand(commandKey);
663
531
  const waiter = entity_1.default.getAdapterByID(this.databaseID).waitFor(this.deviceNetworkAddress, this.ID, Zcl.FrameType.SPECIFIC, Zcl.Direction.CLIENT_TO_SERVER, transactionSequenceNumber, cluster.ID, command.ID, timeout);
664
532
  const promise = new Promise((resolve, reject) => {
665
- waiter.promise.then((payload) => resolve({
666
- header: payload.frame.Header,
667
- payload: payload.frame.Payload,
668
- }), (error) => reject(error));
533
+ waiter.promise.then((payload) => {
534
+ const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, device.customClusters);
535
+ resolve({ header: frame.header, payload: frame.payload });
536
+ }, (error) => reject(error));
669
537
  });
670
538
  return { promise, cancel: waiter.cancel };
671
539
  }
@@ -679,7 +547,7 @@ class Endpoint extends entity_1.default {
679
547
  direction,
680
548
  srcEndpoint: null,
681
549
  reservedBits: 0,
682
- manufacturerCode: manufacturerCode ? manufacturerCode : null,
550
+ manufacturerCode: manufacturerCode ?? null,
683
551
  transactionSequenceNumber: null,
684
552
  writeUndiv: false,
685
553
  ...providedOptions
@@ -727,6 +595,10 @@ class Endpoint extends entity_1.default {
727
595
  });
728
596
  group.addMember(this);
729
597
  }
598
+ getCluster(clusterKey, device = undefined) {
599
+ device = device ?? this.getDevice();
600
+ return Zcl.Utils.getCluster(clusterKey, device.manufacturerID, device.customClusters);
601
+ }
730
602
  /**
731
603
  * Remove endpoint from a group, accepts both a Group and number as parameter.
732
604
  * The number parameter type should only be used when removing from a group which is not known
@@ -751,6 +623,45 @@ class Endpoint extends entity_1.default {
751
623
  }
752
624
  }
753
625
  }
626
+ async zclCommand(clusterKey, commandKey, payload, options, logPayload, checkStatus = false, frameType = Zcl.FrameType.GLOBAL) {
627
+ const device = this.getDevice();
628
+ const cluster = this.getCluster(clusterKey, device);
629
+ const command = (frameType == Zcl.FrameType.GLOBAL) ? Zcl.Utils.getGlobalCommand(commandKey) : cluster.getCommand(commandKey);
630
+ const hasResponse = (frameType == Zcl.FrameType.GLOBAL) ? true : command.hasOwnProperty('response');
631
+ options = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
632
+ const frame = Zcl.Frame.create(frameType, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command.name, cluster.name, payload, device.customClusters, options.reservedBits);
633
+ const log = `ZCL command ${this.deviceIeeeAddress}/${this.ID} ` +
634
+ `${cluster.name}.${command.name}(${JSON.stringify((logPayload) ? logPayload : payload)}, ${JSON.stringify(options)})`;
635
+ logger_1.logger.debug(log, NS);
636
+ try {
637
+ const result = await this.sendRequest(frame, options);
638
+ if (result) {
639
+ const resultFrame = Zcl.Frame.fromBuffer(result.clusterID, result.header, result.data, device.customClusters);
640
+ if (result && checkStatus && !options.disableResponse) {
641
+ this.checkStatus(resultFrame.payload);
642
+ }
643
+ return resultFrame;
644
+ }
645
+ }
646
+ catch (error) {
647
+ error.message = `${log} failed (${error.message})`;
648
+ logger_1.logger.debug(error, NS);
649
+ throw error;
650
+ }
651
+ }
652
+ async zclCommandBroadcast(endpoint, destination, clusterKey, commandKey, payload, options) {
653
+ const device = this.getDevice();
654
+ const cluster = this.getCluster(clusterKey, device);
655
+ const command = cluster.getCommand(commandKey);
656
+ options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
657
+ const sourceEndpoint = options.srcEndpoint ?? this.ID;
658
+ const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, options.direction, true, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command.name, cluster.name, payload, device.customClusters, options.reservedBits);
659
+ const log = `ZCL command broadcast ${this.deviceIeeeAddress}/${sourceEndpoint} to ${destination}/${endpoint} ` +
660
+ `${cluster.name}.${command.name}(${JSON.stringify({ payload, options })})`;
661
+ logger_1.logger.debug(log, NS);
662
+ // if endpoint===0xFF ("broadcast endpoint"), deliver to all endpoints supporting cluster, should be avoided whenever possible
663
+ await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToAll(endpoint, frame, sourceEndpoint, destination);
664
+ }
754
665
  }
755
666
  exports.default = Endpoint;
756
667
  //# sourceMappingURL=endpoint.js.map