@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
@@ -56,44 +56,44 @@ const fzLocal = {
56
56
  const result = {};
57
57
  const data = msg.data;
58
58
  const isPro = model.model === "4512776/4512777";
59
- if (data[0x1000] !== undefined) {
59
+ if (data.operateDisplayBrightness !== undefined) {
60
60
  // OperateDisplayBrightness
61
61
  if (isPro) {
62
- result.display_brightness = data[0x1000];
62
+ result.display_brightness = data.operateDisplayBrightness;
63
63
  }
64
64
  else {
65
- result.display_brightnesss = data[0x1000];
65
+ result.display_brightnesss = data.operateDisplayBrightness;
66
66
  }
67
67
  }
68
- if (data[0x1001] !== undefined) {
68
+ if (data.displayAutoOff !== undefined) {
69
69
  // DisplayAutoOffActivation
70
70
  if (isPro) {
71
- result.display_auto_off = data[0x1001] === 1;
71
+ result.display_auto_off = data.displayAutoOff === 1;
72
72
  }
73
73
  else {
74
74
  const lookup = { 0: "deactivated", 1: "activated" };
75
- result.display_auto_off = utils.getFromLookup(data[0x1001], lookup);
75
+ result.display_auto_off = utils.getFromLookup(data.displayAutoOff, lookup);
76
76
  }
77
77
  }
78
- if (data[0x1004] !== undefined) {
78
+ if (data.powerUpStatus !== undefined) {
79
79
  // PowerUpStatus (non-PRO only)
80
80
  const lookup = { 0: "manual", 1: "last_state" };
81
- result.power_up_status = utils.getFromLookup(data[0x1004], lookup);
81
+ result.power_up_status = utils.getFromLookup(data.powerUpStatus, lookup);
82
82
  }
83
- if (data[0x1009] !== undefined) {
83
+ if (data.windowOpenCheck2 !== undefined) {
84
84
  // WindowOpenCheck
85
85
  if (isPro) {
86
86
  // PRO: 0=enable, 1=disable
87
- result.window_open_detection = data[0x1009] === 0;
87
+ result.window_open_detection = data.windowOpenCheck2 === 0;
88
88
  }
89
89
  else {
90
90
  // Non-PRO: According to real life testing 0: disable, 1: enable
91
- result.window_detection = data[0x1009] === 1;
91
+ result.window_detection = data.windowOpenCheck2 === 1;
92
92
  }
93
93
  }
94
- if (data[0x100a] !== undefined) {
94
+ if (data.hysterersis !== undefined) {
95
95
  // Hysteresis
96
- const value = utils.precisionRound(data[0x100a], 2) / 10;
96
+ const value = utils.precisionRound(data.hysterersis, 2) / 10;
97
97
  if (isPro) {
98
98
  result.hysteresis = value;
99
99
  }
@@ -101,27 +101,27 @@ const fzLocal = {
101
101
  result.hysterersis = value;
102
102
  }
103
103
  }
104
- if (data[0x100b] !== undefined) {
104
+ if (data.windowOpen !== undefined) {
105
105
  // WindowOpen, 0: Window is not opened, 1: Window is opened
106
- result.window_open = data[0x100b] === 1;
106
+ result.window_open = data.windowOpen === 1;
107
107
  }
108
108
  // PRO-specific attributes
109
- if (data[0x2009] !== undefined) {
109
+ if (data.controlMethod !== undefined) {
110
110
  // System control method: 0=PID, 1=Hysteresis
111
- result.control_method = data[0x2009] === 0 ? "pid" : "hysteresis";
111
+ result.control_method = data.controlMethod === 0 ? "pid" : "hysteresis";
112
112
  }
113
- if (data[0x100c] !== undefined) {
113
+ if (data.adaptiveFunction !== undefined) {
114
114
  // Adaptive function AS: 0=Enable, 1=Disable
115
- result.adaptive_function = data[0x100c] === 0;
115
+ result.adaptive_function = data.adaptiveFunction === 0;
116
116
  }
117
- if (data[0x2006] !== undefined) {
118
- result.pid_kp = data[0x2006] / 1000.0;
117
+ if (data.pidKp !== undefined) {
118
+ result.pid_kp = data.pidKp / 1000.0;
119
119
  }
120
- if (data[0x2007] !== undefined) {
121
- result.pid_kd = data[0x2007] / 1000.0;
120
+ if (data.pidKd !== undefined) {
121
+ result.pid_kd = data.pidKd / 1000.0;
122
122
  }
123
- if (data[0x2008] !== undefined) {
124
- result.pid_ki = data[0x2008] / 1000.0;
123
+ if (data.pidKi !== undefined) {
124
+ result.pid_ki = data.pidKi / 1000.0;
125
125
  }
126
126
  return result;
127
127
  },
@@ -142,6 +142,41 @@ const fzLocal = {
142
142
  return fz.thermostat.convert(model, msg, publish, options, meta); // as KeyValue;
143
143
  },
144
144
  },
145
+ namronSimplifyRemote: {
146
+ cluster: "namronPrivateE004",
147
+ type: ["raw"],
148
+ convert(model, msg, publish, _options, meta) {
149
+ const bytes = parseNamronBytes(msg);
150
+ if (bytes.length === 0)
151
+ return;
152
+ const btn = bytes.at(-2);
153
+ const raw = bytes.at(-1);
154
+ if (btn == null || raw == null)
155
+ return;
156
+ const kind = NAMRON_SIMPLIFY_ACTIONS[raw];
157
+ const base = `button_${simplify_col(btn)}_${simplify_sub(btn)}_`;
158
+ // Firmware sometimes sends empty action after hold: synthesize release
159
+ if (!kind) {
160
+ const lastHold = store.getValue(meta.device, HOLD_KEY_SIMPLIFY);
161
+ if (lastHold?.endsWith("_hold")) {
162
+ publish({ action: lastHold.replace("_hold", "_release") });
163
+ store.putValue(meta.device, HOLD_KEY_SIMPLIFY, null);
164
+ }
165
+ return;
166
+ }
167
+ if (kind === "hold") {
168
+ store.putValue(meta.device, HOLD_KEY_SIMPLIFY, `${base}hold`);
169
+ publish({ action: `${base}hold` });
170
+ return;
171
+ }
172
+ if (kind === "release") {
173
+ publish({ action: `${base}press` });
174
+ publish({ action: `${base}release` });
175
+ return;
176
+ }
177
+ publish({ action: `${base}press` });
178
+ },
179
+ },
145
180
  };
146
181
  // Namron Simplify 3-button remote (4512793 / 4512794)
147
182
  // -----------------------------------------------------------
@@ -154,7 +189,7 @@ const HOLD_KEY_SIMPLIFY = "namron_simplify_lastHold";
154
189
  const simplify_col = (n) => Math.floor((n - 1) / 2) + 1;
155
190
  const simplify_sub = (n) => (n % 2 === 1 ? "up" : "down");
156
191
  // Helper to safely parse bytes from msg without any/unknown
157
- function parseZosungIRBytes(msg) {
192
+ function parseNamronBytes(msg) {
158
193
  const m = msg;
159
194
  if (m.type === "raw" &&
160
195
  m.data &&
@@ -175,41 +210,6 @@ function parseZosungIRBytes(msg) {
175
210
  }
176
211
  return [];
177
212
  }
178
- const fzNamronSimplifyRemote = {
179
- cluster: "zosungIRControl",
180
- type: ["raw"],
181
- convert(model, msg, publish, _options, meta) {
182
- const bytes = parseZosungIRBytes(msg);
183
- if (bytes.length === 0)
184
- return;
185
- const btn = bytes.at(-2);
186
- const raw = bytes.at(-1);
187
- if (btn == null || raw == null)
188
- return;
189
- const kind = NAMRON_SIMPLIFY_ACTIONS[raw];
190
- const base = `button_${simplify_col(btn)}_${simplify_sub(btn)}_`;
191
- // Firmware sometimes sends empty action after hold: synthesize release
192
- if (!kind) {
193
- const lastHold = store.getValue(meta.device, HOLD_KEY_SIMPLIFY);
194
- if (lastHold?.endsWith("_hold")) {
195
- publish({ action: lastHold.replace("_hold", "_release") });
196
- store.putValue(meta.device, HOLD_KEY_SIMPLIFY, null);
197
- }
198
- return;
199
- }
200
- if (kind === "hold") {
201
- store.putValue(meta.device, HOLD_KEY_SIMPLIFY, `${base}hold`);
202
- publish({ action: `${base}hold` });
203
- return;
204
- }
205
- if (kind === "release") {
206
- publish({ action: `${base}press` });
207
- publish({ action: `${base}release` });
208
- return;
209
- }
210
- publish({ action: `${base}press` });
211
- },
212
- };
213
213
  // END SimplifyBryter
214
214
  const tzLocal = {
215
215
  namron_panelheater: {
@@ -241,22 +241,22 @@ const tzLocal = {
241
241
  convertGet: async (entity, key, meta) => {
242
242
  switch (key) {
243
243
  case "display_brightnesss":
244
- await entity.read("hvacThermostat", [0x1000], sunricherManufacturer);
244
+ await entity.read("hvacThermostat", ["operateDisplayBrightness"], sunricherManufacturer);
245
245
  break;
246
246
  case "display_auto_off":
247
- await entity.read("hvacThermostat", [0x1001], sunricherManufacturer);
247
+ await entity.read("hvacThermostat", ["displayAutoOff"], sunricherManufacturer);
248
248
  break;
249
249
  case "power_up_status":
250
- await entity.read("hvacThermostat", [0x1004], sunricherManufacturer);
250
+ await entity.read("hvacThermostat", ["powerUpStatus"], sunricherManufacturer);
251
251
  break;
252
252
  case "window_detection":
253
- await entity.read("hvacThermostat", [0x1009], sunricherManufacturer);
253
+ await entity.read("hvacThermostat", ["windowOpenCheck2"], sunricherManufacturer);
254
254
  break;
255
255
  case "hysterersis":
256
- await entity.read("hvacThermostat", [0x100a], sunricherManufacturer);
256
+ await entity.read("hvacThermostat", ["hysterersis"], sunricherManufacturer);
257
257
  break;
258
258
  case "window_open":
259
- await entity.read("hvacThermostat", [0x100b], sunricherManufacturer);
259
+ await entity.read("hvacThermostat", ["windowOpen"], sunricherManufacturer);
260
260
  break;
261
261
  default: // Unknown key
262
262
  throw new Error(`Unhandled key toZigbee.namron_panelheater.convertGet ${key}`);
@@ -276,7 +276,7 @@ const tzLocal = {
276
276
  return { state: { hysteresis: num } };
277
277
  },
278
278
  convertGet: async (entity, key, meta) => {
279
- await entity.read("hvacThermostat", [0x100a], sunricherManufacturer);
279
+ await entity.read("hvacThermostat", ["hysterersis"], sunricherManufacturer);
280
280
  },
281
281
  },
282
282
  namron_panelheater_pro_window_open_detection: {
@@ -289,7 +289,7 @@ const tzLocal = {
289
289
  return { state: { window_open_detection: enable } };
290
290
  },
291
291
  convertGet: async (entity, key, meta) => {
292
- await entity.read("hvacThermostat", [0x1009, 0x100b], sunricherManufacturer);
292
+ await entity.read("hvacThermostat", ["windowOpenCheck2", "windowOpen"], sunricherManufacturer);
293
293
  },
294
294
  },
295
295
  namron_panelheater_pro_display_auto_off: {
@@ -301,7 +301,7 @@ const tzLocal = {
301
301
  return { state: { display_auto_off: enable } };
302
302
  },
303
303
  convertGet: async (entity, key, meta) => {
304
- await entity.read("hvacThermostat", [0x1001], sunricherManufacturer);
304
+ await entity.read("hvacThermostat", ["displayAutoOff"], sunricherManufacturer);
305
305
  },
306
306
  },
307
307
  namron_panelheater_pro_control_method: {
@@ -319,7 +319,7 @@ const tzLocal = {
319
319
  return { state: { control_method: raw === 0 ? "pid" : "hysteresis" } };
320
320
  },
321
321
  convertGet: async (entity, key, meta) => {
322
- await entity.read("hvacThermostat", [0x2009], sunricherManufacturer);
322
+ await entity.read("hvacThermostat", ["controlMethod"], sunricherManufacturer);
323
323
  },
324
324
  },
325
325
  namron_panelheater_pro_adaptive_function: {
@@ -332,7 +332,7 @@ const tzLocal = {
332
332
  return { state: { adaptive_function: enable } };
333
333
  },
334
334
  convertGet: async (entity, key, meta) => {
335
- await entity.read("hvacThermostat", [0x100c], sunricherManufacturer);
335
+ await entity.read("hvacThermostat", ["adaptiveFunction"], sunricherManufacturer);
336
336
  },
337
337
  },
338
338
  namron_panelheater_pro_pid_kp: {
@@ -344,7 +344,7 @@ const tzLocal = {
344
344
  return { state: { pid_kp: num } };
345
345
  },
346
346
  convertGet: async (entity, key, meta) => {
347
- await entity.read("hvacThermostat", [0x2006], sunricherManufacturer);
347
+ await entity.read("hvacThermostat", ["pidKp"], sunricherManufacturer);
348
348
  },
349
349
  },
350
350
  namron_panelheater_pro_pid_ki: {
@@ -356,7 +356,7 @@ const tzLocal = {
356
356
  return { state: { pid_ki: num } };
357
357
  },
358
358
  convertGet: async (entity, key, meta) => {
359
- await entity.read("hvacThermostat", [0x2008], sunricherManufacturer);
359
+ await entity.read("hvacThermostat", ["pidKi"], sunricherManufacturer);
360
360
  },
361
361
  },
362
362
  namron_panelheater_pro_pid_kd: {
@@ -368,7 +368,7 @@ const tzLocal = {
368
368
  return { state: { pid_kd: num } };
369
369
  },
370
370
  convertGet: async (entity, key, meta) => {
371
- await entity.read("hvacThermostat", [0x2007], sunricherManufacturer);
371
+ await entity.read("hvacThermostat", ["pidKd"], sunricherManufacturer);
372
372
  },
373
373
  },
374
374
  namron_panelheater_pro_state: {
@@ -877,7 +877,13 @@ exports.definitions = [
877
877
  model: "4512737/4512738",
878
878
  vendor: "Namron",
879
879
  description: "Touch thermostat",
880
- fromZigbee: [fz.thermostat, fz.namron_thermostat, fz.metering, fz.electrical_measurement, fz.namron_hvac_user_interface],
880
+ fromZigbee: [
881
+ fz.thermostat,
882
+ namron.fromZigbee.namron_thermostat,
883
+ fz.metering,
884
+ fz.electrical_measurement,
885
+ namron.fromZigbee.namron_hvac_user_interface,
886
+ ],
881
887
  toZigbee: [
882
888
  tz.thermostat_occupied_heating_setpoint,
883
889
  tz.thermostat_unoccupied_heating_setpoint,
@@ -888,8 +894,8 @@ exports.definitions = [
888
894
  tz.thermostat_system_mode,
889
895
  tz.thermostat_control_sequence_of_operation,
890
896
  tz.thermostat_running_state,
891
- tz.namron_thermostat_child_lock,
892
- tz.namron_thermostat,
897
+ namron.toZigbee.namron_thermostat_child_lock,
898
+ namron.toZigbee.namron_thermostat,
893
899
  ],
894
900
  exposes: [
895
901
  e.local_temperature(),
@@ -953,7 +959,7 @@ exports.definitions = [
953
959
  "0 means this function is disabled, default value is 27."),
954
960
  ],
955
961
  // Device does not asks for the time with binding, therefore we write the time every 24 hours
956
- extend: [m.writeTimeDaily({ endpointId: 1 })],
962
+ extend: [m.writeTimeDaily({ endpointId: 1 }), namron.namronExtend.addNamronHvacThermostat2Cluster()],
957
963
  configure: async (device, coordinatorEndpoint) => {
958
964
  const endpoint = device.getEndpoint(1);
959
965
  const binds = [
@@ -984,7 +990,7 @@ exports.definitions = [
984
990
  // OperateDisplayLcdBrightnesss
985
991
  await endpoint.configureReporting("hvacThermostat", [
986
992
  {
987
- attribute: { ID: 0x1000, type: 0x30 },
993
+ attribute: "lcdBrightness",
988
994
  minimumReportInterval: 0,
989
995
  maximumReportInterval: constants.repInterval.HOUR,
990
996
  reportableChange: null,
@@ -993,7 +999,7 @@ exports.definitions = [
993
999
  // ButtonVibrationLevel
994
1000
  await endpoint.configureReporting("hvacThermostat", [
995
1001
  {
996
- attribute: { ID: 0x1001, type: 0x30 },
1002
+ attribute: "buttonVibrationLevel",
997
1003
  minimumReportInterval: 0,
998
1004
  maximumReportInterval: constants.repInterval.HOUR,
999
1005
  reportableChange: null,
@@ -1002,7 +1008,7 @@ exports.definitions = [
1002
1008
  // FloorSensorType
1003
1009
  await endpoint.configureReporting("hvacThermostat", [
1004
1010
  {
1005
- attribute: { ID: 0x1002, type: 0x30 },
1011
+ attribute: "floorSensorType",
1006
1012
  minimumReportInterval: 0,
1007
1013
  maximumReportInterval: constants.repInterval.HOUR,
1008
1014
  reportableChange: null,
@@ -1011,7 +1017,7 @@ exports.definitions = [
1011
1017
  // ControlType
1012
1018
  await endpoint.configureReporting("hvacThermostat", [
1013
1019
  {
1014
- attribute: { ID: 0x1003, type: 0x30 },
1020
+ attribute: "controlType",
1015
1021
  minimumReportInterval: 0,
1016
1022
  maximumReportInterval: constants.repInterval.HOUR,
1017
1023
  reportableChange: null,
@@ -1020,7 +1026,7 @@ exports.definitions = [
1020
1026
  // PowerUpStatus
1021
1027
  await endpoint.configureReporting("hvacThermostat", [
1022
1028
  {
1023
- attribute: { ID: 0x1004, type: 0x30 },
1029
+ attribute: "powerUpStatus",
1024
1030
  minimumReportInterval: 0,
1025
1031
  maximumReportInterval: constants.repInterval.HOUR,
1026
1032
  reportableChange: null,
@@ -1029,7 +1035,7 @@ exports.definitions = [
1029
1035
  // FloorSensorCalibration
1030
1036
  await endpoint.configureReporting("hvacThermostat", [
1031
1037
  {
1032
- attribute: { ID: 0x1005, type: 0x28 },
1038
+ attribute: "floorSensorCalibration",
1033
1039
  minimumReportInterval: 0,
1034
1040
  maximumReportInterval: constants.repInterval.HOUR,
1035
1041
  reportableChange: 0,
@@ -1038,7 +1044,7 @@ exports.definitions = [
1038
1044
  // DryTime
1039
1045
  await endpoint.configureReporting("hvacThermostat", [
1040
1046
  {
1041
- attribute: { ID: 0x1006, type: 0x20 },
1047
+ attribute: "dryTime",
1042
1048
  minimumReportInterval: 0,
1043
1049
  maximumReportInterval: constants.repInterval.HOUR,
1044
1050
  reportableChange: 0,
@@ -1047,7 +1053,7 @@ exports.definitions = [
1047
1053
  // ModeAfterDry
1048
1054
  await endpoint.configureReporting("hvacThermostat", [
1049
1055
  {
1050
- attribute: { ID: 0x1007, type: 0x30 },
1056
+ attribute: "modeAfterDry",
1051
1057
  minimumReportInterval: 0,
1052
1058
  maximumReportInterval: constants.repInterval.HOUR,
1053
1059
  reportableChange: null,
@@ -1056,7 +1062,7 @@ exports.definitions = [
1056
1062
  // TemperatureDisplay
1057
1063
  await endpoint.configureReporting("hvacThermostat", [
1058
1064
  {
1059
- attribute: { ID: 0x1008, type: 0x30 },
1065
+ attribute: "temperatureDisplay",
1060
1066
  minimumReportInterval: 0,
1061
1067
  maximumReportInterval: constants.repInterval.HOUR,
1062
1068
  reportableChange: null,
@@ -1065,7 +1071,7 @@ exports.definitions = [
1065
1071
  // WindowOpenCheck
1066
1072
  await endpoint.configureReporting("hvacThermostat", [
1067
1073
  {
1068
- attribute: { ID: 0x1009, type: 0x20 },
1074
+ attribute: "windowOpenCheck2",
1069
1075
  minimumReportInterval: 0,
1070
1076
  maximumReportInterval: constants.repInterval.HOUR,
1071
1077
  reportableChange: 0,
@@ -1074,7 +1080,7 @@ exports.definitions = [
1074
1080
  // Hysterersis
1075
1081
  await endpoint.configureReporting("hvacThermostat", [
1076
1082
  {
1077
- attribute: { ID: 0x100a, type: 0x20 },
1083
+ attribute: "hysterersis",
1078
1084
  minimumReportInterval: 0,
1079
1085
  maximumReportInterval: constants.repInterval.HOUR,
1080
1086
  reportableChange: 0,
@@ -1083,7 +1089,7 @@ exports.definitions = [
1083
1089
  // DisplayAutoOffEnable
1084
1090
  await endpoint.configureReporting("hvacThermostat", [
1085
1091
  {
1086
- attribute: { ID: 0x100b, type: 0x30 },
1092
+ attribute: "displayAutoOffEnable",
1087
1093
  minimumReportInterval: 0,
1088
1094
  maximumReportInterval: constants.repInterval.HOUR,
1089
1095
  reportableChange: null,
@@ -1092,7 +1098,7 @@ exports.definitions = [
1092
1098
  // AlarmAirTempOverValue
1093
1099
  await endpoint.configureReporting("hvacThermostat", [
1094
1100
  {
1095
- attribute: { ID: 0x2001, type: 0x20 },
1101
+ attribute: "alarmAirTempOverValue",
1096
1102
  minimumReportInterval: 0,
1097
1103
  maximumReportInterval: constants.repInterval.HOUR,
1098
1104
  reportableChange: 0,
@@ -1101,7 +1107,7 @@ exports.definitions = [
1101
1107
  // Away Mode Set
1102
1108
  await endpoint.configureReporting("hvacThermostat", [
1103
1109
  {
1104
- attribute: { ID: 0x2002, type: 0x30 },
1110
+ attribute: "awayModeSet",
1105
1111
  minimumReportInterval: 0,
1106
1112
  maximumReportInterval: constants.repInterval.HOUR,
1107
1113
  reportableChange: null,
@@ -1109,10 +1115,10 @@ exports.definitions = [
1109
1115
  ], sunricherManufacturer);
1110
1116
  // Trigger initial read
1111
1117
  await endpoint.read("hvacThermostat", ["systemMode", "runningState", "occupiedHeatingSetpoint"]);
1112
- await endpoint.read("hvacThermostat", [0x1000, 0x1001, 0x1002, 0x1003], sunricherManufacturer);
1113
- await endpoint.read("hvacThermostat", [0x1004, 0x1005, 0x1006, 0x1007], sunricherManufacturer);
1114
- await endpoint.read("hvacThermostat", [0x1008, 0x1009, 0x100a, 0x100b], sunricherManufacturer);
1115
- await endpoint.read("hvacThermostat", [0x2001, 0x2002], sunricherManufacturer);
1118
+ await endpoint.read("hvacThermostat", ["lcdBrightness", "buttonVibrationLevel", "floorSensorType", "controlType"], sunricherManufacturer);
1119
+ await endpoint.read("hvacThermostat", ["powerUpStatus", "floorSensorCalibration", "dryTime", "modeAfterDry"], sunricherManufacturer);
1120
+ await endpoint.read("hvacThermostat", ["temperatureDisplay", "windowOpenCheck2", "hysterersis", "displayAutoOffEnable"], sunricherManufacturer);
1121
+ await endpoint.read("hvacThermostat", ["alarmAirTempOverValue", "awayModeSet"], sunricherManufacturer);
1116
1122
  },
1117
1123
  ota: true,
1118
1124
  },
@@ -1148,8 +1154,9 @@ exports.definitions = [
1148
1154
  model: "540139X",
1149
1155
  vendor: "Namron",
1150
1156
  description: "Panel heater 400/600/800/1000 W",
1157
+ extend: [namron.namronExtend.addNamronHvacThermostatCluster()],
1151
1158
  ota: true,
1152
- fromZigbee: [fz.thermostat, fz.metering, fz.electrical_measurement, fzLocal.namron_panelheater, fz.namron_hvac_user_interface],
1159
+ fromZigbee: [fz.thermostat, fz.metering, fz.electrical_measurement, fzLocal.namron_panelheater, namron.fromZigbee.namron_hvac_user_interface],
1153
1160
  toZigbee: [
1154
1161
  tz.thermostat_occupied_heating_setpoint,
1155
1162
  tz.thermostat_local_temperature_calibration,
@@ -1157,7 +1164,7 @@ exports.definitions = [
1157
1164
  tz.thermostat_running_state,
1158
1165
  tz.thermostat_local_temperature,
1159
1166
  tzLocal.namron_panelheater,
1160
- tz.namron_thermostat_child_lock,
1167
+ namron.toZigbee.namron_thermostat_child_lock,
1161
1168
  ],
1162
1169
  exposes: [
1163
1170
  e.power(),
@@ -1225,7 +1232,7 @@ exports.definitions = [
1225
1232
  // display_brightnesss
1226
1233
  await endpoint.configureReporting("hvacThermostat", [
1227
1234
  {
1228
- attribute: { ID: 0x1000, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1235
+ attribute: "operateDisplayBrightness",
1229
1236
  minimumReportInterval: 0,
1230
1237
  maximumReportInterval: constants.repInterval.HOUR,
1231
1238
  reportableChange: null,
@@ -1234,7 +1241,7 @@ exports.definitions = [
1234
1241
  // display_auto_off
1235
1242
  await endpoint.configureReporting("hvacThermostat", [
1236
1243
  {
1237
- attribute: { ID: 0x1001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1244
+ attribute: "displayAutoOff",
1238
1245
  minimumReportInterval: 0,
1239
1246
  maximumReportInterval: constants.repInterval.HOUR,
1240
1247
  reportableChange: null,
@@ -1243,7 +1250,7 @@ exports.definitions = [
1243
1250
  // power_up_status
1244
1251
  await endpoint.configureReporting("hvacThermostat", [
1245
1252
  {
1246
- attribute: { ID: 0x1004, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1253
+ attribute: "powerUpStatus",
1247
1254
  minimumReportInterval: 0,
1248
1255
  maximumReportInterval: constants.repInterval.HOUR,
1249
1256
  reportableChange: null,
@@ -1252,7 +1259,7 @@ exports.definitions = [
1252
1259
  // window_detection
1253
1260
  await endpoint.configureReporting("hvacThermostat", [
1254
1261
  {
1255
- attribute: { ID: 0x1009, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1262
+ attribute: "windowOpenCheck2",
1256
1263
  minimumReportInterval: 0,
1257
1264
  maximumReportInterval: constants.repInterval.HOUR,
1258
1265
  reportableChange: null,
@@ -1261,7 +1268,7 @@ exports.definitions = [
1261
1268
  // hysterersis
1262
1269
  await endpoint.configureReporting("hvacThermostat", [
1263
1270
  {
1264
- attribute: { ID: 0x100a, type: 0x20 },
1271
+ attribute: "hysterersis",
1265
1272
  minimumReportInterval: 0,
1266
1273
  maximumReportInterval: constants.repInterval.HOUR,
1267
1274
  reportableChange: null,
@@ -1270,7 +1277,7 @@ exports.definitions = [
1270
1277
  // window_open
1271
1278
  await endpoint.configureReporting("hvacThermostat", [
1272
1279
  {
1273
- attribute: { ID: 0x100b, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1280
+ attribute: "windowOpen",
1274
1281
  minimumReportInterval: 0,
1275
1282
  maximumReportInterval: constants.repInterval.HOUR,
1276
1283
  reportableChange: null,
@@ -1278,7 +1285,7 @@ exports.definitions = [
1278
1285
  ], sunricherManufacturer);
1279
1286
  await endpoint.read("hvacThermostat", ["systemMode", "runningState", "occupiedHeatingSetpoint"]);
1280
1287
  await endpoint.read("hvacUserInterfaceCfg", ["keypadLockout"]);
1281
- await endpoint.read("hvacThermostat", [0x1000, 0x1001, 0x1004, 0x1009, 0x100a, 0x100b], sunricherManufacturer);
1288
+ await endpoint.read("hvacThermostat", ["operateDisplayBrightness", "displayAutoOff", "powerUpStatus", "windowOpenCheck2", "hysterersis", "windowOpen"], sunricherManufacturer);
1282
1289
  await reporting.bind(endpoint, coordinatorEndpoint, binds);
1283
1290
  },
1284
1291
  },
@@ -1287,13 +1294,16 @@ exports.definitions = [
1287
1294
  model: "4512776/4512777",
1288
1295
  vendor: "Namron",
1289
1296
  description: "Zigbee thermostat for panel heater PRO (white 4512776 / black 4512777)",
1290
- extend: [m.electricityMeter({ cluster: "metering", energy: { divisor: 10 } })],
1291
- fromZigbee: [fz.thermostat, fzLocal.namron_panelheater, fz.namron_hvac_user_interface],
1297
+ extend: [
1298
+ namron.namronExtend.addNamronHvacThermostatCluster(),
1299
+ m.electricityMeter({ cluster: "both", energy: { divisor: 10 }, power: false, voltage: false, current: false, configureReporting: false }),
1300
+ ],
1301
+ fromZigbee: [fz.thermostat, fzLocal.namron_panelheater, namron.fromZigbee.namron_hvac_user_interface, fz.electrical_measurement],
1292
1302
  toZigbee: [
1293
1303
  tz.thermostat_occupied_heating_setpoint,
1294
1304
  tz.thermostat_local_temperature_calibration,
1295
1305
  tz.thermostat_system_mode,
1296
- tz.namron_thermostat_child_lock,
1306
+ namron.toZigbee.namron_thermostat_child_lock,
1297
1307
  tzLocal.namron_panelheater_pro_state,
1298
1308
  tzLocal.namron_panelheater_pro_frost_mode,
1299
1309
  tzLocal.namron_panelheater_pro_hysteresis,
@@ -1339,16 +1349,38 @@ exports.definitions = [
1339
1349
  .withValueStep(1)
1340
1350
  .withDescription("Display brightness (read-only, set on the heater)"),
1341
1351
  e.binary("display_auto_off", ea.ALL, true, false).withDescription("Display auto off after 30s without interaction"),
1352
+ e.power(),
1342
1353
  ],
1343
1354
  configure: async (device, coordinatorEndpoint) => {
1344
1355
  const endpoint = device.getEndpoint(1);
1345
- await reporting.bind(endpoint, coordinatorEndpoint, ["genBasic", "genIdentify", "hvacThermostat", "hvacUserInterfaceCfg"]);
1356
+ // Save energy divisor manually since configureReporting is disabled
1357
+ endpoint.saveClusterAttributeKeyValue("seMetering", { divisor: 10, multiplier: 1 });
1358
+ endpoint.save();
1359
+ await reporting.bind(endpoint, coordinatorEndpoint, [
1360
+ "genBasic",
1361
+ "genIdentify",
1362
+ "hvacThermostat",
1363
+ "hvacUserInterfaceCfg",
1364
+ "seMetering",
1365
+ "haElectricalMeasurement",
1366
+ ]);
1346
1367
  await reporting.thermostatTemperature(endpoint, { min: 0, change: 50 });
1347
1368
  await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
1348
1369
  await endpoint.read("hvacThermostat", ["localTemp", "occupiedHeatingSetpoint", "systemMode"]);
1349
1370
  // Proprietary attrs including display, window, PID, control_method, adaptive
1350
1371
  try {
1351
- await endpoint.read("hvacThermostat", [0x1000, 0x1001, 0x1009, 0x100a, 0x100b, 0x100c, 0x2006, 0x2007, 0x2008, 0x2009], sunricherManufacturer);
1372
+ await endpoint.read("hvacThermostat", [
1373
+ "operateDisplayBrightness",
1374
+ "displayAutoOff",
1375
+ "windowOpenCheck2",
1376
+ "hysterersis",
1377
+ "windowOpen",
1378
+ "adaptiveFunction",
1379
+ "pidKp",
1380
+ "pidKd",
1381
+ "pidKi",
1382
+ "controlMethod",
1383
+ ], sunricherManufacturer);
1352
1384
  }
1353
1385
  catch {
1354
1386
  // Ignore - some attributes may not be supported
@@ -1359,6 +1391,18 @@ exports.definitions = [
1359
1391
  catch {
1360
1392
  // Ignore
1361
1393
  }
1394
+ try {
1395
+ await endpoint.read("haElectricalMeasurement", ["activePower"]);
1396
+ }
1397
+ catch {
1398
+ // Ignore
1399
+ }
1400
+ try {
1401
+ await endpoint.read("seMetering", ["currentSummDelivered"]);
1402
+ }
1403
+ catch {
1404
+ // Ignore
1405
+ }
1362
1406
  device.powerSource = "Mains (single phase)";
1363
1407
  device.save();
1364
1408
  },
@@ -1432,7 +1476,7 @@ exports.definitions = [
1432
1476
  vendor: "Namron",
1433
1477
  description: "Zigbee thermostat 16A",
1434
1478
  whiteLabel: [{ model: "4512759", fingerprint: [{ modelID: "4512759" }] }],
1435
- fromZigbee: [fzLocal.namron_thermostat2, fz.metering, fz.electrical_measurement, fz.namron_hvac_user_interface],
1479
+ fromZigbee: [fzLocal.namron_thermostat2, fz.metering, fz.electrical_measurement, namron.fromZigbee.namron_hvac_user_interface],
1436
1480
  toZigbee: [
1437
1481
  {
1438
1482
  // map running *mode* to *state*, as that's what used
@@ -1454,7 +1498,7 @@ exports.definitions = [
1454
1498
  tz.thermostat_control_sequence_of_operation,
1455
1499
  tz.thermostat_system_mode,
1456
1500
  tz.thermostat_running_mode,
1457
- tz.namron_thermostat_child_lock,
1501
+ namron.toZigbee.namron_thermostat_child_lock,
1458
1502
  ],
1459
1503
  extend: [
1460
1504
  m.onOff({ powerOnBehavior: false }),
@@ -1464,7 +1508,7 @@ exports.definitions = [
1464
1508
  valueOn: ["ON", 1],
1465
1509
  valueOff: ["OFF", 0],
1466
1510
  cluster: "hvacThermostat",
1467
- attribute: { ID: 0x8001, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
1511
+ attribute: "antiFrost",
1468
1512
  description: "Enable or Disable Away/Anti-freeze mode",
1469
1513
  }),
1470
1514
  m.binary({
@@ -1472,7 +1516,7 @@ exports.definitions = [
1472
1516
  valueOn: ["ON", 1],
1473
1517
  valueOff: ["OFF", 0],
1474
1518
  cluster: "hvacThermostat",
1475
- attribute: { ID: 0x8000, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
1519
+ attribute: "windowOpenCheck",
1476
1520
  description: "Enable or Disable open window detection",
1477
1521
  entityCategory: "config",
1478
1522
  }),
@@ -1481,7 +1525,7 @@ exports.definitions = [
1481
1525
  valueOn: ["ON", 1],
1482
1526
  valueOff: ["OFF", 0],
1483
1527
  cluster: "hvacThermostat",
1484
- attribute: { ID: 0x8002, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
1528
+ attribute: "windowState",
1485
1529
  description: "On if window is currently detected as open",
1486
1530
  }),
1487
1531
  m.numeric({
@@ -1491,7 +1535,7 @@ exports.definitions = [
1491
1535
  valueMax: 100,
1492
1536
  valueStep: 10,
1493
1537
  cluster: "hvacThermostat",
1494
- attribute: { ID: 0x8005, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
1538
+ attribute: "displayActiveBacklight",
1495
1539
  description: "Brightness of the display",
1496
1540
  entityCategory: "config",
1497
1541
  }),
@@ -1500,7 +1544,7 @@ exports.definitions = [
1500
1544
  valueOn: ["ON", 1],
1501
1545
  valueOff: ["OFF", 0],
1502
1546
  cluster: "hvacThermostat",
1503
- attribute: { ID: 0x8009, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
1547
+ attribute: "backlightOnoff",
1504
1548
  description: "Enable or Disable display light",
1505
1549
  entityCategory: "config",
1506
1550
  }),
@@ -1508,7 +1552,7 @@ exports.definitions = [
1508
1552
  name: "sensor_mode",
1509
1553
  lookup: { air: 0, floor: 1, both: 2, percent: 6 },
1510
1554
  cluster: "hvacThermostat",
1511
- attribute: { ID: 0x8004, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
1555
+ attribute: "sensorMode",
1512
1556
  description: "Select which sensor the thermostat uses to control the room",
1513
1557
  entityCategory: "config",
1514
1558
  }),
@@ -1539,7 +1583,12 @@ exports.definitions = [
1539
1583
  await reporting.thermostatKeypadLockMode(endpoint);
1540
1584
  // Trigger initial read
1541
1585
  await endpoint.read("hvacThermostat", ["systemMode", "runningMode", "occupiedHeatingSetpoint"]);
1542
- await endpoint.read("hvacThermostat", [0x8000, 0x8001, 0x8002, 0x8004]);
1586
+ await endpoint.read("hvacThermostat", [
1587
+ "windowOpenCheck",
1588
+ "antiFrost",
1589
+ "windowState",
1590
+ "sensorMode",
1591
+ ]);
1543
1592
  device.powerSource = "Mains (single phase)";
1544
1593
  device.save();
1545
1594
  },
@@ -1783,10 +1832,10 @@ exports.definitions = [
1783
1832
  },
1784
1833
  },
1785
1834
  {
1786
- zigbeeModel: ["4512782", "4512781"],
1787
- model: "4512782",
1835
+ zigbeeModel: ["4512782", "4512781", "4566700", "4566701"],
1836
+ model: "4512782 / 4512781 / 4566700 / 4566701",
1788
1837
  vendor: "Namron",
1789
- description: "Rotary dimmer with screen",
1838
+ description: "Namron Edge Dimmer",
1790
1839
  extend: [
1791
1840
  m.light({ effect: false, configureReporting: true, powerOnBehavior: false }),
1792
1841
  m.electricityMeter({ voltage: false, current: false, configureReporting: true }),
@@ -1810,7 +1859,7 @@ exports.definitions = [
1810
1859
  fz.thermostat,
1811
1860
  namron.fromZigbee.namron_edge_thermostat_holiday_temp,
1812
1861
  namron.fromZigbee.namron_edge_thermostat_vacation_date,
1813
- fz.namron_hvac_user_interface,
1862
+ namron.fromZigbee.namron_hvac_user_interface,
1814
1863
  fz.metering,
1815
1864
  fz.electrical_measurement,
1816
1865
  ],
@@ -1818,7 +1867,7 @@ exports.definitions = [
1818
1867
  tz.thermostat_local_temperature,
1819
1868
  tz.thermostat_occupied_heating_setpoint,
1820
1869
  tz.thermostat_unoccupied_heating_setpoint,
1821
- tz.namron_thermostat_child_lock,
1870
+ namron.toZigbee.namron_thermostat_child_lock,
1822
1871
  tz.thermostat_control_sequence_of_operation,
1823
1872
  tz.thermostat_programming_operation_mode,
1824
1873
  tz.thermostat_temperature_display_mode,
@@ -1847,11 +1896,26 @@ exports.definitions = [
1847
1896
  await reporting.thermostatKeypadLockMode(endpoint);
1848
1897
  // Initial read
1849
1898
  await endpoint.read("hvacThermostat", ["systemMode", "runningMode", "occupiedHeatingSetpoint"]);
1850
- await endpoint.read("hvacThermostat", [0x8000, 0x8001, 0x8002, 0x8003, 0x8004, 0x801e, 0x8006, 0x8005, 0x8006, 0x8029, 0x8022, 0x8023, 0x8024, 0x8013]);
1899
+ await endpoint.read("hvacThermostat", [
1900
+ "windowOpenCheck",
1901
+ "antiFrost",
1902
+ "windowState",
1903
+ "workDays",
1904
+ "sensorMode",
1905
+ "summerWinterSwitch",
1906
+ "fault",
1907
+ "displayActiveBacklight",
1908
+ "displayAutoOff2",
1909
+ "autoTime",
1910
+ "boostTimeSet",
1911
+ "boostTimeRemaining",
1912
+ "holidayTempSet",
1913
+ ]);
1851
1914
  device.powerSource = "Mains (single phase)";
1852
1915
  device.save();
1853
1916
  },
1854
1917
  extend: [
1918
+ namron.namronExtend.addNamronHvacThermostatCluster(),
1855
1919
  m.poll({
1856
1920
  key: "time",
1857
1921
  defaultIntervalSeconds: 60 * 60 * 24,
@@ -1954,8 +2018,8 @@ exports.definitions = [
1954
2018
  model: "4512793",
1955
2019
  vendor: "Namron",
1956
2020
  description: "Simplify 6-button remote with battery",
1957
- extend: [m.battery()],
1958
- fromZigbee: [fzNamronSimplifyRemote],
2021
+ extend: [m.battery(), namron.namronExtend.addCustomClusterNamronPrivateE004()],
2022
+ fromZigbee: [fzLocal.namronSimplifyRemote],
1959
2023
  toZigbee: [],
1960
2024
  exposes: [
1961
2025
  e.action([
@@ -2000,5 +2064,301 @@ exports.definitions = [
2000
2064
  exposes.numeric("start_brightness", ea.ALL).withValueMin(1).withValueMax(254).withDescription("Default brightness at power-on/startup"),
2001
2065
  ],
2002
2066
  },
2067
+ {
2068
+ zigbeeModel: ["4512785"],
2069
+ model: "4512785",
2070
+ vendor: "Namron",
2071
+ description: "Zigbee 30A relay with NTC temperature sensors and water leak detection",
2072
+ extend: [
2073
+ m.deviceAddCustomCluster("namronPrivate04E0", {
2074
+ ID: 0x04e0,
2075
+ name: "namronPrivate04E0",
2076
+ attributes: {
2077
+ ntc2Temperature: { ID: 0x0000, name: "ntc2Temperature", type: zigbee_herdsman_1.Zcl.DataType.INT16 },
2078
+ ntcSensorType1: { ID: 0x0001, name: "ntcSensorType1", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2079
+ ntcSensorType2: { ID: 0x0002, name: "ntcSensorType2", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2080
+ waterSensorValue: { ID: 0x0003, name: "waterSensorValue", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
2081
+ ntcCalibration1: { ID: 0x0004, name: "ntcCalibration1", type: zigbee_herdsman_1.Zcl.DataType.INT8, write: true },
2082
+ ntcCalibration2: { ID: 0x0005, name: "ntcCalibration2", type: zigbee_herdsman_1.Zcl.DataType.INT8, write: true },
2083
+ waterAlarmRelayAction: { ID: 0x0006, name: "waterAlarmRelayAction", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2084
+ ntc1OperationSelect: { ID: 0x0007, name: "ntc1OperationSelect", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2085
+ ntc2OperationSelect: { ID: 0x0008, name: "ntc2OperationSelect", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2086
+ ntc1RelayAutoTemp: { ID: 0x0009, name: "ntc1RelayAutoTemp", type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true },
2087
+ ntc2RelayAutoTemp: { ID: 0x000a, name: "ntc2RelayAutoTemp", type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true },
2088
+ overrideOption: { ID: 0x000b, name: "overrideOption", type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true },
2089
+ ntc1TempHysteresis: { ID: 0x000c, name: "ntc1TempHysteresis", type: zigbee_herdsman_1.Zcl.DataType.INT8, write: true },
2090
+ ntc2TempHysteresis: { ID: 0x000d, name: "ntc2TempHysteresis", type: zigbee_herdsman_1.Zcl.DataType.INT8, write: true },
2091
+ waterConditionAlarm: { ID: 0x000e, name: "waterConditionAlarm", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
2092
+ ntcConditionAlarm: { ID: 0x000f, name: "ntcConditionAlarm", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
2093
+ isExecuteCondition: { ID: 0x0010, name: "isExecuteCondition", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
2094
+ },
2095
+ commands: {},
2096
+ commandsResponse: {},
2097
+ }),
2098
+ m.onOff({ powerOnBehavior: true }),
2099
+ m.electricityMeter({ voltage: { divisor: 10 }, current: { divisor: 1000 }, power: { divisor: 1 }, energy: { divisor: 100 } }),
2100
+ // Override genDeviceTempCfg to relax currentTemperature max constraint
2101
+ // (device reports in 0.1°C units, e.g. 311 = 31.1°C, exceeding ZCL max of 200)
2102
+ m.deviceAddCustomCluster("genDeviceTempCfg", {
2103
+ ID: 0x0002,
2104
+ name: "genDeviceTempCfg",
2105
+ attributes: {
2106
+ currentTemperature: { ID: 0x0000, name: "currentTemperature", type: zigbee_herdsman_1.Zcl.DataType.INT16, min: -2000, max: 2000 },
2107
+ },
2108
+ commands: {},
2109
+ commandsResponse: {},
2110
+ }),
2111
+ // Device reports currentTemperature in 0.1°C units (non-standard; ZCL spec is °C).
2112
+ // e.g. raw 311 = 31.1°C. change: 10 raw units = 1°C reporting threshold; fzConvert divides by 10.
2113
+ m.numeric({
2114
+ name: "device_temperature",
2115
+ cluster: "genDeviceTempCfg",
2116
+ attribute: "currentTemperature",
2117
+ reporting: { min: 15, max: 600, change: 10 },
2118
+ description: "Internal device temperature",
2119
+ unit: "°C",
2120
+ access: "STATE_GET",
2121
+ entityCategory: "diagnostic",
2122
+ fzConvert: (model, msg) => {
2123
+ if (msg.data.currentTemperature !== undefined) {
2124
+ const raw = msg.data.currentTemperature;
2125
+ if (raw !== -32768 && raw !== 0x8000) {
2126
+ return { device_temperature: utils.precisionRound(raw, 2) / 10 };
2127
+ }
2128
+ }
2129
+ },
2130
+ }),
2131
+ // Device reports measuredValue in 0.01°C units (standard for msTemperatureMeasurement).
2132
+ // e.g. raw 2250 = 22.50°C. change: 10 raw units = 0.1°C reporting threshold; fzConvert divides by 100.
2133
+ m.numeric({
2134
+ name: "ntc1_temperature",
2135
+ cluster: "msTemperatureMeasurement",
2136
+ attribute: "measuredValue",
2137
+ reporting: { min: 15, max: 600, change: 10 },
2138
+ description: "External NTC1 temperature probe",
2139
+ unit: "°C",
2140
+ access: "STATE_GET",
2141
+ fzConvert: (model, msg) => {
2142
+ if (msg.data.measuredValue !== undefined) {
2143
+ const raw = msg.data.measuredValue;
2144
+ if (raw !== -32768 && raw !== 0x8000) {
2145
+ return { ntc1_temperature: utils.precisionRound(raw, 2) / 100 };
2146
+ }
2147
+ }
2148
+ },
2149
+ }),
2150
+ // Device reports ntc2Temperature in 0.01°C units (same as NTC1).
2151
+ // e.g. raw 2350 = 23.50°C. change: 10 raw units = 0.1°C reporting threshold; fzConvert divides by 100.
2152
+ m.numeric({
2153
+ name: "ntc2_temperature",
2154
+ cluster: "namronPrivate04E0",
2155
+ attribute: "ntc2Temperature",
2156
+ reporting: { min: 15, max: 600, change: 10 },
2157
+ description: "External NTC2 temperature probe",
2158
+ unit: "°C",
2159
+ access: "STATE_GET",
2160
+ fzConvert: (model, msg) => {
2161
+ if (msg.data.ntc2Temperature !== undefined) {
2162
+ const raw = msg.data.ntc2Temperature;
2163
+ if (raw !== -32768 && raw !== 0x8000) {
2164
+ return { ntc2_temperature: utils.precisionRound(raw, 2) / 100 };
2165
+ }
2166
+ }
2167
+ },
2168
+ }),
2169
+ // Water sensor (NO contacts: shorted = water detected)
2170
+ m.binary({
2171
+ name: "water_sensor",
2172
+ cluster: "namronPrivate04E0",
2173
+ attribute: "waterSensorValue",
2174
+ description: "External water sensor (true = water detected)",
2175
+ valueOn: [true, 1],
2176
+ valueOff: [false, 0],
2177
+ access: "STATE_GET",
2178
+ reporting: { min: 1, max: 300, change: 1 },
2179
+ }),
2180
+ // NTC sensor type configuration
2181
+ m.enumLookup({
2182
+ name: "ntc1_sensor_type",
2183
+ lookup: { none: 0, "NTC-10K": 1, "NTC-12K": 2, "NTC-15K": 3, "NTC-22K": 4, "NTC-33K": 5, "NTC-47K": 6 },
2184
+ cluster: "namronPrivate04E0",
2185
+ attribute: "ntcSensorType1",
2186
+ description: "NTC probe type for sensor #1 (must be set for temperature reporting)",
2187
+ entityCategory: "config",
2188
+ }),
2189
+ m.enumLookup({
2190
+ name: "ntc2_sensor_type",
2191
+ lookup: { none: 0, "NTC-10K": 1, "NTC-12K": 2, "NTC-15K": 3, "NTC-22K": 4, "NTC-33K": 5, "NTC-47K": 6 },
2192
+ cluster: "namronPrivate04E0",
2193
+ attribute: "ntcSensorType2",
2194
+ description: "NTC probe type for sensor #2 (must be set for temperature reporting)",
2195
+ entityCategory: "config",
2196
+ }),
2197
+ // Water alarm relay action
2198
+ m.enumLookup({
2199
+ name: "water_alarm_relay_action",
2200
+ lookup: {
2201
+ no_action: 0,
2202
+ turn_off_restore: 1,
2203
+ turn_on_restore: 2,
2204
+ turn_off_stay: 3,
2205
+ turn_on_stay: 4,
2206
+ no_water_turn_off: 5,
2207
+ no_water_turn_on: 6,
2208
+ },
2209
+ cluster: "namronPrivate04E0",
2210
+ attribute: "waterAlarmRelayAction",
2211
+ description: "Relay behavior when water sensor detects a leak",
2212
+ entityCategory: "config",
2213
+ }),
2214
+ // NTC operation modes
2215
+ m.enumLookup({
2216
+ name: "ntc1_operation_mode",
2217
+ lookup: { no_action: 0, off_when_hot_on_when_cold: 1, on_when_hot_off_when_cold: 2, off_when_hot_stay: 3, on_when_hot_stay: 4 },
2218
+ cluster: "namronPrivate04E0",
2219
+ attribute: "ntc1OperationSelect",
2220
+ description: "Relay behavior based on NTC1 temperature threshold",
2221
+ entityCategory: "config",
2222
+ }),
2223
+ m.enumLookup({
2224
+ name: "ntc2_operation_mode",
2225
+ lookup: { no_action: 0, off_when_hot_on_when_cold: 1, on_when_hot_off_when_cold: 2, off_when_hot_stay: 3, on_when_hot_stay: 4 },
2226
+ cluster: "namronPrivate04E0",
2227
+ attribute: "ntc2OperationSelect",
2228
+ description: "Relay behavior based on NTC2 temperature threshold",
2229
+ entityCategory: "config",
2230
+ }),
2231
+ // Temperature thresholds for relay auto control
2232
+ m.numeric({
2233
+ name: "ntc1_relay_auto_temp",
2234
+ cluster: "namronPrivate04E0",
2235
+ attribute: "ntc1RelayAutoTemp",
2236
+ description: "Temperature threshold for NTC1 relay control",
2237
+ unit: "°C",
2238
+ valueMin: 0,
2239
+ valueMax: 100,
2240
+ valueStep: 0.1,
2241
+ scale: 10,
2242
+ precision: 1,
2243
+ entityCategory: "config",
2244
+ }),
2245
+ m.numeric({
2246
+ name: "ntc2_relay_auto_temp",
2247
+ cluster: "namronPrivate04E0",
2248
+ attribute: "ntc2RelayAutoTemp",
2249
+ description: "Temperature threshold for NTC2 relay control",
2250
+ unit: "°C",
2251
+ valueMin: 0,
2252
+ valueMax: 100,
2253
+ valueStep: 0.1,
2254
+ scale: 10,
2255
+ precision: 1,
2256
+ entityCategory: "config",
2257
+ }),
2258
+ // Override priority
2259
+ m.enumLookup({
2260
+ name: "override_option",
2261
+ lookup: { no_priority: 0, water_alarm_priority: 1, ntc_priority: 2 },
2262
+ cluster: "namronPrivate04E0",
2263
+ attribute: "overrideOption",
2264
+ description: "Priority when both water alarm and temperature conditions trigger",
2265
+ entityCategory: "config",
2266
+ }),
2267
+ // Calibration offsets
2268
+ m.numeric({
2269
+ name: "ntc1_calibration",
2270
+ cluster: "namronPrivate04E0",
2271
+ attribute: "ntcCalibration1",
2272
+ description: "Temperature calibration offset for NTC1",
2273
+ unit: "°C",
2274
+ valueMin: -10,
2275
+ valueMax: 10,
2276
+ entityCategory: "config",
2277
+ }),
2278
+ m.numeric({
2279
+ name: "ntc2_calibration",
2280
+ cluster: "namronPrivate04E0",
2281
+ attribute: "ntcCalibration2",
2282
+ description: "Temperature calibration offset for NTC2",
2283
+ unit: "°C",
2284
+ valueMin: -10,
2285
+ valueMax: 10,
2286
+ entityCategory: "config",
2287
+ }),
2288
+ // Hysteresis
2289
+ m.numeric({
2290
+ name: "ntc1_temp_hysteresis",
2291
+ cluster: "namronPrivate04E0",
2292
+ attribute: "ntc1TempHysteresis",
2293
+ description: "Temperature hysteresis for NTC1 relay control",
2294
+ unit: "°C",
2295
+ valueMin: -10,
2296
+ valueMax: 10,
2297
+ entityCategory: "config",
2298
+ }),
2299
+ m.numeric({
2300
+ name: "ntc2_temp_hysteresis",
2301
+ cluster: "namronPrivate04E0",
2302
+ attribute: "ntc2TempHysteresis",
2303
+ description: "Temperature hysteresis for NTC2 relay control",
2304
+ unit: "°C",
2305
+ valueMin: -10,
2306
+ valueMax: 10,
2307
+ entityCategory: "config",
2308
+ }),
2309
+ // Condition alarms (read-only status)
2310
+ m.binary({
2311
+ name: "water_condition_alarm",
2312
+ cluster: "namronPrivate04E0",
2313
+ attribute: "waterConditionAlarm",
2314
+ description: "Water leak alarm active",
2315
+ valueOn: [true, 1],
2316
+ valueOff: [false, 0],
2317
+ access: "STATE",
2318
+ }),
2319
+ m.binary({
2320
+ name: "ntc_condition_alarm",
2321
+ cluster: "namronPrivate04E0",
2322
+ attribute: "ntcConditionAlarm",
2323
+ description: "NTC temperature alarm active",
2324
+ valueOn: [true, 1],
2325
+ valueOff: [false, 0],
2326
+ access: "STATE",
2327
+ }),
2328
+ m.binary({
2329
+ name: "is_execute_condition",
2330
+ cluster: "namronPrivate04E0",
2331
+ attribute: "isExecuteCondition",
2332
+ description: "Relay action triggered by conditions",
2333
+ valueOn: [true, 1],
2334
+ valueOff: [false, 0],
2335
+ access: "STATE",
2336
+ }),
2337
+ // Polling (5 min interval)
2338
+ m.poll({
2339
+ key: "namron_4512785_poll",
2340
+ optionKey: "temperature_poll_interval",
2341
+ option: e
2342
+ .numeric("temperature_poll_interval", ea.SET)
2343
+ .withValueMin(-1)
2344
+ .withDescription("Polling interval for NTC temperature sensors (default: 300s, -1 to disable)"),
2345
+ defaultIntervalSeconds: 300,
2346
+ poll: async (device) => {
2347
+ const ep = device.getEndpoint(1);
2348
+ if (!ep)
2349
+ return;
2350
+ await ep.read("genOnOff", ["onOff"]);
2351
+ await ep.read("msTemperatureMeasurement", ["measuredValue"]);
2352
+ await ep.read("namronPrivate04E0", [
2353
+ "ntc2Temperature",
2354
+ "waterSensorValue",
2355
+ "waterConditionAlarm",
2356
+ "ntcConditionAlarm",
2357
+ "isExecuteCondition",
2358
+ ]);
2359
+ },
2360
+ }),
2361
+ ],
2362
+ },
2003
2363
  ];
2004
2364
  //# sourceMappingURL=namron.js.map