@willieee802/zigbee-herdsman-converters 19.44.3 → 19.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/CHANGELOG.md +1101 -0
  2. package/dist/converters/actions.d.ts.map +1 -1
  3. package/dist/converters/actions.js +2 -0
  4. package/dist/converters/actions.js.map +1 -1
  5. package/dist/converters/fromZigbee.d.ts +1 -150
  6. package/dist/converters/fromZigbee.d.ts.map +1 -1
  7. package/dist/converters/fromZigbee.js +183 -3044
  8. package/dist/converters/fromZigbee.js.map +1 -1
  9. package/dist/converters/toZigbee.d.ts +0 -121
  10. package/dist/converters/toZigbee.d.ts.map +1 -1
  11. package/dist/converters/toZigbee.js +289 -2386
  12. package/dist/converters/toZigbee.js.map +1 -1
  13. package/dist/devices/ITCommander.d.ts.map +1 -1
  14. package/dist/devices/ITCommander.js +2 -1
  15. package/dist/devices/ITCommander.js.map +1 -1
  16. package/dist/devices/acova.d.ts.map +1 -1
  17. package/dist/devices/acova.js +69 -2
  18. package/dist/devices/acova.js.map +1 -1
  19. package/dist/devices/adeo.d.ts.map +1 -1
  20. package/dist/devices/adeo.js +35 -3
  21. package/dist/devices/adeo.js.map +1 -1
  22. package/dist/devices/adurosmart.js +1 -1
  23. package/dist/devices/adurosmart.js.map +1 -1
  24. package/dist/devices/amina.d.ts.map +1 -1
  25. package/dist/devices/amina.js +47 -10
  26. package/dist/devices/amina.js.map +1 -1
  27. package/dist/devices/aurora_lighting.d.ts.map +1 -1
  28. package/dist/devices/aurora_lighting.js +15 -0
  29. package/dist/devices/aurora_lighting.js.map +1 -1
  30. package/dist/devices/automaton.d.ts.map +1 -1
  31. package/dist/devices/automaton.js +1 -0
  32. package/dist/devices/automaton.js.map +1 -1
  33. package/dist/devices/avatto.d.ts.map +1 -1
  34. package/dist/devices/avatto.js +29 -24
  35. package/dist/devices/avatto.js.map +1 -1
  36. package/dist/devices/awox.d.ts.map +1 -1
  37. package/dist/devices/awox.js +41 -3
  38. package/dist/devices/awox.js.map +1 -1
  39. package/dist/devices/bacchus.d.ts.map +1 -1
  40. package/dist/devices/bacchus.js +75 -0
  41. package/dist/devices/bacchus.js.map +1 -1
  42. package/dist/devices/bitron.d.ts.map +1 -1
  43. package/dist/devices/bitron.js +29 -2
  44. package/dist/devices/bitron.js.map +1 -1
  45. package/dist/devices/bosch.d.ts.map +1 -1
  46. package/dist/devices/bosch.js +70 -50
  47. package/dist/devices/bosch.js.map +1 -1
  48. package/dist/devices/bticino.d.ts.map +1 -1
  49. package/dist/devices/bticino.js +11 -1
  50. package/dist/devices/bticino.js.map +1 -1
  51. package/dist/devices/byun.d.ts.map +1 -1
  52. package/dist/devices/byun.js +40 -3
  53. package/dist/devices/byun.js.map +1 -1
  54. package/dist/devices/candeo.d.ts.map +1 -1
  55. package/dist/devices/candeo.js +262 -9
  56. package/dist/devices/candeo.js.map +1 -1
  57. package/dist/devices/centralite.d.ts +9 -0
  58. package/dist/devices/centralite.d.ts.map +1 -1
  59. package/dist/devices/centralite.js +44 -5
  60. package/dist/devices/centralite.js.map +1 -1
  61. package/dist/devices/{aubess.d.ts → cigol.d.ts} +1 -1
  62. package/dist/devices/cigol.d.ts.map +1 -0
  63. package/dist/devices/cigol.js +260 -0
  64. package/dist/devices/cigol.js.map +1 -0
  65. package/dist/devices/cleverio.js +2 -2
  66. package/dist/devices/cleverio.js.map +1 -1
  67. package/dist/devices/climax.d.ts.map +1 -1
  68. package/dist/devices/climax.js +15 -1
  69. package/dist/devices/climax.js.map +1 -1
  70. package/dist/devices/ctm.d.ts.map +1 -1
  71. package/dist/devices/ctm.js +845 -496
  72. package/dist/devices/ctm.js.map +1 -1
  73. package/dist/devices/custom_devices_diy.d.ts +183 -1
  74. package/dist/devices/custom_devices_diy.d.ts.map +1 -1
  75. package/dist/devices/custom_devices_diy.js +390 -33
  76. package/dist/devices/custom_devices_diy.js.map +1 -1
  77. package/dist/devices/daewoo.d.ts +3 -0
  78. package/dist/devices/daewoo.d.ts.map +1 -0
  79. package/dist/devices/daewoo.js +198 -0
  80. package/dist/devices/daewoo.js.map +1 -0
  81. package/dist/devices/danfoss.d.ts.map +1 -1
  82. package/dist/devices/danfoss.js +1270 -296
  83. package/dist/devices/danfoss.js.map +1 -1
  84. package/dist/devices/databyte.d.ts.map +1 -1
  85. package/dist/devices/databyte.js +47 -3
  86. package/dist/devices/databyte.js.map +1 -1
  87. package/dist/devices/datek.d.ts.map +1 -1
  88. package/dist/devices/datek.js +202 -41
  89. package/dist/devices/datek.js.map +1 -1
  90. package/dist/devices/dawon_dns.d.ts.map +1 -1
  91. package/dist/devices/dawon_dns.js +14 -1
  92. package/dist/devices/dawon_dns.js.map +1 -1
  93. package/dist/devices/develco.d.ts.map +1 -1
  94. package/dist/devices/develco.js +145 -64
  95. package/dist/devices/develco.js.map +1 -1
  96. package/dist/devices/diyruz.d.ts.map +1 -1
  97. package/dist/devices/diyruz.js +444 -20
  98. package/dist/devices/diyruz.js.map +1 -1
  99. package/dist/devices/domraem.d.ts.map +1 -1
  100. package/dist/devices/domraem.js +7 -0
  101. package/dist/devices/domraem.js.map +1 -1
  102. package/dist/devices/easyaccess.d.ts.map +1 -1
  103. package/dist/devices/easyaccess.js +22 -2
  104. package/dist/devices/easyaccess.js.map +1 -1
  105. package/dist/devices/easyiot.d.ts.map +1 -1
  106. package/dist/devices/easyiot.js +767 -5
  107. package/dist/devices/easyiot.js.map +1 -1
  108. package/dist/devices/echostar.d.ts.map +1 -1
  109. package/dist/devices/echostar.js +25 -1
  110. package/dist/devices/echostar.js.map +1 -1
  111. package/dist/devices/ecodim.d.ts.map +1 -1
  112. package/dist/devices/ecodim.js +8 -0
  113. package/dist/devices/ecodim.js.map +1 -1
  114. package/dist/devices/ecolink.d.ts.map +1 -1
  115. package/dist/devices/ecolink.js +12 -0
  116. package/dist/devices/ecolink.js.map +1 -1
  117. package/dist/devices/efekta.d.ts.map +1 -1
  118. package/dist/devices/efekta.js +1615 -60
  119. package/dist/devices/efekta.js.map +1 -1
  120. package/dist/devices/eglo.d.ts.map +1 -1
  121. package/dist/devices/eglo.js +203 -17
  122. package/dist/devices/eglo.js.map +1 -1
  123. package/dist/devices/elko.d.ts.map +1 -1
  124. package/dist/devices/elko.js +20 -22
  125. package/dist/devices/elko.js.map +1 -1
  126. package/dist/devices/engo.d.ts.map +1 -1
  127. package/dist/devices/engo.js +201 -0
  128. package/dist/devices/engo.js.map +1 -1
  129. package/dist/devices/enocean.d.ts.map +1 -1
  130. package/dist/devices/enocean.js +132 -4
  131. package/dist/devices/enocean.js.map +1 -1
  132. package/dist/devices/ensystec.d.ts +3 -0
  133. package/dist/devices/ensystec.d.ts.map +1 -0
  134. package/dist/devices/ensystec.js +1200 -0
  135. package/dist/devices/ensystec.js.map +1 -0
  136. package/dist/devices/eurotronic.d.ts +78 -1
  137. package/dist/devices/eurotronic.d.ts.map +1 -1
  138. package/dist/devices/eurotronic.js +244 -40
  139. package/dist/devices/eurotronic.js.map +1 -1
  140. package/dist/devices/ewelink.d.ts.map +1 -1
  141. package/dist/devices/ewelink.js +154 -2
  142. package/dist/devices/ewelink.js.map +1 -1
  143. package/dist/devices/fantem.js +1 -1
  144. package/dist/devices/fantem.js.map +1 -1
  145. package/dist/devices/fireangel.d.ts.map +1 -1
  146. package/dist/devices/fireangel.js +12 -1
  147. package/dist/devices/fireangel.js.map +1 -1
  148. package/dist/devices/frankever.d.ts.map +1 -1
  149. package/dist/devices/frankever.js +96 -0
  150. package/dist/devices/frankever.js.map +1 -1
  151. package/dist/devices/frient.d.ts.map +1 -1
  152. package/dist/devices/frient.js +15 -0
  153. package/dist/devices/frient.js.map +1 -1
  154. package/dist/devices/girier.js +1 -1
  155. package/dist/devices/girier.js.map +1 -1
  156. package/dist/devices/gledopto.js +1 -1
  157. package/dist/devices/gledopto.js.map +1 -1
  158. package/dist/devices/gmmts.d.ts.map +1 -1
  159. package/dist/devices/gmmts.js +59 -55
  160. package/dist/devices/gmmts.js.map +1 -1
  161. package/dist/devices/halo_smart_labs.d.ts +3 -0
  162. package/dist/devices/halo_smart_labs.d.ts.map +1 -0
  163. package/dist/devices/halo_smart_labs.js +918 -0
  164. package/dist/devices/halo_smart_labs.js.map +1 -0
  165. package/dist/devices/handshake_finland.d.ts +3 -0
  166. package/dist/devices/handshake_finland.d.ts.map +1 -0
  167. package/dist/devices/handshake_finland.js +15 -0
  168. package/dist/devices/handshake_finland.js.map +1 -0
  169. package/dist/devices/heiman.d.ts.map +1 -1
  170. package/dist/devices/heiman.js +1361 -147
  171. package/dist/devices/heiman.js.map +1 -1
  172. package/dist/devices/heimgard_technologies.d.ts.map +1 -1
  173. package/dist/devices/heimgard_technologies.js +13 -0
  174. package/dist/devices/heimgard_technologies.js.map +1 -1
  175. package/dist/devices/hive.d.ts.map +1 -1
  176. package/dist/devices/hive.js +11 -0
  177. package/dist/devices/hive.js.map +1 -1
  178. package/dist/devices/ikea.d.ts.map +1 -1
  179. package/dist/devices/ikea.js +185 -135
  180. package/dist/devices/ikea.js.map +1 -1
  181. package/dist/devices/iluminize.d.ts.map +1 -1
  182. package/dist/devices/iluminize.js +8 -7
  183. package/dist/devices/iluminize.js.map +1 -1
  184. package/dist/devices/immax.d.ts.map +1 -1
  185. package/dist/devices/immax.js +3 -1
  186. package/dist/devices/immax.js.map +1 -1
  187. package/dist/devices/index.d.ts.map +1 -1
  188. package/dist/devices/index.js +20 -2
  189. package/dist/devices/index.js.map +1 -1
  190. package/dist/devices/innr.d.ts.map +1 -1
  191. package/dist/devices/innr.js +34 -2
  192. package/dist/devices/innr.js.map +1 -1
  193. package/dist/devices/inovelli.d.ts.map +1 -1
  194. package/dist/devices/inovelli.js +41 -2348
  195. package/dist/devices/inovelli.js.map +1 -1
  196. package/dist/devices/iris.d.ts.map +1 -1
  197. package/dist/devices/iris.js +13 -1
  198. package/dist/devices/iris.js.map +1 -1
  199. package/dist/devices/javis.d.ts.map +1 -1
  200. package/dist/devices/javis.js +39 -1
  201. package/dist/devices/javis.js.map +1 -1
  202. package/dist/devices/jxuan.d.ts.map +1 -1
  203. package/dist/devices/jxuan.js +37 -2
  204. package/dist/devices/jxuan.js.map +1 -1
  205. package/dist/devices/kami.d.ts.map +1 -1
  206. package/dist/devices/kami.js +21 -2
  207. package/dist/devices/kami.js.map +1 -1
  208. package/dist/devices/keen_home.d.ts.map +1 -1
  209. package/dist/devices/keen_home.js +13 -3
  210. package/dist/devices/keen_home.js.map +1 -1
  211. package/dist/devices/klikaanklikuit.d.ts.map +1 -1
  212. package/dist/devices/klikaanklikuit.js +7 -0
  213. package/dist/devices/klikaanklikuit.js.map +1 -1
  214. package/dist/devices/kmpcil.d.ts.map +1 -1
  215. package/dist/devices/kmpcil.js +44 -5
  216. package/dist/devices/kmpcil.js.map +1 -1
  217. package/dist/devices/konke.d.ts.map +1 -1
  218. package/dist/devices/konke.js +10 -1
  219. package/dist/devices/konke.js.map +1 -1
  220. package/dist/devices/lds.d.ts.map +1 -1
  221. package/dist/devices/lds.js +7 -0
  222. package/dist/devices/lds.js.map +1 -1
  223. package/dist/devices/led_trading.d.ts.map +1 -1
  224. package/dist/devices/led_trading.js +13 -13
  225. package/dist/devices/led_trading.js.map +1 -1
  226. package/dist/devices/leedarson.d.ts.map +1 -1
  227. package/dist/devices/leedarson.js +140 -1
  228. package/dist/devices/leedarson.js.map +1 -1
  229. package/dist/devices/legrand.d.ts.map +1 -1
  230. package/dist/devices/legrand.js +73 -42
  231. package/dist/devices/legrand.js.map +1 -1
  232. package/dist/devices/lellki.d.ts.map +1 -1
  233. package/dist/devices/lellki.js +3 -1
  234. package/dist/devices/lellki.js.map +1 -1
  235. package/dist/devices/letv.d.ts.map +1 -1
  236. package/dist/devices/letv.js +16 -2
  237. package/dist/devices/letv.js.map +1 -1
  238. package/dist/devices/lidl.d.ts.map +1 -1
  239. package/dist/devices/lidl.js +26 -6
  240. package/dist/devices/lidl.js.map +1 -1
  241. package/dist/devices/lincukoo.d.ts.map +1 -1
  242. package/dist/devices/lincukoo.js +92 -31
  243. package/dist/devices/lincukoo.js.map +1 -1
  244. package/dist/devices/linkind.d.ts.map +1 -1
  245. package/dist/devices/linkind.js +14 -1
  246. package/dist/devices/linkind.js.map +1 -1
  247. package/dist/devices/linptech.d.ts.map +1 -1
  248. package/dist/devices/linptech.js +3 -1
  249. package/dist/devices/linptech.js.map +1 -1
  250. package/dist/devices/livingwise.d.ts.map +1 -1
  251. package/dist/devices/livingwise.js +2 -1
  252. package/dist/devices/livingwise.js.map +1 -1
  253. package/dist/devices/livolo.d.ts.map +1 -1
  254. package/dist/devices/livolo.js +612 -20
  255. package/dist/devices/livolo.js.map +1 -1
  256. package/dist/devices/lixee.d.ts.map +1 -1
  257. package/dist/devices/lixee.js +46 -44
  258. package/dist/devices/lixee.js.map +1 -1
  259. package/dist/devices/lonsonho.d.ts.map +1 -1
  260. package/dist/devices/lonsonho.js +18 -11
  261. package/dist/devices/lonsonho.js.map +1 -1
  262. package/dist/devices/lumi.d.ts.map +1 -1
  263. package/dist/devices/lumi.js +877 -155
  264. package/dist/devices/lumi.js.map +1 -1
  265. package/dist/devices/lytko.d.ts.map +1 -1
  266. package/dist/devices/lytko.js +205 -556
  267. package/dist/devices/lytko.js.map +1 -1
  268. package/dist/devices/makegood.d.ts.map +1 -1
  269. package/dist/devices/makegood.js +5 -1
  270. package/dist/devices/makegood.js.map +1 -1
  271. package/dist/devices/mazda.js +7 -7
  272. package/dist/devices/mazda.js.map +1 -1
  273. package/dist/devices/meazon.d.ts.map +1 -1
  274. package/dist/devices/meazon.js +82 -20
  275. package/dist/devices/meazon.js.map +1 -1
  276. package/dist/devices/megaman.d.ts +4 -0
  277. package/dist/devices/megaman.d.ts.map +1 -0
  278. package/dist/devices/megaman.js +48 -0
  279. package/dist/devices/megaman.js.map +1 -0
  280. package/dist/devices/mercator.d.ts.map +1 -1
  281. package/dist/devices/mercator.js +20 -5
  282. package/dist/devices/mercator.js.map +1 -1
  283. package/dist/devices/miboxer.d.ts.map +1 -1
  284. package/dist/devices/miboxer.js +3 -1
  285. package/dist/devices/miboxer.js.map +1 -1
  286. package/dist/devices/mill.d.ts.map +1 -1
  287. package/dist/devices/mill.js +33 -7
  288. package/dist/devices/mill.js.map +1 -1
  289. package/dist/devices/moes.d.ts.map +1 -1
  290. package/dist/devices/moes.js +89 -15
  291. package/dist/devices/moes.js.map +1 -1
  292. package/dist/devices/msh.d.ts +3 -0
  293. package/dist/devices/msh.d.ts.map +1 -0
  294. package/dist/devices/msh.js +93 -0
  295. package/dist/devices/msh.js.map +1 -0
  296. package/dist/devices/muller_licht.d.ts.map +1 -1
  297. package/dist/devices/muller_licht.js +11 -0
  298. package/dist/devices/muller_licht.js.map +1 -1
  299. package/dist/devices/multir.d.ts.map +1 -1
  300. package/dist/devices/multir.js +12 -1
  301. package/dist/devices/multir.js.map +1 -1
  302. package/dist/devices/multiterm.js +2 -2
  303. package/dist/devices/multiterm.js.map +1 -1
  304. package/dist/devices/namron.d.ts.map +1 -1
  305. package/dist/devices/namron.js +488 -128
  306. package/dist/devices/namron.js.map +1 -1
  307. package/dist/devices/neo.d.ts.map +1 -1
  308. package/dist/devices/neo.js +151 -192
  309. package/dist/devices/neo.js.map +1 -1
  310. package/dist/devices/netica.d.ts +3 -0
  311. package/dist/devices/netica.d.ts.map +1 -0
  312. package/dist/devices/netica.js +153 -0
  313. package/dist/devices/netica.js.map +1 -0
  314. package/dist/devices/niko.d.ts.map +1 -1
  315. package/dist/devices/niko.js +10 -8
  316. package/dist/devices/niko.js.map +1 -1
  317. package/dist/devices/nodon.d.ts.map +1 -1
  318. package/dist/devices/nodon.js +6 -4
  319. package/dist/devices/nodon.js.map +1 -1
  320. package/dist/devices/nous.d.ts.map +1 -1
  321. package/dist/devices/nous.js +160 -61
  322. package/dist/devices/nous.js.map +1 -1
  323. package/dist/devices/nue_3a.d.ts.map +1 -1
  324. package/dist/devices/nue_3a.js +2 -0
  325. package/dist/devices/nue_3a.js.map +1 -1
  326. package/dist/devices/onesti.d.ts +11 -1
  327. package/dist/devices/onesti.d.ts.map +1 -1
  328. package/dist/devices/onesti.js +30 -6
  329. package/dist/devices/onesti.js.map +1 -1
  330. package/dist/devices/onokom.d.ts.map +1 -1
  331. package/dist/devices/onokom.js +1152 -2309
  332. package/dist/devices/onokom.js.map +1 -1
  333. package/dist/devices/orvibo.d.ts +17 -1
  334. package/dist/devices/orvibo.d.ts.map +1 -1
  335. package/dist/devices/orvibo.js +71 -4
  336. package/dist/devices/orvibo.js.map +1 -1
  337. package/dist/devices/owon.d.ts.map +1 -1
  338. package/dist/devices/owon.js +382 -62
  339. package/dist/devices/owon.js.map +1 -1
  340. package/dist/devices/paul_neuhaus.d.ts.map +1 -1
  341. package/dist/devices/paul_neuhaus.js +9 -0
  342. package/dist/devices/paul_neuhaus.js.map +1 -1
  343. package/dist/devices/paulmann.js +2 -2
  344. package/dist/devices/paulmann.js.map +1 -1
  345. package/dist/devices/perenio.d.ts.map +1 -1
  346. package/dist/devices/perenio.js +57 -39
  347. package/dist/devices/perenio.js.map +1 -1
  348. package/dist/devices/philips.d.ts.map +1 -1
  349. package/dist/devices/philips.js +194 -53
  350. package/dist/devices/philips.js.map +1 -1
  351. package/dist/devices/plaid.d.ts.map +1 -1
  352. package/dist/devices/plaid.js +18 -1
  353. package/dist/devices/plaid.js.map +1 -1
  354. package/dist/devices/plugwise.d.ts.map +1 -1
  355. package/dist/devices/plugwise.js +307 -26
  356. package/dist/devices/plugwise.js.map +1 -1
  357. package/dist/devices/profalux.d.ts.map +1 -1
  358. package/dist/devices/profalux.js +25 -1
  359. package/dist/devices/profalux.js.map +1 -1
  360. package/dist/devices/pushok.d.ts.map +1 -1
  361. package/dist/devices/pushok.js +44 -0
  362. package/dist/devices/pushok.js.map +1 -1
  363. package/dist/devices/qa.d.ts.map +1 -1
  364. package/dist/devices/qa.js +80 -32
  365. package/dist/devices/qa.js.map +1 -1
  366. package/dist/devices/repenic_ltd.d.ts +3 -0
  367. package/dist/devices/repenic_ltd.d.ts.map +1 -0
  368. package/dist/devices/repenic_ltd.js +97 -0
  369. package/dist/devices/repenic_ltd.js.map +1 -0
  370. package/dist/devices/robb.d.ts.map +1 -1
  371. package/dist/devices/robb.js +13 -1
  372. package/dist/devices/robb.js.map +1 -1
  373. package/dist/devices/rtx.js +1 -1
  374. package/dist/devices/rtx.js.map +1 -1
  375. package/dist/devices/salus_controls.d.ts.map +1 -1
  376. package/dist/devices/salus_controls.js +44 -17
  377. package/dist/devices/salus_controls.js.map +1 -1
  378. package/dist/devices/samotech.js +2 -2
  379. package/dist/devices/samotech.js.map +1 -1
  380. package/dist/devices/sber.d.ts.map +1 -1
  381. package/dist/devices/sber.js +435 -26
  382. package/dist/devices/sber.js.map +1 -1
  383. package/dist/devices/schneider_electric.d.ts.map +1 -1
  384. package/dist/devices/schneider_electric.js +808 -252
  385. package/dist/devices/schneider_electric.js.map +1 -1
  386. package/dist/devices/securifi.d.ts.map +1 -1
  387. package/dist/devices/securifi.js +24 -1
  388. package/dist/devices/securifi.js.map +1 -1
  389. package/dist/devices/sengled.d.ts.map +1 -1
  390. package/dist/devices/sengled.js +5 -4
  391. package/dist/devices/sengled.js.map +1 -1
  392. package/dist/devices/shada.d.ts +3 -0
  393. package/dist/devices/shada.d.ts.map +1 -0
  394. package/dist/devices/{aubess.js → shada.js} +7 -20
  395. package/dist/devices/shada.js.map +1 -0
  396. package/dist/devices/shelly.d.ts.map +1 -1
  397. package/dist/devices/shelly.js +646 -61
  398. package/dist/devices/shelly.js.map +1 -1
  399. package/dist/devices/shinasystem.d.ts.map +1 -1
  400. package/dist/devices/shinasystem.js +75 -16
  401. package/dist/devices/shinasystem.js.map +1 -1
  402. package/dist/devices/siglis.d.ts.map +1 -1
  403. package/dist/devices/siglis.js +26 -0
  404. package/dist/devices/siglis.js.map +1 -1
  405. package/dist/devices/sinope.d.ts.map +1 -1
  406. package/dist/devices/sinope.js +163 -83
  407. package/dist/devices/sinope.js.map +1 -1
  408. package/dist/devices/slacky_diy.d.ts.map +1 -1
  409. package/dist/devices/slacky_diy.js +3007 -69
  410. package/dist/devices/slacky_diy.js.map +1 -1
  411. package/dist/devices/smarli.d.ts.map +1 -1
  412. package/dist/devices/smarli.js +4 -5
  413. package/dist/devices/smarli.js.map +1 -1
  414. package/dist/devices/smartthings.d.ts +25 -0
  415. package/dist/devices/smartthings.d.ts.map +1 -1
  416. package/dist/devices/smartthings.js +62 -11
  417. package/dist/devices/smartthings.js.map +1 -1
  418. package/dist/devices/somfy.d.ts.map +1 -1
  419. package/dist/devices/somfy.js +14 -1
  420. package/dist/devices/somfy.js.map +1 -1
  421. package/dist/devices/sonoff.d.ts +42 -1
  422. package/dist/devices/sonoff.d.ts.map +1 -1
  423. package/dist/devices/sonoff.js +5161 -2007
  424. package/dist/devices/sonoff.js.map +1 -1
  425. package/dist/devices/sprut.d.ts.map +1 -1
  426. package/dist/devices/sprut.js +5 -4
  427. package/dist/devices/sprut.js.map +1 -1
  428. package/dist/devices/stello.d.ts.map +1 -1
  429. package/dist/devices/stello.js +6 -24
  430. package/dist/devices/stello.js.map +1 -1
  431. package/dist/devices/stelpro.d.ts +51 -1
  432. package/dist/devices/stelpro.d.ts.map +1 -1
  433. package/dist/devices/stelpro.js +86 -23
  434. package/dist/devices/stelpro.js.map +1 -1
  435. package/dist/devices/sunricher.d.ts.map +1 -1
  436. package/dist/devices/sunricher.js +215 -29
  437. package/dist/devices/sunricher.js.map +1 -1
  438. package/dist/devices/tech.d.ts.map +1 -1
  439. package/dist/devices/tech.js +35 -35
  440. package/dist/devices/tech.js.map +1 -1
  441. package/dist/devices/terncy.d.ts.map +1 -1
  442. package/dist/devices/terncy.js +398 -2
  443. package/dist/devices/terncy.js.map +1 -1
  444. package/dist/devices/third_reality.d.ts +42 -1
  445. package/dist/devices/third_reality.d.ts.map +1 -1
  446. package/dist/devices/third_reality.js +521 -110
  447. package/dist/devices/third_reality.js.map +1 -1
  448. package/dist/devices/tuya.d.ts.map +1 -1
  449. package/dist/devices/tuya.js +3143 -815
  450. package/dist/devices/tuya.js.map +1 -1
  451. package/dist/devices/ubisys.d.ts.map +1 -1
  452. package/dist/devices/ubisys.js +11 -8
  453. package/dist/devices/ubisys.js.map +1 -1
  454. package/dist/devices/vesternet.d.ts.map +1 -1
  455. package/dist/devices/vesternet.js +7 -0
  456. package/dist/devices/vesternet.js.map +1 -1
  457. package/dist/devices/viessmann.d.ts.map +1 -1
  458. package/dist/devices/viessmann.js +107 -4
  459. package/dist/devices/viessmann.js.map +1 -1
  460. package/dist/devices/vsmart.d.ts.map +1 -1
  461. package/dist/devices/vsmart.js +11 -0
  462. package/dist/devices/vsmart.js.map +1 -1
  463. package/dist/devices/weiser.d.ts.map +1 -1
  464. package/dist/devices/weiser.js +6 -0
  465. package/dist/devices/weiser.js.map +1 -1
  466. package/dist/devices/wirenboard.d.ts.map +1 -1
  467. package/dist/devices/wirenboard.js +124 -21
  468. package/dist/devices/wirenboard.js.map +1 -1
  469. package/dist/devices/wmun.d.ts.map +1 -1
  470. package/dist/devices/wmun.js +3 -2
  471. package/dist/devices/wmun.js.map +1 -1
  472. package/dist/devices/woolley.d.ts.map +1 -1
  473. package/dist/devices/woolley.js +6 -9
  474. package/dist/devices/woolley.js.map +1 -1
  475. package/dist/devices/woox.js +2 -2
  476. package/dist/devices/woox.js.map +1 -1
  477. package/dist/devices/xyzroe.d.ts.map +1 -1
  478. package/dist/devices/xyzroe.js +16 -4
  479. package/dist/devices/xyzroe.js.map +1 -1
  480. package/dist/devices/yale.d.ts.map +1 -1
  481. package/dist/devices/yale.js +138 -40
  482. package/dist/devices/yale.js.map +1 -1
  483. package/dist/devices/yandex.d.ts.map +1 -1
  484. package/dist/devices/yandex.js +93 -11
  485. package/dist/devices/yandex.js.map +1 -1
  486. package/dist/devices/yokis.d.ts.map +1 -1
  487. package/dist/devices/yokis.js +122 -85
  488. package/dist/devices/yokis.js.map +1 -1
  489. package/dist/devices/zbeacon.d.ts.map +1 -1
  490. package/dist/devices/zbeacon.js +0 -7
  491. package/dist/devices/zbeacon.js.map +1 -1
  492. package/dist/devices/zemismart.d.ts.map +1 -1
  493. package/dist/devices/zemismart.js +148 -11
  494. package/dist/devices/zemismart.js.map +1 -1
  495. package/dist/devices/zigbeetlc.js +1 -1
  496. package/dist/devices/zigbeetlc.js.map +1 -1
  497. package/dist/index.d.ts +1 -1
  498. package/dist/index.d.ts.map +1 -1
  499. package/dist/index.js +40 -35
  500. package/dist/index.js.map +1 -1
  501. package/dist/lib/bosch.d.ts.map +1 -1
  502. package/dist/lib/bosch.js +212 -42
  503. package/dist/lib/bosch.js.map +1 -1
  504. package/dist/lib/constants.d.ts +99 -17
  505. package/dist/lib/constants.d.ts.map +1 -1
  506. package/dist/lib/constants.js +15 -2
  507. package/dist/lib/constants.js.map +1 -1
  508. package/dist/lib/develco.d.ts +11 -0
  509. package/dist/lib/develco.d.ts.map +1 -1
  510. package/dist/lib/develco.js +78 -9
  511. package/dist/lib/develco.js.map +1 -1
  512. package/dist/lib/exposes.d.ts +11 -10
  513. package/dist/lib/exposes.d.ts.map +1 -1
  514. package/dist/lib/exposes.js +7 -48
  515. package/dist/lib/exposes.js.map +1 -1
  516. package/dist/lib/heiman.d.ts.map +1 -1
  517. package/dist/lib/heiman.js +34 -14
  518. package/dist/lib/heiman.js.map +1 -1
  519. package/dist/lib/ikea.d.ts +17 -0
  520. package/dist/lib/ikea.d.ts.map +1 -1
  521. package/dist/lib/ikea.js +46 -20
  522. package/dist/lib/ikea.js.map +1 -1
  523. package/dist/lib/inovelli.d.ts +86 -0
  524. package/dist/lib/inovelli.d.ts.map +1 -0
  525. package/dist/lib/inovelli.js +2580 -0
  526. package/dist/lib/inovelli.js.map +1 -0
  527. package/dist/lib/ledvance.d.ts +4 -4
  528. package/dist/lib/ledvance.d.ts.map +1 -1
  529. package/dist/lib/ledvance.js +23 -7
  530. package/dist/lib/ledvance.js.map +1 -1
  531. package/dist/lib/legacy.d.ts +21 -2
  532. package/dist/lib/legacy.d.ts.map +1 -1
  533. package/dist/lib/legacy.js +29 -2
  534. package/dist/lib/legacy.js.map +1 -1
  535. package/dist/lib/legrand.d.ts +65 -6
  536. package/dist/lib/legrand.d.ts.map +1 -1
  537. package/dist/lib/legrand.js +188 -9
  538. package/dist/lib/legrand.js.map +1 -1
  539. package/dist/lib/light.d.ts +1 -1
  540. package/dist/lib/light.d.ts.map +1 -1
  541. package/dist/lib/light.js +2 -2
  542. package/dist/lib/light.js.map +1 -1
  543. package/dist/lib/lumi.d.ts +88 -44
  544. package/dist/lib/lumi.d.ts.map +1 -1
  545. package/dist/lib/lumi.js +1813 -59
  546. package/dist/lib/lumi.js.map +1 -1
  547. package/dist/lib/modernExtend.d.ts +19 -14
  548. package/dist/lib/modernExtend.d.ts.map +1 -1
  549. package/dist/lib/modernExtend.js +37 -35
  550. package/dist/lib/modernExtend.js.map +1 -1
  551. package/dist/lib/namron.d.ts +131 -28
  552. package/dist/lib/namron.d.ts.map +1 -1
  553. package/dist/lib/namron.js +723 -42
  554. package/dist/lib/namron.js.map +1 -1
  555. package/dist/lib/nodon.d.ts.map +1 -1
  556. package/dist/lib/nodon.js +3 -1
  557. package/dist/lib/nodon.js.map +1 -1
  558. package/dist/lib/philips.d.ts +106 -2
  559. package/dist/lib/philips.d.ts.map +1 -1
  560. package/dist/lib/philips.js +945 -44
  561. package/dist/lib/philips.js.map +1 -1
  562. package/dist/lib/sonoff.d.ts +77 -10
  563. package/dist/lib/sonoff.d.ts.map +1 -1
  564. package/dist/lib/sonoff.js +165 -34
  565. package/dist/lib/sonoff.js.map +1 -1
  566. package/dist/lib/sunricher.d.ts +1 -1
  567. package/dist/lib/sunricher.d.ts.map +1 -1
  568. package/dist/lib/sunricher.js +6 -8
  569. package/dist/lib/sunricher.js.map +1 -1
  570. package/dist/lib/tuya.d.ts +558 -13
  571. package/dist/lib/tuya.d.ts.map +1 -1
  572. package/dist/lib/tuya.js +1518 -10
  573. package/dist/lib/tuya.js.map +1 -1
  574. package/dist/lib/types.d.ts +9 -6
  575. package/dist/lib/types.d.ts.map +1 -1
  576. package/dist/lib/ubisys.d.ts +1 -1
  577. package/dist/lib/ubisys.d.ts.map +1 -1
  578. package/dist/lib/ubisys.js +60 -5
  579. package/dist/lib/ubisys.js.map +1 -1
  580. package/dist/lib/utils.d.ts +5 -8
  581. package/dist/lib/utils.d.ts.map +1 -1
  582. package/dist/lib/utils.js +30 -17
  583. package/dist/lib/utils.js.map +1 -1
  584. package/dist/lib/zosung.d.ts +69 -6
  585. package/dist/lib/zosung.d.ts.map +1 -1
  586. package/dist/lib/zosung.js +113 -1
  587. package/dist/lib/zosung.js.map +1 -1
  588. package/dist/models-index.json +1 -1
  589. package/package.json +2 -2
  590. package/dist/devices/aubess.d.ts.map +0 -1
  591. package/dist/devices/aubess.js.map +0 -1
