@willieee802/zigbee-herdsman-converters 19.44.0 → 19.44.2

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 (1609) hide show
  1. package/dist/converters/actions.d.ts +36 -0
  2. package/dist/converters/actions.d.ts.map +1 -0
  3. package/dist/converters/actions.js +137 -0
  4. package/dist/converters/actions.js.map +1 -0
  5. package/dist/converters/fromZigbee.d.ts +293 -0
  6. package/dist/converters/fromZigbee.d.ts.map +1 -0
  7. package/dist/converters/fromZigbee.js +5192 -0
  8. package/dist/converters/fromZigbee.js.map +1 -0
  9. package/dist/converters/toZigbee.d.ts +235 -0
  10. package/dist/converters/toZigbee.d.ts.map +1 -0
  11. package/dist/converters/toZigbee.js +4577 -0
  12. package/dist/converters/toZigbee.js.map +1 -0
  13. package/dist/devices/ITCommander.d.ts +3 -0
  14. package/dist/devices/ITCommander.d.ts.map +1 -0
  15. package/dist/devices/ITCommander.js +73 -0
  16. package/dist/devices/ITCommander.js.map +1 -0
  17. package/dist/devices/acova.d.ts +3 -0
  18. package/dist/devices/acova.d.ts.map +1 -0
  19. package/dist/devices/acova.js +124 -0
  20. package/dist/devices/acova.js.map +1 -0
  21. package/dist/devices/acuity_brands_lighting.d.ts +3 -0
  22. package/dist/devices/acuity_brands_lighting.d.ts.map +1 -0
  23. package/dist/devices/acuity_brands_lighting.js +61 -0
  24. package/dist/devices/acuity_brands_lighting.js.map +1 -0
  25. package/dist/devices/adeo.d.ts +3 -0
  26. package/dist/devices/adeo.d.ts.map +1 -0
  27. package/dist/devices/adeo.js +518 -0
  28. package/dist/devices/adeo.js.map +1 -0
  29. package/dist/devices/adurosmart.d.ts +3 -0
  30. package/dist/devices/adurosmart.d.ts.map +1 -0
  31. package/dist/devices/adurosmart.js +235 -0
  32. package/dist/devices/adurosmart.js.map +1 -0
  33. package/dist/devices/aeotec.d.ts +3 -0
  34. package/dist/devices/aeotec.d.ts.map +1 -0
  35. package/dist/devices/aeotec.js +95 -0
  36. package/dist/devices/aeotec.js.map +1 -0
  37. package/dist/devices/airam.d.ts +3 -0
  38. package/dist/devices/airam.d.ts.map +1 -0
  39. package/dist/devices/airam.js +102 -0
  40. package/dist/devices/airam.js.map +1 -0
  41. package/dist/devices/airzone_aidoo.d.ts +3 -0
  42. package/dist/devices/airzone_aidoo.d.ts.map +1 -0
  43. package/dist/devices/airzone_aidoo.js +77 -0
  44. package/dist/devices/airzone_aidoo.js.map +1 -0
  45. package/dist/devices/ajax_online.d.ts +3 -0
  46. package/dist/devices/ajax_online.d.ts.map +1 -0
  47. package/dist/devices/ajax_online.js +83 -0
  48. package/dist/devices/ajax_online.js.map +1 -0
  49. package/dist/devices/akuvox.d.ts +3 -0
  50. package/dist/devices/akuvox.d.ts.map +1 -0
  51. package/dist/devices/akuvox.js +65 -0
  52. package/dist/devices/akuvox.js.map +1 -0
  53. package/dist/devices/alchemy.d.ts +3 -0
  54. package/dist/devices/alchemy.d.ts.map +1 -0
  55. package/dist/devices/alchemy.js +54 -0
  56. package/dist/devices/alchemy.js.map +1 -0
  57. package/dist/devices/aldi.d.ts +3 -0
  58. package/dist/devices/aldi.d.ts.map +1 -0
  59. package/dist/devices/aldi.js +54 -0
  60. package/dist/devices/aldi.js.map +1 -0
  61. package/dist/devices/alecto.d.ts +3 -0
  62. package/dist/devices/alecto.d.ts.map +1 -0
  63. package/dist/devices/alecto.js +91 -0
  64. package/dist/devices/alecto.js.map +1 -0
  65. package/dist/devices/amina.d.ts +3 -0
  66. package/dist/devices/amina.d.ts.map +1 -0
  67. package/dist/devices/amina.js +360 -0
  68. package/dist/devices/amina.js.map +1 -0
  69. package/dist/devices/anchor.d.ts +3 -0
  70. package/dist/devices/anchor.d.ts.map +1 -0
  71. package/dist/devices/anchor.js +47 -0
  72. package/dist/devices/anchor.js.map +1 -0
  73. package/dist/devices/atlantic.d.ts +3 -0
  74. package/dist/devices/atlantic.d.ts.map +1 -0
  75. package/dist/devices/atlantic.js +147 -0
  76. package/dist/devices/atlantic.js.map +1 -0
  77. package/dist/devices/atsmart.d.ts +3 -0
  78. package/dist/devices/atsmart.d.ts.map +1 -0
  79. package/dist/devices/atsmart.js +47 -0
  80. package/dist/devices/atsmart.js.map +1 -0
  81. package/dist/devices/aubess.d.ts +3 -0
  82. package/dist/devices/aubess.d.ts.map +1 -0
  83. package/dist/devices/aubess.js +60 -0
  84. package/dist/devices/aubess.js.map +1 -0
  85. package/dist/devices/aurora_lighting.d.ts +3 -0
  86. package/dist/devices/aurora_lighting.d.ts.map +1 -0
  87. package/dist/devices/aurora_lighting.js +347 -0
  88. package/dist/devices/aurora_lighting.js.map +1 -0
  89. package/dist/devices/automaton.d.ts +3 -0
  90. package/dist/devices/automaton.d.ts.map +1 -0
  91. package/dist/devices/automaton.js +64 -0
  92. package/dist/devices/automaton.js.map +1 -0
  93. package/dist/devices/avatto.d.ts +3 -0
  94. package/dist/devices/avatto.d.ts.map +1 -0
  95. package/dist/devices/avatto.js +635 -0
  96. package/dist/devices/avatto.js.map +1 -0
  97. package/dist/devices/awox.d.ts +3 -0
  98. package/dist/devices/awox.d.ts.map +1 -0
  99. package/dist/devices/awox.js +352 -0
  100. package/dist/devices/awox.js.map +1 -0
  101. package/dist/devices/axis.d.ts +3 -0
  102. package/dist/devices/axis.d.ts.map +1 -0
  103. package/dist/devices/axis.js +59 -0
  104. package/dist/devices/axis.js.map +1 -0
  105. package/dist/devices/bacchus.d.ts +3 -0
  106. package/dist/devices/bacchus.d.ts.map +1 -0
  107. package/dist/devices/bacchus.js +902 -0
  108. package/dist/devices/bacchus.js.map +1 -0
  109. package/dist/devices/bankamp.d.ts +3 -0
  110. package/dist/devices/bankamp.d.ts.map +1 -0
  111. package/dist/devices/bankamp.js +47 -0
  112. package/dist/devices/bankamp.js.map +1 -0
  113. package/dist/devices/bega.d.ts +3 -0
  114. package/dist/devices/bega.d.ts.map +1 -0
  115. package/dist/devices/bega.js +68 -0
  116. package/dist/devices/bega.js.map +1 -0
  117. package/dist/devices/belkin.d.ts +3 -0
  118. package/dist/devices/belkin.d.ts.map +1 -0
  119. package/dist/devices/belkin.js +47 -0
  120. package/dist/devices/belkin.js.map +1 -0
  121. package/dist/devices/bitron.d.ts +3 -0
  122. package/dist/devices/bitron.d.ts.map +1 -0
  123. package/dist/devices/bitron.js +357 -0
  124. package/dist/devices/bitron.js.map +1 -0
  125. package/dist/devices/bituo_technik.d.ts +3 -0
  126. package/dist/devices/bituo_technik.d.ts.map +1 -0
  127. package/dist/devices/bituo_technik.js +487 -0
  128. package/dist/devices/bituo_technik.js.map +1 -0
  129. package/dist/devices/blaupunkt.d.ts +3 -0
  130. package/dist/devices/blaupunkt.d.ts.map +1 -0
  131. package/dist/devices/blaupunkt.js +64 -0
  132. package/dist/devices/blaupunkt.js.map +1 -0
  133. package/dist/devices/blitzwolf.d.ts +3 -0
  134. package/dist/devices/blitzwolf.d.ts.map +1 -0
  135. package/dist/devices/blitzwolf.js +77 -0
  136. package/dist/devices/blitzwolf.js.map +1 -0
  137. package/dist/devices/bosch.d.ts +3 -0
  138. package/dist/devices/bosch.d.ts.map +1 -0
  139. package/dist/devices/bosch.js +1381 -0
  140. package/dist/devices/bosch.js.map +1 -0
  141. package/dist/devices/bouffalo_lab.d.ts +3 -0
  142. package/dist/devices/bouffalo_lab.d.ts.map +1 -0
  143. package/dist/devices/bouffalo_lab.js +47 -0
  144. package/dist/devices/bouffalo_lab.js.map +1 -0
  145. package/dist/devices/box.d.ts +3 -0
  146. package/dist/devices/box.d.ts.map +1 -0
  147. package/dist/devices/box.js +370 -0
  148. package/dist/devices/box.js.map +1 -0
  149. package/dist/devices/brimate.d.ts +3 -0
  150. package/dist/devices/brimate.d.ts.map +1 -0
  151. package/dist/devices/brimate.js +51 -0
  152. package/dist/devices/brimate.js.map +1 -0
  153. package/dist/devices/brun_holding.d.ts +3 -0
  154. package/dist/devices/brun_holding.d.ts.map +1 -0
  155. package/dist/devices/brun_holding.js +59 -0
  156. package/dist/devices/brun_holding.js.map +1 -0
  157. package/dist/devices/bseed.d.ts +3 -0
  158. package/dist/devices/bseed.d.ts.map +1 -0
  159. package/dist/devices/bseed.js +53 -0
  160. package/dist/devices/bseed.js.map +1 -0
  161. package/dist/devices/bticino.d.ts +3 -0
  162. package/dist/devices/bticino.d.ts.map +1 -0
  163. package/dist/devices/bticino.js +111 -0
  164. package/dist/devices/bticino.js.map +1 -0
  165. package/dist/devices/bubendorff.d.ts +3 -0
  166. package/dist/devices/bubendorff.d.ts.map +1 -0
  167. package/dist/devices/bubendorff.js +47 -0
  168. package/dist/devices/bubendorff.js.map +1 -0
  169. package/dist/devices/busch_jaeger.d.ts +3 -0
  170. package/dist/devices/busch_jaeger.d.ts.map +1 -0
  171. package/dist/devices/busch_jaeger.js +163 -0
  172. package/dist/devices/busch_jaeger.js.map +1 -0
  173. package/dist/devices/byun.d.ts +3 -0
  174. package/dist/devices/byun.d.ts.map +1 -0
  175. package/dist/devices/byun.js +60 -0
  176. package/dist/devices/byun.js.map +1 -0
  177. package/dist/devices/calex.d.ts +3 -0
  178. package/dist/devices/calex.d.ts.map +1 -0
  179. package/dist/devices/calex.js +87 -0
  180. package/dist/devices/calex.js.map +1 -0
  181. package/dist/devices/candeo.d.ts +3 -0
  182. package/dist/devices/candeo.d.ts.map +1 -0
  183. package/dist/devices/candeo.js +887 -0
  184. package/dist/devices/candeo.js.map +1 -0
  185. package/dist/devices/casaia.d.ts +3 -0
  186. package/dist/devices/casaia.d.ts.map +1 -0
  187. package/dist/devices/casaia.js +95 -0
  188. package/dist/devices/casaia.js.map +1 -0
  189. package/dist/devices/cel.d.ts +3 -0
  190. package/dist/devices/cel.d.ts.map +1 -0
  191. package/dist/devices/cel.js +49 -0
  192. package/dist/devices/cel.js.map +1 -0
  193. package/dist/devices/centralite.d.ts +28 -0
  194. package/dist/devices/centralite.d.ts.map +1 -0
  195. package/dist/devices/centralite.js +440 -0
  196. package/dist/devices/centralite.js.map +1 -0
  197. package/dist/devices/chacon.d.ts +3 -0
  198. package/dist/devices/chacon.d.ts.map +1 -0
  199. package/dist/devices/chacon.js +57 -0
  200. package/dist/devices/chacon.js.map +1 -0
  201. package/dist/devices/cleode.d.ts +3 -0
  202. package/dist/devices/cleode.d.ts.map +1 -0
  203. package/dist/devices/cleode.js +47 -0
  204. package/dist/devices/cleode.js.map +1 -0
  205. package/dist/devices/cleverio.d.ts +3 -0
  206. package/dist/devices/cleverio.d.ts.map +1 -0
  207. package/dist/devices/cleverio.js +74 -0
  208. package/dist/devices/cleverio.js.map +1 -0
  209. package/dist/devices/climax.d.ts +3 -0
  210. package/dist/devices/climax.d.ts.map +1 -0
  211. package/dist/devices/climax.js +184 -0
  212. package/dist/devices/climax.js.map +1 -0
  213. package/dist/devices/commercial_electric.d.ts +3 -0
  214. package/dist/devices/commercial_electric.d.ts.map +1 -0
  215. package/dist/devices/commercial_electric.js +47 -0
  216. package/dist/devices/commercial_electric.js.map +1 -0
  217. package/dist/devices/cree.d.ts +3 -0
  218. package/dist/devices/cree.d.ts.map +1 -0
  219. package/dist/devices/cree.js +47 -0
  220. package/dist/devices/cree.js.map +1 -0
  221. package/dist/devices/ctm.d.ts +3 -0
  222. package/dist/devices/ctm.d.ts.map +1 -0
  223. package/dist/devices/ctm.js +1411 -0
  224. package/dist/devices/ctm.js.map +1 -0
  225. package/dist/devices/current_products_corp.d.ts +3 -0
  226. package/dist/devices/current_products_corp.d.ts.map +1 -0
  227. package/dist/devices/current_products_corp.js +60 -0
  228. package/dist/devices/current_products_corp.js.map +1 -0
  229. package/dist/devices/custom_devices_diy.d.ts +3 -0
  230. package/dist/devices/custom_devices_diy.d.ts.map +1 -0
  231. package/dist/devices/custom_devices_diy.js +1302 -0
  232. package/dist/devices/custom_devices_diy.js.map +1 -0
  233. package/dist/devices/cwd.d.ts +3 -0
  234. package/dist/devices/cwd.d.ts.map +1 -0
  235. package/dist/devices/cwd.js +47 -0
  236. package/dist/devices/cwd.js.map +1 -0
  237. package/dist/devices/cy_lighting.d.ts +3 -0
  238. package/dist/devices/cy_lighting.d.ts.map +1 -0
  239. package/dist/devices/cy_lighting.js +47 -0
  240. package/dist/devices/cy_lighting.js.map +1 -0
  241. package/dist/devices/danalock.d.ts +3 -0
  242. package/dist/devices/danalock.d.ts.map +1 -0
  243. package/dist/devices/danalock.js +61 -0
  244. package/dist/devices/danalock.js.map +1 -0
  245. package/dist/devices/danfoss.d.ts +3 -0
  246. package/dist/devices/danfoss.d.ts.map +1 -0
  247. package/dist/devices/danfoss.js +793 -0
  248. package/dist/devices/danfoss.js.map +1 -0
  249. package/dist/devices/databyte.d.ts +3 -0
  250. package/dist/devices/databyte.d.ts.map +1 -0
  251. package/dist/devices/databyte.js +90 -0
  252. package/dist/devices/databyte.js.map +1 -0
  253. package/dist/devices/datek.d.ts +3 -0
  254. package/dist/devices/datek.d.ts.map +1 -0
  255. package/dist/devices/datek.js +303 -0
  256. package/dist/devices/datek.js.map +1 -0
  257. package/dist/devices/dawon_dns.d.ts +3 -0
  258. package/dist/devices/dawon_dns.d.ts.map +1 -0
  259. package/dist/devices/dawon_dns.js +314 -0
  260. package/dist/devices/dawon_dns.js.map +1 -0
  261. package/dist/devices/develco.d.ts +3 -0
  262. package/dist/devices/develco.d.ts.map +1 -0
  263. package/dist/devices/develco.js +1113 -0
  264. package/dist/devices/develco.js.map +1 -0
  265. package/dist/devices/digi.d.ts +3 -0
  266. package/dist/devices/digi.d.ts.map +1 -0
  267. package/dist/devices/digi.js +24 -0
  268. package/dist/devices/digi.js.map +1 -0
  269. package/dist/devices/direct_signs.d.ts +3 -0
  270. package/dist/devices/direct_signs.d.ts.map +1 -0
  271. package/dist/devices/direct_signs.js +47 -0
  272. package/dist/devices/direct_signs.js.map +1 -0
  273. package/dist/devices/diyruz.d.ts +3 -0
  274. package/dist/devices/diyruz.d.ts.map +1 -0
  275. package/dist/devices/diyruz.js +397 -0
  276. package/dist/devices/diyruz.js.map +1 -0
  277. package/dist/devices/dlink.d.ts +3 -0
  278. package/dist/devices/dlink.d.ts.map +1 -0
  279. package/dist/devices/dlink.js +72 -0
  280. package/dist/devices/dlink.js.map +1 -0
  281. package/dist/devices/dnake.d.ts +3 -0
  282. package/dist/devices/dnake.d.ts.map +1 -0
  283. package/dist/devices/dnake.js +47 -0
  284. package/dist/devices/dnake.js.map +1 -0
  285. package/dist/devices/domraem.d.ts +3 -0
  286. package/dist/devices/domraem.d.ts.map +1 -0
  287. package/dist/devices/domraem.js +75 -0
  288. package/dist/devices/domraem.js.map +1 -0
  289. package/dist/devices/dowsing_reynolds.d.ts +3 -0
  290. package/dist/devices/dowsing_reynolds.d.ts.map +1 -0
  291. package/dist/devices/dowsing_reynolds.js +47 -0
  292. package/dist/devices/dowsing_reynolds.js.map +1 -0
  293. package/dist/devices/dqsmart.d.ts +3 -0
  294. package/dist/devices/dqsmart.d.ts.map +1 -0
  295. package/dist/devices/dqsmart.js +50 -0
  296. package/dist/devices/dqsmart.js.map +1 -0
  297. package/dist/devices/dresden_elektronik.d.ts +3 -0
  298. package/dist/devices/dresden_elektronik.d.ts.map +1 -0
  299. package/dist/devices/dresden_elektronik.js +167 -0
  300. package/dist/devices/dresden_elektronik.js.map +1 -0
  301. package/dist/devices/easyaccess.d.ts +3 -0
  302. package/dist/devices/easyaccess.d.ts.map +1 -0
  303. package/dist/devices/easyaccess.js +67 -0
  304. package/dist/devices/easyaccess.js.map +1 -0
  305. package/dist/devices/easyiot.d.ts +3 -0
  306. package/dist/devices/easyiot.d.ts.map +1 -0
  307. package/dist/devices/easyiot.js +359 -0
  308. package/dist/devices/easyiot.js.map +1 -0
  309. package/dist/devices/eatonhalo_led.d.ts +3 -0
  310. package/dist/devices/eatonhalo_led.d.ts.map +1 -0
  311. package/dist/devices/eatonhalo_led.js +47 -0
  312. package/dist/devices/eatonhalo_led.js.map +1 -0
  313. package/dist/devices/echostar.d.ts +3 -0
  314. package/dist/devices/echostar.d.ts.map +1 -0
  315. package/dist/devices/echostar.js +61 -0
  316. package/dist/devices/echostar.js.map +1 -0
  317. package/dist/devices/ecodim.d.ts +3 -0
  318. package/dist/devices/ecodim.d.ts.map +1 -0
  319. package/dist/devices/ecodim.js +274 -0
  320. package/dist/devices/ecodim.js.map +1 -0
  321. package/dist/devices/ecolink.d.ts +3 -0
  322. package/dist/devices/ecolink.d.ts.map +1 -0
  323. package/dist/devices/ecolink.js +57 -0
  324. package/dist/devices/ecolink.js.map +1 -0
  325. package/dist/devices/ecosmart.d.ts +3 -0
  326. package/dist/devices/ecosmart.d.ts.map +1 -0
  327. package/dist/devices/ecosmart.js +115 -0
  328. package/dist/devices/ecosmart.js.map +1 -0
  329. package/dist/devices/ecozy.d.ts +3 -0
  330. package/dist/devices/ecozy.d.ts.map +1 -0
  331. package/dist/devices/ecozy.js +85 -0
  332. package/dist/devices/ecozy.js.map +1 -0
  333. package/dist/devices/edp.d.ts +3 -0
  334. package/dist/devices/edp.d.ts.map +1 -0
  335. package/dist/devices/edp.js +70 -0
  336. package/dist/devices/edp.js.map +1 -0
  337. package/dist/devices/efekta.d.ts +3 -0
  338. package/dist/devices/efekta.d.ts.map +1 -0
  339. package/dist/devices/efekta.js +8230 -0
  340. package/dist/devices/efekta.js.map +1 -0
  341. package/dist/devices/eglo.d.ts +3 -0
  342. package/dist/devices/eglo.d.ts.map +1 -0
  343. package/dist/devices/eglo.js +142 -0
  344. package/dist/devices/eglo.js.map +1 -0
  345. package/dist/devices/elko.d.ts +27 -0
  346. package/dist/devices/elko.d.ts.map +1 -0
  347. package/dist/devices/elko.js +306 -0
  348. package/dist/devices/elko.js.map +1 -0
  349. package/dist/devices/enbrighten.d.ts +3 -0
  350. package/dist/devices/enbrighten.d.ts.map +1 -0
  351. package/dist/devices/enbrighten.js +152 -0
  352. package/dist/devices/enbrighten.js.map +1 -0
  353. package/dist/devices/engo.d.ts +3 -0
  354. package/dist/devices/engo.d.ts.map +1 -0
  355. package/dist/devices/engo.js +1041 -0
  356. package/dist/devices/engo.js.map +1 -0
  357. package/dist/devices/enkin.d.ts +3 -0
  358. package/dist/devices/enkin.d.ts.map +1 -0
  359. package/dist/devices/enkin.js +14 -0
  360. package/dist/devices/enkin.js.map +1 -0
  361. package/dist/devices/enocean.d.ts +3 -0
  362. package/dist/devices/enocean.d.ts.map +1 -0
  363. package/dist/devices/enocean.js +150 -0
  364. package/dist/devices/enocean.js.map +1 -0
  365. package/dist/devices/envilar.d.ts +3 -0
  366. package/dist/devices/envilar.d.ts.map +1 -0
  367. package/dist/devices/envilar.js +131 -0
  368. package/dist/devices/envilar.js.map +1 -0
  369. package/dist/devices/espressif.d.ts +3 -0
  370. package/dist/devices/espressif.d.ts.map +1 -0
  371. package/dist/devices/espressif.js +61 -0
  372. package/dist/devices/espressif.js.map +1 -0
  373. package/dist/devices/essentialb.d.ts +3 -0
  374. package/dist/devices/essentialb.d.ts.map +1 -0
  375. package/dist/devices/essentialb.js +133 -0
  376. package/dist/devices/essentialb.js.map +1 -0
  377. package/dist/devices/essentials.d.ts +3 -0
  378. package/dist/devices/essentials.d.ts.map +1 -0
  379. package/dist/devices/essentials.js +150 -0
  380. package/dist/devices/essentials.js.map +1 -0
  381. package/dist/devices/eucontrols.d.ts +3 -0
  382. package/dist/devices/eucontrols.d.ts.map +1 -0
  383. package/dist/devices/eucontrols.js +47 -0
  384. package/dist/devices/eucontrols.js.map +1 -0
  385. package/dist/devices/eurotronic.d.ts +3 -0
  386. package/dist/devices/eurotronic.d.ts.map +1 -0
  387. package/dist/devices/eurotronic.js +278 -0
  388. package/dist/devices/eurotronic.js.map +1 -0
  389. package/dist/devices/evanell.d.ts +3 -0
  390. package/dist/devices/evanell.d.ts.map +1 -0
  391. package/dist/devices/evanell.js +66 -0
  392. package/dist/devices/evanell.js.map +1 -0
  393. package/dist/devices/evn.d.ts +3 -0
  394. package/dist/devices/evn.d.ts.map +1 -0
  395. package/dist/devices/evn.js +97 -0
  396. package/dist/devices/evn.js.map +1 -0
  397. package/dist/devices/evology.d.ts +3 -0
  398. package/dist/devices/evology.d.ts.map +1 -0
  399. package/dist/devices/evology.js +60 -0
  400. package/dist/devices/evology.js.map +1 -0
  401. package/dist/devices/evvr.d.ts +3 -0
  402. package/dist/devices/evvr.d.ts.map +1 -0
  403. package/dist/devices/evvr.js +47 -0
  404. package/dist/devices/evvr.js.map +1 -0
  405. package/dist/devices/ewelink.d.ts +3 -0
  406. package/dist/devices/ewelink.d.ts.map +1 -0
  407. package/dist/devices/ewelink.js +326 -0
  408. package/dist/devices/ewelink.js.map +1 -0
  409. package/dist/devices/ezex.d.ts +3 -0
  410. package/dist/devices/ezex.d.ts.map +1 -0
  411. package/dist/devices/ezex.js +47 -0
  412. package/dist/devices/ezex.js.map +1 -0
  413. package/dist/devices/ezviz.d.ts +3 -0
  414. package/dist/devices/ezviz.d.ts.map +1 -0
  415. package/dist/devices/ezviz.js +47 -0
  416. package/dist/devices/ezviz.js.map +1 -0
  417. package/dist/devices/fantem.d.ts +3 -0
  418. package/dist/devices/fantem.d.ts.map +1 -0
  419. package/dist/devices/fantem.js +112 -0
  420. package/dist/devices/fantem.js.map +1 -0
  421. package/dist/devices/feibit.d.ts +3 -0
  422. package/dist/devices/feibit.d.ts.map +1 -0
  423. package/dist/devices/feibit.js +335 -0
  424. package/dist/devices/feibit.js.map +1 -0
  425. package/dist/devices/fireangel.d.ts +3 -0
  426. package/dist/devices/fireangel.d.ts.map +1 -0
  427. package/dist/devices/fireangel.js +96 -0
  428. package/dist/devices/fireangel.js.map +1 -0
  429. package/dist/devices/frankever.d.ts +3 -0
  430. package/dist/devices/frankever.d.ts.map +1 -0
  431. package/dist/devices/frankever.js +67 -0
  432. package/dist/devices/frankever.js.map +1 -0
  433. package/dist/devices/frient.d.ts +3 -0
  434. package/dist/devices/frient.d.ts.map +1 -0
  435. package/dist/devices/frient.js +84 -0
  436. package/dist/devices/frient.js.map +1 -0
  437. package/dist/devices/futurehome.d.ts +3 -0
  438. package/dist/devices/futurehome.d.ts.map +1 -0
  439. package/dist/devices/futurehome.js +137 -0
  440. package/dist/devices/futurehome.js.map +1 -0
  441. package/dist/devices/ge.d.ts +3 -0
  442. package/dist/devices/ge.d.ts.map +1 -0
  443. package/dist/devices/ge.js +130 -0
  444. package/dist/devices/ge.js.map +1 -0
  445. package/dist/devices/gewiss.d.ts +3 -0
  446. package/dist/devices/gewiss.d.ts.map +1 -0
  447. package/dist/devices/gewiss.js +148 -0
  448. package/dist/devices/gewiss.js.map +1 -0
  449. package/dist/devices/gidealed.d.ts +3 -0
  450. package/dist/devices/gidealed.d.ts.map +1 -0
  451. package/dist/devices/gidealed.js +47 -0
  452. package/dist/devices/gidealed.js.map +1 -0
  453. package/dist/devices/giderwel.d.ts +3 -0
  454. package/dist/devices/giderwel.d.ts.map +1 -0
  455. package/dist/devices/giderwel.js +47 -0
  456. package/dist/devices/giderwel.js.map +1 -0
  457. package/dist/devices/giex.d.ts +3 -0
  458. package/dist/devices/giex.d.ts.map +1 -0
  459. package/dist/devices/giex.js +114 -0
  460. package/dist/devices/giex.js.map +1 -0
  461. package/dist/devices/girier.d.ts +3 -0
  462. package/dist/devices/girier.d.ts.map +1 -0
  463. package/dist/devices/girier.js +51 -0
  464. package/dist/devices/girier.js.map +1 -0
  465. package/dist/devices/gledopto.d.ts +3 -0
  466. package/dist/devices/gledopto.d.ts.map +1 -0
  467. package/dist/devices/gledopto.js +1395 -0
  468. package/dist/devices/gledopto.js.map +1 -0
  469. package/dist/devices/gmmts.d.ts +3 -0
  470. package/dist/devices/gmmts.d.ts.map +1 -0
  471. package/dist/devices/gmmts.js +2267 -0
  472. package/dist/devices/gmmts.js.map +1 -0
  473. package/dist/devices/gmy.d.ts +3 -0
  474. package/dist/devices/gmy.d.ts.map +1 -0
  475. package/dist/devices/gmy.js +47 -0
  476. package/dist/devices/gmy.js.map +1 -0
  477. package/dist/devices/gs.d.ts +3 -0
  478. package/dist/devices/gs.d.ts.map +1 -0
  479. package/dist/devices/gs.js +121 -0
  480. package/dist/devices/gs.js.map +1 -0
  481. package/dist/devices/gumax.d.ts +3 -0
  482. package/dist/devices/gumax.d.ts.map +1 -0
  483. package/dist/devices/gumax.js +47 -0
  484. package/dist/devices/gumax.js.map +1 -0
  485. package/dist/devices/halemeier.d.ts +3 -0
  486. package/dist/devices/halemeier.d.ts.map +1 -0
  487. package/dist/devices/halemeier.js +142 -0
  488. package/dist/devices/halemeier.js.map +1 -0
  489. package/dist/devices/hampton_bay.d.ts +3 -0
  490. package/dist/devices/hampton_bay.d.ts.map +1 -0
  491. package/dist/devices/hampton_bay.js +68 -0
  492. package/dist/devices/hampton_bay.js.map +1 -0
  493. package/dist/devices/heatit.d.ts +3 -0
  494. package/dist/devices/heatit.d.ts.map +1 -0
  495. package/dist/devices/heatit.js +47 -0
  496. package/dist/devices/heatit.js.map +1 -0
  497. package/dist/devices/heiman.d.ts +3 -0
  498. package/dist/devices/heiman.d.ts.map +1 -0
  499. package/dist/devices/heiman.js +2092 -0
  500. package/dist/devices/heiman.js.map +1 -0
  501. package/dist/devices/heimgard_technologies.d.ts +3 -0
  502. package/dist/devices/heimgard_technologies.d.ts.map +1 -0
  503. package/dist/devices/heimgard_technologies.js +189 -0
  504. package/dist/devices/heimgard_technologies.js.map +1 -0
  505. package/dist/devices/hej.d.ts +3 -0
  506. package/dist/devices/hej.d.ts.map +1 -0
  507. package/dist/devices/hej.js +126 -0
  508. package/dist/devices/hej.js.map +1 -0
  509. package/dist/devices/hfh.d.ts +3 -0
  510. package/dist/devices/hfh.d.ts.map +1 -0
  511. package/dist/devices/hfh.js +47 -0
  512. package/dist/devices/hfh.js.map +1 -0
  513. package/dist/devices/hilux.d.ts +3 -0
  514. package/dist/devices/hilux.d.ts.map +1 -0
  515. package/dist/devices/hilux.js +54 -0
  516. package/dist/devices/hilux.js.map +1 -0
  517. package/dist/devices/hive.d.ts +3 -0
  518. package/dist/devices/hive.d.ts.map +1 -0
  519. package/dist/devices/hive.js +798 -0
  520. package/dist/devices/hive.js.map +1 -0
  521. package/dist/devices/hoftronic.d.ts +3 -0
  522. package/dist/devices/hoftronic.d.ts.map +1 -0
  523. package/dist/devices/hoftronic.js +56 -0
  524. package/dist/devices/hoftronic.js.map +1 -0
  525. package/dist/devices/homeseer.d.ts +3 -0
  526. package/dist/devices/homeseer.d.ts.map +1 -0
  527. package/dist/devices/homeseer.js +53 -0
  528. package/dist/devices/homeseer.js.map +1 -0
  529. package/dist/devices/hommyn.d.ts +3 -0
  530. package/dist/devices/hommyn.d.ts.map +1 -0
  531. package/dist/devices/hommyn.js +60 -0
  532. package/dist/devices/hommyn.js.map +1 -0
  533. package/dist/devices/honyar.d.ts +3 -0
  534. package/dist/devices/honyar.d.ts.map +1 -0
  535. package/dist/devices/honyar.js +167 -0
  536. package/dist/devices/honyar.js.map +1 -0
  537. package/dist/devices/hornbach.d.ts +3 -0
  538. package/dist/devices/hornbach.d.ts.map +1 -0
  539. package/dist/devices/hornbach.js +138 -0
  540. package/dist/devices/hornbach.js.map +1 -0
  541. package/dist/devices/hzc_electric.d.ts +3 -0
  542. package/dist/devices/hzc_electric.d.ts.map +1 -0
  543. package/dist/devices/hzc_electric.js +102 -0
  544. package/dist/devices/hzc_electric.js.map +1 -0
  545. package/dist/devices/icasa.d.ts +3 -0
  546. package/dist/devices/icasa.d.ts.map +1 -0
  547. package/dist/devices/icasa.js +174 -0
  548. package/dist/devices/icasa.js.map +1 -0
  549. package/dist/devices/idinio.d.ts +3 -0
  550. package/dist/devices/idinio.d.ts.map +1 -0
  551. package/dist/devices/idinio.js +47 -0
  552. package/dist/devices/idinio.js.map +1 -0
  553. package/dist/devices/ihorn.d.ts +3 -0
  554. package/dist/devices/ihorn.d.ts.map +1 -0
  555. package/dist/devices/ihorn.js +105 -0
  556. package/dist/devices/ihorn.js.map +1 -0
  557. package/dist/devices/ikea.d.ts +3 -0
  558. package/dist/devices/ikea.d.ts.map +1 -0
  559. package/dist/devices/ikea.js +1241 -0
  560. package/dist/devices/ikea.js.map +1 -0
  561. package/dist/devices/ilightsin.d.ts +3 -0
  562. package/dist/devices/ilightsin.d.ts.map +1 -0
  563. package/dist/devices/ilightsin.js +59 -0
  564. package/dist/devices/ilightsin.js.map +1 -0
  565. package/dist/devices/iluminize.d.ts +3 -0
  566. package/dist/devices/iluminize.d.ts.map +1 -0
  567. package/dist/devices/iluminize.js +385 -0
  568. package/dist/devices/iluminize.js.map +1 -0
  569. package/dist/devices/ilux.d.ts +3 -0
  570. package/dist/devices/ilux.d.ts.map +1 -0
  571. package/dist/devices/ilux.js +47 -0
  572. package/dist/devices/ilux.js.map +1 -0
  573. package/dist/devices/imhotepcreation.d.ts +3 -0
  574. package/dist/devices/imhotepcreation.d.ts.map +1 -0
  575. package/dist/devices/imhotepcreation.js +240 -0
  576. package/dist/devices/imhotepcreation.js.map +1 -0
  577. package/dist/devices/immax.d.ts +3 -0
  578. package/dist/devices/immax.d.ts.map +1 -0
  579. package/dist/devices/immax.js +471 -0
  580. package/dist/devices/immax.js.map +1 -0
  581. package/dist/devices/imou.d.ts +3 -0
  582. package/dist/devices/imou.d.ts.map +1 -0
  583. package/dist/devices/imou.js +109 -0
  584. package/dist/devices/imou.js.map +1 -0
  585. package/dist/devices/index.d.ts +4 -0
  586. package/dist/devices/index.d.ts.map +1 -0
  587. package/dist/devices/index.js +738 -0
  588. package/dist/devices/index.js.map +1 -0
  589. package/dist/devices/innr.d.ts +3 -0
  590. package/dist/devices/innr.d.ts.map +1 -0
  591. package/dist/devices/innr.js +1033 -0
  592. package/dist/devices/innr.js.map +1 -0
  593. package/dist/devices/inovelli.d.ts +3 -0
  594. package/dist/devices/inovelli.d.ts.map +1 -0
  595. package/dist/devices/inovelli.js +2474 -0
  596. package/dist/devices/inovelli.js.map +1 -0
  597. package/dist/devices/insta.d.ts +3 -0
  598. package/dist/devices/insta.d.ts.map +1 -0
  599. package/dist/devices/insta.js +182 -0
  600. package/dist/devices/insta.js.map +1 -0
  601. package/dist/devices/intuis.d.ts +3 -0
  602. package/dist/devices/intuis.d.ts.map +1 -0
  603. package/dist/devices/intuis.js +95 -0
  604. package/dist/devices/intuis.js.map +1 -0
  605. package/dist/devices/iolloi.d.ts +3 -0
  606. package/dist/devices/iolloi.d.ts.map +1 -0
  607. package/dist/devices/iolloi.js +48 -0
  608. package/dist/devices/iolloi.js.map +1 -0
  609. package/dist/devices/iotperfect.d.ts +3 -0
  610. package/dist/devices/iotperfect.d.ts.map +1 -0
  611. package/dist/devices/iotperfect.js +60 -0
  612. package/dist/devices/iotperfect.js.map +1 -0
  613. package/dist/devices/iris.d.ts +3 -0
  614. package/dist/devices/iris.d.ts.map +1 -0
  615. package/dist/devices/iris.js +208 -0
  616. package/dist/devices/iris.js.map +1 -0
  617. package/dist/devices/istar.d.ts +3 -0
  618. package/dist/devices/istar.d.ts.map +1 -0
  619. package/dist/devices/istar.js +61 -0
  620. package/dist/devices/istar.js.map +1 -0
  621. package/dist/devices/jasco.d.ts +3 -0
  622. package/dist/devices/jasco.d.ts.map +1 -0
  623. package/dist/devices/jasco.js +63 -0
  624. package/dist/devices/jasco.js.map +1 -0
  625. package/dist/devices/javis.d.ts +3 -0
  626. package/dist/devices/javis.d.ts.map +1 -0
  627. package/dist/devices/javis.js +77 -0
  628. package/dist/devices/javis.js.map +1 -0
  629. package/dist/devices/jethome.d.ts +3 -0
  630. package/dist/devices/jethome.d.ts.map +1 -0
  631. package/dist/devices/jethome.js +120 -0
  632. package/dist/devices/jethome.js.map +1 -0
  633. package/dist/devices/jiawen.d.ts +3 -0
  634. package/dist/devices/jiawen.d.ts.map +1 -0
  635. package/dist/devices/jiawen.js +54 -0
  636. package/dist/devices/jiawen.js.map +1 -0
  637. package/dist/devices/jumitech.d.ts +3 -0
  638. package/dist/devices/jumitech.d.ts.map +1 -0
  639. package/dist/devices/jumitech.js +47 -0
  640. package/dist/devices/jumitech.js.map +1 -0
  641. package/dist/devices/jxuan.d.ts +3 -0
  642. package/dist/devices/jxuan.d.ts.map +1 -0
  643. package/dist/devices/jxuan.js +85 -0
  644. package/dist/devices/jxuan.js.map +1 -0
  645. package/dist/devices/kami.d.ts +3 -0
  646. package/dist/devices/kami.d.ts.map +1 -0
  647. package/dist/devices/kami.js +51 -0
  648. package/dist/devices/kami.js.map +1 -0
  649. package/dist/devices/keen_home.d.ts +3 -0
  650. package/dist/devices/keen_home.d.ts.map +1 -0
  651. package/dist/devices/keen_home.js +155 -0
  652. package/dist/devices/keen_home.js.map +1 -0
  653. package/dist/devices/klikaanklikuit.d.ts +3 -0
  654. package/dist/devices/klikaanklikuit.d.ts.map +1 -0
  655. package/dist/devices/klikaanklikuit.js +54 -0
  656. package/dist/devices/klikaanklikuit.js.map +1 -0
  657. package/dist/devices/kmpcil.d.ts +3 -0
  658. package/dist/devices/kmpcil.d.ts.map +1 -0
  659. package/dist/devices/kmpcil.js +212 -0
  660. package/dist/devices/kmpcil.js.map +1 -0
  661. package/dist/devices/konke.d.ts +3 -0
  662. package/dist/devices/konke.d.ts.map +1 -0
  663. package/dist/devices/konke.js +207 -0
  664. package/dist/devices/konke.js.map +1 -0
  665. package/dist/devices/ksentry.d.ts +3 -0
  666. package/dist/devices/ksentry.d.ts.map +1 -0
  667. package/dist/devices/ksentry.js +47 -0
  668. package/dist/devices/ksentry.js.map +1 -0
  669. package/dist/devices/kurvia.d.ts +3 -0
  670. package/dist/devices/kurvia.d.ts.map +1 -0
  671. package/dist/devices/kurvia.js +49 -0
  672. package/dist/devices/kurvia.js.map +1 -0
  673. package/dist/devices/kwikset.d.ts +3 -0
  674. package/dist/devices/kwikset.d.ts.map +1 -0
  675. package/dist/devices/kwikset.js +153 -0
  676. package/dist/devices/kwikset.js.map +1 -0
  677. package/dist/devices/lanesto.d.ts +3 -0
  678. package/dist/devices/lanesto.d.ts.map +1 -0
  679. package/dist/devices/lanesto.js +47 -0
  680. package/dist/devices/lanesto.js.map +1 -0
  681. package/dist/devices/lds.d.ts +3 -0
  682. package/dist/devices/lds.d.ts.map +1 -0
  683. package/dist/devices/lds.js +54 -0
  684. package/dist/devices/lds.js.map +1 -0
  685. package/dist/devices/led_trading.d.ts +3 -0
  686. package/dist/devices/led_trading.d.ts.map +1 -0
  687. package/dist/devices/led_trading.js +108 -0
  688. package/dist/devices/led_trading.js.map +1 -0
  689. package/dist/devices/ledvance.d.ts +3 -0
  690. package/dist/devices/ledvance.d.ts.map +1 -0
  691. package/dist/devices/ledvance.js +407 -0
  692. package/dist/devices/ledvance.js.map +1 -0
  693. package/dist/devices/leedarson.d.ts +3 -0
  694. package/dist/devices/leedarson.d.ts.map +1 -0
  695. package/dist/devices/leedarson.js +180 -0
  696. package/dist/devices/leedarson.js.map +1 -0
  697. package/dist/devices/legrand.d.ts +3 -0
  698. package/dist/devices/legrand.d.ts.map +1 -0
  699. package/dist/devices/legrand.js +809 -0
  700. package/dist/devices/legrand.js.map +1 -0
  701. package/dist/devices/lellki.d.ts +3 -0
  702. package/dist/devices/lellki.d.ts.map +1 -0
  703. package/dist/devices/lellki.js +162 -0
  704. package/dist/devices/lellki.js.map +1 -0
  705. package/dist/devices/letsled.d.ts +3 -0
  706. package/dist/devices/letsled.d.ts.map +1 -0
  707. package/dist/devices/letsled.js +47 -0
  708. package/dist/devices/letsled.js.map +1 -0
  709. package/dist/devices/letv.d.ts +3 -0
  710. package/dist/devices/letv.d.ts.map +1 -0
  711. package/dist/devices/letv.js +86 -0
  712. package/dist/devices/letv.js.map +1 -0
  713. package/dist/devices/leviton.d.ts +3 -0
  714. package/dist/devices/leviton.d.ts.map +1 -0
  715. package/dist/devices/leviton.js +160 -0
  716. package/dist/devices/leviton.js.map +1 -0
  717. package/dist/devices/lg.d.ts +3 -0
  718. package/dist/devices/lg.d.ts.map +1 -0
  719. package/dist/devices/lg.js +61 -0
  720. package/dist/devices/lg.js.map +1 -0
  721. package/dist/devices/lidl.d.ts +3 -0
  722. package/dist/devices/lidl.d.ts.map +1 -0
  723. package/dist/devices/lidl.js +669 -0
  724. package/dist/devices/lidl.js.map +1 -0
  725. package/dist/devices/lifecontrol.d.ts +3 -0
  726. package/dist/devices/lifecontrol.d.ts.map +1 -0
  727. package/dist/devices/lifecontrol.js +141 -0
  728. package/dist/devices/lifecontrol.js.map +1 -0
  729. package/dist/devices/lightsolutions.d.ts +3 -0
  730. package/dist/devices/lightsolutions.d.ts.map +1 -0
  731. package/dist/devices/lightsolutions.js +90 -0
  732. package/dist/devices/lightsolutions.js.map +1 -0
  733. package/dist/devices/lincukoo.d.ts +3 -0
  734. package/dist/devices/lincukoo.d.ts.map +1 -0
  735. package/dist/devices/lincukoo.js +788 -0
  736. package/dist/devices/lincukoo.js.map +1 -0
  737. package/dist/devices/linkind.d.ts +3 -0
  738. package/dist/devices/linkind.d.ts.map +1 -0
  739. package/dist/devices/linkind.js +251 -0
  740. package/dist/devices/linkind.js.map +1 -0
  741. package/dist/devices/linptech.d.ts +3 -0
  742. package/dist/devices/linptech.d.ts.map +1 -0
  743. package/dist/devices/linptech.js +157 -0
  744. package/dist/devices/linptech.js.map +1 -0
  745. package/dist/devices/livingwise.d.ts +3 -0
  746. package/dist/devices/livingwise.d.ts.map +1 -0
  747. package/dist/devices/livingwise.js +115 -0
  748. package/dist/devices/livingwise.js.map +1 -0
  749. package/dist/devices/livolo.d.ts +3 -0
  750. package/dist/devices/livolo.d.ts.map +1 -0
  751. package/dist/devices/livolo.js +263 -0
  752. package/dist/devices/livolo.js.map +1 -0
  753. package/dist/devices/lixee.d.ts +3 -0
  754. package/dist/devices/lixee.d.ts.map +1 -0
  755. package/dist/devices/lixee.js +2038 -0
  756. package/dist/devices/lixee.js.map +1 -0
  757. package/dist/devices/lonsonho.d.ts +3 -0
  758. package/dist/devices/lonsonho.d.ts.map +1 -0
  759. package/dist/devices/lonsonho.js +310 -0
  760. package/dist/devices/lonsonho.js.map +1 -0
  761. package/dist/devices/ls.d.ts +3 -0
  762. package/dist/devices/ls.d.ts.map +1 -0
  763. package/dist/devices/ls.js +152 -0
  764. package/dist/devices/ls.js.map +1 -0
  765. package/dist/devices/lubeez.d.ts +3 -0
  766. package/dist/devices/lubeez.d.ts.map +1 -0
  767. package/dist/devices/lubeez.js +47 -0
  768. package/dist/devices/lubeez.js.map +1 -0
  769. package/dist/devices/lumi.d.ts +3 -0
  770. package/dist/devices/lumi.d.ts.map +1 -0
  771. package/dist/devices/lumi.js +5345 -0
  772. package/dist/devices/lumi.js.map +1 -0
  773. package/dist/devices/lupus.d.ts +3 -0
  774. package/dist/devices/lupus.d.ts.map +1 -0
  775. package/dist/devices/lupus.js +94 -0
  776. package/dist/devices/lupus.js.map +1 -0
  777. package/dist/devices/lutron.d.ts +3 -0
  778. package/dist/devices/lutron.d.ts.map +1 -0
  779. package/dist/devices/lutron.js +81 -0
  780. package/dist/devices/lutron.js.map +1 -0
  781. package/dist/devices/lux.d.ts +3 -0
  782. package/dist/devices/lux.d.ts.map +1 -0
  783. package/dist/devices/lux.js +87 -0
  784. package/dist/devices/lux.js.map +1 -0
  785. package/dist/devices/lytko.d.ts +3 -0
  786. package/dist/devices/lytko.d.ts.map +1 -0
  787. package/dist/devices/lytko.js +1809 -0
  788. package/dist/devices/lytko.js.map +1 -0
  789. package/dist/devices/m_elec.d.ts +3 -0
  790. package/dist/devices/m_elec.d.ts.map +1 -0
  791. package/dist/devices/m_elec.js +68 -0
  792. package/dist/devices/m_elec.js.map +1 -0
  793. package/dist/devices/makegood.d.ts +3 -0
  794. package/dist/devices/makegood.d.ts.map +1 -0
  795. package/dist/devices/makegood.js +117 -0
  796. package/dist/devices/makegood.js.map +1 -0
  797. package/dist/devices/matcall_bv.d.ts +3 -0
  798. package/dist/devices/matcall_bv.d.ts.map +1 -0
  799. package/dist/devices/matcall_bv.js +54 -0
  800. package/dist/devices/matcall_bv.js.map +1 -0
  801. package/dist/devices/mazda.d.ts +3 -0
  802. package/dist/devices/mazda.d.ts.map +1 -0
  803. package/dist/devices/mazda.js +146 -0
  804. package/dist/devices/mazda.js.map +1 -0
  805. package/dist/devices/meazon.d.ts +3 -0
  806. package/dist/devices/meazon.d.ts.map +1 -0
  807. package/dist/devices/meazon.js +95 -0
  808. package/dist/devices/meazon.js.map +1 -0
  809. package/dist/devices/mercator.d.ts +3 -0
  810. package/dist/devices/mercator.d.ts.map +1 -0
  811. package/dist/devices/mercator.js +242 -0
  812. package/dist/devices/mercator.js.map +1 -0
  813. package/dist/devices/miboxer.d.ts +3 -0
  814. package/dist/devices/miboxer.d.ts.map +1 -0
  815. package/dist/devices/miboxer.js +304 -0
  816. package/dist/devices/miboxer.js.map +1 -0
  817. package/dist/devices/micromatic.d.ts +3 -0
  818. package/dist/devices/micromatic.d.ts.map +1 -0
  819. package/dist/devices/micromatic.js +47 -0
  820. package/dist/devices/micromatic.js.map +1 -0
  821. package/dist/devices/mill.d.ts +3 -0
  822. package/dist/devices/mill.d.ts.map +1 -0
  823. package/dist/devices/mill.js +52 -0
  824. package/dist/devices/mill.js.map +1 -0
  825. package/dist/devices/mindy.d.ts +3 -0
  826. package/dist/devices/mindy.d.ts.map +1 -0
  827. package/dist/devices/mindy.js +379 -0
  828. package/dist/devices/mindy.js.map +1 -0
  829. package/dist/devices/modular.d.ts +3 -0
  830. package/dist/devices/modular.d.ts.map +1 -0
  831. package/dist/devices/modular.js +47 -0
  832. package/dist/devices/modular.js.map +1 -0
  833. package/dist/devices/moes.d.ts +3 -0
  834. package/dist/devices/moes.d.ts.map +1 -0
  835. package/dist/devices/moes.js +2368 -0
  836. package/dist/devices/moes.js.map +1 -0
  837. package/dist/devices/muller_licht.d.ts +3 -0
  838. package/dist/devices/muller_licht.d.ts.map +1 -0
  839. package/dist/devices/muller_licht.js +366 -0
  840. package/dist/devices/muller_licht.js.map +1 -0
  841. package/dist/devices/multir.d.ts +3 -0
  842. package/dist/devices/multir.d.ts.map +1 -0
  843. package/dist/devices/multir.js +152 -0
  844. package/dist/devices/multir.js.map +1 -0
  845. package/dist/devices/multiterm.d.ts +3 -0
  846. package/dist/devices/multiterm.d.ts.map +1 -0
  847. package/dist/devices/multiterm.js +119 -0
  848. package/dist/devices/multiterm.js.map +1 -0
  849. package/dist/devices/namron.d.ts +3 -0
  850. package/dist/devices/namron.d.ts.map +1 -0
  851. package/dist/devices/namron.js +2004 -0
  852. package/dist/devices/namron.js.map +1 -0
  853. package/dist/devices/nanoleaf.d.ts +3 -0
  854. package/dist/devices/nanoleaf.d.ts.map +1 -0
  855. package/dist/devices/nanoleaf.js +47 -0
  856. package/dist/devices/nanoleaf.js.map +1 -0
  857. package/dist/devices/nedis.d.ts +3 -0
  858. package/dist/devices/nedis.d.ts.map +1 -0
  859. package/dist/devices/nedis.js +87 -0
  860. package/dist/devices/nedis.js.map +1 -0
  861. package/dist/devices/neo.d.ts +3 -0
  862. package/dist/devices/neo.d.ts.map +1 -0
  863. package/dist/devices/neo.js +526 -0
  864. package/dist/devices/neo.js.map +1 -0
  865. package/dist/devices/net2grid.d.ts +3 -0
  866. package/dist/devices/net2grid.d.ts.map +1 -0
  867. package/dist/devices/net2grid.js +64 -0
  868. package/dist/devices/net2grid.js.map +1 -0
  869. package/dist/devices/netvox.d.ts +3 -0
  870. package/dist/devices/netvox.d.ts.map +1 -0
  871. package/dist/devices/netvox.js +71 -0
  872. package/dist/devices/netvox.js.map +1 -0
  873. package/dist/devices/nexelec.d.ts +3 -0
  874. package/dist/devices/nexelec.d.ts.map +1 -0
  875. package/dist/devices/nexelec.js +47 -0
  876. package/dist/devices/nexelec.js.map +1 -0
  877. package/dist/devices/niko.d.ts +3 -0
  878. package/dist/devices/niko.d.ts.map +1 -0
  879. package/dist/devices/niko.js +769 -0
  880. package/dist/devices/niko.js.map +1 -0
  881. package/dist/devices/ninja_blocks.d.ts +3 -0
  882. package/dist/devices/ninja_blocks.d.ts.map +1 -0
  883. package/dist/devices/ninja_blocks.js +60 -0
  884. package/dist/devices/ninja_blocks.js.map +1 -0
  885. package/dist/devices/niviss.d.ts +3 -0
  886. package/dist/devices/niviss.d.ts.map +1 -0
  887. package/dist/devices/niviss.js +47 -0
  888. package/dist/devices/niviss.js.map +1 -0
  889. package/dist/devices/nobo.d.ts +3 -0
  890. package/dist/devices/nobo.d.ts.map +1 -0
  891. package/dist/devices/nobo.js +88 -0
  892. package/dist/devices/nobo.js.map +1 -0
  893. package/dist/devices/nodon.d.ts +3 -0
  894. package/dist/devices/nodon.d.ts.map +1 -0
  895. package/dist/devices/nodon.js +483 -0
  896. package/dist/devices/nodon.js.map +1 -0
  897. package/dist/devices/nordtronic.d.ts +3 -0
  898. package/dist/devices/nordtronic.d.ts.map +1 -0
  899. package/dist/devices/nordtronic.js +95 -0
  900. package/dist/devices/nordtronic.js.map +1 -0
  901. package/dist/devices/nous.d.ts +3 -0
  902. package/dist/devices/nous.d.ts.map +1 -0
  903. package/dist/devices/nous.js +367 -0
  904. package/dist/devices/nous.js.map +1 -0
  905. package/dist/devices/novo.d.ts +3 -0
  906. package/dist/devices/novo.d.ts.map +1 -0
  907. package/dist/devices/novo.js +53 -0
  908. package/dist/devices/novo.js.map +1 -0
  909. package/dist/devices/nue_3a.d.ts +3 -0
  910. package/dist/devices/nue_3a.d.ts.map +1 -0
  911. package/dist/devices/nue_3a.js +359 -0
  912. package/dist/devices/nue_3a.js.map +1 -0
  913. package/dist/devices/nyce.d.ts +3 -0
  914. package/dist/devices/nyce.d.ts.map +1 -0
  915. package/dist/devices/nyce.js +124 -0
  916. package/dist/devices/nyce.js.map +1 -0
  917. package/dist/devices/onenuo.d.ts +3 -0
  918. package/dist/devices/onenuo.d.ts.map +1 -0
  919. package/dist/devices/onenuo.js +83 -0
  920. package/dist/devices/onenuo.js.map +1 -0
  921. package/dist/devices/onesti.d.ts +3 -0
  922. package/dist/devices/onesti.d.ts.map +1 -0
  923. package/dist/devices/onesti.js +265 -0
  924. package/dist/devices/onesti.js.map +1 -0
  925. package/dist/devices/onokom.d.ts +3 -0
  926. package/dist/devices/onokom.d.ts.map +1 -0
  927. package/dist/devices/onokom.js +2715 -0
  928. package/dist/devices/onokom.js.map +1 -0
  929. package/dist/devices/openlumi.d.ts +3 -0
  930. package/dist/devices/openlumi.d.ts.map +1 -0
  931. package/dist/devices/openlumi.js +47 -0
  932. package/dist/devices/openlumi.js.map +1 -0
  933. package/dist/devices/orvibo.d.ts +12 -0
  934. package/dist/devices/orvibo.d.ts.map +1 -0
  935. package/dist/devices/orvibo.js +715 -0
  936. package/dist/devices/orvibo.js.map +1 -0
  937. package/dist/devices/orztech.d.ts +3 -0
  938. package/dist/devices/orztech.d.ts.map +1 -0
  939. package/dist/devices/orztech.js +195 -0
  940. package/dist/devices/orztech.js.map +1 -0
  941. package/dist/devices/osram.d.ts +3 -0
  942. package/dist/devices/osram.d.ts.map +1 -0
  943. package/dist/devices/osram.js +513 -0
  944. package/dist/devices/osram.js.map +1 -0
  945. package/dist/devices/oujiabao.d.ts +3 -0
  946. package/dist/devices/oujiabao.d.ts.map +1 -0
  947. package/dist/devices/oujiabao.js +51 -0
  948. package/dist/devices/oujiabao.js.map +1 -0
  949. package/dist/devices/owon.d.ts +3 -0
  950. package/dist/devices/owon.d.ts.map +1 -0
  951. package/dist/devices/owon.js +888 -0
  952. package/dist/devices/owon.js.map +1 -0
  953. package/dist/devices/ozsmartthings.d.ts +3 -0
  954. package/dist/devices/ozsmartthings.d.ts.map +1 -0
  955. package/dist/devices/ozsmartthings.js +47 -0
  956. package/dist/devices/ozsmartthings.js.map +1 -0
  957. package/dist/devices/paul_neuhaus.d.ts +3 -0
  958. package/dist/devices/paul_neuhaus.d.ts.map +1 -0
  959. package/dist/devices/paul_neuhaus.js +190 -0
  960. package/dist/devices/paul_neuhaus.js.map +1 -0
  961. package/dist/devices/paulmann.d.ts +3 -0
  962. package/dist/devices/paulmann.d.ts.map +1 -0
  963. package/dist/devices/paulmann.js +426 -0
  964. package/dist/devices/paulmann.js.map +1 -0
  965. package/dist/devices/peq.d.ts +3 -0
  966. package/dist/devices/peq.d.ts.map +1 -0
  967. package/dist/devices/peq.js +60 -0
  968. package/dist/devices/peq.js.map +1 -0
  969. package/dist/devices/perenio.d.ts +3 -0
  970. package/dist/devices/perenio.d.ts.map +1 -0
  971. package/dist/devices/perenio.js +461 -0
  972. package/dist/devices/perenio.js.map +1 -0
  973. package/dist/devices/philio.d.ts +3 -0
  974. package/dist/devices/philio.d.ts.map +1 -0
  975. package/dist/devices/philio.js +48 -0
  976. package/dist/devices/philio.js.map +1 -0
  977. package/dist/devices/philips.d.ts +3 -0
  978. package/dist/devices/philips.d.ts.map +1 -0
  979. package/dist/devices/philips.js +4948 -0
  980. package/dist/devices/philips.js.map +1 -0
  981. package/dist/devices/plaid.d.ts +3 -0
  982. package/dist/devices/plaid.d.ts.map +1 -0
  983. package/dist/devices/plaid.js +61 -0
  984. package/dist/devices/plaid.js.map +1 -0
  985. package/dist/devices/plugwise.d.ts +3 -0
  986. package/dist/devices/plugwise.d.ts.map +1 -0
  987. package/dist/devices/plugwise.js +217 -0
  988. package/dist/devices/plugwise.js.map +1 -0
  989. package/dist/devices/profalux.d.ts +3 -0
  990. package/dist/devices/profalux.d.ts.map +1 -0
  991. package/dist/devices/profalux.js +215 -0
  992. package/dist/devices/profalux.js.map +1 -0
  993. package/dist/devices/prolight.d.ts +3 -0
  994. package/dist/devices/prolight.d.ts.map +1 -0
  995. package/dist/devices/prolight.js +111 -0
  996. package/dist/devices/prolight.js.map +1 -0
  997. package/dist/devices/purmo.d.ts +3 -0
  998. package/dist/devices/purmo.d.ts.map +1 -0
  999. package/dist/devices/purmo.js +91 -0
  1000. package/dist/devices/purmo.js.map +1 -0
  1001. package/dist/devices/pushok.d.ts +3 -0
  1002. package/dist/devices/pushok.d.ts.map +1 -0
  1003. package/dist/devices/pushok.js +736 -0
  1004. package/dist/devices/pushok.js.map +1 -0
  1005. package/dist/devices/qa.d.ts +3 -0
  1006. package/dist/devices/qa.d.ts.map +1 -0
  1007. package/dist/devices/qa.js +445 -0
  1008. package/dist/devices/qa.js.map +1 -0
  1009. package/dist/devices/qmotion.d.ts +3 -0
  1010. package/dist/devices/qmotion.d.ts.map +1 -0
  1011. package/dist/devices/qmotion.js +69 -0
  1012. package/dist/devices/qmotion.js.map +1 -0
  1013. package/dist/devices/qoto.d.ts +3 -0
  1014. package/dist/devices/qoto.d.ts.map +1 -0
  1015. package/dist/devices/qoto.js +83 -0
  1016. package/dist/devices/qoto.js.map +1 -0
  1017. package/dist/devices/quirky.d.ts +8 -0
  1018. package/dist/devices/quirky.d.ts.map +1 -0
  1019. package/dist/devices/quirky.js +47 -0
  1020. package/dist/devices/quirky.js.map +1 -0
  1021. package/dist/devices/quotra.d.ts +3 -0
  1022. package/dist/devices/quotra.d.ts.map +1 -0
  1023. package/dist/devices/quotra.js +54 -0
  1024. package/dist/devices/quotra.js.map +1 -0
  1025. package/dist/devices/rademacher.d.ts +3 -0
  1026. package/dist/devices/rademacher.d.ts.map +1 -0
  1027. package/dist/devices/rademacher.js +61 -0
  1028. package/dist/devices/rademacher.js.map +1 -0
  1029. package/dist/devices/radium.d.ts +3 -0
  1030. package/dist/devices/radium.d.ts.map +1 -0
  1031. package/dist/devices/radium.js +47 -0
  1032. package/dist/devices/radium.js.map +1 -0
  1033. package/dist/devices/raex.d.ts +3 -0
  1034. package/dist/devices/raex.d.ts.map +1 -0
  1035. package/dist/devices/raex.js +47 -0
  1036. package/dist/devices/raex.js.map +1 -0
  1037. package/dist/devices/rgb_genie.d.ts +3 -0
  1038. package/dist/devices/rgb_genie.d.ts.map +1 -0
  1039. package/dist/devices/rgb_genie.js +277 -0
  1040. package/dist/devices/rgb_genie.js.map +1 -0
  1041. package/dist/devices/robb.d.ts +3 -0
  1042. package/dist/devices/robb.d.ts.map +1 -0
  1043. package/dist/devices/robb.js +492 -0
  1044. package/dist/devices/robb.js.map +1 -0
  1045. package/dist/devices/roome.d.ts +3 -0
  1046. package/dist/devices/roome.d.ts.map +1 -0
  1047. package/dist/devices/roome.js +51 -0
  1048. package/dist/devices/roome.js.map +1 -0
  1049. package/dist/devices/rtx.d.ts +3 -0
  1050. package/dist/devices/rtx.d.ts.map +1 -0
  1051. package/dist/devices/rtx.js +143 -0
  1052. package/dist/devices/rtx.js.map +1 -0
  1053. package/dist/devices/salus_controls.d.ts +3 -0
  1054. package/dist/devices/salus_controls.d.ts.map +1 -0
  1055. package/dist/devices/salus_controls.js +222 -0
  1056. package/dist/devices/salus_controls.js.map +1 -0
  1057. package/dist/devices/samotech.d.ts +3 -0
  1058. package/dist/devices/samotech.d.ts.map +1 -0
  1059. package/dist/devices/samotech.js +123 -0
  1060. package/dist/devices/samotech.js.map +1 -0
  1061. package/dist/devices/saswell.d.ts +3 -0
  1062. package/dist/devices/saswell.d.ts.map +1 -0
  1063. package/dist/devices/saswell.js +120 -0
  1064. package/dist/devices/saswell.js.map +1 -0
  1065. package/dist/devices/sber.d.ts +3 -0
  1066. package/dist/devices/sber.d.ts.map +1 -0
  1067. package/dist/devices/sber.js +1921 -0
  1068. package/dist/devices/sber.js.map +1 -0
  1069. package/dist/devices/scanproducts.d.ts +3 -0
  1070. package/dist/devices/scanproducts.d.ts.map +1 -0
  1071. package/dist/devices/scanproducts.js +54 -0
  1072. package/dist/devices/scanproducts.js.map +1 -0
  1073. package/dist/devices/schlage.d.ts +3 -0
  1074. package/dist/devices/schlage.d.ts.map +1 -0
  1075. package/dist/devices/schlage.js +60 -0
  1076. package/dist/devices/schlage.js.map +1 -0
  1077. package/dist/devices/schneider_electric.d.ts +10 -0
  1078. package/dist/devices/schneider_electric.d.ts.map +1 -0
  1079. package/dist/devices/schneider_electric.js +2801 -0
  1080. package/dist/devices/schneider_electric.js.map +1 -0
  1081. package/dist/devices/schwaiger.d.ts +3 -0
  1082. package/dist/devices/schwaiger.d.ts.map +1 -0
  1083. package/dist/devices/schwaiger.js +105 -0
  1084. package/dist/devices/schwaiger.js.map +1 -0
  1085. package/dist/devices/seastar_intelligence.d.ts +3 -0
  1086. package/dist/devices/seastar_intelligence.d.ts.map +1 -0
  1087. package/dist/devices/seastar_intelligence.js +52 -0
  1088. package/dist/devices/seastar_intelligence.js.map +1 -0
  1089. package/dist/devices/securifi.d.ts +3 -0
  1090. package/dist/devices/securifi.d.ts.map +1 -0
  1091. package/dist/devices/securifi.js +79 -0
  1092. package/dist/devices/securifi.js.map +1 -0
  1093. package/dist/devices/sengled.d.ts +6 -0
  1094. package/dist/devices/sengled.d.ts.map +1 -0
  1095. package/dist/devices/sengled.js +395 -0
  1096. package/dist/devices/sengled.js.map +1 -0
  1097. package/dist/devices/senoro.d.ts +3 -0
  1098. package/dist/devices/senoro.d.ts.map +1 -0
  1099. package/dist/devices/senoro.js +64 -0
  1100. package/dist/devices/senoro.js.map +1 -0
  1101. package/dist/devices/sercomm.d.ts +3 -0
  1102. package/dist/devices/sercomm.d.ts.map +1 -0
  1103. package/dist/devices/sercomm.js +193 -0
  1104. package/dist/devices/sercomm.js.map +1 -0
  1105. package/dist/devices/shade_control.d.ts +3 -0
  1106. package/dist/devices/shade_control.d.ts.map +1 -0
  1107. package/dist/devices/shade_control.js +61 -0
  1108. package/dist/devices/shade_control.js.map +1 -0
  1109. package/dist/devices/shelly.d.ts +3 -0
  1110. package/dist/devices/shelly.d.ts.map +1 -0
  1111. package/dist/devices/shelly.js +1304 -0
  1112. package/dist/devices/shelly.js.map +1 -0
  1113. package/dist/devices/shenzhen_homa.d.ts +3 -0
  1114. package/dist/devices/shenzhen_homa.d.ts.map +1 -0
  1115. package/dist/devices/shenzhen_homa.js +143 -0
  1116. package/dist/devices/shenzhen_homa.js.map +1 -0
  1117. package/dist/devices/shinasystem.d.ts +3 -0
  1118. package/dist/devices/shinasystem.d.ts.map +1 -0
  1119. package/dist/devices/shinasystem.js +1322 -0
  1120. package/dist/devices/shinasystem.js.map +1 -0
  1121. package/dist/devices/shyugj.d.ts +3 -0
  1122. package/dist/devices/shyugj.d.ts.map +1 -0
  1123. package/dist/devices/shyugj.js +53 -0
  1124. package/dist/devices/shyugj.js.map +1 -0
  1125. package/dist/devices/siglis.d.ts +3 -0
  1126. package/dist/devices/siglis.d.ts.map +1 -0
  1127. package/dist/devices/siglis.js +440 -0
  1128. package/dist/devices/siglis.js.map +1 -0
  1129. package/dist/devices/sikom.d.ts +3 -0
  1130. package/dist/devices/sikom.d.ts.map +1 -0
  1131. package/dist/devices/sikom.js +64 -0
  1132. package/dist/devices/sikom.js.map +1 -0
  1133. package/dist/devices/silicon_labs.d.ts +3 -0
  1134. package/dist/devices/silicon_labs.d.ts.map +1 -0
  1135. package/dist/devices/silicon_labs.js +47 -0
  1136. package/dist/devices/silicon_labs.js.map +1 -0
  1137. package/dist/devices/simon.d.ts +3 -0
  1138. package/dist/devices/simon.d.ts.map +1 -0
  1139. package/dist/devices/simon.js +54 -0
  1140. package/dist/devices/simon.js.map +1 -0
  1141. package/dist/devices/simpla_home.d.ts +3 -0
  1142. package/dist/devices/simpla_home.d.ts.map +1 -0
  1143. package/dist/devices/simpla_home.js +97 -0
  1144. package/dist/devices/simpla_home.js.map +1 -0
  1145. package/dist/devices/sinope.d.ts +3 -0
  1146. package/dist/devices/sinope.d.ts.map +1 -0
  1147. package/dist/devices/sinope.js +2015 -0
  1148. package/dist/devices/sinope.js.map +1 -0
  1149. package/dist/devices/siterwell.d.ts +3 -0
  1150. package/dist/devices/siterwell.d.ts.map +1 -0
  1151. package/dist/devices/siterwell.js +107 -0
  1152. package/dist/devices/siterwell.js.map +1 -0
  1153. package/dist/devices/skydance.d.ts +3 -0
  1154. package/dist/devices/skydance.d.ts.map +1 -0
  1155. package/dist/devices/skydance.js +138 -0
  1156. package/dist/devices/skydance.js.map +1 -0
  1157. package/dist/devices/slacky_diy.d.ts +3 -0
  1158. package/dist/devices/slacky_diy.d.ts.map +1 -0
  1159. package/dist/devices/slacky_diy.js +3694 -0
  1160. package/dist/devices/slacky_diy.js.map +1 -0
  1161. package/dist/devices/slv.d.ts +3 -0
  1162. package/dist/devices/slv.d.ts.map +1 -0
  1163. package/dist/devices/slv.js +77 -0
  1164. package/dist/devices/slv.js.map +1 -0
  1165. package/dist/devices/smarli.d.ts +3 -0
  1166. package/dist/devices/smarli.d.ts.map +1 -0
  1167. package/dist/devices/smarli.js +99 -0
  1168. package/dist/devices/smarli.js.map +1 -0
  1169. package/dist/devices/smart9.d.ts +3 -0
  1170. package/dist/devices/smart9.d.ts.map +1 -0
  1171. package/dist/devices/smart9.js +58 -0
  1172. package/dist/devices/smart9.js.map +1 -0
  1173. package/dist/devices/smart_home_pty.d.ts +3 -0
  1174. package/dist/devices/smart_home_pty.d.ts.map +1 -0
  1175. package/dist/devices/smart_home_pty.js +54 -0
  1176. package/dist/devices/smart_home_pty.js.map +1 -0
  1177. package/dist/devices/smartenit.d.ts +3 -0
  1178. package/dist/devices/smartenit.d.ts.map +1 -0
  1179. package/dist/devices/smartenit.js +77 -0
  1180. package/dist/devices/smartenit.js.map +1 -0
  1181. package/dist/devices/smartthings.d.ts +26 -0
  1182. package/dist/devices/smartthings.d.ts.map +1 -0
  1183. package/dist/devices/smartthings.js +571 -0
  1184. package/dist/devices/smartthings.js.map +1 -0
  1185. package/dist/devices/smartwings.d.ts +3 -0
  1186. package/dist/devices/smartwings.d.ts.map +1 -0
  1187. package/dist/devices/smartwings.js +60 -0
  1188. package/dist/devices/smartwings.js.map +1 -0
  1189. package/dist/devices/smlight.d.ts +3 -0
  1190. package/dist/devices/smlight.d.ts.map +1 -0
  1191. package/dist/devices/smlight.js +73 -0
  1192. package/dist/devices/smlight.js.map +1 -0
  1193. package/dist/devices/soanalarm.d.ts +3 -0
  1194. package/dist/devices/soanalarm.d.ts.map +1 -0
  1195. package/dist/devices/soanalarm.js +58 -0
  1196. package/dist/devices/soanalarm.js.map +1 -0
  1197. package/dist/devices/sohan_electric.d.ts +3 -0
  1198. package/dist/devices/sohan_electric.d.ts.map +1 -0
  1199. package/dist/devices/sohan_electric.js +49 -0
  1200. package/dist/devices/sohan_electric.js.map +1 -0
  1201. package/dist/devices/solaredge.d.ts +3 -0
  1202. package/dist/devices/solaredge.d.ts.map +1 -0
  1203. package/dist/devices/solaredge.js +47 -0
  1204. package/dist/devices/solaredge.js.map +1 -0
  1205. package/dist/devices/soma.d.ts +3 -0
  1206. package/dist/devices/soma.d.ts.map +1 -0
  1207. package/dist/devices/soma.js +47 -0
  1208. package/dist/devices/soma.js.map +1 -0
  1209. package/dist/devices/somfy.d.ts +3 -0
  1210. package/dist/devices/somfy.d.ts.map +1 -0
  1211. package/dist/devices/somfy.js +173 -0
  1212. package/dist/devices/somfy.js.map +1 -0
  1213. package/dist/devices/somgoms.d.ts +3 -0
  1214. package/dist/devices/somgoms.d.ts.map +1 -0
  1215. package/dist/devices/somgoms.js +80 -0
  1216. package/dist/devices/somgoms.js.map +1 -0
  1217. package/dist/devices/sonoff.d.ts +42 -0
  1218. package/dist/devices/sonoff.d.ts.map +1 -0
  1219. package/dist/devices/sonoff.js +4921 -0
  1220. package/dist/devices/sonoff.js.map +1 -0
  1221. package/dist/devices/sowilo.d.ts +3 -0
  1222. package/dist/devices/sowilo.d.ts.map +1 -0
  1223. package/dist/devices/sowilo.js +47 -0
  1224. package/dist/devices/sowilo.js.map +1 -0
  1225. package/dist/devices/spacetronik.d.ts +3 -0
  1226. package/dist/devices/spacetronik.d.ts.map +1 -0
  1227. package/dist/devices/spacetronik.js +53 -0
  1228. package/dist/devices/spacetronik.js.map +1 -0
  1229. package/dist/devices/spotmau.d.ts +3 -0
  1230. package/dist/devices/spotmau.d.ts.map +1 -0
  1231. package/dist/devices/spotmau.js +74 -0
  1232. package/dist/devices/spotmau.js.map +1 -0
  1233. package/dist/devices/sprut.d.ts +3 -0
  1234. package/dist/devices/sprut.d.ts.map +1 -0
  1235. package/dist/devices/sprut.js +328 -0
  1236. package/dist/devices/sprut.js.map +1 -0
  1237. package/dist/devices/stello.d.ts +3 -0
  1238. package/dist/devices/stello.d.ts.map +1 -0
  1239. package/dist/devices/stello.js +142 -0
  1240. package/dist/devices/stello.js.map +1 -0
  1241. package/dist/devices/stelpro.d.ts +3 -0
  1242. package/dist/devices/stelpro.d.ts.map +1 -0
  1243. package/dist/devices/stelpro.js +376 -0
  1244. package/dist/devices/stelpro.js.map +1 -0
  1245. package/dist/devices/sunricher.d.ts +30 -0
  1246. package/dist/devices/sunricher.d.ts.map +1 -0
  1247. package/dist/devices/sunricher.js +2337 -0
  1248. package/dist/devices/sunricher.js.map +1 -0
  1249. package/dist/devices/superled.d.ts +3 -0
  1250. package/dist/devices/superled.d.ts.map +1 -0
  1251. package/dist/devices/superled.js +47 -0
  1252. package/dist/devices/superled.js.map +1 -0
  1253. package/dist/devices/swann.d.ts +3 -0
  1254. package/dist/devices/swann.d.ts.map +1 -0
  1255. package/dist/devices/swann.js +69 -0
  1256. package/dist/devices/swann.js.map +1 -0
  1257. package/dist/devices/sylvania.d.ts +3 -0
  1258. package/dist/devices/sylvania.d.ts.map +1 -0
  1259. package/dist/devices/sylvania.js +223 -0
  1260. package/dist/devices/sylvania.js.map +1 -0
  1261. package/dist/devices/tapestry.d.ts +3 -0
  1262. package/dist/devices/tapestry.d.ts.map +1 -0
  1263. package/dist/devices/tapestry.js +52 -0
  1264. package/dist/devices/tapestry.js.map +1 -0
  1265. package/dist/devices/task_lighting.d.ts +3 -0
  1266. package/dist/devices/task_lighting.d.ts.map +1 -0
  1267. package/dist/devices/task_lighting.js +47 -0
  1268. package/dist/devices/task_lighting.js.map +1 -0
  1269. package/dist/devices/tci.d.ts +3 -0
  1270. package/dist/devices/tci.d.ts.map +1 -0
  1271. package/dist/devices/tci.js +68 -0
  1272. package/dist/devices/tci.js.map +1 -0
  1273. package/dist/devices/tcl.d.ts +3 -0
  1274. package/dist/devices/tcl.d.ts.map +1 -0
  1275. package/dist/devices/tcl.js +47 -0
  1276. package/dist/devices/tcl.js.map +1 -0
  1277. package/dist/devices/tech.d.ts +3 -0
  1278. package/dist/devices/tech.d.ts.map +1 -0
  1279. package/dist/devices/tech.js +213 -0
  1280. package/dist/devices/tech.js.map +1 -0
  1281. package/dist/devices/technicolor.d.ts +3 -0
  1282. package/dist/devices/technicolor.d.ts.map +1 -0
  1283. package/dist/devices/technicolor.js +85 -0
  1284. package/dist/devices/technicolor.js.map +1 -0
  1285. package/dist/devices/terncy.d.ts +3 -0
  1286. package/dist/devices/terncy.d.ts.map +1 -0
  1287. package/dist/devices/terncy.js +192 -0
  1288. package/dist/devices/terncy.js.map +1 -0
  1289. package/dist/devices/the_light_group.d.ts +3 -0
  1290. package/dist/devices/the_light_group.d.ts.map +1 -0
  1291. package/dist/devices/the_light_group.js +145 -0
  1292. package/dist/devices/the_light_group.js.map +1 -0
  1293. package/dist/devices/third_reality.d.ts +3 -0
  1294. package/dist/devices/third_reality.d.ts.map +1 -0
  1295. package/dist/devices/third_reality.js +1067 -0
  1296. package/dist/devices/third_reality.js.map +1 -0
  1297. package/dist/devices/tis_control.d.ts +3 -0
  1298. package/dist/devices/tis_control.d.ts.map +1 -0
  1299. package/dist/devices/tis_control.js +47 -0
  1300. package/dist/devices/tis_control.js.map +1 -0
  1301. package/dist/devices/titan_products.d.ts +3 -0
  1302. package/dist/devices/titan_products.d.ts.map +1 -0
  1303. package/dist/devices/titan_products.js +58 -0
  1304. package/dist/devices/titan_products.js.map +1 -0
  1305. package/dist/devices/tlwglobal.d.ts +3 -0
  1306. package/dist/devices/tlwglobal.d.ts.map +1 -0
  1307. package/dist/devices/tlwglobal.js +64 -0
  1308. package/dist/devices/tlwglobal.js.map +1 -0
  1309. package/dist/devices/tnce.d.ts +3 -0
  1310. package/dist/devices/tnce.d.ts.map +1 -0
  1311. package/dist/devices/tnce.js +54 -0
  1312. package/dist/devices/tnce.js.map +1 -0
  1313. package/dist/devices/tplink.d.ts +3 -0
  1314. package/dist/devices/tplink.d.ts.map +1 -0
  1315. package/dist/devices/tplink.js +77 -0
  1316. package/dist/devices/tplink.js.map +1 -0
  1317. package/dist/devices/trust.d.ts +3 -0
  1318. package/dist/devices/trust.d.ts.map +1 -0
  1319. package/dist/devices/trust.js +180 -0
  1320. package/dist/devices/trust.js.map +1 -0
  1321. package/dist/devices/tubeszb.d.ts +3 -0
  1322. package/dist/devices/tubeszb.d.ts.map +1 -0
  1323. package/dist/devices/tubeszb.js +56 -0
  1324. package/dist/devices/tubeszb.js.map +1 -0
  1325. package/dist/devices/tuya.d.ts +3 -0
  1326. package/dist/devices/tuya.d.ts.map +1 -0
  1327. package/dist/devices/tuya.js +24771 -0
  1328. package/dist/devices/tuya.js.map +1 -0
  1329. package/dist/devices/ubisys.d.ts +3 -0
  1330. package/dist/devices/ubisys.d.ts.map +1 -0
  1331. package/dist/devices/ubisys.js +1295 -0
  1332. package/dist/devices/ubisys.js.map +1 -0
  1333. package/dist/devices/uhome.d.ts +3 -0
  1334. package/dist/devices/uhome.d.ts.map +1 -0
  1335. package/dist/devices/uhome.js +60 -0
  1336. package/dist/devices/uhome.js.map +1 -0
  1337. package/dist/devices/universal_electronics_inc.d.ts +3 -0
  1338. package/dist/devices/universal_electronics_inc.d.ts.map +1 -0
  1339. package/dist/devices/universal_electronics_inc.js +156 -0
  1340. package/dist/devices/universal_electronics_inc.js.map +1 -0
  1341. package/dist/devices/vav.d.ts +3 -0
  1342. package/dist/devices/vav.d.ts.map +1 -0
  1343. package/dist/devices/vav.js +57 -0
  1344. package/dist/devices/vav.js.map +1 -0
  1345. package/dist/devices/vbled.d.ts +3 -0
  1346. package/dist/devices/vbled.d.ts.map +1 -0
  1347. package/dist/devices/vbled.js +47 -0
  1348. package/dist/devices/vbled.js.map +1 -0
  1349. package/dist/devices/vesternet.d.ts +3 -0
  1350. package/dist/devices/vesternet.d.ts.map +1 -0
  1351. package/dist/devices/vesternet.js +355 -0
  1352. package/dist/devices/vesternet.js.map +1 -0
  1353. package/dist/devices/viessmann.d.ts +3 -0
  1354. package/dist/devices/viessmann.d.ts.map +1 -0
  1355. package/dist/devices/viessmann.js +120 -0
  1356. package/dist/devices/viessmann.js.map +1 -0
  1357. package/dist/devices/villeroy_boch.d.ts +3 -0
  1358. package/dist/devices/villeroy_boch.d.ts.map +1 -0
  1359. package/dist/devices/villeroy_boch.js +54 -0
  1360. package/dist/devices/villeroy_boch.js.map +1 -0
  1361. package/dist/devices/vimar.d.ts +3 -0
  1362. package/dist/devices/vimar.d.ts.map +1 -0
  1363. package/dist/devices/vimar.js +140 -0
  1364. package/dist/devices/vimar.js.map +1 -0
  1365. package/dist/devices/visonic.d.ts +3 -0
  1366. package/dist/devices/visonic.d.ts.map +1 -0
  1367. package/dist/devices/visonic.js +134 -0
  1368. package/dist/devices/visonic.js.map +1 -0
  1369. package/dist/devices/vrey.d.ts +3 -0
  1370. package/dist/devices/vrey.d.ts.map +1 -0
  1371. package/dist/devices/vrey.js +48 -0
  1372. package/dist/devices/vrey.js.map +1 -0
  1373. package/dist/devices/vsmart.d.ts +3 -0
  1374. package/dist/devices/vsmart.d.ts.map +1 -0
  1375. package/dist/devices/vsmart.js +442 -0
  1376. package/dist/devices/vsmart.js.map +1 -0
  1377. package/dist/devices/wally.d.ts +3 -0
  1378. package/dist/devices/wally.d.ts.map +1 -0
  1379. package/dist/devices/wally.js +60 -0
  1380. package/dist/devices/wally.js.map +1 -0
  1381. package/dist/devices/waxman.d.ts +3 -0
  1382. package/dist/devices/waxman.d.ts.map +1 -0
  1383. package/dist/devices/waxman.js +83 -0
  1384. package/dist/devices/waxman.js.map +1 -0
  1385. package/dist/devices/weiser.d.ts +3 -0
  1386. package/dist/devices/weiser.d.ts.map +1 -0
  1387. package/dist/devices/weiser.js +54 -0
  1388. package/dist/devices/weiser.js.map +1 -0
  1389. package/dist/devices/weten.d.ts +3 -0
  1390. package/dist/devices/weten.d.ts.map +1 -0
  1391. package/dist/devices/weten.js +83 -0
  1392. package/dist/devices/weten.js.map +1 -0
  1393. package/dist/devices/wirenboard.d.ts +3 -0
  1394. package/dist/devices/wirenboard.d.ts.map +1 -0
  1395. package/dist/devices/wirenboard.js +715 -0
  1396. package/dist/devices/wirenboard.js.map +1 -0
  1397. package/dist/devices/wisdom.d.ts +3 -0
  1398. package/dist/devices/wisdom.d.ts.map +1 -0
  1399. package/dist/devices/wisdom.js +47 -0
  1400. package/dist/devices/wisdom.js.map +1 -0
  1401. package/dist/devices/wmun.d.ts +3 -0
  1402. package/dist/devices/wmun.d.ts.map +1 -0
  1403. package/dist/devices/wmun.js +61 -0
  1404. package/dist/devices/wmun.js.map +1 -0
  1405. package/dist/devices/woolley.d.ts +3 -0
  1406. package/dist/devices/woolley.d.ts.map +1 -0
  1407. package/dist/devices/woolley.js +96 -0
  1408. package/dist/devices/woolley.js.map +1 -0
  1409. package/dist/devices/woox.d.ts +3 -0
  1410. package/dist/devices/woox.d.ts.map +1 -0
  1411. package/dist/devices/woox.js +194 -0
  1412. package/dist/devices/woox.js.map +1 -0
  1413. package/dist/devices/wyze.d.ts +3 -0
  1414. package/dist/devices/wyze.d.ts.map +1 -0
  1415. package/dist/devices/wyze.js +59 -0
  1416. package/dist/devices/wyze.js.map +1 -0
  1417. package/dist/devices/xal.d.ts +3 -0
  1418. package/dist/devices/xal.d.ts.map +1 -0
  1419. package/dist/devices/xal.js +61 -0
  1420. package/dist/devices/xal.js.map +1 -0
  1421. package/dist/devices/xenon.d.ts +4 -0
  1422. package/dist/devices/xenon.d.ts.map +1 -0
  1423. package/dist/devices/xenon.js +65 -0
  1424. package/dist/devices/xenon.js.map +1 -0
  1425. package/dist/devices/xinghuoyuan.d.ts +3 -0
  1426. package/dist/devices/xinghuoyuan.d.ts.map +1 -0
  1427. package/dist/devices/xinghuoyuan.js +47 -0
  1428. package/dist/devices/xinghuoyuan.js.map +1 -0
  1429. package/dist/devices/xyzroe.d.ts +3 -0
  1430. package/dist/devices/xyzroe.d.ts.map +1 -0
  1431. package/dist/devices/xyzroe.js +511 -0
  1432. package/dist/devices/xyzroe.js.map +1 -0
  1433. package/dist/devices/yale.d.ts +3 -0
  1434. package/dist/devices/yale.d.ts.map +1 -0
  1435. package/dist/devices/yale.js +686 -0
  1436. package/dist/devices/yale.js.map +1 -0
  1437. package/dist/devices/yandex.d.ts +3 -0
  1438. package/dist/devices/yandex.d.ts.map +1 -0
  1439. package/dist/devices/yandex.js +677 -0
  1440. package/dist/devices/yandex.js.map +1 -0
  1441. package/dist/devices/ynoa.d.ts +3 -0
  1442. package/dist/devices/ynoa.d.ts.map +1 -0
  1443. package/dist/devices/ynoa.js +116 -0
  1444. package/dist/devices/ynoa.js.map +1 -0
  1445. package/dist/devices/yokis.d.ts +3 -0
  1446. package/dist/devices/yokis.d.ts.map +1 -0
  1447. package/dist/devices/yokis.js +2972 -0
  1448. package/dist/devices/yokis.js.map +1 -0
  1449. package/dist/devices/yookee.d.ts +3 -0
  1450. package/dist/devices/yookee.d.ts.map +1 -0
  1451. package/dist/devices/yookee.js +59 -0
  1452. package/dist/devices/yookee.js.map +1 -0
  1453. package/dist/devices/ysrsai.d.ts +3 -0
  1454. package/dist/devices/ysrsai.d.ts.map +1 -0
  1455. package/dist/devices/ysrsai.js +68 -0
  1456. package/dist/devices/ysrsai.js.map +1 -0
  1457. package/dist/devices/zbeacon.d.ts +3 -0
  1458. package/dist/devices/zbeacon.d.ts.map +1 -0
  1459. package/dist/devices/zbeacon.js +54 -0
  1460. package/dist/devices/zbeacon.js.map +1 -0
  1461. package/dist/devices/zemismart.d.ts +3 -0
  1462. package/dist/devices/zemismart.d.ts.map +1 -0
  1463. package/dist/devices/zemismart.js +1061 -0
  1464. package/dist/devices/zemismart.js.map +1 -0
  1465. package/dist/devices/zen.d.ts +3 -0
  1466. package/dist/devices/zen.d.ts.map +1 -0
  1467. package/dist/devices/zen.js +93 -0
  1468. package/dist/devices/zen.js.map +1 -0
  1469. package/dist/devices/zigbeetlc.d.ts +3 -0
  1470. package/dist/devices/zigbeetlc.d.ts.map +1 -0
  1471. package/dist/devices/zigbeetlc.js +374 -0
  1472. package/dist/devices/zigbeetlc.js.map +1 -0
  1473. package/dist/devices/zipato.d.ts +3 -0
  1474. package/dist/devices/zipato.d.ts.map +1 -0
  1475. package/dist/devices/zipato.js +47 -0
  1476. package/dist/devices/zipato.js.map +1 -0
  1477. package/dist/devices/zunzunbee.d.ts +3 -0
  1478. package/dist/devices/zunzunbee.d.ts.map +1 -0
  1479. package/dist/devices/zunzunbee.js +97 -0
  1480. package/dist/devices/zunzunbee.js.map +1 -0
  1481. package/dist/index.d.ts +19 -0
  1482. package/dist/index.d.ts.map +1 -0
  1483. package/dist/index.js.map +1 -0
  1484. package/dist/indexer.d.ts +5 -0
  1485. package/dist/indexer.d.ts.map +1 -0
  1486. package/dist/indexer.js +135 -0
  1487. package/dist/indexer.js.map +1 -0
  1488. package/dist/lib/adurosmart.d.ts +15 -0
  1489. package/dist/lib/adurosmart.d.ts.map +1 -0
  1490. package/dist/lib/adurosmart.js +669 -0
  1491. package/dist/lib/adurosmart.js.map +1 -0
  1492. package/dist/lib/bosch.d.ts +353 -0
  1493. package/dist/lib/bosch.d.ts.map +1 -0
  1494. package/dist/lib/bosch.js +3163 -0
  1495. package/dist/lib/bosch.js.map +1 -0
  1496. package/dist/lib/color.d.ts +272 -0
  1497. package/dist/lib/color.d.ts.map +1 -0
  1498. package/dist/lib/color.js +766 -0
  1499. package/dist/lib/color.js.map +1 -0
  1500. package/dist/lib/constants.d.ts +78 -0
  1501. package/dist/lib/constants.d.ts.map +1 -0
  1502. package/dist/lib/constants.js +317 -0
  1503. package/dist/lib/constants.js.map +1 -0
  1504. package/dist/lib/develco.d.ts +50 -0
  1505. package/dist/lib/develco.d.ts.map +1 -0
  1506. package/dist/lib/develco.js +433 -0
  1507. package/dist/lib/develco.js.map +1 -0
  1508. package/dist/lib/ewelink.d.ts +30 -0
  1509. package/dist/lib/ewelink.d.ts.map +1 -0
  1510. package/dist/lib/ewelink.js +722 -0
  1511. package/dist/lib/ewelink.js.map +1 -0
  1512. package/dist/lib/exposes.d.ts +376 -0
  1513. package/dist/lib/exposes.d.ts.map +1 -0
  1514. package/dist/lib/exposes.js +1136 -0
  1515. package/dist/lib/exposes.js.map +1 -0
  1516. package/dist/lib/generateDefinition.d.ts +10 -0
  1517. package/dist/lib/generateDefinition.d.ts.map +1 -0
  1518. package/dist/lib/generateDefinition.js +773 -0
  1519. package/dist/lib/generateDefinition.js.map +1 -0
  1520. package/dist/lib/heiman.d.ts +92 -0
  1521. package/dist/lib/heiman.d.ts.map +1 -0
  1522. package/dist/lib/heiman.js +211 -0
  1523. package/dist/lib/heiman.js.map +1 -0
  1524. package/dist/lib/ikea.d.ts +106 -0
  1525. package/dist/lib/ikea.d.ts.map +1 -0
  1526. package/dist/lib/ikea.js +984 -0
  1527. package/dist/lib/ikea.js.map +1 -0
  1528. package/dist/lib/kelvinToXy.d.ts +8 -0
  1529. package/dist/lib/kelvinToXy.d.ts.map +1 -0
  1530. package/dist/lib/kelvinToXy.js +1913 -0
  1531. package/dist/lib/kelvinToXy.js.map +1 -0
  1532. package/dist/lib/ledvance.d.ts +20 -0
  1533. package/dist/lib/ledvance.d.ts.map +1 -0
  1534. package/dist/lib/ledvance.js +100 -0
  1535. package/dist/lib/ledvance.js.map +1 -0
  1536. package/dist/lib/legacy.d.ts +5197 -0
  1537. package/dist/lib/legacy.d.ts.map +1 -0
  1538. package/dist/lib/legacy.js +6865 -0
  1539. package/dist/lib/legacy.js.map +1 -0
  1540. package/dist/lib/legrand.d.ts +132 -0
  1541. package/dist/lib/legrand.d.ts.map +1 -0
  1542. package/dist/lib/legrand.js +404 -0
  1543. package/dist/lib/legrand.js.map +1 -0
  1544. package/dist/lib/light.d.ts +9 -0
  1545. package/dist/lib/light.d.ts.map +1 -0
  1546. package/dist/lib/light.js +144 -0
  1547. package/dist/lib/light.js.map +1 -0
  1548. package/dist/lib/logger.d.ts +4 -0
  1549. package/dist/lib/logger.d.ts.map +1 -0
  1550. package/dist/lib/logger.js +14 -0
  1551. package/dist/lib/logger.js.map +1 -0
  1552. package/dist/lib/lumi.d.ts +1093 -0
  1553. package/dist/lib/lumi.d.ts.map +1 -0
  1554. package/dist/lib/lumi.js +6479 -0
  1555. package/dist/lib/lumi.js.map +1 -0
  1556. package/dist/lib/modernExtend.d.ts +436 -0
  1557. package/dist/lib/modernExtend.d.ts.map +1 -0
  1558. package/dist/lib/modernExtend.js +2702 -0
  1559. package/dist/lib/modernExtend.js.map +1 -0
  1560. package/dist/lib/namron.d.ts +56 -0
  1561. package/dist/lib/namron.d.ts.map +1 -0
  1562. package/dist/lib/namron.js +433 -0
  1563. package/dist/lib/namron.js.map +1 -0
  1564. package/dist/lib/nodon.d.ts +3 -0
  1565. package/dist/lib/nodon.d.ts.map +1 -0
  1566. package/dist/lib/nodon.js +130 -0
  1567. package/dist/lib/nodon.js.map +1 -0
  1568. package/dist/lib/philips.d.ts +321 -0
  1569. package/dist/lib/philips.d.ts.map +1 -0
  1570. package/dist/lib/philips.js +876 -0
  1571. package/dist/lib/philips.js.map +1 -0
  1572. package/dist/lib/reporting.d.ts +57 -0
  1573. package/dist/lib/reporting.d.ts.map +1 -0
  1574. package/dist/lib/reporting.js +294 -0
  1575. package/dist/lib/reporting.js.map +1 -0
  1576. package/dist/lib/sonoff.d.ts +30 -0
  1577. package/dist/lib/sonoff.d.ts.map +1 -0
  1578. package/dist/lib/sonoff.js +91 -0
  1579. package/dist/lib/sonoff.js.map +1 -0
  1580. package/dist/lib/store.d.ts +7 -0
  1581. package/dist/lib/store.d.ts.map +1 -0
  1582. package/dist/lib/store.js +59 -0
  1583. package/dist/lib/store.js.map +1 -0
  1584. package/dist/lib/sunricher.d.ts +29 -0
  1585. package/dist/lib/sunricher.d.ts.map +1 -0
  1586. package/dist/lib/sunricher.js +838 -0
  1587. package/dist/lib/sunricher.js.map +1 -0
  1588. package/dist/lib/tuya.d.ts +998 -0
  1589. package/dist/lib/tuya.d.ts.map +1 -0
  1590. package/dist/lib/tuya.js +3043 -0
  1591. package/dist/lib/tuya.js.map +1 -0
  1592. package/dist/lib/types.d.ts +429 -0
  1593. package/dist/lib/types.d.ts.map +1 -0
  1594. package/dist/lib/types.js +3 -0
  1595. package/dist/lib/types.js.map +1 -0
  1596. package/dist/lib/ubisys.d.ts +107 -0
  1597. package/dist/lib/ubisys.d.ts.map +1 -0
  1598. package/dist/lib/ubisys.js +576 -0
  1599. package/dist/lib/ubisys.js.map +1 -0
  1600. package/dist/lib/utils.d.ts +95 -0
  1601. package/dist/lib/utils.d.ts.map +1 -0
  1602. package/dist/lib/utils.js +736 -0
  1603. package/dist/lib/utils.js.map +1 -0
  1604. package/dist/lib/zosung.d.ts +52 -0
  1605. package/dist/lib/zosung.d.ts.map +1 -0
  1606. package/dist/lib/zosung.js +264 -0
  1607. package/dist/lib/zosung.js.map +1 -0
  1608. package/dist/models-index.json +1 -0
  1609. package/package.json +2 -8