@@ -32,8 +32,12 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.definitions = void 0;
40
+ const node_assert_1 = __importDefault(require("node:assert"));
37
41
  const zigbee_herdsman_1 = require("@willieee802/zigbee-herdsman");
38
42
  const fz = __importStar(require("../converters/fromZigbee"));
39
43
  const tz = __importStar(require("../converters/toZigbee"));
@@ -42,6 +46,7 @@ const exposes = __importStar(require("../lib/exposes"));
42
46
  const heiman_1 = require("../lib/heiman");
43
47
  const m = __importStar(require("../lib/modernExtend"));
44
48
  const reporting = __importStar(require("../lib/reporting"));
49
+ const globalStore = __importStar(require("../lib/store"));
45
50
  const tuya = __importStar(require("../lib/tuya"));
46
51
  const utils = __importStar(require("../lib/utils"));
47
52
  const e = exposes.presets;
@@ -50,70 +55,127 @@ const defaultResponseOptions = { disableDefaultResponse: false };
50
55
  const iasWarningMode = { stop: 0, burglar: 1, fire: 2, emergency: 3, police_panic: 4, fire_panic: 5, emergency_panic: 6 };
51
56
  const heimanExtend = {
52
57
  heimanClusterRadar: () => m.deviceAddCustomCluster("heimanClusterRadar", {
58
+ name: "heimanClusterRadar",
53
59
  ID: 0xfc8b,
54
60
  manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
55
61
  attributes: {
56
- enableIndicator: { ID: 0xf001, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true }, // 0: off, 1: enable
57
- sensitivity: { ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
58
- enableSubRegionIsolation: { ID: 0xf006, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
59
- installationMethod: { ID: 0xf007, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
60
- cellMountedTable: { ID: 0xf008, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
61
- wallMountedTable: { ID: 0xf009, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
62
- subRegionIsolationTable: { ID: 0xf00a, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
62
+ enableIndicator: { name: "enableIndicator", ID: 0xf001, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true }, // 0: off, 1: enable
63
+ sensitivity: { name: "sensitivity", ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
64
+ enableSubRegionIsolation: { name: "enableSubRegionIsolation", ID: 0xf006, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
65
+ installationMethod: { name: "installationMethod", ID: 0xf007, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
66
+ cellMountedTable: { name: "cellMountedTable", ID: 0xf008, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
67
+ wallMountedTable: { name: "wallMountedTable", ID: 0xf009, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
68
+ subRegionIsolationTable: { name: "subRegionIsolationTable", ID: 0xf00a, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true }, // string
63
69
  },
64
70
  commands: {},
65
71
  commandsResponse: {},
66
72
  }),
67
73
  heimanClusterSpecial: () => m.deviceAddCustomCluster("heimanClusterSpecial", {
74
+ name: "heimanClusterSpecial",
68
75
  ID: 0xfc90,
69
76
  manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
70
77
  attributes: {
71
78
  // Sensor 0x0000~0x0FFF
72
- sensorPreheatingState: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
73
- sensorSelfCheckState: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
74
- sensorFaultState: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.BITMAP16, write: true },
75
- sensorPollutionLevel: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
76
- sensorSensitivityLevel: { ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
77
- sensorPrealarmThreshold: { ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
78
- sensorLifeState: { ID: 0x0006, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
79
- sensorLifeTime: { ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
80
- deviceMuteControl: { ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
81
- deviceMuteState: { ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.BITMAP16, write: true },
82
- deviceCascadeControlEnable: { ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.BITMAP8, write: true },
83
- deviceSoundToneType: { ID: 0x000b, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
84
- deviceSoundControl: { ID: 0x000c, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
85
- deviceBlinkControl: { ID: 0x000d, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
86
- smokeAdValue: { ID: 0x000e, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
87
- smokeAlarmType: { ID: 0x000f, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
88
- smokeWaterMistState: { ID: 0x0010, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
89
- smokeSensorData: { ID: 0x0011, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
90
- deviceCascadeState: { ID: 0x0012, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
91
- sensorPrealarmState: { ID: 0x0013, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
92
- smokeConcentrationLevel: { ID: 0x0016, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
93
- smokeChamberContaminationLevel: { ID: 0x0017, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
94
- smokeConcentationUnit: { ID: 0x0018, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
79
+ sensorPreheatingState: { name: "sensorPreheatingState", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
80
+ sensorSelfCheckState: { name: "sensorSelfCheckState", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
81
+ sensorFaultState: { name: "sensorFaultState", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
82
+ sensorPollutionLevel: { name: "sensorPollutionLevel", ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
83
+ sensorSensitivityLevel: { name: "sensorSensitivityLevel", ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
84
+ sensorPrealarmThreshold: { name: "sensorPrealarmThreshold", ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
85
+ sensorLifeState: { name: "sensorLifeState", ID: 0x0006, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
86
+ sensorLifeTime: { name: "sensorLifeTime", ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
87
+ deviceMuteControl: { name: "deviceMuteControl", ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
88
+ deviceMuteState: { name: "deviceMuteState", ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.BITMAP16, write: true },
89
+ deviceCascadeControlEnable: { name: "deviceCascadeControlEnable", ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.BITMAP8, write: true },
90
+ deviceSoundToneType: { name: "deviceSoundToneType", ID: 0x000b, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
91
+ deviceSoundControl: { name: "deviceSoundControl", ID: 0x000c, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
92
+ deviceBlinkControl: { name: "deviceBlinkControl", ID: 0x000d, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
93
+ smokeAdValue: { name: "smokeAdValue", ID: 0x000e, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
94
+ smokeAlarmType: { name: "smokeAlarmType", ID: 0x000f, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
95
+ smokeWaterMistState: { name: "smokeWaterMistState", ID: 0x0010, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
96
+ smokeSensorData: { name: "smokeSensorData", ID: 0x0011, type: zigbee_herdsman_1.Zcl.DataType.ARRAY, write: true },
97
+ deviceCascadeState: { name: "deviceCascadeState", ID: 0x0012, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
98
+ sensorPrealarmState: { name: "sensorPrealarmState", ID: 0x0013, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
99
+ smokeConcentrationLevel: { name: "smokeConcentrationLevel", ID: 0x0016, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
100
+ smokeChamberContaminationLevel: { name: "smokeChamberContaminationLevel", ID: 0x0017, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
101
+ smokeConcentationUnit: { name: "smokeConcentationUnit", ID: 0x0018, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
102
+ emergencyStateControl: { name: "emergencyStateControl", ID: 0x001c, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
103
+ sensorSamplingPeriod: { name: "sensorSamplingPeriod", ID: 0x001d, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
104
+ occupanySensorWorkMode: { name: "occupanySensorWorkMode", ID: 0x001e, type: zigbee_herdsman_1.Zcl.DataType.BITMAP8, write: true },
105
+ occupiedToOccupiedInterval: { name: "occupiedToOccupiedInterval", ID: 0x001f, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
106
+ occupiedToOccupiedDuration: { name: "occupiedToOccupiedDuration", ID: 0x0020, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
107
+ radarConfigParamOfSection1: { name: "radarConfigParamOfSection1", ID: 0x0021, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
108
+ radarConfigParamOfSection2: { name: "radarConfigParamOfSection2", ID: 0x0022, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
109
+ radarConfigParamOfSection3: { name: "radarConfigParamOfSection3", ID: 0x0023, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
110
+ radarConfigParamOfSection4: { name: "radarConfigParamOfSection4", ID: 0x0024, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
111
+ radarMicroThresholdParam: { name: "radarMicroThresholdParam", ID: 0x0025, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
112
+ radarPersenceThresholdParam: { name: "radarPersenceThresholdParam", ID: 0x0026, type: zigbee_herdsman_1.Zcl.DataType.OCTET_STR, write: true },
113
+ radarLearningControl: { name: "radarLearningControl", ID: 0x0027, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
114
+ radarLearningState: { name: "radarLearningState", ID: 0x0028, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
115
+ radarDetectionTargetRange: { name: "radarDetectionTargetRange", ID: 0x0029, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
116
+ radarDetectionMinRange: { name: "radarDetectionMinRange", ID: 0x002b, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
117
+ radarDetectionMaxRange: { name: "radarDetectionMaxRange", ID: 0x002c, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
95
118
  // Light/Switch 0x1000~0x1FFF
96
- indicatorLightControl: { ID: 0x1000, type: zigbee_herdsman_1.Zcl.DataType.BITMAP8, write: true },
97
- indicatorLightNotDisturbStartTime: { ID: 0x1001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
98
- indicatorLightNotDisturbEndTime: { ID: 0x1002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
99
- indicatorLightNotDisturbEnable: { ID: 0x1003, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
100
- indicatorLightLevelControlOf1: { ID: 0x1004, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
101
- indicatorLightLevelControlOf2: { ID: 0x1005, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
102
- indicatorLightLevelControlOf3: { ID: 0x1006, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
103
- interconnectable: { ID: 0x1007, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
104
- smokeUnit: { ID: 0x1008, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
105
- rebootedCount: { ID: 0x1009, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
106
- rejoinedCount: { ID: 0x100a, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
107
- reportedPackages: { ID: 0x100b, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
119
+ indicatorLightControl: { name: "indicatorLightControl", ID: 0x1000, type: zigbee_herdsman_1.Zcl.DataType.BITMAP8, write: true },
120
+ indicatorLightNotDisturbStartTime: { name: "indicatorLightNotDisturbStartTime", ID: 0x1001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
121
+ indicatorLightNotDisturbEndTime: { name: "indicatorLightNotDisturbEndTime", ID: 0x1002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
122
+ indicatorLightNotDisturbEnable: { name: "indicatorLightNotDisturbEnable", ID: 0x1003, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
123
+ indicatorLightLevelControlOf1: { name: "indicatorLightLevelControlOf1", ID: 0x1004, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
124
+ indicatorLightLevelControlOf2: { name: "indicatorLightLevelControlOf2", ID: 0x1005, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
125
+ indicatorLightLevelControlOf3: { name: "indicatorLightLevelControlOf3", ID: 0x1006, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
126
+ interconnectable: { name: "interconnectable", ID: 0x1007, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
127
+ indicatorLightOnOff: { name: "indicatorLightOnOff", ID: 0x1008, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
128
+ remoteSelfTest: { name: "remoteSelfTest", ID: 0x1009, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
129
+ temperatureOffset: { name: "temperatureOffset", ID: 0x100d, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true },
130
+ switchType: { name: "switchType", ID: 0x1010, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
131
+ rebootedCount: { name: "rebootedCount", ID: 0x0019, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
132
+ rejoinedCount: { name: "rejoinedCount", ID: 0x001a, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
133
+ reportedPackages: { name: "reportedPackages", ID: 0x001b, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
134
+ illuminanceThreshold: { name: "illuminanceThreshold", ID: 0x002a, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true },
135
+ mcuSoftwareVersion: { name: "mcuSoftwareVersion", ID: 0x0030, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
136
+ // wifi classes
137
+ wifiSsid: { name: "wifiSsid", ID: 0x2000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
138
+ wifiPassword: { name: "wifiPassword", ID: 0x2001, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
139
+ wifiSsidCandidate: { name: "wifiSsidCandidate", ID: 0x2002, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
140
+ wifiPasswordCandidate: { name: "wifiPasswordCandidate", ID: 0x2003, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
141
+ pictureQuantity: { name: "pictureQuantity", ID: 0x2004, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
142
+ pictureQuality: { name: "pictureQuality", ID: 0x2005, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
143
+ serverAddress: { name: "serverAddress", ID: 0x2006, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
144
+ serverAddressCandidae: { name: "serverAddressCandidae", ID: 0x2007, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
145
+ serverPort: { name: "serverPort", ID: 0x2008, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
146
+ authToken: { name: "authToken", ID: 0x2009, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
147
+ zoneCaptureMode: { name: "zoneCaptureMode", ID: 0x200a, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
148
+ sensorArmed: { name: "sensorArmed", ID: 0x200b, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true },
149
+ wifiStatus: { name: "wifiStatus", ID: 0x200c, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
150
+ wifiCandidateStatus: { name: "wifiCandidateStatus", ID: 0x200d, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
151
+ wifiRssi: { name: "wifiRssi", ID: 0x200e, type: zigbee_herdsman_1.Zcl.DataType.INT8, write: true },
152
+ serverStatus: { name: "serverStatus", ID: 0x200f, type: zigbee_herdsman_1.Zcl.DataType.INT8 },
153
+ serverCandidateStatus: { name: "serverCandidateStatus", ID: 0x2010, type: zigbee_herdsman_1.Zcl.DataType.INT8 },
154
+ cameraReady: { name: "cameraReady", ID: 0x2013, type: zigbee_herdsman_1.Zcl.DataType.INT8 },
155
+ flashLightBrightness: { name: "flashLightBrightness", ID: 0x2012, type: zigbee_herdsman_1.Zcl.DataType.INT8 },
156
+ cameraMode: { name: "cameraMode", ID: 0x2014, type: zigbee_herdsman_1.Zcl.DataType.INT8 },
157
+ },
158
+ commands: {
159
+ cameraActiveTrigger: {
160
+ ID: 0x01,
161
+ name: "cameraActiveTrigger",
162
+ parameters: [],
163
+ },
164
+ cameraTestTrigger: {
165
+ ID: 0x02,
166
+ name: "cameraTestTrigger",
167
+ parameters: [],
168
+ },
108
169
  },
109
- commands: {},
110
170
  commandsResponse: {},
111
171
  }),
112
172
  heimanClusterIasZone: () => m.deviceAddCustomCluster("ssIasZone", {
173
+ name: "ssIasZone",
113
174
  ID: zigbee_herdsman_1.Zcl.Clusters.ssIasZone.ID,
114
175
  attributes: {},
115
176
  commands: {
116
177
  initiateTestMode: {
178
+ name: "initiateTestMode",
117
179
  ID: 0x02,
118
180
  parameters: [
119
181
  { name: "testModeDuration", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
@@ -603,9 +665,9 @@ const heimanExtend = {
603
665
  isModernExtend: true,
604
666
  };
605
667
  },
606
- heimanClusterIndicatorLight: () => {
668
+ heimanClusterIndicatorLight: (componentName = "heartbeat_indicator") => {
607
669
  const clusterName = "heimanClusterSpecial";
608
- const exposes = utils.exposeEndpoints(e.binary("heartbeat_indicator", ea.ALL, true, false).withDescription("active green indicator"));
670
+ const exposes = utils.exposeEndpoints(e.binary(componentName, ea.ALL, true, false).withDescription("Enable/disable the indicator on product"));
609
671
  const fromZigbee = [
610
672
  {
611
673
  cluster: clusterName,
@@ -615,13 +677,13 @@ const heimanExtend = {
615
677
  return;
616
678
  }
617
679
  const state = !!msg.data["indicatorLightLevelControlOf1"];
618
- return { heartbeat_indicator: state };
680
+ return { [componentName]: state };
619
681
  },
620
682
  },
621
683
  ];
622
684
  const toZigbee = [
623
685
  {
624
- key: ["heartbeat_indicator"],
686
+ key: [componentName],
625
687
  convertGet: async (entity, key, meta) => {
626
688
  await entity.read(clusterName, ["indicatorLightLevelControlOf1"], defaultResponseOptions);
627
689
  },
@@ -650,7 +712,7 @@ const heimanExtend = {
650
712
  if (msg.data.interconnectable === undefined) {
651
713
  return;
652
714
  }
653
- const state = !!msg.data["interconnectable"];
715
+ const state = !!msg.data.interconnectable;
654
716
  return { interconnectable: state };
655
717
  },
656
718
  },
@@ -765,6 +827,7 @@ const heimanExtend = {
765
827
  strobeDutyCycle: 0,
766
828
  strobeLevel: 0,
767
829
  };
830
+ values.duration = 600;
768
831
  if (Array.isArray(meta.mapped))
769
832
  throw new Error("Not supported for groups");
770
833
  const info = (values.mode << 4) + ((values.strobe ? 1 : 0) << 2) + values.level;
@@ -820,6 +883,451 @@ const heimanExtend = {
820
883
  isModernExtend: true,
821
884
  };
822
885
  },
886
+ heimanClusterRadarConfigParam: () => {
887
+ const clusterName = "heimanClusterSpecial";
888
+ const exposes = utils.exposeEndpoints(e
889
+ .composite("radar_config", "radar_config", ea.ALL)
890
+ .withDescription("Radar module configuration parameters")
891
+ .withFeature(e.binary("enable", ea.ALL, true, false).withDescription("Enable radar (true=enable, false=disable)"))
892
+ .withFeature(e.enum("type", ea.ALL, ["micro", "move", "presence"]).withDescription("Radar detection type: micro/move/presence"))
893
+ .withFeature(e.numeric("capacity", ea.ALL).withDescription("Detection capacity"))
894
+ .withFeature(e.numeric("sensitivity", ea.ALL).withDescription("Detection sensitivity"))
895
+ .withFeature(e.numeric("range", ea.ALL).withUnit("cm").withDescription("Detection range"))
896
+ .withFeature(e.numeric("period", ea.ALL).withUnit("ms").withDescription("Detection period")));
897
+ const fromZigbee = [
898
+ {
899
+ cluster: clusterName,
900
+ type: ["attributeReport", "readResponse"],
901
+ convert: (model, msg, publish, options, meta) => {
902
+ const data = msg.data.radarConfigParamOfSection1;
903
+ if (!data || !(data instanceof Buffer) || data.length < 11)
904
+ return;
905
+ let offset = 0;
906
+ const mode = data.readUInt8(offset++);
907
+ const capacity = data.readUInt8(offset++);
908
+ const sensitivity = data.readUInt8(offset++);
909
+ const range = data.readUInt16LE(offset);
910
+ offset += 2;
911
+ const period = data.readUInt16LE(offset);
912
+ offset += 2;
913
+ const enable = ((mode >> 7) & 0x01) === 1;
914
+ const typeValue = mode & 0x7f;
915
+ const typeMap = { 1: "micro", 2: "move", 3: "presence" };
916
+ const type = typeMap[typeValue] || "micro";
917
+ return {
918
+ radar_config: { enable, type, capacity, sensitivity, range, period },
919
+ };
920
+ },
921
+ },
922
+ ];
923
+ const toZigbee = [
924
+ {
925
+ key: ["radar_config"],
926
+ convertGet: async (entity, key, meta) => {
927
+ await entity.read(clusterName, ["radarConfigParamOfSection1"], defaultResponseOptions);
928
+ },
929
+ convertSet: async (entity, key, value, meta) => {
930
+ const val = value;
931
+ const typeMap = { micro: 1, move: 2, presence: 3, external: 4 };
932
+ let mode = typeMap[val.type || "micro"] & 0x7f;
933
+ if (val.enable === true)
934
+ mode |= 0x80;
935
+ const data = [];
936
+ data.push(mode ?? 0);
937
+ data.push(val.capacity ?? 0);
938
+ data.push(val.sensitivity ?? 0);
939
+ // u16Range little-endian
940
+ const range = val.range ?? 0;
941
+ data.push(range & 0xff);
942
+ data.push((range >> 8) & 0xff);
943
+ // u16Period little-endian
944
+ const period = val.period ?? 0;
945
+ data.push(period & 0xff);
946
+ data.push((period >> 8) & 0xff);
947
+ // u32Reserve
948
+ data.push(0, 0, 0, 0);
949
+ await entity.write(clusterName, { radarConfigParamOfSection1: data }, defaultResponseOptions);
950
+ },
951
+ },
952
+ ];
953
+ return {
954
+ exposes,
955
+ fromZigbee,
956
+ toZigbee,
957
+ isModernExtend: true,
958
+ };
959
+ },
960
+ heimanClusterRadarDetectionRange: () => {
961
+ const clusterName = "heimanClusterSpecial";
962
+ const exposes = utils.exposeEndpoints(e
963
+ .composite("detection_range", "detection_range", ea.ALL)
964
+ .withDescription("radar detection range")
965
+ .withFeature(e.numeric("min_range", ea.ALL).withUnit("cm").withDescription("Minimum detection range of radar"))
966
+ .withFeature(e.numeric("max_range", ea.ALL).withUnit("cm").withDescription("The maximum detection range of the radar")));
967
+ const fromZigbee = [
968
+ {
969
+ cluster: clusterName,
970
+ type: ["attributeReport", "readResponse"],
971
+ convert: (model, msg, publish, options, meta) => {
972
+ const minRangeVal = msg.data.radarDetectionMinRange;
973
+ const maxRangeVal = msg.data.radarDetectionMaxRange;
974
+ if (minRangeVal === undefined || maxRangeVal === undefined) {
975
+ return;
976
+ }
977
+ return { detection_range: { min_range: Number(minRangeVal), max_range: Number(maxRangeVal) } };
978
+ },
979
+ },
980
+ ];
981
+ const toZigbee = [
982
+ {
983
+ key: ["detection_range"],
984
+ convertGet: async (entity, key, meta) => {
985
+ await entity.read(clusterName, ["radarDetectionMinRange", "radarDetectionMaxRange"], defaultResponseOptions);
986
+ },
987
+ convertSet: async (entity, key, value, meta) => {
988
+ // biome-ignore lint/style/useNamingConvention: snake_case.
989
+ const val = value;
990
+ if (val.min_range !== undefined) {
991
+ const minVal = Math.max(0, Math.min(1000, val.min_range));
992
+ await entity.write(clusterName, { radarDetectionMinRange: minVal }, defaultResponseOptions);
993
+ }
994
+ if (val.max_range !== undefined) {
995
+ const maxVal = Math.max(0, Math.min(1000, val.max_range));
996
+ await entity.write(clusterName, { radarDetectionMaxRange: maxVal }, defaultResponseOptions);
997
+ }
998
+ },
999
+ },
1000
+ ];
1001
+ return {
1002
+ exposes: exposes,
1003
+ fromZigbee,
1004
+ toZigbee,
1005
+ isModernExtend: true,
1006
+ };
1007
+ },
1008
+ heimanClusterDeviceFaultState: () => {
1009
+ const clusterName = "heimanClusterSpecial";
1010
+ const attributeId = 0x0002;
1011
+ const valueMap = {
1012
+ 0: "normal",
1013
+ 1: "smoke_fault",
1014
+ 2: "co_fault",
1015
+ 3: "gas_fault",
1016
+ 4: "co2_fault",
1017
+ 5: "temperature_fault",
1018
+ 6: "humidity_fault",
1019
+ 7: "air_quality_fault",
1020
+ 8: "vibrator_fault",
1021
+ 9: "illuminance_fault",
1022
+ 10: "pir_fault",
1023
+ 11: "radar_fault",
1024
+ 12: "dust_pollution_fault",
1025
+ };
1026
+ const mExtend = m.text({
1027
+ name: "fault_state",
1028
+ cluster: clusterName,
1029
+ attribute: { ID: attributeId, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
1030
+ description: "device fault state",
1031
+ access: "STATE_GET",
1032
+ });
1033
+ const fromZigbee = [
1034
+ {
1035
+ cluster: clusterName,
1036
+ type: ["attributeReport", "readResponse"],
1037
+ convert: (model, msg, publish, options, meta) => {
1038
+ if (msg.data["sensorFaultState"] === undefined)
1039
+ return;
1040
+ const attrValue = Number(msg.data["sensorFaultState"]);
1041
+ const valueText = valueMap[attrValue] ?? "unknown";
1042
+ return { fault_state: valueText };
1043
+ },
1044
+ },
1045
+ ];
1046
+ return {
1047
+ ...mExtend,
1048
+ fromZigbee,
1049
+ };
1050
+ },
1051
+ heimanClusterSensorWifiExposure: () => {
1052
+ const clusterName = "heimanClusterSpecial";
1053
+ const attrIds = {
1054
+ wifiSsid: 0x2000,
1055
+ wifiPassword: 0x2001,
1056
+ wifiSsidCandidate: 0x2002,
1057
+ wifiPasswordCandidate: 0x2003,
1058
+ serverUrl: 0x2006,
1059
+ serverUrlCandidate: 0x2007,
1060
+ };
1061
+ const exposes = [
1062
+ e.text("wifi_ssid", ea.ALL).withDescription("Current WiFi SSID"),
1063
+ e.text("wifi_password", ea.ALL).withDescription("Current WiFi Password"),
1064
+ e.text("wifi_ssid_candidate", ea.ALL).withDescription("Candidate WiFi SSID"),
1065
+ e.text("wifi_password_candidate", ea.ALL).withDescription("Candidate WiFi Password"),
1066
+ e.text("server_url", ea.ALL).withDescription("Current Server URL"),
1067
+ e.text("server_url_candidate", ea.ALL).withDescription("Candidate WiFi Server URL"),
1068
+ ];
1069
+ const fromZigbee = [
1070
+ {
1071
+ cluster: clusterName,
1072
+ type: ["attributeReport", "readResponse"],
1073
+ convert: (model, msg, publish, options, meta) => {
1074
+ const result = {};
1075
+ const data = msg.data;
1076
+ if (data.wifiSsid !== undefined)
1077
+ result.wifi_ssid = data.wifiSsid;
1078
+ if (data.wifiPassword !== undefined)
1079
+ result.wifi_password = data.wifiPassword;
1080
+ if (data.wifiSsidCandidate !== undefined)
1081
+ result.wifi_ssid_candidate = data.wifiSsidCandidate;
1082
+ if (data.wifiPasswordCandidate !== undefined)
1083
+ result.wifi_password_candidate = data.wifiPasswordCandidate;
1084
+ if (data.serverUrl !== undefined)
1085
+ result.server_url = data.serverUrl;
1086
+ if (data.serverUrlCandidate !== undefined)
1087
+ result.server_url_candidate = data.serverUrlCandidate;
1088
+ return result;
1089
+ },
1090
+ },
1091
+ ];
1092
+ const toZigbee = [
1093
+ {
1094
+ key: ["wifi_ssid", "wifi_password", "wifi_ssid_candidate", "wifi_password_candidate", "server_url", "server_url_candidate"],
1095
+ convertSet: async (entity, key, value, meta) => {
1096
+ const attrNameMap = {
1097
+ wifi_ssid: "wifiSsid",
1098
+ wifi_password: "wifiPassword",
1099
+ wifi_ssid_candidate: "wifiSsidCandidate",
1100
+ wifi_password_candidate: "wifiPasswordCandidate",
1101
+ server_url: "serverUrl",
1102
+ server_url_candidate: "serverUrlCandidate",
1103
+ };
1104
+ const attrName = attrNameMap[key];
1105
+ const attrId = attrIds[attrName];
1106
+ if (attrId !== undefined) {
1107
+ const payload = {
1108
+ [attrId]: {
1109
+ value: value,
1110
+ type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR,
1111
+ },
1112
+ };
1113
+ await entity.write(clusterName, payload, defaultResponseOptions);
1114
+ // await entity.write<typeof clusterName, HeimanPrivateCluster>(clusterName, {[attrId]: value}, defaultResponseOptions);
1115
+ }
1116
+ return { state: { [key]: value } };
1117
+ },
1118
+ convertGet: async (entity, key, meta) => {
1119
+ const attrNameMap = {
1120
+ wifi_ssid: "wifiSsid",
1121
+ wifi_password: "wifiPassword",
1122
+ wifi_ssid_candidate: "wifiSsidCandidate",
1123
+ wifi_password_candidate: "wifiPasswordCandidate",
1124
+ server_url: "serverUrl",
1125
+ server_url_candidate: "serverUrlCandidate",
1126
+ };
1127
+ const attrId = attrIds[attrNameMap[key]];
1128
+ if (attrId !== undefined) {
1129
+ await entity.read(clusterName, [attrId], defaultResponseOptions);
1130
+ }
1131
+ },
1132
+ },
1133
+ ];
1134
+ return {
1135
+ exposes,
1136
+ fromZigbee,
1137
+ toZigbee,
1138
+ isModernExtend: true,
1139
+ };
1140
+ },
1141
+ heimanClusterSensorActiveTrigger: () => {
1142
+ const clusterName = "heimanClusterSpecial";
1143
+ const manufacturerCode = 0x120b;
1144
+ const exposes = [e.enum("camera_active_trigger", ea.SET, ["active"]).withDescription("Trigger the camera to take a picture.")];
1145
+ const toZigbee = [
1146
+ {
1147
+ key: ["camera_active_trigger"],
1148
+ convertSet: async (entity, key, value, meta) => {
1149
+ // Command ID 0x01: CameraActiveTigger
1150
+ await entity.command(clusterName, 0x01, {}, { manufacturerCode });
1151
+ return { state: { [key]: value } };
1152
+ },
1153
+ },
1154
+ ];
1155
+ return {
1156
+ exposes,
1157
+ fromZigbee: [],
1158
+ toZigbee,
1159
+ isModernExtend: true,
1160
+ };
1161
+ },
1162
+ heimanClusterSensorTestTrigger: () => {
1163
+ const clusterName = "heimanClusterSpecial";
1164
+ const manufacturerCode = 0x120b;
1165
+ const exposes = [e.enum("camera_test_trigger", ea.SET, ["test"]).withDescription("Trigger camera and wifi/server connection test.")];
1166
+ const toZigbee = [
1167
+ {
1168
+ key: ["camera_test_trigger"],
1169
+ convertSet: async (entity, key, value, meta) => {
1170
+ // Command ID 0x02: CameraTestTigger
1171
+ await entity.command(clusterName, 0x02, {}, { manufacturerCode });
1172
+ return { state: { [key]: value } };
1173
+ },
1174
+ },
1175
+ ];
1176
+ return {
1177
+ exposes,
1178
+ fromZigbee: [],
1179
+ toZigbee,
1180
+ isModernExtend: true,
1181
+ };
1182
+ },
1183
+ sensitivity: (args) => m.enumLookup({
1184
+ name: "sensitivity",
1185
+ lookup: { high: 0, medium: 1, low: 2 },
1186
+ cluster: "heimanClusterRadar",
1187
+ attribute: "sensitivity",
1188
+ description: "sensitivity for PIR sensor",
1189
+ access: "ALL",
1190
+ ...args,
1191
+ }),
1192
+ radarDelayTime: (args) => m.numeric({
1193
+ name: "radar_delay_time",
1194
+ cluster: "msOccupancySensing",
1195
+ attribute: "ultrasonicOToUDelay",
1196
+ description: "Occupied to unoccupied delay",
1197
+ valueMin: 60,
1198
+ valueMax: 3600,
1199
+ access: "ALL",
1200
+ ...args,
1201
+ }),
1202
+ smokeConcentrationLevel: (args) => m.numeric({
1203
+ name: "smoke_level",
1204
+ unit: "",
1205
+ scale: 0.1,
1206
+ valueMin: 0,
1207
+ valueMax: 20,
1208
+ cluster: "heimanClusterSpecial",
1209
+ attribute: "smokeConcentrationLevel",
1210
+ description: "smoke level",
1211
+ access: "STATE_GET",
1212
+ ...args,
1213
+ }),
1214
+ smokeConcentationUnit: (args) => m.enumLookup({
1215
+ name: "smoke_unit",
1216
+ lookup: { "dB/m": 0, "%ft OBS": 1 },
1217
+ cluster: "heimanClusterSpecial",
1218
+ attribute: "smokeConcentationUnit",
1219
+ description: "smoke level unit",
1220
+ access: "STATE_GET",
1221
+ ...args,
1222
+ }),
1223
+ smokeChamberContaminationLevel: (args) => m.enumLookup({
1224
+ name: "chamber_contamination",
1225
+ lookup: { normal: 0, light_contamination: 1, medium_contamination: 2, critical_contamination: 3 },
1226
+ cluster: "heimanClusterSpecial",
1227
+ attribute: "smokeChamberContaminationLevel",
1228
+ description: "it indicates that how serious the smoke chamber get contaminated.",
1229
+ access: "STATE_GET",
1230
+ ...args,
1231
+ }),
1232
+ linkAvailable: (args) => m.enumLookup({
1233
+ name: "link_available",
1234
+ lookup: { inactive: 0, smoke_active: 1, co_active: 2, heat_active: 3 },
1235
+ cluster: "heimanClusterSpecial",
1236
+ attribute: "interconnectable",
1237
+ description: "used for interconnection automation.",
1238
+ access: "STATE_GET",
1239
+ ...args,
1240
+ }),
1241
+ sirenForAutomationOnly: (args) => m.enumLookup({
1242
+ name: "siren_for_automation_only",
1243
+ lookup: { stop: 0, smoke_siren: 1, co_siren: 2 },
1244
+ cluster: "heimanClusterSpecial",
1245
+ attribute: "deviceCascadeState",
1246
+ description: "siren effect",
1247
+ access: "ALL",
1248
+ ...args,
1249
+ }),
1250
+ temperatureOffset: (args) => m.numeric({
1251
+ name: "temperature_offset",
1252
+ unit: "",
1253
+ valueMin: -1500,
1254
+ valueMax: 1500,
1255
+ cluster: "heimanClusterSpecial",
1256
+ attribute: "temperatureOffset",
1257
+ description: "used for temperature offset, unit: 0.01℃",
1258
+ access: "ALL",
1259
+ ...args,
1260
+ }),
1261
+ reportedPackages: (args) => m.numeric({
1262
+ name: "reported_packages",
1263
+ unit: "",
1264
+ valueMin: 0,
1265
+ valueMax: 60000,
1266
+ cluster: "heimanClusterSpecial",
1267
+ attribute: "reportedPackages",
1268
+ description: "for diagnostic purpose, how many zigbee packages has the reported in a day.",
1269
+ access: "STATE_GET",
1270
+ ...args,
1271
+ }),
1272
+ rejoinedCount: (args) => m.numeric({
1273
+ name: "rejoin_count",
1274
+ unit: "",
1275
+ valueMin: 0,
1276
+ valueMax: 60000,
1277
+ cluster: "heimanClusterSpecial",
1278
+ attribute: "rejoinedCount",
1279
+ description: "for diagnostic purpose, how many times has the product rejoined to zigbee network.",
1280
+ access: "STATE_GET",
1281
+ ...args,
1282
+ }),
1283
+ rebootedCount: (args) => m.numeric({
1284
+ name: "reboot_count",
1285
+ unit: "",
1286
+ valueMin: 0,
1287
+ valueMax: 60000,
1288
+ cluster: "heimanClusterSpecial",
1289
+ attribute: "rebootedCount",
1290
+ description: "for diagnostic purpose, how many times has the product rebooted.",
1291
+ access: "STATE_GET",
1292
+ ...args,
1293
+ }),
1294
+ };
1295
+ const tzLocal = {
1296
+ heiman_ir_remote: {
1297
+ key: ["send_key", "create", "learn", "delete", "get_list"],
1298
+ convertSet: async (entity, key, value, meta) => {
1299
+ const options = {
1300
+ // Don't send a manufacturerCode (otherwise set in herdsman):
1301
+ // https://github.com/Koenkk/zigbee-herdsman-converters/pull/2827
1302
+ // @ts-expect-error ignore
1303
+ manufacturerCode: null,
1304
+ ...utils.getOptions(meta.mapped, entity),
1305
+ };
1306
+ switch (key) {
1307
+ case "send_key":
1308
+ utils.assertObject(value);
1309
+ await entity.command("heimanSpecificInfraRedRemote", "sendKey", { id: value.id, keyCode: value.key_code }, options);
1310
+ break;
1311
+ case "create":
1312
+ utils.assertObject(value);
1313
+ await entity.command("heimanSpecificInfraRedRemote", "createId", { modelType: value.model_type }, options);
1314
+ break;
1315
+ case "learn":
1316
+ utils.assertObject(value);
1317
+ await entity.command("heimanSpecificInfraRedRemote", "studyKey", { id: value.id, keyCode: value.key_code }, options);
1318
+ break;
1319
+ case "delete":
1320
+ utils.assertObject(value);
1321
+ await entity.command("heimanSpecificInfraRedRemote", "deleteKey", { id: value.id, keyCode: value.key_code }, options);
1322
+ break;
1323
+ case "get_list":
1324
+ await entity.command("heimanSpecificInfraRedRemote", "getIdAndKeyCodeList", {}, options);
1325
+ break;
1326
+ default: // Unknown key
1327
+ throw new Error(`Unhandled key ${key}`);
1328
+ }
1329
+ },
1330
+ },
823
1331
  };
824
1332
  const fzLocal = {
825
1333
  heimanClusterSpecialfz: {
@@ -840,11 +1348,32 @@ const fzLocal = {
840
1348
  1: "smoke_siren",
841
1349
  2: "co_siren",
842
1350
  };
1351
+ const serverStatusLookup = {
1352
+ 0: "unconfigurated",
1353
+ 1: "unconnected",
1354
+ 2: "connected",
1355
+ 3: "api1_timeout",
1356
+ };
1357
+ const wifiStatusLookup = {
1358
+ 0: "unconfigurated",
1359
+ 1: "unconnected",
1360
+ 2: "connected",
1361
+ 3: "connection_timeout",
1362
+ };
1363
+ const interconnectionStatusLookup = {
1364
+ 0: "inactive",
1365
+ 1: "smoke_active",
1366
+ 2: "co_active",
1367
+ 3: "heat_active",
1368
+ };
843
1369
  if (data.smokeConcentrationLevel !== undefined) {
844
1370
  const raw = Number.parseFloat(data.smokeConcentrationLevel) / 100;
845
1371
  // Check if valid, then force exactly 2 decimal places as a STRING
846
1372
  result.smoke_level = Number.isNaN(raw) ? "0.00" : raw.toFixed(2);
847
1373
  }
1374
+ if (data.temperatureOffset !== undefined) {
1375
+ result.temperature_offset = data.temperatureOffset;
1376
+ }
848
1377
  if (data.deviceCascadeState !== undefined) {
849
1378
  result.siren_for_automation_only = smokeSirenLookup[data.deviceCascadeState];
850
1379
  }
@@ -854,9 +1383,155 @@ const fzLocal = {
854
1383
  if (data.smokeConcentationUnit !== undefined) {
855
1384
  result.smoke_unit = data.smokeConcentationUnit ? "%ft OBS" : "dB/m";
856
1385
  }
1386
+ if (data.interconnectable !== undefined) {
1387
+ result.link_available = interconnectionStatusLookup[data.interconnectable];
1388
+ }
1389
+ if (data.serverStatus !== undefined) {
1390
+ result.server_status = serverStatusLookup[data.serverStatus];
1391
+ }
1392
+ if (data.serverCandidateStatus !== undefined) {
1393
+ result.server_candidate_status = serverStatusLookup[data.serverCandidateStatus];
1394
+ }
1395
+ if (data.wifiStatus !== undefined) {
1396
+ result.wifi_status = wifiStatusLookup[data.wifiStatus];
1397
+ }
1398
+ if (data.wifiCandidateStatus !== undefined) {
1399
+ result.wifi_candidate_status = wifiStatusLookup[data.wifiCandidateStatus];
1400
+ }
1401
+ if (data.reportedPackages !== undefined) {
1402
+ result.reported_packages = data.reportedPackages;
1403
+ }
1404
+ if (data.rejoinedCount !== undefined) {
1405
+ result.rejoin_count = data.rejoinedCount;
1406
+ }
1407
+ if (data.rebootedCount !== undefined) {
1408
+ result.reboot_count = data.rebootedCount;
1409
+ }
857
1410
  return result;
858
1411
  },
859
1412
  },
1413
+ heiman_ir_remote: {
1414
+ cluster: "heimanSpecificInfraRedRemote",
1415
+ type: ["commandStudyKeyRsp", "commandCreateIdRsp", "commandGetIdAndKeyCodeListRsp"],
1416
+ convert: (model, msg, publish, options, meta) => {
1417
+ // TODO: split converter for each cmd?
1418
+ switch (msg.type) {
1419
+ case "commandStudyKeyRsp":
1420
+ (0, node_assert_1.default)("keyCode" in msg.data);
1421
+ return {
1422
+ action: "learn",
1423
+ action_result: msg.data.result === 1 ? "success" : "error",
1424
+ action_key_code: msg.data.keyCode,
1425
+ action_id: msg.data.result === 1 ? msg.data.id : undefined,
1426
+ };
1427
+ case "commandCreateIdRsp":
1428
+ (0, node_assert_1.default)("id" in msg.data);
1429
+ (0, node_assert_1.default)("modelType" in msg.data);
1430
+ return {
1431
+ action: "create",
1432
+ action_result: msg.data.id === 0xff ? "error" : "success",
1433
+ action_model_type: msg.data.modelType,
1434
+ action_id: msg.data.id !== 0xff ? msg.data.id : undefined,
1435
+ };
1436
+ case "commandGetIdAndKeyCodeListRsp": {
1437
+ (0, node_assert_1.default)("packetNumber" in msg.data);
1438
+ // See cluster.js with data format description
1439
+ if (msg.data.packetNumber === 1) {
1440
+ // start to collect and merge list
1441
+ // so, we use store instance for temp storage during merging
1442
+ globalStore.putValue(msg.endpoint, "db", []);
1443
+ }
1444
+ const buffer = msg.data.learnedDevicesList;
1445
+ for (let i = 0; i < msg.data.packetLength;) {
1446
+ const modelDescription = {
1447
+ id: buffer[i],
1448
+ model_type: buffer[i + 1],
1449
+ key_codes: [],
1450
+ };
1451
+ const numberOfKeys = buffer[i + 2];
1452
+ for (let j = i + 3; j < i + 3 + numberOfKeys; j++) {
1453
+ modelDescription.key_codes.push(buffer[j]);
1454
+ }
1455
+ i = i + 3 + numberOfKeys;
1456
+ globalStore.getValue(msg.endpoint, "db").push(modelDescription);
1457
+ }
1458
+ if (msg.data.packetNumber === msg.data.packetsTotal) {
1459
+ // last packet, all data collected, can publish
1460
+ const result = {
1461
+ devices: globalStore.getValue(msg.endpoint, "db"),
1462
+ };
1463
+ globalStore.clearValue(msg.endpoint, "db");
1464
+ return result;
1465
+ }
1466
+ break;
1467
+ }
1468
+ }
1469
+ },
1470
+ },
1471
+ heiman_hcho: {
1472
+ cluster: "msFormaldehyde",
1473
+ type: ["attributeReport", "readResponse"],
1474
+ convert: (model, msg, publish, options, meta) => {
1475
+ if (msg.data.measuredValue !== undefined && msg.data.measuredValue !== null) {
1476
+ return { hcho: msg.data.measuredValue / 1000.0 };
1477
+ }
1478
+ },
1479
+ },
1480
+ heiman_air_quality: {
1481
+ cluster: "heimanSpecificAirQuality",
1482
+ type: ["attributeReport", "readResponse"],
1483
+ convert: (model, msg, publish, options, meta) => {
1484
+ const result = {};
1485
+ if (msg.data.batteryState !== undefined && msg.data.batteryState !== null) {
1486
+ const lookup = {
1487
+ 0: "not_charging",
1488
+ 1: "charging",
1489
+ 2: "charged",
1490
+ };
1491
+ result.battery_state = lookup[msg.data.batteryState];
1492
+ }
1493
+ if (msg.data.tvocMeasuredValue != null)
1494
+ result.voc = msg.data.tvocMeasuredValue;
1495
+ if (msg.data.aqiMeasuredValue != null)
1496
+ result.aqi = msg.data.aqiMeasuredValue;
1497
+ if (msg.data.pm10measuredValue != null)
1498
+ result.pm10 = msg.data.pm10measuredValue;
1499
+ return result;
1500
+ },
1501
+ },
1502
+ heiman_scenes: {
1503
+ cluster: "heimanSpecificScenes",
1504
+ type: ["commandAtHome", "commandGoOut", "commandCinema", "commandRepast", "commandSleep"],
1505
+ convert: (model, msg, publish, options, meta) => {
1506
+ const lookup = {
1507
+ commandCinema: "cinema",
1508
+ commandAtHome: "at_home",
1509
+ commandSleep: "sleep",
1510
+ commandGoOut: "go_out",
1511
+ commandRepast: "repast",
1512
+ };
1513
+ if (lookup[msg.type] !== undefined)
1514
+ return { action: lookup[msg.type] };
1515
+ },
1516
+ },
1517
+ heiman_doorbell_button: {
1518
+ cluster: "ssIasZone",
1519
+ type: "commandStatusChangeNotification",
1520
+ convert: (model, msg, publish, options, meta) => {
1521
+ if (utils.hasAlreadyProcessedMessage(msg, model))
1522
+ return;
1523
+ const lookup = {
1524
+ 32768: "pressed",
1525
+ 32772: "pressed",
1526
+ };
1527
+ const zoneStatus = msg.data.zonestatus;
1528
+ return {
1529
+ action: lookup[zoneStatus],
1530
+ tamper: (zoneStatus & (1 << 2)) > 0,
1531
+ battery_low: (zoneStatus & (1 << 3)) > 0,
1532
+ };
1533
+ },
1534
+ },
860
1535
  };
861
1536
  exports.definitions = [
862
1537
  {
@@ -872,7 +1547,7 @@ exports.definitions = [
872
1547
  await reporting.batteryPercentageRemaining(endpoint1);
873
1548
  await reporting.occupancy(endpoint1);
874
1549
  },
875
- extend: [m.illuminance()],
1550
+ extend: [heimanExtend.heimanClusterLegacyIlluminanceExtend()],
876
1551
  },
877
1552
  {
878
1553
  fingerprint: tuya.fingerprint("TS0212", ["_TYZB01_wpmo3ja3"]),
@@ -1289,12 +1964,15 @@ exports.definitions = [
1289
1964
  },
1290
1965
  },
1291
1966
  {
1292
- fingerprint: [{ modelID: "SceneSwitch-EM-3.0", manufacturerName: "HEIMAN" }],
1967
+ fingerprint: [
1968
+ { modelID: "SceneSwitch-EM-3.0", manufacturerName: "HEIMAN" },
1969
+ { modelID: "SceneSwitch-EF-3.0", manufacturerName: "HEIMAN" },
1970
+ ],
1293
1971
  model: "HS2SS",
1294
1972
  vendor: "Heiman",
1295
1973
  description: "Smart scene switch",
1296
1974
  extend: [(0, heiman_1.addCustomClusterHeimanSpecificScenes)()],
1297
- fromZigbee: [fz.battery, fz.heiman_scenes],
1975
+ fromZigbee: [fz.battery, fzLocal.heiman_scenes],
1298
1976
  exposes: [e.battery(), e.action(["cinema", "at_home", "sleep", "go_out", "repast"])],
1299
1977
  toZigbee: [],
1300
1978
  configure: async (device, coordinatorEndpoint) => {
@@ -1411,12 +2089,15 @@ exports.definitions = [
1411
2089
  exposes: [e.vibration(), e.battery_low(), e.tamper(), e.battery()],
1412
2090
  },
1413
2091
  {
1414
- fingerprint: [{ modelID: "HS2AQ-EM", manufacturerName: "HEIMAN" }],
2092
+ fingerprint: [
2093
+ { modelID: "HS2AQ-EM", manufacturerName: "HEIMAN" },
2094
+ { modelID: "HS2AQ-EM-3.0", manufacturerName: "HEIMAN" },
2095
+ ],
1415
2096
  model: "HS2AQ-EM",
1416
2097
  vendor: "Heiman",
1417
2098
  description: "Air quality monitor",
1418
2099
  extend: [(0, heiman_1.addCustomClusterHeimanSpecificAirQuality)()],
1419
- fromZigbee: [fz.battery, fz.temperature, fz.humidity, fz.pm25, fz.heiman_hcho, fz.heiman_air_quality],
2100
+ fromZigbee: [fz.battery, fz.temperature, fz.humidity, fz.pm25, fzLocal.heiman_hcho, fzLocal.heiman_air_quality],
1420
2101
  toZigbee: [],
1421
2102
  configure: async (device, coordinatorEndpoint) => {
1422
2103
  const heiman = {
@@ -1492,8 +2173,8 @@ exports.definitions = [
1492
2173
  vendor: "Heiman",
1493
2174
  description: "Smart IR Control",
1494
2175
  extend: [(0, heiman_1.addCustomClusterHeimanSpecificInfraRedRemote)()],
1495
- fromZigbee: [fz.battery, fz.heiman_ir_remote],
1496
- toZigbee: [tz.heiman_ir_remote],
2176
+ fromZigbee: [fz.battery, fzLocal.heiman_ir_remote],
2177
+ toZigbee: [tzLocal.heiman_ir_remote],
1497
2178
  exposes: [e.battery()],
1498
2179
  configure: async (device, coordinatorEndpoint) => {
1499
2180
  const endpoint = device.getEndpoint(1);
@@ -1507,8 +2188,8 @@ exports.definitions = [
1507
2188
  vendor: "Heiman",
1508
2189
  description: "Smart IR Control",
1509
2190
  extend: [(0, heiman_1.addCustomClusterHeimanSpecificInfraRedRemote)()],
1510
- fromZigbee: [fz.heiman_ir_remote],
1511
- toZigbee: [tz.heiman_ir_remote],
2191
+ fromZigbee: [fzLocal.heiman_ir_remote],
2192
+ toZigbee: [tzLocal.heiman_ir_remote],
1512
2193
  configure: async (device, coordinatorEndpoint) => {
1513
2194
  const endpoint = device.getEndpoint(1);
1514
2195
  await reporting.bind(endpoint, coordinatorEndpoint, ["heimanSpecificInfraRedRemote"]);
@@ -1583,7 +2264,61 @@ exports.definitions = [
1583
2264
  model: "HS1RM-EF",
1584
2265
  vendor: "Heiman",
1585
2266
  description: "Smart relay module - 2 gang with neutral wire",
1586
- extend: [m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }), m.onOff({ endpointNames: ["l1", "l2"] }), m.temperature()],
2267
+ exposes: [],
2268
+ extend: [
2269
+ heimanExtend.heimanClusterSpecial(),
2270
+ m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }),
2271
+ m.onOff({ endpointNames: ["l1", "l2"] }),
2272
+ m.deviceTemperature(),
2273
+ m.identify(),
2274
+ m.enumLookup({
2275
+ name: "switch_type_l1",
2276
+ endpointName: "l1",
2277
+ lookup: { toggle: 0, momentary: 1 },
2278
+ cluster: "heimanClusterSpecial",
2279
+ attribute: "switchType",
2280
+ description: "Switch input type for l1.",
2281
+ access: "ALL",
2282
+ }),
2283
+ m.enumLookup({
2284
+ name: "switch_type_l2",
2285
+ endpointName: "l2",
2286
+ lookup: { toggle: 0, momentary: 1 },
2287
+ cluster: "heimanClusterSpecial",
2288
+ attribute: "switchType",
2289
+ description: "Switch input type for l2.",
2290
+ access: "ALL",
2291
+ }),
2292
+ m.enumLookup({
2293
+ name: "switch_actions_l1",
2294
+ endpointName: "l1",
2295
+ lookup: { on_off: 0, off_on: 1, toggle: 2 },
2296
+ cluster: "genOnOffSwitchCfg",
2297
+ attribute: "switchActions",
2298
+ description: "Actions for switch 1",
2299
+ }),
2300
+ m.enumLookup({
2301
+ name: "switch_actions_l2",
2302
+ endpointName: "l2",
2303
+ lookup: { on_off: 0, off_on: 1, toggle: 2 },
2304
+ cluster: "genOnOffSwitchCfg",
2305
+ attribute: "switchActions",
2306
+ description: "Actions for switch 2",
2307
+ }),
2308
+ ],
2309
+ configure: async (device, coordinatorEndpoint) => {
2310
+ const endpoint1 = device.getEndpoint(1);
2311
+ const endpoint2 = device.getEndpoint(2);
2312
+ await reporting.bind(endpoint1, coordinatorEndpoint, ["genOnOff", "genOnOffSwitchCfg", "heimanClusterSpecial", "haDiagnostic"]);
2313
+ await reporting.bind(endpoint2, coordinatorEndpoint, ["genOnOff", "genOnOffSwitchCfg", "heimanClusterSpecial"]);
2314
+ await endpoint1.read("genOnOff", ["onOff", "startUpOnOff"]);
2315
+ await endpoint2.read("genOnOff", ["onOff", "startUpOnOff"]);
2316
+ await endpoint1.read("genOnOffSwitchCfg", ["switchActions"]);
2317
+ await endpoint2.read("genOnOffSwitchCfg", ["switchActions"]);
2318
+ await endpoint1.read("heimanClusterSpecial", ["switchType"]);
2319
+ await endpoint2.read("heimanClusterSpecial", ["switchType"]);
2320
+ await endpoint1.read("haDiagnostic", ["lastMessageLqi", "lastMessageRssi"]);
2321
+ },
1587
2322
  },
1588
2323
  {
1589
2324
  zigbeeModel: ["TemperLight"],
@@ -1632,12 +2367,142 @@ exports.definitions = [
1632
2367
  toZigbee: [],
1633
2368
  exposes: [e.occupancy(), e.battery_low(), e.tamper()],
1634
2369
  },
2370
+ {
2371
+ zigbeeModel: ["HS9MS-E"],
2372
+ model: "HS9MS-E",
2373
+ vendor: "Heiman",
2374
+ description: "Smart motion sensor",
2375
+ fromZigbee: [fzLocal.heimanClusterSpecialfz],
2376
+ toZigbee: [],
2377
+ exposes: [],
2378
+ extend: [
2379
+ m.iasZoneAlarm({ zoneType: "occupancy", zoneAttributes: ["alarm_1", "tamper", "battery_low"] }),
2380
+ m.battery(),
2381
+ heimanExtend.heimanClusterSpecial(),
2382
+ heimanExtend.heimanClusterSensorTestTrigger(),
2383
+ heimanExtend.heimanClusterSensorActiveTrigger(),
2384
+ heimanExtend.heimanClusterLegacyIlluminanceExtend(),
2385
+ heimanExtend.heimanClusterSensorWifiExposure(),
2386
+ m.numeric({
2387
+ name: "picture_quantity",
2388
+ unit: "",
2389
+ scale: 1,
2390
+ valueMin: 1,
2391
+ valueMax: 20,
2392
+ cluster: "heimanClusterSpecial",
2393
+ attribute: "pictureQuantity",
2394
+ description: "picture quantity",
2395
+ access: "ALL",
2396
+ }),
2397
+ m.numeric({
2398
+ name: "picture_quality",
2399
+ unit: "",
2400
+ scale: 1,
2401
+ valueMin: 0,
2402
+ valueMax: 100,
2403
+ cluster: "heimanClusterSpecial",
2404
+ attribute: "pictureQuality",
2405
+ description: "picture quality",
2406
+ access: "ALL",
2407
+ }),
2408
+ m.numeric({
2409
+ name: "mcu_software_version",
2410
+ unit: "",
2411
+ scale: 1,
2412
+ valueMin: 0,
2413
+ valueMax: 255,
2414
+ cluster: "heimanClusterSpecial",
2415
+ attribute: "mcuSoftwareVersion",
2416
+ description: "version of mcu",
2417
+ access: "STATE_GET",
2418
+ }),
2419
+ m.numeric({
2420
+ name: "illuminance_threshold",
2421
+ unit: "Lx",
2422
+ scale: 1,
2423
+ valueMin: 0,
2424
+ valueMax: 1000,
2425
+ cluster: "heimanClusterSpecial",
2426
+ attribute: "illuminanceThreshold",
2427
+ description: "when the illuminance exceeds the threshold, it activates local linkages.",
2428
+ access: "ALL",
2429
+ }),
2430
+ m.binary({
2431
+ name: "sensor_armed",
2432
+ valueOn: ["Armed", 1],
2433
+ valueOff: ["Disarmed", 0],
2434
+ cluster: "heimanClusterSpecial",
2435
+ attribute: "sensorArmed",
2436
+ description: "armed",
2437
+ access: "ALL",
2438
+ }),
2439
+ m.enumLookup({
2440
+ name: "pir_sensitivity_level",
2441
+ lookup: { disabled: 0, low: 1, medium: 2, high: 3 },
2442
+ cluster: "heimanClusterSpecial",
2443
+ attribute: "sensorSensitivityLevel",
2444
+ description: "The sensitivity of PIR Sensor",
2445
+ access: "ALL",
2446
+ }),
2447
+ m.enumLookup({
2448
+ name: "wifi_status",
2449
+ lookup: { unconfigurated: 0, unconnected: 1, connected: 2, connection_timeout: 3 },
2450
+ cluster: "heimanClusterSpecial",
2451
+ attribute: "wifiStatus",
2452
+ description: "wifi status",
2453
+ access: "STATE_GET",
2454
+ }),
2455
+ m.enumLookup({
2456
+ name: "wifi_candidate_status",
2457
+ lookup: { unconfigurated: 0, unconnected: 1, connected: 2, connection_timeout: 3 },
2458
+ cluster: "heimanClusterSpecial",
2459
+ attribute: "wifiCandidateStatus",
2460
+ description: "wifi candidate status",
2461
+ access: "STATE_GET",
2462
+ }),
2463
+ m.enumLookup({
2464
+ name: "server_status",
2465
+ lookup: { unconfigurated: 0, unconnected: 1, connected: 2, api_timeout: 3 },
2466
+ cluster: "heimanClusterSpecial",
2467
+ attribute: "serverStatus",
2468
+ description: "server status",
2469
+ access: "STATE_GET",
2470
+ }),
2471
+ m.enumLookup({
2472
+ name: "server_candidate_status",
2473
+ lookup: { unconfigurated: 0, unconnected: 1, connected: 2, api_timeout: 3 },
2474
+ cluster: "heimanClusterSpecial",
2475
+ attribute: "serverCandidateStatus",
2476
+ description: "server candidate status",
2477
+ access: "STATE_GET",
2478
+ }),
2479
+ m.enumLookup({
2480
+ name: "camera_ready",
2481
+ lookup: { unavailable: 0, low_power: 1, normal: 2, advanced: 3 },
2482
+ cluster: "heimanClusterSpecial",
2483
+ attribute: "cameraReady",
2484
+ description: "wifi candidate status",
2485
+ access: "STATE_GET",
2486
+ }),
2487
+ m.numeric({
2488
+ name: "wifi_rssi",
2489
+ unit: "",
2490
+ scale: 1,
2491
+ valueMin: -127,
2492
+ valueMax: 127,
2493
+ cluster: "heimanClusterSpecial",
2494
+ attribute: "wifiRssi",
2495
+ description: "wifi rssi",
2496
+ access: "ALL",
2497
+ }),
2498
+ ],
2499
+ },
1635
2500
  {
1636
2501
  fingerprint: [{ modelID: "DoorBell-EM", manufacturerName: "HEIMAN" }],
1637
2502
  model: "HS2DB",
1638
2503
  vendor: "Heiman",
1639
2504
  description: "Smart doorbell button",
1640
- fromZigbee: [fz.battery, fz.heiman_doorbell_button],
2505
+ fromZigbee: [fz.battery, fzLocal.heiman_doorbell_button],
1641
2506
  toZigbee: [],
1642
2507
  configure: async (device, coordinatorEndpoint) => {
1643
2508
  const endpoint = device.getEndpoint(1);
@@ -1651,7 +2516,7 @@ exports.definitions = [
1651
2516
  model: "HS2SS-E_V03",
1652
2517
  vendor: "Heiman",
1653
2518
  description: "Smart doorbell button",
1654
- fromZigbee: [fz.battery, fz.heiman_doorbell_button],
2519
+ fromZigbee: [fz.battery, fzLocal.heiman_doorbell_button],
1655
2520
  toZigbee: [],
1656
2521
  configure: async (device, coordinatorEndpoint) => {
1657
2522
  const endpoint = device.getEndpoint(1);
@@ -1724,19 +2589,15 @@ exports.definitions = [
1724
2589
  heimanExtend.heimanClusterRadarCellMountedTableExtend(),
1725
2590
  heimanExtend.heimanClusterRadarWallMountedTableExtend(),
1726
2591
  heimanExtend.heimanClusterRadarSubRegionIsolationTableExtend(),
1727
- m.enumLookup({
1728
- name: "sensitivity",
2592
+ heimanExtend.sensitivity({
1729
2593
  lookup: { Off: 0, LowSensitivity: 1, HighSensitivity: 2 },
1730
- cluster: "heimanClusterRadar",
1731
- attribute: { ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
1732
2594
  description: "0: Off, 1: Low sensitivity, 2: High sensitivity",
1733
- access: "ALL",
1734
2595
  }),
1735
2596
  m.enumLookup({
1736
2597
  name: "installation_method",
1737
2598
  lookup: { WallMounted: 0, Ceiling: 1, RotateCeiling45: 2 },
1738
2599
  cluster: "heimanClusterRadar",
1739
- attribute: { ID: 0xf007, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
2600
+ attribute: "installationMethod",
1740
2601
  description: "0: Wall-mounted, 1: Ceiling, 2: Rotate ceiling 45°",
1741
2602
  access: "ALL",
1742
2603
  }),
@@ -1770,7 +2631,7 @@ exports.definitions = [
1770
2631
  heimanExtend.heimanClusterLegacyIlluminanceExtend(),
1771
2632
  m.numeric({
1772
2633
  name: "radar_delay_time",
1773
- cluster: 0x0406,
2634
+ cluster: "msOccupancySensing",
1774
2635
  attribute: { ID: 0x0020, type: 0x21 },
1775
2636
  description: "Occupied to unoccupied delay",
1776
2637
  valueMin: 60,
@@ -1792,7 +2653,9 @@ exports.definitions = [
1792
2653
  ]);
1793
2654
  await endpoint.read("msIlluminanceMeasurement", ["measuredValue"]);
1794
2655
  await endpoint.read("msOccupancySensing", ["ultrasonicOToUDelay"]);
1795
- await endpoint.read("heimanClusterRadar", [0xf001, 0xf002], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD });
2656
+ await endpoint.read("heimanClusterRadar", ["enableIndicator", "sensitivity"], {
2657
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
2658
+ });
1796
2659
  },
1797
2660
  endpoint: (device) => ({ default: 1 }),
1798
2661
  },
@@ -1806,23 +2669,8 @@ exports.definitions = [
1806
2669
  heimanExtend.heimanClusterRadar(),
1807
2670
  heimanExtend.heimanClusterRadarActiveIndicatorExtend(),
1808
2671
  heimanExtend.heimanClusterLegacyIlluminanceExtend(),
1809
- m.numeric({
1810
- name: "radar_delay_time",
1811
- cluster: 0x0406,
1812
- attribute: { ID: 0x0010, type: 0x21 },
1813
- description: "Occupied to unoccupied delay",
1814
- valueMin: 60,
1815
- valueMax: 3600,
1816
- access: "ALL",
1817
- }),
1818
- m.enumLookup({
1819
- name: "sensitivity",
1820
- lookup: { high: 0, medium: 1, low: 2 },
1821
- cluster: "heimanClusterRadar",
1822
- attribute: { ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
1823
- description: "sensitivity for PIR sensor",
1824
- access: "ALL",
1825
- }),
2672
+ heimanExtend.radarDelayTime(),
2673
+ heimanExtend.sensitivity(),
1826
2674
  ],
1827
2675
  ota: true,
1828
2676
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -1835,7 +2683,9 @@ exports.definitions = [
1835
2683
  ]);
1836
2684
  await endpoint.read("msIlluminanceMeasurement", ["measuredValue"]);
1837
2685
  await endpoint.read("msOccupancySensing", ["ultrasonicOToUDelay"]);
1838
- await endpoint.read("heimanClusterRadar", [0xf001, 0xf002], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD });
2686
+ await endpoint.read("heimanClusterRadar", ["enableIndicator", "sensitivity"], {
2687
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
2688
+ });
1839
2689
  },
1840
2690
  endpoint: (device) => ({ default: 1 }),
1841
2691
  },
@@ -1850,23 +2700,8 @@ exports.definitions = [
1850
2700
  heimanExtend.heimanClusterRadar(),
1851
2701
  heimanExtend.heimanClusterRadarActiveIndicatorExtend(),
1852
2702
  heimanExtend.heimanClusterLegacyIlluminanceExtend(),
1853
- m.numeric({
1854
- name: "radar_delay_time",
1855
- cluster: 0x0406,
1856
- attribute: { ID: 0x0010, type: 0x21 },
1857
- description: "Occupied to unoccupied delay",
1858
- valueMin: 60,
1859
- valueMax: 3600,
1860
- access: "ALL",
1861
- }),
1862
- m.enumLookup({
1863
- name: "sensitivity",
1864
- lookup: { high: 0, medium: 1, low: 2 },
1865
- cluster: "heimanClusterRadar",
1866
- attribute: { ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
1867
- description: "sensitivity for PIR sensor",
1868
- access: "ALL",
1869
- }),
2703
+ heimanExtend.radarDelayTime(),
2704
+ heimanExtend.sensitivity(),
1870
2705
  ],
1871
2706
  ota: true,
1872
2707
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -1879,7 +2714,9 @@ exports.definitions = [
1879
2714
  ]);
1880
2715
  await endpoint.read("msIlluminanceMeasurement", ["measuredValue"]);
1881
2716
  await endpoint.read("msOccupancySensing", ["ultrasonicOToUDelay"]);
1882
- await endpoint.read("heimanClusterRadar", [0xf001, 0xf002], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD });
2717
+ await endpoint.read("heimanClusterRadar", ["enableIndicator", "sensitivity"], {
2718
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
2719
+ });
1883
2720
  },
1884
2721
  endpoint: (device) => ({ default: 1 }),
1885
2722
  },
@@ -1901,7 +2738,7 @@ exports.definitions = [
1901
2738
  access: "STATE_GET",
1902
2739
  }),
1903
2740
  ],
1904
- fromZigbee: [fz.temperature, fz.pm25, fz.heiman_hcho, fz.heiman_air_quality],
2741
+ fromZigbee: [fz.temperature, fz.pm25, fzLocal.heiman_hcho, fzLocal.heiman_air_quality],
1905
2742
  toZigbee: [],
1906
2743
  configure: async (device, coordinatorEndpoint) => {
1907
2744
  const endpoint = device.getEndpoint(1);
@@ -1961,18 +2798,31 @@ exports.definitions = [
1961
2798
  exposes: [e.temperature(), e.pm25(), e.hcho(), e.aqi(), e.pm10()],
1962
2799
  },
1963
2800
  {
1964
- zigbeeModel: ["HS1SA-EF-3.0"],
1965
- model: "HS1SA-EF",
2801
+ zigbeeModel: ["HS1SA-EF-3.0", "HS1SA-E-PLUS"],
2802
+ model: "HS1SA-E-PLUS",
1966
2803
  vendor: "Heiman",
1967
2804
  description: "Smoke detector",
1968
2805
  fromZigbee: [fz.ias_smoke_alarm_1, fz.battery, fzLocal.heimanClusterSpecialfz],
1969
2806
  toZigbee: [tz.warning],
1970
2807
  configure: async (device, coordinatorEndpoint) => {
1971
2808
  const endpoint = device.getEndpoint(1);
1972
- await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", 0xfc90]);
2809
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "heimanClusterSpecial"]);
1973
2810
  await reporting.batteryPercentageRemaining(endpoint);
1974
2811
  await endpoint.read("ssIasZone", ["zoneStatus", "zoneState", "iasCieAddr", "zoneId"]);
1975
- await endpoint.read("heimanClusterSpecial", [0x0002, 0x008, 0x009, 0x1004, 0x1007, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b], {
2812
+ await endpoint.read("heimanClusterSpecial", [
2813
+ "sensorFaultState",
2814
+ "deviceMuteControl",
2815
+ "deviceMuteState",
2816
+ "indicatorLightLevelControlOf1",
2817
+ "interconnectable",
2818
+ "smokeConcentrationLevel",
2819
+ "smokeChamberContaminationLevel",
2820
+ "smokeConcentationUnit",
2821
+ "rebootedCount",
2822
+ "rejoinedCount",
2823
+ "reportedPackages",
2824
+ "temperatureOffset",
2825
+ ], {
1976
2826
  manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
1977
2827
  });
1978
2828
  },
@@ -1989,71 +2839,303 @@ exports.definitions = [
1989
2839
  heimanExtend.heimanClusterSensorMutable(),
1990
2840
  heimanExtend.heimanClusterIndicatorLight(),
1991
2841
  heimanExtend.heimanClusterSensorInterconnectable(),
2842
+ heimanExtend.smokeConcentrationLevel(),
2843
+ heimanExtend.smokeConcentationUnit(),
2844
+ heimanExtend.smokeChamberContaminationLevel(),
2845
+ heimanExtend.linkAvailable(),
2846
+ heimanExtend.sirenForAutomationOnly(),
2847
+ heimanExtend.temperatureOffset(),
2848
+ heimanExtend.reportedPackages(),
2849
+ heimanExtend.rejoinedCount(),
2850
+ heimanExtend.rebootedCount(),
2851
+ ],
2852
+ ota: true,
2853
+ },
2854
+ {
2855
+ zigbeeModel: ["HM-722ESY-E-PLUS"],
2856
+ model: "HM-722ESY-E Plus",
2857
+ vendor: "Heiman",
2858
+ description: "Co detector",
2859
+ fromZigbee: [fzLocal.heimanClusterSpecialfz],
2860
+ toZigbee: [tz.warning],
2861
+ configure: async (device, coordinatorEndpoint) => {
2862
+ const endpoint = device.getEndpoint(1);
2863
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "heimanClusterSpecial"]);
2864
+ await reporting.batteryPercentageRemaining(endpoint);
2865
+ await endpoint.read("ssIasZone", ["zoneStatus", "zoneState", "iasCieAddr", "zoneId"]);
2866
+ await endpoint.read("heimanClusterSpecial", [
2867
+ "sensorFaultState",
2868
+ "deviceMuteControl",
2869
+ "deviceMuteState",
2870
+ "indicatorLightLevelControlOf1",
2871
+ "interconnectable",
2872
+ "smokeConcentrationLevel",
2873
+ "smokeChamberContaminationLevel",
2874
+ "smokeConcentationUnit",
2875
+ "temperatureOffset",
2876
+ "sensorLifeState",
2877
+ "sensorPrealarmState",
2878
+ "rebootedCount",
2879
+ "rejoinedCount",
2880
+ "reportedPackages",
2881
+ ], {
2882
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
2883
+ });
2884
+ },
2885
+ exposes: [],
2886
+ extend: [
2887
+ m.battery(),
2888
+ m.identify(),
2889
+ m.temperature(),
2890
+ m.iasZoneAlarm({ zoneType: "carbon_monoxide", zoneAttributes: ["alarm_1", "battery_low", "test"] }),
1992
2891
  m.numeric({
1993
- name: "smoke_level",
1994
- unit: "",
1995
- scale: 0.1,
2892
+ name: "co",
2893
+ unit: "ppm",
1996
2894
  valueMin: 0,
1997
- valueMax: 20,
2895
+ valueMax: 900,
2896
+ cluster: "msCarbonMonoxide",
2897
+ attribute: "measuredValue",
2898
+ description: "The measured CO level",
2899
+ access: "STATE_GET",
2900
+ scale: 0.000001,
2901
+ reporting: { min: "1_SECOND", max: "4_HOURS", change: 0.00001 },
2902
+ }),
2903
+ m.enumLookup({
2904
+ name: "endoflife",
2905
+ lookup: { normal: 0, expires_soon: 1, expired: 2 },
1998
2906
  cluster: "heimanClusterSpecial",
1999
- attribute: { ID: 0x0016, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
2000
- description: "smoke level",
2907
+ attribute: "sensorLifeState",
2908
+ description: "It indicates if the sensor expired",
2001
2909
  access: "STATE_GET",
2002
2910
  }),
2003
2911
  m.enumLookup({
2004
- name: "smoke_unit",
2005
- lookup: { "dB/m": 0, "%ft OBS": 1 },
2912
+ name: "alarm_state",
2913
+ lookup: { normal: 0, prealarm: 1, warning_alarm: 2, critical_alarm: 3 },
2006
2914
  cluster: "heimanClusterSpecial",
2007
- attribute: { ID: 0x0018, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
2008
- description: "smoke level unit",
2915
+ attribute: "sensorPrealarmState",
2916
+ description: "It indicates the level of alarm states",
2009
2917
  access: "STATE_GET",
2010
2918
  }),
2919
+ heimanExtend.heimanClusterSpecial(),
2920
+ heimanExtend.heimanClusterSensorFaultState(),
2921
+ heimanExtend.heimanClusterDeviceMuteState(),
2922
+ heimanExtend.iasZoneInitiateTestMode(),
2923
+ heimanExtend.heimanClusterSensorMutable(),
2924
+ heimanExtend.heimanClusterIndicatorLight(),
2925
+ heimanExtend.heimanClusterSensorInterconnectable(),
2926
+ heimanExtend.linkAvailable(),
2927
+ heimanExtend.sirenForAutomationOnly(),
2928
+ heimanExtend.temperatureOffset(),
2929
+ heimanExtend.reportedPackages(),
2930
+ heimanExtend.rejoinedCount(),
2931
+ heimanExtend.rebootedCount(),
2932
+ ],
2933
+ ota: true,
2934
+ },
2935
+ {
2936
+ zigbeeModel: ["HS1CA-E-PLUS"],
2937
+ model: "HS1CA-E-PLUS",
2938
+ vendor: "Heiman",
2939
+ description: "Co detector",
2940
+ fromZigbee: [fzLocal.heimanClusterSpecialfz],
2941
+ toZigbee: [tz.warning],
2942
+ configure: async (device, coordinatorEndpoint) => {
2943
+ const endpoint = device.getEndpoint(1);
2944
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "heimanClusterSpecial"]);
2945
+ await reporting.batteryPercentageRemaining(endpoint);
2946
+ await endpoint.read("ssIasZone", ["zoneStatus", "zoneState", "iasCieAddr", "zoneId"]);
2947
+ await endpoint.read("heimanClusterSpecial", [
2948
+ "sensorFaultState",
2949
+ "deviceMuteControl",
2950
+ "deviceMuteState",
2951
+ "indicatorLightLevelControlOf1",
2952
+ "interconnectable",
2953
+ "smokeConcentrationLevel",
2954
+ "smokeChamberContaminationLevel",
2955
+ "smokeConcentationUnit",
2956
+ "temperatureOffset",
2957
+ "sensorLifeState",
2958
+ "sensorPrealarmState",
2959
+ "rebootedCount",
2960
+ "rejoinedCount",
2961
+ "reportedPackages",
2962
+ ], {
2963
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
2964
+ });
2965
+ },
2966
+ exposes: [],
2967
+ extend: [
2968
+ m.battery(),
2969
+ m.identify(),
2970
+ m.temperature(),
2971
+ m.iasZoneAlarm({ zoneType: "carbon_monoxide", zoneAttributes: ["alarm_1", "battery_low", "test"] }),
2972
+ m.numeric({
2973
+ name: "co",
2974
+ unit: "ppm",
2975
+ valueMin: 0,
2976
+ valueMax: 900,
2977
+ cluster: "msCarbonMonoxide",
2978
+ attribute: "measuredValue",
2979
+ description: "The measured CO level",
2980
+ access: "STATE_GET",
2981
+ scale: 0.000001,
2982
+ reporting: { min: "1_SECOND", max: "4_HOURS", change: 0.00001 },
2983
+ }),
2011
2984
  m.enumLookup({
2012
- name: "chamber_contamination",
2013
- lookup: { normal: 0, light_contamination: 1, medium_contamination: 2, critical_contamination: 3 },
2985
+ name: "endoflife",
2986
+ lookup: { normal: 0, expires_soon: 1, expired: 2 },
2014
2987
  cluster: "heimanClusterSpecial",
2015
- attribute: { ID: 0x0017, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
2016
- description: "it indicates that how serious the smoke chamber get contaminated.",
2988
+ attribute: "sensorLifeState",
2989
+ description: "It indicates if the sensor expired",
2017
2990
  access: "STATE_GET",
2018
2991
  }),
2019
2992
  m.enumLookup({
2020
- name: "siren_for_automation_only",
2021
- lookup: { stop: 0, smoke_siren: 1, co_siren: 2 },
2993
+ name: "alarm_state",
2994
+ lookup: { normal: 0, prealarm: 1, warning_alarm: 2, critical_alarm: 3 },
2022
2995
  cluster: "heimanClusterSpecial",
2023
- attribute: { ID: 0x0012, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
2024
- description: "siren effect",
2025
- access: "ALL",
2996
+ attribute: "sensorPrealarmState",
2997
+ description: "It indicates the level of alarm states",
2998
+ access: "STATE_GET",
2999
+ }),
3000
+ heimanExtend.heimanClusterSpecial(),
3001
+ heimanExtend.heimanClusterSensorFaultState(),
3002
+ heimanExtend.heimanClusterDeviceMuteState(),
3003
+ heimanExtend.iasZoneInitiateTestMode(),
3004
+ heimanExtend.heimanClusterSensorMutable(),
3005
+ heimanExtend.heimanClusterIndicatorLight(),
3006
+ heimanExtend.heimanClusterSensorInterconnectable(),
3007
+ heimanExtend.sirenForAutomationOnly(),
3008
+ heimanExtend.temperatureOffset(),
3009
+ heimanExtend.linkAvailable(),
3010
+ heimanExtend.reportedPackages(),
3011
+ heimanExtend.rejoinedCount(),
3012
+ heimanExtend.rebootedCount(),
3013
+ ],
3014
+ ota: true,
3015
+ },
3016
+ {
3017
+ zigbeeModel: ["Smokesensor-EF2-3.0"],
3018
+ model: "HS1SA-E Lover",
3019
+ vendor: "Heiman",
3020
+ description: "Smoke detector",
3021
+ fromZigbee: [fzLocal.heimanClusterSpecialfz],
3022
+ toZigbee: [tz.warning],
3023
+ configure: async (device, coordinatorEndpoint) => {
3024
+ const endpoint = device.getEndpoint(1);
3025
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "heimanClusterSpecial"]);
3026
+ await reporting.batteryPercentageRemaining(endpoint);
3027
+ await endpoint.read("ssIasZone", ["zoneStatus", "zoneState", "iasCieAddr", "zoneId"]);
3028
+ await endpoint.read("heimanClusterSpecial", ["sensorFaultState", "deviceMuteControl", "deviceMuteState", "rebootedCount", "rejoinedCount", "reportedPackages"], {
3029
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
3030
+ });
3031
+ },
3032
+ exposes: [],
3033
+ extend: [
3034
+ m.battery(),
3035
+ m.identify(),
3036
+ m.iasZoneAlarm({ zoneType: "smoke", zoneAttributes: ["alarm_1", "battery_low", "test", "trouble"] }),
3037
+ heimanExtend.heimanClusterSpecial(),
3038
+ heimanExtend.iasZoneInitiateTestMode(),
3039
+ heimanExtend.iasWarningDeviceMute(),
3040
+ heimanExtend.sirenForAutomationOnly({
3041
+ lookup: { stop: 0, smoke_siren: 1 },
2026
3042
  }),
3043
+ heimanExtend.reportedPackages(),
3044
+ heimanExtend.rejoinedCount(),
3045
+ heimanExtend.rebootedCount(),
3046
+ ],
3047
+ ota: true,
3048
+ },
3049
+ {
3050
+ zigbeeModel: ["HM-636THV-AC-M"],
3051
+ model: "HM-636THV-AC-M",
3052
+ vendor: "Heiman",
3053
+ description: "Smoke detector",
3054
+ fromZigbee: [fzLocal.heimanClusterSpecialfz],
3055
+ toZigbee: [tz.warning],
3056
+ configure: async (device, coordinatorEndpoint) => {
3057
+ const endpoint = device.getEndpoint(1);
3058
+ await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "heimanClusterSpecial"]);
3059
+ await reporting.batteryPercentageRemaining(endpoint);
3060
+ await endpoint.read("ssIasZone", ["zoneStatus", "zoneState", "iasCieAddr", "zoneId"]);
3061
+ await endpoint.read("heimanClusterSpecial", [
3062
+ "sensorFaultState",
3063
+ "deviceMuteControl",
3064
+ "deviceMuteState",
3065
+ "indicatorLightLevelControlOf1",
3066
+ "interconnectable",
3067
+ "smokeConcentrationLevel",
3068
+ "smokeChamberContaminationLevel",
3069
+ "smokeConcentationUnit",
3070
+ "sensorLifeState",
3071
+ "sensorPrealarmState",
3072
+ "rebootedCount",
3073
+ "rejoinedCount",
3074
+ "reportedPackages",
3075
+ "temperatureOffset",
3076
+ ], {
3077
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
3078
+ });
3079
+ },
3080
+ exposes: [],
3081
+ extend: [
3082
+ m.battery(),
3083
+ m.identify(),
3084
+ m.temperature(),
3085
+ m.humidity(),
3086
+ m.iasZoneAlarm({ zoneType: "smoke", zoneAttributes: ["alarm_1", "battery_low", "test"] }),
2027
3087
  m.numeric({
2028
- name: "reported_packages",
2029
- unit: "",
3088
+ name: "co",
3089
+ unit: "ppm",
2030
3090
  valueMin: 0,
2031
- valueMax: 60000,
3091
+ valueMax: 900,
3092
+ cluster: "msCarbonMonoxide",
3093
+ attribute: "measuredValue",
3094
+ description: "The measured CO level",
3095
+ access: "STATE_GET",
3096
+ scale: 0.000001,
3097
+ reporting: { min: "1_SECOND", max: "4_HOURS", change: 0.00001 },
3098
+ }),
3099
+ heimanExtend.heimanClusterSpecial(),
3100
+ heimanExtend.heimanClusterSensorFaultState(),
3101
+ heimanExtend.heimanClusterDeviceMuteState(),
3102
+ heimanExtend.iasZoneInitiateTestMode(),
3103
+ heimanExtend.heimanClusterSensorMutable(),
3104
+ heimanExtend.heimanClusterIndicatorLight(),
3105
+ heimanExtend.heimanClusterSensorInterconnectable(),
3106
+ heimanExtend.smokeConcentrationLevel(),
3107
+ heimanExtend.smokeConcentationUnit(),
3108
+ heimanExtend.smokeChamberContaminationLevel(),
3109
+ heimanExtend.linkAvailable(),
3110
+ heimanExtend.sirenForAutomationOnly(),
3111
+ heimanExtend.temperatureOffset(),
3112
+ m.enumLookup({
3113
+ name: "preheating",
3114
+ lookup: { normal: 0, preheating: 1 },
2032
3115
  cluster: "heimanClusterSpecial",
2033
- attribute: { ID: 0x001b, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
2034
- description: "for diagnostic purpose, how many zigbee packages has the reported in a day.",
3116
+ attribute: "sensorPreheatingState",
3117
+ description: "It indicates if the sensor is under preheating status",
2035
3118
  access: "STATE_GET",
2036
3119
  }),
2037
- m.numeric({
2038
- name: "rejoin_count",
2039
- unit: "",
2040
- valueMin: 0,
2041
- valueMax: 60000,
3120
+ m.enumLookup({
3121
+ name: "endoflife",
3122
+ lookup: { normal: 0, expires_soon: 1, expired: 2 },
2042
3123
  cluster: "heimanClusterSpecial",
2043
- attribute: { ID: 0x001a, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
2044
- description: "for diagnostic purpose, how many times has the product rejoined to zigbee network.",
3124
+ attribute: "sensorLifeState",
3125
+ description: "It indicates if the sensor expired",
2045
3126
  access: "STATE_GET",
2046
3127
  }),
2047
- m.numeric({
2048
- name: "reboot_count",
2049
- unit: "",
2050
- valueMin: 0,
2051
- valueMax: 60000,
3128
+ m.enumLookup({
3129
+ name: "alarm_state",
3130
+ lookup: { normal: 0, prealarm: 1, warning_alarm: 2, critical_alarm: 3 },
2052
3131
  cluster: "heimanClusterSpecial",
2053
- attribute: { ID: 0x0019, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
2054
- description: "for diagnostic purpose, how many times has the product rebooted.",
3132
+ attribute: "sensorPrealarmState",
3133
+ description: "It indicates the level of alarm states",
2055
3134
  access: "STATE_GET",
2056
3135
  }),
3136
+ heimanExtend.reportedPackages(),
3137
+ heimanExtend.rejoinedCount(),
3138
+ heimanExtend.rebootedCount(),
2057
3139
  ],
2058
3140
  ota: true,
2059
3141
  },
@@ -2088,5 +3170,137 @@ exports.definitions = [
2088
3170
  ],
2089
3171
  ota: true,
2090
3172
  },
3173
+ {
3174
+ zigbeeModel: ["M1-PE"],
3175
+ model: "M1-PE",
3176
+ vendor: "Heiman",
3177
+ description: "Smart occupancy sensor",
3178
+ configure: async (device, cordinatorEndpoint) => {
3179
+ const endpoint = device.getEndpoint(1);
3180
+ await reporting.bind(endpoint, cordinatorEndpoint, [
3181
+ "genPowerCfg",
3182
+ "msIlluminanceMeasurement",
3183
+ "msOccupancySensing",
3184
+ "heimanClusterSpecial",
3185
+ ]);
3186
+ await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
3187
+ await endpoint.read("msIlluminanceMeasurement", ["measuredValue"]);
3188
+ await endpoint.read("msOccupancySensing", ["occupancy", "pirOToUDelay"]);
3189
+ await endpoint.read("heimanClusterSpecial", [
3190
+ "sensorFaultState",
3191
+ "sensorSensitivityLevel",
3192
+ "occupanySensorWorkMode",
3193
+ "occupiedToOccupiedDuration",
3194
+ "radarLearningState",
3195
+ "radarDetectionTargetRange",
3196
+ "occupanyControlOnOffIlluminanceThreshold",
3197
+ "radarDetectionMinRange",
3198
+ "radarDetectionMaxRange",
3199
+ "indicatorLightLevelControlOf1",
3200
+ "rebootedCount",
3201
+ "rejoinedCount",
3202
+ "reportedPackages",
3203
+ ], {
3204
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.HEIMAN_TECHNOLOGY_CO_LTD,
3205
+ });
3206
+ },
3207
+ extend: [
3208
+ m.battery(),
3209
+ m.occupancy(),
3210
+ heimanExtend.heimanClusterSpecial(),
3211
+ m.illuminance(),
3212
+ m.numeric({
3213
+ name: "target_distance",
3214
+ unit: "meter(s)",
3215
+ valueMin: 1,
3216
+ valueMax: 10,
3217
+ valueStep: 0.01,
3218
+ scale: 100,
3219
+ cluster: "heimanClusterSpecial",
3220
+ attribute: "radarDetectionTargetRange",
3221
+ description: "The distance of target",
3222
+ access: "STATE_GET",
3223
+ }),
3224
+ heimanExtend.heimanClusterDeviceFaultState(),
3225
+ m.identify(),
3226
+ m.numeric({
3227
+ name: "unoccupied_delay",
3228
+ unit: "s",
3229
+ valueMin: 5,
3230
+ valueMax: 3600,
3231
+ cluster: "msOccupancySensing",
3232
+ attribute: "pirOToUDelay",
3233
+ description: "occupied to unoccupied delay",
3234
+ access: "ALL",
3235
+ }),
3236
+ heimanExtend.heimanClusterRadarDetectionRange(),
3237
+ m.numeric({
3238
+ name: "repeated_reporting_duration",
3239
+ unit: "minute(s)",
3240
+ valueMin: 0,
3241
+ valueMax: 65535,
3242
+ cluster: "heimanClusterSpecial",
3243
+ attribute: "occupiedToOccupiedDuration",
3244
+ description: "occupied repeated reporting duartion, 65535 indicates forever",
3245
+ access: "ALL",
3246
+ }),
3247
+ m.numeric({
3248
+ name: "illuminance_threshold",
3249
+ unit: "lx",
3250
+ scale: 1,
3251
+ valueMin: 0,
3252
+ valueMax: 1000,
3253
+ cluster: "heimanClusterSpecial",
3254
+ attribute: "illuminanceThreshold",
3255
+ description: "when the illuminance exceeds the threshold, it activates local linkages.",
3256
+ access: "ALL",
3257
+ }),
3258
+ m.enumLookup({
3259
+ name: "pir_sensitivity_level",
3260
+ lookup: { low: 0, medium: 1, high: 2 },
3261
+ cluster: "heimanClusterSpecial",
3262
+ attribute: "sensorSensitivityLevel",
3263
+ description: "The sensitivity of PIR Sensor",
3264
+ access: "ALL",
3265
+ }),
3266
+ m.enumLookup({
3267
+ name: "work_mode",
3268
+ lookup: { pir: 1, radar: 2, pir_and_radar: 3 },
3269
+ cluster: "heimanClusterSpecial",
3270
+ attribute: "occupanySensorWorkMode",
3271
+ description: "occupany sensor work mode",
3272
+ access: "ALL",
3273
+ }),
3274
+ m.enumLookup({
3275
+ name: "learning_control",
3276
+ lookup: { start: 65534, reset: 65535 },
3277
+ cluster: "heimanClusterSpecial",
3278
+ attribute: "radarLearningControl",
3279
+ description: "Radar learning mode, please wake up the device first.",
3280
+ access: "STATE_SET",
3281
+ }),
3282
+ m.enumLookup({
3283
+ name: "learning_state",
3284
+ lookup: { not: 0, learning: 1, completed: 2, failed: 3 },
3285
+ cluster: "heimanClusterSpecial",
3286
+ attribute: "radarLearningState",
3287
+ description: "radar learning state",
3288
+ access: "STATE_GET",
3289
+ }),
3290
+ m.binary({
3291
+ name: "work_indicator",
3292
+ valueOn: ["On", 1],
3293
+ valueOff: ["Off", 0],
3294
+ cluster: "heimanClusterSpecial",
3295
+ attribute: "indicatorLightLevelControlOf1",
3296
+ description: "Enable/disable the indicator on product",
3297
+ access: "ALL",
3298
+ }),
3299
+ heimanExtend.reportedPackages(),
3300
+ heimanExtend.rejoinedCount(),
3301
+ heimanExtend.rebootedCount(),
3302
+ ],
3303
+ ota: true,
3304
+ },
2091
3305
  ];
2092
3306
  //# sourceMappingURL=heiman.js.map