@@ -0,0 +1,3694 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.definitions = void 0;
37
+ const fz = __importStar(require("../converters/fromZigbee"));
38
+ const tz = __importStar(require("../converters/toZigbee"));
39
+ const exposes = __importStar(require("../lib/exposes"));
40
+ const m = __importStar(require("../lib/modernExtend"));
41
+ const reporting = __importStar(require("../lib/reporting"));
42
+ const utils = __importStar(require("../lib/utils"));
43
+ //import {logger} from "../lib/logger";
44
+ const e = exposes.presets;
45
+ const ea = exposes.access;
46
+ //const NS = "zhc:slacky_diy";
47
+ const ppmReporting = { min: 10, max: 300, change: 0.000001 };
48
+ const batteryReporting = { min: 3600, max: 21600, change: 0 };
49
+ const temperatureReporting = { min: 10, max: 3600, change: 10 };
50
+ const humidityReporting = { min: 10, max: 3600, change: 10 };
51
+ const model_r01 = "THERM_SLACKY_DIY_R01";
52
+ //const model_r02 = "THERM_SLACKY_DIY_R02";
53
+ const model_r03 = "THERM_SLACKY_DIY_R03";
54
+ const model_r04 = "THERM_SLACKY_DIY_R04";
55
+ //const model_r05 = "THERM_SLACKY_DIY_R05";
56
+ const model_r06 = "THERM_SLACKY_DIY_R06";
57
+ const model_r07 = "THERM_SLACKY_DIY_R07";
58
+ const model_r08 = "THERM_SLACKY_DIY_R08";
59
+ const model_r09 = "THERM_SLACKY_DIY_R09";
60
+ //const model_r0a = "THERM_SLACKY_DIY_R0A";
61
+ const model_r0b = "THERM_SLACKY_DIY_R0B";
62
+ const modelR0c = "THERM_SLACKY_DIY_R0C";
63
+ const model_r0d = "THERM_SLACKY_DIY_R0D";
64
+ const attrThermSensorUser = 0xf000;
65
+ const attrThermFrostProtect = 0xf001;
66
+ const attrThermHeatProtect = 0xf002;
67
+ const attrThermEcoMode = 0xf003;
68
+ const attrThermEcoModeHeatTemperature = 0xf004;
69
+ const attrThermFrostProtectOnOff = 0xf005;
70
+ const attrThermSettingsReset = 0xf006;
71
+ const attrThermScheduleMode = 0xf007;
72
+ const attrThermSound = 0xf008;
73
+ const attrThermLevel = 0xf009;
74
+ const attrThermInversion = 0xf00a;
75
+ const attrThermEcoModeCoolTemperature = 0xf00b;
76
+ const attrThermExtTemperatureCalibration = 0xf00c;
77
+ const attrThermModeKeyLock = 0xf00d;
78
+ const attrThermManufName = 0xf00e;
79
+ const attrThermScreenOffTime = 0xf00f;
80
+ const attrThermLedIndicator = 0xf010;
81
+ const attrFanCtrlControl = 0xf000;
82
+ const switchSensorUsed = ["Inner (IN)", "All (AL)", "Outer (OU)"];
83
+ const attrElCityMeterModelPreset = 0xf000;
84
+ const attrElCityMeterAddressPreset = 0xf001;
85
+ const attrElCityMeterMeasurementPreset = 0xf002;
86
+ const attrElCityMeterDateRelease = 0xf003;
87
+ const attrElCityMeterModelName = 0xf004;
88
+ const attrElCityMeterPasswordPreset = 0xf005;
89
+ const attrSensorReadPeriod = 0xf000;
90
+ const attrTemperatureOffset = 0xf001;
91
+ const attrTemperatureOnOff = 0xf002;
92
+ const attrTemperatureLow = 0xf003;
93
+ const attrTemperatureHigh = 0xf004;
94
+ const attrHumidityOffset = 0xf005;
95
+ const attrHumidityOnOff = 0xf006;
96
+ const attrHumidityLow = 0xf007;
97
+ const attrHumidityHigh = 0xf008;
98
+ const attrRepeatCommand = 0xf009;
99
+ const attrCo2Calibration = 0xf008;
100
+ const attrFeaturesSensors = 0xf009;
101
+ const attrDisplayRotate = 0xf00a;
102
+ const attrDisplayInversion = 0xf00b;
103
+ const switchFeatures = ["nothing", "co2_forced_calibration", "co2_factory_reset", "bind_reset", ""];
104
+ const attrPlugKeyLock = 0xf000;
105
+ const attrPlugLedCtrl = 0xf001;
106
+ const attrPlugSwitchCurrentMax = 0xf002;
107
+ const attrPlugSwitchPowerMax = 0xf003;
108
+ const attrPlugSwitchTimeReload = 0xf004;
109
+ const attrPlugSwitchProtectCtrl = 0xf005;
110
+ const attrPlugSwitchAutoRestart = 0xf006;
111
+ const attrSwitchType = 0xf000;
112
+ const attrSwitchDecoupled = 0xf001;
113
+ const attrDeviceModelNumber = 0xf002;
114
+ const attrDoorDelayOn = 0xf003;
115
+ const attrDoorDelayOff = 0xf004;
116
+ const attrDoorOnCmdOff = 0xf005;
117
+ const attrDoorOffCmdOff = 0xf006;
118
+ const attrSceneId = 0xf000;
119
+ const attrGroupId = 0xf001;
120
+ const fzLocal = {
121
+ thermostat_custom_fw: {
122
+ cluster: "hvacThermostat",
123
+ type: ["attributeReport", "readResponse"],
124
+ convert: (model, msg, publish, options, meta) => {
125
+ const result = {};
126
+ if (msg.data[attrThermSensorUser] !== undefined) {
127
+ const lookup2 = { 0: "Inner (IN)", 1: "Outer (OU)" };
128
+ const lookup3 = { 0: "Inner (IN)", 1: "All (AL)", 2: "Outer (OU)" };
129
+ if (model.model === model_r0b) {
130
+ result.sensor = utils.getFromLookup(msg.data[attrThermSensorUser], lookup2);
131
+ }
132
+ else {
133
+ result.sensor = utils.getFromLookup(msg.data[attrThermSensorUser], lookup3);
134
+ }
135
+ }
136
+ if (msg.data.minSetpointDeadBand !== undefined) {
137
+ //logger.info(`Model: ${model.model}`, NS);
138
+ let data;
139
+ if (model.model === model_r06 || model.model === model_r09 || model.model === model_r0b || model.model === model_r0d) {
140
+ data = msg.data.minSetpointDeadBand / 10;
141
+ result.hysteresis_temperature = data;
142
+ }
143
+ else {
144
+ data = msg.data.minSetpointDeadBand;
145
+ result.deadzone_temperature = data;
146
+ }
147
+ //logger.info(`DeadBand: ${data}`, NS);
148
+ }
149
+ if (msg.data[attrThermFrostProtect] !== undefined) {
150
+ const data = Number.parseInt(msg.data[attrThermFrostProtect], 10) / 100;
151
+ result.frost_protect = data;
152
+ }
153
+ if (msg.data[attrThermHeatProtect] !== undefined) {
154
+ const data = Number.parseInt(msg.data[attrThermHeatProtect], 10) / 100;
155
+ result.heat_protect = data;
156
+ }
157
+ if (msg.data[attrThermEcoMode] !== undefined) {
158
+ result.eco_mode = msg.data[attrThermEcoMode] === 1 ? "On" : "Off";
159
+ }
160
+ if (msg.data[attrThermEcoModeCoolTemperature] !== undefined) {
161
+ const data = Number.parseInt(msg.data[attrThermEcoModeCoolTemperature], 10) / 100;
162
+ result.eco_mode_cool_temperature = data;
163
+ }
164
+ if (msg.data[attrThermEcoModeHeatTemperature] !== undefined) {
165
+ const data = Number.parseInt(msg.data[attrThermEcoModeHeatTemperature], 10) / 100;
166
+ result.eco_mode_heat_temperature = data;
167
+ }
168
+ if (msg.data[attrThermFrostProtectOnOff] !== undefined) {
169
+ result.frost_protect_on_off = msg.data[attrThermFrostProtectOnOff] === 1 ? "On" : "Off";
170
+ }
171
+ if (msg.data[attrThermLevel] !== undefined) {
172
+ if (model.model === model_r0b) {
173
+ const lookup_sleep = { 0: "Off", 1: "Dim", 2: "On" };
174
+ result.screen_sleep_mode = utils.getFromLookup(msg.data[attrThermLevel], lookup_sleep);
175
+ }
176
+ else {
177
+ const lookup = { 0: "Off", 1: "Low", 2: "Medium", 3: "High" };
178
+ result.brightness_level = utils.getFromLookup(msg.data[attrThermLevel], lookup);
179
+ }
180
+ }
181
+ if (msg.data[attrThermScreenOffTime] !== undefined) {
182
+ if (model.model === model_r0d) {
183
+ const lookup_time = { 0: "10s", 1: "20s", 2: "30s", 3: "40s", 4: "50s", 5: "60s" };
184
+ result.screen_sleep_time = utils.getFromLookup(msg.data[attrThermScreenOffTime], lookup_time);
185
+ }
186
+ }
187
+ if (msg.data[attrThermLedIndicator] !== undefined) {
188
+ result.led_indicator = msg.data[attrThermLedIndicator] === 1 ? "On" : "Off";
189
+ }
190
+ if (msg.data[attrThermSound] !== undefined) {
191
+ result.sound = msg.data[attrThermSound] === 1 ? "On" : "Off";
192
+ }
193
+ if (msg.data[attrThermInversion] !== undefined) {
194
+ result.relay_type = msg.data[attrThermInversion] === 1 ? "NO" : "NC";
195
+ }
196
+ if (msg.data[attrThermModeKeyLock] !== undefined) {
197
+ result.mode_child_lock = msg.data[attrThermModeKeyLock] === 1 ? "all" : "partial";
198
+ }
199
+ if (msg.data[attrThermScheduleMode] !== undefined) {
200
+ const lookup = { 0: "Off", 1: "5+2", 2: "6+1", 3: "7" };
201
+ result.schedule_mode = utils.getFromLookup(msg.data[attrThermScheduleMode], lookup);
202
+ }
203
+ if (msg.data[attrThermExtTemperatureCalibration] !== undefined) {
204
+ const data = Number.parseInt(msg.data[attrThermExtTemperatureCalibration], 10) / 10;
205
+ result.external_temperature_calibration = data;
206
+ }
207
+ return result;
208
+ },
209
+ },
210
+ thermostat_schedule: {
211
+ cluster: "hvacThermostat",
212
+ type: ["commandSetWeeklySchedule", "commandGetWeeklyScheduleRsp"],
213
+ convert: (model, msg, publish, options, meta) => {
214
+ const { data } = msg;
215
+ const daysOfWeekNums = [...Array.from(Array(7).keys()).filter((x) => (2 ** x) & data.dayofweek)];
216
+ // biome-ignore lint/suspicious/noExplicitAny: ignored using `--suppress`
217
+ const schedule = `${data.transitions.map((t) => `${String(Math.floor(t.transitionTime / 60)).padStart(2, "0")}:${String(t.transitionTime % 60).padStart(2, "0")}/${t.heatSetpoint / 100.0}°C`).join(" ")}`;
218
+ const daysOfWeek = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
219
+ return Object.fromEntries(daysOfWeekNums.map((d) => [`schedule_${daysOfWeek[d]}`, schedule]));
220
+ },
221
+ },
222
+ fancontrol_control: {
223
+ cluster: "hvacFanCtrl",
224
+ type: ["attributeReport", "readResponse"],
225
+ convert: (model, msg, publish, options, meta) => {
226
+ const result = {};
227
+ if (msg.data[attrFanCtrlControl] !== undefined) {
228
+ result.fan_control = msg.data[attrFanCtrlControl] === 1 ? "On" : "Off";
229
+ }
230
+ return result;
231
+ },
232
+ },
233
+ display_brightness: {
234
+ cluster: "genLevelCtrl",
235
+ type: ["attributeReport", "readResponse"],
236
+ convert: (model, msg, publish, options, meta) => {
237
+ const result = {};
238
+ if (msg.data.currentLevel !== undefined) {
239
+ const property = `brightness_${utils.getEndpointName(msg, model, meta)}`;
240
+ //logger.info('property: ' + property);
241
+ return { [property]: msg.data.currentLevel };
242
+ }
243
+ return result;
244
+ },
245
+ },
246
+ thermostat_humidity_offset: {
247
+ cluster: "msRelativeHumidity",
248
+ type: ["attributeReport", "readResponse"],
249
+ convert: (model, msg, publish, options, meta) => {
250
+ const result = {};
251
+ if (msg.data[attrHumidityOffset] !== undefined) {
252
+ const data = Number.parseInt(msg.data[attrHumidityOffset], 10) / 100;
253
+ result.humidity_offset = data;
254
+ }
255
+ return result;
256
+ },
257
+ },
258
+ };
259
+ const tzLocal = {
260
+ display_brightness: {
261
+ key: ["brightness", "brightness_day", "brightness_night"],
262
+ options: [exposes.options.transition()],
263
+ convertSet: async (entity, key, value, meta) => {
264
+ await entity.command("genLevelCtrl", "moveToLevel", { level: value, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
265
+ return { state: { brightness: value } };
266
+ },
267
+ convertGet: async (entity, key, meta) => {
268
+ await entity.read("genLevelCtrl", ["currentLevel"]);
269
+ },
270
+ },
271
+ thermostat_humidity_offset: {
272
+ key: ["humidity_offset"],
273
+ convertSet: async (entity, key, value, meta) => {
274
+ utils.assertNumber(value);
275
+ const humidity_offset = Number(Math.round(value)) * 100;
276
+ await entity.write("msRelativeHumidity", { [attrHumidityOffset]: { value: humidity_offset, type: 0x29 } });
277
+ return { readAfterWriteTime: 250, state: { humidity_offset: value } };
278
+ },
279
+ convertGet: async (entity, key, meta) => {
280
+ await entity.read("msRelativeHumidity", [attrHumidityOffset]);
281
+ },
282
+ },
283
+ thermostat_sensor_used: {
284
+ key: ["sensor"],
285
+ convertSet: async (entity, key, value, meta) => {
286
+ //const endpoint = meta.device.getEndpoint(1);
287
+ const lookup2 = { "Inner (IN)": 0, "Outer (OU)": 1 };
288
+ const lookup3 = { "Inner (IN)": 0, "All (AL)": 1, "Outer (OU)": 2 };
289
+ if (meta.mapped.model === model_r0b) {
290
+ await entity.write("hvacThermostat", { [attrThermSensorUser]: { value: utils.getFromLookup(value, lookup2), type: 0x30 } });
291
+ }
292
+ else {
293
+ await entity.write("hvacThermostat", { [attrThermSensorUser]: { value: utils.getFromLookup(value, lookup3), type: 0x30 } });
294
+ }
295
+ return { readAfterWriteTime: 250, state: { sensor: value } };
296
+ },
297
+ convertGet: async (entity, key, meta) => {
298
+ await entity.read("hvacThermostat", [attrThermSensorUser]);
299
+ },
300
+ },
301
+ thermostat_deadzone: {
302
+ key: ["deadzone_temperature"],
303
+ convertSet: async (entity, key, value, meta) => {
304
+ utils.assertNumber(value);
305
+ const minSetpointDeadBand = Number(Math.round(value));
306
+ await entity.write("hvacThermostat", { minSetpointDeadBand });
307
+ return { readAfterWriteTime: 250, state: { minSetpointDeadBand: value } };
308
+ },
309
+ convertGet: async (entity, key, meta) => {
310
+ await entity.read("hvacThermostat", ["minSetpointDeadBand"]);
311
+ },
312
+ },
313
+ thermostat_deadzone_10: {
314
+ key: ["hysteresis_temperature"],
315
+ convertSet: async (entity, key, value, meta) => {
316
+ utils.assertNumber(value);
317
+ const minSetpointDeadBand = Number(value) * 10;
318
+ await entity.write("hvacThermostat", { minSetpointDeadBand });
319
+ return { readAfterWriteTime: 250, state: { hysteresis_temperature: value } };
320
+ },
321
+ convertGet: async (entity, key, meta) => {
322
+ await entity.read("hvacThermostat", ["minSetpointDeadBand"]);
323
+ },
324
+ },
325
+ thermostat_frost_protect: {
326
+ key: ["frost_protect"],
327
+ convertSet: async (entity, key, value, meta) => {
328
+ utils.assertNumber(value);
329
+ //if (!utils.isInRange(0, 10, Number(value))) throw new Error(`Invalid value: ${value} (expected ${0} to ${10})`);
330
+ const frost_protect = Number(Math.round(value)) * 100;
331
+ await entity.write("hvacThermostat", { [attrThermFrostProtect]: { value: frost_protect, type: 0x29 } });
332
+ return { readAfterWriteTime: 250, state: { frost_protect: value } };
333
+ },
334
+ convertGet: async (entity, key, meta) => {
335
+ await entity.read("hvacThermostat", [attrThermFrostProtect]);
336
+ },
337
+ },
338
+ thermostat_heat_protect: {
339
+ key: ["heat_protect"],
340
+ convertSet: async (entity, key, value, meta) => {
341
+ utils.assertNumber(value);
342
+ //if (!utils.isInRange(25, 70, Number(value))) throw new Error(`Invalid value: ${value} (expected ${25} to ${70})`);
343
+ const heat_protect = Number(Math.round(value)) * 100;
344
+ await entity.write("hvacThermostat", { [attrThermHeatProtect]: { value: heat_protect, type: 0x29 } });
345
+ return { readAfterWriteTime: 250, state: { heat_protect: value } };
346
+ },
347
+ convertGet: async (entity, key, meta) => {
348
+ await entity.read("hvacThermostat", [attrThermHeatProtect]);
349
+ },
350
+ },
351
+ thermostat_setpoint_raise_lower: {
352
+ key: ["setpoint_raise_lower"],
353
+ convertSet: async (entity, key, value, meta) => {
354
+ utils.assertNumber(value);
355
+ //if (!utils.isInRange(-5, 5, Number(value))) throw new Error(`Invalid value: ${value} (expected ${-5} to ${5})`);
356
+ const setpoint_raise_lower = Number(Math.fround(value)) * 10; //Step 0.1°C. 5°C - 50, 1°C - 10 etc.
357
+ await entity.command("hvacThermostat", "setpointRaiseLower", { mode: 0, amount: setpoint_raise_lower });
358
+ return { readAfterWriteTime: 250, state: { setpoint_raise_lower: value } };
359
+ },
360
+ },
361
+ fancontrol_control: {
362
+ key: ["fan_control"],
363
+ convertSet: async (entity, key, value, meta) => {
364
+ const fan_control = Number(value === "On");
365
+ await entity.write("hvacFanCtrl", { [attrFanCtrlControl]: { value: fan_control, type: 0x10 } });
366
+ return { readAfterWriteTime: 250, state: { fan_control: value } };
367
+ },
368
+ convertGet: async (entity, key, meta) => {
369
+ await entity.read("hvacFanCtrl", [attrFanCtrlControl]);
370
+ },
371
+ },
372
+ thermostat_eco_mode: {
373
+ key: ["eco_mode"],
374
+ convertSet: async (entity, key, value, meta) => {
375
+ const eco_mode = Number(value === "On");
376
+ await entity.write("hvacThermostat", { [attrThermEcoMode]: { value: eco_mode, type: 0x30 } });
377
+ return { readAfterWriteTime: 250, state: { eco_mode: value } };
378
+ },
379
+ convertGet: async (entity, key, meta) => {
380
+ await entity.read("hvacThermostat", [attrThermEcoMode]);
381
+ },
382
+ },
383
+ thermostat_eco_mode_cool_temperature: {
384
+ key: ["eco_mode_cool_temperature"],
385
+ convertSet: async (entity, key, value, meta) => {
386
+ utils.assertNumber(value);
387
+ //if (!utils.isInRange(5, 45, Number(value))) throw new Error(`Invalid value: ${value} (expected ${5} to ${45})`);
388
+ const eco_mode_cool_temperature = Number(Math.round(value)) * 100;
389
+ await entity.write("hvacThermostat", { [attrThermEcoModeCoolTemperature]: { value: eco_mode_cool_temperature, type: 0x29 } });
390
+ return { readAfterWriteTime: 250, state: { eco_mode_cool_temperature: value } };
391
+ },
392
+ convertGet: async (entity, key, meta) => {
393
+ await entity.read("hvacThermostat", [attrThermEcoModeCoolTemperature]);
394
+ },
395
+ },
396
+ thermostat_eco_mode_heat_temperature: {
397
+ key: ["eco_mode_heat_temperature"],
398
+ convertSet: async (entity, key, value, meta) => {
399
+ utils.assertNumber(value);
400
+ //if (!utils.isInRange(5, 45, Number(value))) throw new Error(`Invalid value: ${value} (expected ${5} to ${45})`);
401
+ const eco_mode_heat_temperature = Number(Math.round(value)) * 100;
402
+ await entity.write("hvacThermostat", { [attrThermEcoModeHeatTemperature]: { value: eco_mode_heat_temperature, type: 0x29 } });
403
+ return { readAfterWriteTime: 250, state: { eco_mode_heat_temperature: value } };
404
+ },
405
+ convertGet: async (entity, key, meta) => {
406
+ await entity.read("hvacThermostat", [attrThermEcoModeHeatTemperature]);
407
+ },
408
+ },
409
+ thermostat_frost_protect_onoff: {
410
+ key: ["frost_protect_on_off"],
411
+ convertSet: async (entity, key, value, meta) => {
412
+ const frost_protect_on_off = Number(value === "On");
413
+ await entity.write("hvacThermostat", { [attrThermFrostProtectOnOff]: { value: frost_protect_on_off, type: 0x10 } });
414
+ return { readAfterWriteTime: 250, state: { frost_protect_on_off: value } };
415
+ },
416
+ convertGet: async (entity, key, meta) => {
417
+ await entity.read("hvacThermostat", [attrThermFrostProtectOnOff]);
418
+ },
419
+ },
420
+ thermostat_sound: {
421
+ key: ["sound"],
422
+ convertSet: async (entity, key, value, meta) => {
423
+ const sound = Number(value === "On");
424
+ await entity.write("hvacThermostat", { [attrThermSound]: { value: sound, type: 0x10 } });
425
+ return { readAfterWriteTime: 250, state: { sound: value } };
426
+ },
427
+ convertGet: async (entity, key, meta) => {
428
+ await entity.read("hvacThermostat", [attrThermSound]);
429
+ },
430
+ },
431
+ thermostat_brightness_level: {
432
+ key: ["brightness_level"],
433
+ convertSet: async (entity, key, value, meta) => {
434
+ //utils.assertNumber(value);
435
+ const lookup = { Off: 0, Low: 1, Medium: 2, High: 3 };
436
+ await entity.write("hvacThermostat", { [attrThermLevel]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
437
+ return { state: { brightness_level: value } };
438
+ },
439
+ convertGet: async (entity, key, meta) => {
440
+ await entity.read("hvacThermostat", [attrThermLevel]);
441
+ },
442
+ },
443
+ thermostat_screen_sleep_mode: {
444
+ key: ["screen_sleep_mode"],
445
+ convertSet: async (entity, key, value, meta) => {
446
+ //utils.assertNumber(value);
447
+ const lookup = { Off: 0, Dim: 1, On: 2 };
448
+ await entity.write("hvacThermostat", { [attrThermLevel]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
449
+ return { state: { screen_sleep_mode: value } };
450
+ },
451
+ convertGet: async (entity, key, meta) => {
452
+ await entity.read("hvacThermostat", [attrThermLevel]);
453
+ },
454
+ },
455
+ thermostat_screen_sleep_time: {
456
+ key: ["screen_sleep_time"],
457
+ convertSet: async (entity, key, value, meta) => {
458
+ //utils.assertNumber(value);
459
+ const lookup = { "10s": 0, "20s": 1, "30s": 2, "40s": 3, "50s": 4, "60s": 5 };
460
+ await entity.write("hvacThermostat", { [attrThermScreenOffTime]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
461
+ return { state: { screen_sleep_time: value } };
462
+ },
463
+ convertGet: async (entity, key, meta) => {
464
+ await entity.read("hvacThermostat", [attrThermScreenOffTime]);
465
+ },
466
+ },
467
+ thermostat_led_indicator: {
468
+ key: ["led_indicator"],
469
+ convertSet: async (entity, key, value, meta) => {
470
+ const led_indicator = Number(value === "On");
471
+ await entity.write("hvacThermostat", { [attrThermLedIndicator]: { value: led_indicator, type: 0x10 } });
472
+ return { readAfterWriteTime: 250, state: { led_indicator: value } };
473
+ },
474
+ convertGet: async (entity, key, meta) => {
475
+ await entity.read("hvacThermostat", [attrThermLedIndicator]);
476
+ },
477
+ },
478
+ thermostat_inversion: {
479
+ key: ["relay_type"],
480
+ convertSet: async (entity, key, value, meta) => {
481
+ const relay_type = Number(value === "NO");
482
+ await entity.write("hvacThermostat", { [attrThermInversion]: { value: relay_type, type: 0x10 } });
483
+ return { readAfterWriteTime: 250, state: { relay_type: value } };
484
+ },
485
+ convertGet: async (entity, key, meta) => {
486
+ await entity.read("hvacThermostat", [attrThermInversion]);
487
+ },
488
+ },
489
+ thermostat_mode_child_lock: {
490
+ key: ["mode_child_lock"],
491
+ convertSet: async (entity, key, value, meta) => {
492
+ const mode_child_lock = Number(value === "all");
493
+ await entity.write("hvacThermostat", { [attrThermModeKeyLock]: { value: mode_child_lock, type: 0x10 } });
494
+ return { readAfterWriteTime: 250, state: { mode_child_lock: value } };
495
+ },
496
+ convertGet: async (entity, key, meta) => {
497
+ await entity.read("hvacThermostat", [attrThermModeKeyLock]);
498
+ },
499
+ },
500
+ thermostat_schedule_mode: {
501
+ key: ["schedule_mode"],
502
+ convertSet: async (entity, key, value, meta) => {
503
+ //utils.assertNumber(value);
504
+ const lookup = { off: 0, "5+2": 1, "6+1": 2, "7": 3 };
505
+ await entity.write("hvacThermostat", { [attrThermScheduleMode]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
506
+ return { state: { schedule_mode: value } };
507
+ },
508
+ convertGet: async (entity, key, meta) => {
509
+ await entity.read("hvacThermostat", [attrThermScheduleMode]);
510
+ },
511
+ },
512
+ thermostat_settings_reset: {
513
+ key: ["settings_reset"],
514
+ convertSet: async (entity, key, value, meta) => {
515
+ const settings_reset = Number(value === "Default");
516
+ await entity.write("hvacThermostat", { [attrThermSettingsReset]: { value: settings_reset, type: 0x10 } });
517
+ return { readAfterWriteTime: 250, state: { settings_reset: value } };
518
+ },
519
+ },
520
+ thermostat_ext_temperature_calibration: {
521
+ key: ["external_temperature_calibration"],
522
+ convertSet: async (entity, key, value, meta) => {
523
+ utils.assertNumber(value);
524
+ //if (!utils.isInRange(-9, 9, Number(value))) throw new Error(`Invalid value: ${value} (expected ${-9} to ${9})`);
525
+ const external_temperature_calibration = Number(Math.round(value)) * 10;
526
+ await entity.write("hvacThermostat", { [attrThermExtTemperatureCalibration]: { value: external_temperature_calibration, type: 0x28 } });
527
+ return { readAfterWriteTime: 250, state: { external_temperature_calibration: value } };
528
+ },
529
+ convertGet: async (entity, key, meta) => {
530
+ await entity.read("hvacThermostat", [attrThermExtTemperatureCalibration]);
531
+ },
532
+ },
533
+ thermostat_manuf_name: {
534
+ key: ["manuf_name"],
535
+ convertSet: async (entity, key, value, meta) => {
536
+ const lookup = { R00: 0, R01: 1, R02: 2, R03: 3, R04: 4, R05: 5, R06: 6, R07: 7, R08: 8, R09: 9, R0A: 10, R0B: 11 };
537
+ await entity.write("hvacThermostat", { [attrThermManufName]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
538
+ return { state: { manuf_name: value } };
539
+ },
540
+ convertGet: async (entity, key, meta) => {
541
+ await entity.read("hvacThermostat", [attrThermManufName]);
542
+ },
543
+ },
544
+ device_model_number: {
545
+ key: ["door_device_number", "switch_device_number"],
546
+ convertSet: async (entity, key, value, meta) => {
547
+ const lookup = { model_0: 0, model_1: 1, model_2: 2, model_3: 3, model_4: 4, model_5: 5 };
548
+ await entity.write("genOnOffSwitchCfg", { [attrDeviceModelNumber]: { value: utils.getFromLookup(value, lookup), type: 0x30 } });
549
+ return { state: { [key]: value } };
550
+ },
551
+ convertGet: async (entity, key, meta) => {
552
+ await entity.read("genOnOffSwitchCfg", [attrDeviceModelNumber]);
553
+ },
554
+ },
555
+ };
556
+ const localFromZigbeeThermostat = [
557
+ fz.humidity,
558
+ fz.thermostat,
559
+ fz.fan,
560
+ fz.namron_hvac_user_interface,
561
+ fz.thermostat_weekly_schedule,
562
+ fzLocal.thermostat_custom_fw,
563
+ fzLocal.thermostat_schedule,
564
+ fzLocal.display_brightness,
565
+ fzLocal.fancontrol_control,
566
+ fzLocal.thermostat_humidity_offset,
567
+ ];
568
+ const localToZigbeeThermostat = [
569
+ tz.thermostat_local_temperature,
570
+ tz.thermostat_outdoor_temperature,
571
+ tz.thermostat_system_mode,
572
+ tz.thermostat_occupied_heating_setpoint,
573
+ tz.thermostat_running_state,
574
+ tz.thermostat_local_temperature_calibration,
575
+ tz.thermostat_min_heat_setpoint_limit,
576
+ tz.thermostat_max_heat_setpoint_limit,
577
+ tz.thermostat_programming_operation_mode,
578
+ tz.namron_thermostat_child_lock,
579
+ tz.thermostat_weekly_schedule,
580
+ tz.fan_mode,
581
+ tzLocal.display_brightness,
582
+ tzLocal.thermostat_sensor_used,
583
+ tzLocal.thermostat_deadzone,
584
+ tzLocal.thermostat_deadzone_10,
585
+ tzLocal.thermostat_setpoint_raise_lower,
586
+ tzLocal.thermostat_frost_protect,
587
+ tzLocal.thermostat_heat_protect,
588
+ tzLocal.thermostat_eco_mode,
589
+ tzLocal.thermostat_eco_mode_cool_temperature,
590
+ tzLocal.thermostat_eco_mode_heat_temperature,
591
+ tzLocal.thermostat_frost_protect_onoff,
592
+ tzLocal.thermostat_brightness_level,
593
+ tzLocal.thermostat_screen_sleep_mode,
594
+ tzLocal.thermostat_screen_sleep_time,
595
+ tzLocal.thermostat_led_indicator,
596
+ tzLocal.thermostat_sound,
597
+ tzLocal.thermostat_inversion,
598
+ tzLocal.thermostat_schedule_mode,
599
+ tzLocal.thermostat_settings_reset,
600
+ tzLocal.thermostat_ext_temperature_calibration,
601
+ tzLocal.thermostat_mode_child_lock,
602
+ tzLocal.thermostat_manuf_name,
603
+ tzLocal.fancontrol_control,
604
+ tzLocal.thermostat_humidity_offset,
605
+ ];
606
+ function localActionExtend(args = {}) {
607
+ const { localAction = ["hold", "single", "double", "triple", "quadruple", "quintuple", "release"], bind = true, reporting = true, reportingConfig = { min: 10, max: 0, change: 1 }, endpointNames = undefined, } = args;
608
+ let actions = localAction;
609
+ if (endpointNames) {
610
+ actions = localAction.flatMap((c) => endpointNames.map((e) => `${c}_${e}`));
611
+ }
612
+ const exposes = [e.enum("action", ea.STATE, actions)];
613
+ const actionPayloadLookup = {
614
+ 0: "hold",
615
+ 1: "single",
616
+ 2: "double",
617
+ 3: "triple",
618
+ 4: "quadruple",
619
+ 5: "quintuple",
620
+ 255: "release",
621
+ };
622
+ const fromZigbee = [
623
+ {
624
+ cluster: "genMultistateInput",
625
+ type: ["attributeReport", "readResponse"],
626
+ convert: (model, msg, publish, options, meta) => {
627
+ if (utils.hasAlreadyProcessedMessage(msg, model))
628
+ return;
629
+ const value = msg.data.presentValue;
630
+ //logger.logger.info('msg.data: ' + data[attribute]);
631
+ if (value === 300)
632
+ return { action: "N/A" };
633
+ const payload = { action: utils.postfixWithEndpointName(actionPayloadLookup[value], msg, model, meta) };
634
+ return payload;
635
+ },
636
+ },
637
+ ];
638
+ const result = { exposes, fromZigbee, isModernExtend: true };
639
+ if (reporting)
640
+ result.configure = [
641
+ m.setupConfigureForBinding("genMultistateInput", "input", endpointNames),
642
+ m.setupConfigureForReporting("genMultistateInput", "presentValue", { config: reportingConfig, access: ea.GET, endpointNames }),
643
+ ];
644
+ else if (bind)
645
+ result.configure = [m.setupConfigureForBinding("genMultistateInput", "input", endpointNames)];
646
+ return result;
647
+ }
648
+ async function configureCommon(device, coordinatorEndpoint, definition) {
649
+ //logger.info(definition.model, NS);
650
+ const endpoint1 = device.getEndpoint(1);
651
+ const endpoint2 = device.getEndpoint(2);
652
+ await endpoint1.read("hvacUserInterfaceCfg", ["keypadLockout"]);
653
+ await endpoint1.read("genLevelCtrl", ["currentLevel"]);
654
+ await endpoint2.read("genLevelCtrl", ["currentLevel"]);
655
+ await endpoint1.read("hvacThermostat", ["localTemp"]);
656
+ await endpoint1.read("hvacThermostat", ["outdoorTemp"]);
657
+ await endpoint1.read("hvacThermostat", ["absMinHeatSetpointLimit"]);
658
+ await endpoint1.read("hvacThermostat", ["absMaxHeatSetpointLimit"]);
659
+ await endpoint1.read("hvacThermostat", ["minHeatSetpointLimit"]);
660
+ await endpoint1.read("hvacThermostat", ["maxHeatSetpointLimit"]);
661
+ await endpoint1.read("hvacThermostat", ["localTemperatureCalibration"]);
662
+ await endpoint1.read("hvacThermostat", ["occupiedHeatingSetpoint"]);
663
+ await endpoint1.read("hvacThermostat", ["programingOperMode"]);
664
+ await endpoint1.read("hvacThermostat", ["systemMode"]);
665
+ await endpoint1.read("hvacThermostat", ["runningState"]);
666
+ await endpoint1.read("hvacThermostat", ["minSetpointDeadBand"]);
667
+ await endpoint1.read("hvacThermostat", [attrThermSensorUser]);
668
+ await endpoint1.read("hvacThermostat", [attrThermFrostProtect]);
669
+ await endpoint1.read("hvacThermostat", [attrThermHeatProtect]);
670
+ await endpoint1.read("hvacThermostat", [attrThermEcoMode]);
671
+ await endpoint1.read("hvacThermostat", [attrThermEcoModeCoolTemperature]);
672
+ await endpoint1.read("hvacThermostat", [attrThermEcoModeHeatTemperature]);
673
+ await endpoint1.read("hvacThermostat", [attrThermFrostProtectOnOff]);
674
+ await endpoint1.read("hvacThermostat", [attrThermScheduleMode]);
675
+ await endpoint1.read("hvacThermostat", [attrThermSound]);
676
+ await endpoint1.read("hvacThermostat", [attrThermLevel]);
677
+ await endpoint1.read("hvacThermostat", [attrThermInversion]);
678
+ await endpoint1.read("hvacThermostat", [attrThermExtTemperatureCalibration]);
679
+ if (definition.model === model_r09) {
680
+ await endpoint1.read("hvacThermostat", [attrThermModeKeyLock]);
681
+ }
682
+ await endpoint1.read("hvacFanCtrl", ["fanMode"]);
683
+ await endpoint1.read("hvacFanCtrl", [attrFanCtrlControl]);
684
+ await reporting.bind(endpoint1, coordinatorEndpoint, ["hvacThermostat", "hvacUserInterfaceCfg", "hvacFanCtrl"]);
685
+ if (definition.model === modelR0c) {
686
+ await reporting.bind(endpoint1, coordinatorEndpoint, ["msRelativeHumidity"]);
687
+ await endpoint1.read("msRelativeHumidity", ["measuredValue"]);
688
+ await endpoint1.read("msRelativeHumidity", [attrHumidityOffset]);
689
+ const payload_humidity = [
690
+ { attribute: { ID: 0x0000, type: 0x21 }, minimumReportInterval: 10, maximumReportInterval: 3600, reportableChange: 10 },
691
+ ];
692
+ await endpoint1.configureReporting("msRelativeHumidity", payload_humidity);
693
+ const payload_humidity_offset = [
694
+ { attribute: { ID: attrHumidityOffset, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
695
+ ];
696
+ await endpoint1.configureReporting("msRelativeHumidity", payload_humidity_offset);
697
+ }
698
+ if (definition.model === model_r03 || definition.model === model_r04 || definition.model === model_r09 || definition.model === modelR0c) {
699
+ await reporting.bind(endpoint1, coordinatorEndpoint, ["genLevelCtrl"]);
700
+ const payloadCurrentLevel = [
701
+ { attribute: { ID: 0x0000, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
702
+ ];
703
+ await endpoint1.configureReporting("genLevelCtrl", payloadCurrentLevel);
704
+ if (definition.model === model_r03 || definition.model === model_r09) {
705
+ await reporting.bind(endpoint2, coordinatorEndpoint, ["genLevelCtrl"]);
706
+ await endpoint2.configureReporting("genLevelCtrl", payloadCurrentLevel);
707
+ }
708
+ }
709
+ await reporting.thermostatTemperature(endpoint1, { min: 0, max: 3600, change: 0 });
710
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint1, { min: 0, max: 3600, change: 0 });
711
+ await reporting.thermostatRunningState(endpoint1, { min: 0, max: 3600, change: 0 });
712
+ await reporting.thermostatSystemMode(endpoint1, { min: 0, max: 3600, change: 0 });
713
+ await reporting.thermostatTemperatureCalibration(endpoint1, { min: 0, max: 3600, change: 0 });
714
+ await reporting.thermostatKeypadLockMode(endpoint1, { min: 0, max: 3600, change: 0 });
715
+ const payload_oper_mode = [
716
+ { attribute: "programingOperMode", minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
717
+ ];
718
+ await endpoint1.configureReporting("hvacThermostat", payload_oper_mode);
719
+ const payload_sensor_used = [
720
+ { attribute: { ID: attrThermSensorUser, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
721
+ ];
722
+ await endpoint1.configureReporting("hvacThermostat", payload_sensor_used);
723
+ const payload_deadzone = [{ attribute: { ID: 0x0019, type: 0x28 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 }];
724
+ await endpoint1.configureReporting("hvacThermostat", payload_deadzone);
725
+ const payload_min = [{ attribute: { ID: 0x0015, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 }];
726
+ await endpoint1.configureReporting("hvacThermostat", payload_min);
727
+ const payload_max = [{ attribute: { ID: 0x0016, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 }];
728
+ await endpoint1.configureReporting("hvacThermostat", payload_max);
729
+ if (definition.model !== model_r01 && definition.model !== model_r06 && definition.model !== model_r0b) {
730
+ const payload_outdoor = [{ attribute: { ID: 0x0001, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 }];
731
+ await endpoint1.configureReporting("hvacThermostat", payload_outdoor);
732
+ }
733
+ const payload_frost_protect = [
734
+ {
735
+ attribute: { ID: attrThermFrostProtect, type: 0x29 },
736
+ minimumReportInterval: 0,
737
+ maximumReportInterval: 3600,
738
+ reportableChange: 0,
739
+ },
740
+ ];
741
+ await endpoint1.configureReporting("hvacThermostat", payload_frost_protect);
742
+ const payload_heat_protect = [
743
+ { attribute: { ID: attrThermHeatProtect, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
744
+ ];
745
+ await endpoint1.configureReporting("hvacThermostat", payload_heat_protect);
746
+ if (definition.model === model_r03 || definition.model === model_r04 || definition.model === model_r07 || definition.model === modelR0c) {
747
+ const payload_eco_mode = [
748
+ { attribute: { ID: attrThermEcoMode, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
749
+ ];
750
+ await endpoint1.configureReporting("hvacThermostat", payload_eco_mode);
751
+ const payload_eco_mode_heat_temp = [
752
+ {
753
+ attribute: { ID: attrThermEcoModeHeatTemperature, type: 0x29 },
754
+ minimumReportInterval: 0,
755
+ maximumReportInterval: 3600,
756
+ reportableChange: 0,
757
+ },
758
+ ];
759
+ await endpoint1.configureReporting("hvacThermostat", payload_eco_mode_heat_temp);
760
+ if (definition.model === model_r07) {
761
+ const payload_eco_mode_cool_temp = [
762
+ {
763
+ attribute: { ID: attrThermEcoModeCoolTemperature, type: 0x29 },
764
+ minimumReportInterval: 0,
765
+ maximumReportInterval: 3600,
766
+ reportableChange: 0,
767
+ },
768
+ ];
769
+ await endpoint1.configureReporting("hvacThermostat", payload_eco_mode_cool_temp);
770
+ const payload_fan_control = [
771
+ { attribute: { ID: attrFanCtrlControl, type: 0x10 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
772
+ ];
773
+ await endpoint1.configureReporting("hvacFanCtrl", payload_fan_control);
774
+ await reporting.fanMode(endpoint1, { min: 0, max: 3600, change: 0 });
775
+ }
776
+ }
777
+ if (definition.model === model_r06) {
778
+ const payload_frost_protect_onoff = [
779
+ { attribute: { ID: attrThermFrostProtectOnOff, type: 0x10 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
780
+ ];
781
+ await endpoint1.configureReporting("hvacThermostat", payload_frost_protect_onoff);
782
+ const payload_sound = [
783
+ { attribute: { ID: attrThermSound, type: 0x10 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
784
+ ];
785
+ await endpoint1.configureReporting("hvacThermostat", payload_sound);
786
+ const payload_inversion = [
787
+ { attribute: { ID: attrThermInversion, type: 0x10 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
788
+ ];
789
+ await endpoint1.configureReporting("hvacThermostat", payload_inversion);
790
+ const payload_level = [
791
+ { attribute: { ID: attrThermLevel, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
792
+ ];
793
+ await endpoint1.configureReporting("hvacThermostat", payload_level);
794
+ const payload_schedule_mode = [
795
+ { attribute: { ID: attrThermScheduleMode, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
796
+ ];
797
+ await endpoint1.configureReporting("hvacThermostat", payload_schedule_mode);
798
+ }
799
+ if (definition.model === model_r09) {
800
+ const payload_inversion = [
801
+ { attribute: { ID: attrThermInversion, type: 0x10 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
802
+ ];
803
+ await endpoint1.configureReporting("hvacThermostat", payload_inversion);
804
+ }
805
+ if (definition.model === model_r08 || definition.model === model_r09) {
806
+ const payload_eco_mode = [
807
+ { attribute: { ID: attrThermEcoMode, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0 },
808
+ ];
809
+ await endpoint1.configureReporting("hvacThermostat", payload_eco_mode);
810
+ const payload_ext_temp_calibration = [
811
+ {
812
+ attribute: { ID: attrThermExtTemperatureCalibration, type: 0x28 },
813
+ minimumReportInterval: 0,
814
+ maximumReportInterval: 3600,
815
+ reportableChange: 0,
816
+ },
817
+ ];
818
+ await endpoint1.configureReporting("hvacThermostat", payload_ext_temp_calibration);
819
+ }
820
+ }
821
+ const energyResetExtend = {
822
+ energyReset: () => {
823
+ const exposes = [e.enum("energy_reset", ea.SET, ["reset"]).withDescription("Reset of accumulated energy")];
824
+ const toZigbee = [
825
+ {
826
+ key: ["energy_reset"],
827
+ convertSet: async (entity, key, value, meta) => {
828
+ await entity.command("seMetering", 0x80, {}, utils.getOptions(meta.mapped, entity));
829
+ },
830
+ },
831
+ ];
832
+ // const fromZigbee = [];
833
+ return {
834
+ exposes,
835
+ fromZigbee: [],
836
+ toZigbee,
837
+ isModernExtend: true,
838
+ };
839
+ },
840
+ };
841
+ function electricityDeviceModel(args) {
842
+ const { name, lookup, cluster, attribute, zigbeeCommandOptions } = args;
843
+ const attributeKey = utils.isString(attribute) ? attribute : attribute.ID;
844
+ const access = ea[args.access ?? "ALL"];
845
+ const mExtend = m.enumLookup(args);
846
+ const toZigbee = [
847
+ {
848
+ key: [name],
849
+ convertSet: access & ea.SET
850
+ ? async (entity, key, value, meta) => {
851
+ const payloadValue = utils.getFromLookup(value, lookup);
852
+ const payload = utils.isString(attribute)
853
+ ? { [attribute]: payloadValue }
854
+ : { [attribute.ID]: { value: payloadValue, type: attribute.type } };
855
+ const ep = utils.determineEndpoint(entity, meta, cluster);
856
+ await ep.write(cluster, payload, zigbeeCommandOptions);
857
+ await ep.read("seMetering", ["divisor", "multiplier"]);
858
+ await ep.read("haElectricalMeasurement", ["acPowerDivisor", "acPowerMultiplier"]);
859
+ await ep.read("haElectricalMeasurement", ["acCurrentDivisor", "acCurrentMultiplier"]);
860
+ await ep.read("haElectricalMeasurement", ["acVoltageDivisor", "acVoltageMultiplier"]);
861
+ return { state: { [key]: value } };
862
+ }
863
+ : undefined,
864
+ convertGet: access & ea.GET
865
+ ? async (entity, key, meta) => {
866
+ await utils
867
+ .determineEndpoint(entity, meta, cluster)
868
+ .read(cluster, [attributeKey], zigbeeCommandOptions);
869
+ }
870
+ : undefined,
871
+ },
872
+ ];
873
+ return { ...mExtend, toZigbee, isModernExtend: true };
874
+ }
875
+ const electricityMeterExtend = {
876
+ elMeter: () => {
877
+ const exposes = [
878
+ e.numeric("energy_tier_1", ea.STATE_GET).withUnit("kWh").withDescription("Energy consumed at Tier 1"),
879
+ e.numeric("energy_tier_2", ea.STATE_GET).withUnit("kWh").withDescription("Energy consumed at Tier 2"),
880
+ e.numeric("energy_tier_3", ea.STATE_GET).withUnit("kWh").withDescription("Energy consumed at Tier 3"),
881
+ e.numeric("energy_tier_4", ea.STATE_GET).withUnit("kWh").withDescription("Energy consumed at Tier 4"),
882
+ e.text("model_name", ea.STATE_GET).withDescription("Meter Model Name"),
883
+ e.text("serial_number", ea.STATE_GET).withDescription("Meter Serial Number"),
884
+ e.text("date_release", ea.STATE_GET).withDescription("Meter Date Release"),
885
+ e.numeric("battery_life", ea.STATE_GET).withUnit("%").withDescription("Battery Life"),
886
+ e.binary("tamper", ea.STATE, true, false).withDescription("Tamper"),
887
+ e.binary("battery_low", ea.STATE, true, false).withDescription("Battery Low"),
888
+ e.numeric("device_address_preset", ea.STATE_SET).withDescription("Device Address").withValueMin(1).withValueMax(9999999),
889
+ e.text("device_password_preset", ea.STATE_SET).withDescription("Meter Password"),
890
+ e.numeric("device_measurement_preset", ea.ALL).withDescription("Measurement Period").withValueMin(1).withValueMax(255),
891
+ ];
892
+ const toZigbee = [
893
+ tz.currenttier1summdelivered,
894
+ tz.currenttier2summdelivered,
895
+ tz.currenttier3summdelivered,
896
+ tz.currenttier4summdelivered,
897
+ {
898
+ key: ["model_name"],
899
+ convertGet: async (entity, key, meta) => {
900
+ await entity.read("seMetering", ["deviceName"]);
901
+ },
902
+ convertSet: async (entity, key, value, meta) => {
903
+ return await null;
904
+ },
905
+ },
906
+ {
907
+ key: ["serial_number"],
908
+ convertGet: async (entity, key, meta) => {
909
+ await entity.read("seMetering", ["meterSerialNumber"]);
910
+ },
911
+ convertSet: async (entity, key, value, meta) => {
912
+ return await null;
913
+ },
914
+ },
915
+ {
916
+ key: ["date_release"],
917
+ convertGet: async (entity, key, meta) => {
918
+ await entity.read("seMetering", ["dateRelease"]);
919
+ },
920
+ convertSet: async (entity, key, value, meta) => {
921
+ return await null;
922
+ },
923
+ },
924
+ {
925
+ key: ["battery_life"],
926
+ convertGet: async (entity, key, meta) => {
927
+ await entity.read("seMetering", ["remainingBattLife"]);
928
+ },
929
+ convertSet: async (entity, key, value, meta) => {
930
+ return await null;
931
+ },
932
+ },
933
+ {
934
+ key: ["device_address_preset"],
935
+ convertSet: async (entity, key, value, meta) => {
936
+ const device_address_preset = value;
937
+ await entity.write("seMetering", { deviceAddress: device_address_preset });
938
+ return { readAfterWriteTime: 250, state: { device_address_preset: value } };
939
+ },
940
+ },
941
+ {
942
+ key: ["device_password_preset"],
943
+ convertSet: async (entity, key, value, meta) => {
944
+ const device_password_preset = value.toString();
945
+ await entity.write("seMetering", { devicePassword: device_password_preset });
946
+ return { readAfterWriteTime: 250, state: { device_password_preset: value } };
947
+ },
948
+ },
949
+ {
950
+ key: ["device_measurement_preset"],
951
+ convertSet: async (entity, key, value, meta) => {
952
+ const device_measurement_preset = value;
953
+ await entity.write("seMetering", { readPeriod: device_measurement_preset });
954
+ return { readAfterWriteTime: 250, state: { device_measurement_preset: value } };
955
+ },
956
+ convertGet: async (entity, key, meta) => {
957
+ await entity.read("seMetering", ["readPeriod"]);
958
+ },
959
+ },
960
+ ];
961
+ const fromZigbee = [
962
+ fz.metering,
963
+ {
964
+ cluster: "seMetering",
965
+ type: ["attributeReport", "readResponse"],
966
+ convert: (model, msg, publish, options, meta) => {
967
+ const result = {};
968
+ if (msg.data.deviceName !== undefined) {
969
+ const data = msg.data.deviceName;
970
+ result.model_name = data.toString();
971
+ }
972
+ return result;
973
+ },
974
+ },
975
+ {
976
+ cluster: "seMetering",
977
+ type: ["attributeReport", "readResponse"],
978
+ convert: (model, msg, publish, options, meta) => {
979
+ const result = {};
980
+ if (msg.data.meterSerialNumber !== undefined) {
981
+ const data = msg.data.meterSerialNumber;
982
+ result.serial_number = data.toString();
983
+ }
984
+ return result;
985
+ },
986
+ },
987
+ {
988
+ cluster: "seMetering",
989
+ type: ["attributeReport", "readResponse"],
990
+ convert: (model, msg, publish, options, meta) => {
991
+ const result = {};
992
+ if (msg.data.dateRelease !== undefined) {
993
+ const data = msg.data.dateRelease;
994
+ result.date_release = data.toString();
995
+ }
996
+ return result;
997
+ },
998
+ },
999
+ {
1000
+ cluster: "seMetering",
1001
+ type: ["attributeReport", "readResponse"],
1002
+ convert: (model, msg, publish, options, meta) => {
1003
+ const result = {};
1004
+ if (msg.data.status !== undefined) {
1005
+ const data = msg.data.status;
1006
+ return {
1007
+ battery_low: (data & (1 << 1)) > 0,
1008
+ tamper: (data & (1 << 2)) > 0,
1009
+ };
1010
+ }
1011
+ return result;
1012
+ },
1013
+ },
1014
+ {
1015
+ cluster: "seMetering",
1016
+ type: ["attributeReport", "readResponse"],
1017
+ convert: (model, msg, publish, options, meta) => {
1018
+ const result = {};
1019
+ if (msg.data.remainingBattLife !== undefined) {
1020
+ const data = msg.data.remainingBattLife;
1021
+ result.battery_life = data;
1022
+ }
1023
+ return result;
1024
+ },
1025
+ },
1026
+ {
1027
+ cluster: "seMetering",
1028
+ type: ["readResponse"],
1029
+ convert: (model, msg, publish, options, meta) => {
1030
+ const result = {};
1031
+ if (msg.data.readPeriod !== undefined) {
1032
+ result.device_measurement_preset = msg.data.readPeriod; //data;
1033
+ }
1034
+ return result;
1035
+ },
1036
+ },
1037
+ ];
1038
+ const configure = [
1039
+ async (device, coordinatorEndpoint, definition) => {
1040
+ const endpoint1 = device.getEndpoint(1);
1041
+ await endpoint1.read("seMetering", ["currentTier1SummDelivered"]);
1042
+ await endpoint1.read("seMetering", ["currentTier2SummDelivered"]);
1043
+ await endpoint1.read("seMetering", ["currentTier3SummDelivered"]);
1044
+ await endpoint1.read("seMetering", ["currentTier4SummDelivered"]);
1045
+ await endpoint1.read("seMetering", ["meterSerialNumber"]);
1046
+ await endpoint1.read("seMetering", ["deviceName"]);
1047
+ await endpoint1.read("seMetering", ["readPeriod"]);
1048
+ await endpoint1.read("seMetering", ["deviceModel"]);
1049
+ await endpoint1.read("seMetering", ["dateRelease"]);
1050
+ await endpoint1.read("seMetering", ["remainingBattLife", "status"]);
1051
+ await reporting.bind(endpoint1, coordinatorEndpoint, ["seMetering"]);
1052
+ await endpoint1.configureReporting("seMetering", [
1053
+ {
1054
+ attribute: "currentTier1SummDelivered",
1055
+ minimumReportInterval: 0,
1056
+ maximumReportInterval: 3600,
1057
+ reportableChange: 0,
1058
+ },
1059
+ ]);
1060
+ await endpoint1.configureReporting("seMetering", [
1061
+ {
1062
+ attribute: "currentTier2SummDelivered",
1063
+ minimumReportInterval: 0,
1064
+ maximumReportInterval: 3600,
1065
+ reportableChange: 0,
1066
+ },
1067
+ ]);
1068
+ await endpoint1.configureReporting("seMetering", [
1069
+ {
1070
+ attribute: "currentTier3SummDelivered",
1071
+ minimumReportInterval: 0,
1072
+ maximumReportInterval: 3600,
1073
+ reportableChange: 0,
1074
+ },
1075
+ ]);
1076
+ await endpoint1.configureReporting("seMetering", [
1077
+ {
1078
+ attribute: "currentTier4SummDelivered",
1079
+ minimumReportInterval: 0,
1080
+ maximumReportInterval: 3600,
1081
+ reportableChange: 0,
1082
+ },
1083
+ ]);
1084
+ await endpoint1.configureReporting("seMetering", [
1085
+ {
1086
+ attribute: "currentSummDelivered",
1087
+ minimumReportInterval: 0,
1088
+ maximumReportInterval: 3600,
1089
+ reportableChange: 0,
1090
+ },
1091
+ ]);
1092
+ await endpoint1.configureReporting("seMetering", [
1093
+ {
1094
+ attribute: "status",
1095
+ minimumReportInterval: 0,
1096
+ maximumReportInterval: 3600,
1097
+ reportableChange: 0,
1098
+ },
1099
+ ]);
1100
+ await endpoint1.configureReporting("seMetering", [
1101
+ {
1102
+ attribute: "remainingBattLife",
1103
+ minimumReportInterval: 0,
1104
+ maximumReportInterval: 3600,
1105
+ reportableChange: 0,
1106
+ },
1107
+ ]);
1108
+ await endpoint1.configureReporting("seMetering", [
1109
+ {
1110
+ attribute: "meterSerialNumber",
1111
+ minimumReportInterval: 0,
1112
+ maximumReportInterval: 3600,
1113
+ reportableChange: 0,
1114
+ },
1115
+ ]);
1116
+ await endpoint1.configureReporting("seMetering", [
1117
+ {
1118
+ attribute: "dateRelease",
1119
+ minimumReportInterval: 0,
1120
+ maximumReportInterval: 3600,
1121
+ reportableChange: 0,
1122
+ },
1123
+ ]);
1124
+ await endpoint1.configureReporting("seMetering", [
1125
+ {
1126
+ attribute: "deviceName",
1127
+ minimumReportInterval: 0,
1128
+ maximumReportInterval: 3600,
1129
+ reportableChange: 0,
1130
+ },
1131
+ ]);
1132
+ },
1133
+ ];
1134
+ return {
1135
+ exposes,
1136
+ fromZigbee,
1137
+ toZigbee,
1138
+ configure,
1139
+ isModernExtend: true,
1140
+ };
1141
+ },
1142
+ };
1143
+ function waterPreset() {
1144
+ const exposes = [
1145
+ e
1146
+ .composite("preset", "preset", ea.SET)
1147
+ .withFeature(e
1148
+ .numeric("hot_water_preset", ea.SET)
1149
+ .withValueMin(0)
1150
+ .withValueMax(99999999)
1151
+ .withValueStep(1)
1152
+ .withUnit("L")
1153
+ .withDescription("Preset hot water"))
1154
+ .withFeature(e
1155
+ .numeric("cold_water_preset", ea.SET)
1156
+ .withValueMin(0)
1157
+ .withValueMax(99999999)
1158
+ .withValueStep(1)
1159
+ .withUnit("L")
1160
+ .withDescription("Preset cold water"))
1161
+ .withFeature(e
1162
+ .numeric("step_water_preset", ea.SET)
1163
+ .withValueMin(1)
1164
+ .withValueMax(100)
1165
+ .withValueStep(1)
1166
+ .withUnit("L")
1167
+ .withDescription("Preset step water")),
1168
+ ];
1169
+ const toZigbee = [
1170
+ {
1171
+ key: ["preset"],
1172
+ convertSet: async (entity, key, value, meta) => {
1173
+ const endpoint = meta.device.getEndpoint(3);
1174
+ const values = {
1175
+ // biome-ignore lint/suspicious/noExplicitAny: ignored using `--suppress`
1176
+ hot_water: value.hot_water_preset,
1177
+ // biome-ignore lint/suspicious/noExplicitAny: ignored using `--suppress`
1178
+ cold_water: value.cold_water_preset,
1179
+ // biome-ignore lint/suspicious/noExplicitAny: ignored using `--suppress`
1180
+ step_water: value.step_water_preset,
1181
+ };
1182
+ if (values.hot_water != null && values.hot_water >= 0) {
1183
+ const hot_water_preset = Number.parseInt(values.hot_water, 10);
1184
+ await endpoint.write("seMetering", { 61440: { value: hot_water_preset, type: 0x23 } });
1185
+ }
1186
+ if (values.cold_water != null && values.cold_water >= 0) {
1187
+ const cold_water_preset = Number.parseInt(values.cold_water, 10);
1188
+ await endpoint.write("seMetering", { 61441: { value: cold_water_preset, type: 0x23 } });
1189
+ }
1190
+ if (values.step_water != null && values.step_water >= 0) {
1191
+ const step_water_preset = Number.parseInt(values.step_water, 10);
1192
+ await endpoint.write("seMetering", { 61442: { value: step_water_preset, type: 0x21 } });
1193
+ }
1194
+ },
1195
+ },
1196
+ ];
1197
+ return { toZigbee, exposes, isModernExtend: true };
1198
+ }
1199
+ const air_extend = {
1200
+ led_brightness: () => {
1201
+ const exposes = [e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(255).withDescription("LED brightness")];
1202
+ const toZigbee = [
1203
+ {
1204
+ key: ["brightness"],
1205
+ convertSet: async (entity, key, value, meta) => {
1206
+ await entity.command("genLevelCtrl", "moveToLevel", { level: value, transtime: 0, optionsMask: 0, optionsOverride: 0 }, utils.getOptions(meta.mapped, entity));
1207
+ return { state: { brightness: value } };
1208
+ },
1209
+ convertGet: async (entity, key, meta) => {
1210
+ await entity.read("genLevelCtrl", ["currentLevel"]);
1211
+ },
1212
+ },
1213
+ ];
1214
+ const fromZigbee = [
1215
+ {
1216
+ cluster: "genLevelCtrl",
1217
+ type: ["attributeReport", "readResponse"],
1218
+ convert: (model, msg, publish, options, meta) => {
1219
+ const result = {};
1220
+ if (Object.hasOwn(msg.data, "currentLevel")) {
1221
+ const data = msg.data.currentLevel;
1222
+ result.brightness = data;
1223
+ }
1224
+ return result;
1225
+ },
1226
+ },
1227
+ ];
1228
+ return {
1229
+ exposes,
1230
+ fromZigbee,
1231
+ toZigbee,
1232
+ isModernExtend: true,
1233
+ };
1234
+ },
1235
+ features_sensors: () => {
1236
+ const exposes = [
1237
+ e.composite("features_sensors", "features_sensors", ea.SET).withFeature(e.enum("features", ea.STATE_SET, switchFeatures)),
1238
+ ];
1239
+ const toZigbee = [
1240
+ {
1241
+ key: ["features_sensors"],
1242
+ convertSet: async (entity, key, rawValue, meta) => {
1243
+ const endpoint = meta.device.getEndpoint(1);
1244
+ // biome-ignore lint/suspicious/noExplicitAny: ignored using `--suppress`
1245
+ const value = rawValue.features;
1246
+ if (value != null) {
1247
+ const lookup = {
1248
+ nothing: 0,
1249
+ co2_forced_calibration: 1,
1250
+ co2_factory_reset: 2,
1251
+ bind_reset: 3,
1252
+ };
1253
+ const value_lookup = utils.getFromLookup(value, lookup);
1254
+ //logger.logger.info("value_lookup: " + value_lookup);
1255
+ if (value_lookup >= 1 && value_lookup <= 3) {
1256
+ await endpoint.write("hvacUserInterfaceCfg", { [attrFeaturesSensors]: { value: value_lookup, type: 0x30 } });
1257
+ return {
1258
+ state: { [key]: value },
1259
+ };
1260
+ }
1261
+ }
1262
+ },
1263
+ convertGet: async (entity, key, meta) => {
1264
+ await entity.read("hvacUserInterfaceCfg", [attrFeaturesSensors]);
1265
+ },
1266
+ },
1267
+ ];
1268
+ return {
1269
+ exposes,
1270
+ fromZigbee: [],
1271
+ toZigbee,
1272
+ isModernExtend: true,
1273
+ };
1274
+ },
1275
+ };
1276
+ exports.definitions = [
1277
+ {
1278
+ zigbeeModel: ["Tuya_CO2Sensor_r01"],
1279
+ model: "SLACKY_DIY_CO2_SENSOR_R01",
1280
+ vendor: "Slacky-DIY",
1281
+ description: "Tuya CO2 sensor with custom Firmware",
1282
+ extend: [m.co2({ reporting: ppmReporting })],
1283
+ ota: true,
1284
+ },
1285
+ {
1286
+ zigbeeModel: ["Tuya_CO2Sensor_r02"],
1287
+ model: "SLACKY_DIY_CO2_SENSOR_R02",
1288
+ vendor: "Slacky-DIY",
1289
+ description: "Tuya CO2 sensor with custom Firmware",
1290
+ extend: [
1291
+ m.co2({ reporting: ppmReporting }),
1292
+ m.numeric({
1293
+ name: "formaldehyde",
1294
+ access: "STATE_GET",
1295
+ cluster: "msFormaldehyde",
1296
+ attribute: "measuredValue",
1297
+ reporting: ppmReporting,
1298
+ unit: "ppm",
1299
+ scale: 0.000001,
1300
+ precision: 2,
1301
+ description: "Measured Formaldehyde value",
1302
+ }),
1303
+ m.numeric({
1304
+ name: "voc",
1305
+ access: "STATE_GET",
1306
+ cluster: "genAnalogInput",
1307
+ attribute: "presentValue",
1308
+ reporting: ppmReporting,
1309
+ unit: "ppm",
1310
+ scale: 0.000001,
1311
+ precision: 2,
1312
+ description: "Measured VOC value",
1313
+ }),
1314
+ m.temperature(),
1315
+ m.humidity(),
1316
+ ],
1317
+ ota: true,
1318
+ },
1319
+ {
1320
+ zigbeeModel: ["Watermeter_TLSR8258"],
1321
+ model: "Watermeter_TLSR8258",
1322
+ vendor: "Slacky-DIY",
1323
+ description: "Water Meter",
1324
+ configure: async (device, coordinatorEndpoint, logger) => {
1325
+ const thirdEndpoint = device.getEndpoint(3);
1326
+ await thirdEndpoint.read("seMetering", [0xf000, 0xf001, 0xf002]);
1327
+ },
1328
+ extend: [
1329
+ m.deviceEndpoints({
1330
+ endpoints: {
1331
+ "1": 1,
1332
+ "2": 2,
1333
+ "3": 3,
1334
+ "4": 4,
1335
+ "5": 5,
1336
+ },
1337
+ }),
1338
+ m.iasZoneAlarm({ zoneType: "water_leak", zoneAttributes: ["alarm_1"] }),
1339
+ m.battery({
1340
+ voltage: true,
1341
+ voltageReporting: true,
1342
+ percentageReportingConfig: batteryReporting,
1343
+ voltageReportingConfig: batteryReporting,
1344
+ }),
1345
+ m.enumLookup({
1346
+ name: "switch_actions",
1347
+ endpointName: "4",
1348
+ lookup: { on_off: 0, off_on: 1, toggle: 2 },
1349
+ cluster: "genOnOffSwitchCfg",
1350
+ attribute: "switchActions",
1351
+ description: "Actions switch 1",
1352
+ }),
1353
+ m.enumLookup({
1354
+ name: "switch_actions",
1355
+ endpointName: "5",
1356
+ lookup: { on_off: 0, off_on: 1, toggle: 2 },
1357
+ cluster: "genOnOffSwitchCfg",
1358
+ attribute: "switchActions",
1359
+ description: "Actions switch 2",
1360
+ }),
1361
+ m.numeric({
1362
+ name: "volume",
1363
+ endpointNames: ["1"],
1364
+ access: "STATE_GET",
1365
+ cluster: "seMetering",
1366
+ attribute: "currentSummDelivered",
1367
+ reporting: { min: 0, max: 300, change: 0 },
1368
+ unit: "L",
1369
+ description: "Hot water",
1370
+ }),
1371
+ m.numeric({
1372
+ name: "volume",
1373
+ endpointNames: ["2"],
1374
+ access: "STATE_GET",
1375
+ cluster: "seMetering",
1376
+ attribute: "currentSummDelivered",
1377
+ reporting: { min: 0, max: 300, change: 0 },
1378
+ unit: "L",
1379
+ description: "Cold water",
1380
+ }),
1381
+ waterPreset(),
1382
+ ],
1383
+ ota: true,
1384
+ meta: { multiEndpoint: true },
1385
+ },
1386
+ {
1387
+ zigbeeModel: ["Smoke_Sensor_TLSR8258"],
1388
+ model: "Smoke Sensor TLSR8258",
1389
+ vendor: "Slacky-DIY",
1390
+ description: "Smoke Sensor on Rubezh IP 212-50M2 base",
1391
+ extend: [
1392
+ m.iasZoneAlarm({ zoneType: "smoke", zoneAttributes: ["alarm_1", "tamper", "battery_low"] }),
1393
+ m.battery({
1394
+ voltage: true,
1395
+ voltageReporting: true,
1396
+ percentageReportingConfig: batteryReporting,
1397
+ voltageReportingConfig: batteryReporting,
1398
+ }),
1399
+ m.commandsOnOff(),
1400
+ m.enumLookup({
1401
+ access: "STATE",
1402
+ name: "switch_type",
1403
+ lookup: { toggle: 0 },
1404
+ cluster: "genOnOffSwitchCfg",
1405
+ attribute: "switchType",
1406
+ description: "Type switch",
1407
+ }),
1408
+ m.enumLookup({
1409
+ name: "switch_actions",
1410
+ lookup: { on_off: 0, off_on: 1, toggle: 2 },
1411
+ cluster: "genOnOffSwitchCfg",
1412
+ attribute: "switchActions",
1413
+ description: "Actions switch",
1414
+ }),
1415
+ ],
1416
+ ota: true,
1417
+ },
1418
+ {
1419
+ zigbeeModel: ["ElectricityMeter_DIY"],
1420
+ model: "Electricity Meter TLSR8258",
1421
+ vendor: "Slacky-DIY",
1422
+ description: "Electricity Meter via optical port",
1423
+ extend: [
1424
+ m.deviceAddCustomCluster("seMetering", {
1425
+ ID: 0x0702,
1426
+ attributes: {
1427
+ deviceModel: {
1428
+ ID: attrElCityMeterModelPreset,
1429
+ type: 0x30,
1430
+ write: true,
1431
+ max: 0xff,
1432
+ },
1433
+ deviceAddress: {
1434
+ ID: attrElCityMeterAddressPreset,
1435
+ type: 0x23,
1436
+ write: true,
1437
+ max: 0xffffffff,
1438
+ },
1439
+ readPeriod: {
1440
+ ID: attrElCityMeterMeasurementPreset,
1441
+ type: 0x20,
1442
+ write: true,
1443
+ max: 0xff,
1444
+ },
1445
+ dateRelease: {
1446
+ ID: attrElCityMeterDateRelease,
1447
+ type: 0x41,
1448
+ },
1449
+ deviceName: {
1450
+ ID: attrElCityMeterModelName,
1451
+ type: 0x41,
1452
+ },
1453
+ devicePassword: {
1454
+ ID: attrElCityMeterPasswordPreset,
1455
+ write: true,
1456
+ type: 0x41,
1457
+ },
1458
+ },
1459
+ commands: {},
1460
+ commandsResponse: {},
1461
+ }),
1462
+ m.deviceTemperature(),
1463
+ m.electricityMeter(),
1464
+ electricityMeterExtend.elMeter(),
1465
+ electricityDeviceModel({
1466
+ name: "device_model_preset",
1467
+ access: "STATE_SET",
1468
+ lookup: {
1469
+ no_device: 0,
1470
+ "KASKAD-1-MT (MIRTEK)": 1,
1471
+ "KASKAD-11-C1": 2,
1472
+ "MERCURY-206": 3,
1473
+ "ENERGOMERA-CE102M": 4,
1474
+ "ENERGOMERA-CE208BY": 5,
1475
+ "NEVA-MT124": 6,
1476
+ "NARTIS-100": 7,
1477
+ "NARTIS-I100": 8,
1478
+ },
1479
+ cluster: "seMetering",
1480
+ attribute: "deviceModel",
1481
+ description: "Device Model",
1482
+ }),
1483
+ ],
1484
+ ota: true,
1485
+ },
1486
+ {
1487
+ zigbeeModel: ["ElectricityMeterABC_DIY"],
1488
+ model: "ElectricityMeter-ABC-DIY",
1489
+ vendor: "Slacky-DIY",
1490
+ description: "Three phase Electricity Meter via optical port",
1491
+ extend: [
1492
+ m.deviceAddCustomCluster("seMetering", {
1493
+ ID: 0x0702,
1494
+ attributes: {
1495
+ deviceModel: {
1496
+ ID: attrElCityMeterModelPreset,
1497
+ type: 0x30,
1498
+ write: true,
1499
+ max: 0xff,
1500
+ },
1501
+ deviceAddress: {
1502
+ ID: attrElCityMeterAddressPreset,
1503
+ type: 0x23,
1504
+ write: true,
1505
+ max: 0xffffffff,
1506
+ },
1507
+ readPeriod: {
1508
+ ID: attrElCityMeterMeasurementPreset,
1509
+ type: 0x20,
1510
+ write: true,
1511
+ max: 0xff,
1512
+ },
1513
+ dateRelease: {
1514
+ ID: attrElCityMeterDateRelease,
1515
+ type: 0x41,
1516
+ },
1517
+ deviceName: {
1518
+ ID: attrElCityMeterModelName,
1519
+ type: 0x41,
1520
+ },
1521
+ devicePassword: {
1522
+ ID: attrElCityMeterPasswordPreset,
1523
+ write: true,
1524
+ type: 0x41,
1525
+ },
1526
+ },
1527
+ commands: {},
1528
+ commandsResponse: {},
1529
+ }),
1530
+ m.deviceTemperature(),
1531
+ m.electricityMeter({ threePhase: true }),
1532
+ electricityMeterExtend.elMeter(),
1533
+ electricityDeviceModel({
1534
+ name: "device_model_preset",
1535
+ access: "STATE_SET",
1536
+ lookup: {
1537
+ no_device: 0,
1538
+ "NARTIS-I300": 1,
1539
+ },
1540
+ cluster: "seMetering",
1541
+ attribute: "deviceModel",
1542
+ description: "Device Model",
1543
+ }),
1544
+ ],
1545
+ ota: true,
1546
+ },
1547
+ {
1548
+ zigbeeModel: ["Tuya_Thermostat_r01"],
1549
+ model: "THERM_SLACKY_DIY_R01",
1550
+ vendor: "Slacky-DIY",
1551
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1552
+ endpoint: (device) => {
1553
+ return { day: 1, night: 2 };
1554
+ },
1555
+ fromZigbee: localFromZigbeeThermostat,
1556
+ toZigbee: localToZigbeeThermostat,
1557
+ configure: configureCommon,
1558
+ extend: [
1559
+ m.deviceAddCustomCluster("hvacThermostat", {
1560
+ ID: 0x0201,
1561
+ attributes: {
1562
+ localTemperatureCalibration: {
1563
+ ID: 0x0010,
1564
+ type: 0x28,
1565
+ write: true,
1566
+ max: 0xff,
1567
+ },
1568
+ minSetpointDeadBand: {
1569
+ ID: 0x0019,
1570
+ type: 0x28,
1571
+ write: true,
1572
+ max: 0xff,
1573
+ },
1574
+ },
1575
+ commands: {},
1576
+ commandsResponse: {},
1577
+ }),
1578
+ ],
1579
+ exposes: [
1580
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
1581
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
1582
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
1583
+ e
1584
+ .numeric("deadzone_temperature", ea.ALL)
1585
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
1586
+ .withUnit("°C")
1587
+ .withValueMin(1)
1588
+ .withValueMax(5)
1589
+ .withValueStep(1),
1590
+ e
1591
+ .numeric("max_heat_setpoint_limit", ea.ALL)
1592
+ .withDescription("Maximum Heating set point limit")
1593
+ .withUnit("°C")
1594
+ .withValueMin(15)
1595
+ .withValueMax(45)
1596
+ .withValueStep(1),
1597
+ e
1598
+ .climate()
1599
+ .withLocalTemperature()
1600
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 1)
1601
+ .withLocalTemperatureCalibration(-9, 9, 1)
1602
+ .withSystemMode(["off", "heat"])
1603
+ .withRunningState(["idle", "heat"], ea.STATE)
1604
+ .withWeeklySchedule(["heat"], ea.ALL),
1605
+ e.text("schedule_monday", ea.STATE).withDescription("Schedule for the working week"),
1606
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
1607
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
1608
+ ],
1609
+ meta: {},
1610
+ ota: true,
1611
+ },
1612
+ {
1613
+ zigbeeModel: ["Tuya_Thermostat_r02"],
1614
+ model: "THERM_SLACKY_DIY_R02",
1615
+ vendor: "Slacky-DIY",
1616
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1617
+ endpoint: (device) => {
1618
+ return { day: 1, night: 2 };
1619
+ },
1620
+ fromZigbee: localFromZigbeeThermostat,
1621
+ toZigbee: localToZigbeeThermostat,
1622
+ configure: configureCommon,
1623
+ extend: [
1624
+ m.deviceAddCustomCluster("hvacThermostat", {
1625
+ ID: 0x0201,
1626
+ attributes: {
1627
+ localTemperatureCalibration: {
1628
+ ID: 0x0010,
1629
+ type: 0x28,
1630
+ write: true,
1631
+ max: 0xff,
1632
+ },
1633
+ minSetpointDeadBand: {
1634
+ ID: 0x0019,
1635
+ type: 0x28,
1636
+ write: true,
1637
+ max: 0xff,
1638
+ },
1639
+ },
1640
+ commands: {},
1641
+ commandsResponse: {},
1642
+ }),
1643
+ ],
1644
+ exposes: [
1645
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
1646
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
1647
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
1648
+ e
1649
+ .numeric("deadzone_temperature", ea.ALL)
1650
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
1651
+ .withUnit("°C")
1652
+ .withValueMin(1)
1653
+ .withValueMax(5)
1654
+ .withValueStep(1),
1655
+ e
1656
+ .numeric("min_heat_setpoint_limit", ea.ALL)
1657
+ .withUnit("°C")
1658
+ .withDescription("Minimum Heating set point limit")
1659
+ .withValueMin(5)
1660
+ .withValueMax(15)
1661
+ .withValueStep(1),
1662
+ e
1663
+ .numeric("max_heat_setpoint_limit", ea.ALL)
1664
+ .withDescription("Maximum Heating set point limit")
1665
+ .withUnit("°C")
1666
+ .withValueMin(15)
1667
+ .withValueMax(45)
1668
+ .withValueStep(1),
1669
+ e
1670
+ .numeric("frost_protect", ea.ALL)
1671
+ .withUnit("°C")
1672
+ .withDescription("Protection against minimum freezing temperature")
1673
+ .withValueMin(0)
1674
+ .withValueMax(10)
1675
+ .withValueStep(1),
1676
+ e
1677
+ .numeric("heat_protect", ea.ALL)
1678
+ .withUnit("°C")
1679
+ .withDescription("Protection against maximum heating temperature")
1680
+ .withValueMin(25)
1681
+ .withValueMax(70)
1682
+ .withValueStep(1),
1683
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
1684
+ e
1685
+ .climate()
1686
+ .withLocalTemperature()
1687
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
1688
+ .withLocalTemperatureCalibration(-9, 9, 1)
1689
+ .withSystemMode(["off", "heat"])
1690
+ .withRunningState(["idle", "heat"], ea.STATE)
1691
+ .withWeeklySchedule(["heat"], ea.ALL),
1692
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
1693
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
1694
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
1695
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
1696
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
1697
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
1698
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
1699
+ ],
1700
+ meta: {},
1701
+ ota: true,
1702
+ },
1703
+ {
1704
+ zigbeeModel: ["Tuya_Thermostat_r03"],
1705
+ model: "THERM_SLACKY_DIY_R03",
1706
+ vendor: "Slacky-DIY",
1707
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1708
+ endpoint: (device) => {
1709
+ return { day: 1, night: 2 };
1710
+ },
1711
+ fromZigbee: localFromZigbeeThermostat,
1712
+ toZigbee: localToZigbeeThermostat,
1713
+ configure: configureCommon,
1714
+ extend: [
1715
+ m.deviceAddCustomCluster("hvacThermostat", {
1716
+ ID: 0x0201,
1717
+ attributes: {
1718
+ localTemperatureCalibration: {
1719
+ ID: 0x0010,
1720
+ type: 0x28,
1721
+ write: true,
1722
+ max: 0xff,
1723
+ },
1724
+ minSetpointDeadBand: {
1725
+ ID: 0x0019,
1726
+ type: 0x28,
1727
+ write: true,
1728
+ max: 0xff,
1729
+ },
1730
+ },
1731
+ commands: {},
1732
+ commandsResponse: {},
1733
+ }),
1734
+ ],
1735
+ exposes: [
1736
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
1737
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
1738
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
1739
+ e
1740
+ .numeric("deadzone_temperature", ea.ALL)
1741
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
1742
+ .withUnit("°C")
1743
+ .withValueMin(1)
1744
+ .withValueMax(5)
1745
+ .withValueStep(1),
1746
+ e
1747
+ .numeric("min_heat_setpoint_limit", ea.ALL)
1748
+ .withUnit("°C")
1749
+ .withDescription("Minimum Heating set point limit")
1750
+ .withValueMin(5)
1751
+ .withValueMax(15)
1752
+ .withValueStep(1),
1753
+ e
1754
+ .numeric("max_heat_setpoint_limit", ea.ALL)
1755
+ .withDescription("Maximum Heating set point limit")
1756
+ .withUnit("°C")
1757
+ .withValueMin(15)
1758
+ .withValueMax(45)
1759
+ .withValueStep(1),
1760
+ e
1761
+ .numeric("frost_protect", ea.ALL)
1762
+ .withUnit("°C")
1763
+ .withDescription("Protection against minimum freezing temperature")
1764
+ .withValueMin(0)
1765
+ .withValueMax(10)
1766
+ .withValueStep(1),
1767
+ e
1768
+ .numeric("heat_protect", ea.ALL)
1769
+ .withUnit("°C")
1770
+ .withDescription("Protection against maximum heating temperature")
1771
+ .withValueMin(25)
1772
+ .withValueMax(70)
1773
+ .withValueStep(1),
1774
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(8).withDescription("Screen brightness 06:00 - 22:00").withEndpoint("day"),
1775
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(8).withDescription("Screen brightness 22:00 - 06:00").withEndpoint("night"),
1776
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Eco Mode"),
1777
+ e
1778
+ .numeric("eco_mode_heat_temperature", ea.ALL)
1779
+ .withUnit("°C")
1780
+ .withDescription("Set heat temperature in eco mode")
1781
+ .withValueMin(5)
1782
+ .withValueMax(45)
1783
+ .withValueStep(1),
1784
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
1785
+ e
1786
+ .climate()
1787
+ .withLocalTemperature()
1788
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
1789
+ .withLocalTemperatureCalibration(-9, 9, 1)
1790
+ .withSystemMode(["off", "heat"])
1791
+ .withRunningState(["idle", "heat"], ea.STATE)
1792
+ .withWeeklySchedule(["heat"], ea.ALL),
1793
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
1794
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
1795
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
1796
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
1797
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
1798
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
1799
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
1800
+ ],
1801
+ meta: {},
1802
+ ota: true,
1803
+ },
1804
+ {
1805
+ zigbeeModel: ["Tuya_Thermostat_r04"],
1806
+ model: "THERM_SLACKY_DIY_R04",
1807
+ vendor: "Slacky-DIY",
1808
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1809
+ endpoint: (device) => {
1810
+ return { day: 1, night: 2 };
1811
+ },
1812
+ fromZigbee: localFromZigbeeThermostat,
1813
+ toZigbee: localToZigbeeThermostat,
1814
+ configure: configureCommon,
1815
+ extend: [
1816
+ m.deviceAddCustomCluster("hvacThermostat", {
1817
+ ID: 0x0201,
1818
+ attributes: {
1819
+ localTemperatureCalibration: {
1820
+ ID: 0x0010,
1821
+ type: 0x28,
1822
+ write: true,
1823
+ max: 0xff,
1824
+ },
1825
+ minSetpointDeadBand: {
1826
+ ID: 0x0019,
1827
+ type: 0x28,
1828
+ write: true,
1829
+ max: 0xff,
1830
+ },
1831
+ },
1832
+ commands: {},
1833
+ commandsResponse: {},
1834
+ }),
1835
+ ],
1836
+ exposes: [
1837
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
1838
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
1839
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
1840
+ e
1841
+ .numeric("deadzone_temperature", ea.ALL)
1842
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
1843
+ .withUnit("°C")
1844
+ .withValueMin(1)
1845
+ .withValueMax(5)
1846
+ .withValueStep(1),
1847
+ e
1848
+ .numeric("min_heat_setpoint_limit", ea.ALL)
1849
+ .withUnit("°C")
1850
+ .withDescription("Minimum Heating set point limit")
1851
+ .withValueMin(5)
1852
+ .withValueMax(15)
1853
+ .withValueStep(1),
1854
+ e
1855
+ .numeric("max_heat_setpoint_limit", ea.ALL)
1856
+ .withDescription("Maximum Heating set point limit")
1857
+ .withUnit("°C")
1858
+ .withValueMin(15)
1859
+ .withValueMax(45)
1860
+ .withValueStep(1),
1861
+ e
1862
+ .numeric("frost_protect", ea.ALL)
1863
+ .withUnit("°C")
1864
+ .withDescription("Protection against minimum freezing temperature")
1865
+ .withValueMin(0)
1866
+ .withValueMax(10)
1867
+ .withValueStep(1),
1868
+ e
1869
+ .numeric("heat_protect", ea.ALL)
1870
+ .withUnit("°C")
1871
+ .withDescription("Protection against maximum heating temperature")
1872
+ .withValueMin(25)
1873
+ .withValueMax(70)
1874
+ .withValueStep(1),
1875
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(9).withDescription("Screen brightness").withEndpoint("day"),
1876
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Eco Mode"),
1877
+ e
1878
+ .numeric("eco_mode_heat_temperature", ea.ALL)
1879
+ .withUnit("°C")
1880
+ .withDescription("Set heat temperature in eco mode")
1881
+ .withValueMin(5)
1882
+ .withValueMax(45)
1883
+ .withValueStep(1),
1884
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
1885
+ e
1886
+ .climate()
1887
+ .withLocalTemperature()
1888
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
1889
+ .withLocalTemperatureCalibration(-9, 9, 1)
1890
+ .withSystemMode(["off", "heat"])
1891
+ .withRunningState(["idle", "heat"], ea.STATE)
1892
+ .withWeeklySchedule(["heat"], ea.ALL),
1893
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
1894
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
1895
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
1896
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
1897
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
1898
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
1899
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
1900
+ ],
1901
+ meta: {},
1902
+ ota: true,
1903
+ },
1904
+ {
1905
+ zigbeeModel: ["Tuya_Thermostat_r05"],
1906
+ model: "THERM_SLACKY_DIY_R05",
1907
+ vendor: "Slacky-DIY",
1908
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1909
+ endpoint: (device) => {
1910
+ return { day: 1, night: 2 };
1911
+ },
1912
+ fromZigbee: localFromZigbeeThermostat,
1913
+ toZigbee: localToZigbeeThermostat,
1914
+ configure: configureCommon,
1915
+ extend: [
1916
+ m.deviceAddCustomCluster("hvacThermostat", {
1917
+ ID: 0x0201,
1918
+ attributes: {
1919
+ localTemperatureCalibration: {
1920
+ ID: 0x0010,
1921
+ type: 0x28,
1922
+ write: true,
1923
+ max: 0xff,
1924
+ },
1925
+ minSetpointDeadBand: {
1926
+ ID: 0x0019,
1927
+ type: 0x28,
1928
+ write: true,
1929
+ max: 0xff,
1930
+ },
1931
+ },
1932
+ commands: {},
1933
+ commandsResponse: {},
1934
+ }),
1935
+ ],
1936
+ exposes: [
1937
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
1938
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
1939
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
1940
+ e
1941
+ .numeric("deadzone_temperature", ea.ALL)
1942
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
1943
+ .withUnit("°C")
1944
+ .withValueMin(1)
1945
+ .withValueMax(5)
1946
+ .withValueStep(1),
1947
+ e
1948
+ .numeric("min_heat_setpoint_limit", ea.ALL)
1949
+ .withUnit("°C")
1950
+ .withDescription("Minimum Heating set point limit")
1951
+ .withValueMin(5)
1952
+ .withValueMax(15)
1953
+ .withValueStep(1),
1954
+ e
1955
+ .numeric("max_heat_setpoint_limit", ea.ALL)
1956
+ .withDescription("Maximum Heating set point limit")
1957
+ .withUnit("°C")
1958
+ .withValueMin(15)
1959
+ .withValueMax(45)
1960
+ .withValueStep(1),
1961
+ e
1962
+ .numeric("heat_protect", ea.ALL)
1963
+ .withUnit("°C")
1964
+ .withDescription("Protection against maximum heating temperature")
1965
+ .withValueMin(25)
1966
+ .withValueMax(70)
1967
+ .withValueStep(1),
1968
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
1969
+ e
1970
+ .climate()
1971
+ .withLocalTemperature()
1972
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
1973
+ .withLocalTemperatureCalibration(-9, 9, 1)
1974
+ .withSystemMode(["off", "heat"])
1975
+ .withRunningState(["idle", "heat"], ea.STATE)
1976
+ .withWeeklySchedule(["heat"], ea.ALL),
1977
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
1978
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
1979
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
1980
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
1981
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
1982
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
1983
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
1984
+ ],
1985
+ meta: {},
1986
+ ota: true,
1987
+ },
1988
+ {
1989
+ zigbeeModel: ["Tuya_Thermostat_r06"],
1990
+ model: "THERM_SLACKY_DIY_R06",
1991
+ vendor: "Slacky-DIY",
1992
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
1993
+ endpoint: (device) => {
1994
+ return { day: 1, night: 2 };
1995
+ },
1996
+ fromZigbee: localFromZigbeeThermostat,
1997
+ toZigbee: localToZigbeeThermostat,
1998
+ configure: configureCommon,
1999
+ extend: [
2000
+ m.deviceAddCustomCluster("hvacThermostat", {
2001
+ ID: 0x0201,
2002
+ attributes: {
2003
+ localTemperatureCalibration: {
2004
+ ID: 0x0010,
2005
+ type: 0x28,
2006
+ write: true,
2007
+ max: 0xff,
2008
+ },
2009
+ minSetpointDeadBand: {
2010
+ ID: 0x0019,
2011
+ type: 0x28,
2012
+ write: true,
2013
+ max: 0xff,
2014
+ },
2015
+ },
2016
+ commands: {},
2017
+ commandsResponse: {},
2018
+ }),
2019
+ ],
2020
+ exposes: [
2021
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2022
+ e.binary("sound", ea.ALL, "On", "Off").withDescription("Sound On/Off"),
2023
+ e.binary("relay_type", ea.ALL, "NC", "NO").withDescription("Relay type NC/NO"),
2024
+ e.enum("brightness_level", ea.ALL, ["Off", "Low", "Medium", "High"]).withDescription("Screen brightness"),
2025
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2026
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
2027
+ e
2028
+ .numeric("hysteresis_temperature", ea.ALL)
2029
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2030
+ .withUnit("°C")
2031
+ .withValueMin(0.5)
2032
+ .withValueMax(10)
2033
+ .withValueStep(0.5),
2034
+ e
2035
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2036
+ .withDescription("Maximum Heating set point limit")
2037
+ .withUnit("°C")
2038
+ .withValueMin(15)
2039
+ .withValueMax(95)
2040
+ .withValueStep(1),
2041
+ e.binary("frost_protect_on_off", ea.ALL, "On", "Off").withDescription("Frost protection"),
2042
+ e
2043
+ .numeric("heat_protect", ea.ALL)
2044
+ .withUnit("°C")
2045
+ .withDescription("Protection against maximum heating temperature")
2046
+ .withValueMin(35)
2047
+ .withValueMax(60)
2048
+ .withValueStep(1),
2049
+ e
2050
+ .climate()
2051
+ .withLocalTemperature()
2052
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
2053
+ .withLocalTemperatureCalibration(-9.9, 9.9, 0.1)
2054
+ .withSystemMode(["off", "heat"])
2055
+ .withRunningState(["idle", "heat"], ea.STATE)
2056
+ .withWeeklySchedule(["heat"], ea.ALL),
2057
+ e.text("schedule_monday", ea.STATE).withDescription("Schedule for the working week"),
2058
+ e.text("schedule_sunday", ea.STATE).withDescription("Weekend schedule"),
2059
+ e.enum("schedule_mode", ea.ALL, ["Off", "5+2", "6+1", "7"]).withDescription("Schedule mode"),
2060
+ e.enum("settings_reset", ea.SET, ["Default"]).withDescription("Default settings"),
2061
+ ],
2062
+ meta: {},
2063
+ ota: true,
2064
+ },
2065
+ {
2066
+ zigbeeModel: ["Tuya_Thermostat_r07"],
2067
+ model: "THERM_SLACKY_DIY_R07",
2068
+ vendor: "Slacky-DIY",
2069
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2070
+ endpoint: (device) => {
2071
+ return { day: 1, night: 2 };
2072
+ },
2073
+ fromZigbee: localFromZigbeeThermostat,
2074
+ toZigbee: localToZigbeeThermostat,
2075
+ configure: configureCommon,
2076
+ extend: [
2077
+ m.deviceAddCustomCluster("hvacThermostat", {
2078
+ ID: 0x0201,
2079
+ attributes: {
2080
+ localTemperatureCalibration: {
2081
+ ID: 0x0010,
2082
+ type: 0x28,
2083
+ write: true,
2084
+ max: 0xff,
2085
+ },
2086
+ minSetpointDeadBand: {
2087
+ ID: 0x0019,
2088
+ type: 0x28,
2089
+ write: true,
2090
+ max: 0xff,
2091
+ },
2092
+ },
2093
+ commands: {},
2094
+ commandsResponse: {},
2095
+ }),
2096
+ ],
2097
+ exposes: [
2098
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2099
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2100
+ e
2101
+ .numeric("deadzone_temperature", ea.ALL)
2102
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2103
+ .withUnit("°C")
2104
+ .withValueMin(1)
2105
+ .withValueMax(5)
2106
+ .withValueStep(1),
2107
+ e
2108
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2109
+ .withUnit("°C")
2110
+ .withDescription("Minimum Heating set point limit")
2111
+ .withValueMin(5)
2112
+ .withValueMax(15)
2113
+ .withValueStep(1),
2114
+ e
2115
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2116
+ .withDescription("Maximum Heating set point limit")
2117
+ .withUnit("°C")
2118
+ .withValueMin(15)
2119
+ .withValueMax(45)
2120
+ .withValueStep(1),
2121
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Eco Mode"),
2122
+ e
2123
+ .numeric("eco_mode_cool_temperature", ea.ALL)
2124
+ .withUnit("°C")
2125
+ .withDescription("Set cool temperature in eco mode")
2126
+ .withValueMin(10)
2127
+ .withValueMax(30)
2128
+ .withValueStep(1),
2129
+ e
2130
+ .numeric("eco_mode_heat_temperature", ea.ALL)
2131
+ .withUnit("°C")
2132
+ .withDescription("Set heat temperature in eco mode")
2133
+ .withValueMin(10)
2134
+ .withValueMax(30)
2135
+ .withValueStep(1),
2136
+ e.binary("fan_control", ea.ALL, "On", "Off").withDescription("On/Off Fan Control"),
2137
+ e
2138
+ .climate()
2139
+ .withLocalTemperature()
2140
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
2141
+ .withLocalTemperatureCalibration(-9, 9, 1)
2142
+ .withSystemMode(["off", "heat", "cool", "fan_only"])
2143
+ .withRunningState(["idle", "heat", "cool", "fan_only"], ea.STATE)
2144
+ .withFanMode(["low", "medium", "high", "auto"])
2145
+ .withWeeklySchedule(["cool"], ea.ALL),
2146
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
2147
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
2148
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
2149
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
2150
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
2151
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2152
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2153
+ ],
2154
+ meta: {},
2155
+ ota: true,
2156
+ },
2157
+ {
2158
+ zigbeeModel: ["Tuya_Thermostat_r08"],
2159
+ model: "THERM_SLACKY_DIY_R08",
2160
+ vendor: "Slacky-DIY",
2161
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2162
+ endpoint: (device) => {
2163
+ return { day: 1, night: 2 };
2164
+ },
2165
+ fromZigbee: localFromZigbeeThermostat,
2166
+ toZigbee: localToZigbeeThermostat,
2167
+ configure: configureCommon,
2168
+ extend: [
2169
+ m.deviceAddCustomCluster("hvacThermostat", {
2170
+ ID: 0x0201,
2171
+ attributes: {
2172
+ localTemperatureCalibration: {
2173
+ ID: 0x0010,
2174
+ type: 0x28,
2175
+ write: true,
2176
+ max: 0xff,
2177
+ },
2178
+ minSetpointDeadBand: {
2179
+ ID: 0x0019,
2180
+ type: 0x28,
2181
+ write: true,
2182
+ max: 0xff,
2183
+ },
2184
+ },
2185
+ commands: {},
2186
+ commandsResponse: {},
2187
+ }),
2188
+ ],
2189
+ exposes: [
2190
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2191
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2192
+ e
2193
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2194
+ .withUnit("°C")
2195
+ .withDescription("Minimum Heating set point limit")
2196
+ .withValueMin(5)
2197
+ .withValueMax(15)
2198
+ .withValueStep(1),
2199
+ e
2200
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2201
+ .withDescription("Maximum Heating set point limit")
2202
+ .withUnit("°C")
2203
+ .withValueMin(15)
2204
+ .withValueMax(45)
2205
+ .withValueStep(1),
2206
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Sleep Mode"),
2207
+ e
2208
+ .numeric("external_temperature_calibration", ea.ALL)
2209
+ .withDescription("External temperature calibration")
2210
+ .withUnit("°C")
2211
+ .withValueMin(-9)
2212
+ .withValueMax(9)
2213
+ .withValueStep(1),
2214
+ e
2215
+ .climate()
2216
+ .withLocalTemperature()
2217
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
2218
+ .withLocalTemperatureCalibration(-9, 9, 1)
2219
+ .withSystemMode(["off", "heat"])
2220
+ .withRunningState(["idle", "heat"], ea.STATE)
2221
+ .withWeeklySchedule(["heat"], ea.ALL),
2222
+ e.text("schedule_monday", ea.STATE).withDescription("Schedule for the working week"),
2223
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2224
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2225
+ ],
2226
+ meta: {},
2227
+ ota: true,
2228
+ },
2229
+ {
2230
+ zigbeeModel: ["Tuya_Thermostat_r09"],
2231
+ model: "THERM_SLACKY_DIY_R09",
2232
+ vendor: "Slacky-DIY",
2233
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2234
+ endpoint: (device) => {
2235
+ return { day: 1, night: 2 };
2236
+ },
2237
+ fromZigbee: localFromZigbeeThermostat,
2238
+ toZigbee: localToZigbeeThermostat,
2239
+ configure: configureCommon,
2240
+ extend: [
2241
+ m.deviceAddCustomCluster("hvacThermostat", {
2242
+ ID: 0x0201,
2243
+ attributes: {
2244
+ localTemperatureCalibration: {
2245
+ ID: 0x0010,
2246
+ type: 0x28,
2247
+ write: true,
2248
+ max: 0xff,
2249
+ },
2250
+ minSetpointDeadBand: {
2251
+ ID: 0x0019,
2252
+ type: 0x28,
2253
+ write: true,
2254
+ max: 0xff,
2255
+ },
2256
+ },
2257
+ commands: {},
2258
+ commandsResponse: {},
2259
+ }),
2260
+ ],
2261
+ exposes: [
2262
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2263
+ e.binary("mode_child_lock", ea.ALL, "partial", "all").withDescription("Child lock mode - all/partial"),
2264
+ e.binary("relay_type", ea.ALL, "NC", "NO").withDescription("Relay type NC/NO"),
2265
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2266
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
2267
+ e
2268
+ .numeric("hysteresis_temperature", ea.ALL)
2269
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2270
+ .withUnit("°C")
2271
+ .withValueMin(1)
2272
+ .withValueMax(5)
2273
+ .withValueStep(0.5),
2274
+ e
2275
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2276
+ .withUnit("°C")
2277
+ .withDescription("Minimum Heating set point limit")
2278
+ .withValueMin(5)
2279
+ .withValueMax(15)
2280
+ .withValueStep(1),
2281
+ e
2282
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2283
+ .withDescription("Maximum Heating set point limit")
2284
+ .withUnit("°C")
2285
+ .withValueMin(15)
2286
+ .withValueMax(45)
2287
+ .withValueStep(1),
2288
+ e
2289
+ .numeric("frost_protect", ea.ALL)
2290
+ .withUnit("°C")
2291
+ .withDescription("Protection against minimum freezing temperature")
2292
+ .withValueMin(0)
2293
+ .withValueMax(10)
2294
+ .withValueStep(1),
2295
+ e
2296
+ .numeric("heat_protect", ea.ALL)
2297
+ .withUnit("°C")
2298
+ .withDescription("Protection against maximum heating temperature")
2299
+ .withValueMin(25)
2300
+ .withValueMax(70)
2301
+ .withValueStep(1),
2302
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(8).withDescription("Screen brightness 06:00 - 22:00").withEndpoint("day"),
2303
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(8).withDescription("Screen brightness 22:00 - 06:00").withEndpoint("night"),
2304
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Sleep Mode"),
2305
+ e
2306
+ .numeric("eco_mode_heat_temperature", ea.ALL)
2307
+ .withUnit("°C")
2308
+ .withDescription("Set heat temperature in eco mode")
2309
+ .withValueMin(5)
2310
+ .withValueMax(45)
2311
+ .withValueStep(1),
2312
+ e
2313
+ .numeric("external_temperature_calibration", ea.ALL)
2314
+ .withDescription("External temperature calibration")
2315
+ .withUnit("°C")
2316
+ .withValueMin(-9)
2317
+ .withValueMax(9)
2318
+ .withValueStep(1),
2319
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
2320
+ e
2321
+ .climate()
2322
+ .withLocalTemperature()
2323
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
2324
+ .withLocalTemperatureCalibration(-9, 9, 1)
2325
+ .withSystemMode(["off", "heat"])
2326
+ .withRunningState(["idle", "heat"], ea.STATE)
2327
+ .withWeeklySchedule(["heat"], ea.ALL),
2328
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
2329
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
2330
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
2331
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
2332
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
2333
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2334
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2335
+ e.enum("settings_reset", ea.SET, ["Default"]).withDescription("Default settings"),
2336
+ ],
2337
+ meta: {},
2338
+ ota: true,
2339
+ },
2340
+ {
2341
+ zigbeeModel: ["Tuya_Thermostat_r0A"],
2342
+ model: "THERM_SLACKY_DIY_R0A",
2343
+ vendor: "Slacky-DIY",
2344
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2345
+ endpoint: (device) => {
2346
+ return { day: 1, night: 2 };
2347
+ },
2348
+ fromZigbee: localFromZigbeeThermostat,
2349
+ toZigbee: localToZigbeeThermostat,
2350
+ configure: configureCommon,
2351
+ extend: [
2352
+ m.deviceAddCustomCluster("hvacThermostat", {
2353
+ ID: 0x0201,
2354
+ attributes: {
2355
+ localTemperatureCalibration: {
2356
+ ID: 0x0010,
2357
+ type: 0x28,
2358
+ write: true,
2359
+ max: 0xff,
2360
+ },
2361
+ minSetpointDeadBand: {
2362
+ ID: 0x0019,
2363
+ type: 0x28,
2364
+ write: true,
2365
+ max: 0xff,
2366
+ },
2367
+ },
2368
+ commands: {},
2369
+ commandsResponse: {},
2370
+ }),
2371
+ ],
2372
+ exposes: [
2373
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2374
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2375
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
2376
+ e
2377
+ .numeric("deadzone_temperature", ea.ALL)
2378
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2379
+ .withUnit("°C")
2380
+ .withValueMin(1)
2381
+ .withValueMax(5)
2382
+ .withValueStep(1),
2383
+ e
2384
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2385
+ .withUnit("°C")
2386
+ .withDescription("Minimum Heating set point limit")
2387
+ .withValueMin(0)
2388
+ .withValueMax(20)
2389
+ .withValueStep(1),
2390
+ e
2391
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2392
+ .withDescription("Maximum Heating set point limit")
2393
+ .withUnit("°C")
2394
+ .withValueMin(20)
2395
+ .withValueMax(50)
2396
+ .withValueStep(1),
2397
+ e
2398
+ .numeric("heat_protect", ea.ALL)
2399
+ .withUnit("°C")
2400
+ .withDescription("Protection against maximum heating temperature")
2401
+ .withValueMin(25)
2402
+ .withValueMax(70)
2403
+ .withValueStep(1),
2404
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Eco Mode"),
2405
+ e
2406
+ .climate()
2407
+ .withLocalTemperature()
2408
+ .withSetpoint("occupied_heating_setpoint", 1, 50, 1)
2409
+ .withLocalTemperatureCalibration(-9, 9, 1)
2410
+ .withSystemMode(["off", "heat"])
2411
+ .withRunningState(["idle", "heat"], ea.STATE)
2412
+ .withWeeklySchedule(["heat"], ea.ALL),
2413
+ e.text("schedule_monday", ea.STATE).withDescription("Schedule for the working week"),
2414
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2415
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2416
+ ],
2417
+ meta: {},
2418
+ ota: true,
2419
+ },
2420
+ {
2421
+ zigbeeModel: ["Tuya_Thermostat_r0B"],
2422
+ model: "THERM_SLACKY_DIY_R0B",
2423
+ vendor: "Slacky-DIY",
2424
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2425
+ endpoint: (device) => {
2426
+ return { day: 1, night: 2 };
2427
+ },
2428
+ fromZigbee: localFromZigbeeThermostat,
2429
+ toZigbee: localToZigbeeThermostat,
2430
+ configure: configureCommon,
2431
+ extend: [
2432
+ m.deviceAddCustomCluster("hvacThermostat", {
2433
+ ID: 0x0201,
2434
+ attributes: {
2435
+ localTemperatureCalibration: {
2436
+ ID: 0x0010,
2437
+ type: 0x28,
2438
+ write: true,
2439
+ max: 0xff,
2440
+ },
2441
+ minSetpointDeadBand: {
2442
+ ID: 0x0019,
2443
+ type: 0x28,
2444
+ write: true,
2445
+ max: 0xff,
2446
+ },
2447
+ },
2448
+ commands: {},
2449
+ commandsResponse: {},
2450
+ }),
2451
+ ],
2452
+ exposes: [
2453
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2454
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2455
+ e.enum("sensor", ea.ALL, ["Inner (IN)", "Outer (OU)"]).withDescription("Select temperature sensor to use"),
2456
+ e.enum("screen_sleep_mode", ea.ALL, ["Off", "Dim", "On"]).withDescription("Screen sleep mode of brightness"),
2457
+ e
2458
+ .numeric("hysteresis_temperature", ea.ALL)
2459
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2460
+ .withUnit("°C")
2461
+ .withValueMin(0.5)
2462
+ .withValueMax(5)
2463
+ .withValueStep(0.5),
2464
+ e
2465
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2466
+ .withUnit("°C")
2467
+ .withDescription("Minimum Heating set point limit")
2468
+ .withValueMin(1)
2469
+ .withValueMax(5)
2470
+ .withValueStep(0.5),
2471
+ e
2472
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2473
+ .withDescription("Maximum Heating set point limit")
2474
+ .withUnit("°C")
2475
+ .withValueMin(35)
2476
+ .withValueMax(50)
2477
+ .withValueStep(0.5),
2478
+ e
2479
+ .climate()
2480
+ .withLocalTemperature()
2481
+ .withSetpoint("occupied_heating_setpoint", 1, 50, 1)
2482
+ .withLocalTemperatureCalibration(-9, 9, 1)
2483
+ .withSystemMode(["off", "heat"])
2484
+ .withRunningState(["idle", "heat"], ea.STATE)
2485
+ .withWeeklySchedule(["heat"], ea.ALL),
2486
+ e.text("schedule_monday", ea.STATE).withDescription("Schedule for the working week"),
2487
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2488
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2489
+ ],
2490
+ meta: {},
2491
+ ota: true,
2492
+ },
2493
+ {
2494
+ zigbeeModel: ["Tuya_Thermostat_r0C"],
2495
+ model: "THERM_SLACKY_DIY_R0C",
2496
+ vendor: "Slacky-DIY",
2497
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2498
+ endpoint: (device) => {
2499
+ return { day: 1, night: 2 };
2500
+ },
2501
+ fromZigbee: localFromZigbeeThermostat,
2502
+ toZigbee: localToZigbeeThermostat,
2503
+ configure: configureCommon,
2504
+ extend: [
2505
+ m.deviceAddCustomCluster("hvacThermostat", {
2506
+ ID: 0x0201,
2507
+ attributes: {
2508
+ localTemperatureCalibration: {
2509
+ ID: 0x0010,
2510
+ type: 0x28,
2511
+ write: true,
2512
+ max: 0xff,
2513
+ },
2514
+ minSetpointDeadBand: {
2515
+ ID: 0x0019,
2516
+ type: 0x28,
2517
+ write: true,
2518
+ max: 0xff,
2519
+ },
2520
+ },
2521
+ commands: {},
2522
+ commandsResponse: {},
2523
+ }),
2524
+ ],
2525
+ exposes: [
2526
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2527
+ e.programming_operation_mode(["setpoint", "schedule"]).withDescription("Setpoint or Schedule mode"),
2528
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
2529
+ e
2530
+ .numeric("deadzone_temperature", ea.ALL)
2531
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2532
+ .withUnit("°C")
2533
+ .withValueMin(1)
2534
+ .withValueMax(5)
2535
+ .withValueStep(1),
2536
+ e
2537
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2538
+ .withUnit("°C")
2539
+ .withDescription("Minimum Heating set point limit")
2540
+ .withValueMin(5)
2541
+ .withValueMax(15)
2542
+ .withValueStep(1),
2543
+ e
2544
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2545
+ .withDescription("Maximum Heating set point limit")
2546
+ .withUnit("°C")
2547
+ .withValueMin(15)
2548
+ .withValueMax(45)
2549
+ .withValueStep(1),
2550
+ e
2551
+ .numeric("frost_protect", ea.ALL)
2552
+ .withUnit("°C")
2553
+ .withDescription("Protection against minimum freezing temperature")
2554
+ .withValueMin(0)
2555
+ .withValueMax(10)
2556
+ .withValueStep(1),
2557
+ e
2558
+ .numeric("heat_protect", ea.ALL)
2559
+ .withUnit("°C")
2560
+ .withDescription("Protection against maximum heating temperature")
2561
+ .withValueMin(25)
2562
+ .withValueMax(70)
2563
+ .withValueStep(1),
2564
+ e.numeric("brightness", ea.ALL).withValueMin(0).withValueMax(9).withDescription("Screen brightness").withEndpoint("day"),
2565
+ e.binary("eco_mode", ea.ALL, "On", "Off").withDescription("On/Off Eco Mode"),
2566
+ e
2567
+ .numeric("eco_mode_heat_temperature", ea.ALL)
2568
+ .withUnit("°C")
2569
+ .withDescription("Set heat temperature in eco mode")
2570
+ .withValueMin(5)
2571
+ .withValueMax(45)
2572
+ .withValueStep(1),
2573
+ e.humidity(),
2574
+ e
2575
+ .numeric("humidity_offset", ea.ALL)
2576
+ .withUnit("%")
2577
+ .withDescription("Offset to add/subtract to the inside humidity")
2578
+ .withValueMin(-95)
2579
+ .withValueMax(95)
2580
+ .withValueStep(1),
2581
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
2582
+ e
2583
+ .climate()
2584
+ .withLocalTemperature()
2585
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 0.5)
2586
+ .withLocalTemperatureCalibration(-9, 9, 1)
2587
+ .withSystemMode(["off", "heat"])
2588
+ .withRunningState(["idle", "heat"], ea.STATE)
2589
+ .withWeeklySchedule(["heat"], ea.ALL),
2590
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
2591
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
2592
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
2593
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
2594
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
2595
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2596
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2597
+ ],
2598
+ meta: {},
2599
+ ota: true,
2600
+ },
2601
+ {
2602
+ zigbeeModel: ["Tuya_Thermostat_r0D"],
2603
+ model: "THERM_SLACKY_DIY_R0D",
2604
+ vendor: "Slacky-DIY",
2605
+ description: "Tuya Thermostat for Floor Heating with custom Firmware",
2606
+ endpoint: (device) => {
2607
+ return { day: 1, night: 2 };
2608
+ },
2609
+ fromZigbee: localFromZigbeeThermostat,
2610
+ toZigbee: localToZigbeeThermostat,
2611
+ configure: configureCommon,
2612
+ extend: [
2613
+ m.deviceAddCustomCluster("hvacThermostat", {
2614
+ ID: 0x0201,
2615
+ attributes: {
2616
+ localTemperatureCalibration: {
2617
+ ID: 0x0010,
2618
+ type: 0x28,
2619
+ write: true,
2620
+ max: 0xff,
2621
+ },
2622
+ minSetpointDeadBand: {
2623
+ ID: 0x0019,
2624
+ type: 0x28,
2625
+ write: true,
2626
+ max: 0xff,
2627
+ },
2628
+ },
2629
+ commands: {},
2630
+ commandsResponse: {},
2631
+ }),
2632
+ ],
2633
+ exposes: [
2634
+ e.binary("child_lock", ea.ALL, "LOCK", "UNLOCK").withDescription("Enables/disables physical input on the device"),
2635
+ e.enum("brightness_level", ea.ALL, ["Off", "Low", "Medium", "High"]).withDescription("Screen idle brightness"),
2636
+ e.enum("screen_sleep_time", ea.ALL, ["10s", "20s", "30s", "40s", "50s", "60s"]).withDescription("Screen sleep timeout"),
2637
+ e.binary("led_indicator", ea.ALL, "On", "Off").withDescription("Enables/disables light ring indicator"),
2638
+ e.programming_operation_mode(["setpoint", "schedule", "schedule_with_preheat", "eco"]).withDescription("Setpoint or Schedule mode"),
2639
+ e
2640
+ .numeric("hysteresis_temperature", ea.ALL)
2641
+ .withDescription("The delta between local_temperature and current_heating_setpoint to trigger activity")
2642
+ .withUnit("°C")
2643
+ .withValueMin(0.5)
2644
+ .withValueMax(5)
2645
+ .withValueStep(0.5),
2646
+ e
2647
+ .numeric("min_heat_setpoint_limit", ea.ALL)
2648
+ .withUnit("°C")
2649
+ .withDescription("Minimum Heating set point limit")
2650
+ .withValueMin(5)
2651
+ .withValueMax(15)
2652
+ .withValueStep(1),
2653
+ e
2654
+ .numeric("max_heat_setpoint_limit", ea.ALL)
2655
+ .withDescription("Maximum Heating set point limit")
2656
+ .withUnit("°C")
2657
+ .withValueMin(35)
2658
+ .withValueMax(45)
2659
+ .withValueStep(1),
2660
+ e
2661
+ .numeric("frost_protect", ea.ALL)
2662
+ .withUnit("°C")
2663
+ .withDescription("Protection against minimum freezing temperature")
2664
+ .withValueMin(0)
2665
+ .withValueMax(10)
2666
+ .withValueStep(1),
2667
+ e
2668
+ .numeric("heat_protect", ea.ALL)
2669
+ .withUnit("°C")
2670
+ .withDescription("Protection against maximum heating temperature")
2671
+ .withValueMin(10)
2672
+ .withValueMax(70)
2673
+ .withValueStep(1),
2674
+ e
2675
+ .numeric("eco_mode_cool_temperature", ea.ALL)
2676
+ .withUnit("°C")
2677
+ .withDescription("Set cool temperature in eco mode")
2678
+ .withValueMin(10)
2679
+ .withValueMax(30)
2680
+ .withValueStep(1),
2681
+ e.enum("sensor", ea.ALL, switchSensorUsed).withDescription("Select temperature sensor to use"),
2682
+ e.numeric("outdoor_temperature", ea.STATE_GET).withUnit("°C").withDescription("Current temperature measured from the floor outer sensor"),
2683
+ e
2684
+ .climate()
2685
+ .withLocalTemperature()
2686
+ .withSetpoint("occupied_heating_setpoint", 5, 45, 1)
2687
+ .withLocalTemperatureCalibration(-10, 10, 1)
2688
+ .withSystemMode(["off", "heat"])
2689
+ .withRunningState(["idle", "heat"], ea.STATE)
2690
+ .withWeeklySchedule(["heat"], ea.ALL),
2691
+ e.text("schedule_monday", ea.STATE).withDescription("Monday's schedule"),
2692
+ e.text("schedule_tuesday", ea.STATE).withDescription("Tuesday's schedule"),
2693
+ e.text("schedule_wednesday", ea.STATE).withDescription("Wednesday's schedule"),
2694
+ e.text("schedule_thursday", ea.STATE).withDescription("Thursday's schedule"),
2695
+ e.text("schedule_friday", ea.STATE).withDescription("Friday's schedule"),
2696
+ e.text("schedule_saturday", ea.STATE).withDescription("Saturday's schedule"),
2697
+ e.text("schedule_sunday", ea.STATE).withDescription("Sunday's schedule"),
2698
+ e.enum("settings_reset", ea.SET, ["Default"]).withDescription("Default settings"),
2699
+ ],
2700
+ meta: {},
2701
+ ota: true,
2702
+ },
2703
+ {
2704
+ zigbeeModel: ["TS0201-z-SlD", "TS0201-z15-SlD", "TS0201-z21-SlD", "TS0201-z22-SlD", "TS0201-z23-SlD", "TS0201-z24-SlD"],
2705
+ model: "TS0201-z-SlD",
2706
+ vendor: "Slacky-DIY",
2707
+ description: "Tuya temperature and humidity sensor with custom Firmware",
2708
+ extend: [
2709
+ m.deviceEndpoints({
2710
+ endpoints: {
2711
+ "1": 1,
2712
+ "2": 2,
2713
+ },
2714
+ }),
2715
+ m.battery({
2716
+ voltage: true,
2717
+ voltageReporting: true,
2718
+ percentageReportingConfig: batteryReporting,
2719
+ voltageReportingConfig: batteryReporting,
2720
+ }),
2721
+ m.temperature({ reporting: temperatureReporting }),
2722
+ m.humidity({ reporting: humidityReporting }),
2723
+ m.numeric({
2724
+ name: "temperature_offset",
2725
+ cluster: "msTemperatureMeasurement",
2726
+ attribute: { ID: attrTemperatureOffset, type: 0x29 },
2727
+ unit: "°C",
2728
+ valueMin: -5,
2729
+ valueMax: 5,
2730
+ valueStep: 0.1,
2731
+ scale: 100,
2732
+ description: "Offset to add/subtract to the inside temperature",
2733
+ }),
2734
+ m.numeric({
2735
+ name: "humidity_offset",
2736
+ cluster: "msRelativeHumidity",
2737
+ attribute: { ID: attrHumidityOffset, type: 0x29 },
2738
+ unit: "%",
2739
+ valueMin: -10,
2740
+ valueMax: 10,
2741
+ valueStep: 1,
2742
+ scale: 100,
2743
+ description: "Offset to add/subtract to the inside humidity",
2744
+ }),
2745
+ m.numeric({
2746
+ name: "read_interval",
2747
+ cluster: "msTemperatureMeasurement",
2748
+ attribute: { ID: attrSensorReadPeriod, type: 0x21 },
2749
+ unit: "Sec",
2750
+ valueMin: 5,
2751
+ valueMax: 600,
2752
+ valueStep: 1,
2753
+ description: "Sensors reading period",
2754
+ }),
2755
+ m.binary({
2756
+ name: "enabling_repeat_command",
2757
+ cluster: "msTemperatureMeasurement",
2758
+ attribute: { ID: attrRepeatCommand, type: 0x10 },
2759
+ description: "Enables/disables repeat command",
2760
+ valueOn: ["ON", 0x01],
2761
+ valueOff: ["OFF", 0x00],
2762
+ }),
2763
+ m.binary({
2764
+ name: "enabling_temperature_control",
2765
+ cluster: "msTemperatureMeasurement",
2766
+ attribute: { ID: attrTemperatureOnOff, type: 0x10 },
2767
+ description: "Enables/disables Tempearure control",
2768
+ valueOn: ["ON", 0x01],
2769
+ valueOff: ["OFF", 0x00],
2770
+ }),
2771
+ m.numeric({
2772
+ name: "low_temperature",
2773
+ cluster: "msTemperatureMeasurement",
2774
+ attribute: { ID: attrTemperatureLow, type: 0x29 },
2775
+ unit: "°C",
2776
+ valueMin: -40,
2777
+ valueMax: 125,
2778
+ valueStep: 0.1,
2779
+ scale: 100,
2780
+ description: "Temperature low turn-off limit",
2781
+ }),
2782
+ m.numeric({
2783
+ name: "high_temperature",
2784
+ cluster: "msTemperatureMeasurement",
2785
+ attribute: { ID: attrTemperatureHigh, type: 0x29 },
2786
+ unit: "°C",
2787
+ valueMin: -40,
2788
+ valueMax: 125,
2789
+ valueStep: 0.1,
2790
+ scale: 100,
2791
+ description: "Temperature high turn-on limit",
2792
+ }),
2793
+ m.enumLookup({
2794
+ name: "temperature_actions",
2795
+ endpointName: "1",
2796
+ lookup: { heat: 0, cool: 1 },
2797
+ cluster: "genOnOffSwitchCfg",
2798
+ attribute: "switchActions",
2799
+ description: "Heat or cool",
2800
+ }),
2801
+ m.binary({
2802
+ name: "enabling_humidity_control",
2803
+ cluster: "msRelativeHumidity",
2804
+ attribute: { ID: attrHumidityOnOff, type: 0x10 },
2805
+ description: "Enables/disables Humidity control",
2806
+ valueOn: ["ON", 0x01],
2807
+ valueOff: ["OFF", 0x00],
2808
+ }),
2809
+ m.numeric({
2810
+ name: "low_humidity",
2811
+ cluster: "msRelativeHumidity",
2812
+ attribute: { ID: attrHumidityLow, type: 0x29 },
2813
+ unit: "%",
2814
+ valueMin: 1,
2815
+ valueMax: 100,
2816
+ valueStep: 1,
2817
+ scale: 100,
2818
+ description: "Humidity low turn-off limit",
2819
+ }),
2820
+ m.numeric({
2821
+ name: "high_humidity",
2822
+ cluster: "msRelativeHumidity",
2823
+ attribute: { ID: attrHumidityHigh, type: 0x29 },
2824
+ unit: "%",
2825
+ valueMin: 1,
2826
+ valueMax: 100,
2827
+ valueStep: 1,
2828
+ scale: 100,
2829
+ description: "Humidity high turn-on limit",
2830
+ }),
2831
+ m.enumLookup({
2832
+ name: "humidity_actions",
2833
+ endpointName: "2",
2834
+ lookup: { wet: 0, dry: 1 },
2835
+ cluster: "genOnOffSwitchCfg",
2836
+ attribute: "switchActions",
2837
+ description: "Wet or dry",
2838
+ }),
2839
+ ],
2840
+ ota: true,
2841
+ },
2842
+ {
2843
+ zigbeeModel: ["ZG-222ZA-z-SlD", "ZG-222Z-z-SlD", "SNZB-05-z-SlD"],
2844
+ model: "ZG-222ZA-z-SlD",
2845
+ vendor: "Slacky-DIY",
2846
+ description: "Tuya water leak sensor with custom firmware",
2847
+ extend: [
2848
+ m.battery({
2849
+ voltage: true,
2850
+ voltageReporting: true,
2851
+ percentageReportingConfig: batteryReporting,
2852
+ voltageReportingConfig: batteryReporting,
2853
+ }),
2854
+ m.iasZoneAlarm({ zoneType: "water_leak", zoneAttributes: ["alarm_1", "battery_low"] }),
2855
+ m.commandsOnOff(),
2856
+ m.enumLookup({
2857
+ name: "switch_actions",
2858
+ lookup: { off: 0, on: 1 },
2859
+ cluster: "genOnOffSwitchCfg",
2860
+ attribute: "switchActions",
2861
+ description: "Actions switch",
2862
+ }),
2863
+ ],
2864
+ meta: {},
2865
+ ota: true,
2866
+ },
2867
+ {
2868
+ zigbeeModel: ["AirQ_Monitor_S01"],
2869
+ model: "AirQ_Monitor_S01",
2870
+ vendor: "Slacky-DIY",
2871
+ description: "Air quality monitor",
2872
+ configure: async (device, coordinatorEndpoint, logger) => {
2873
+ const endpoint = device.getEndpoint(1);
2874
+ await endpoint.read("genLevelCtrl", ["currentLevel"]);
2875
+ },
2876
+ extend: [
2877
+ m.co2({ reporting: { min: 10, max: 3600, change: 0.00001 } }),
2878
+ m.numeric({
2879
+ name: "voc_index",
2880
+ access: "STATE_GET",
2881
+ cluster: "genAnalogInput",
2882
+ attribute: "presentValue",
2883
+ reporting: { min: 10, max: 3600, change: 30 },
2884
+ unit: "VOC Index points",
2885
+ description: "VOC index",
2886
+ }),
2887
+ m.temperature(),
2888
+ m.humidity(),
2889
+ m.pressure(),
2890
+ m.illuminance(),
2891
+ m.enumLookup({
2892
+ name: "display_rotate",
2893
+ lookup: { horizontal: 0, vertical: 1 },
2894
+ cluster: "hvacUserInterfaceCfg",
2895
+ attribute: { ID: attrDisplayRotate, type: 0x30 },
2896
+ reporting: { min: 0, max: 65000, change: 0 },
2897
+ description: "Display orientation (horizontal/vertical)",
2898
+ }),
2899
+ m.enumLookup({
2900
+ name: "display_inversion",
2901
+ lookup: { black_on_white: 0, white_on_black: 1 },
2902
+ cluster: "hvacUserInterfaceCfg",
2903
+ attribute: { ID: attrDisplayInversion, type: 0x30 },
2904
+ reporting: { min: 0, max: 65000, change: 0 },
2905
+ description: "Display inversion (black on white/white on black)",
2906
+ }),
2907
+ m.enumLookup({
2908
+ name: "temperature_display_mode",
2909
+ lookup: { celsius: 0, fahrenheit: 1 },
2910
+ cluster: "hvacUserInterfaceCfg",
2911
+ attribute: "tempDisplayMode",
2912
+ reporting: { min: 0, max: 65000, change: 0 },
2913
+ description: "The units of the temperature displayed on the device screen",
2914
+ }),
2915
+ m.numeric({
2916
+ name: "temperature_offset",
2917
+ cluster: "msTemperatureMeasurement",
2918
+ attribute: { ID: 0xf000, type: 0x29 },
2919
+ unit: "°C",
2920
+ valueMin: -5,
2921
+ valueMax: 5,
2922
+ valueStep: 0.1,
2923
+ scale: 100,
2924
+ description: "Offset to add/subtract to the inside temperature",
2925
+ }),
2926
+ m.numeric({
2927
+ name: "read_interval",
2928
+ cluster: "msTemperatureMeasurement",
2929
+ attribute: { ID: 0xf001, type: 0x21 },
2930
+ unit: "Sec",
2931
+ valueMin: 5,
2932
+ valueMax: 600,
2933
+ valueStep: 1,
2934
+ description: "Sensors reading period",
2935
+ }),
2936
+ m.binary({
2937
+ name: "enabling_co2_control",
2938
+ cluster: "msCO2",
2939
+ attribute: { ID: 0xf002, type: 0x10 },
2940
+ description: "Enables/disables CO2 control",
2941
+ valueOn: ["ON", 0x01],
2942
+ valueOff: ["OFF", 0x00],
2943
+ }),
2944
+ m.numeric({
2945
+ name: "low_co2",
2946
+ cluster: "msCO2",
2947
+ attribute: { ID: 0xf003, type: 0x21 },
2948
+ unit: "ppm",
2949
+ valueMin: 400,
2950
+ valueMax: 2000,
2951
+ valueStep: 1,
2952
+ description: "CO2 low turn-off limit",
2953
+ }),
2954
+ m.numeric({
2955
+ name: "high_co2",
2956
+ cluster: "msCO2",
2957
+ attribute: { ID: 0xf004, type: 0x21 },
2958
+ unit: "ppm",
2959
+ valueMin: 400,
2960
+ valueMax: 2000,
2961
+ valueStep: 1,
2962
+ description: "CO2 high turn-on limit",
2963
+ }),
2964
+ m.binary({
2965
+ name: "enabling_voc_control",
2966
+ cluster: "genAnalogInput",
2967
+ attribute: { ID: 0xf005, type: 0x10 },
2968
+ description: "Enables/disables VOC control",
2969
+ valueOn: ["ON", 0x01],
2970
+ valueOff: ["OFF", 0x00],
2971
+ }),
2972
+ m.numeric({
2973
+ name: "low_voc",
2974
+ cluster: "genAnalogInput",
2975
+ attribute: { ID: 0xf006, type: 0x21 },
2976
+ unit: "VOC index points",
2977
+ valueMin: 1,
2978
+ valueMax: 500,
2979
+ valueStep: 1,
2980
+ description: "VOC low turn-off limit",
2981
+ }),
2982
+ m.numeric({
2983
+ name: "high_voc",
2984
+ cluster: "genAnalogInput",
2985
+ attribute: { ID: 0xf007, type: 0x21 },
2986
+ unit: "VOC index points",
2987
+ valueMin: 1,
2988
+ valueMax: 500,
2989
+ valueStep: 1,
2990
+ description: "VOC high turn-on limit",
2991
+ }),
2992
+ m.enumLookup({
2993
+ name: "switch_actions",
2994
+ lookup: { off: 0, on: 1 },
2995
+ cluster: "genOnOffSwitchCfg",
2996
+ attribute: "switchActions",
2997
+ description: "Actions switch",
2998
+ }),
2999
+ air_extend.led_brightness(),
3000
+ m.binary({
3001
+ name: "enabling_sound",
3002
+ cluster: "hvacUserInterfaceCfg",
3003
+ attribute: { ID: 0xf00c, type: 0x10 },
3004
+ description: "Enables/disables sound",
3005
+ valueOn: ["ON", 0x01],
3006
+ valueOff: ["OFF", 0x00],
3007
+ }),
3008
+ m.numeric({
3009
+ name: "frc_co2_correction",
3010
+ access: "STATE_GET",
3011
+ cluster: "msCO2",
3012
+ attribute: { ID: attrCo2Calibration, type: 0x29 },
3013
+ reporting: { min: 0, max: 3600, change: 0 },
3014
+ unit: "ppm",
3015
+ description: "FRC CO2 correction",
3016
+ }),
3017
+ air_extend.features_sensors(),
3018
+ m.numeric({
3019
+ name: "life_time",
3020
+ access: "STATE_GET",
3021
+ cluster: "genTime",
3022
+ attribute: "time",
3023
+ reporting: { min: 60, max: 3600, change: 0 },
3024
+ unit: "h",
3025
+ description: "Life time of device",
3026
+ }),
3027
+ ],
3028
+ meta: {},
3029
+ ota: true,
3030
+ },
3031
+ {
3032
+ zigbeeModel: ["QS-Zigbee-SEC01-Mod"],
3033
+ model: "QS-Zigbee-SEC01-Mod",
3034
+ vendor: "Svetomaniya",
3035
+ description: "Smart light switch module 1 gang",
3036
+ extend: [
3037
+ m.onOff({ powerOnBehavior: true }),
3038
+ m.commandsOnOff(),
3039
+ localActionExtend(),
3040
+ m.enumLookup({
3041
+ name: "switch_actions",
3042
+ lookup: { off: 0, on: 1 },
3043
+ cluster: "genOnOffSwitchCfg",
3044
+ attribute: "switchActions",
3045
+ description: "Actions switch",
3046
+ }),
3047
+ m.enumLookup({
3048
+ name: "switch_type",
3049
+ lookup: { toggle: 0, momentary: 1, multifunction: 2 },
3050
+ cluster: "genOnOffSwitchCfg",
3051
+ attribute: { ID: 0xf000, type: 0x30 },
3052
+ description: "Switch type",
3053
+ }),
3054
+ m.enumLookup({
3055
+ name: "operation_mode",
3056
+ lookup: { control_relay: 0, decoupled: 1 },
3057
+ cluster: "genOnOffSwitchCfg",
3058
+ attribute: { ID: 0xf001, type: 0x30 },
3059
+ reporting: { min: 0, max: 65000, change: 0 },
3060
+ description: "Relay decoupled",
3061
+ }),
3062
+ ],
3063
+ meta: {},
3064
+ ota: true,
3065
+ },
3066
+ {
3067
+ zigbeeModel: ["QS-Zigbee-SEC02-Mod"],
3068
+ model: "QS-Zigbee-SEC02-Mod",
3069
+ vendor: "Svetomaniya",
3070
+ description: "Smart light switch module 2 gang",
3071
+ extend: [
3072
+ m.deviceEndpoints({ endpoints: { "1": 1, "2": 2 } }),
3073
+ m.onOff({ powerOnBehavior: true, endpointNames: ["1", "2"] }),
3074
+ m.commandsOnOff({ endpointNames: ["1", "2"] }),
3075
+ localActionExtend({ endpointNames: ["1", "2"] }),
3076
+ m.enumLookup({
3077
+ name: "switch_actions",
3078
+ endpointName: "1",
3079
+ lookup: { off: 0, on: 1 },
3080
+ cluster: "genOnOffSwitchCfg",
3081
+ attribute: "switchActions",
3082
+ description: "Actions switch 1",
3083
+ }),
3084
+ m.enumLookup({
3085
+ name: "switch_actions",
3086
+ endpointName: "2",
3087
+ lookup: { off: 0, on: 1 },
3088
+ cluster: "genOnOffSwitchCfg",
3089
+ attribute: "switchActions",
3090
+ description: "Actions switch 2",
3091
+ }),
3092
+ m.enumLookup({
3093
+ name: "switch_type",
3094
+ endpointName: "1",
3095
+ lookup: { toggle: 0, momentary: 1, multifunction: 2 },
3096
+ cluster: "genOnOffSwitchCfg",
3097
+ attribute: { ID: 0xf000, type: 0x30 },
3098
+ description: "Switch 1 type",
3099
+ }),
3100
+ m.enumLookup({
3101
+ name: "switch_type",
3102
+ endpointName: "2",
3103
+ lookup: { toggle: 0, momentary: 1, multifunction: 2 },
3104
+ cluster: "genOnOffSwitchCfg",
3105
+ attribute: { ID: 0xf000, type: 0x30 },
3106
+ description: "Switch 2 type",
3107
+ }),
3108
+ m.enumLookup({
3109
+ name: "operation_mode",
3110
+ endpointName: "1",
3111
+ lookup: { control_relay: 0, decoupled: 1 },
3112
+ cluster: "genOnOffSwitchCfg",
3113
+ attribute: { ID: 0xf001, type: 0x30 },
3114
+ reporting: { min: 0, max: 65000, change: 0 },
3115
+ description: "Relay 1 decoupled",
3116
+ }),
3117
+ m.enumLookup({
3118
+ name: "operation_mode",
3119
+ endpointName: "2",
3120
+ lookup: { control_relay: 0, decoupled: 1 },
3121
+ cluster: "genOnOffSwitchCfg",
3122
+ attribute: { ID: 0xf001, type: 0x30 },
3123
+ reporting: { min: 0, max: 65000, change: 0 },
3124
+ description: "Relay 2 decoupled",
3125
+ }),
3126
+ ],
3127
+ meta: { multiEndpoint: true },
3128
+ ota: true,
3129
+ },
3130
+ {
3131
+ zigbeeModel: ["TS011F-SlD"],
3132
+ model: "TS011F_plug-SlD",
3133
+ vendor: "Slacky-DIY",
3134
+ description: "Plug with power monitoring",
3135
+ extend: [
3136
+ m.onOff({ powerOnBehavior: true }),
3137
+ m.binary({
3138
+ name: "key_lock",
3139
+ valueOn: ["LOCK", 1],
3140
+ valueOff: ["UNLOCK", 0],
3141
+ cluster: "genOnOff",
3142
+ attribute: { ID: attrPlugKeyLock, type: 0x10 },
3143
+ description: "Key lock enable/disable",
3144
+ }),
3145
+ m.enumLookup({
3146
+ name: "led_control",
3147
+ lookup: { off: 0, on: 1, "on/off": 2 },
3148
+ cluster: "genOnOff",
3149
+ attribute: { ID: attrPlugLedCtrl, type: 0x30 },
3150
+ description: "Led control",
3151
+ }),
3152
+ m.electricityMeter({
3153
+ current: { divisor: 100 },
3154
+ voltage: { divisor: 100 },
3155
+ power: { divisor: 1 },
3156
+ energy: { divisor: 100 },
3157
+ acFrequency: { divisor: 100 },
3158
+ }),
3159
+ m.deviceAddCustomCluster("seMetering", {
3160
+ ID: 0x0702,
3161
+ attributes: {},
3162
+ commands: {
3163
+ resetEnergyMeters: {
3164
+ ID: 0x80,
3165
+ parameters: [],
3166
+ },
3167
+ },
3168
+ commandsResponse: {},
3169
+ }),
3170
+ energyResetExtend.energyReset(),
3171
+ m.binary({
3172
+ name: "protect_control",
3173
+ valueOn: ["ON", 1],
3174
+ valueOff: ["OFF", 0],
3175
+ cluster: "haElectricalMeasurement",
3176
+ attribute: { ID: attrPlugSwitchProtectCtrl, type: 0x10 },
3177
+ description: "Protection control enable/disable",
3178
+ }),
3179
+ m.binary({
3180
+ name: "automatic_restart",
3181
+ valueOn: ["ON", 1],
3182
+ valueOff: ["OFF", 0],
3183
+ cluster: "haElectricalMeasurement",
3184
+ attribute: { ID: attrPlugSwitchAutoRestart, type: 0x10 },
3185
+ description: "Automatic restart enable/disable for voltage only",
3186
+ }),
3187
+ m.numeric({
3188
+ name: "voltage_min",
3189
+ unit: "V",
3190
+ cluster: "haElectricalMeasurement",
3191
+ attribute: "rmsExtremeUnderVoltage",
3192
+ description: "Minimum voltage value",
3193
+ valueMin: 0,
3194
+ valueMax: 300,
3195
+ scale: 100,
3196
+ }),
3197
+ m.numeric({
3198
+ name: "voltage_max",
3199
+ unit: "V",
3200
+ cluster: "haElectricalMeasurement",
3201
+ attribute: "rmsExtremeOverVoltage",
3202
+ description: "Maximum voltage value",
3203
+ valueMin: 0,
3204
+ valueMax: 300,
3205
+ scale: 100,
3206
+ }),
3207
+ m.numeric({
3208
+ name: "current_max",
3209
+ unit: "A",
3210
+ cluster: "haElectricalMeasurement",
3211
+ attribute: { ID: attrPlugSwitchCurrentMax, type: 0x21 },
3212
+ description: "Maximum current value",
3213
+ scale: 100,
3214
+ valueMin: 0,
3215
+ valueMax: 16,
3216
+ valueStep: 0.1,
3217
+ }),
3218
+ m.numeric({
3219
+ name: "power_max",
3220
+ unit: "W",
3221
+ cluster: "haElectricalMeasurement",
3222
+ attribute: { ID: attrPlugSwitchPowerMax, type: 0x29 },
3223
+ description: "Maximum power value",
3224
+ valueMin: 0,
3225
+ valueMax: 3600,
3226
+ }),
3227
+ m.numeric({
3228
+ name: "time_reload",
3229
+ unit: "sec",
3230
+ cluster: "haElectricalMeasurement",
3231
+ attribute: { ID: attrPlugSwitchTimeReload, type: 0x21 },
3232
+ description: "Reload time",
3233
+ valueMin: 5,
3234
+ valueMax: 60,
3235
+ }),
3236
+ ],
3237
+ meta: {},
3238
+ ota: true,
3239
+ },
3240
+ {
3241
+ zigbeeModel: ["TS0001_power-SlD"],
3242
+ model: "TS0001_power-SlD",
3243
+ vendor: "Slacky-DIY",
3244
+ description: "Switch with power monitoring",
3245
+ extend: [
3246
+ m.onOff({ powerOnBehavior: true }),
3247
+ m.commandsOnOff(),
3248
+ localActionExtend(),
3249
+ m.enumLookup({
3250
+ name: "switch_actions",
3251
+ lookup: { off: 0, on: 1 },
3252
+ cluster: "genOnOffSwitchCfg",
3253
+ attribute: "switchActions",
3254
+ description: "Actions switch",
3255
+ }),
3256
+ m.enumLookup({
3257
+ name: "switch_type",
3258
+ lookup: { toggle: 0, momentary: 1, multifunction: 2 },
3259
+ cluster: "genOnOffSwitchCfg",
3260
+ attribute: { ID: 0xf000, type: 0x30 },
3261
+ description: "Switch 1 type",
3262
+ }),
3263
+ m.enumLookup({
3264
+ name: "operation_mode",
3265
+ lookup: { control_relay: 0, decoupled: 1 },
3266
+ cluster: "genOnOffSwitchCfg",
3267
+ attribute: { ID: 0xf001, type: 0x30 },
3268
+ reporting: { min: 0, max: 65000, change: 0 },
3269
+ description: "Relay decoupled",
3270
+ }),
3271
+ m.electricityMeter({
3272
+ current: { divisor: 100 },
3273
+ voltage: { divisor: 100 },
3274
+ power: { divisor: 1 },
3275
+ energy: { divisor: 100 },
3276
+ acFrequency: { divisor: 100 },
3277
+ }),
3278
+ m.deviceAddCustomCluster("seMetering", {
3279
+ ID: 0x0702,
3280
+ attributes: {},
3281
+ commands: {
3282
+ resetEnergyMeters: {
3283
+ ID: 0x80,
3284
+ parameters: [],
3285
+ },
3286
+ },
3287
+ commandsResponse: {},
3288
+ }),
3289
+ energyResetExtend.energyReset(),
3290
+ m.binary({
3291
+ name: "protect_control",
3292
+ valueOn: ["ON", 1],
3293
+ valueOff: ["OFF", 0],
3294
+ cluster: "haElectricalMeasurement",
3295
+ attribute: { ID: attrPlugSwitchProtectCtrl, type: 0x10 },
3296
+ description: "Protection control enable/disable",
3297
+ }),
3298
+ m.binary({
3299
+ name: "automatic_restart",
3300
+ valueOn: ["ON", 1],
3301
+ valueOff: ["OFF", 0],
3302
+ cluster: "haElectricalMeasurement",
3303
+ attribute: { ID: attrPlugSwitchAutoRestart, type: 0x10 },
3304
+ description: "Automatic restart enable/disable for voltage only",
3305
+ }),
3306
+ m.numeric({
3307
+ name: "voltage_min",
3308
+ unit: "V",
3309
+ cluster: "haElectricalMeasurement",
3310
+ attribute: "rmsExtremeUnderVoltage",
3311
+ description: "Minimum voltage value",
3312
+ valueMin: 0,
3313
+ valueMax: 300,
3314
+ scale: 100,
3315
+ }),
3316
+ m.numeric({
3317
+ name: "voltage_max",
3318
+ unit: "V",
3319
+ cluster: "haElectricalMeasurement",
3320
+ attribute: "rmsExtremeOverVoltage",
3321
+ description: "Maximum voltage value",
3322
+ valueMin: 0,
3323
+ valueMax: 300,
3324
+ scale: 100,
3325
+ }),
3326
+ m.numeric({
3327
+ name: "current_max",
3328
+ unit: "A",
3329
+ cluster: "haElectricalMeasurement",
3330
+ attribute: { ID: attrPlugSwitchCurrentMax, type: 0x21 },
3331
+ description: "Maximum current value",
3332
+ scale: 100,
3333
+ valueMin: 0,
3334
+ valueMax: 16,
3335
+ valueStep: 0.1,
3336
+ }),
3337
+ m.numeric({
3338
+ name: "power_max",
3339
+ unit: "W",
3340
+ cluster: "haElectricalMeasurement",
3341
+ attribute: { ID: attrPlugSwitchPowerMax, type: 0x29 },
3342
+ description: "Maximum power value",
3343
+ valueMin: 0,
3344
+ valueMax: 3600,
3345
+ }),
3346
+ m.numeric({
3347
+ name: "time_reload",
3348
+ unit: "sec",
3349
+ cluster: "haElectricalMeasurement",
3350
+ attribute: { ID: attrPlugSwitchTimeReload, type: 0x21 },
3351
+ description: "Reload time",
3352
+ valueMin: 5,
3353
+ valueMax: 60,
3354
+ }),
3355
+ ],
3356
+ meta: {},
3357
+ ota: true,
3358
+ },
3359
+ {
3360
+ zigbeeModel: ["TSM1-0025-SlD"],
3361
+ model: "TSM1-SlD",
3362
+ vendor: "Slacky-DIY",
3363
+ description: "Tuya switch module 1 gang with custom firmware",
3364
+ extend: [
3365
+ m.deviceAddCustomCluster("genOnOffSwitchCfg", {
3366
+ ID: 0x0007,
3367
+ attributes: {
3368
+ customSwitchType: {
3369
+ ID: attrSwitchType,
3370
+ type: 0x30,
3371
+ write: true,
3372
+ max: 0xff,
3373
+ },
3374
+ customRelayControl: {
3375
+ ID: attrSwitchDecoupled,
3376
+ type: 0x30,
3377
+ write: true,
3378
+ max: 0xff,
3379
+ },
3380
+ customDeviceModelNumber: {
3381
+ ID: attrDeviceModelNumber,
3382
+ type: 0x30,
3383
+ write: true,
3384
+ max: 0xff,
3385
+ },
3386
+ },
3387
+ commands: {},
3388
+ commandsResponse: {},
3389
+ }),
3390
+ m.onOff({ powerOnBehavior: true }),
3391
+ m.commandsOnOff(),
3392
+ localActionExtend(),
3393
+ m.enumLookup({
3394
+ name: "switch_actions",
3395
+ lookup: { off: 0, on: 1 },
3396
+ cluster: "genOnOffSwitchCfg",
3397
+ attribute: "switchActions",
3398
+ description: "Actions switch",
3399
+ }),
3400
+ m.enumLookup({
3401
+ name: "switch_type",
3402
+ lookup: { toggle: 0, momentary: 1, multifunction: 2 },
3403
+ cluster: "genOnOffSwitchCfg",
3404
+ attribute: "customSwitchType",
3405
+ description: "Switch type",
3406
+ }),
3407
+ m.enumLookup({
3408
+ name: "operation_mode",
3409
+ lookup: { control_relay: 0, decoupled: 1 },
3410
+ cluster: "genOnOffSwitchCfg",
3411
+ attribute: "customRelayControl",
3412
+ reporting: { min: 0, max: 65000, change: 0 },
3413
+ description: "Relay decoupled",
3414
+ }),
3415
+ ],
3416
+ meta: {},
3417
+ ota: true,
3418
+ },
3419
+ {
3420
+ zigbeeModel: ["TS0203-z20-Sld"],
3421
+ model: "TS0203-z-Sld",
3422
+ vendor: "Slacky-DIY",
3423
+ description: "Tuya door/window sensor with custom firmware",
3424
+ toZigbee: [tzLocal.device_model_number],
3425
+ extend: [
3426
+ m.deviceAddCustomCluster("genOnOffSwitchCfg", {
3427
+ ID: 0x0007,
3428
+ attributes: {
3429
+ customDelayOn: {
3430
+ ID: attrDoorDelayOn,
3431
+ type: 0x20,
3432
+ write: true,
3433
+ max: 0xff,
3434
+ },
3435
+ customDelayOff: {
3436
+ ID: attrDoorDelayOff,
3437
+ type: 0x20,
3438
+ write: true,
3439
+ max: 0xff,
3440
+ },
3441
+ customDeviceModelNumber: {
3442
+ ID: attrDeviceModelNumber,
3443
+ type: 0x30,
3444
+ write: true,
3445
+ max: 0xff,
3446
+ },
3447
+ customOnCmdOff: {
3448
+ ID: attrDoorOnCmdOff,
3449
+ type: 0x10,
3450
+ write: true,
3451
+ max: 0x01,
3452
+ },
3453
+ customOffCmdOff: {
3454
+ ID: attrDoorOffCmdOff,
3455
+ type: 0x10,
3456
+ write: true,
3457
+ max: 0x01,
3458
+ },
3459
+ },
3460
+ commands: {},
3461
+ commandsResponse: {},
3462
+ }),
3463
+ m.text({
3464
+ name: "model_number",
3465
+ cluster: "genBasic",
3466
+ attribute: "productLabel",
3467
+ access: "STATE_GET",
3468
+ description: "Door sensor model number",
3469
+ }),
3470
+ m.iasZoneAlarm({ zoneType: "contact", zoneAttributes: ["alarm_1"] }),
3471
+ m.battery({
3472
+ voltage: true,
3473
+ voltageReporting: true,
3474
+ percentageReportingConfig: { min: 3600, max: 0, change: 0 },
3475
+ voltageReportingConfig: { min: 3600, max: 0, change: 0 },
3476
+ }),
3477
+ m.enumLookup({
3478
+ name: "switch_actions",
3479
+ lookup: { off: 0, on: 1, toggle: 2 },
3480
+ cluster: "genOnOffSwitchCfg",
3481
+ attribute: "switchActions",
3482
+ description: "Actions switch",
3483
+ }),
3484
+ m.numeric({
3485
+ name: "delay_on",
3486
+ unit: "sec",
3487
+ cluster: "genOnOffSwitchCfg",
3488
+ attribute: "customDelayOn",
3489
+ description: "Delay On",
3490
+ valueMin: 0,
3491
+ valueMax: 120,
3492
+ }),
3493
+ m.numeric({
3494
+ name: "delay_off",
3495
+ unit: "sec",
3496
+ cluster: "genOnOffSwitchCfg",
3497
+ attribute: "customDelayOff",
3498
+ description: "Delay Off",
3499
+ valueMin: 0,
3500
+ valueMax: 120,
3501
+ }),
3502
+ m.binary({
3503
+ name: "on_command_off",
3504
+ valueOn: ["ON", 0x01],
3505
+ valueOff: ["OFF", 0x00],
3506
+ cluster: "genOnOffSwitchCfg",
3507
+ attribute: "customOnCmdOff",
3508
+ description: "Disable command 'On'",
3509
+ }),
3510
+ m.binary({
3511
+ name: "off_command_off",
3512
+ valueOn: ["ON", 0x01],
3513
+ valueOff: ["OFF", 0x00],
3514
+ cluster: "genOnOffSwitchCfg",
3515
+ attribute: "customOffCmdOff",
3516
+ description: "Disable command 'Off'",
3517
+ }),
3518
+ ],
3519
+ meta: {},
3520
+ ota: true,
3521
+ },
3522
+ {
3523
+ zigbeeModel: ["TS0044-z-SlD"],
3524
+ model: "TS0044-z-SlD",
3525
+ vendor: "Slacky-DIY",
3526
+ description: "Tuya wireless switch with 4 buttons with custom firmware",
3527
+ extend: [
3528
+ m.deviceAddCustomCluster("genOnOffSwitchCfg", {
3529
+ ID: 0x0007,
3530
+ attributes: {
3531
+ customSwitchType: {
3532
+ ID: attrSwitchType,
3533
+ type: 0x30,
3534
+ write: true,
3535
+ max: 0xff,
3536
+ },
3537
+ customDeviceModelNumber: {
3538
+ ID: attrDeviceModelNumber,
3539
+ type: 0x30,
3540
+ write: true,
3541
+ max: 0xff,
3542
+ },
3543
+ },
3544
+ commands: {},
3545
+ commandsResponse: {},
3546
+ }),
3547
+ m.deviceAddCustomCluster("genScenes", {
3548
+ ID: 0x0005,
3549
+ attributes: {
3550
+ customSceneId: {
3551
+ ID: attrSceneId,
3552
+ type: 0x20,
3553
+ write: true,
3554
+ max: 0xff,
3555
+ },
3556
+ customGroupId: {
3557
+ ID: attrGroupId,
3558
+ type: 0x21,
3559
+ write: true,
3560
+ max: 0xffff,
3561
+ },
3562
+ },
3563
+ commands: {},
3564
+ commandsResponse: {},
3565
+ }),
3566
+ m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3, "4": 4 } }),
3567
+ m.battery({
3568
+ percentageReportingConfig: { min: 3600, max: 14400, change: 0 },
3569
+ }),
3570
+ m.commandsOnOff({ endpointNames: ["1", "2", "3", "4"] }),
3571
+ localActionExtend({
3572
+ endpointNames: ["1", "2", "3", "4"],
3573
+ reporting: false,
3574
+ }),
3575
+ m.commandsLevelCtrl({ endpointNames: ["1", "2", "3", "4"] }),
3576
+ m.enumLookup({
3577
+ name: "switch_actions",
3578
+ endpointName: "1",
3579
+ lookup: { off: 0, on: 1, toggle: 2 },
3580
+ cluster: "genOnOffSwitchCfg",
3581
+ attribute: "switchActions",
3582
+ description: "Actions switch",
3583
+ }),
3584
+ m.enumLookup({
3585
+ name: "switch_actions",
3586
+ endpointName: "2",
3587
+ lookup: { off: 0, on: 1, toggle: 2 },
3588
+ cluster: "genOnOffSwitchCfg",
3589
+ attribute: "switchActions",
3590
+ description: "Actions switch",
3591
+ }),
3592
+ m.enumLookup({
3593
+ name: "switch_actions",
3594
+ endpointName: "3",
3595
+ lookup: { off: 0, on: 1, toggle: 2 },
3596
+ cluster: "genOnOffSwitchCfg",
3597
+ attribute: "switchActions",
3598
+ description: "Actions switch",
3599
+ }),
3600
+ m.enumLookup({
3601
+ name: "switch_actions",
3602
+ endpointName: "4",
3603
+ lookup: { off: 0, on: 1, toggle: 2 },
3604
+ cluster: "genOnOffSwitchCfg",
3605
+ attribute: "switchActions",
3606
+ description: "Actions switch",
3607
+ }),
3608
+ m.enumLookup({
3609
+ name: "switch_type",
3610
+ endpointName: "1",
3611
+ lookup: {
3612
+ toggle: 0,
3613
+ momentary: 1,
3614
+ multifunction: 2,
3615
+ brightness_level_up: 3,
3616
+ brightness_level_down: 4,
3617
+ scene: 5,
3618
+ },
3619
+ cluster: "genOnOffSwitchCfg",
3620
+ attribute: "customSwitchType",
3621
+ description: "Switch type",
3622
+ }),
3623
+ m.enumLookup({
3624
+ name: "switch_type",
3625
+ endpointName: "2",
3626
+ lookup: {
3627
+ toggle: 0,
3628
+ momentary: 1,
3629
+ multifunction: 2,
3630
+ brightness_level_up: 3,
3631
+ brightness_level_down: 4,
3632
+ scene: 5,
3633
+ },
3634
+ cluster: "genOnOffSwitchCfg",
3635
+ attribute: "customSwitchType",
3636
+ description: "Switch type",
3637
+ }),
3638
+ m.enumLookup({
3639
+ name: "switch_type",
3640
+ endpointName: "3",
3641
+ lookup: {
3642
+ toggle: 0,
3643
+ momentary: 1,
3644
+ multifunction: 2,
3645
+ brightness_level_up: 3,
3646
+ brightness_level_down: 4,
3647
+ scene: 5,
3648
+ },
3649
+ cluster: "genOnOffSwitchCfg",
3650
+ attribute: "customSwitchType",
3651
+ description: "Switch type",
3652
+ }),
3653
+ m.enumLookup({
3654
+ name: "switch_type",
3655
+ endpointName: "4",
3656
+ lookup: {
3657
+ toggle: 0,
3658
+ momentary: 1,
3659
+ multifunction: 2,
3660
+ brightness_level_up: 3,
3661
+ brightness_level_down: 4,
3662
+ scene: 5,
3663
+ },
3664
+ cluster: "genOnOffSwitchCfg",
3665
+ attribute: "customSwitchType",
3666
+ description: "Switch type",
3667
+ }),
3668
+ m.commandsScenes({ endpointNames: ["1", "2", "3", "4"] }),
3669
+ m.numeric({
3670
+ name: "scene_id",
3671
+ endpointNames: ["1", "2", "3", "4"],
3672
+ access: "ALL",
3673
+ cluster: "genScenes",
3674
+ attribute: "customSceneId",
3675
+ valueMin: 0,
3676
+ valueMax: 255,
3677
+ description: "Scene ID",
3678
+ }),
3679
+ m.numeric({
3680
+ name: "group_id",
3681
+ endpointNames: ["1", "2", "3", "4"],
3682
+ access: "ALL",
3683
+ cluster: "genScenes",
3684
+ attribute: "customGroupId",
3685
+ valueMin: 0,
3686
+ valueMax: 65527,
3687
+ description: "Group ID for scenes",
3688
+ }),
3689
+ ],
3690
+ meta: {},
3691
+ ota: true,
3692
+ },
3693
+ ];
3694
+ //# sourceMappingURL=slacky_diy.js.map