zigbee-herdsman-converters 22.2.0 → 23.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2730) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +23 -6
  3. package/dist/converters/fromZigbee.d.ts +293 -0
  4. package/dist/converters/fromZigbee.d.ts.map +1 -0
  5. package/dist/converters/fromZigbee.js +5347 -0
  6. package/dist/converters/fromZigbee.js.map +1 -0
  7. package/dist/converters/toZigbee.d.ts +229 -0
  8. package/dist/converters/toZigbee.d.ts.map +1 -0
  9. package/dist/converters/toZigbee.js +4407 -0
  10. package/dist/converters/toZigbee.js.map +1 -0
  11. package/dist/devices/ITCommander.d.ts +3 -0
  12. package/dist/devices/ITCommander.d.ts.map +1 -0
  13. package/dist/devices/ITCommander.js +73 -0
  14. package/dist/devices/ITCommander.js.map +1 -0
  15. package/dist/devices/acova.d.ts +3 -0
  16. package/dist/devices/acova.d.ts.map +1 -0
  17. package/dist/devices/acova.js +123 -0
  18. package/dist/devices/acova.js.map +1 -0
  19. package/dist/devices/acuity_brands_lighting.d.ts +3 -0
  20. package/dist/devices/acuity_brands_lighting.d.ts.map +1 -0
  21. package/dist/devices/acuity_brands_lighting.js +61 -0
  22. package/dist/devices/adeo.d.ts +3 -0
  23. package/dist/devices/adeo.d.ts.map +1 -0
  24. package/dist/devices/adeo.js +482 -0
  25. package/dist/devices/adeo.js.map +1 -0
  26. package/dist/devices/adurosmart.d.ts +3 -0
  27. package/dist/devices/adurosmart.d.ts.map +1 -0
  28. package/dist/devices/adurosmart.js +186 -0
  29. package/dist/devices/adurosmart.js.map +1 -0
  30. package/dist/devices/aeotec.d.ts +3 -0
  31. package/dist/devices/aeotec.d.ts.map +1 -0
  32. package/dist/devices/aeotec.js +95 -0
  33. package/dist/devices/aeotec.js.map +1 -0
  34. package/dist/devices/airam.d.ts +3 -0
  35. package/dist/devices/airam.d.ts.map +1 -0
  36. package/dist/devices/airam.js +102 -0
  37. package/dist/devices/airam.js.map +1 -0
  38. package/dist/devices/airzone_aidoo.d.ts +3 -0
  39. package/dist/devices/airzone_aidoo.d.ts.map +1 -0
  40. package/dist/devices/airzone_aidoo.js +77 -0
  41. package/dist/devices/airzone_aidoo.js.map +1 -0
  42. package/dist/devices/ajax_online.d.ts +3 -0
  43. package/dist/devices/ajax_online.d.ts.map +1 -0
  44. package/dist/devices/ajax_online.js +83 -0
  45. package/dist/devices/akuvox.d.ts +3 -0
  46. package/dist/devices/akuvox.d.ts.map +1 -0
  47. package/dist/devices/akuvox.js +65 -0
  48. package/dist/devices/akuvox.js.map +1 -0
  49. package/dist/devices/alchemy.d.ts +3 -0
  50. package/dist/devices/alchemy.d.ts.map +1 -0
  51. package/dist/devices/alchemy.js +54 -0
  52. package/dist/devices/aldi.d.ts +3 -0
  53. package/dist/devices/aldi.d.ts.map +1 -0
  54. package/dist/devices/aldi.js +54 -0
  55. package/dist/devices/aldi.js.map +1 -0
  56. package/dist/devices/alecto.d.ts +3 -0
  57. package/dist/devices/alecto.d.ts.map +1 -0
  58. package/dist/devices/alecto.js +92 -0
  59. package/dist/devices/alecto.js.map +1 -0
  60. package/dist/devices/amina.d.ts +3 -0
  61. package/dist/devices/amina.d.ts.map +1 -0
  62. package/dist/devices/amina.js +366 -0
  63. package/dist/devices/amina.js.map +1 -0
  64. package/dist/devices/anchor.d.ts +3 -0
  65. package/dist/devices/anchor.d.ts.map +1 -0
  66. package/dist/devices/anchor.js +47 -0
  67. package/dist/devices/atlantic.d.ts +3 -0
  68. package/dist/devices/atlantic.d.ts.map +1 -0
  69. package/dist/devices/atlantic.js +145 -0
  70. package/dist/devices/atlantic.js.map +1 -0
  71. package/dist/devices/atsmart.d.ts +3 -0
  72. package/dist/devices/atsmart.d.ts.map +1 -0
  73. package/dist/devices/atsmart.js +47 -0
  74. package/dist/devices/aubess.d.ts +3 -0
  75. package/dist/devices/aubess.d.ts.map +1 -0
  76. package/dist/devices/aubess.js +60 -0
  77. package/dist/devices/aurora_lighting.d.ts +3 -0
  78. package/dist/devices/aurora_lighting.d.ts.map +1 -0
  79. package/dist/devices/aurora_lighting.js +329 -0
  80. package/dist/devices/aurora_lighting.js.map +1 -0
  81. package/dist/devices/automaton.d.ts +3 -0
  82. package/dist/devices/automaton.d.ts.map +1 -0
  83. package/dist/devices/automaton.js +64 -0
  84. package/dist/devices/avatto.d.ts +3 -0
  85. package/dist/devices/avatto.d.ts.map +1 -0
  86. package/dist/devices/avatto.js +275 -0
  87. package/dist/devices/avatto.js.map +1 -0
  88. package/dist/devices/awox.d.ts +3 -0
  89. package/dist/devices/awox.d.ts.map +1 -0
  90. package/dist/devices/awox.js +236 -0
  91. package/dist/devices/awox.js.map +1 -0
  92. package/dist/devices/axis.d.ts +3 -0
  93. package/dist/devices/axis.d.ts.map +1 -0
  94. package/dist/devices/axis.js +59 -0
  95. package/dist/devices/axis.js.map +1 -0
  96. package/dist/devices/bankamp.d.ts +3 -0
  97. package/dist/devices/bankamp.d.ts.map +1 -0
  98. package/dist/devices/bankamp.js +47 -0
  99. package/dist/devices/bega.d.ts +3 -0
  100. package/dist/devices/bega.d.ts.map +1 -0
  101. package/dist/devices/bega.js +61 -0
  102. package/dist/devices/belkin.d.ts +3 -0
  103. package/dist/devices/belkin.d.ts.map +1 -0
  104. package/dist/devices/belkin.js +47 -0
  105. package/dist/devices/bitron.d.ts +3 -0
  106. package/dist/devices/bitron.d.ts.map +1 -0
  107. package/dist/devices/bitron.js +354 -0
  108. package/dist/devices/bitron.js.map +1 -0
  109. package/dist/devices/bituo_technik.d.ts +3 -0
  110. package/dist/devices/bituo_technik.d.ts.map +1 -0
  111. package/dist/devices/bituo_technik.js +117 -0
  112. package/dist/devices/bituo_technik.js.map +1 -0
  113. package/dist/devices/blaupunkt.d.ts +3 -0
  114. package/dist/devices/blaupunkt.d.ts.map +1 -0
  115. package/dist/devices/blaupunkt.js +64 -0
  116. package/dist/devices/blaupunkt.js.map +1 -0
  117. package/dist/devices/blitzwolf.d.ts +3 -0
  118. package/dist/devices/blitzwolf.d.ts.map +1 -0
  119. package/dist/devices/blitzwolf.js +70 -0
  120. package/dist/devices/blitzwolf.js.map +1 -0
  121. package/dist/devices/bosch.d.ts +3 -0
  122. package/dist/devices/bosch.d.ts.map +1 -0
  123. package/dist/devices/bosch.js +2039 -0
  124. package/dist/devices/bosch.js.map +1 -0
  125. package/dist/devices/bouffalo_lab.d.ts +3 -0
  126. package/dist/devices/bouffalo_lab.d.ts.map +1 -0
  127. package/dist/devices/bouffalo_lab.js +47 -0
  128. package/dist/devices/brimate.d.ts +3 -0
  129. package/dist/devices/brimate.d.ts.map +1 -0
  130. package/dist/devices/brimate.js +51 -0
  131. package/dist/devices/brimate.js.map +1 -0
  132. package/dist/devices/bseed.d.ts +3 -0
  133. package/dist/devices/bseed.d.ts.map +1 -0
  134. package/dist/devices/bseed.js +53 -0
  135. package/dist/devices/bticino.d.ts +3 -0
  136. package/dist/devices/bticino.d.ts.map +1 -0
  137. package/dist/devices/bticino.js +109 -0
  138. package/dist/devices/bticino.js.map +1 -0
  139. package/dist/devices/busch_jaeger.d.ts +3 -0
  140. package/dist/devices/busch_jaeger.d.ts.map +1 -0
  141. package/dist/devices/busch_jaeger.js +181 -0
  142. package/dist/devices/busch_jaeger.js.map +1 -0
  143. package/dist/devices/byun.d.ts +3 -0
  144. package/dist/devices/byun.d.ts.map +1 -0
  145. package/dist/devices/byun.js +60 -0
  146. package/dist/devices/byun.js.map +1 -0
  147. package/dist/devices/calex.d.ts +3 -0
  148. package/dist/devices/calex.d.ts.map +1 -0
  149. package/dist/devices/calex.js +87 -0
  150. package/dist/devices/calex.js.map +1 -0
  151. package/dist/devices/candeo.d.ts +3 -0
  152. package/dist/devices/candeo.d.ts.map +1 -0
  153. package/dist/devices/candeo.js +224 -0
  154. package/dist/devices/casaia.d.ts +3 -0
  155. package/dist/devices/casaia.d.ts.map +1 -0
  156. package/dist/devices/casaia.js +95 -0
  157. package/dist/devices/casaia.js.map +1 -0
  158. package/dist/devices/cel.d.ts +3 -0
  159. package/dist/devices/cel.d.ts.map +1 -0
  160. package/dist/devices/cel.js +49 -0
  161. package/dist/devices/cel.js.map +1 -0
  162. package/dist/devices/centralite.d.ts +3 -0
  163. package/dist/devices/centralite.d.ts.map +1 -0
  164. package/dist/devices/centralite.js +449 -0
  165. package/dist/devices/centralite.js.map +1 -0
  166. package/dist/devices/chacon.d.ts +3 -0
  167. package/dist/devices/chacon.d.ts.map +1 -0
  168. package/dist/devices/chacon.js +57 -0
  169. package/dist/devices/cleode.d.ts +3 -0
  170. package/dist/devices/cleode.d.ts.map +1 -0
  171. package/dist/devices/cleode.js +47 -0
  172. package/dist/devices/cleverio.d.ts +3 -0
  173. package/dist/devices/cleverio.d.ts.map +1 -0
  174. package/dist/devices/cleverio.js +74 -0
  175. package/dist/devices/cleverio.js.map +1 -0
  176. package/dist/devices/climax.d.ts +3 -0
  177. package/dist/devices/climax.d.ts.map +1 -0
  178. package/dist/devices/climax.js +177 -0
  179. package/dist/devices/climax.js.map +1 -0
  180. package/dist/devices/commercial_electric.d.ts +3 -0
  181. package/dist/devices/commercial_electric.d.ts.map +1 -0
  182. package/dist/devices/commercial_electric.js +47 -0
  183. package/dist/devices/cree.d.ts +3 -0
  184. package/dist/devices/cree.d.ts.map +1 -0
  185. package/dist/devices/cree.js +47 -0
  186. package/dist/devices/ctm.d.ts +3 -0
  187. package/dist/devices/ctm.d.ts.map +1 -0
  188. package/dist/devices/ctm.js +1358 -0
  189. package/dist/devices/ctm.js.map +1 -0
  190. package/dist/devices/current_products_corp.d.ts +3 -0
  191. package/dist/devices/current_products_corp.d.ts.map +1 -0
  192. package/dist/devices/current_products_corp.js +60 -0
  193. package/dist/devices/current_products_corp.js.map +1 -0
  194. package/dist/devices/custom_devices_diy.d.ts +3 -0
  195. package/dist/devices/custom_devices_diy.d.ts.map +1 -0
  196. package/dist/devices/custom_devices_diy.js +1201 -0
  197. package/dist/devices/custom_devices_diy.js.map +1 -0
  198. package/dist/devices/cy_lighting.d.ts +3 -0
  199. package/dist/devices/cy_lighting.d.ts.map +1 -0
  200. package/dist/devices/cy_lighting.js +47 -0
  201. package/dist/devices/danalock.d.ts +3 -0
  202. package/dist/devices/danalock.d.ts.map +1 -0
  203. package/dist/devices/danalock.js +61 -0
  204. package/dist/devices/danalock.js.map +1 -0
  205. package/dist/devices/danfoss.d.ts +3 -0
  206. package/dist/devices/danfoss.d.ts.map +1 -0
  207. package/dist/devices/danfoss.js +738 -0
  208. package/dist/devices/danfoss.js.map +1 -0
  209. package/dist/devices/databyte.d.ts +3 -0
  210. package/dist/devices/databyte.d.ts.map +1 -0
  211. package/dist/devices/databyte.js +90 -0
  212. package/dist/devices/databyte.js.map +1 -0
  213. package/dist/devices/datek.d.ts +3 -0
  214. package/dist/devices/datek.d.ts.map +1 -0
  215. package/dist/devices/datek.js +304 -0
  216. package/dist/devices/datek.js.map +1 -0
  217. package/dist/devices/dawon_dns.d.ts +3 -0
  218. package/dist/devices/dawon_dns.d.ts.map +1 -0
  219. package/dist/devices/dawon_dns.js +314 -0
  220. package/dist/devices/dawon_dns.js.map +1 -0
  221. package/dist/devices/develco.d.ts +3 -0
  222. package/dist/devices/develco.d.ts.map +1 -0
  223. package/dist/devices/develco.js +1031 -0
  224. package/dist/devices/develco.js.map +1 -0
  225. package/dist/devices/digi.d.ts +3 -0
  226. package/dist/devices/digi.d.ts.map +1 -0
  227. package/dist/devices/digi.js +24 -0
  228. package/dist/devices/direct_signs.d.ts +3 -0
  229. package/dist/devices/direct_signs.d.ts.map +1 -0
  230. package/dist/devices/direct_signs.js +47 -0
  231. package/dist/devices/diyruz.d.ts +3 -0
  232. package/dist/devices/diyruz.d.ts.map +1 -0
  233. package/dist/devices/diyruz.js +397 -0
  234. package/dist/devices/diyruz.js.map +1 -0
  235. package/dist/devices/dlink.d.ts +3 -0
  236. package/dist/devices/dlink.d.ts.map +1 -0
  237. package/dist/devices/dlink.js +72 -0
  238. package/dist/devices/dlink.js.map +1 -0
  239. package/dist/devices/dnake.d.ts +3 -0
  240. package/dist/devices/dnake.d.ts.map +1 -0
  241. package/dist/devices/dnake.js +47 -0
  242. package/dist/devices/dowsing_reynolds.d.ts +3 -0
  243. package/dist/devices/dowsing_reynolds.d.ts.map +1 -0
  244. package/dist/devices/dowsing_reynolds.js +47 -0
  245. package/dist/devices/dresden_elektronik.d.ts +3 -0
  246. package/dist/devices/dresden_elektronik.d.ts.map +1 -0
  247. package/dist/devices/dresden_elektronik.js +82 -0
  248. package/dist/devices/easyaccess.d.ts +3 -0
  249. package/dist/devices/easyaccess.d.ts.map +1 -0
  250. package/dist/devices/easyaccess.js +67 -0
  251. package/dist/devices/easyaccess.js.map +1 -0
  252. package/dist/devices/easyiot.d.ts +3 -0
  253. package/dist/devices/easyiot.d.ts.map +1 -0
  254. package/dist/devices/easyiot.js +357 -0
  255. package/dist/devices/easyiot.js.map +1 -0
  256. package/dist/devices/eatonhalo_led.d.ts +3 -0
  257. package/dist/devices/eatonhalo_led.d.ts.map +1 -0
  258. package/dist/devices/eatonhalo_led.js +47 -0
  259. package/dist/devices/echostar.d.ts +3 -0
  260. package/dist/devices/echostar.d.ts.map +1 -0
  261. package/dist/devices/echostar.js +61 -0
  262. package/dist/devices/echostar.js.map +1 -0
  263. package/dist/devices/ecodim.d.ts +3 -0
  264. package/dist/devices/ecodim.d.ts.map +1 -0
  265. package/dist/devices/ecodim.js +266 -0
  266. package/dist/devices/ecodim.js.map +1 -0
  267. package/dist/devices/ecolink.d.ts +3 -0
  268. package/dist/devices/ecolink.d.ts.map +1 -0
  269. package/dist/devices/ecolink.js +57 -0
  270. package/dist/devices/ecolink.js.map +1 -0
  271. package/dist/devices/ecosmart.d.ts +3 -0
  272. package/dist/devices/ecosmart.d.ts.map +1 -0
  273. package/dist/devices/ecosmart.js +115 -0
  274. package/dist/devices/ecozy.d.ts +3 -0
  275. package/dist/devices/ecozy.d.ts.map +1 -0
  276. package/dist/devices/ecozy.js +85 -0
  277. package/dist/devices/ecozy.js.map +1 -0
  278. package/dist/devices/edp.d.ts +3 -0
  279. package/dist/devices/edp.d.ts.map +1 -0
  280. package/dist/devices/edp.js +70 -0
  281. package/dist/devices/edp.js.map +1 -0
  282. package/dist/devices/efekta.d.ts +3 -0
  283. package/dist/devices/efekta.d.ts.map +1 -0
  284. package/dist/devices/efekta.js +2878 -0
  285. package/dist/devices/efekta.js.map +1 -0
  286. package/dist/devices/eglo.d.ts +3 -0
  287. package/dist/devices/eglo.d.ts.map +1 -0
  288. package/dist/devices/eglo.js +130 -0
  289. package/dist/devices/eglo.js.map +1 -0
  290. package/dist/devices/elko.d.ts +3 -0
  291. package/dist/devices/elko.d.ts.map +1 -0
  292. package/dist/devices/elko.js +236 -0
  293. package/dist/devices/elko.js.map +1 -0
  294. package/dist/devices/enbrighten.d.ts +3 -0
  295. package/dist/devices/enbrighten.d.ts.map +1 -0
  296. package/dist/devices/enbrighten.js +156 -0
  297. package/dist/devices/enocean.d.ts +3 -0
  298. package/dist/devices/enocean.d.ts.map +1 -0
  299. package/dist/devices/enocean.js +149 -0
  300. package/dist/devices/enocean.js.map +1 -0
  301. package/dist/devices/envilar.d.ts +3 -0
  302. package/dist/devices/envilar.d.ts.map +1 -0
  303. package/dist/devices/envilar.js +96 -0
  304. package/dist/devices/envilar.js.map +1 -0
  305. package/dist/devices/essentialb.d.ts +3 -0
  306. package/dist/devices/essentialb.d.ts.map +1 -0
  307. package/dist/devices/essentialb.js +133 -0
  308. package/dist/devices/essentialb.js.map +1 -0
  309. package/dist/devices/essentials.d.ts +3 -0
  310. package/dist/devices/essentials.d.ts.map +1 -0
  311. package/dist/devices/essentials.js +150 -0
  312. package/dist/devices/eucontrols.d.ts +3 -0
  313. package/dist/devices/eucontrols.d.ts.map +1 -0
  314. package/dist/devices/eucontrols.js +47 -0
  315. package/dist/devices/eurotronic.d.ts +3 -0
  316. package/dist/devices/eurotronic.d.ts.map +1 -0
  317. package/dist/devices/eurotronic.js +202 -0
  318. package/dist/devices/eurotronic.js.map +1 -0
  319. package/dist/devices/evanell.d.ts +3 -0
  320. package/dist/devices/evanell.d.ts.map +1 -0
  321. package/dist/devices/evanell.js +71 -0
  322. package/dist/devices/evn.d.ts +3 -0
  323. package/dist/devices/evn.d.ts.map +1 -0
  324. package/dist/devices/evn.js +90 -0
  325. package/dist/devices/evn.js.map +1 -0
  326. package/dist/devices/evology.d.ts +3 -0
  327. package/dist/devices/evology.d.ts.map +1 -0
  328. package/dist/devices/evology.js +60 -0
  329. package/dist/devices/evology.js.map +1 -0
  330. package/dist/devices/evvr.d.ts +3 -0
  331. package/dist/devices/evvr.d.ts.map +1 -0
  332. package/dist/devices/evvr.js +47 -0
  333. package/dist/devices/ewelink.d.ts +3 -0
  334. package/dist/devices/ewelink.d.ts.map +1 -0
  335. package/dist/devices/ewelink.js +349 -0
  336. package/dist/devices/ewelink.js.map +1 -0
  337. package/dist/devices/ezex.d.ts +3 -0
  338. package/dist/devices/ezex.d.ts.map +1 -0
  339. package/dist/devices/ezex.js +47 -0
  340. package/dist/devices/fantem.d.ts +3 -0
  341. package/dist/devices/fantem.d.ts.map +1 -0
  342. package/dist/devices/fantem.js +113 -0
  343. package/dist/devices/fantem.js.map +1 -0
  344. package/dist/devices/feibit.d.ts +3 -0
  345. package/dist/devices/feibit.d.ts.map +1 -0
  346. package/dist/devices/feibit.js +340 -0
  347. package/dist/devices/feibit.js.map +1 -0
  348. package/dist/devices/fireangel.d.ts +3 -0
  349. package/dist/devices/fireangel.d.ts.map +1 -0
  350. package/dist/devices/fireangel.js +51 -0
  351. package/dist/devices/fireangel.js.map +1 -0
  352. package/dist/devices/frankever.d.ts +3 -0
  353. package/dist/devices/frankever.d.ts.map +1 -0
  354. package/dist/devices/frankever.js +67 -0
  355. package/dist/devices/frient.d.ts +3 -0
  356. package/dist/devices/frient.d.ts.map +1 -0
  357. package/dist/devices/frient.js +74 -0
  358. package/dist/devices/futurehome.d.ts +3 -0
  359. package/dist/devices/futurehome.d.ts.map +1 -0
  360. package/dist/devices/futurehome.js +123 -0
  361. package/dist/devices/ge.d.ts +3 -0
  362. package/dist/devices/ge.d.ts.map +1 -0
  363. package/dist/devices/ge.js +130 -0
  364. package/dist/devices/ge.js.map +1 -0
  365. package/dist/devices/gewiss.d.ts +3 -0
  366. package/dist/devices/gewiss.d.ts.map +1 -0
  367. package/dist/devices/gewiss.js +82 -0
  368. package/dist/devices/gewiss.js.map +1 -0
  369. package/dist/devices/gidealed.d.ts +3 -0
  370. package/dist/devices/gidealed.d.ts.map +1 -0
  371. package/dist/devices/gidealed.js +47 -0
  372. package/dist/devices/giderwel.d.ts +3 -0
  373. package/dist/devices/giderwel.d.ts.map +1 -0
  374. package/dist/devices/giderwel.js +47 -0
  375. package/dist/devices/giex.d.ts +3 -0
  376. package/dist/devices/giex.d.ts.map +1 -0
  377. package/dist/devices/giex.js +114 -0
  378. package/dist/devices/girier.d.ts +3 -0
  379. package/dist/devices/girier.d.ts.map +1 -0
  380. package/dist/devices/girier.js +51 -0
  381. package/dist/devices/gledopto.d.ts +3 -0
  382. package/dist/devices/gledopto.d.ts.map +1 -0
  383. package/dist/devices/gledopto.js +1053 -0
  384. package/dist/devices/gledopto.js.map +1 -0
  385. package/dist/devices/gmmts.d.ts +3 -0
  386. package/dist/devices/gmmts.d.ts.map +1 -0
  387. package/dist/devices/gmmts.js +2282 -0
  388. package/dist/devices/gmmts.js.map +1 -0
  389. package/dist/devices/gmy.d.ts +3 -0
  390. package/dist/devices/gmy.d.ts.map +1 -0
  391. package/dist/devices/gmy.js +47 -0
  392. package/dist/devices/gs.d.ts +3 -0
  393. package/dist/devices/gs.d.ts.map +1 -0
  394. package/dist/devices/gs.js +121 -0
  395. package/dist/devices/gumax.d.ts +3 -0
  396. package/dist/devices/gumax.d.ts.map +1 -0
  397. package/dist/devices/gumax.js +47 -0
  398. package/dist/devices/halemeier.d.ts +3 -0
  399. package/dist/devices/halemeier.d.ts.map +1 -0
  400. package/dist/devices/halemeier.js +125 -0
  401. package/dist/devices/halemeier.js.map +1 -0
  402. package/dist/devices/hampton_bay.d.ts +3 -0
  403. package/dist/devices/hampton_bay.d.ts.map +1 -0
  404. package/dist/devices/hampton_bay.js +68 -0
  405. package/dist/devices/hampton_bay.js.map +1 -0
  406. package/dist/devices/heatit.d.ts +3 -0
  407. package/dist/devices/heatit.d.ts.map +1 -0
  408. package/dist/devices/heatit.js +47 -0
  409. package/dist/devices/heiman.d.ts +3 -0
  410. package/dist/devices/heiman.d.ts.map +1 -0
  411. package/dist/devices/heiman.js +813 -0
  412. package/dist/devices/heiman.js.map +1 -0
  413. package/dist/devices/heimgard_technologies.d.ts +3 -0
  414. package/dist/devices/heimgard_technologies.d.ts.map +1 -0
  415. package/dist/devices/heimgard_technologies.js +189 -0
  416. package/dist/devices/heimgard_technologies.js.map +1 -0
  417. package/dist/devices/hej.d.ts +3 -0
  418. package/dist/devices/hej.d.ts.map +1 -0
  419. package/dist/devices/hej.js +105 -0
  420. package/dist/devices/hfh.d.ts +3 -0
  421. package/dist/devices/hfh.d.ts.map +1 -0
  422. package/dist/devices/hfh.js +47 -0
  423. package/dist/devices/hilux.d.ts +3 -0
  424. package/dist/devices/hilux.d.ts.map +1 -0
  425. package/dist/devices/hilux.js +54 -0
  426. package/dist/devices/hive.d.ts +3 -0
  427. package/dist/devices/hive.d.ts.map +1 -0
  428. package/dist/devices/hive.js +762 -0
  429. package/dist/devices/hive.js.map +1 -0
  430. package/dist/devices/hommyn.d.ts +3 -0
  431. package/dist/devices/hommyn.d.ts.map +1 -0
  432. package/dist/devices/hommyn.js +60 -0
  433. package/dist/devices/hommyn.js.map +1 -0
  434. package/dist/devices/honyar.d.ts +3 -0
  435. package/dist/devices/honyar.d.ts.map +1 -0
  436. package/dist/devices/honyar.js +167 -0
  437. package/dist/devices/honyar.js.map +1 -0
  438. package/dist/devices/hornbach.d.ts +3 -0
  439. package/dist/devices/hornbach.d.ts.map +1 -0
  440. package/dist/devices/hornbach.js +138 -0
  441. package/dist/devices/hzc_electric.d.ts +3 -0
  442. package/dist/devices/hzc_electric.d.ts.map +1 -0
  443. package/dist/devices/hzc_electric.js +102 -0
  444. package/dist/devices/hzc_electric.js.map +1 -0
  445. package/dist/devices/icasa.d.ts +3 -0
  446. package/dist/devices/icasa.d.ts.map +1 -0
  447. package/dist/devices/icasa.js +163 -0
  448. package/dist/devices/icasa.js.map +1 -0
  449. package/dist/devices/idinio.d.ts +3 -0
  450. package/dist/devices/idinio.d.ts.map +1 -0
  451. package/dist/devices/idinio.js +47 -0
  452. package/dist/devices/ihorn.d.ts +3 -0
  453. package/dist/devices/ihorn.d.ts.map +1 -0
  454. package/dist/devices/ihorn.js +105 -0
  455. package/dist/devices/ihorn.js.map +1 -0
  456. package/dist/devices/ikea.d.ts +3 -0
  457. package/dist/devices/ikea.d.ts.map +1 -0
  458. package/dist/devices/ikea.js +980 -0
  459. package/dist/devices/ilightsin.d.ts +3 -0
  460. package/dist/devices/ilightsin.d.ts.map +1 -0
  461. package/dist/devices/ilightsin.js +47 -0
  462. package/dist/devices/iluminize.d.ts +3 -0
  463. package/dist/devices/iluminize.d.ts.map +1 -0
  464. package/dist/devices/iluminize.js +386 -0
  465. package/dist/devices/iluminize.js.map +1 -0
  466. package/dist/devices/ilux.d.ts +3 -0
  467. package/dist/devices/ilux.d.ts.map +1 -0
  468. package/dist/devices/ilux.js +47 -0
  469. package/dist/devices/imhotepcreation.d.ts +3 -0
  470. package/dist/devices/imhotepcreation.d.ts.map +1 -0
  471. package/dist/devices/imhotepcreation.js +239 -0
  472. package/dist/devices/imhotepcreation.js.map +1 -0
  473. package/dist/devices/immax.d.ts +3 -0
  474. package/dist/devices/immax.d.ts.map +1 -0
  475. package/dist/devices/immax.js +300 -0
  476. package/dist/devices/immax.js.map +1 -0
  477. package/dist/devices/imou.d.ts +3 -0
  478. package/dist/devices/imou.d.ts.map +1 -0
  479. package/dist/devices/imou.js +60 -0
  480. package/dist/devices/index.js +649 -0
  481. package/dist/devices/index.js.map +1 -0
  482. package/dist/devices/innr.d.ts +3 -0
  483. package/dist/devices/innr.d.ts.map +1 -0
  484. package/dist/devices/innr.js +865 -0
  485. package/dist/devices/innr.js.map +1 -0
  486. package/dist/devices/inovelli.d.ts +3 -0
  487. package/dist/devices/inovelli.d.ts.map +1 -0
  488. package/dist/devices/inovelli.js +1999 -0
  489. package/dist/devices/inovelli.js.map +1 -0
  490. package/dist/devices/insta.d.ts +3 -0
  491. package/dist/devices/insta.d.ts.map +1 -0
  492. package/dist/devices/insta.js +182 -0
  493. package/dist/devices/insta.js.map +1 -0
  494. package/dist/devices/iolloi.d.ts +3 -0
  495. package/dist/devices/iolloi.d.ts.map +1 -0
  496. package/dist/devices/iolloi.js +48 -0
  497. package/dist/devices/iotperfect.d.ts +3 -0
  498. package/dist/devices/iotperfect.d.ts.map +1 -0
  499. package/dist/devices/iotperfect.js +54 -0
  500. package/dist/devices/iotperfect.js.map +1 -0
  501. package/dist/devices/iris.d.ts +3 -0
  502. package/dist/devices/iris.d.ts.map +1 -0
  503. package/dist/devices/iris.js +207 -0
  504. package/dist/devices/iris.js.map +1 -0
  505. package/dist/devices/istar.d.ts +3 -0
  506. package/dist/devices/istar.d.ts.map +1 -0
  507. package/dist/devices/istar.js +54 -0
  508. package/dist/devices/jasco.d.ts +3 -0
  509. package/dist/devices/jasco.d.ts.map +1 -0
  510. package/dist/devices/jasco.js +63 -0
  511. package/dist/devices/jasco.js.map +1 -0
  512. package/dist/devices/javis.d.ts +3 -0
  513. package/dist/devices/javis.d.ts.map +1 -0
  514. package/dist/devices/javis.js +77 -0
  515. package/dist/devices/javis.js.map +1 -0
  516. package/dist/devices/jethome.d.ts +3 -0
  517. package/dist/devices/jethome.d.ts.map +1 -0
  518. package/dist/devices/jethome.js +120 -0
  519. package/dist/devices/jethome.js.map +1 -0
  520. package/dist/devices/jiawen.d.ts +3 -0
  521. package/dist/devices/jiawen.d.ts.map +1 -0
  522. package/dist/devices/jiawen.js +54 -0
  523. package/dist/devices/jumitech.d.ts +3 -0
  524. package/dist/devices/jumitech.d.ts.map +1 -0
  525. package/dist/devices/jumitech.js +47 -0
  526. package/dist/devices/jxuan.d.ts +3 -0
  527. package/dist/devices/jxuan.d.ts.map +1 -0
  528. package/dist/devices/jxuan.js +85 -0
  529. package/dist/devices/jxuan.js.map +1 -0
  530. package/dist/devices/kami.d.ts +3 -0
  531. package/dist/devices/kami.d.ts.map +1 -0
  532. package/dist/devices/kami.js +51 -0
  533. package/dist/devices/kami.js.map +1 -0
  534. package/dist/devices/keen_home.d.ts +3 -0
  535. package/dist/devices/keen_home.d.ts.map +1 -0
  536. package/dist/devices/keen_home.js +156 -0
  537. package/dist/devices/keen_home.js.map +1 -0
  538. package/dist/devices/klikaanklikuit.d.ts +3 -0
  539. package/dist/devices/klikaanklikuit.d.ts.map +1 -0
  540. package/dist/devices/klikaanklikuit.js +54 -0
  541. package/dist/devices/kmpcil.d.ts +3 -0
  542. package/dist/devices/kmpcil.d.ts.map +1 -0
  543. package/dist/devices/kmpcil.js +212 -0
  544. package/dist/devices/kmpcil.js.map +1 -0
  545. package/dist/devices/konke.d.ts +3 -0
  546. package/dist/devices/konke.d.ts.map +1 -0
  547. package/dist/devices/konke.js +207 -0
  548. package/dist/devices/konke.js.map +1 -0
  549. package/dist/devices/ksentry.d.ts +3 -0
  550. package/dist/devices/ksentry.d.ts.map +1 -0
  551. package/dist/devices/ksentry.js +47 -0
  552. package/dist/devices/kurvia.d.ts +3 -0
  553. package/dist/devices/kurvia.d.ts.map +1 -0
  554. package/dist/devices/kurvia.js +49 -0
  555. package/dist/devices/kurvia.js.map +1 -0
  556. package/dist/devices/kwikset.d.ts +3 -0
  557. package/dist/devices/kwikset.d.ts.map +1 -0
  558. package/dist/devices/kwikset.js +153 -0
  559. package/dist/devices/kwikset.js.map +1 -0
  560. package/dist/devices/lanesto.d.ts +3 -0
  561. package/dist/devices/lanesto.d.ts.map +1 -0
  562. package/dist/devices/lanesto.js +47 -0
  563. package/dist/devices/lds.d.ts +3 -0
  564. package/dist/devices/lds.d.ts.map +1 -0
  565. package/dist/devices/lds.js +47 -0
  566. package/dist/devices/led_trading.d.ts +3 -0
  567. package/dist/devices/led_trading.d.ts.map +1 -0
  568. package/dist/devices/led_trading.js +108 -0
  569. package/dist/devices/led_trading.js.map +1 -0
  570. package/dist/devices/ledvance.d.ts +3 -0
  571. package/dist/devices/ledvance.d.ts.map +1 -0
  572. package/dist/devices/ledvance.js +370 -0
  573. package/dist/devices/leedarson.d.ts +3 -0
  574. package/dist/devices/leedarson.d.ts.map +1 -0
  575. package/dist/devices/leedarson.js +180 -0
  576. package/dist/devices/leedarson.js.map +1 -0
  577. package/dist/devices/legrand.d.ts +3 -0
  578. package/dist/devices/legrand.d.ts.map +1 -0
  579. package/dist/devices/legrand.js +734 -0
  580. package/dist/devices/legrand.js.map +1 -0
  581. package/dist/devices/lellki.d.ts +3 -0
  582. package/dist/devices/lellki.d.ts.map +1 -0
  583. package/dist/devices/lellki.js +161 -0
  584. package/dist/devices/lellki.js.map +1 -0
  585. package/dist/devices/letsled.d.ts +3 -0
  586. package/dist/devices/letsled.d.ts.map +1 -0
  587. package/dist/devices/letsled.js +47 -0
  588. package/dist/devices/letv.d.ts +3 -0
  589. package/dist/devices/letv.d.ts.map +1 -0
  590. package/dist/devices/letv.js +86 -0
  591. package/dist/devices/letv.js.map +1 -0
  592. package/dist/devices/leviton.d.ts +3 -0
  593. package/dist/devices/leviton.d.ts.map +1 -0
  594. package/dist/devices/leviton.js +164 -0
  595. package/dist/devices/leviton.js.map +1 -0
  596. package/dist/devices/lg.d.ts +3 -0
  597. package/dist/devices/lg.d.ts.map +1 -0
  598. package/dist/devices/lg.js +61 -0
  599. package/dist/devices/lidl.d.ts +3 -0
  600. package/dist/devices/lidl.d.ts.map +1 -0
  601. package/dist/devices/lidl.js +670 -0
  602. package/dist/devices/lidl.js.map +1 -0
  603. package/dist/devices/lifecontrol.d.ts +3 -0
  604. package/dist/devices/lifecontrol.d.ts.map +1 -0
  605. package/dist/devices/lifecontrol.js +150 -0
  606. package/dist/devices/lifecontrol.js.map +1 -0
  607. package/dist/devices/lightsolutions.d.ts +3 -0
  608. package/dist/devices/lightsolutions.d.ts.map +1 -0
  609. package/dist/devices/lightsolutions.js +68 -0
  610. package/dist/devices/linkind.d.ts +3 -0
  611. package/dist/devices/linkind.d.ts.map +1 -0
  612. package/dist/devices/linkind.js +271 -0
  613. package/dist/devices/linkind.js.map +1 -0
  614. package/dist/devices/linptech.d.ts +3 -0
  615. package/dist/devices/linptech.d.ts.map +1 -0
  616. package/dist/devices/linptech.js +155 -0
  617. package/dist/devices/linptech.js.map +1 -0
  618. package/dist/devices/livingwise.d.ts +3 -0
  619. package/dist/devices/livingwise.d.ts.map +1 -0
  620. package/dist/devices/livingwise.js +115 -0
  621. package/dist/devices/livingwise.js.map +1 -0
  622. package/dist/devices/livolo.d.ts +3 -0
  623. package/dist/devices/livolo.d.ts.map +1 -0
  624. package/dist/devices/livolo.js +418 -0
  625. package/dist/devices/livolo.js.map +1 -0
  626. package/dist/devices/lixee.d.ts +3 -0
  627. package/dist/devices/lixee.d.ts.map +1 -0
  628. package/dist/devices/lixee.js +1919 -0
  629. package/dist/devices/lixee.js.map +1 -0
  630. package/dist/devices/lonsonho.d.ts +3 -0
  631. package/dist/devices/lonsonho.d.ts.map +1 -0
  632. package/dist/devices/lonsonho.js +287 -0
  633. package/dist/devices/lonsonho.js.map +1 -0
  634. package/dist/devices/ls.d.ts +3 -0
  635. package/dist/devices/ls.d.ts.map +1 -0
  636. package/dist/devices/ls.js +66 -0
  637. package/dist/devices/lubeez.d.ts +3 -0
  638. package/dist/devices/lubeez.d.ts.map +1 -0
  639. package/dist/devices/lubeez.js +47 -0
  640. package/dist/devices/lumi.d.ts +3 -0
  641. package/dist/devices/lumi.d.ts.map +1 -0
  642. package/dist/devices/lumi.js +4430 -0
  643. package/dist/devices/lumi.js.map +1 -0
  644. package/dist/devices/lupus.d.ts +3 -0
  645. package/dist/devices/lupus.d.ts.map +1 -0
  646. package/dist/devices/lupus.js +94 -0
  647. package/dist/devices/lupus.js.map +1 -0
  648. package/dist/devices/lutron.d.ts +3 -0
  649. package/dist/devices/lutron.d.ts.map +1 -0
  650. package/dist/devices/lutron.js +68 -0
  651. package/dist/devices/lutron.js.map +1 -0
  652. package/dist/devices/lux.d.ts +3 -0
  653. package/dist/devices/lux.d.ts.map +1 -0
  654. package/dist/devices/lux.js +87 -0
  655. package/dist/devices/lux.js.map +1 -0
  656. package/dist/devices/lytko.d.ts +3 -0
  657. package/dist/devices/lytko.d.ts.map +1 -0
  658. package/dist/devices/lytko.js +784 -0
  659. package/dist/devices/lytko.js.map +1 -0
  660. package/dist/devices/m_elec.d.ts +3 -0
  661. package/dist/devices/m_elec.d.ts.map +1 -0
  662. package/dist/devices/m_elec.js +68 -0
  663. package/dist/devices/makegood.d.ts +3 -0
  664. package/dist/devices/makegood.d.ts.map +1 -0
  665. package/dist/devices/makegood.js +65 -0
  666. package/dist/devices/matcall_bv.d.ts +3 -0
  667. package/dist/devices/matcall_bv.d.ts.map +1 -0
  668. package/dist/devices/matcall_bv.js +54 -0
  669. package/dist/devices/mazda.d.ts +3 -0
  670. package/dist/devices/mazda.d.ts.map +1 -0
  671. package/dist/devices/mazda.js +163 -0
  672. package/dist/devices/mazda.js.map +1 -0
  673. package/dist/devices/meazon.d.ts +3 -0
  674. package/dist/devices/meazon.d.ts.map +1 -0
  675. package/dist/devices/meazon.js +95 -0
  676. package/dist/devices/meazon.js.map +1 -0
  677. package/dist/devices/mercator.d.ts +3 -0
  678. package/dist/devices/mercator.d.ts.map +1 -0
  679. package/dist/devices/mercator.js +249 -0
  680. package/dist/devices/mercator.js.map +1 -0
  681. package/dist/devices/miboxer.d.ts +3 -0
  682. package/dist/devices/miboxer.d.ts.map +1 -0
  683. package/dist/devices/miboxer.js +89 -0
  684. package/dist/devices/miboxer.js.map +1 -0
  685. package/dist/devices/micromatic.d.ts +3 -0
  686. package/dist/devices/micromatic.d.ts.map +1 -0
  687. package/dist/devices/micromatic.js +47 -0
  688. package/dist/devices/modular.d.ts +3 -0
  689. package/dist/devices/modular.d.ts.map +1 -0
  690. package/dist/devices/modular.js +47 -0
  691. package/dist/devices/moes.d.ts +3 -0
  692. package/dist/devices/moes.d.ts.map +1 -0
  693. package/dist/devices/moes.js +719 -0
  694. package/dist/devices/moes.js.map +1 -0
  695. package/dist/devices/muller_licht.d.ts +3 -0
  696. package/dist/devices/muller_licht.d.ts.map +1 -0
  697. package/dist/devices/muller_licht.js +334 -0
  698. package/dist/devices/muller_licht.js.map +1 -0
  699. package/dist/devices/multiterm.d.ts +3 -0
  700. package/dist/devices/multiterm.d.ts.map +1 -0
  701. package/dist/devices/multiterm.js +119 -0
  702. package/dist/devices/multiterm.js.map +1 -0
  703. package/dist/devices/namron.d.ts +3 -0
  704. package/dist/devices/namron.d.ts.map +1 -0
  705. package/dist/devices/namron.js +1573 -0
  706. package/dist/devices/namron.js.map +1 -0
  707. package/dist/devices/nanoleaf.d.ts +3 -0
  708. package/dist/devices/nanoleaf.d.ts.map +1 -0
  709. package/dist/devices/nanoleaf.js +47 -0
  710. package/dist/devices/nedis.d.ts +3 -0
  711. package/dist/devices/nedis.d.ts.map +1 -0
  712. package/dist/devices/nedis.js +87 -0
  713. package/dist/devices/neo.d.ts +3 -0
  714. package/dist/devices/neo.d.ts.map +1 -0
  715. package/dist/devices/neo.js +558 -0
  716. package/dist/devices/neo.js.map +1 -0
  717. package/dist/devices/net2grid.d.ts +3 -0
  718. package/dist/devices/net2grid.d.ts.map +1 -0
  719. package/dist/devices/net2grid.js +64 -0
  720. package/dist/devices/net2grid.js.map +1 -0
  721. package/dist/devices/netvox.d.ts +3 -0
  722. package/dist/devices/netvox.d.ts.map +1 -0
  723. package/dist/devices/netvox.js +71 -0
  724. package/dist/devices/netvox.js.map +1 -0
  725. package/dist/devices/nexelec.d.ts +3 -0
  726. package/dist/devices/nexelec.d.ts.map +1 -0
  727. package/dist/devices/nexelec.js +47 -0
  728. package/dist/devices/niko.d.ts +3 -0
  729. package/dist/devices/niko.d.ts.map +1 -0
  730. package/dist/devices/niko.js +623 -0
  731. package/dist/devices/niko.js.map +1 -0
  732. package/dist/devices/ninja_blocks.d.ts +3 -0
  733. package/dist/devices/ninja_blocks.d.ts.map +1 -0
  734. package/dist/devices/ninja_blocks.js +60 -0
  735. package/dist/devices/ninja_blocks.js.map +1 -0
  736. package/dist/devices/niviss.d.ts +3 -0
  737. package/dist/devices/niviss.d.ts.map +1 -0
  738. package/dist/devices/niviss.js +47 -0
  739. package/dist/devices/nodon.d.ts +3 -0
  740. package/dist/devices/nodon.d.ts.map +1 -0
  741. package/dist/devices/nodon.js +383 -0
  742. package/dist/devices/nodon.js.map +1 -0
  743. package/dist/devices/nordtronic.d.ts +3 -0
  744. package/dist/devices/nordtronic.d.ts.map +1 -0
  745. package/dist/devices/nordtronic.js +73 -0
  746. package/dist/devices/nous.d.ts +3 -0
  747. package/dist/devices/nous.d.ts.map +1 -0
  748. package/dist/devices/nous.js +165 -0
  749. package/dist/devices/nous.js.map +1 -0
  750. package/dist/devices/novo.d.ts +3 -0
  751. package/dist/devices/novo.d.ts.map +1 -0
  752. package/dist/devices/novo.js +54 -0
  753. package/dist/devices/novo.js.map +1 -0
  754. package/dist/devices/nue_3a.d.ts +3 -0
  755. package/dist/devices/nue_3a.d.ts.map +1 -0
  756. package/dist/devices/nue_3a.js +357 -0
  757. package/dist/devices/nue_3a.js.map +1 -0
  758. package/dist/devices/nyce.d.ts +3 -0
  759. package/dist/devices/nyce.d.ts.map +1 -0
  760. package/dist/devices/nyce.js +130 -0
  761. package/dist/devices/nyce.js.map +1 -0
  762. package/dist/devices/onenuo.d.ts +3 -0
  763. package/dist/devices/onenuo.d.ts.map +1 -0
  764. package/dist/devices/onenuo.js +85 -0
  765. package/dist/devices/onesti.d.ts +3 -0
  766. package/dist/devices/onesti.d.ts.map +1 -0
  767. package/dist/devices/onesti.js +204 -0
  768. package/dist/devices/onesti.js.map +1 -0
  769. package/dist/devices/openlumi.d.ts +3 -0
  770. package/dist/devices/openlumi.d.ts.map +1 -0
  771. package/dist/devices/openlumi.js +58 -0
  772. package/dist/devices/openlumi.js.map +1 -0
  773. package/dist/devices/orvibo.d.ts +12 -0
  774. package/dist/devices/orvibo.d.ts.map +1 -0
  775. package/dist/devices/orvibo.js +594 -0
  776. package/dist/devices/orvibo.js.map +1 -0
  777. package/dist/devices/osram.d.ts +3 -0
  778. package/dist/devices/osram.d.ts.map +1 -0
  779. package/dist/devices/osram.js +513 -0
  780. package/dist/devices/osram.js.map +1 -0
  781. package/dist/devices/oujiabao.d.ts +3 -0
  782. package/dist/devices/oujiabao.d.ts.map +1 -0
  783. package/dist/devices/oujiabao.js +51 -0
  784. package/dist/devices/oujiabao.js.map +1 -0
  785. package/dist/devices/owon.d.ts +3 -0
  786. package/dist/devices/owon.d.ts.map +1 -0
  787. package/dist/devices/owon.js +473 -0
  788. package/dist/devices/owon.js.map +1 -0
  789. package/dist/devices/ozsmartthings.d.ts +3 -0
  790. package/dist/devices/ozsmartthings.d.ts.map +1 -0
  791. package/dist/devices/ozsmartthings.js +47 -0
  792. package/dist/devices/paul_neuhaus.d.ts +3 -0
  793. package/dist/devices/paul_neuhaus.d.ts.map +1 -0
  794. package/dist/devices/paul_neuhaus.js +190 -0
  795. package/dist/devices/paul_neuhaus.js.map +1 -0
  796. package/dist/devices/paulmann.d.ts +3 -0
  797. package/dist/devices/paulmann.d.ts.map +1 -0
  798. package/dist/devices/paulmann.js +334 -0
  799. package/dist/devices/paulmann.js.map +1 -0
  800. package/dist/devices/peq.d.ts +3 -0
  801. package/dist/devices/peq.d.ts.map +1 -0
  802. package/dist/devices/peq.js +60 -0
  803. package/dist/devices/peq.js.map +1 -0
  804. package/dist/devices/perenio.d.ts +3 -0
  805. package/dist/devices/perenio.d.ts.map +1 -0
  806. package/dist/devices/perenio.js +462 -0
  807. package/dist/devices/perenio.js.map +1 -0
  808. package/dist/devices/philio.d.ts +3 -0
  809. package/dist/devices/philio.d.ts.map +1 -0
  810. package/dist/devices/philio.js +48 -0
  811. package/dist/devices/philips.d.ts +3 -0
  812. package/dist/devices/philips.d.ts.map +1 -0
  813. package/dist/devices/philips.js +4061 -0
  814. package/dist/devices/philips.js.map +1 -0
  815. package/dist/devices/plaid.d.ts +3 -0
  816. package/dist/devices/plaid.d.ts.map +1 -0
  817. package/dist/devices/plaid.js +61 -0
  818. package/dist/devices/plaid.js.map +1 -0
  819. package/dist/devices/plugwise.d.ts +3 -0
  820. package/dist/devices/plugwise.d.ts.map +1 -0
  821. package/dist/devices/plugwise.js +206 -0
  822. package/dist/devices/plugwise.js.map +1 -0
  823. package/dist/devices/profalux.d.ts +3 -0
  824. package/dist/devices/profalux.d.ts.map +1 -0
  825. package/dist/devices/profalux.js +204 -0
  826. package/dist/devices/profalux.js.map +1 -0
  827. package/dist/devices/prolight.d.ts +3 -0
  828. package/dist/devices/prolight.d.ts.map +1 -0
  829. package/dist/devices/prolight.js +111 -0
  830. package/dist/devices/prolight.js.map +1 -0
  831. package/dist/devices/purmo.d.ts +3 -0
  832. package/dist/devices/purmo.d.ts.map +1 -0
  833. package/dist/devices/purmo.js +91 -0
  834. package/dist/devices/purmo.js.map +1 -0
  835. package/dist/devices/pushok.d.ts +3 -0
  836. package/dist/devices/pushok.d.ts.map +1 -0
  837. package/dist/devices/pushok.js +375 -0
  838. package/dist/devices/pushok.js.map +1 -0
  839. package/dist/devices/qa.d.ts +3 -0
  840. package/dist/devices/qa.d.ts.map +1 -0
  841. package/dist/devices/qa.js +291 -0
  842. package/dist/devices/qa.js.map +1 -0
  843. package/dist/devices/qmotion.d.ts +3 -0
  844. package/dist/devices/qmotion.d.ts.map +1 -0
  845. package/dist/devices/qmotion.js +69 -0
  846. package/dist/devices/qmotion.js.map +1 -0
  847. package/dist/devices/qoto.d.ts +3 -0
  848. package/dist/devices/qoto.d.ts.map +1 -0
  849. package/dist/devices/qoto.js +83 -0
  850. package/dist/devices/qoto.js.map +1 -0
  851. package/dist/devices/quotra.d.ts +3 -0
  852. package/dist/devices/quotra.d.ts.map +1 -0
  853. package/dist/devices/quotra.js +54 -0
  854. package/dist/devices/rademacher.d.ts +3 -0
  855. package/dist/devices/rademacher.d.ts.map +1 -0
  856. package/dist/devices/rademacher.js +61 -0
  857. package/dist/devices/radium.d.ts +3 -0
  858. package/dist/devices/radium.d.ts.map +1 -0
  859. package/dist/devices/radium.js +47 -0
  860. package/dist/devices/raex.d.ts +3 -0
  861. package/dist/devices/raex.d.ts.map +1 -0
  862. package/dist/devices/raex.js +47 -0
  863. package/dist/devices/rgb_genie.d.ts +3 -0
  864. package/dist/devices/rgb_genie.d.ts.map +1 -0
  865. package/dist/devices/rgb_genie.js +275 -0
  866. package/dist/devices/rgb_genie.js.map +1 -0
  867. package/dist/devices/robb.d.ts +3 -0
  868. package/dist/devices/robb.d.ts.map +1 -0
  869. package/dist/devices/robb.js +468 -0
  870. package/dist/devices/robb.js.map +1 -0
  871. package/dist/devices/roome.d.ts +3 -0
  872. package/dist/devices/roome.d.ts.map +1 -0
  873. package/dist/devices/roome.js +51 -0
  874. package/dist/devices/roome.js.map +1 -0
  875. package/dist/devices/rtx.d.ts +3 -0
  876. package/dist/devices/rtx.d.ts.map +1 -0
  877. package/dist/devices/rtx.js +143 -0
  878. package/dist/devices/rtx.js.map +1 -0
  879. package/dist/devices/salus_controls.d.ts +3 -0
  880. package/dist/devices/salus_controls.d.ts.map +1 -0
  881. package/dist/devices/salus_controls.js +221 -0
  882. package/dist/devices/salus_controls.js.map +1 -0
  883. package/dist/devices/samotech.d.ts +3 -0
  884. package/dist/devices/samotech.d.ts.map +1 -0
  885. package/dist/devices/samotech.js +107 -0
  886. package/dist/devices/saswell.d.ts +3 -0
  887. package/dist/devices/saswell.d.ts.map +1 -0
  888. package/dist/devices/saswell.js +123 -0
  889. package/dist/devices/saswell.js.map +1 -0
  890. package/dist/devices/sber.d.ts +3 -0
  891. package/dist/devices/sber.d.ts.map +1 -0
  892. package/dist/devices/sber.js +98 -0
  893. package/dist/devices/scanproducts.d.ts +3 -0
  894. package/dist/devices/scanproducts.d.ts.map +1 -0
  895. package/dist/devices/scanproducts.js +54 -0
  896. package/dist/devices/schlage.d.ts +3 -0
  897. package/dist/devices/schlage.d.ts.map +1 -0
  898. package/dist/devices/schlage.js +60 -0
  899. package/dist/devices/schlage.js.map +1 -0
  900. package/dist/devices/schneider_electric.d.ts +3 -0
  901. package/dist/devices/schneider_electric.d.ts.map +1 -0
  902. package/dist/devices/schneider_electric.js +2184 -0
  903. package/dist/devices/schneider_electric.js.map +1 -0
  904. package/dist/devices/schwaiger.d.ts +3 -0
  905. package/dist/devices/schwaiger.d.ts.map +1 -0
  906. package/dist/devices/schwaiger.js +105 -0
  907. package/dist/devices/schwaiger.js.map +1 -0
  908. package/dist/devices/seastar_intelligence.d.ts +3 -0
  909. package/dist/devices/seastar_intelligence.d.ts.map +1 -0
  910. package/dist/devices/seastar_intelligence.js +52 -0
  911. package/dist/devices/securifi.d.ts +3 -0
  912. package/dist/devices/securifi.d.ts.map +1 -0
  913. package/dist/devices/securifi.js +79 -0
  914. package/dist/devices/securifi.js.map +1 -0
  915. package/dist/devices/sengled.d.ts +6 -0
  916. package/dist/devices/sengled.d.ts.map +1 -0
  917. package/dist/devices/sengled.js +388 -0
  918. package/dist/devices/sengled.js.map +1 -0
  919. package/dist/devices/sercomm.d.ts +3 -0
  920. package/dist/devices/sercomm.d.ts.map +1 -0
  921. package/dist/devices/sercomm.js +186 -0
  922. package/dist/devices/sercomm.js.map +1 -0
  923. package/dist/devices/shade_control.d.ts +3 -0
  924. package/dist/devices/shade_control.d.ts.map +1 -0
  925. package/dist/devices/shade_control.js +61 -0
  926. package/dist/devices/shade_control.js.map +1 -0
  927. package/dist/devices/shenzhen_homa.d.ts +3 -0
  928. package/dist/devices/shenzhen_homa.d.ts.map +1 -0
  929. package/dist/devices/shenzhen_homa.js +143 -0
  930. package/dist/devices/shinasystem.d.ts +3 -0
  931. package/dist/devices/shinasystem.d.ts.map +1 -0
  932. package/dist/devices/shinasystem.js +957 -0
  933. package/dist/devices/shinasystem.js.map +1 -0
  934. package/dist/devices/shyugj.d.ts +3 -0
  935. package/dist/devices/shyugj.d.ts.map +1 -0
  936. package/dist/devices/shyugj.js +53 -0
  937. package/dist/devices/siglis.d.ts +3 -0
  938. package/dist/devices/siglis.d.ts.map +1 -0
  939. package/dist/devices/siglis.js +449 -0
  940. package/dist/devices/siglis.js.map +1 -0
  941. package/dist/devices/sikom.d.ts +3 -0
  942. package/dist/devices/sikom.d.ts.map +1 -0
  943. package/dist/devices/sikom.js +64 -0
  944. package/dist/devices/sikom.js.map +1 -0
  945. package/dist/devices/simon.d.ts +3 -0
  946. package/dist/devices/simon.d.ts.map +1 -0
  947. package/dist/devices/simon.js +14 -0
  948. package/dist/devices/sinope.d.ts +3 -0
  949. package/dist/devices/sinope.d.ts.map +1 -0
  950. package/dist/devices/sinope.js +1751 -0
  951. package/dist/devices/sinope.js.map +1 -0
  952. package/dist/devices/siterwell.d.ts +3 -0
  953. package/dist/devices/siterwell.d.ts.map +1 -0
  954. package/dist/devices/siterwell.js +107 -0
  955. package/dist/devices/siterwell.js.map +1 -0
  956. package/dist/devices/skydance.d.ts +3 -0
  957. package/dist/devices/skydance.d.ts.map +1 -0
  958. package/dist/devices/skydance.js +138 -0
  959. package/dist/devices/slv.d.ts +3 -0
  960. package/dist/devices/slv.d.ts.map +1 -0
  961. package/dist/devices/slv.js +70 -0
  962. package/dist/devices/smart9.d.ts +3 -0
  963. package/dist/devices/smart9.d.ts.map +1 -0
  964. package/dist/devices/smart9.js +63 -0
  965. package/dist/devices/smart9.js.map +1 -0
  966. package/dist/devices/smart_home_pty.d.ts +3 -0
  967. package/dist/devices/smart_home_pty.d.ts.map +1 -0
  968. package/dist/devices/smart_home_pty.js +54 -0
  969. package/dist/devices/smartenit.d.ts +3 -0
  970. package/dist/devices/smartenit.d.ts.map +1 -0
  971. package/dist/devices/smartenit.js +77 -0
  972. package/dist/devices/smartenit.js.map +1 -0
  973. package/dist/devices/smartthings.d.ts +3 -0
  974. package/dist/devices/smartthings.d.ts.map +1 -0
  975. package/dist/devices/smartthings.js +523 -0
  976. package/dist/devices/smartthings.js.map +1 -0
  977. package/dist/devices/smartwings.d.ts +3 -0
  978. package/dist/devices/smartwings.d.ts.map +1 -0
  979. package/dist/devices/smartwings.js +60 -0
  980. package/dist/devices/smartwings.js.map +1 -0
  981. package/dist/devices/smlight.d.ts +3 -0
  982. package/dist/devices/smlight.d.ts.map +1 -0
  983. package/dist/devices/smlight.js +56 -0
  984. package/dist/devices/sohan_electric.d.ts +3 -0
  985. package/dist/devices/sohan_electric.d.ts.map +1 -0
  986. package/dist/devices/sohan_electric.js +50 -0
  987. package/dist/devices/sohan_electric.js.map +1 -0
  988. package/dist/devices/solaredge.d.ts +3 -0
  989. package/dist/devices/solaredge.d.ts.map +1 -0
  990. package/dist/devices/solaredge.js +47 -0
  991. package/dist/devices/soma.d.ts +3 -0
  992. package/dist/devices/soma.d.ts.map +1 -0
  993. package/dist/devices/soma.js +47 -0
  994. package/dist/devices/somfy.d.ts +3 -0
  995. package/dist/devices/somfy.d.ts.map +1 -0
  996. package/dist/devices/somfy.js +98 -0
  997. package/dist/devices/somfy.js.map +1 -0
  998. package/dist/devices/somgoms.d.ts +3 -0
  999. package/dist/devices/somgoms.d.ts.map +1 -0
  1000. package/dist/devices/somgoms.js +81 -0
  1001. package/dist/devices/somgoms.js.map +1 -0
  1002. package/dist/devices/sonoff.d.ts +3 -0
  1003. package/dist/devices/sonoff.d.ts.map +1 -0
  1004. package/dist/devices/sonoff.js +1609 -0
  1005. package/dist/devices/sonoff.js.map +1 -0
  1006. package/dist/devices/sowilo.d.ts +3 -0
  1007. package/dist/devices/sowilo.d.ts.map +1 -0
  1008. package/dist/devices/sowilo.js +47 -0
  1009. package/dist/devices/spotmau.d.ts +3 -0
  1010. package/dist/devices/spotmau.d.ts.map +1 -0
  1011. package/dist/devices/spotmau.js +74 -0
  1012. package/dist/devices/stelpro.d.ts +3 -0
  1013. package/dist/devices/stelpro.d.ts.map +1 -0
  1014. package/dist/devices/stelpro.js +362 -0
  1015. package/dist/devices/stelpro.js.map +1 -0
  1016. package/dist/devices/sunricher.d.ts +3 -0
  1017. package/dist/devices/sunricher.d.ts.map +1 -0
  1018. package/dist/devices/sunricher.js +2279 -0
  1019. package/dist/devices/sunricher.js.map +1 -0
  1020. package/dist/devices/swann.d.ts +3 -0
  1021. package/dist/devices/swann.d.ts.map +1 -0
  1022. package/dist/devices/swann.js +69 -0
  1023. package/dist/devices/swann.js.map +1 -0
  1024. package/dist/devices/sylvania.d.ts +3 -0
  1025. package/dist/devices/sylvania.d.ts.map +1 -0
  1026. package/dist/devices/sylvania.js +223 -0
  1027. package/dist/devices/sylvania.js.map +1 -0
  1028. package/dist/devices/tapestry.d.ts +3 -0
  1029. package/dist/devices/tapestry.d.ts.map +1 -0
  1030. package/dist/devices/tapestry.js +52 -0
  1031. package/dist/devices/tapestry.js.map +1 -0
  1032. package/dist/devices/tci.d.ts +3 -0
  1033. package/dist/devices/tci.d.ts.map +1 -0
  1034. package/dist/devices/tci.js +61 -0
  1035. package/dist/devices/tech.d.ts +3 -0
  1036. package/dist/devices/tech.d.ts.map +1 -0
  1037. package/dist/devices/tech.js +225 -0
  1038. package/dist/devices/tech.js.map +1 -0
  1039. package/dist/devices/technicolor.d.ts +3 -0
  1040. package/dist/devices/technicolor.d.ts.map +1 -0
  1041. package/dist/devices/technicolor.js +98 -0
  1042. package/dist/devices/technicolor.js.map +1 -0
  1043. package/dist/devices/terncy.d.ts +3 -0
  1044. package/dist/devices/terncy.d.ts.map +1 -0
  1045. package/dist/devices/terncy.js +113 -0
  1046. package/dist/devices/terncy.js.map +1 -0
  1047. package/dist/devices/the_light_group.d.ts +3 -0
  1048. package/dist/devices/the_light_group.d.ts.map +1 -0
  1049. package/dist/devices/the_light_group.js +126 -0
  1050. package/dist/devices/the_light_group.js.map +1 -0
  1051. package/dist/devices/third_reality.d.ts +3 -0
  1052. package/dist/devices/third_reality.d.ts.map +1 -0
  1053. package/dist/devices/third_reality.js +606 -0
  1054. package/dist/devices/third_reality.js.map +1 -0
  1055. package/dist/devices/titan_products.d.ts +3 -0
  1056. package/dist/devices/titan_products.d.ts.map +1 -0
  1057. package/dist/devices/titan_products.js +58 -0
  1058. package/dist/devices/titan_products.js.map +1 -0
  1059. package/dist/devices/tlwglobal.d.ts +3 -0
  1060. package/dist/devices/tlwglobal.d.ts.map +1 -0
  1061. package/dist/devices/tlwglobal.js +64 -0
  1062. package/dist/devices/tplink.d.ts +3 -0
  1063. package/dist/devices/tplink.d.ts.map +1 -0
  1064. package/dist/devices/tplink.js +77 -0
  1065. package/dist/devices/tplink.js.map +1 -0
  1066. package/dist/devices/trust.d.ts +3 -0
  1067. package/dist/devices/trust.d.ts.map +1 -0
  1068. package/dist/devices/trust.js +179 -0
  1069. package/dist/devices/trust.js.map +1 -0
  1070. package/dist/devices/tubeszb.d.ts +3 -0
  1071. package/dist/devices/tubeszb.d.ts.map +1 -0
  1072. package/dist/devices/tubeszb.js +56 -0
  1073. package/dist/devices/tubeszb.js.map +1 -0
  1074. package/dist/devices/tuya.d.ts +3 -0
  1075. package/dist/devices/tuya.d.ts.map +1 -0
  1076. package/dist/devices/tuya.js +16001 -0
  1077. package/dist/devices/tuya.js.map +1 -0
  1078. package/dist/devices/ubisys.d.ts +3 -0
  1079. package/dist/devices/ubisys.d.ts.map +1 -0
  1080. package/dist/devices/ubisys.js +1307 -0
  1081. package/dist/devices/ubisys.js.map +1 -0
  1082. package/dist/devices/uhome.d.ts +3 -0
  1083. package/dist/devices/uhome.d.ts.map +1 -0
  1084. package/dist/devices/uhome.js +60 -0
  1085. package/dist/devices/uhome.js.map +1 -0
  1086. package/dist/devices/universal_electronics_inc.d.ts +3 -0
  1087. package/dist/devices/universal_electronics_inc.d.ts.map +1 -0
  1088. package/dist/devices/universal_electronics_inc.js +182 -0
  1089. package/dist/devices/universal_electronics_inc.js.map +1 -0
  1090. package/dist/devices/vbled.d.ts +3 -0
  1091. package/dist/devices/vbled.d.ts.map +1 -0
  1092. package/dist/devices/vbled.js +47 -0
  1093. package/dist/devices/vesternet.d.ts +3 -0
  1094. package/dist/devices/vesternet.d.ts.map +1 -0
  1095. package/dist/devices/vesternet.js +326 -0
  1096. package/dist/devices/vesternet.js.map +1 -0
  1097. package/dist/devices/viessmann.d.ts +3 -0
  1098. package/dist/devices/viessmann.d.ts.map +1 -0
  1099. package/dist/devices/viessmann.js +120 -0
  1100. package/dist/devices/viessmann.js.map +1 -0
  1101. package/dist/devices/villeroy_boch.d.ts +3 -0
  1102. package/dist/devices/villeroy_boch.d.ts.map +1 -0
  1103. package/dist/devices/villeroy_boch.js +54 -0
  1104. package/dist/devices/vimar.d.ts +3 -0
  1105. package/dist/devices/vimar.d.ts.map +1 -0
  1106. package/dist/devices/vimar.js +133 -0
  1107. package/dist/devices/vimar.js.map +1 -0
  1108. package/dist/devices/visonic.d.ts +3 -0
  1109. package/dist/devices/visonic.d.ts.map +1 -0
  1110. package/dist/devices/visonic.js +134 -0
  1111. package/dist/devices/visonic.js.map +1 -0
  1112. package/dist/devices/vrey.d.ts +3 -0
  1113. package/dist/devices/vrey.d.ts.map +1 -0
  1114. package/dist/devices/vrey.js +48 -0
  1115. package/dist/devices/wally.d.ts +3 -0
  1116. package/dist/devices/wally.d.ts.map +1 -0
  1117. package/dist/devices/wally.js +60 -0
  1118. package/dist/devices/wally.js.map +1 -0
  1119. package/dist/devices/waxman.d.ts +3 -0
  1120. package/dist/devices/waxman.d.ts.map +1 -0
  1121. package/dist/devices/waxman.js +81 -0
  1122. package/dist/devices/waxman.js.map +1 -0
  1123. package/dist/devices/weiser.d.ts +3 -0
  1124. package/dist/devices/weiser.d.ts.map +1 -0
  1125. package/dist/devices/weiser.js +99 -0
  1126. package/dist/devices/weiser.js.map +1 -0
  1127. package/dist/devices/weten.d.ts +3 -0
  1128. package/dist/devices/weten.d.ts.map +1 -0
  1129. package/dist/devices/weten.js +85 -0
  1130. package/dist/devices/weten.js.map +1 -0
  1131. package/dist/devices/wirenboard.d.ts +3 -0
  1132. package/dist/devices/wirenboard.d.ts.map +1 -0
  1133. package/dist/devices/wirenboard.js +663 -0
  1134. package/dist/devices/wirenboard.js.map +1 -0
  1135. package/dist/devices/wisdom.d.ts +3 -0
  1136. package/dist/devices/wisdom.d.ts.map +1 -0
  1137. package/dist/devices/wisdom.js +47 -0
  1138. package/dist/devices/woolley.d.ts +3 -0
  1139. package/dist/devices/woolley.d.ts.map +1 -0
  1140. package/dist/devices/woolley.js +84 -0
  1141. package/dist/devices/woolley.js.map +1 -0
  1142. package/dist/devices/woox.d.ts +3 -0
  1143. package/dist/devices/woox.d.ts.map +1 -0
  1144. package/dist/devices/woox.js +129 -0
  1145. package/dist/devices/woox.js.map +1 -0
  1146. package/dist/devices/wyze.d.ts +3 -0
  1147. package/dist/devices/wyze.d.ts.map +1 -0
  1148. package/dist/devices/wyze.js +59 -0
  1149. package/dist/devices/wyze.js.map +1 -0
  1150. package/dist/devices/xal.d.ts +3 -0
  1151. package/dist/devices/xal.d.ts.map +1 -0
  1152. package/dist/devices/xal.js +61 -0
  1153. package/dist/devices/xinghuoyuan.d.ts +3 -0
  1154. package/dist/devices/xinghuoyuan.d.ts.map +1 -0
  1155. package/dist/devices/xinghuoyuan.js +47 -0
  1156. package/dist/devices/xyzroe.d.ts +3 -0
  1157. package/dist/devices/xyzroe.d.ts.map +1 -0
  1158. package/dist/devices/xyzroe.js +513 -0
  1159. package/dist/devices/xyzroe.js.map +1 -0
  1160. package/dist/devices/yale.d.ts +3 -0
  1161. package/dist/devices/yale.d.ts.map +1 -0
  1162. package/dist/devices/yale.js +499 -0
  1163. package/dist/devices/yale.js.map +1 -0
  1164. package/dist/devices/yandex.d.ts +3 -0
  1165. package/dist/devices/yandex.d.ts.map +1 -0
  1166. package/dist/devices/yandex.js +444 -0
  1167. package/dist/devices/yandex.js.map +1 -0
  1168. package/dist/devices/ynoa.d.ts +3 -0
  1169. package/dist/devices/ynoa.d.ts.map +1 -0
  1170. package/dist/devices/ynoa.js +109 -0
  1171. package/dist/devices/ynoa.js.map +1 -0
  1172. package/dist/devices/yokis.d.ts +3 -0
  1173. package/dist/devices/yokis.d.ts.map +1 -0
  1174. package/dist/devices/yokis.js +2532 -0
  1175. package/dist/devices/yokis.js.map +1 -0
  1176. package/dist/devices/yookee.d.ts +3 -0
  1177. package/dist/devices/yookee.d.ts.map +1 -0
  1178. package/dist/devices/yookee.js +59 -0
  1179. package/dist/devices/yookee.js.map +1 -0
  1180. package/dist/devices/ysrsai.d.ts +3 -0
  1181. package/dist/devices/ysrsai.d.ts.map +1 -0
  1182. package/dist/devices/ysrsai.js +65 -0
  1183. package/dist/devices/zemismart.d.ts +3 -0
  1184. package/dist/devices/zemismart.d.ts.map +1 -0
  1185. package/dist/devices/zemismart.js +388 -0
  1186. package/dist/devices/zemismart.js.map +1 -0
  1187. package/dist/devices/zen.d.ts +3 -0
  1188. package/dist/devices/zen.d.ts.map +1 -0
  1189. package/dist/devices/zen.js +92 -0
  1190. package/dist/devices/zen.js.map +1 -0
  1191. package/dist/devices/zigbeetlc.js +235 -0
  1192. package/dist/devices/zipato.d.ts +3 -0
  1193. package/dist/devices/zipato.d.ts.map +1 -0
  1194. package/dist/devices/zipato.js +47 -0
  1195. package/dist/index.d.ts +20 -0
  1196. package/dist/index.d.ts.map +1 -0
  1197. package/dist/index.js +513 -0
  1198. package/dist/index.js.map +1 -0
  1199. package/dist/indexer.d.ts +5 -0
  1200. package/dist/indexer.d.ts.map +1 -0
  1201. package/dist/indexer.js +135 -0
  1202. package/dist/indexer.js.map +1 -0
  1203. package/dist/lib/color.d.ts +271 -0
  1204. package/dist/lib/color.d.ts.map +1 -0
  1205. package/dist/lib/color.js +754 -0
  1206. package/dist/lib/color.js.map +1 -0
  1207. package/dist/lib/configureKey.d.ts +3 -0
  1208. package/dist/lib/configureKey.d.ts.map +1 -0
  1209. package/dist/lib/configureKey.js +938 -0
  1210. package/dist/lib/configureKey.js.map +1 -0
  1211. package/dist/lib/constants.d.ts +68 -0
  1212. package/dist/lib/constants.d.ts.map +1 -0
  1213. package/dist/lib/constants.js +264 -0
  1214. package/dist/lib/constants.js.map +1 -0
  1215. package/dist/lib/develco.d.ts +15 -0
  1216. package/dist/lib/develco.d.ts.map +1 -0
  1217. package/dist/lib/develco.js +183 -0
  1218. package/dist/lib/develco.js.map +1 -0
  1219. package/dist/lib/ewelink.d.ts +30 -0
  1220. package/dist/lib/ewelink.d.ts.map +1 -0
  1221. package/dist/lib/ewelink.js +716 -0
  1222. package/dist/lib/ewelink.js.map +1 -0
  1223. package/dist/lib/exposes.d.ts +360 -0
  1224. package/dist/lib/exposes.d.ts.map +1 -0
  1225. package/dist/lib/exposes.js +1085 -0
  1226. package/dist/lib/exposes.js.map +1 -0
  1227. package/dist/lib/generateDefinition.d.ts +6 -0
  1228. package/dist/lib/generateDefinition.d.ts.map +1 -0
  1229. package/dist/lib/generateDefinition.js +345 -0
  1230. package/dist/lib/generateDefinition.js.map +1 -0
  1231. package/dist/lib/ikea.d.ts +39 -0
  1232. package/dist/lib/ikea.d.ts.map +1 -0
  1233. package/dist/lib/ikea.js +782 -0
  1234. package/dist/lib/ikea.js.map +1 -0
  1235. package/dist/lib/kelvinToXy.js +1913 -0
  1236. package/dist/lib/kelvinToXy.js.map +1 -0
  1237. package/dist/lib/ledvance.d.ts +20 -0
  1238. package/dist/lib/ledvance.d.ts.map +1 -0
  1239. package/dist/lib/ledvance.js +103 -0
  1240. package/dist/lib/ledvance.js.map +1 -0
  1241. package/dist/lib/legacy.d.ts +5054 -0
  1242. package/dist/lib/legacy.d.ts.map +1 -0
  1243. package/dist/lib/legacy.js +6456 -0
  1244. package/dist/lib/legacy.js.map +1 -0
  1245. package/dist/lib/legrand.d.ts +69 -0
  1246. package/dist/lib/legrand.d.ts.map +1 -0
  1247. package/dist/lib/legrand.js +282 -0
  1248. package/dist/lib/legrand.js.map +1 -0
  1249. package/dist/lib/light.d.ts +8 -0
  1250. package/dist/lib/light.d.ts.map +1 -0
  1251. package/dist/lib/light.js +142 -0
  1252. package/dist/lib/light.js.map +1 -0
  1253. package/dist/lib/logger.d.ts +4 -0
  1254. package/dist/lib/logger.d.ts.map +1 -0
  1255. package/dist/lib/logger.js +14 -0
  1256. package/dist/lib/lumi.d.ts +950 -0
  1257. package/dist/lib/lumi.d.ts.map +1 -0
  1258. package/dist/lib/lumi.js +5017 -0
  1259. package/dist/lib/lumi.js.map +1 -0
  1260. package/dist/lib/modernExtend.d.ts +337 -0
  1261. package/dist/lib/modernExtend.d.ts.map +1 -0
  1262. package/dist/lib/modernExtend.js +2088 -0
  1263. package/dist/lib/modernExtend.js.map +1 -0
  1264. package/dist/lib/namron.d.ts +56 -0
  1265. package/dist/lib/namron.d.ts.map +1 -0
  1266. package/dist/lib/namron.js +434 -0
  1267. package/dist/lib/namron.js.map +1 -0
  1268. package/dist/lib/nodon.d.ts +3 -0
  1269. package/dist/lib/nodon.d.ts.map +1 -0
  1270. package/dist/lib/nodon.js +130 -0
  1271. package/dist/lib/nodon.js.map +1 -0
  1272. package/dist/lib/ota.d.ts +71 -0
  1273. package/dist/lib/ota.d.ts.map +1 -0
  1274. package/dist/lib/ota.js +661 -0
  1275. package/dist/lib/ota.js.map +1 -0
  1276. package/dist/lib/philips.d.ts +252 -0
  1277. package/dist/lib/philips.d.ts.map +1 -0
  1278. package/dist/lib/philips.js +684 -0
  1279. package/dist/lib/philips.js.map +1 -0
  1280. package/dist/lib/reporting.d.ts +58 -0
  1281. package/dist/lib/reporting.d.ts.map +1 -0
  1282. package/dist/lib/reporting.js +285 -0
  1283. package/dist/lib/store.d.ts +7 -0
  1284. package/dist/lib/store.d.ts.map +1 -0
  1285. package/dist/lib/store.js +49 -0
  1286. package/dist/lib/store.js.map +1 -0
  1287. package/dist/lib/sunricher.d.ts +13 -0
  1288. package/dist/lib/sunricher.d.ts.map +1 -0
  1289. package/dist/lib/sunricher.js +14 -0
  1290. package/dist/lib/tuya.d.ts +784 -0
  1291. package/dist/lib/tuya.d.ts.map +1 -0
  1292. package/dist/lib/tuya.js +2394 -0
  1293. package/dist/lib/tuya.js.map +1 -0
  1294. package/dist/lib/types.d.ts +440 -0
  1295. package/dist/lib/types.d.ts.map +1 -0
  1296. package/dist/lib/ubisys.d.ts +19 -0
  1297. package/dist/lib/ubisys.d.ts.map +1 -0
  1298. package/dist/lib/ubisys.js +293 -0
  1299. package/dist/lib/ubisys.js.map +1 -0
  1300. package/dist/lib/utils.d.ts +93 -0
  1301. package/dist/lib/utils.d.ts.map +1 -0
  1302. package/dist/lib/utils.js +726 -0
  1303. package/dist/lib/utils.js.map +1 -0
  1304. package/dist/lib/zosung.d.ts +52 -0
  1305. package/dist/lib/zosung.d.ts.map +1 -0
  1306. package/dist/lib/zosung.js +253 -0
  1307. package/dist/lib/zosung.js.map +1 -0
  1308. package/dist/models-index.json +1 -0
  1309. package/package.json +21 -29
  1310. package/converters/fromZigbee.d.ts +0 -2031
  1311. package/converters/fromZigbee.d.ts.map +0 -1
  1312. package/converters/fromZigbee.js +0 -5324
  1313. package/converters/fromZigbee.js.map +0 -1
  1314. package/converters/toZigbee.d.ts +0 -1574
  1315. package/converters/toZigbee.d.ts.map +0 -1
  1316. package/converters/toZigbee.js +0 -4433
  1317. package/converters/toZigbee.js.map +0 -1
  1318. package/devices/ITCommander.d.ts +0 -3
  1319. package/devices/ITCommander.d.ts.map +0 -1
  1320. package/devices/ITCommander.js +0 -76
  1321. package/devices/ITCommander.js.map +0 -1
  1322. package/devices/acova.d.ts +0 -3
  1323. package/devices/acova.d.ts.map +0 -1
  1324. package/devices/acova.js +0 -126
  1325. package/devices/acova.js.map +0 -1
  1326. package/devices/acuity_brands_lighting.d.ts +0 -3
  1327. package/devices/acuity_brands_lighting.d.ts.map +0 -1
  1328. package/devices/acuity_brands_lighting.js +0 -61
  1329. package/devices/adeo.d.ts +0 -3
  1330. package/devices/adeo.d.ts.map +0 -1
  1331. package/devices/adeo.js +0 -485
  1332. package/devices/adeo.js.map +0 -1
  1333. package/devices/adurosmart.d.ts +0 -3
  1334. package/devices/adurosmart.d.ts.map +0 -1
  1335. package/devices/adurosmart.js +0 -189
  1336. package/devices/adurosmart.js.map +0 -1
  1337. package/devices/aeotec.d.ts +0 -3
  1338. package/devices/aeotec.d.ts.map +0 -1
  1339. package/devices/aeotec.js +0 -98
  1340. package/devices/aeotec.js.map +0 -1
  1341. package/devices/airam.d.ts +0 -3
  1342. package/devices/airam.d.ts.map +0 -1
  1343. package/devices/airam.js +0 -105
  1344. package/devices/airam.js.map +0 -1
  1345. package/devices/airzone_aidoo.d.ts +0 -3
  1346. package/devices/airzone_aidoo.d.ts.map +0 -1
  1347. package/devices/airzone_aidoo.js +0 -80
  1348. package/devices/airzone_aidoo.js.map +0 -1
  1349. package/devices/ajax_online.d.ts +0 -3
  1350. package/devices/ajax_online.d.ts.map +0 -1
  1351. package/devices/ajax_online.js +0 -83
  1352. package/devices/akuvox.d.ts +0 -3
  1353. package/devices/akuvox.d.ts.map +0 -1
  1354. package/devices/akuvox.js +0 -68
  1355. package/devices/akuvox.js.map +0 -1
  1356. package/devices/alchemy.d.ts +0 -3
  1357. package/devices/alchemy.d.ts.map +0 -1
  1358. package/devices/alchemy.js +0 -54
  1359. package/devices/aldi.d.ts +0 -3
  1360. package/devices/aldi.d.ts.map +0 -1
  1361. package/devices/aldi.js +0 -57
  1362. package/devices/aldi.js.map +0 -1
  1363. package/devices/alecto.d.ts +0 -3
  1364. package/devices/alecto.d.ts.map +0 -1
  1365. package/devices/alecto.js +0 -95
  1366. package/devices/alecto.js.map +0 -1
  1367. package/devices/amina.d.ts +0 -3
  1368. package/devices/amina.d.ts.map +0 -1
  1369. package/devices/amina.js +0 -369
  1370. package/devices/amina.js.map +0 -1
  1371. package/devices/anchor.d.ts +0 -3
  1372. package/devices/anchor.d.ts.map +0 -1
  1373. package/devices/anchor.js +0 -47
  1374. package/devices/atlantic.d.ts +0 -3
  1375. package/devices/atlantic.d.ts.map +0 -1
  1376. package/devices/atlantic.js +0 -145
  1377. package/devices/atlantic.js.map +0 -1
  1378. package/devices/atsmart.d.ts +0 -3
  1379. package/devices/atsmart.d.ts.map +0 -1
  1380. package/devices/atsmart.js +0 -47
  1381. package/devices/aubess.d.ts +0 -3
  1382. package/devices/aubess.d.ts.map +0 -1
  1383. package/devices/aubess.js +0 -60
  1384. package/devices/aurora_lighting.d.ts +0 -3
  1385. package/devices/aurora_lighting.d.ts.map +0 -1
  1386. package/devices/aurora_lighting.js +0 -332
  1387. package/devices/aurora_lighting.js.map +0 -1
  1388. package/devices/automaton.d.ts +0 -3
  1389. package/devices/automaton.d.ts.map +0 -1
  1390. package/devices/automaton.js +0 -64
  1391. package/devices/avatto.d.ts +0 -3
  1392. package/devices/avatto.d.ts.map +0 -1
  1393. package/devices/avatto.js +0 -273
  1394. package/devices/avatto.js.map +0 -1
  1395. package/devices/awox.d.ts +0 -3
  1396. package/devices/awox.d.ts.map +0 -1
  1397. package/devices/awox.js +0 -239
  1398. package/devices/awox.js.map +0 -1
  1399. package/devices/axis.d.ts +0 -3
  1400. package/devices/axis.d.ts.map +0 -1
  1401. package/devices/axis.js +0 -62
  1402. package/devices/axis.js.map +0 -1
  1403. package/devices/bankamp.d.ts +0 -3
  1404. package/devices/bankamp.d.ts.map +0 -1
  1405. package/devices/bankamp.js +0 -47
  1406. package/devices/bega.d.ts +0 -3
  1407. package/devices/bega.d.ts.map +0 -1
  1408. package/devices/bega.js +0 -61
  1409. package/devices/belkin.d.ts +0 -3
  1410. package/devices/belkin.d.ts.map +0 -1
  1411. package/devices/belkin.js +0 -47
  1412. package/devices/bitron.d.ts +0 -3
  1413. package/devices/bitron.d.ts.map +0 -1
  1414. package/devices/bitron.js +0 -357
  1415. package/devices/bitron.js.map +0 -1
  1416. package/devices/bituo_technik.d.ts +0 -3
  1417. package/devices/bituo_technik.d.ts.map +0 -1
  1418. package/devices/bituo_technik.js +0 -120
  1419. package/devices/bituo_technik.js.map +0 -1
  1420. package/devices/blaupunkt.d.ts +0 -3
  1421. package/devices/blaupunkt.d.ts.map +0 -1
  1422. package/devices/blaupunkt.js +0 -67
  1423. package/devices/blaupunkt.js.map +0 -1
  1424. package/devices/blitzwolf.d.ts +0 -3
  1425. package/devices/blitzwolf.d.ts.map +0 -1
  1426. package/devices/blitzwolf.js +0 -73
  1427. package/devices/blitzwolf.js.map +0 -1
  1428. package/devices/bosch.d.ts +0 -3
  1429. package/devices/bosch.d.ts.map +0 -1
  1430. package/devices/bosch.js +0 -2046
  1431. package/devices/bosch.js.map +0 -1
  1432. package/devices/bouffalo_lab.d.ts +0 -3
  1433. package/devices/bouffalo_lab.d.ts.map +0 -1
  1434. package/devices/bouffalo_lab.js +0 -47
  1435. package/devices/brimate.d.ts +0 -3
  1436. package/devices/brimate.d.ts.map +0 -1
  1437. package/devices/brimate.js +0 -54
  1438. package/devices/brimate.js.map +0 -1
  1439. package/devices/bseed.d.ts +0 -3
  1440. package/devices/bseed.d.ts.map +0 -1
  1441. package/devices/bseed.js +0 -53
  1442. package/devices/bticino.d.ts +0 -3
  1443. package/devices/bticino.d.ts.map +0 -1
  1444. package/devices/bticino.js +0 -112
  1445. package/devices/bticino.js.map +0 -1
  1446. package/devices/busch_jaeger.d.ts +0 -3
  1447. package/devices/busch_jaeger.d.ts.map +0 -1
  1448. package/devices/busch_jaeger.js +0 -184
  1449. package/devices/busch_jaeger.js.map +0 -1
  1450. package/devices/byun.d.ts +0 -3
  1451. package/devices/byun.d.ts.map +0 -1
  1452. package/devices/byun.js +0 -63
  1453. package/devices/byun.js.map +0 -1
  1454. package/devices/calex.d.ts +0 -3
  1455. package/devices/calex.d.ts.map +0 -1
  1456. package/devices/calex.js +0 -90
  1457. package/devices/calex.js.map +0 -1
  1458. package/devices/candeo.d.ts +0 -3
  1459. package/devices/candeo.d.ts.map +0 -1
  1460. package/devices/candeo.js +0 -224
  1461. package/devices/casaia.d.ts +0 -3
  1462. package/devices/casaia.d.ts.map +0 -1
  1463. package/devices/casaia.js +0 -98
  1464. package/devices/casaia.js.map +0 -1
  1465. package/devices/cel.d.ts +0 -3
  1466. package/devices/cel.d.ts.map +0 -1
  1467. package/devices/cel.js +0 -19
  1468. package/devices/cel.js.map +0 -1
  1469. package/devices/centralite.d.ts +0 -3
  1470. package/devices/centralite.d.ts.map +0 -1
  1471. package/devices/centralite.js +0 -452
  1472. package/devices/centralite.js.map +0 -1
  1473. package/devices/chacon.d.ts +0 -3
  1474. package/devices/chacon.d.ts.map +0 -1
  1475. package/devices/chacon.js +0 -57
  1476. package/devices/cleode.d.ts +0 -3
  1477. package/devices/cleode.d.ts.map +0 -1
  1478. package/devices/cleode.js +0 -47
  1479. package/devices/cleverio.d.ts +0 -3
  1480. package/devices/cleverio.d.ts.map +0 -1
  1481. package/devices/cleverio.js +0 -77
  1482. package/devices/cleverio.js.map +0 -1
  1483. package/devices/climax.d.ts +0 -3
  1484. package/devices/climax.d.ts.map +0 -1
  1485. package/devices/climax.js +0 -180
  1486. package/devices/climax.js.map +0 -1
  1487. package/devices/commercial_electric.d.ts +0 -3
  1488. package/devices/commercial_electric.d.ts.map +0 -1
  1489. package/devices/commercial_electric.js +0 -47
  1490. package/devices/cree.d.ts +0 -3
  1491. package/devices/cree.d.ts.map +0 -1
  1492. package/devices/cree.js +0 -47
  1493. package/devices/ctm.d.ts +0 -3
  1494. package/devices/ctm.d.ts.map +0 -1
  1495. package/devices/ctm.js +0 -1361
  1496. package/devices/ctm.js.map +0 -1
  1497. package/devices/current_products_corp.d.ts +0 -3
  1498. package/devices/current_products_corp.d.ts.map +0 -1
  1499. package/devices/current_products_corp.js +0 -63
  1500. package/devices/current_products_corp.js.map +0 -1
  1501. package/devices/custom_devices_diy.d.ts +0 -3
  1502. package/devices/custom_devices_diy.d.ts.map +0 -1
  1503. package/devices/custom_devices_diy.js +0 -1206
  1504. package/devices/custom_devices_diy.js.map +0 -1
  1505. package/devices/cy_lighting.d.ts +0 -3
  1506. package/devices/cy_lighting.d.ts.map +0 -1
  1507. package/devices/cy_lighting.js +0 -47
  1508. package/devices/danalock.d.ts +0 -3
  1509. package/devices/danalock.d.ts.map +0 -1
  1510. package/devices/danalock.js +0 -64
  1511. package/devices/danalock.js.map +0 -1
  1512. package/devices/danfoss.d.ts +0 -3
  1513. package/devices/danfoss.d.ts.map +0 -1
  1514. package/devices/danfoss.js +0 -741
  1515. package/devices/danfoss.js.map +0 -1
  1516. package/devices/databyte.d.ts +0 -3
  1517. package/devices/databyte.d.ts.map +0 -1
  1518. package/devices/databyte.js +0 -93
  1519. package/devices/databyte.js.map +0 -1
  1520. package/devices/datek.d.ts +0 -3
  1521. package/devices/datek.d.ts.map +0 -1
  1522. package/devices/datek.js +0 -307
  1523. package/devices/datek.js.map +0 -1
  1524. package/devices/dawon_dns.d.ts +0 -3
  1525. package/devices/dawon_dns.d.ts.map +0 -1
  1526. package/devices/dawon_dns.js +0 -317
  1527. package/devices/dawon_dns.js.map +0 -1
  1528. package/devices/develco.d.ts +0 -3
  1529. package/devices/develco.d.ts.map +0 -1
  1530. package/devices/develco.js +0 -1034
  1531. package/devices/develco.js.map +0 -1
  1532. package/devices/digi.d.ts +0 -3
  1533. package/devices/digi.d.ts.map +0 -1
  1534. package/devices/digi.js +0 -24
  1535. package/devices/direct_signs.d.ts +0 -3
  1536. package/devices/direct_signs.d.ts.map +0 -1
  1537. package/devices/direct_signs.js +0 -47
  1538. package/devices/diyruz.d.ts +0 -3
  1539. package/devices/diyruz.d.ts.map +0 -1
  1540. package/devices/diyruz.js +0 -400
  1541. package/devices/diyruz.js.map +0 -1
  1542. package/devices/dlink.d.ts +0 -3
  1543. package/devices/dlink.d.ts.map +0 -1
  1544. package/devices/dlink.js +0 -75
  1545. package/devices/dlink.js.map +0 -1
  1546. package/devices/dnake.d.ts +0 -3
  1547. package/devices/dnake.d.ts.map +0 -1
  1548. package/devices/dnake.js +0 -47
  1549. package/devices/dowsing_reynolds.d.ts +0 -3
  1550. package/devices/dowsing_reynolds.d.ts.map +0 -1
  1551. package/devices/dowsing_reynolds.js +0 -47
  1552. package/devices/dresden_elektronik.d.ts +0 -3
  1553. package/devices/dresden_elektronik.d.ts.map +0 -1
  1554. package/devices/dresden_elektronik.js +0 -82
  1555. package/devices/easyaccess.d.ts +0 -3
  1556. package/devices/easyaccess.d.ts.map +0 -1
  1557. package/devices/easyaccess.js +0 -70
  1558. package/devices/easyaccess.js.map +0 -1
  1559. package/devices/easyiot.d.ts +0 -3
  1560. package/devices/easyiot.d.ts.map +0 -1
  1561. package/devices/easyiot.js +0 -357
  1562. package/devices/easyiot.js.map +0 -1
  1563. package/devices/eatonhalo_led.d.ts +0 -3
  1564. package/devices/eatonhalo_led.d.ts.map +0 -1
  1565. package/devices/eatonhalo_led.js +0 -47
  1566. package/devices/echostar.d.ts +0 -3
  1567. package/devices/echostar.d.ts.map +0 -1
  1568. package/devices/echostar.js +0 -64
  1569. package/devices/echostar.js.map +0 -1
  1570. package/devices/ecodim.d.ts +0 -3
  1571. package/devices/ecodim.d.ts.map +0 -1
  1572. package/devices/ecodim.js +0 -269
  1573. package/devices/ecodim.js.map +0 -1
  1574. package/devices/ecolink.d.ts +0 -3
  1575. package/devices/ecolink.d.ts.map +0 -1
  1576. package/devices/ecolink.js +0 -60
  1577. package/devices/ecolink.js.map +0 -1
  1578. package/devices/ecosmart.d.ts +0 -3
  1579. package/devices/ecosmart.d.ts.map +0 -1
  1580. package/devices/ecosmart.js +0 -115
  1581. package/devices/ecozy.d.ts +0 -3
  1582. package/devices/ecozy.d.ts.map +0 -1
  1583. package/devices/ecozy.js +0 -88
  1584. package/devices/ecozy.js.map +0 -1
  1585. package/devices/edp.d.ts +0 -3
  1586. package/devices/edp.d.ts.map +0 -1
  1587. package/devices/edp.js +0 -73
  1588. package/devices/edp.js.map +0 -1
  1589. package/devices/efekta.d.ts +0 -3
  1590. package/devices/efekta.d.ts.map +0 -1
  1591. package/devices/efekta.js +0 -2632
  1592. package/devices/efekta.js.map +0 -1
  1593. package/devices/eglo.d.ts +0 -3
  1594. package/devices/eglo.d.ts.map +0 -1
  1595. package/devices/eglo.js +0 -133
  1596. package/devices/eglo.js.map +0 -1
  1597. package/devices/elko.d.ts +0 -3
  1598. package/devices/elko.d.ts.map +0 -1
  1599. package/devices/elko.js +0 -239
  1600. package/devices/elko.js.map +0 -1
  1601. package/devices/enbrighten.d.ts +0 -3
  1602. package/devices/enbrighten.d.ts.map +0 -1
  1603. package/devices/enbrighten.js +0 -156
  1604. package/devices/enocean.d.ts +0 -3
  1605. package/devices/enocean.d.ts.map +0 -1
  1606. package/devices/enocean.js +0 -152
  1607. package/devices/enocean.js.map +0 -1
  1608. package/devices/envilar.d.ts +0 -3
  1609. package/devices/envilar.d.ts.map +0 -1
  1610. package/devices/envilar.js +0 -99
  1611. package/devices/envilar.js.map +0 -1
  1612. package/devices/essentialb.d.ts +0 -3
  1613. package/devices/essentialb.d.ts.map +0 -1
  1614. package/devices/essentialb.js +0 -136
  1615. package/devices/essentialb.js.map +0 -1
  1616. package/devices/essentials.d.ts +0 -3
  1617. package/devices/essentials.d.ts.map +0 -1
  1618. package/devices/essentials.js +0 -150
  1619. package/devices/eucontrols.d.ts +0 -3
  1620. package/devices/eucontrols.d.ts.map +0 -1
  1621. package/devices/eucontrols.js +0 -47
  1622. package/devices/eurotronic.d.ts +0 -3
  1623. package/devices/eurotronic.d.ts.map +0 -1
  1624. package/devices/eurotronic.js +0 -205
  1625. package/devices/eurotronic.js.map +0 -1
  1626. package/devices/evanell.d.ts +0 -3
  1627. package/devices/evanell.d.ts.map +0 -1
  1628. package/devices/evanell.js +0 -71
  1629. package/devices/evn.d.ts +0 -3
  1630. package/devices/evn.d.ts.map +0 -1
  1631. package/devices/evn.js +0 -93
  1632. package/devices/evn.js.map +0 -1
  1633. package/devices/evology.d.ts +0 -3
  1634. package/devices/evology.d.ts.map +0 -1
  1635. package/devices/evology.js +0 -63
  1636. package/devices/evology.js.map +0 -1
  1637. package/devices/evvr.d.ts +0 -3
  1638. package/devices/evvr.d.ts.map +0 -1
  1639. package/devices/evvr.js +0 -47
  1640. package/devices/ewelink.d.ts +0 -3
  1641. package/devices/ewelink.d.ts.map +0 -1
  1642. package/devices/ewelink.js +0 -352
  1643. package/devices/ewelink.js.map +0 -1
  1644. package/devices/ezex.d.ts +0 -3
  1645. package/devices/ezex.d.ts.map +0 -1
  1646. package/devices/ezex.js +0 -47
  1647. package/devices/fantem.d.ts +0 -3
  1648. package/devices/fantem.d.ts.map +0 -1
  1649. package/devices/fantem.js +0 -114
  1650. package/devices/fantem.js.map +0 -1
  1651. package/devices/feibit.d.ts +0 -3
  1652. package/devices/feibit.d.ts.map +0 -1
  1653. package/devices/feibit.js +0 -344
  1654. package/devices/feibit.js.map +0 -1
  1655. package/devices/fireangel.d.ts +0 -3
  1656. package/devices/fireangel.d.ts.map +0 -1
  1657. package/devices/fireangel.js +0 -54
  1658. package/devices/fireangel.js.map +0 -1
  1659. package/devices/frankever.d.ts +0 -3
  1660. package/devices/frankever.d.ts.map +0 -1
  1661. package/devices/frankever.js +0 -67
  1662. package/devices/frient.d.ts +0 -3
  1663. package/devices/frient.d.ts.map +0 -1
  1664. package/devices/frient.js +0 -74
  1665. package/devices/futurehome.d.ts +0 -3
  1666. package/devices/futurehome.d.ts.map +0 -1
  1667. package/devices/futurehome.js +0 -123
  1668. package/devices/ge.d.ts +0 -3
  1669. package/devices/ge.d.ts.map +0 -1
  1670. package/devices/ge.js +0 -133
  1671. package/devices/ge.js.map +0 -1
  1672. package/devices/gewiss.d.ts +0 -3
  1673. package/devices/gewiss.d.ts.map +0 -1
  1674. package/devices/gewiss.js +0 -85
  1675. package/devices/gewiss.js.map +0 -1
  1676. package/devices/gidealed.d.ts +0 -3
  1677. package/devices/gidealed.d.ts.map +0 -1
  1678. package/devices/gidealed.js +0 -47
  1679. package/devices/giderwel.d.ts +0 -3
  1680. package/devices/giderwel.d.ts.map +0 -1
  1681. package/devices/giderwel.js +0 -47
  1682. package/devices/giex.d.ts +0 -3
  1683. package/devices/giex.d.ts.map +0 -1
  1684. package/devices/giex.js +0 -114
  1685. package/devices/girier.d.ts +0 -3
  1686. package/devices/girier.d.ts.map +0 -1
  1687. package/devices/girier.js +0 -51
  1688. package/devices/gledopto.d.ts +0 -3
  1689. package/devices/gledopto.d.ts.map +0 -1
  1690. package/devices/gledopto.js +0 -1052
  1691. package/devices/gledopto.js.map +0 -1
  1692. package/devices/gmmts.d.ts +0 -3
  1693. package/devices/gmmts.d.ts.map +0 -1
  1694. package/devices/gmmts.js +0 -2285
  1695. package/devices/gmmts.js.map +0 -1
  1696. package/devices/gmy.d.ts +0 -3
  1697. package/devices/gmy.d.ts.map +0 -1
  1698. package/devices/gmy.js +0 -47
  1699. package/devices/gs.d.ts +0 -3
  1700. package/devices/gs.d.ts.map +0 -1
  1701. package/devices/gs.js +0 -121
  1702. package/devices/gumax.d.ts +0 -3
  1703. package/devices/gumax.d.ts.map +0 -1
  1704. package/devices/gumax.js +0 -47
  1705. package/devices/halemeier.d.ts +0 -3
  1706. package/devices/halemeier.d.ts.map +0 -1
  1707. package/devices/halemeier.js +0 -128
  1708. package/devices/halemeier.js.map +0 -1
  1709. package/devices/hampton_bay.d.ts +0 -3
  1710. package/devices/hampton_bay.d.ts.map +0 -1
  1711. package/devices/hampton_bay.js +0 -71
  1712. package/devices/hampton_bay.js.map +0 -1
  1713. package/devices/heatit.d.ts +0 -3
  1714. package/devices/heatit.d.ts.map +0 -1
  1715. package/devices/heatit.js +0 -47
  1716. package/devices/heiman.d.ts +0 -3
  1717. package/devices/heiman.d.ts.map +0 -1
  1718. package/devices/heiman.js +0 -816
  1719. package/devices/heiman.js.map +0 -1
  1720. package/devices/heimgard_technologies.d.ts +0 -3
  1721. package/devices/heimgard_technologies.d.ts.map +0 -1
  1722. package/devices/heimgard_technologies.js +0 -192
  1723. package/devices/heimgard_technologies.js.map +0 -1
  1724. package/devices/hej.d.ts +0 -3
  1725. package/devices/hej.d.ts.map +0 -1
  1726. package/devices/hej.js +0 -105
  1727. package/devices/hfh.d.ts +0 -3
  1728. package/devices/hfh.d.ts.map +0 -1
  1729. package/devices/hfh.js +0 -47
  1730. package/devices/hilux.d.ts +0 -3
  1731. package/devices/hilux.d.ts.map +0 -1
  1732. package/devices/hilux.js +0 -54
  1733. package/devices/hive.d.ts +0 -3
  1734. package/devices/hive.d.ts.map +0 -1
  1735. package/devices/hive.js +0 -765
  1736. package/devices/hive.js.map +0 -1
  1737. package/devices/hommyn.d.ts +0 -3
  1738. package/devices/hommyn.d.ts.map +0 -1
  1739. package/devices/hommyn.js +0 -63
  1740. package/devices/hommyn.js.map +0 -1
  1741. package/devices/honyar.d.ts +0 -3
  1742. package/devices/honyar.d.ts.map +0 -1
  1743. package/devices/honyar.js +0 -170
  1744. package/devices/honyar.js.map +0 -1
  1745. package/devices/hornbach.d.ts +0 -3
  1746. package/devices/hornbach.d.ts.map +0 -1
  1747. package/devices/hornbach.js +0 -138
  1748. package/devices/hzc_electric.d.ts +0 -3
  1749. package/devices/hzc_electric.d.ts.map +0 -1
  1750. package/devices/hzc_electric.js +0 -105
  1751. package/devices/hzc_electric.js.map +0 -1
  1752. package/devices/icasa.d.ts +0 -3
  1753. package/devices/icasa.d.ts.map +0 -1
  1754. package/devices/icasa.js +0 -166
  1755. package/devices/icasa.js.map +0 -1
  1756. package/devices/idinio.d.ts +0 -3
  1757. package/devices/idinio.d.ts.map +0 -1
  1758. package/devices/idinio.js +0 -47
  1759. package/devices/ihorn.d.ts +0 -3
  1760. package/devices/ihorn.d.ts.map +0 -1
  1761. package/devices/ihorn.js +0 -108
  1762. package/devices/ihorn.js.map +0 -1
  1763. package/devices/ikea.d.ts +0 -3
  1764. package/devices/ikea.d.ts.map +0 -1
  1765. package/devices/ikea.js +0 -980
  1766. package/devices/ilightsin.d.ts +0 -3
  1767. package/devices/ilightsin.d.ts.map +0 -1
  1768. package/devices/ilightsin.js +0 -47
  1769. package/devices/iluminize.d.ts +0 -3
  1770. package/devices/iluminize.d.ts.map +0 -1
  1771. package/devices/iluminize.js +0 -389
  1772. package/devices/iluminize.js.map +0 -1
  1773. package/devices/ilux.d.ts +0 -3
  1774. package/devices/ilux.d.ts.map +0 -1
  1775. package/devices/ilux.js +0 -47
  1776. package/devices/imhotepcreation.d.ts +0 -3
  1777. package/devices/imhotepcreation.d.ts.map +0 -1
  1778. package/devices/imhotepcreation.js +0 -242
  1779. package/devices/imhotepcreation.js.map +0 -1
  1780. package/devices/immax.d.ts +0 -3
  1781. package/devices/immax.d.ts.map +0 -1
  1782. package/devices/immax.js +0 -303
  1783. package/devices/immax.js.map +0 -1
  1784. package/devices/imou.d.ts +0 -3
  1785. package/devices/imou.d.ts.map +0 -1
  1786. package/devices/imou.js +0 -60
  1787. package/devices/index.js +0 -649
  1788. package/devices/index.js.map +0 -1
  1789. package/devices/innr.d.ts +0 -3
  1790. package/devices/innr.d.ts.map +0 -1
  1791. package/devices/innr.js +0 -868
  1792. package/devices/innr.js.map +0 -1
  1793. package/devices/inovelli.d.ts +0 -3
  1794. package/devices/inovelli.d.ts.map +0 -1
  1795. package/devices/inovelli.js +0 -2014
  1796. package/devices/inovelli.js.map +0 -1
  1797. package/devices/insta.d.ts +0 -3
  1798. package/devices/insta.d.ts.map +0 -1
  1799. package/devices/insta.js +0 -185
  1800. package/devices/insta.js.map +0 -1
  1801. package/devices/iolloi.d.ts +0 -3
  1802. package/devices/iolloi.d.ts.map +0 -1
  1803. package/devices/iolloi.js +0 -48
  1804. package/devices/iotperfect.d.ts +0 -3
  1805. package/devices/iotperfect.d.ts.map +0 -1
  1806. package/devices/iotperfect.js +0 -57
  1807. package/devices/iotperfect.js.map +0 -1
  1808. package/devices/iris.d.ts +0 -3
  1809. package/devices/iris.d.ts.map +0 -1
  1810. package/devices/iris.js +0 -210
  1811. package/devices/iris.js.map +0 -1
  1812. package/devices/istar.d.ts +0 -3
  1813. package/devices/istar.d.ts.map +0 -1
  1814. package/devices/istar.js +0 -54
  1815. package/devices/jasco.d.ts +0 -3
  1816. package/devices/jasco.d.ts.map +0 -1
  1817. package/devices/jasco.js +0 -66
  1818. package/devices/jasco.js.map +0 -1
  1819. package/devices/javis.d.ts +0 -3
  1820. package/devices/javis.d.ts.map +0 -1
  1821. package/devices/javis.js +0 -80
  1822. package/devices/javis.js.map +0 -1
  1823. package/devices/jethome.d.ts +0 -3
  1824. package/devices/jethome.d.ts.map +0 -1
  1825. package/devices/jethome.js +0 -123
  1826. package/devices/jethome.js.map +0 -1
  1827. package/devices/jiawen.d.ts +0 -3
  1828. package/devices/jiawen.d.ts.map +0 -1
  1829. package/devices/jiawen.js +0 -54
  1830. package/devices/jumitech.d.ts +0 -3
  1831. package/devices/jumitech.d.ts.map +0 -1
  1832. package/devices/jumitech.js +0 -47
  1833. package/devices/jxuan.d.ts +0 -3
  1834. package/devices/jxuan.d.ts.map +0 -1
  1835. package/devices/jxuan.js +0 -88
  1836. package/devices/jxuan.js.map +0 -1
  1837. package/devices/kami.d.ts +0 -3
  1838. package/devices/kami.d.ts.map +0 -1
  1839. package/devices/kami.js +0 -54
  1840. package/devices/kami.js.map +0 -1
  1841. package/devices/keen_home.d.ts +0 -3
  1842. package/devices/keen_home.d.ts.map +0 -1
  1843. package/devices/keen_home.js +0 -159
  1844. package/devices/keen_home.js.map +0 -1
  1845. package/devices/klikaanklikuit.d.ts +0 -3
  1846. package/devices/klikaanklikuit.d.ts.map +0 -1
  1847. package/devices/klikaanklikuit.js +0 -54
  1848. package/devices/kmpcil.d.ts +0 -3
  1849. package/devices/kmpcil.d.ts.map +0 -1
  1850. package/devices/kmpcil.js +0 -215
  1851. package/devices/kmpcil.js.map +0 -1
  1852. package/devices/konke.d.ts +0 -3
  1853. package/devices/konke.d.ts.map +0 -1
  1854. package/devices/konke.js +0 -210
  1855. package/devices/konke.js.map +0 -1
  1856. package/devices/ksentry.d.ts +0 -3
  1857. package/devices/ksentry.d.ts.map +0 -1
  1858. package/devices/ksentry.js +0 -47
  1859. package/devices/kurvia.d.ts +0 -3
  1860. package/devices/kurvia.d.ts.map +0 -1
  1861. package/devices/kurvia.js +0 -52
  1862. package/devices/kurvia.js.map +0 -1
  1863. package/devices/kwikset.d.ts +0 -3
  1864. package/devices/kwikset.d.ts.map +0 -1
  1865. package/devices/kwikset.js +0 -156
  1866. package/devices/kwikset.js.map +0 -1
  1867. package/devices/lanesto.d.ts +0 -3
  1868. package/devices/lanesto.d.ts.map +0 -1
  1869. package/devices/lanesto.js +0 -47
  1870. package/devices/lds.d.ts +0 -3
  1871. package/devices/lds.d.ts.map +0 -1
  1872. package/devices/lds.js +0 -47
  1873. package/devices/led_trading.d.ts +0 -3
  1874. package/devices/led_trading.d.ts.map +0 -1
  1875. package/devices/led_trading.js +0 -111
  1876. package/devices/led_trading.js.map +0 -1
  1877. package/devices/ledvance.d.ts +0 -3
  1878. package/devices/ledvance.d.ts.map +0 -1
  1879. package/devices/ledvance.js +0 -370
  1880. package/devices/leedarson.d.ts +0 -3
  1881. package/devices/leedarson.d.ts.map +0 -1
  1882. package/devices/leedarson.js +0 -183
  1883. package/devices/leedarson.js.map +0 -1
  1884. package/devices/legrand.d.ts +0 -3
  1885. package/devices/legrand.d.ts.map +0 -1
  1886. package/devices/legrand.js +0 -737
  1887. package/devices/legrand.js.map +0 -1
  1888. package/devices/lellki.d.ts +0 -3
  1889. package/devices/lellki.d.ts.map +0 -1
  1890. package/devices/lellki.js +0 -164
  1891. package/devices/lellki.js.map +0 -1
  1892. package/devices/letsled.d.ts +0 -3
  1893. package/devices/letsled.d.ts.map +0 -1
  1894. package/devices/letsled.js +0 -47
  1895. package/devices/letv.d.ts +0 -3
  1896. package/devices/letv.d.ts.map +0 -1
  1897. package/devices/letv.js +0 -89
  1898. package/devices/letv.js.map +0 -1
  1899. package/devices/leviton.d.ts +0 -3
  1900. package/devices/leviton.d.ts.map +0 -1
  1901. package/devices/leviton.js +0 -163
  1902. package/devices/leviton.js.map +0 -1
  1903. package/devices/lg.d.ts +0 -3
  1904. package/devices/lg.d.ts.map +0 -1
  1905. package/devices/lg.js +0 -61
  1906. package/devices/lidl.d.ts +0 -3
  1907. package/devices/lidl.d.ts.map +0 -1
  1908. package/devices/lidl.js +0 -673
  1909. package/devices/lidl.js.map +0 -1
  1910. package/devices/lifecontrol.d.ts +0 -3
  1911. package/devices/lifecontrol.d.ts.map +0 -1
  1912. package/devices/lifecontrol.js +0 -148
  1913. package/devices/lifecontrol.js.map +0 -1
  1914. package/devices/lightsolutions.d.ts +0 -3
  1915. package/devices/lightsolutions.d.ts.map +0 -1
  1916. package/devices/lightsolutions.js +0 -68
  1917. package/devices/linkind.d.ts +0 -3
  1918. package/devices/linkind.d.ts.map +0 -1
  1919. package/devices/linkind.js +0 -274
  1920. package/devices/linkind.js.map +0 -1
  1921. package/devices/linptech.d.ts +0 -3
  1922. package/devices/linptech.d.ts.map +0 -1
  1923. package/devices/linptech.js +0 -158
  1924. package/devices/linptech.js.map +0 -1
  1925. package/devices/livingwise.d.ts +0 -3
  1926. package/devices/livingwise.d.ts.map +0 -1
  1927. package/devices/livingwise.js +0 -118
  1928. package/devices/livingwise.js.map +0 -1
  1929. package/devices/livolo.d.ts +0 -3
  1930. package/devices/livolo.d.ts.map +0 -1
  1931. package/devices/livolo.js +0 -421
  1932. package/devices/livolo.js.map +0 -1
  1933. package/devices/lixee.d.ts +0 -3
  1934. package/devices/lixee.d.ts.map +0 -1
  1935. package/devices/lixee.js +0 -1924
  1936. package/devices/lixee.js.map +0 -1
  1937. package/devices/lonsonho.d.ts +0 -3
  1938. package/devices/lonsonho.d.ts.map +0 -1
  1939. package/devices/lonsonho.js +0 -290
  1940. package/devices/lonsonho.js.map +0 -1
  1941. package/devices/ls.d.ts +0 -3
  1942. package/devices/ls.d.ts.map +0 -1
  1943. package/devices/ls.js +0 -66
  1944. package/devices/lubeez.d.ts +0 -3
  1945. package/devices/lubeez.d.ts.map +0 -1
  1946. package/devices/lubeez.js +0 -47
  1947. package/devices/lumi.d.ts +0 -3
  1948. package/devices/lumi.d.ts.map +0 -1
  1949. package/devices/lumi.js +0 -4430
  1950. package/devices/lumi.js.map +0 -1
  1951. package/devices/lupus.d.ts +0 -3
  1952. package/devices/lupus.d.ts.map +0 -1
  1953. package/devices/lupus.js +0 -97
  1954. package/devices/lupus.js.map +0 -1
  1955. package/devices/lutron.d.ts +0 -3
  1956. package/devices/lutron.d.ts.map +0 -1
  1957. package/devices/lutron.js +0 -71
  1958. package/devices/lutron.js.map +0 -1
  1959. package/devices/lux.d.ts +0 -3
  1960. package/devices/lux.d.ts.map +0 -1
  1961. package/devices/lux.js +0 -90
  1962. package/devices/lux.js.map +0 -1
  1963. package/devices/lytko.d.ts +0 -3
  1964. package/devices/lytko.d.ts.map +0 -1
  1965. package/devices/lytko.js +0 -787
  1966. package/devices/lytko.js.map +0 -1
  1967. package/devices/m_elec.d.ts +0 -3
  1968. package/devices/m_elec.d.ts.map +0 -1
  1969. package/devices/m_elec.js +0 -68
  1970. package/devices/makegood.d.ts +0 -3
  1971. package/devices/makegood.d.ts.map +0 -1
  1972. package/devices/makegood.js +0 -65
  1973. package/devices/matcall_bv.d.ts +0 -3
  1974. package/devices/matcall_bv.d.ts.map +0 -1
  1975. package/devices/matcall_bv.js +0 -54
  1976. package/devices/mazda.d.ts +0 -3
  1977. package/devices/mazda.d.ts.map +0 -1
  1978. package/devices/mazda.js +0 -163
  1979. package/devices/mazda.js.map +0 -1
  1980. package/devices/meazon.d.ts +0 -3
  1981. package/devices/meazon.d.ts.map +0 -1
  1982. package/devices/meazon.js +0 -98
  1983. package/devices/meazon.js.map +0 -1
  1984. package/devices/mercator.d.ts +0 -3
  1985. package/devices/mercator.d.ts.map +0 -1
  1986. package/devices/mercator.js +0 -252
  1987. package/devices/mercator.js.map +0 -1
  1988. package/devices/miboxer.d.ts +0 -3
  1989. package/devices/miboxer.d.ts.map +0 -1
  1990. package/devices/miboxer.js +0 -92
  1991. package/devices/miboxer.js.map +0 -1
  1992. package/devices/micromatic.d.ts +0 -3
  1993. package/devices/micromatic.d.ts.map +0 -1
  1994. package/devices/micromatic.js +0 -47
  1995. package/devices/modular.d.ts +0 -3
  1996. package/devices/modular.d.ts.map +0 -1
  1997. package/devices/modular.js +0 -47
  1998. package/devices/moes.d.ts +0 -3
  1999. package/devices/moes.d.ts.map +0 -1
  2000. package/devices/moes.js +0 -722
  2001. package/devices/moes.js.map +0 -1
  2002. package/devices/muller_licht.d.ts +0 -3
  2003. package/devices/muller_licht.d.ts.map +0 -1
  2004. package/devices/muller_licht.js +0 -337
  2005. package/devices/muller_licht.js.map +0 -1
  2006. package/devices/multiterm.d.ts +0 -3
  2007. package/devices/multiterm.d.ts.map +0 -1
  2008. package/devices/multiterm.js +0 -122
  2009. package/devices/multiterm.js.map +0 -1
  2010. package/devices/namron.d.ts +0 -3
  2011. package/devices/namron.d.ts.map +0 -1
  2012. package/devices/namron.js +0 -1572
  2013. package/devices/namron.js.map +0 -1
  2014. package/devices/nanoleaf.d.ts +0 -3
  2015. package/devices/nanoleaf.d.ts.map +0 -1
  2016. package/devices/nanoleaf.js +0 -47
  2017. package/devices/nedis.d.ts +0 -3
  2018. package/devices/nedis.d.ts.map +0 -1
  2019. package/devices/nedis.js +0 -87
  2020. package/devices/neo.d.ts +0 -3
  2021. package/devices/neo.d.ts.map +0 -1
  2022. package/devices/neo.js +0 -557
  2023. package/devices/neo.js.map +0 -1
  2024. package/devices/net2grid.d.ts +0 -3
  2025. package/devices/net2grid.d.ts.map +0 -1
  2026. package/devices/net2grid.js +0 -67
  2027. package/devices/net2grid.js.map +0 -1
  2028. package/devices/netvox.d.ts +0 -3
  2029. package/devices/netvox.d.ts.map +0 -1
  2030. package/devices/netvox.js +0 -74
  2031. package/devices/netvox.js.map +0 -1
  2032. package/devices/nexelec.d.ts +0 -3
  2033. package/devices/nexelec.d.ts.map +0 -1
  2034. package/devices/nexelec.js +0 -47
  2035. package/devices/niko.d.ts +0 -3
  2036. package/devices/niko.d.ts.map +0 -1
  2037. package/devices/niko.js +0 -632
  2038. package/devices/niko.js.map +0 -1
  2039. package/devices/ninja_blocks.d.ts +0 -3
  2040. package/devices/ninja_blocks.d.ts.map +0 -1
  2041. package/devices/ninja_blocks.js +0 -63
  2042. package/devices/ninja_blocks.js.map +0 -1
  2043. package/devices/niviss.d.ts +0 -3
  2044. package/devices/niviss.d.ts.map +0 -1
  2045. package/devices/niviss.js +0 -47
  2046. package/devices/nodon.d.ts +0 -3
  2047. package/devices/nodon.d.ts.map +0 -1
  2048. package/devices/nodon.js +0 -386
  2049. package/devices/nodon.js.map +0 -1
  2050. package/devices/nordtronic.d.ts +0 -3
  2051. package/devices/nordtronic.d.ts.map +0 -1
  2052. package/devices/nordtronic.js +0 -73
  2053. package/devices/nous.d.ts +0 -3
  2054. package/devices/nous.d.ts.map +0 -1
  2055. package/devices/nous.js +0 -168
  2056. package/devices/nous.js.map +0 -1
  2057. package/devices/novo.d.ts +0 -3
  2058. package/devices/novo.d.ts.map +0 -1
  2059. package/devices/novo.js +0 -57
  2060. package/devices/novo.js.map +0 -1
  2061. package/devices/nue_3a.d.ts +0 -3
  2062. package/devices/nue_3a.d.ts.map +0 -1
  2063. package/devices/nue_3a.js +0 -360
  2064. package/devices/nue_3a.js.map +0 -1
  2065. package/devices/nyce.d.ts +0 -3
  2066. package/devices/nyce.d.ts.map +0 -1
  2067. package/devices/nyce.js +0 -133
  2068. package/devices/nyce.js.map +0 -1
  2069. package/devices/onenuo.d.ts +0 -3
  2070. package/devices/onenuo.d.ts.map +0 -1
  2071. package/devices/onenuo.js +0 -85
  2072. package/devices/onesti.d.ts +0 -3
  2073. package/devices/onesti.d.ts.map +0 -1
  2074. package/devices/onesti.js +0 -207
  2075. package/devices/onesti.js.map +0 -1
  2076. package/devices/openlumi.d.ts +0 -3
  2077. package/devices/openlumi.d.ts.map +0 -1
  2078. package/devices/openlumi.js +0 -61
  2079. package/devices/openlumi.js.map +0 -1
  2080. package/devices/orvibo.d.ts +0 -12
  2081. package/devices/orvibo.d.ts.map +0 -1
  2082. package/devices/orvibo.js +0 -595
  2083. package/devices/orvibo.js.map +0 -1
  2084. package/devices/osram.d.ts +0 -3
  2085. package/devices/osram.d.ts.map +0 -1
  2086. package/devices/osram.js +0 -516
  2087. package/devices/osram.js.map +0 -1
  2088. package/devices/oujiabao.d.ts +0 -3
  2089. package/devices/oujiabao.d.ts.map +0 -1
  2090. package/devices/oujiabao.js +0 -54
  2091. package/devices/oujiabao.js.map +0 -1
  2092. package/devices/owon.d.ts +0 -3
  2093. package/devices/owon.d.ts.map +0 -1
  2094. package/devices/owon.js +0 -476
  2095. package/devices/owon.js.map +0 -1
  2096. package/devices/ozsmartthings.d.ts +0 -3
  2097. package/devices/ozsmartthings.d.ts.map +0 -1
  2098. package/devices/ozsmartthings.js +0 -47
  2099. package/devices/paul_neuhaus.d.ts +0 -3
  2100. package/devices/paul_neuhaus.d.ts.map +0 -1
  2101. package/devices/paul_neuhaus.js +0 -193
  2102. package/devices/paul_neuhaus.js.map +0 -1
  2103. package/devices/paulmann.d.ts +0 -3
  2104. package/devices/paulmann.d.ts.map +0 -1
  2105. package/devices/paulmann.js +0 -337
  2106. package/devices/paulmann.js.map +0 -1
  2107. package/devices/peq.d.ts +0 -3
  2108. package/devices/peq.d.ts.map +0 -1
  2109. package/devices/peq.js +0 -63
  2110. package/devices/peq.js.map +0 -1
  2111. package/devices/perenio.d.ts +0 -3
  2112. package/devices/perenio.d.ts.map +0 -1
  2113. package/devices/perenio.js +0 -467
  2114. package/devices/perenio.js.map +0 -1
  2115. package/devices/philio.d.ts +0 -3
  2116. package/devices/philio.d.ts.map +0 -1
  2117. package/devices/philio.js +0 -48
  2118. package/devices/philips.d.ts +0 -3
  2119. package/devices/philips.d.ts.map +0 -1
  2120. package/devices/philips.js +0 -4064
  2121. package/devices/philips.js.map +0 -1
  2122. package/devices/plaid.d.ts +0 -3
  2123. package/devices/plaid.d.ts.map +0 -1
  2124. package/devices/plaid.js +0 -64
  2125. package/devices/plaid.js.map +0 -1
  2126. package/devices/plugwise.d.ts +0 -3
  2127. package/devices/plugwise.d.ts.map +0 -1
  2128. package/devices/plugwise.js +0 -209
  2129. package/devices/plugwise.js.map +0 -1
  2130. package/devices/profalux.d.ts +0 -3
  2131. package/devices/profalux.d.ts.map +0 -1
  2132. package/devices/profalux.js +0 -190
  2133. package/devices/profalux.js.map +0 -1
  2134. package/devices/prolight.d.ts +0 -3
  2135. package/devices/prolight.d.ts.map +0 -1
  2136. package/devices/prolight.js +0 -114
  2137. package/devices/prolight.js.map +0 -1
  2138. package/devices/purmo.d.ts +0 -3
  2139. package/devices/purmo.d.ts.map +0 -1
  2140. package/devices/purmo.js +0 -94
  2141. package/devices/purmo.js.map +0 -1
  2142. package/devices/pushok.d.ts +0 -3
  2143. package/devices/pushok.d.ts.map +0 -1
  2144. package/devices/pushok.js +0 -375
  2145. package/devices/pushok.js.map +0 -1
  2146. package/devices/qa.d.ts +0 -3
  2147. package/devices/qa.d.ts.map +0 -1
  2148. package/devices/qa.js +0 -294
  2149. package/devices/qa.js.map +0 -1
  2150. package/devices/qmotion.d.ts +0 -3
  2151. package/devices/qmotion.d.ts.map +0 -1
  2152. package/devices/qmotion.js +0 -72
  2153. package/devices/qmotion.js.map +0 -1
  2154. package/devices/qoto.d.ts +0 -3
  2155. package/devices/qoto.d.ts.map +0 -1
  2156. package/devices/qoto.js +0 -86
  2157. package/devices/qoto.js.map +0 -1
  2158. package/devices/quotra.d.ts +0 -3
  2159. package/devices/quotra.d.ts.map +0 -1
  2160. package/devices/quotra.js +0 -54
  2161. package/devices/rademacher.d.ts +0 -3
  2162. package/devices/rademacher.d.ts.map +0 -1
  2163. package/devices/rademacher.js +0 -61
  2164. package/devices/radium.d.ts +0 -3
  2165. package/devices/radium.d.ts.map +0 -1
  2166. package/devices/radium.js +0 -47
  2167. package/devices/raex.d.ts +0 -3
  2168. package/devices/raex.d.ts.map +0 -1
  2169. package/devices/raex.js +0 -47
  2170. package/devices/rgb_genie.d.ts +0 -3
  2171. package/devices/rgb_genie.d.ts.map +0 -1
  2172. package/devices/rgb_genie.js +0 -278
  2173. package/devices/rgb_genie.js.map +0 -1
  2174. package/devices/robb.d.ts +0 -3
  2175. package/devices/robb.d.ts.map +0 -1
  2176. package/devices/robb.js +0 -471
  2177. package/devices/robb.js.map +0 -1
  2178. package/devices/roome.d.ts +0 -3
  2179. package/devices/roome.d.ts.map +0 -1
  2180. package/devices/roome.js +0 -54
  2181. package/devices/roome.js.map +0 -1
  2182. package/devices/rtx.d.ts +0 -3
  2183. package/devices/rtx.d.ts.map +0 -1
  2184. package/devices/rtx.js +0 -146
  2185. package/devices/rtx.js.map +0 -1
  2186. package/devices/salus_controls.d.ts +0 -3
  2187. package/devices/salus_controls.d.ts.map +0 -1
  2188. package/devices/salus_controls.js +0 -224
  2189. package/devices/salus_controls.js.map +0 -1
  2190. package/devices/samotech.d.ts +0 -3
  2191. package/devices/samotech.d.ts.map +0 -1
  2192. package/devices/samotech.js +0 -107
  2193. package/devices/saswell.d.ts +0 -3
  2194. package/devices/saswell.d.ts.map +0 -1
  2195. package/devices/saswell.js +0 -126
  2196. package/devices/saswell.js.map +0 -1
  2197. package/devices/sber.d.ts +0 -3
  2198. package/devices/sber.d.ts.map +0 -1
  2199. package/devices/sber.js +0 -98
  2200. package/devices/scanproducts.d.ts +0 -3
  2201. package/devices/scanproducts.d.ts.map +0 -1
  2202. package/devices/scanproducts.js +0 -54
  2203. package/devices/schlage.d.ts +0 -3
  2204. package/devices/schlage.d.ts.map +0 -1
  2205. package/devices/schlage.js +0 -63
  2206. package/devices/schlage.js.map +0 -1
  2207. package/devices/schneider_electric.d.ts +0 -3
  2208. package/devices/schneider_electric.d.ts.map +0 -1
  2209. package/devices/schneider_electric.js +0 -2189
  2210. package/devices/schneider_electric.js.map +0 -1
  2211. package/devices/schwaiger.d.ts +0 -3
  2212. package/devices/schwaiger.d.ts.map +0 -1
  2213. package/devices/schwaiger.js +0 -108
  2214. package/devices/schwaiger.js.map +0 -1
  2215. package/devices/seastar_intelligence.d.ts +0 -3
  2216. package/devices/seastar_intelligence.d.ts.map +0 -1
  2217. package/devices/seastar_intelligence.js +0 -52
  2218. package/devices/securifi.d.ts +0 -3
  2219. package/devices/securifi.d.ts.map +0 -1
  2220. package/devices/securifi.js +0 -82
  2221. package/devices/securifi.js.map +0 -1
  2222. package/devices/sengled.d.ts +0 -6
  2223. package/devices/sengled.d.ts.map +0 -1
  2224. package/devices/sengled.js +0 -390
  2225. package/devices/sengled.js.map +0 -1
  2226. package/devices/sercomm.d.ts +0 -3
  2227. package/devices/sercomm.d.ts.map +0 -1
  2228. package/devices/sercomm.js +0 -189
  2229. package/devices/sercomm.js.map +0 -1
  2230. package/devices/shade_control.d.ts +0 -3
  2231. package/devices/shade_control.d.ts.map +0 -1
  2232. package/devices/shade_control.js +0 -64
  2233. package/devices/shade_control.js.map +0 -1
  2234. package/devices/shenzhen_homa.d.ts +0 -3
  2235. package/devices/shenzhen_homa.d.ts.map +0 -1
  2236. package/devices/shenzhen_homa.js +0 -143
  2237. package/devices/shinasystem.d.ts +0 -3
  2238. package/devices/shinasystem.d.ts.map +0 -1
  2239. package/devices/shinasystem.js +0 -960
  2240. package/devices/shinasystem.js.map +0 -1
  2241. package/devices/shyugj.d.ts +0 -3
  2242. package/devices/shyugj.d.ts.map +0 -1
  2243. package/devices/shyugj.js +0 -53
  2244. package/devices/siglis.d.ts +0 -3
  2245. package/devices/siglis.d.ts.map +0 -1
  2246. package/devices/siglis.js +0 -454
  2247. package/devices/siglis.js.map +0 -1
  2248. package/devices/sikom.d.ts +0 -3
  2249. package/devices/sikom.d.ts.map +0 -1
  2250. package/devices/sikom.js +0 -67
  2251. package/devices/sikom.js.map +0 -1
  2252. package/devices/simon.d.ts +0 -3
  2253. package/devices/simon.d.ts.map +0 -1
  2254. package/devices/simon.js +0 -14
  2255. package/devices/sinope.d.ts +0 -3
  2256. package/devices/sinope.d.ts.map +0 -1
  2257. package/devices/sinope.js +0 -1754
  2258. package/devices/sinope.js.map +0 -1
  2259. package/devices/siterwell.d.ts +0 -3
  2260. package/devices/siterwell.d.ts.map +0 -1
  2261. package/devices/siterwell.js +0 -110
  2262. package/devices/siterwell.js.map +0 -1
  2263. package/devices/skydance.d.ts +0 -3
  2264. package/devices/skydance.d.ts.map +0 -1
  2265. package/devices/skydance.js +0 -138
  2266. package/devices/slv.d.ts +0 -3
  2267. package/devices/slv.d.ts.map +0 -1
  2268. package/devices/slv.js +0 -70
  2269. package/devices/smart9.d.ts +0 -3
  2270. package/devices/smart9.d.ts.map +0 -1
  2271. package/devices/smart9.js +0 -66
  2272. package/devices/smart9.js.map +0 -1
  2273. package/devices/smart_home_pty.d.ts +0 -3
  2274. package/devices/smart_home_pty.d.ts.map +0 -1
  2275. package/devices/smart_home_pty.js +0 -54
  2276. package/devices/smartenit.d.ts +0 -3
  2277. package/devices/smartenit.d.ts.map +0 -1
  2278. package/devices/smartenit.js +0 -80
  2279. package/devices/smartenit.js.map +0 -1
  2280. package/devices/smartthings.d.ts +0 -3
  2281. package/devices/smartthings.d.ts.map +0 -1
  2282. package/devices/smartthings.js +0 -526
  2283. package/devices/smartthings.js.map +0 -1
  2284. package/devices/smartwings.d.ts +0 -3
  2285. package/devices/smartwings.d.ts.map +0 -1
  2286. package/devices/smartwings.js +0 -63
  2287. package/devices/smartwings.js.map +0 -1
  2288. package/devices/smlight.d.ts +0 -3
  2289. package/devices/smlight.d.ts.map +0 -1
  2290. package/devices/smlight.js +0 -56
  2291. package/devices/sohan_electric.d.ts +0 -3
  2292. package/devices/sohan_electric.d.ts.map +0 -1
  2293. package/devices/sohan_electric.js +0 -53
  2294. package/devices/sohan_electric.js.map +0 -1
  2295. package/devices/solaredge.d.ts +0 -3
  2296. package/devices/solaredge.d.ts.map +0 -1
  2297. package/devices/solaredge.js +0 -47
  2298. package/devices/soma.d.ts +0 -3
  2299. package/devices/soma.d.ts.map +0 -1
  2300. package/devices/soma.js +0 -47
  2301. package/devices/somfy.d.ts +0 -3
  2302. package/devices/somfy.d.ts.map +0 -1
  2303. package/devices/somfy.js +0 -101
  2304. package/devices/somfy.js.map +0 -1
  2305. package/devices/somgoms.d.ts +0 -3
  2306. package/devices/somgoms.d.ts.map +0 -1
  2307. package/devices/somgoms.js +0 -84
  2308. package/devices/somgoms.js.map +0 -1
  2309. package/devices/sonoff.d.ts +0 -3
  2310. package/devices/sonoff.d.ts.map +0 -1
  2311. package/devices/sonoff.js +0 -1583
  2312. package/devices/sonoff.js.map +0 -1
  2313. package/devices/sowilo.d.ts +0 -3
  2314. package/devices/sowilo.d.ts.map +0 -1
  2315. package/devices/sowilo.js +0 -47
  2316. package/devices/spotmau.d.ts +0 -3
  2317. package/devices/spotmau.d.ts.map +0 -1
  2318. package/devices/spotmau.js +0 -74
  2319. package/devices/stelpro.d.ts +0 -3
  2320. package/devices/stelpro.d.ts.map +0 -1
  2321. package/devices/stelpro.js +0 -365
  2322. package/devices/stelpro.js.map +0 -1
  2323. package/devices/sunricher.d.ts +0 -3
  2324. package/devices/sunricher.d.ts.map +0 -1
  2325. package/devices/sunricher.js +0 -2238
  2326. package/devices/sunricher.js.map +0 -1
  2327. package/devices/swann.d.ts +0 -3
  2328. package/devices/swann.d.ts.map +0 -1
  2329. package/devices/swann.js +0 -72
  2330. package/devices/swann.js.map +0 -1
  2331. package/devices/sylvania.d.ts +0 -3
  2332. package/devices/sylvania.d.ts.map +0 -1
  2333. package/devices/sylvania.js +0 -226
  2334. package/devices/sylvania.js.map +0 -1
  2335. package/devices/tapestry.d.ts +0 -3
  2336. package/devices/tapestry.d.ts.map +0 -1
  2337. package/devices/tapestry.js +0 -55
  2338. package/devices/tapestry.js.map +0 -1
  2339. package/devices/tci.d.ts +0 -3
  2340. package/devices/tci.d.ts.map +0 -1
  2341. package/devices/tci.js +0 -61
  2342. package/devices/tech.d.ts +0 -3
  2343. package/devices/tech.d.ts.map +0 -1
  2344. package/devices/tech.js +0 -217
  2345. package/devices/tech.js.map +0 -1
  2346. package/devices/technicolor.d.ts +0 -3
  2347. package/devices/technicolor.d.ts.map +0 -1
  2348. package/devices/technicolor.js +0 -101
  2349. package/devices/technicolor.js.map +0 -1
  2350. package/devices/terncy.d.ts +0 -3
  2351. package/devices/terncy.d.ts.map +0 -1
  2352. package/devices/terncy.js +0 -116
  2353. package/devices/terncy.js.map +0 -1
  2354. package/devices/the_light_group.d.ts +0 -3
  2355. package/devices/the_light_group.d.ts.map +0 -1
  2356. package/devices/the_light_group.js +0 -129
  2357. package/devices/the_light_group.js.map +0 -1
  2358. package/devices/third_reality.d.ts +0 -3
  2359. package/devices/third_reality.d.ts.map +0 -1
  2360. package/devices/third_reality.js +0 -609
  2361. package/devices/third_reality.js.map +0 -1
  2362. package/devices/titan_products.d.ts +0 -3
  2363. package/devices/titan_products.d.ts.map +0 -1
  2364. package/devices/titan_products.js +0 -61
  2365. package/devices/titan_products.js.map +0 -1
  2366. package/devices/tlwglobal.d.ts +0 -3
  2367. package/devices/tlwglobal.d.ts.map +0 -1
  2368. package/devices/tlwglobal.js +0 -64
  2369. package/devices/tplink.d.ts +0 -3
  2370. package/devices/tplink.d.ts.map +0 -1
  2371. package/devices/tplink.js +0 -80
  2372. package/devices/tplink.js.map +0 -1
  2373. package/devices/trust.d.ts +0 -3
  2374. package/devices/trust.d.ts.map +0 -1
  2375. package/devices/trust.js +0 -182
  2376. package/devices/trust.js.map +0 -1
  2377. package/devices/tubeszb.d.ts +0 -3
  2378. package/devices/tubeszb.d.ts.map +0 -1
  2379. package/devices/tubeszb.js +0 -59
  2380. package/devices/tubeszb.js.map +0 -1
  2381. package/devices/tuya.d.ts +0 -3
  2382. package/devices/tuya.d.ts.map +0 -1
  2383. package/devices/tuya.js +0 -14484
  2384. package/devices/tuya.js.map +0 -1
  2385. package/devices/ubisys.d.ts +0 -3
  2386. package/devices/ubisys.d.ts.map +0 -1
  2387. package/devices/ubisys.js +0 -1313
  2388. package/devices/ubisys.js.map +0 -1
  2389. package/devices/uhome.d.ts +0 -3
  2390. package/devices/uhome.d.ts.map +0 -1
  2391. package/devices/uhome.js +0 -63
  2392. package/devices/uhome.js.map +0 -1
  2393. package/devices/universal_electronics_inc.d.ts +0 -3
  2394. package/devices/universal_electronics_inc.d.ts.map +0 -1
  2395. package/devices/universal_electronics_inc.js +0 -185
  2396. package/devices/universal_electronics_inc.js.map +0 -1
  2397. package/devices/vbled.d.ts +0 -3
  2398. package/devices/vbled.d.ts.map +0 -1
  2399. package/devices/vbled.js +0 -47
  2400. package/devices/vesternet.d.ts +0 -3
  2401. package/devices/vesternet.d.ts.map +0 -1
  2402. package/devices/vesternet.js +0 -329
  2403. package/devices/vesternet.js.map +0 -1
  2404. package/devices/viessmann.d.ts +0 -3
  2405. package/devices/viessmann.d.ts.map +0 -1
  2406. package/devices/viessmann.js +0 -123
  2407. package/devices/viessmann.js.map +0 -1
  2408. package/devices/villeroy_boch.d.ts +0 -3
  2409. package/devices/villeroy_boch.d.ts.map +0 -1
  2410. package/devices/villeroy_boch.js +0 -54
  2411. package/devices/vimar.d.ts +0 -3
  2412. package/devices/vimar.d.ts.map +0 -1
  2413. package/devices/vimar.js +0 -136
  2414. package/devices/vimar.js.map +0 -1
  2415. package/devices/visonic.d.ts +0 -3
  2416. package/devices/visonic.d.ts.map +0 -1
  2417. package/devices/visonic.js +0 -137
  2418. package/devices/visonic.js.map +0 -1
  2419. package/devices/vrey.d.ts +0 -3
  2420. package/devices/vrey.d.ts.map +0 -1
  2421. package/devices/vrey.js +0 -48
  2422. package/devices/wally.d.ts +0 -3
  2423. package/devices/wally.d.ts.map +0 -1
  2424. package/devices/wally.js +0 -63
  2425. package/devices/wally.js.map +0 -1
  2426. package/devices/waxman.d.ts +0 -3
  2427. package/devices/waxman.d.ts.map +0 -1
  2428. package/devices/waxman.js +0 -84
  2429. package/devices/waxman.js.map +0 -1
  2430. package/devices/weiser.d.ts +0 -3
  2431. package/devices/weiser.d.ts.map +0 -1
  2432. package/devices/weiser.js +0 -102
  2433. package/devices/weiser.js.map +0 -1
  2434. package/devices/weten.d.ts +0 -3
  2435. package/devices/weten.d.ts.map +0 -1
  2436. package/devices/weten.js +0 -88
  2437. package/devices/weten.js.map +0 -1
  2438. package/devices/wirenboard.d.ts +0 -3
  2439. package/devices/wirenboard.d.ts.map +0 -1
  2440. package/devices/wirenboard.js +0 -666
  2441. package/devices/wirenboard.js.map +0 -1
  2442. package/devices/wisdom.d.ts +0 -3
  2443. package/devices/wisdom.d.ts.map +0 -1
  2444. package/devices/wisdom.js +0 -47
  2445. package/devices/woolley.d.ts +0 -3
  2446. package/devices/woolley.d.ts.map +0 -1
  2447. package/devices/woolley.js +0 -87
  2448. package/devices/woolley.js.map +0 -1
  2449. package/devices/woox.d.ts +0 -3
  2450. package/devices/woox.d.ts.map +0 -1
  2451. package/devices/woox.js +0 -132
  2452. package/devices/woox.js.map +0 -1
  2453. package/devices/wyze.d.ts +0 -3
  2454. package/devices/wyze.d.ts.map +0 -1
  2455. package/devices/wyze.js +0 -62
  2456. package/devices/wyze.js.map +0 -1
  2457. package/devices/xal.d.ts +0 -3
  2458. package/devices/xal.d.ts.map +0 -1
  2459. package/devices/xal.js +0 -61
  2460. package/devices/xinghuoyuan.d.ts +0 -3
  2461. package/devices/xinghuoyuan.d.ts.map +0 -1
  2462. package/devices/xinghuoyuan.js +0 -47
  2463. package/devices/xyzroe.d.ts +0 -3
  2464. package/devices/xyzroe.d.ts.map +0 -1
  2465. package/devices/xyzroe.js +0 -518
  2466. package/devices/xyzroe.js.map +0 -1
  2467. package/devices/yale.d.ts +0 -3
  2468. package/devices/yale.d.ts.map +0 -1
  2469. package/devices/yale.js +0 -502
  2470. package/devices/yale.js.map +0 -1
  2471. package/devices/yandex.d.ts +0 -3
  2472. package/devices/yandex.d.ts.map +0 -1
  2473. package/devices/yandex.js +0 -442
  2474. package/devices/yandex.js.map +0 -1
  2475. package/devices/ynoa.d.ts +0 -3
  2476. package/devices/ynoa.d.ts.map +0 -1
  2477. package/devices/ynoa.js +0 -112
  2478. package/devices/ynoa.js.map +0 -1
  2479. package/devices/yokis.d.ts +0 -3
  2480. package/devices/yokis.d.ts.map +0 -1
  2481. package/devices/yokis.js +0 -2532
  2482. package/devices/yokis.js.map +0 -1
  2483. package/devices/yookee.d.ts +0 -3
  2484. package/devices/yookee.d.ts.map +0 -1
  2485. package/devices/yookee.js +0 -62
  2486. package/devices/yookee.js.map +0 -1
  2487. package/devices/ysrsai.d.ts +0 -3
  2488. package/devices/ysrsai.d.ts.map +0 -1
  2489. package/devices/ysrsai.js +0 -65
  2490. package/devices/zemismart.d.ts +0 -3
  2491. package/devices/zemismart.d.ts.map +0 -1
  2492. package/devices/zemismart.js +0 -391
  2493. package/devices/zemismart.js.map +0 -1
  2494. package/devices/zen.d.ts +0 -3
  2495. package/devices/zen.d.ts.map +0 -1
  2496. package/devices/zen.js +0 -95
  2497. package/devices/zen.js.map +0 -1
  2498. package/devices/zigbeetlc.js +0 -235
  2499. package/devices/zipato.d.ts +0 -3
  2500. package/devices/zipato.d.ts.map +0 -1
  2501. package/devices/zipato.js +0 -47
  2502. package/index.d.ts +0 -20
  2503. package/index.d.ts.map +0 -1
  2504. package/index.js +0 -526
  2505. package/index.js.map +0 -1
  2506. package/lib/color.d.ts +0 -271
  2507. package/lib/color.d.ts.map +0 -1
  2508. package/lib/color.js +0 -761
  2509. package/lib/color.js.map +0 -1
  2510. package/lib/configureKey.d.ts +0 -3
  2511. package/lib/configureKey.d.ts.map +0 -1
  2512. package/lib/configureKey.js +0 -938
  2513. package/lib/configureKey.js.map +0 -1
  2514. package/lib/constants.d.ts +0 -68
  2515. package/lib/constants.d.ts.map +0 -1
  2516. package/lib/constants.js +0 -264
  2517. package/lib/constants.js.map +0 -1
  2518. package/lib/develco.d.ts +0 -15
  2519. package/lib/develco.d.ts.map +0 -1
  2520. package/lib/develco.js +0 -183
  2521. package/lib/develco.js.map +0 -1
  2522. package/lib/ewelink.d.ts +0 -30
  2523. package/lib/ewelink.d.ts.map +0 -1
  2524. package/lib/ewelink.js +0 -718
  2525. package/lib/ewelink.js.map +0 -1
  2526. package/lib/exposes.d.ts +0 -360
  2527. package/lib/exposes.d.ts.map +0 -1
  2528. package/lib/exposes.js +0 -1085
  2529. package/lib/exposes.js.map +0 -1
  2530. package/lib/generateDefinition.d.ts +0 -6
  2531. package/lib/generateDefinition.d.ts.map +0 -1
  2532. package/lib/generateDefinition.js +0 -345
  2533. package/lib/generateDefinition.js.map +0 -1
  2534. package/lib/ikea.d.ts +0 -39
  2535. package/lib/ikea.d.ts.map +0 -1
  2536. package/lib/ikea.js +0 -787
  2537. package/lib/ikea.js.map +0 -1
  2538. package/lib/kelvinToXy.js +0 -1913
  2539. package/lib/kelvinToXy.js.map +0 -1
  2540. package/lib/ledvance.d.ts +0 -20
  2541. package/lib/ledvance.d.ts.map +0 -1
  2542. package/lib/ledvance.js +0 -103
  2543. package/lib/ledvance.js.map +0 -1
  2544. package/lib/legacy.d.ts +0 -5054
  2545. package/lib/legacy.d.ts.map +0 -1
  2546. package/lib/legacy.js +0 -6540
  2547. package/lib/legacy.js.map +0 -1
  2548. package/lib/legrand.d.ts +0 -69
  2549. package/lib/legrand.d.ts.map +0 -1
  2550. package/lib/legrand.js +0 -282
  2551. package/lib/legrand.js.map +0 -1
  2552. package/lib/light.d.ts +0 -8
  2553. package/lib/light.d.ts.map +0 -1
  2554. package/lib/light.js +0 -142
  2555. package/lib/light.js.map +0 -1
  2556. package/lib/logger.d.ts +0 -4
  2557. package/lib/logger.d.ts.map +0 -1
  2558. package/lib/logger.js +0 -14
  2559. package/lib/lumi.d.ts +0 -962
  2560. package/lib/lumi.d.ts.map +0 -1
  2561. package/lib/lumi.js +0 -5027
  2562. package/lib/lumi.js.map +0 -1
  2563. package/lib/modernExtend.d.ts +0 -325
  2564. package/lib/modernExtend.d.ts.map +0 -1
  2565. package/lib/modernExtend.js +0 -2015
  2566. package/lib/modernExtend.js.map +0 -1
  2567. package/lib/namron.d.ts +0 -56
  2568. package/lib/namron.d.ts.map +0 -1
  2569. package/lib/namron.js +0 -434
  2570. package/lib/namron.js.map +0 -1
  2571. package/lib/nodon.d.ts +0 -3
  2572. package/lib/nodon.d.ts.map +0 -1
  2573. package/lib/nodon.js +0 -130
  2574. package/lib/nodon.js.map +0 -1
  2575. package/lib/ota.d.ts +0 -71
  2576. package/lib/ota.d.ts.map +0 -1
  2577. package/lib/ota.js +0 -663
  2578. package/lib/ota.js.map +0 -1
  2579. package/lib/philips.d.ts +0 -249
  2580. package/lib/philips.d.ts.map +0 -1
  2581. package/lib/philips.js +0 -656
  2582. package/lib/philips.js.map +0 -1
  2583. package/lib/reporting.d.ts +0 -58
  2584. package/lib/reporting.d.ts.map +0 -1
  2585. package/lib/reporting.js +0 -285
  2586. package/lib/store.d.ts +0 -7
  2587. package/lib/store.d.ts.map +0 -1
  2588. package/lib/store.js +0 -51
  2589. package/lib/store.js.map +0 -1
  2590. package/lib/sunricher.d.ts +0 -13
  2591. package/lib/sunricher.d.ts.map +0 -1
  2592. package/lib/sunricher.js +0 -14
  2593. package/lib/tuya.d.ts +0 -786
  2594. package/lib/tuya.d.ts.map +0 -1
  2595. package/lib/tuya.js +0 -2415
  2596. package/lib/tuya.js.map +0 -1
  2597. package/lib/types.d.ts +0 -439
  2598. package/lib/types.d.ts.map +0 -1
  2599. package/lib/ubisys.d.ts +0 -19
  2600. package/lib/ubisys.d.ts.map +0 -1
  2601. package/lib/ubisys.js +0 -293
  2602. package/lib/ubisys.js.map +0 -1
  2603. package/lib/utils.d.ts +0 -93
  2604. package/lib/utils.d.ts.map +0 -1
  2605. package/lib/utils.js +0 -754
  2606. package/lib/utils.js.map +0 -1
  2607. package/lib/zosung.d.ts +0 -52
  2608. package/lib/zosung.d.ts.map +0 -1
  2609. package/lib/zosung.js +0 -253
  2610. package/lib/zosung.js.map +0 -1
  2611. package/models-index.json +0 -1
  2612. /package/{devices → dist/devices}/acuity_brands_lighting.js.map +0 -0
  2613. /package/{devices → dist/devices}/ajax_online.js.map +0 -0
  2614. /package/{devices → dist/devices}/alchemy.js.map +0 -0
  2615. /package/{devices → dist/devices}/anchor.js.map +0 -0
  2616. /package/{devices → dist/devices}/atsmart.js.map +0 -0
  2617. /package/{devices → dist/devices}/aubess.js.map +0 -0
  2618. /package/{devices → dist/devices}/automaton.js.map +0 -0
  2619. /package/{devices → dist/devices}/bankamp.js.map +0 -0
  2620. /package/{devices → dist/devices}/bega.js.map +0 -0
  2621. /package/{devices → dist/devices}/belkin.js.map +0 -0
  2622. /package/{devices → dist/devices}/bouffalo_lab.js.map +0 -0
  2623. /package/{devices → dist/devices}/bseed.js.map +0 -0
  2624. /package/{devices → dist/devices}/candeo.js.map +0 -0
  2625. /package/{devices → dist/devices}/chacon.js.map +0 -0
  2626. /package/{devices → dist/devices}/cleode.js.map +0 -0
  2627. /package/{devices → dist/devices}/commercial_electric.js.map +0 -0
  2628. /package/{devices → dist/devices}/cree.js.map +0 -0
  2629. /package/{devices → dist/devices}/cy_lighting.js.map +0 -0
  2630. /package/{devices → dist/devices}/digi.js.map +0 -0
  2631. /package/{devices → dist/devices}/direct_signs.js.map +0 -0
  2632. /package/{devices → dist/devices}/dnake.js.map +0 -0
  2633. /package/{devices → dist/devices}/dowsing_reynolds.js.map +0 -0
  2634. /package/{devices → dist/devices}/dresden_elektronik.js.map +0 -0
  2635. /package/{devices → dist/devices}/eatonhalo_led.js.map +0 -0
  2636. /package/{devices → dist/devices}/ecosmart.js.map +0 -0
  2637. /package/{devices → dist/devices}/enbrighten.js.map +0 -0
  2638. /package/{devices → dist/devices}/essentials.js.map +0 -0
  2639. /package/{devices → dist/devices}/eucontrols.js.map +0 -0
  2640. /package/{devices → dist/devices}/evanell.js.map +0 -0
  2641. /package/{devices → dist/devices}/evvr.js.map +0 -0
  2642. /package/{devices → dist/devices}/ezex.js.map +0 -0
  2643. /package/{devices → dist/devices}/frankever.js.map +0 -0
  2644. /package/{devices → dist/devices}/frient.js.map +0 -0
  2645. /package/{devices → dist/devices}/futurehome.js.map +0 -0
  2646. /package/{devices → dist/devices}/gidealed.js.map +0 -0
  2647. /package/{devices → dist/devices}/giderwel.js.map +0 -0
  2648. /package/{devices → dist/devices}/giex.js.map +0 -0
  2649. /package/{devices → dist/devices}/girier.js.map +0 -0
  2650. /package/{devices → dist/devices}/gmy.js.map +0 -0
  2651. /package/{devices → dist/devices}/gs.js.map +0 -0
  2652. /package/{devices → dist/devices}/gumax.js.map +0 -0
  2653. /package/{devices → dist/devices}/heatit.js.map +0 -0
  2654. /package/{devices → dist/devices}/hej.js.map +0 -0
  2655. /package/{devices → dist/devices}/hfh.js.map +0 -0
  2656. /package/{devices → dist/devices}/hilux.js.map +0 -0
  2657. /package/{devices → dist/devices}/hornbach.js.map +0 -0
  2658. /package/{devices → dist/devices}/idinio.js.map +0 -0
  2659. /package/{devices → dist/devices}/ikea.js.map +0 -0
  2660. /package/{devices → dist/devices}/ilightsin.js.map +0 -0
  2661. /package/{devices → dist/devices}/ilux.js.map +0 -0
  2662. /package/{devices → dist/devices}/imou.js.map +0 -0
  2663. /package/{devices → dist/devices}/index.d.ts +0 -0
  2664. /package/{devices → dist/devices}/index.d.ts.map +0 -0
  2665. /package/{devices → dist/devices}/iolloi.js.map +0 -0
  2666. /package/{devices → dist/devices}/istar.js.map +0 -0
  2667. /package/{devices → dist/devices}/jiawen.js.map +0 -0
  2668. /package/{devices → dist/devices}/jumitech.js.map +0 -0
  2669. /package/{devices → dist/devices}/klikaanklikuit.js.map +0 -0
  2670. /package/{devices → dist/devices}/ksentry.js.map +0 -0
  2671. /package/{devices → dist/devices}/lanesto.js.map +0 -0
  2672. /package/{devices → dist/devices}/lds.js.map +0 -0
  2673. /package/{devices → dist/devices}/ledvance.js.map +0 -0
  2674. /package/{devices → dist/devices}/letsled.js.map +0 -0
  2675. /package/{devices → dist/devices}/lg.js.map +0 -0
  2676. /package/{devices → dist/devices}/lightsolutions.js.map +0 -0
  2677. /package/{devices → dist/devices}/ls.js.map +0 -0
  2678. /package/{devices → dist/devices}/lubeez.js.map +0 -0
  2679. /package/{devices → dist/devices}/m_elec.js.map +0 -0
  2680. /package/{devices → dist/devices}/makegood.js.map +0 -0
  2681. /package/{devices → dist/devices}/matcall_bv.js.map +0 -0
  2682. /package/{devices → dist/devices}/micromatic.js.map +0 -0
  2683. /package/{devices → dist/devices}/modular.js.map +0 -0
  2684. /package/{devices → dist/devices}/nanoleaf.js.map +0 -0
  2685. /package/{devices → dist/devices}/nedis.js.map +0 -0
  2686. /package/{devices → dist/devices}/nexelec.js.map +0 -0
  2687. /package/{devices → dist/devices}/niviss.js.map +0 -0
  2688. /package/{devices → dist/devices}/nordtronic.js.map +0 -0
  2689. /package/{devices → dist/devices}/onenuo.js.map +0 -0
  2690. /package/{devices → dist/devices}/ozsmartthings.js.map +0 -0
  2691. /package/{devices → dist/devices}/philio.js.map +0 -0
  2692. /package/{devices → dist/devices}/quotra.js.map +0 -0
  2693. /package/{devices → dist/devices}/rademacher.js.map +0 -0
  2694. /package/{devices → dist/devices}/radium.js.map +0 -0
  2695. /package/{devices → dist/devices}/raex.js.map +0 -0
  2696. /package/{devices → dist/devices}/samotech.js.map +0 -0
  2697. /package/{devices → dist/devices}/sber.js.map +0 -0
  2698. /package/{devices → dist/devices}/scanproducts.js.map +0 -0
  2699. /package/{devices → dist/devices}/seastar_intelligence.js.map +0 -0
  2700. /package/{devices → dist/devices}/shenzhen_homa.js.map +0 -0
  2701. /package/{devices → dist/devices}/shyugj.js.map +0 -0
  2702. /package/{devices → dist/devices}/simon.js.map +0 -0
  2703. /package/{devices → dist/devices}/skydance.js.map +0 -0
  2704. /package/{devices → dist/devices}/slv.js.map +0 -0
  2705. /package/{devices → dist/devices}/smart_home_pty.js.map +0 -0
  2706. /package/{devices → dist/devices}/smlight.js.map +0 -0
  2707. /package/{devices → dist/devices}/solaredge.js.map +0 -0
  2708. /package/{devices → dist/devices}/soma.js.map +0 -0
  2709. /package/{devices → dist/devices}/sowilo.js.map +0 -0
  2710. /package/{devices → dist/devices}/spotmau.js.map +0 -0
  2711. /package/{devices → dist/devices}/tci.js.map +0 -0
  2712. /package/{devices → dist/devices}/tlwglobal.js.map +0 -0
  2713. /package/{devices → dist/devices}/vbled.js.map +0 -0
  2714. /package/{devices → dist/devices}/villeroy_boch.js.map +0 -0
  2715. /package/{devices → dist/devices}/vrey.js.map +0 -0
  2716. /package/{devices → dist/devices}/wisdom.js.map +0 -0
  2717. /package/{devices → dist/devices}/xal.js.map +0 -0
  2718. /package/{devices → dist/devices}/xinghuoyuan.js.map +0 -0
  2719. /package/{devices → dist/devices}/ysrsai.js.map +0 -0
  2720. /package/{devices → dist/devices}/zigbeetlc.d.ts +0 -0
  2721. /package/{devices → dist/devices}/zigbeetlc.d.ts.map +0 -0
  2722. /package/{devices → dist/devices}/zigbeetlc.js.map +0 -0
  2723. /package/{devices → dist/devices}/zipato.js.map +0 -0
  2724. /package/{lib → dist/lib}/kelvinToXy.d.ts +0 -0
  2725. /package/{lib → dist/lib}/kelvinToXy.d.ts.map +0 -0
  2726. /package/{lib → dist/lib}/logger.js.map +0 -0
  2727. /package/{lib → dist/lib}/reporting.js.map +0 -0
  2728. /package/{lib → dist/lib}/sunricher.js.map +0 -0
  2729. /package/{lib → dist/lib}/types.js +0 -0
  2730. /package/{lib → dist/lib}/types.js.map +0 -0
@@ -0,0 +1,4407 @@
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.thermostat_keypad_lockout = exports.thermostat_temperature_display_mode = exports.thermostat_programming_operation_mode = exports.thermostat_control_sequence_of_operation = exports.acova_thermostat_system_mode = exports.thermostat_system_mode = exports.thermostat_weekly_schedule = exports.thermostat_remote_sensing = exports.effect = exports.light_color_colortemp = exports.light_colortemp_startup = exports.light_onoff_brightness = exports.light_hue_saturation_move = exports.light_hue_saturation_step = exports.light_color_and_colortemp_via_color = exports.light_colortemp_move = exports.light_colortemp_step = exports.light_brightness_move = exports.light_brightness_step = exports.ballast_config = exports.level_config = exports.occupancy_timeout = exports.cover_mode = exports.cover_position_tilt = exports.cover_state = exports.squawk = exports.warning_simple = exports.ias_max_duration = exports.warning = exports.cover_via_brightness = exports.lock_userstatus = exports.pincode_lock = exports.lock_sound_volume = exports.lock_auto_relock_time = exports.lock = exports.light_color_options = exports.light_color_mode = exports.power_on_behavior = exports.battery_voltage = exports.battery_percentage_remaining = exports.arm_mode = exports.zcl_command = exports.identify = exports.factory_reset = exports.command = exports.write = exports.read = exports.light_colortemp = exports.light_color = exports.on_off = void 0;
37
+ exports.livolo_cover_position = exports.livolo_cover_state = exports.livolo_dimmer_level = exports.livolo_switch_on_off = exports.livolo_socket_switch_on_off = exports.elko_local_temperature_calibration = exports.elko_relay_state = exports.elko_power_status = exports.humidity = exports.temperature = exports.accurrent_phase_c = exports.accurrent_phase_b = exports.accurrent = exports.acvoltage_phase_c = exports.acvoltage_phase_b = exports.acvoltage = exports.powerfactor = exports.electrical_measurement_power_reactive = exports.frequency = exports.currentsummreceived = exports.currentsummdelivered = exports.metering_extended_status = exports.metering_status = exports.metering_power = exports.electrical_measurement_power_phase_c = exports.electrical_measurement_power_phase_b = exports.electrical_measurement_power = exports.thermostat_ac_louver_position = exports.thermostat_max_cool_setpoint_limit = exports.thermostat_min_cool_setpoint_limit = exports.thermostat_max_heat_setpoint_limit = exports.thermostat_min_heat_setpoint_limit = exports.thermostat_running_mode = exports.thermostat_relay_status_log = exports.thermostat_setpoint_raise_lower = exports.thermostat_unoccupied_cooling_setpoint = exports.thermostat_occupied_cooling_setpoint = exports.thermostat_unoccupied_heating_setpoint = exports.thermostat_occupied_heating_setpoint = exports.thermostat_running_state = exports.thermostat_pi_heating_demand = exports.thermostat_clear_weekly_schedule = exports.thermostat_occupancy = exports.thermostat_local_temperature_calibration = exports.thermostat_outdoor_temperature = exports.thermostat_local_temperature = exports.fan_speed = exports.fan_mode = exports.thermostat_temperature_setpoint_hold_duration = exports.thermostat_temperature_setpoint_hold = void 0;
38
+ exports.eurotronic_current_heating_setpoint = exports.eurotronic_error_status = exports.eurotronic_host_flags = exports.EMIZB_132_mode = exports.tuya_led_controller = exports.tuya_led_control = exports.easycode_auto_relock = exports.namron_thermostat_child_lock = exports.namron_thermostat = exports.ZMCSW032D_cover_position = exports.danfoss_multimaster_role = exports.danfoss_system_status_water = exports.danfoss_system_status_code = exports.danfoss_floor_max_setpoint = exports.danfoss_floor_min_setpoint = exports.danfoss_floor_sensor_mode = exports.danfoss_room_status_code = exports.danfoss_output_status = exports.danfoss_regulation_setpoint_offset = exports.danfoss_adaptation_control = exports.danfoss_adaptation_settings = exports.danfoss_adaptation_status = exports.danfoss_preheat_status = exports.danfoss_load_estimate = exports.danfoss_load_room_mean = exports.danfoss_load_balancing_enable = exports.danfoss_window_open_external = exports.danfoss_window_open_internal = exports.danfoss_window_open_feature = exports.danfoss_trigger_time = exports.danfoss_day_of_week = exports.danfoss_heat_required = exports.danfoss_heat_available = exports.danfoss_algorithm_scale_factor = exports.danfoss_viewing_direction = exports.danfoss_radiator_covered = exports.danfoss_external_measured_room_sensor = exports.danfoss_thermostat_vertical_orientation = exports.danfoss_mounted_mode_control = exports.danfoss_mounted_mode_active = exports.danfoss_thermostat_occupied_heating_setpoint_scheduled = exports.danfoss_thermostat_occupied_heating_setpoint = exports.hue_wall_switch_device_mode = exports.kmpcil_res005_on_off = exports.tuya_relay_din_led_indicator = exports.SPZ01_power_outage_memory = exports.STS_PRS_251_beep = exports.LS21001_alert_behaviour = exports.ZigUP_lock = exports.livolo_cover_options = void 0;
39
+ exports.wiser_dimmer_mode = exports.schneider_dimmer_mode = exports.schneider_pilot_mode = exports.idlock_relock_enabled = exports.idlock_lock_mode = exports.idlock_service_mode = exports.idlock_rfid_enable = exports.idlock_master_pin_mode = exports.dawondns_only_off = exports.viessmann_assembly_mode = exports.viessmann_window_open_force = exports.viessmann_window_open = exports.TS0210_sensitivity = exports.ZM35HQ_attr = exports.moes_cover_calibration = exports.tuya_cover_reversal = exports.tuya_cover_calibration = exports.ts0216_alarm = exports.ts0216_volume = exports.ts0216_duration = exports.TS0003_curtain_switch = exports.scene_rename = exports.scene_remove_all = exports.scene_remove = exports.scene_add = exports.scene_recall = exports.scene_store = exports.heiman_ir_remote = exports.ts0201_temperature_humidity_alarm = exports.power_source = exports.diyruz_zintercom_config = exports.diyruz_airsense_config = exports.diyruz_geiger_config = exports.TYZB01_on_off = exports.diyruz_freepad_on_off_config = exports.legrand_power_alarm = exports.legrand_pilot_wire_mode = exports.legrand_device_mode = exports.bticino_4027C_cover_position = exports.bticino_4027C_cover_state = exports.tint_scene = exports.ptvo_switch_analog_input = exports.ptvo_switch_uart = exports.ptvo_switch_trigger = exports.DTB190502A1_LED = exports.stelpro_thermostat_outdoor_temperature = exports.eurotronic_mirror_display = exports.eurotronic_child_lock = exports.eurotronic_trv_mode = exports.eurotronic_valve_position = void 0;
40
+ exports.TS110E_light_onoff_brightness = exports.TS110E_onoff_brightness = exports.TS110E_options = exports.ptvo_switch_light_brightness = exports.RM01_light_brightness_move = exports.RM01_light_brightness_step = exports.RM01_light_onoff_brightness = exports.light_onoff_restorable_brightness = exports.ignore_rate = exports.ignore_transition = exports.led_on_motion = exports.tuya_operation_mode = exports.sihas_set_people = exports.wiser_sed_thermostat_keypad_lockout = exports.wiser_sed_thermostat_local_temperature_calibration = exports.wiser_sed_occupied_heating_setpoint = exports.wiser_sed_zone_mode = exports.wiser_vact_calibrate_valve = exports.wiser_zone_mode = exports.wiser_hact_config = exports.wiser_fip_setting = exports.schneider_thermostat_keypad_lockout = exports.schneider_thermostat_pi_heating_demand = exports.schneider_thermostat_control_sequence_of_operation = exports.schneider_thermostat_occupied_heating_setpoint = exports.schneider_thermostat_system_mode = exports.schneider_temperature_measured_value = void 0;
41
+ const zigbee_herdsman_1 = require("zigbee-herdsman");
42
+ const libColor = __importStar(require("../lib/color"));
43
+ const constants = __importStar(require("../lib/constants"));
44
+ const exposes = __importStar(require("../lib/exposes"));
45
+ const legacy = __importStar(require("../lib/legacy"));
46
+ const light = __importStar(require("../lib/light"));
47
+ const logger_1 = require("../lib/logger");
48
+ const modernExtend_1 = require("../lib/modernExtend");
49
+ const globalStore = __importStar(require("../lib/store"));
50
+ const utils = __importStar(require("../lib/utils"));
51
+ const NS = "zhc:tz";
52
+ const manufacturerOptions = {
53
+ sunricher: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHENZHEN_SUNRICHER_TECHNOLOGY_LTD },
54
+ lumi: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.LUMI_UNITED_TECHOLOGY_LTD_SHENZHEN, disableDefaultResponse: true },
55
+ eurotronic: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NXP_SEMICONDUCTORS },
56
+ danfoss: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DANFOSS_A_S },
57
+ hue: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SIGNIFY_NETHERLANDS_B_V },
58
+ ikea: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.IKEA_OF_SWEDEN },
59
+ sinope: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SINOPE_TECHNOLOGIES },
60
+ tint: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.MUELLER_LICHT_INTERNATIONAL_INC },
61
+ legrand: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.LEGRAND_GROUP, disableDefaultResponse: true },
62
+ viessmann: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.VIESSMANN_ELEKTRONIK_GMBH },
63
+ };
64
+ exports.on_off = {
65
+ key: ["state", "on_time", "off_wait_time"],
66
+ convertSet: async (entity, key, value, meta) => {
67
+ const state = utils.isString(meta.message.state) ? meta.message.state.toLowerCase() : null;
68
+ utils.validateValue(state, ["toggle", "off", "on"]);
69
+ if (state === "on" && (meta.message.on_time !== undefined || meta.message.off_wait_time !== undefined)) {
70
+ const onTime = meta.message.on_time !== undefined ? meta.message.on_time : 0;
71
+ const offWaitTime = meta.message.off_wait_time !== undefined ? meta.message.off_wait_time : 0;
72
+ if (typeof onTime !== "number") {
73
+ throw Error("The on_time value must be a number!");
74
+ }
75
+ if (typeof offWaitTime !== "number") {
76
+ throw Error("The off_wait_time value must be a number!");
77
+ }
78
+ const payload = { ctrlbits: 0, ontime: Math.round(onTime * 10), offwaittime: Math.round(offWaitTime * 10) };
79
+ await entity.command("genOnOff", "onWithTimedOff", payload, utils.getOptions(meta.mapped, entity));
80
+ }
81
+ else {
82
+ await entity.command("genOnOff", state, {}, utils.getOptions(meta.mapped, entity));
83
+ if (state === "toggle") {
84
+ const currentState = meta.state[`state${meta.endpoint_name ? `_${meta.endpoint_name}` : ""}`];
85
+ return currentState ? { state: { state: currentState === "OFF" ? "ON" : "OFF" } } : {};
86
+ }
87
+ return { state: { state: state.toUpperCase() } };
88
+ }
89
+ },
90
+ convertGet: async (entity, key, meta) => {
91
+ await entity.read("genOnOff", ["onOff"]);
92
+ },
93
+ };
94
+ exports.light_color = {
95
+ key: ["color"],
96
+ options: [exposes.options.color_sync(), exposes.options.transition()],
97
+ convertSet: async (entity, key, value, meta) => {
98
+ let command;
99
+ const newColor = libColor.Color.fromConverterArg(value);
100
+ const newState = {};
101
+ const zclData = { transtime: utils.getTransition(entity, key, meta).time };
102
+ const supportsHueAndSaturation = utils.getMetaValue(entity, meta.mapped, "supportsHueAndSaturation", "allEqual", true);
103
+ const supportsEnhancedHue = utils.getMetaValue(entity, meta.mapped, "supportsEnhancedHue", "allEqual", true);
104
+ if (newColor.isHSV() && !supportsHueAndSaturation) {
105
+ // The color we got is HSV but the bulb does not support Hue/Saturation mode
106
+ throw new Error("This light does not support Hue/Saturation, please use X/Y instead.");
107
+ }
108
+ if (newColor.isRGB() || newColor.isXY()) {
109
+ // Convert RGB to XY color mode because Zigbee doesn't support RGB (only x/y and hue/saturation)
110
+ const xy = newColor.isRGB() ? newColor.rgb.gammaCorrected().toXY().rounded(4) : newColor.xy;
111
+ // Some bulbs e.g. RB 185 C don't turn to red (they don't respond at all) when x: 0.701 and y: 0.299
112
+ // is send. These values are e.g. send by Home Assistant when clicking red in the color wheel.
113
+ // If we slightly modify these values the bulb will respond.
114
+ // https://github.com/home-assistant/home-assistant/issues/31094
115
+ if (utils.getMetaValue(entity, meta.mapped, "applyRedFix", "allEqual", false) && xy.x === 0.701 && xy.y === 0.299) {
116
+ xy.x = 0.7006;
117
+ xy.y = 0.2993;
118
+ }
119
+ newState.color_mode = constants.colorModeLookup[1];
120
+ newState.color = xy.toObject();
121
+ zclData.colorx = utils.mapNumberRange(xy.x, 0, 1, 0, 65535);
122
+ zclData.colory = utils.mapNumberRange(xy.y, 0, 1, 0, 65535);
123
+ command = "moveToColor";
124
+ }
125
+ else if (newColor.isHSV()) {
126
+ const hsv = newColor.hsv;
127
+ const hsvCorrected = hsv.colorCorrected(meta);
128
+ newState.color_mode = constants.colorModeLookup[0];
129
+ newState.color = hsv.toObject(false);
130
+ if (hsv.hue !== null) {
131
+ if (supportsEnhancedHue) {
132
+ zclData.enhancehue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535);
133
+ }
134
+ else {
135
+ zclData.hue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 254);
136
+ }
137
+ // @ts-expect-error ignore
138
+ zclData.direction = value.direction || 0;
139
+ }
140
+ if (hsv.saturation != null) {
141
+ zclData.saturation = utils.mapNumberRange(hsvCorrected.saturation, 0, 100, 0, 254);
142
+ }
143
+ if (hsv.value !== null) {
144
+ // fallthrough to genLevelCtrl
145
+ // @ts-expect-error ignore
146
+ value.brightness = utils.mapNumberRange(hsvCorrected.value, 0, 100, 0, 254);
147
+ }
148
+ if (hsv.hue !== null && hsv.saturation !== null) {
149
+ if (supportsEnhancedHue) {
150
+ command = "enhancedMoveToHueAndSaturation";
151
+ }
152
+ else {
153
+ command = "moveToHueAndSaturation";
154
+ }
155
+ }
156
+ else if (hsv.hue !== null) {
157
+ if (supportsEnhancedHue) {
158
+ command = "enhancedMoveToHue";
159
+ }
160
+ else {
161
+ command = "moveToHue";
162
+ }
163
+ }
164
+ else if (hsv.saturation !== null) {
165
+ command = "moveToSaturation";
166
+ }
167
+ }
168
+ if (utils.isObject(value) && value.brightness !== undefined) {
169
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: Number(value.brightness), transtime: utils.getTransition(entity, key, meta).time }, utils.getOptions(meta.mapped, entity));
170
+ }
171
+ await entity.command("lightingColorCtrl", command, zclData, utils.getOptions(meta.mapped, entity));
172
+ return { state: libColor.syncColorState(newState, meta.state, entity, meta.options) };
173
+ },
174
+ convertGet: async (entity, key, meta) => {
175
+ await entity.read("lightingColorCtrl", light.readColorAttributes(entity, meta));
176
+ },
177
+ };
178
+ exports.light_colortemp = {
179
+ key: ["color_temp", "color_temp_percent"],
180
+ options: [exposes.options.color_sync(), exposes.options.transition()],
181
+ convertSet: async (entity, key, value, meta) => {
182
+ const [colorTempMin, colorTempMax] = light.findColorTempRange(entity);
183
+ const preset = { warmest: colorTempMax, warm: 454, neutral: 370, cool: 250, coolest: colorTempMin };
184
+ if (key === "color_temp_percent") {
185
+ utils.assertNumber(value);
186
+ value = utils
187
+ .mapNumberRange(value, 0, 100, colorTempMin != null ? colorTempMin : 154, colorTempMax != null ? colorTempMax : 500)
188
+ .toString();
189
+ }
190
+ if (utils.isString(value) && value in preset) {
191
+ value = utils.getFromLookup(value, preset);
192
+ }
193
+ value = Number(value);
194
+ // ensure value within range
195
+ utils.assertNumber(value);
196
+ value = light.clampColorTemp(value, colorTempMin, colorTempMax);
197
+ const payload = { colortemp: value, transtime: utils.getTransition(entity, key, meta).time };
198
+ await entity.command("lightingColorCtrl", "moveToColorTemp", payload, utils.getOptions(meta.mapped, entity));
199
+ return {
200
+ state: libColor.syncColorState({ color_mode: constants.colorModeLookup[2], color_temp: value }, meta.state, entity, meta.options),
201
+ };
202
+ },
203
+ convertGet: async (entity, key, meta) => {
204
+ await entity.read("lightingColorCtrl", ["colorMode", "colorTemperature"]);
205
+ },
206
+ };
207
+ // #region Generic converters
208
+ exports.read = {
209
+ key: ["read"],
210
+ convertSet: async (entity, key, value, meta) => {
211
+ utils.assertObject(value, key);
212
+ const result = await entity.read(value.cluster, value.attributes, value.options !== undefined ? value.options : {});
213
+ logger_1.logger.info(`Read result of '${value.cluster}': ${JSON.stringify(result)}`, NS);
214
+ if (value.state_property !== undefined) {
215
+ return { state: { [value.state_property]: result } };
216
+ }
217
+ },
218
+ };
219
+ exports.write = {
220
+ key: ["write"],
221
+ convertSet: async (entity, key, value, meta) => {
222
+ utils.assertObject(value, key);
223
+ const options = utils.getOptions(meta.mapped, entity);
224
+ if (value.options !== undefined) {
225
+ Object.assign(options, value.options);
226
+ }
227
+ await entity.write(value.cluster, value.payload, options);
228
+ logger_1.logger.info(`Wrote '${JSON.stringify(value.payload)}' to '${value.cluster}'`, NS);
229
+ },
230
+ };
231
+ exports.command = {
232
+ key: ["command"],
233
+ convertSet: async (entity, key, value, meta) => {
234
+ utils.assertObject(value, key);
235
+ const options = utils.getOptions(meta.mapped, entity);
236
+ await entity.command(value.cluster, value.command, value.payload !== undefined ? value.payload : {}, options);
237
+ logger_1.logger.info(`Invoked '${value.cluster}.${value.command}' with payload '${JSON.stringify(value.payload)}'`, NS);
238
+ },
239
+ };
240
+ exports.factory_reset = {
241
+ key: ["reset"],
242
+ convertSet: async (entity, key, value, meta) => {
243
+ await entity.command("genBasic", "resetFactDefault", {}, utils.getOptions(meta.mapped, entity));
244
+ },
245
+ };
246
+ exports.identify = {
247
+ key: ["identify"],
248
+ options: [exposes.options.identify_timeout()],
249
+ convertSet: async (entity, key, value, meta) => {
250
+ // External value takes priority over options for compatibility
251
+ const identifyTimeout = value ?? meta.options.identify_timeout ?? 3;
252
+ await entity.command("genIdentify", "identify", { identifytime: identifyTimeout }, utils.getOptions(meta.mapped, entity));
253
+ },
254
+ };
255
+ exports.zcl_command = {
256
+ key: ["zclcommand"],
257
+ convertSet: async (entity, key, value, meta) => {
258
+ utils.assertObject(value, key);
259
+ const payload = value.payload !== undefined ? value.payload : {};
260
+ utils.assertEndpoint(entity);
261
+ await entity.zclCommand(value.cluster, value.command, payload, value.options !== undefined ? value.options : {}, value.log_payload ?? {}, value.check_status ?? false, value.frametype ?? zigbee_herdsman_1.Zcl.FrameType.SPECIFIC);
262
+ if (value.logging ?? false) {
263
+ logger_1.logger.info(`Invoked ZCL command ${value.cluster}.${value.command} with payload '${JSON.stringify(payload)}'`, NS);
264
+ }
265
+ },
266
+ };
267
+ exports.arm_mode = {
268
+ key: ["arm_mode"],
269
+ convertSet: async (entity, key, value, meta) => {
270
+ utils.assertEndpoint(entity);
271
+ utils.assertObject(value, key);
272
+ if (Array.isArray(meta.mapped))
273
+ throw new Error("Not supported for groups");
274
+ const isNotification = value.transaction !== undefined;
275
+ const modeSrc = isNotification ? constants.armNotification : constants.armMode;
276
+ const mode = utils.getKey(modeSrc, value.mode, undefined, Number);
277
+ if (mode === undefined) {
278
+ throw new Error(`Unsupported mode: '${value.mode}', should be one of: ${Object.values(modeSrc)}`);
279
+ }
280
+ if (isNotification) {
281
+ await entity.commandResponse("ssIasAce", "armRsp", { armnotification: mode }, {}, value.transaction);
282
+ // Do not update PanelStatus after confirming transaction.
283
+ // Instead the server should send an arm_mode command with the necessary state.
284
+ // e.g. exit_delay as a result of arm_all_zones
285
+ return;
286
+ }
287
+ let panelStatus = mode;
288
+ if (meta.mapped.model === "3400-D") {
289
+ panelStatus = mode !== 0 && mode !== 4 ? 0x80 : 0x00;
290
+ }
291
+ globalStore.putValue(entity, "panelStatus", panelStatus);
292
+ const payload = { panelstatus: panelStatus, secondsremain: 0, audiblenotif: 0, alarmstatus: 0 };
293
+ await entity.commandResponse("ssIasAce", "panelStatusChanged", payload);
294
+ },
295
+ };
296
+ exports.battery_percentage_remaining = {
297
+ key: ["battery"],
298
+ convertGet: async (entity, key, meta) => {
299
+ await entity.read("genPowerCfg", ["batteryPercentageRemaining"]);
300
+ },
301
+ };
302
+ exports.battery_voltage = {
303
+ key: ["battery", "voltage"],
304
+ convertGet: async (entity, key, meta) => {
305
+ await entity.read("genPowerCfg", ["batteryVoltage"]);
306
+ },
307
+ };
308
+ exports.power_on_behavior = {
309
+ key: ["power_on_behavior"],
310
+ convertSet: async (entity, key, value, meta) => {
311
+ utils.assertString(value, key);
312
+ value = value.toLowerCase();
313
+ const lookup = { off: 0, on: 1, toggle: 2, previous: 255 };
314
+ try {
315
+ await entity.write("genOnOff", { startUpOnOff: utils.getFromLookup(value, lookup) }, utils.getOptions(meta.mapped, entity));
316
+ }
317
+ catch (e) {
318
+ if (e.message.includes("UNSUPPORTED_ATTRIBUTE")) {
319
+ throw new Error("Got `UNSUPPORTED_ATTRIBUTE` error, device does not support power on behaviour");
320
+ }
321
+ throw e;
322
+ }
323
+ return { state: { power_on_behavior: value } };
324
+ },
325
+ convertGet: async (entity, key, meta) => {
326
+ await entity.read("genOnOff", ["startUpOnOff"]);
327
+ },
328
+ };
329
+ exports.light_color_mode = {
330
+ key: ["color_mode"],
331
+ convertGet: async (entity, key, meta) => {
332
+ await entity.read("lightingColorCtrl", ["colorMode"]);
333
+ },
334
+ };
335
+ exports.light_color_options = {
336
+ key: ["color_options"],
337
+ convertSet: async (entity, key, value, meta) => {
338
+ utils.assertObject(value, key);
339
+ const options = value.execute_if_off !== undefined && value.execute_if_off ? 1 : 0;
340
+ await entity.write("lightingColorCtrl", { options }, utils.getOptions(meta.mapped, entity));
341
+ return { state: { color_options: value } };
342
+ },
343
+ convertGet: async (entity, key, meta) => {
344
+ await entity.read("lightingColorCtrl", ["options"]);
345
+ },
346
+ };
347
+ exports.lock = {
348
+ key: ["state"],
349
+ convertSet: async (entity, key, value, meta) => {
350
+ // If no pin code is provided, value is a only string. Ex: "UNLOCK"
351
+ let state = utils.isString(value) ? value.toUpperCase() : null;
352
+ let pincode = "";
353
+ // If pin code is provided, value is an object including new state and code. Ex: {state: "UNLOCK", code: "1234"}
354
+ if (utils.isObject(value)) {
355
+ if (value.code) {
356
+ pincode = utils.isString(value.code) ? value.code : "";
357
+ }
358
+ if (value.state) {
359
+ state = utils.isString(value.state) ? value.state.toUpperCase() : null;
360
+ }
361
+ }
362
+ utils.validateValue(state, ["LOCK", "UNLOCK", "TOGGLE"]);
363
+ await entity.command("closuresDoorLock", `${state.toLowerCase()}Door`, { pincodevalue: pincode }, utils.getOptions(meta.mapped, entity));
364
+ },
365
+ convertGet: async (entity, key, meta) => {
366
+ await entity.read("closuresDoorLock", ["lockState"]);
367
+ },
368
+ };
369
+ exports.lock_auto_relock_time = {
370
+ key: ["auto_relock_time"],
371
+ convertSet: async (entity, key, value, meta) => {
372
+ await entity.write("closuresDoorLock", { autoRelockTime: value }, utils.getOptions(meta.mapped, entity));
373
+ return { state: { auto_relock_time: value } };
374
+ },
375
+ convertGet: async (entity, key, meta) => {
376
+ await entity.read("closuresDoorLock", ["autoRelockTime"]);
377
+ },
378
+ };
379
+ exports.lock_sound_volume = {
380
+ key: ["sound_volume"],
381
+ convertSet: async (entity, key, value, meta) => {
382
+ utils.assertString(value, key);
383
+ utils.validateValue(value, constants.lockSoundVolume);
384
+ await entity.write("closuresDoorLock", { soundVolume: constants.lockSoundVolume.indexOf(value) }, utils.getOptions(meta.mapped, entity));
385
+ return { state: { sound_volume: value } };
386
+ },
387
+ convertGet: async (entity, key, meta) => {
388
+ await entity.read("closuresDoorLock", ["soundVolume"]);
389
+ },
390
+ };
391
+ exports.pincode_lock = {
392
+ key: ["pin_code"],
393
+ convertSet: async (entity, key, value, meta) => {
394
+ utils.assertObject(value, key);
395
+ const user = value.user;
396
+ const userType = value.user_type || "unrestricted";
397
+ const userEnabled = value.user_enabled !== undefined ? value.user_enabled : true;
398
+ const pinCode = value.pin_code;
399
+ if (Number.isNaN(user))
400
+ throw new Error("user must be numbers");
401
+ const pinCodeCount = utils.getMetaValue(entity, meta.mapped, "pinCodeCount");
402
+ if (!utils.isInRange(0, pinCodeCount - 1, user))
403
+ throw new Error("user must be in range for device");
404
+ if (pinCode == null) {
405
+ await entity.command("closuresDoorLock", "clearPinCode", { userid: user }, utils.getOptions(meta.mapped, entity));
406
+ }
407
+ else {
408
+ if (Number.isNaN(pinCode))
409
+ throw new Error("pinCode must be a number");
410
+ const typeLookup = { unrestricted: 0, year_day_schedule: 1, week_day_schedule: 2, master: 3, non_access: 4 };
411
+ const payload = {
412
+ userid: user,
413
+ userstatus: userEnabled ? 1 : 3,
414
+ usertype: utils.getFromLookup(userType, typeLookup),
415
+ pincodevalue: pinCode.toString(),
416
+ };
417
+ await entity.command("closuresDoorLock", "setPinCode", payload, utils.getOptions(meta.mapped, entity));
418
+ }
419
+ },
420
+ convertGet: async (entity, key, meta) => {
421
+ // @ts-expect-error ignore
422
+ const user = meta?.message?.pin_code ? meta.message.pin_code.user : undefined;
423
+ if (user === undefined) {
424
+ const max = utils.getMetaValue(entity, meta.mapped, "pinCodeCount");
425
+ // Get all
426
+ const options = utils.getOptions(meta.mapped, entity);
427
+ for (let i = 0; i < max; i++) {
428
+ await entity.command("closuresDoorLock", "getPinCode", { userid: i }, options);
429
+ }
430
+ }
431
+ else {
432
+ if (Number.isNaN(user)) {
433
+ throw new Error("user must be numbers");
434
+ }
435
+ const pinCodeCount = utils.getMetaValue(entity, meta.mapped, "pinCodeCount");
436
+ if (!utils.isInRange(0, pinCodeCount - 1, user)) {
437
+ throw new Error("userId must be in range for device");
438
+ }
439
+ await entity.command("closuresDoorLock", "getPinCode", { userid: user }, utils.getOptions(meta.mapped, entity));
440
+ }
441
+ },
442
+ };
443
+ exports.lock_userstatus = {
444
+ key: ["user_status"],
445
+ convertSet: async (entity, key, value, meta) => {
446
+ utils.assertObject(value, key);
447
+ const user = value.user;
448
+ if (Number.isNaN(user)) {
449
+ throw new Error("user must be numbers");
450
+ }
451
+ const pinCodeCount = utils.getMetaValue(entity, meta.mapped, "pinCodeCount");
452
+ if (!utils.isInRange(0, pinCodeCount - 1, user)) {
453
+ throw new Error("user must be in range for device");
454
+ }
455
+ const status = utils.getKey(constants.lockUserStatus, value.status, undefined, Number);
456
+ if (status === undefined) {
457
+ throw new Error(`Unsupported status: '${value.status}', should be one of: ${Object.values(constants.lockUserStatus)}`);
458
+ }
459
+ await entity.command("closuresDoorLock", "setUserStatus", {
460
+ userid: user,
461
+ userstatus: status,
462
+ }, utils.getOptions(meta.mapped, entity));
463
+ },
464
+ convertGet: async (entity, key, meta) => {
465
+ // @ts-expect-error ignore
466
+ const user = meta?.message?.user_status ? meta.message.user_status.user : undefined;
467
+ const pinCodeCount = utils.getMetaValue(entity, meta.mapped, "pinCodeCount");
468
+ if (user === undefined) {
469
+ const max = pinCodeCount;
470
+ // Get all
471
+ const options = utils.getOptions(meta.mapped, entity);
472
+ for (let i = 0; i < max; i++) {
473
+ await entity.command("closuresDoorLock", "getUserStatus", { userid: i }, options);
474
+ }
475
+ }
476
+ else {
477
+ if (Number.isNaN(user)) {
478
+ throw new Error("user must be numbers");
479
+ }
480
+ if (!utils.isInRange(0, pinCodeCount - 1, user)) {
481
+ throw new Error("userId must be in range for device");
482
+ }
483
+ await entity.command("closuresDoorLock", "getUserStatus", { userid: user }, utils.getOptions(meta.mapped, entity));
484
+ }
485
+ },
486
+ };
487
+ exports.cover_via_brightness = {
488
+ key: ["position", "state"],
489
+ options: [exposes.options.invert_cover()],
490
+ convertSet: async (entity, key, value, meta) => {
491
+ if (typeof value !== "number") {
492
+ utils.assertString(value, key);
493
+ value = value.toLowerCase();
494
+ if (value === "stop") {
495
+ await entity.command("genLevelCtrl", "stop", {}, utils.getOptions(meta.mapped, entity));
496
+ return;
497
+ }
498
+ const lookup = { open: 100, close: 0 };
499
+ value = utils.getFromLookup(value, lookup);
500
+ }
501
+ const invert = utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
502
+ ? !meta.options.invert_cover
503
+ : meta.options.invert_cover;
504
+ utils.assertNumber(value);
505
+ const position = invert ? 100 - value : value;
506
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: utils.mapNumberRange(Number(position), 0, 100, 0, 255).toString(), transtime: 0 }, utils.getOptions(meta.mapped, entity));
507
+ return { state: { position: value } };
508
+ },
509
+ convertGet: async (entity, key, meta) => {
510
+ await entity.read("genLevelCtrl", ["currentLevel"]);
511
+ },
512
+ };
513
+ exports.warning = {
514
+ key: ["warning"],
515
+ convertSet: async (entity, key, value, meta) => {
516
+ const mode = { stop: 0, burglar: 1, fire: 2, emergency: 3, police_panic: 4, fire_panic: 5, emergency_panic: 6 };
517
+ const level = { low: 0, medium: 1, high: 2, very_high: 3 };
518
+ const strobeLevel = { low: 0, medium: 1, high: 2, very_high: 3 };
519
+ const values = {
520
+ // @ts-expect-error ignore
521
+ mode: value.mode || "emergency",
522
+ // @ts-expect-error ignore
523
+ level: value.level || "medium",
524
+ // @ts-expect-error ignore
525
+ strobe: value.strobe !== undefined ? value.strobe : true,
526
+ // @ts-expect-error ignore
527
+ duration: value.duration !== undefined ? value.duration : 10,
528
+ // @ts-expect-error ignore
529
+ strobeDutyCycle: value.strobe_duty_cycle !== undefined ? value.strobe_duty_cycle * 10 : 0,
530
+ // @ts-expect-error ignore
531
+ strobeLevel: value.strobe_level !== undefined ? utils.getFromLookup(value.strobe_level, strobeLevel) : 1,
532
+ };
533
+ let info;
534
+ // https://github.com/Koenkk/zigbee2mqtt/issues/8310 some devices require the info to be reversed.
535
+ if (Array.isArray(meta.mapped))
536
+ throw new Error("Not supported for groups");
537
+ if (["SIRZB-110", "SRAC-23B-ZBSR", "AV2010/29A", "AV2010/24A"].includes(meta.mapped.model)) {
538
+ info = utils.getFromLookup(values.mode, mode) + ((values.strobe ? 1 : 0) << 4) + (utils.getFromLookup(values.level, level) << 6);
539
+ }
540
+ else {
541
+ info = (utils.getFromLookup(values.mode, mode) << 4) + ((values.strobe ? 1 : 0) << 2) + utils.getFromLookup(values.level, level);
542
+ }
543
+ await entity.command("ssIasWd", "startWarning", { startwarninginfo: info, warningduration: values.duration, strobedutycycle: values.strobeDutyCycle, strobelevel: values.strobeLevel }, utils.getOptions(meta.mapped, entity));
544
+ },
545
+ };
546
+ exports.ias_max_duration = {
547
+ key: ["max_duration"],
548
+ convertSet: async (entity, key, value, meta) => {
549
+ await entity.write("ssIasWd", { maxDuration: value });
550
+ return { state: { max_duration: value } };
551
+ },
552
+ convertGet: async (entity, key, meta) => {
553
+ await entity.read("ssIasWd", ["maxDuration"]);
554
+ },
555
+ };
556
+ exports.warning_simple = {
557
+ key: ["alarm"],
558
+ convertSet: async (entity, key, value, meta) => {
559
+ const alarmState = value === "alarm" || value === "OFF" ? 0 : 1;
560
+ let info;
561
+ // For Develco SMSZB-120 and HESZB-120, introduced change in fw 4.0.5, tested backward with 4.0.4
562
+ if (Array.isArray(meta.mapped))
563
+ throw new Error("Not supported for groups");
564
+ if (["SMSZB-120", "HESZB-120"].includes(meta.mapped.model)) {
565
+ info = (alarmState << 7) + (alarmState << 6);
566
+ }
567
+ else {
568
+ info = (3 << 6) + (alarmState << 2);
569
+ }
570
+ await entity.command("ssIasWd", "startWarning", { startwarninginfo: info, warningduration: 300, strobedutycycle: 0, strobelevel: 0 }, utils.getOptions(meta.mapped, entity));
571
+ },
572
+ };
573
+ exports.squawk = {
574
+ key: ["squawk"],
575
+ convertSet: async (entity, key, value, meta) => {
576
+ utils.assertObject(value, key);
577
+ const state = { system_is_armed: 0, system_is_disarmed: 1 };
578
+ const level = { low: 0, medium: 1, high: 2, very_high: 3 };
579
+ const values = {
580
+ state: value.state,
581
+ level: value.level || "very_high",
582
+ strobe: value.strobe !== undefined ? value.strobe : false,
583
+ };
584
+ const info = utils.getFromLookup(values.state, state) + ((values.strobe ? 1 : 0) << 4) + (utils.getFromLookup(values.level, level) << 6);
585
+ await entity.command("ssIasWd", "squawk", { squawkinfo: info }, utils.getOptions(meta.mapped, entity));
586
+ },
587
+ };
588
+ exports.cover_state = {
589
+ key: ["state"],
590
+ convertSet: async (entity, key, value, meta) => {
591
+ const lookup = { open: "upOpen", close: "downClose", stop: "stop", on: "upOpen", off: "downClose" };
592
+ utils.assertString(value, key);
593
+ value = value.toLowerCase();
594
+ await entity.command("closuresWindowCovering", utils.getFromLookup(value, lookup), {}, utils.getOptions(meta.mapped, entity));
595
+ },
596
+ };
597
+ exports.cover_position_tilt = {
598
+ key: ["position", "tilt"],
599
+ options: [exposes.options.invert_cover(), exposes.options.cover_position_tilt_disable_report()],
600
+ convertSet: async (entity, key, value, meta) => {
601
+ utils.assertNumber(value, key);
602
+ const isPosition = key === "position";
603
+ const invert = !(utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
604
+ ? !meta.options.invert_cover
605
+ : meta.options.invert_cover);
606
+ const disableReport = utils.getMetaValue(entity, meta.mapped, "coverPositionTiltDisableReport", "allEqual", false)
607
+ ? !meta.options.cover_position_tilt_disable_report
608
+ : meta.options.cover_position_tilt_disable_report;
609
+ const position = invert ? 100 - value : value;
610
+ // Zigbee officially expects 'open' to be 0 and 'closed' to be 100 whereas
611
+ // HomeAssistant etc. work the other way round.
612
+ // For zigbee-herdsman-converters: open = 100, close = 0
613
+ await entity.command("closuresWindowCovering", isPosition ? "goToLiftPercentage" : "goToTiltPercentage", isPosition ? { percentageliftvalue: position } : { percentagetiltvalue: position }, utils.getOptions(meta.mapped, entity));
614
+ if (disableReport) {
615
+ return;
616
+ }
617
+ return { state: { [isPosition ? "position" : "tilt"]: value } };
618
+ },
619
+ convertGet: async (entity, key, meta) => {
620
+ const isPosition = key === "position";
621
+ await entity.read("closuresWindowCovering", [isPosition ? "currentPositionLiftPercentage" : "currentPositionTiltPercentage"]);
622
+ },
623
+ };
624
+ exports.cover_mode = {
625
+ key: ["cover_mode"],
626
+ convertSet: async (entity, key, value, meta) => {
627
+ utils.assertObject(value, key);
628
+ const windowCoveringMode = ((value.reversed ? 1 : 0) << 0) | ((value.calibration ? 1 : 0) << 1) | ((value.maintenance ? 1 : 0) << 2) | ((value.led ? 1 : 0) << 3);
629
+ await entity.write("closuresWindowCovering", { windowCoveringMode }, utils.getOptions(meta.mapped, entity));
630
+ return { state: { cover_mode: value } };
631
+ },
632
+ convertGet: async (entity, key, meta) => {
633
+ await entity.read("closuresWindowCovering", ["windowCoveringMode"]);
634
+ },
635
+ };
636
+ exports.occupancy_timeout = {
637
+ // Sets delay after motion detector changes from occupied to unoccupied
638
+ key: ["occupancy_timeout"],
639
+ convertSet: async (entity, key, value, meta) => {
640
+ utils.assertNumber(value);
641
+ value *= 1;
642
+ await entity.write("msOccupancySensing", { pirOToUDelay: value }, utils.getOptions(meta.mapped, entity));
643
+ return { state: { occupancy_timeout: value } };
644
+ },
645
+ convertGet: async (entity, key, meta) => {
646
+ await entity.read("msOccupancySensing", ["pirOToUDelay"]);
647
+ },
648
+ };
649
+ exports.level_config = {
650
+ key: ["level_config"],
651
+ convertSet: async (entity, key, value, meta) => {
652
+ const state = {};
653
+ // parse payload to grab the keys
654
+ if (typeof value === "string") {
655
+ try {
656
+ value = JSON.parse(value);
657
+ }
658
+ catch {
659
+ throw new Error("Payload is not valid JSON");
660
+ }
661
+ }
662
+ utils.assertObject(value, key);
663
+ // onOffTransitionTime - range 0x0000 to 0xffff - optional
664
+ if (value.on_off_transition_time !== undefined) {
665
+ let onOffTransitionTimeValue = Number(value.on_off_transition_time);
666
+ if (onOffTransitionTimeValue > 65535)
667
+ onOffTransitionTimeValue = 65535;
668
+ if (onOffTransitionTimeValue < 0)
669
+ onOffTransitionTimeValue = 0;
670
+ await entity.write("genLevelCtrl", { onOffTransitionTime: onOffTransitionTimeValue }, utils.getOptions(meta.mapped, entity));
671
+ Object.assign(state, { on_off_transition_time: onOffTransitionTimeValue });
672
+ }
673
+ // onTransitionTime - range 0x0000 to 0xffff - optional
674
+ // 0xffff = use onOffTransitionTime
675
+ if (value.on_transition_time !== undefined) {
676
+ let onTransitionTimeValue = value.on_transition_time;
677
+ if (typeof onTransitionTimeValue === "string" && onTransitionTimeValue.toLowerCase() === "disabled") {
678
+ onTransitionTimeValue = 65535;
679
+ }
680
+ else {
681
+ onTransitionTimeValue = Number(onTransitionTimeValue);
682
+ }
683
+ if (onTransitionTimeValue > 65535)
684
+ onTransitionTimeValue = 65534;
685
+ if (onTransitionTimeValue < 0)
686
+ onTransitionTimeValue = 0;
687
+ await entity.write("genLevelCtrl", { onTransitionTime: onTransitionTimeValue }, utils.getOptions(meta.mapped, entity));
688
+ // reverse translate number -> preset
689
+ if (onTransitionTimeValue === 65535) {
690
+ onTransitionTimeValue = "disabled";
691
+ }
692
+ Object.assign(state, { on_transition_time: onTransitionTimeValue });
693
+ }
694
+ // offTransitionTime - range 0x0000 to 0xffff - optional
695
+ // 0xffff = use onOffTransitionTime
696
+ if (value.off_transition_time !== undefined) {
697
+ let offTransitionTimeValue = value.off_transition_time;
698
+ if (typeof offTransitionTimeValue === "string" && offTransitionTimeValue.toLowerCase() === "disabled") {
699
+ offTransitionTimeValue = 65535;
700
+ }
701
+ else {
702
+ offTransitionTimeValue = Number(offTransitionTimeValue);
703
+ }
704
+ if (offTransitionTimeValue > 65535)
705
+ offTransitionTimeValue = 65534;
706
+ if (offTransitionTimeValue < 0)
707
+ offTransitionTimeValue = 0;
708
+ await entity.write("genLevelCtrl", { offTransitionTime: offTransitionTimeValue }, utils.getOptions(meta.mapped, entity));
709
+ // reverse translate number -> preset
710
+ if (offTransitionTimeValue === 65535) {
711
+ offTransitionTimeValue = "disabled";
712
+ }
713
+ Object.assign(state, { off_transition_time: offTransitionTimeValue });
714
+ }
715
+ // startUpCurrentLevel - range 0x00 to 0xff - optional
716
+ // 0x00 = return to minimum supported level
717
+ // 0xff = return to previous previous
718
+ if (value.current_level_startup !== undefined) {
719
+ let startUpCurrentLevelValue = value.current_level_startup;
720
+ if (typeof startUpCurrentLevelValue === "string" && startUpCurrentLevelValue.toLowerCase() === "previous") {
721
+ startUpCurrentLevelValue = 255;
722
+ }
723
+ else if (typeof startUpCurrentLevelValue === "string" && startUpCurrentLevelValue.toLowerCase() === "minimum") {
724
+ startUpCurrentLevelValue = 0;
725
+ }
726
+ else {
727
+ startUpCurrentLevelValue = Number(startUpCurrentLevelValue);
728
+ }
729
+ if (startUpCurrentLevelValue > 255)
730
+ startUpCurrentLevelValue = 254;
731
+ if (startUpCurrentLevelValue < 0)
732
+ startUpCurrentLevelValue = 1;
733
+ await entity.write("genLevelCtrl", { startUpCurrentLevel: startUpCurrentLevelValue }, utils.getOptions(meta.mapped, entity));
734
+ // reverse translate number -> preset
735
+ if (startUpCurrentLevelValue === 255) {
736
+ startUpCurrentLevelValue = "previous";
737
+ }
738
+ if (startUpCurrentLevelValue === 0) {
739
+ startUpCurrentLevelValue = "minimum";
740
+ }
741
+ Object.assign(state, { current_level_startup: startUpCurrentLevelValue });
742
+ }
743
+ // onLevel - range 0x00 to 0xff - optional
744
+ // Any value outside of MinLevel to MaxLevel, including 0xff and 0x00, is interpreted as "previous".
745
+ if (value.on_level !== undefined) {
746
+ let onLevel = value.on_level;
747
+ if (typeof onLevel === "string" && onLevel.toLowerCase() === "previous") {
748
+ onLevel = 255;
749
+ }
750
+ else {
751
+ onLevel = Number(onLevel);
752
+ }
753
+ if (onLevel > 255)
754
+ onLevel = 254;
755
+ if (onLevel < 1)
756
+ onLevel = 1;
757
+ await entity.write("genLevelCtrl", { onLevel }, utils.getOptions(meta.mapped, entity));
758
+ Object.assign(state, { on_level: onLevel === 255 ? "previous" : onLevel });
759
+ }
760
+ // options - 8-bit map
761
+ // bit 0: ExecuteIfOff - when 0, Move commands are ignored if the device is off;
762
+ // when 1, CurrentLevel can be changed while the device is off.
763
+ // bit 1: CoupleColorTempToLevel - when 1, changes to level also change color temperature.
764
+ // (What this means is not defined, but it's most likely to be "dim to warm".)
765
+ if (value.execute_if_off !== undefined) {
766
+ const executeIfOffValue = !!value.execute_if_off;
767
+ await entity.write("genLevelCtrl", { options: executeIfOffValue ? 1 : 0 }, utils.getOptions(meta.mapped, entity));
768
+ Object.assign(state, { execute_if_off: executeIfOffValue });
769
+ }
770
+ if (Object.keys(state).length > 0) {
771
+ return { state: { level_config: state } };
772
+ }
773
+ },
774
+ convertGet: async (entity, key, meta) => {
775
+ for (const attribute of ["onOffTransitionTime", "onTransitionTime", "offTransitionTime", "startUpCurrentLevel", "onLevel", "options"]) {
776
+ try {
777
+ await entity.read("genLevelCtrl", [attribute]);
778
+ }
779
+ catch {
780
+ // continue regardless of error, all these are optional in ZCL
781
+ }
782
+ }
783
+ },
784
+ };
785
+ exports.ballast_config = {
786
+ key: ["ballast_config", "ballast_minimum_level", "ballast_maximum_level", "ballast_power_on_level"],
787
+ // zcl attribute names are camel case, but we want to use snake case in the outside communication
788
+ convertSet: async (entity, key, value, meta) => {
789
+ if (key === "ballast_config") {
790
+ value = utils.toCamelCase(value);
791
+ for (const [attrName, attrValue] of Object.entries(value)) {
792
+ const attributes = { [attrName]: attrValue };
793
+ await entity.write("lightingBallastCfg", attributes);
794
+ }
795
+ }
796
+ if (key === "ballast_minimum_level") {
797
+ await entity.write("lightingBallastCfg", { minLevel: value });
798
+ }
799
+ if (key === "ballast_maximum_level") {
800
+ await entity.write("lightingBallastCfg", { maxLevel: value });
801
+ }
802
+ if (key === "ballast_power_on_level") {
803
+ await entity.write("lightingBallastCfg", { powerOnLevel: value });
804
+ }
805
+ return { state: { [key]: value } };
806
+ },
807
+ convertGet: async (entity, key, meta) => {
808
+ let result = {};
809
+ for (const attrName of [
810
+ "ballast_status",
811
+ "min_level",
812
+ "max_level",
813
+ "power_on_level",
814
+ "power_on_fade_time",
815
+ "intrinsic_ballast_factor",
816
+ "ballast_factor_adjustment",
817
+ "lamp_quantity",
818
+ "lamp_type",
819
+ "lamp_manufacturer",
820
+ "lamp_rated_hours",
821
+ "lamp_burn_hours",
822
+ "lamp_alarm_mode",
823
+ "lamp_burn_hours_trip_point",
824
+ ]) {
825
+ try {
826
+ // @ts-expect-error ignore
827
+ result = { ...result, ...(await entity.read("lightingBallastCfg", [utils.toCamelCase(attrName)])) };
828
+ }
829
+ catch {
830
+ // continue regardless of error
831
+ }
832
+ }
833
+ if (key === "ballast_config") {
834
+ logger_1.logger.debug(`ballast_config attribute results received: ${JSON.stringify(utils.toSnakeCase(result))}`, NS);
835
+ }
836
+ },
837
+ };
838
+ exports.light_brightness_step = {
839
+ key: ["brightness_step", "brightness_step_onoff"],
840
+ options: [exposes.options.transition()],
841
+ convertSet: async (entity, key, value, meta) => {
842
+ const onOff = key.endsWith("_onoff");
843
+ const command = onOff ? "stepWithOnOff" : "step";
844
+ value = Number(value);
845
+ utils.assertNumber(value, key);
846
+ const mode = value > 0 ? 0 : 1;
847
+ const transition = utils.getTransition(entity, key, meta).time;
848
+ const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition };
849
+ await entity.command("genLevelCtrl", command, payload, utils.getOptions(meta.mapped, entity));
850
+ if (meta.state.brightness !== undefined) {
851
+ utils.assertNumber(meta.state.brightness);
852
+ let brightness = onOff || meta.state.state === "ON" ? meta.state.brightness + value : meta.state.brightness;
853
+ if (value === 0) {
854
+ const entityToRead = utils.getEntityOrFirstGroupMember(entity);
855
+ if (entityToRead) {
856
+ brightness = (await entityToRead.read("genLevelCtrl", ["currentLevel"])).currentLevel;
857
+ }
858
+ }
859
+ brightness = Math.min(254, brightness);
860
+ brightness = Math.max(onOff || meta.state.state === "OFF" ? 0 : 1, brightness);
861
+ if (utils.getMetaValue(entity, meta.mapped, "turnsOffAtBrightness1", "allEqual", false)) {
862
+ if (onOff && value < 0 && brightness === 1) {
863
+ brightness = 0;
864
+ }
865
+ else if (onOff && value > 0 && meta.state.brightness === 0) {
866
+ brightness++;
867
+ }
868
+ }
869
+ return { state: { brightness, state: brightness === 0 ? "OFF" : "ON" } };
870
+ }
871
+ },
872
+ };
873
+ exports.light_brightness_move = {
874
+ key: ["brightness_move", "brightness_move_onoff"],
875
+ convertSet: async (entity, key, value, meta) => {
876
+ if (value === "stop" || value === 0) {
877
+ await entity.command("genLevelCtrl", "stop", {}, utils.getOptions(meta.mapped, entity));
878
+ // As we cannot determine the new brightness state, we read it from the device
879
+ await utils.sleep(500);
880
+ const target = utils.getEntityOrFirstGroupMember(entity);
881
+ const onOff = (await target.read("genOnOff", ["onOff"])).onOff;
882
+ const brightness = (await target.read("genLevelCtrl", ["currentLevel"])).currentLevel;
883
+ return { state: { brightness, state: onOff === 1 ? "ON" : "OFF" } };
884
+ }
885
+ value = Number(value);
886
+ utils.assertNumber(value, key);
887
+ const payload = { movemode: value > 0 ? 0 : 1, rate: Math.abs(value) };
888
+ const command = key.endsWith("onoff") ? "moveWithOnOff" : "move";
889
+ await entity.command("genLevelCtrl", command, payload, utils.getOptions(meta.mapped, entity));
890
+ },
891
+ };
892
+ exports.light_colortemp_step = {
893
+ key: ["color_temp_step"],
894
+ options: [exposes.options.transition()],
895
+ convertSet: async (entity, key, value, meta) => {
896
+ value = Number(value);
897
+ utils.assertNumber(value, key);
898
+ const mode = value > 0 ? 1 : 3;
899
+ const transition = utils.getTransition(entity, key, meta).time;
900
+ const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition, minimum: 0, maximum: 600 };
901
+ await entity.command("lightingColorCtrl", "stepColorTemp", payload, utils.getOptions(meta.mapped, entity));
902
+ // We cannot determine the color temperature from the current state so we read it, because
903
+ // - We don't know the max/min values
904
+ // - Color mode could have been switched (x/y or hue/saturation)
905
+ const entityToRead = utils.getEntityOrFirstGroupMember(entity);
906
+ if (entityToRead) {
907
+ await utils.sleep(100 + transition * 100);
908
+ await entityToRead.read("lightingColorCtrl", ["colorTemperature"]);
909
+ }
910
+ },
911
+ };
912
+ exports.light_colortemp_move = {
913
+ key: ["colortemp_move", "color_temp_move"],
914
+ convertSet: async (entity, key, value, meta) => {
915
+ if (key === "color_temp_move" && (value === "stop" || utils.isNumber(value))) {
916
+ value = value === "stop" ? value : Number(value);
917
+ const payload = { minimum: 0, maximum: 600 };
918
+ if (value === "stop" || value === 0) {
919
+ payload.rate = 1;
920
+ payload.movemode = 0;
921
+ }
922
+ else {
923
+ utils.assertNumber(value, key);
924
+ payload.rate = Math.abs(value);
925
+ payload.movemode = value > 0 ? 1 : 3;
926
+ }
927
+ await entity.command("lightingColorCtrl", "moveColorTemp", payload, utils.getOptions(meta.mapped, entity));
928
+ // We cannot determine the color temperaturefrom the current state so we read it, because
929
+ // - Color mode could have been switched (x/y or colortemp)
930
+ if (value === "stop" || value === 0) {
931
+ const entityToRead = utils.getEntityOrFirstGroupMember(entity);
932
+ if (entityToRead) {
933
+ await utils.sleep(100);
934
+ await entityToRead.read("lightingColorCtrl", ["colorTemperature", "colorMode"]);
935
+ }
936
+ }
937
+ }
938
+ else {
939
+ // Deprecated
940
+ const payload = { minimum: 153, maximum: 370, rate: 55 };
941
+ const stop = (val) => ["stop", "release", "0"].some((el) => val.includes(el));
942
+ const up = (val) => ["1", "up"].some((el) => val.includes(el));
943
+ const arr = [value.toString()];
944
+ const moverate = meta.message.rate !== undefined ? Number(meta.message.rate) : 55;
945
+ payload.rate = moverate;
946
+ if (arr.filter(stop).length) {
947
+ payload.movemode = 0;
948
+ }
949
+ else {
950
+ payload.movemode = arr.filter(up).length ? 1 : 3;
951
+ }
952
+ await entity.command("lightingColorCtrl", "moveColorTemp", payload, utils.getOptions(meta.mapped, entity));
953
+ }
954
+ },
955
+ };
956
+ exports.light_color_and_colortemp_via_color = {
957
+ key: ["color", "color_temp", "color_temp_percent"],
958
+ options: [exposes.options.color_sync(), exposes.options.transition()],
959
+ convertSet: async (entity, key, value, meta) => {
960
+ if (key === "color") {
961
+ return await exports.light_color.convertSet(entity, key, value, meta);
962
+ }
963
+ if (key === "color_temp" || key === "color_temp_percent") {
964
+ utils.assertNumber(value);
965
+ const xy = libColor.ColorXY.fromMireds(value);
966
+ const payload = {
967
+ transtime: utils.getTransition(entity, key, meta).time,
968
+ colorx: utils.mapNumberRange(xy.x, 0, 1, 0, 65535),
969
+ colory: utils.mapNumberRange(xy.y, 0, 1, 0, 65535),
970
+ };
971
+ await entity.command("lightingColorCtrl", "moveToColor", payload, utils.getOptions(meta.mapped, entity));
972
+ return {
973
+ state: libColor.syncColorState({ color_mode: constants.colorModeLookup[2], color_temp: value }, meta.state, entity, meta.options),
974
+ };
975
+ }
976
+ },
977
+ convertGet: async (entity, key, meta) => {
978
+ await entity.read("lightingColorCtrl", light.readColorAttributes(entity, meta));
979
+ },
980
+ };
981
+ exports.light_hue_saturation_step = {
982
+ key: ["hue_step", "saturation_step"],
983
+ options: [exposes.options.transition()],
984
+ convertSet: async (entity, key, value, meta) => {
985
+ value = Number(value);
986
+ utils.assertNumber(value, key);
987
+ const command = key === "hue_step" ? "stepHue" : "stepSaturation";
988
+ const attribute = key === "hue_step" ? "currentHue" : "currentSaturation";
989
+ const mode = value > 0 ? 1 : 3;
990
+ const transition = utils.getTransition(entity, key, meta).time;
991
+ const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition };
992
+ await entity.command("lightingColorCtrl", command, payload, utils.getOptions(meta.mapped, entity));
993
+ // We cannot determine the hue/saturation from the current state so we read it, because
994
+ // - Color mode could have been switched (x/y or colortemp)
995
+ const entityToRead = utils.getEntityOrFirstGroupMember(entity);
996
+ if (entityToRead) {
997
+ await utils.sleep(100 + transition * 100);
998
+ await entityToRead.read("lightingColorCtrl", [attribute, "colorMode"]);
999
+ }
1000
+ },
1001
+ };
1002
+ exports.light_hue_saturation_move = {
1003
+ key: ["hue_move", "saturation_move"],
1004
+ convertSet: async (entity, key, value, meta) => {
1005
+ value = value === "stop" ? value : Number(value);
1006
+ const command = key === "hue_move" ? "moveHue" : "moveSaturation";
1007
+ const attribute = key === "hue_move" ? "currentHue" : "currentSaturation";
1008
+ const payload = {};
1009
+ if (value === "stop" || value === 0) {
1010
+ payload.rate = 1;
1011
+ payload.movemode = 0;
1012
+ }
1013
+ else {
1014
+ utils.assertNumber(value, key);
1015
+ payload.rate = Math.abs(value);
1016
+ payload.movemode = value > 0 ? 1 : 3;
1017
+ }
1018
+ await entity.command("lightingColorCtrl", command, payload, utils.getOptions(meta.mapped, entity));
1019
+ // We cannot determine the hue/saturation from the current state so we read it, because
1020
+ // - Color mode could have been switched (x/y or colortemp)
1021
+ if (value === "stop" || value === 0) {
1022
+ const entityToRead = utils.getEntityOrFirstGroupMember(entity);
1023
+ if (entityToRead) {
1024
+ await utils.sleep(100);
1025
+ await entityToRead.read("lightingColorCtrl", [attribute, "colorMode"]);
1026
+ }
1027
+ }
1028
+ },
1029
+ };
1030
+ exports.light_onoff_brightness = {
1031
+ key: ["state", "brightness", "brightness_percent"],
1032
+ options: [exposes.options.transition()],
1033
+ convertSet: async (entity, key, value, meta) => {
1034
+ const { message } = meta;
1035
+ const transition = utils.getTransition(entity, "brightness", meta);
1036
+ const turnsOffAtBrightness1 = utils.getMetaValue(entity, meta.mapped, "turnsOffAtBrightness1", "allEqual", false);
1037
+ let state = message.state !== undefined ? (typeof message.state === "string" ? message.state.toLowerCase() : null) : undefined;
1038
+ let brightness = undefined;
1039
+ if (message.brightness !== undefined) {
1040
+ brightness = Number(message.brightness);
1041
+ }
1042
+ else if (message.brightness_percent !== undefined) {
1043
+ brightness = utils.mapNumberRange(Number(message.brightness_percent), 0, 100, 0, 255);
1044
+ }
1045
+ if (brightness === 255) {
1046
+ // Allow 255 for backwards compatibility.
1047
+ brightness = 254;
1048
+ }
1049
+ if (brightness !== undefined && (Number.isNaN(brightness) || brightness < 0 || brightness > 254)) {
1050
+ throw new Error(`Brightness value of message: '${JSON.stringify(message)}' invalid, must be a number >= 0 and =< 254`);
1051
+ }
1052
+ if (state !== undefined && state !== null && ["on", "off", "toggle"].includes(state) === false) {
1053
+ throw new Error(`State value of message: '${JSON.stringify(message)}' invalid, must be 'ON', 'OFF' or 'TOGGLE'`);
1054
+ }
1055
+ if ((state === undefined || state === null) && brightness === undefined) {
1056
+ throw new Error(`At least one of "brightness" or "state" must have a value: '${JSON.stringify(message)}'`);
1057
+ }
1058
+ // Infer state from desired brightness if unset. Ideally we'd want to keep it as it is, but this code has always
1059
+ // used 'MoveToLevelWithOnOff' so that'd break backwards compatibility. To keep the state, the user
1060
+ // has to explicitly set it to null.
1061
+ if (state === undefined) {
1062
+ // Also write to `meta.message.state` in case we delegate to the `on_off` converter.
1063
+ state = meta.message.state = brightness === 0 ? "off" : "on";
1064
+ }
1065
+ let publishBrightness = brightness !== undefined;
1066
+ const targetState = state === "toggle" ? (meta.state.state === "ON" ? "off" : "on") : state;
1067
+ if (targetState === "off") {
1068
+ // Simulate 'Off' with transition via 'MoveToLevelWithOnOff', otherwise just use 'Off'.
1069
+ // TODO: if this is a group where some members don't support Level Control, turning them off
1070
+ // with transition may have no effect. (Some devices, such as Envilar ZG302-BOX-RELAY, handle
1071
+ // 'MoveToLevelWithOnOff' despite not supporting the cluster; others, like the LEDVANCE SMART+
1072
+ // plug, do not.)
1073
+ brightness = transition.specified || brightness === 0 ? 0 : undefined;
1074
+ if (brightness !== undefined &&
1075
+ meta.state.state === "OFF" &&
1076
+ utils.getMetaValue(entity, meta.mapped, "noOffTransitionWhenOff", { atLeastOnce: true }, false)) {
1077
+ logger_1.logger.debug("Supressing OFF transition since entity is OFF and has noOffTransitionWhenOff=true", NS);
1078
+ brightness = undefined;
1079
+ }
1080
+ if (meta.state.brightness !== undefined && meta.state.state === "ON") {
1081
+ // The light's current level gets clobbered in two cases:
1082
+ // 1. when 'Off' has a transition, in which case it is really 'MoveToLevelWithOnOff'
1083
+ // https://github.com/Koenkk/zigbee-herdsman-converters/issues/1073
1084
+ // 2. when 'OnLevel' is set: "If OnLevel is not defined, set the CurrentLevel to the stored level."
1085
+ // https://github.com/Koenkk/zigbee2mqtt/issues/2850#issuecomment-580365633
1086
+ // We need to remember current brightness in case the next 'On' does not provide it. `meta` is not reliable
1087
+ // here, as it will get clobbered too if reporting is configured.
1088
+ globalStore.putValue(entity, "brightness", meta.state.brightness);
1089
+ globalStore.putValue(entity, "turnedOffWithTransition", brightness !== undefined);
1090
+ }
1091
+ }
1092
+ else if (targetState === "on" && brightness === undefined) {
1093
+ // Simulate 'On' with transition via 'MoveToLevelWithOnOff', or restore the level from before
1094
+ // it was clobbered by a previous transition to off; otherwise just use 'On'.
1095
+ // TODO: same problem as above.
1096
+ // TODO: if transition is not specified, should use device default (OnTransitionTime), not 0.
1097
+ if (transition.specified || globalStore.getValue(entity, "turnedOffWithTransition") === true) {
1098
+ const levelConfig = utils.getObjectProperty(meta.state, "level_config", {});
1099
+ let onLevel = utils.getObjectProperty(levelConfig, "on_level", 0);
1100
+ if (onLevel === 0 && entity.meta.onLevelSupported !== false) {
1101
+ try {
1102
+ const attributeRead = await entity.read("genLevelCtrl", ["onLevel"]);
1103
+ if (attributeRead !== undefined) {
1104
+ // @ts-expect-error ignore
1105
+ onLevel = attributeRead.onLevel;
1106
+ }
1107
+ }
1108
+ catch {
1109
+ // OnLevel not supported
1110
+ }
1111
+ }
1112
+ if (onLevel === 0) {
1113
+ onLevel = "previous";
1114
+ entity.meta.onLevelSupported = false;
1115
+ entity.save();
1116
+ }
1117
+ if (onLevel === 255 || onLevel === "previous") {
1118
+ const current = utils.getObjectProperty(meta.state, "brightness", 254);
1119
+ brightness = globalStore.getValue(entity, "brightness", current);
1120
+ }
1121
+ else {
1122
+ brightness = onLevel;
1123
+ }
1124
+ // Published state might have gotten clobbered by reporting.
1125
+ publishBrightness = true;
1126
+ }
1127
+ }
1128
+ if (brightness === undefined) {
1129
+ const result = (await exports.on_off.convertSet(entity, "state", state, meta));
1130
+ if (result) {
1131
+ if (result.state && result.state.state === "ON" && meta.state.brightness === 0) {
1132
+ result.state.brightness = 1;
1133
+ }
1134
+ }
1135
+ return result;
1136
+ }
1137
+ if (brightness === 0 && (targetState === "on" || state === null)) {
1138
+ brightness = 1;
1139
+ }
1140
+ if (brightness === 1 && turnsOffAtBrightness1) {
1141
+ brightness = 2;
1142
+ }
1143
+ if (targetState !== "off") {
1144
+ globalStore.putValue(entity, "brightness", brightness);
1145
+ globalStore.clearValue(entity, "turnedOffWithTransition");
1146
+ }
1147
+ await entity.command("genLevelCtrl", state === null ? "moveToLevel" : "moveToLevelWithOnOff", { level: Number(brightness), transtime: transition.time }, utils.getOptions(meta.mapped, entity));
1148
+ const result = { state: {} };
1149
+ if (publishBrightness) {
1150
+ result.state.brightness = Number(brightness);
1151
+ }
1152
+ if (state !== null) {
1153
+ result.state.state = brightness === 0 ? "OFF" : "ON";
1154
+ }
1155
+ return result;
1156
+ },
1157
+ convertGet: async (entity, key, meta) => {
1158
+ if (key === "brightness") {
1159
+ await entity.read("genLevelCtrl", ["currentLevel"]);
1160
+ }
1161
+ else if (key === "state") {
1162
+ await exports.on_off.convertGet(entity, key, meta);
1163
+ }
1164
+ },
1165
+ };
1166
+ exports.light_colortemp_startup = {
1167
+ key: ["color_temp_startup"],
1168
+ convertSet: async (entity, key, value, meta) => {
1169
+ const [colorTempMin, colorTempMax] = light.findColorTempRange(entity);
1170
+ const preset = { warmest: colorTempMax, warm: 454, neutral: 370, cool: 250, coolest: colorTempMin, previous: 65535 };
1171
+ if (utils.isString(value) && value in preset) {
1172
+ value = utils.getFromLookup(value, preset);
1173
+ }
1174
+ value = Number(value);
1175
+ utils.assertNumber(value);
1176
+ // ensure value within range
1177
+ // we do allow one exception for 0xffff, which is to restore the previous value
1178
+ if (value !== 65535) {
1179
+ value = light.clampColorTemp(value, colorTempMin, colorTempMax);
1180
+ }
1181
+ await entity.write("lightingColorCtrl", { startUpColorTemperature: value }, utils.getOptions(meta.mapped, entity));
1182
+ return { state: { color_temp_startup: value } };
1183
+ },
1184
+ convertGet: async (entity, key, meta) => {
1185
+ await entity.read("lightingColorCtrl", ["startUpColorTemperature"]);
1186
+ },
1187
+ };
1188
+ exports.light_color_colortemp = {
1189
+ /**
1190
+ * This converter is a combination of light_color and light_colortemp and
1191
+ * can be used instead of the two individual converters . When used to set,
1192
+ * it actually calls out to light_color or light_colortemp to get the
1193
+ * return value. When used to get, it gets both color and colorTemp in
1194
+ * one call.
1195
+ * The reason for the existence of this somewhat peculiar converter is
1196
+ * that some lights don't report their state when changed. To fix this,
1197
+ * we query the state after we set it. We want to query color and colorTemp
1198
+ * both when setting either, because both change when setting one. This
1199
+ * converter is used to do just that.
1200
+ */
1201
+ key: ["color", "color_temp", "color_temp_percent"],
1202
+ options: [exposes.options.color_sync(), exposes.options.transition()],
1203
+ convertSet: async (entity, key, value, meta) => {
1204
+ if (key === "color") {
1205
+ const result = await exports.light_color.convertSet(entity, key, value, meta);
1206
+ return result;
1207
+ }
1208
+ if (key === "color_temp" || key === "color_temp_percent") {
1209
+ const result = await exports.light_colortemp.convertSet(entity, key, value, meta);
1210
+ return result;
1211
+ }
1212
+ },
1213
+ convertGet: async (entity, key, meta) => {
1214
+ await entity.read("lightingColorCtrl", light.readColorAttributes(entity, meta, ["colorTemperature"]));
1215
+ },
1216
+ };
1217
+ exports.effect = {
1218
+ key: ["effect", "alert", "flash"], // alert and flash are deprecated.
1219
+ convertSet: async (entity, key, value, meta) => {
1220
+ if (key === "effect") {
1221
+ utils.assertString(value, key);
1222
+ const lookup = { blink: 0, breathe: 1, okay: 2, channel_change: 11, finish_effect: 254, stop_effect: 255 };
1223
+ value = value.toLowerCase();
1224
+ if (value === "colorloop") {
1225
+ const transition = meta.message.transition ?? 15;
1226
+ utils.assertNumber(transition, "transition");
1227
+ const speed = Math.min(255, Math.max(1, Math.round(255 / transition)));
1228
+ await exports.light_hue_saturation_move.convertSet(entity, "hue_move", speed, meta);
1229
+ }
1230
+ else if (value === "stop_colorloop") {
1231
+ await exports.light_hue_saturation_move.convertSet(entity, "hue_move", "stop", meta);
1232
+ }
1233
+ else {
1234
+ const payload = { effectid: utils.getFromLookup(value, lookup), effectvariant: 0 };
1235
+ await entity.command("genIdentify", "triggerEffect", payload, utils.getOptions(meta.mapped, entity));
1236
+ }
1237
+ }
1238
+ else if (key === "alert" || key === "flash") {
1239
+ // Deprecated
1240
+ let effectid = 0;
1241
+ const lookup = { select: 0x00, lselect: 0x01, none: 0xff };
1242
+ if (key === "flash") {
1243
+ if (value === 2) {
1244
+ value = "select";
1245
+ }
1246
+ else if (value === 10) {
1247
+ value = "lselect";
1248
+ }
1249
+ }
1250
+ effectid = utils.getFromLookup(value, lookup);
1251
+ const payload = { effectid, effectvariant: 0 };
1252
+ await entity.command("genIdentify", "triggerEffect", payload, utils.getOptions(meta.mapped, entity));
1253
+ }
1254
+ },
1255
+ };
1256
+ exports.thermostat_remote_sensing = {
1257
+ key: ["remote_sensing"],
1258
+ convertSet: async (entity, key, value, meta) => {
1259
+ await entity.write("hvacThermostat", { remoteSensing: value });
1260
+ },
1261
+ convertGet: async (entity, key, meta) => {
1262
+ await entity.read("hvacThermostat", ["remoteSensing"]);
1263
+ },
1264
+ };
1265
+ exports.thermostat_weekly_schedule = {
1266
+ key: ["weekly_schedule"],
1267
+ convertSet: async (entity, key, value, meta) => {
1268
+ /*
1269
+ * We want to support a simple human creatable format to send a schedule:
1270
+ {"weekly_schedule": {
1271
+ "dayofweek": ["monday", "tuesday"],
1272
+ "transitions": [
1273
+ {"heatSetpoint": 16, "transitionTime": "0:00"},
1274
+ {"heatSetpoint": 20, "transitionTime": "18:00"},
1275
+ {"heatSetpoint": 16, "transitionTime": "19:30"}
1276
+ ]}}
1277
+
1278
+ * However exposes is not flexible enough to describe something like this. There is a
1279
+ * much more verbose format we also support so that exposes work.
1280
+ {"weekly_schedule": {
1281
+ "dayofweek": [
1282
+ {"day": "monday"},
1283
+ {"day": "tuesday"}
1284
+ ],
1285
+ "transitions": [
1286
+ {"heatSetpoint": 16, "transitionTime": {"hour": 0, "minute": 0}},
1287
+ {"heatSetpoint": 20, "transitionTime": {"hour": 18, "minute": 0}},
1288
+ {"heatSetpoint": 16, "transitionTime": {"hour": 19, "minute": 30}}
1289
+ ]}}
1290
+ */
1291
+ utils.assertObject(value, key);
1292
+ const payload = {
1293
+ dayofweek: value.dayofweek,
1294
+ transitions: value.transitions,
1295
+ };
1296
+ if (Array.isArray(payload.transitions)) {
1297
+ // calculate numoftrans
1298
+ if (typeof value.numoftrans !== "undefined") {
1299
+ logger_1.logger.warning(`weekly_schedule: ignoring provided numoftrans value (${JSON.stringify(value.numoftrans)}), this is now calculated automatically`, NS);
1300
+ }
1301
+ payload.numoftrans = payload.transitions.length;
1302
+ // mode is calculated below
1303
+ if (typeof value.mode !== "undefined") {
1304
+ logger_1.logger.warning(`weekly_schedule: ignoring provided mode value (${JSON.stringify(value.mode)}), this is now calculated automatically`, NS);
1305
+ }
1306
+ payload.mode = [];
1307
+ // transform transition payload values if needed
1308
+ for (const elem of payload.transitions) {
1309
+ // update payload.mode if needed
1310
+ if (elem.heatSetpoint !== undefined && !payload.mode.includes("heat")) {
1311
+ payload.mode.push("heat");
1312
+ }
1313
+ if (elem.coolSetpoint !== undefined && !payload.mode.includes("cool")) {
1314
+ payload.mode.push("cool");
1315
+ }
1316
+ // transform setpoint values if numeric
1317
+ if (typeof elem.heatSetpoint === "number") {
1318
+ elem.heatSetpoint = Math.round(elem.heatSetpoint * 100);
1319
+ }
1320
+ if (typeof elem.coolSetpoint === "number") {
1321
+ elem.coolSetpoint = Math.round(elem.coolSetpoint * 100);
1322
+ }
1323
+ // accept 24h time notation (e.g. 19:30)
1324
+ if (typeof elem.transitionTime === "string") {
1325
+ const time = elem.transitionTime.split(":");
1326
+ const timeHour = Number.parseInt(time[0]) * 60;
1327
+ const timeMinute = Number.parseInt(time[1]);
1328
+ if (time.length !== 2 || Number.isNaN(timeHour) || Number.isNaN(timeMinute)) {
1329
+ logger_1.logger.warning(`weekly_schedule: expected 24h time notation (e.g. 19:30) but got '${elem.transitionTime}'!`, NS);
1330
+ }
1331
+ else {
1332
+ elem.transitionTime = timeHour + timeMinute;
1333
+ }
1334
+ }
1335
+ else if (typeof elem.transitionTime === "object") {
1336
+ if (elem.transitionTime.hour === undefined || elem.transitionTime.minute === undefined) {
1337
+ throw new Error(`weekly_schedule: expected 24h time object (e.g. {"hour": 19, "minute": 30}), but got '${JSON.stringify(elem.transitionTime)}'!`);
1338
+ }
1339
+ if (Number.isNaN(elem.transitionTime.hour)) {
1340
+ throw new Error(`weekly_schedule: expected time.hour to be a number, but got '${elem.transitionTime.hour}'!`);
1341
+ }
1342
+ if (Number.isNaN(elem.transitionTime.minute)) {
1343
+ throw new Error(`weekly_schedule: expected time.minute to be a number, but got '${elem.transitionTime.minute}'!`);
1344
+ }
1345
+ elem.transitionTime = Number.parseInt(elem.transitionTime.hour) * 60 + Number.parseInt(elem.transitionTime.minute);
1346
+ }
1347
+ }
1348
+ }
1349
+ else {
1350
+ logger_1.logger.error("weekly_schedule: transitions is not an array!", NS);
1351
+ return;
1352
+ }
1353
+ // map array of desired modes to bitmask
1354
+ let mode = 0;
1355
+ for (let m of payload.mode) {
1356
+ // lookup mode bit
1357
+ m = utils.getKey(constants.thermostatScheduleMode, m.toLowerCase(), m, Number);
1358
+ mode |= 1 << m;
1359
+ }
1360
+ payload.mode = mode;
1361
+ // map array of days to desired dayofweek bitmask
1362
+ if (typeof payload.dayofweek === "string")
1363
+ payload.dayofweek = [payload.dayofweek];
1364
+ if (Array.isArray(payload.dayofweek)) {
1365
+ let dayofweek = 0;
1366
+ for (let d of payload.dayofweek) {
1367
+ if (typeof d === "object") {
1368
+ if (d.day === undefined) {
1369
+ throw new Error(`weekly_schedule: expected dayofweek to be string or {"day": "str"}, but got '${JSON.stringify(d)}'!`);
1370
+ }
1371
+ d = d.day;
1372
+ }
1373
+ // lookup dayofweek bit
1374
+ d = utils.getKey(constants.thermostatDayOfWeek, d.toLowerCase(), d, Number);
1375
+ dayofweek |= 1 << d;
1376
+ }
1377
+ payload.dayofweek = dayofweek;
1378
+ }
1379
+ await entity.command("hvacThermostat", "setWeeklySchedule", payload, utils.getOptions(meta.mapped, entity));
1380
+ },
1381
+ convertGet: async (entity, key, meta) => {
1382
+ const payload = {
1383
+ daystoreturn: 0xff, // Sun-Sat and vacation
1384
+ modetoreturn: 3, // heat + cool
1385
+ };
1386
+ await entity.command("hvacThermostat", "getWeeklySchedule", payload, utils.getOptions(meta.mapped, entity));
1387
+ },
1388
+ };
1389
+ exports.thermostat_system_mode = {
1390
+ key: ["system_mode"],
1391
+ convertSet: async (entity, key, value, meta) => {
1392
+ let systemMode = utils.getKey(constants.thermostatSystemModes, value, undefined, Number);
1393
+ if (systemMode === undefined) {
1394
+ systemMode = utils.getKey(legacy.thermostatSystemModes, value, value, Number);
1395
+ }
1396
+ await entity.write("hvacThermostat", { systemMode });
1397
+ return { state: { system_mode: value } };
1398
+ },
1399
+ convertGet: async (entity, key, meta) => {
1400
+ await entity.read("hvacThermostat", ["systemMode"]);
1401
+ },
1402
+ };
1403
+ exports.acova_thermostat_system_mode = {
1404
+ key: ["system_mode"],
1405
+ convertSet: async (entity, key, value, meta) => {
1406
+ let systemMode = utils.getKey(constants.acovaThermostatSystemModes, value, undefined, Number);
1407
+ if (systemMode === undefined) {
1408
+ systemMode = utils.getKey(legacy.thermostatSystemModes, value, value, Number);
1409
+ }
1410
+ await entity.write("hvacThermostat", { systemMode });
1411
+ return { state: { system_mode: value } };
1412
+ },
1413
+ convertGet: async (entity, key, meta) => {
1414
+ await entity.read("hvacThermostat", ["systemMode"]);
1415
+ },
1416
+ };
1417
+ exports.thermostat_control_sequence_of_operation = {
1418
+ key: ["control_sequence_of_operation"],
1419
+ convertSet: async (entity, key, value, meta) => {
1420
+ utils.assertEndpoint(entity);
1421
+ let val = utils.getKey(constants.thermostatControlSequenceOfOperations, value, undefined, Number);
1422
+ if (val === undefined) {
1423
+ val = utils.getKey(constants.thermostatControlSequenceOfOperations, value, value, Number);
1424
+ }
1425
+ const attributes = { ctrlSeqeOfOper: val };
1426
+ await entity.write("hvacThermostat", attributes);
1427
+ // NOTE: update the cluster attribute we store as this is used by
1428
+ // SMaBiT AV2010/32's dynamic expose function.
1429
+ entity.saveClusterAttributeKeyValue("hvacThermostat", attributes);
1430
+ return { state: { control_sequence_of_operation: value } };
1431
+ },
1432
+ convertGet: async (entity, key, meta) => {
1433
+ await entity.read("hvacThermostat", ["ctrlSeqeOfOper"]);
1434
+ },
1435
+ };
1436
+ exports.thermostat_programming_operation_mode = {
1437
+ key: ["programming_operation_mode"],
1438
+ convertSet: async (entity, key, value, meta) => {
1439
+ const val = utils.getKey(constants.thermostatProgrammingOperationModes, value, undefined, Number);
1440
+ if (val === undefined) {
1441
+ throw new Error(`Programming operation mode invalid, must be one of: ${Object.values(constants.thermostatProgrammingOperationModes).join(", ")}`);
1442
+ }
1443
+ await entity.write("hvacThermostat", { programingOperMode: val });
1444
+ return { state: { programming_operation_mode: value } };
1445
+ },
1446
+ convertGet: async (entity, key, meta) => {
1447
+ await entity.read("hvacThermostat", ["programingOperMode"]);
1448
+ },
1449
+ };
1450
+ exports.thermostat_temperature_display_mode = {
1451
+ key: ["temperature_display_mode"],
1452
+ convertSet: async (entity, key, value, meta) => {
1453
+ const tempDisplayMode = utils.getKey(constants.temperatureDisplayMode, value, value, Number);
1454
+ await entity.write("hvacUserInterfaceCfg", { tempDisplayMode });
1455
+ return { state: { temperature_display_mode: value } };
1456
+ },
1457
+ convertGet: async (entity, key, meta) => {
1458
+ await entity.read("hvacUserInterfaceCfg", ["tempDisplayMode"]);
1459
+ },
1460
+ };
1461
+ exports.thermostat_keypad_lockout = {
1462
+ key: ["keypad_lockout"],
1463
+ convertSet: async (entity, key, value, meta) => {
1464
+ const keypadLockout = utils.getKey(constants.keypadLockoutMode, value, value, Number);
1465
+ await entity.write("hvacUserInterfaceCfg", { keypadLockout });
1466
+ return { state: { keypad_lockout: value } };
1467
+ },
1468
+ convertGet: async (entity, key, meta) => {
1469
+ await entity.read("hvacUserInterfaceCfg", ["keypadLockout"]);
1470
+ },
1471
+ };
1472
+ exports.thermostat_temperature_setpoint_hold = {
1473
+ key: ["temperature_setpoint_hold"],
1474
+ convertSet: async (entity, key, value, meta) => {
1475
+ const tempSetpointHold = value;
1476
+ await entity.write("hvacThermostat", { tempSetpointHold });
1477
+ },
1478
+ convertGet: async (entity, key, meta) => {
1479
+ await entity.read("hvacThermostat", ["tempSetpointHold"]);
1480
+ },
1481
+ };
1482
+ exports.thermostat_temperature_setpoint_hold_duration = {
1483
+ key: ["temperature_setpoint_hold_duration"],
1484
+ convertSet: async (entity, key, value, meta) => {
1485
+ const tempSetpointHoldDuration = value;
1486
+ await entity.write("hvacThermostat", { tempSetpointHoldDuration });
1487
+ },
1488
+ convertGet: async (entity, key, meta) => {
1489
+ await entity.read("hvacThermostat", ["tempSetpointHoldDuration"]);
1490
+ },
1491
+ };
1492
+ exports.fan_mode = {
1493
+ key: ["fan_mode", "fan_state"],
1494
+ convertSet: async (entity, key, value, meta) => {
1495
+ utils.assertString(value, key);
1496
+ const fanMode = utils.getFromLookup(value, constants.fanMode);
1497
+ await entity.write("hvacFanCtrl", { fanMode });
1498
+ return { state: { fan_mode: value.toLowerCase(), fan_state: value.toLowerCase() === "off" ? "OFF" : "ON" } };
1499
+ },
1500
+ convertGet: async (entity, key, meta) => {
1501
+ await entity.read("hvacFanCtrl", ["fanMode"]);
1502
+ },
1503
+ };
1504
+ exports.fan_speed = {
1505
+ key: ["speed"],
1506
+ convertSet: async (entity, key, value, meta) => {
1507
+ utils.assertNumber(value);
1508
+ await entity.command("genLevelCtrl", "moveToLevel", { level: value.toString(), transtime: 0 }, utils.getOptions(meta.mapped, entity));
1509
+ return { state: { speed: value } };
1510
+ },
1511
+ convertGet: async (entity, key, meta) => {
1512
+ await entity.read("genLevelCtrl", ["currentLevel"]);
1513
+ },
1514
+ };
1515
+ exports.thermostat_local_temperature = {
1516
+ key: ["local_temperature"],
1517
+ convertGet: async (entity, key, meta) => {
1518
+ await entity.read("hvacThermostat", ["localTemp"]);
1519
+ },
1520
+ };
1521
+ exports.thermostat_outdoor_temperature = {
1522
+ key: ["outdoor_temperature"],
1523
+ convertGet: async (entity, key, meta) => {
1524
+ await entity.read("hvacThermostat", ["outdoorTemp"]);
1525
+ },
1526
+ };
1527
+ exports.thermostat_local_temperature_calibration = {
1528
+ key: ["local_temperature_calibration"],
1529
+ convertSet: async (entity, key, value, meta) => {
1530
+ utils.assertNumber(value);
1531
+ await entity.write("hvacThermostat", { localTemperatureCalibration: Math.round(value * 10) });
1532
+ return { state: { local_temperature_calibration: value } };
1533
+ },
1534
+ convertGet: async (entity, key, meta) => {
1535
+ await entity.read("hvacThermostat", ["localTemperatureCalibration"]);
1536
+ },
1537
+ };
1538
+ exports.thermostat_occupancy = {
1539
+ key: ["occupancy"],
1540
+ convertGet: async (entity, key, meta) => {
1541
+ await entity.read("hvacThermostat", ["occupancy"]);
1542
+ },
1543
+ };
1544
+ exports.thermostat_clear_weekly_schedule = {
1545
+ key: ["clear_weekly_schedule"],
1546
+ convertSet: async (entity, key, value, meta) => {
1547
+ await entity.command("hvacThermostat", "clearWeeklySchedule", {}, utils.getOptions(meta.mapped, entity));
1548
+ },
1549
+ };
1550
+ exports.thermostat_pi_heating_demand = {
1551
+ key: ["pi_heating_demand"],
1552
+ convertGet: async (entity, key, meta) => {
1553
+ await entity.read("hvacThermostat", ["pIHeatingDemand"]);
1554
+ },
1555
+ };
1556
+ exports.thermostat_running_state = {
1557
+ key: ["running_state"],
1558
+ convertGet: async (entity, key, meta) => {
1559
+ await entity.read("hvacThermostat", ["runningState"]);
1560
+ },
1561
+ };
1562
+ exports.thermostat_occupied_heating_setpoint = {
1563
+ key: ["occupied_heating_setpoint"],
1564
+ options: [exposes.options.thermostat_unit()],
1565
+ convertSet: async (entity, key, value, meta) => {
1566
+ utils.assertNumber(value, key);
1567
+ let result;
1568
+ if (meta.options.thermostat_unit === "fahrenheit") {
1569
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1570
+ }
1571
+ else {
1572
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1573
+ }
1574
+ const occupiedHeatingSetpoint = result;
1575
+ await entity.write("hvacThermostat", { occupiedHeatingSetpoint });
1576
+ return { state: { occupied_heating_setpoint: value } };
1577
+ },
1578
+ convertGet: async (entity, key, meta) => {
1579
+ await entity.read("hvacThermostat", ["occupiedHeatingSetpoint"]);
1580
+ },
1581
+ };
1582
+ exports.thermostat_unoccupied_heating_setpoint = {
1583
+ key: ["unoccupied_heating_setpoint"],
1584
+ options: [exposes.options.thermostat_unit()],
1585
+ convertSet: async (entity, key, value, meta) => {
1586
+ utils.assertNumber(value, key);
1587
+ let result;
1588
+ if (meta.options.thermostat_unit === "fahrenheit") {
1589
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1590
+ }
1591
+ else {
1592
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1593
+ }
1594
+ const unoccupiedHeatingSetpoint = result;
1595
+ await entity.write("hvacThermostat", { unoccupiedHeatingSetpoint });
1596
+ return { state: { unoccupied_heating_setpoint: value } };
1597
+ },
1598
+ convertGet: async (entity, key, meta) => {
1599
+ await entity.read("hvacThermostat", ["unoccupiedHeatingSetpoint"]);
1600
+ },
1601
+ };
1602
+ exports.thermostat_occupied_cooling_setpoint = {
1603
+ key: ["occupied_cooling_setpoint"],
1604
+ options: [exposes.options.thermostat_unit()],
1605
+ convertSet: async (entity, key, value, meta) => {
1606
+ utils.assertNumber(value, key);
1607
+ let result;
1608
+ if (meta.options.thermostat_unit === "fahrenheit") {
1609
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1610
+ }
1611
+ else {
1612
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1613
+ }
1614
+ const occupiedCoolingSetpoint = result;
1615
+ await entity.write("hvacThermostat", { occupiedCoolingSetpoint });
1616
+ return { state: { occupied_cooling_setpoint: value } };
1617
+ },
1618
+ convertGet: async (entity, key, meta) => {
1619
+ await entity.read("hvacThermostat", ["occupiedCoolingSetpoint"]);
1620
+ },
1621
+ };
1622
+ exports.thermostat_unoccupied_cooling_setpoint = {
1623
+ key: ["unoccupied_cooling_setpoint"],
1624
+ options: [exposes.options.thermostat_unit()],
1625
+ convertSet: async (entity, key, value, meta) => {
1626
+ utils.assertNumber(value, key);
1627
+ let result;
1628
+ if (meta.options.thermostat_unit === "fahrenheit") {
1629
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1630
+ }
1631
+ else {
1632
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1633
+ }
1634
+ const unoccupiedCoolingSetpoint = result;
1635
+ await entity.write("hvacThermostat", { unoccupiedCoolingSetpoint });
1636
+ return { state: { unoccupied_cooling_setpoint: value } };
1637
+ },
1638
+ convertGet: async (entity, key, meta) => {
1639
+ await entity.read("hvacThermostat", ["unoccupiedCoolingSetpoint"]);
1640
+ },
1641
+ };
1642
+ exports.thermostat_setpoint_raise_lower = {
1643
+ key: ["setpoint_raise_lower"],
1644
+ convertSet: async (entity, key, value, meta) => {
1645
+ utils.assertObject(value, key);
1646
+ const payload = { mode: value.mode, amount: Math.round(value.amount) * 100 };
1647
+ await entity.command("hvacThermostat", "setpointRaiseLower", payload, utils.getOptions(meta.mapped, entity));
1648
+ },
1649
+ };
1650
+ exports.thermostat_relay_status_log = {
1651
+ key: ["relay_status_log"],
1652
+ convertGet: async (entity, key, meta) => {
1653
+ await entity.command("hvacThermostat", "getRelayStatusLog", {}, utils.getOptions(meta.mapped, entity));
1654
+ },
1655
+ };
1656
+ exports.thermostat_running_mode = {
1657
+ key: ["running_mode"],
1658
+ convertGet: async (entity, key, meta) => {
1659
+ await entity.read("hvacThermostat", ["runningMode"]);
1660
+ },
1661
+ };
1662
+ exports.thermostat_min_heat_setpoint_limit = {
1663
+ key: ["min_heat_setpoint_limit"],
1664
+ convertSet: async (entity, key, value, meta) => {
1665
+ utils.assertNumber(value);
1666
+ let result;
1667
+ if (meta.options.thermostat_unit === "fahrenheit") {
1668
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1669
+ }
1670
+ else {
1671
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1672
+ }
1673
+ const minHeatSetpointLimit = result;
1674
+ await entity.write("hvacThermostat", { minHeatSetpointLimit });
1675
+ return { state: { min_heat_setpoint_limit: value } };
1676
+ },
1677
+ convertGet: async (entity, key, meta) => {
1678
+ await entity.read("hvacThermostat", ["minHeatSetpointLimit"]);
1679
+ },
1680
+ };
1681
+ exports.thermostat_max_heat_setpoint_limit = {
1682
+ key: ["max_heat_setpoint_limit"],
1683
+ convertSet: async (entity, key, value, meta) => {
1684
+ utils.assertNumber(value, key);
1685
+ let result;
1686
+ if (meta.options.thermostat_unit === "fahrenheit") {
1687
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1688
+ }
1689
+ else {
1690
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1691
+ }
1692
+ const maxHeatSetpointLimit = result;
1693
+ await entity.write("hvacThermostat", { maxHeatSetpointLimit });
1694
+ return { state: { max_heat_setpoint_limit: value } };
1695
+ },
1696
+ convertGet: async (entity, key, meta) => {
1697
+ await entity.read("hvacThermostat", ["maxHeatSetpointLimit"]);
1698
+ },
1699
+ };
1700
+ exports.thermostat_min_cool_setpoint_limit = {
1701
+ key: ["min_cool_setpoint_limit"],
1702
+ convertSet: async (entity, key, value, meta) => {
1703
+ utils.assertNumber(value, key);
1704
+ let result;
1705
+ if (meta.options.thermostat_unit === "fahrenheit") {
1706
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1707
+ }
1708
+ else {
1709
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1710
+ }
1711
+ const minCoolSetpointLimit = result;
1712
+ await entity.write("hvacThermostat", { minCoolSetpointLimit });
1713
+ return { state: { min_cool_setpoint_limit: value } };
1714
+ },
1715
+ convertGet: async (entity, key, meta) => {
1716
+ await entity.read("hvacThermostat", ["minCoolSetpointLimit"]);
1717
+ },
1718
+ };
1719
+ exports.thermostat_max_cool_setpoint_limit = {
1720
+ key: ["max_cool_setpoint_limit"],
1721
+ convertSet: async (entity, key, value, meta) => {
1722
+ utils.assertNumber(value, key);
1723
+ let result;
1724
+ if (meta.options.thermostat_unit === "fahrenheit") {
1725
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1726
+ }
1727
+ else {
1728
+ result = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
1729
+ }
1730
+ const maxCoolSetpointLimit = result;
1731
+ await entity.write("hvacThermostat", { maxCoolSetpointLimit });
1732
+ return { state: { max_cool_setpoint_limit: value } };
1733
+ },
1734
+ convertGet: async (entity, key, meta) => {
1735
+ await entity.read("hvacThermostat", ["maxCoolSetpointLimit"]);
1736
+ },
1737
+ };
1738
+ exports.thermostat_ac_louver_position = {
1739
+ key: ["ac_louver_position"],
1740
+ convertSet: async (entity, key, value, meta) => {
1741
+ let acLouverPosition = utils.getKey(constants.thermostatAcLouverPositions, value, undefined, Number);
1742
+ if (acLouverPosition === undefined) {
1743
+ acLouverPosition = utils.getKey(constants.thermostatAcLouverPositions, value, value, Number);
1744
+ }
1745
+ await entity.write("hvacThermostat", { acLouverPosition });
1746
+ return { state: { ac_louver_position: value } };
1747
+ },
1748
+ convertGet: async (entity, key, meta) => {
1749
+ await entity.read("hvacThermostat", ["acLouverPosition"]);
1750
+ },
1751
+ };
1752
+ exports.electrical_measurement_power = {
1753
+ key: ["power"],
1754
+ convertGet: async (entity, key, meta) => {
1755
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1756
+ await ep.read("haElectricalMeasurement", ["activePower"]);
1757
+ },
1758
+ };
1759
+ exports.electrical_measurement_power_phase_b = {
1760
+ key: ["power_phase_b"],
1761
+ convertGet: async (entity, key, meta) => {
1762
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1763
+ await ep.read("haElectricalMeasurement", ["activePowerPhB"]);
1764
+ },
1765
+ };
1766
+ exports.electrical_measurement_power_phase_c = {
1767
+ key: ["power_phase_c"],
1768
+ convertGet: async (entity, key, meta) => {
1769
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1770
+ await ep.read("haElectricalMeasurement", ["activePowerPhC"]);
1771
+ },
1772
+ };
1773
+ exports.metering_power = {
1774
+ key: ["power"],
1775
+ convertGet: async (entity, key, meta) => {
1776
+ utils.assertEndpoint(entity);
1777
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "seMetering");
1778
+ await ep.read("seMetering", ["instantaneousDemand"]);
1779
+ },
1780
+ };
1781
+ exports.metering_status = {
1782
+ key: ["status"],
1783
+ convertGet: async (entity, key, meta) => {
1784
+ utils.assertEndpoint(entity);
1785
+ await utils.enforceEndpoint(entity, key, meta).read("seMetering", ["status"]);
1786
+ },
1787
+ };
1788
+ exports.metering_extended_status = {
1789
+ key: ["extended_status"],
1790
+ convertGet: async (entity, key, meta) => {
1791
+ utils.assertEndpoint(entity);
1792
+ await utils.enforceEndpoint(entity, key, meta).read("seMetering", ["extendedStatus"]);
1793
+ },
1794
+ };
1795
+ exports.currentsummdelivered = {
1796
+ key: ["energy"],
1797
+ convertGet: async (entity, key, meta) => {
1798
+ utils.assertEndpoint(entity);
1799
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "seMetering");
1800
+ await ep.read("seMetering", ["currentSummDelivered"]);
1801
+ },
1802
+ };
1803
+ exports.currentsummreceived = {
1804
+ key: ["produced_energy"],
1805
+ convertGet: async (entity, key, meta) => {
1806
+ utils.assertEndpoint(entity);
1807
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "seMetering");
1808
+ await ep.read("seMetering", ["currentSummReceived"]);
1809
+ },
1810
+ };
1811
+ exports.frequency = {
1812
+ key: ["ac_frequency"],
1813
+ convertGet: async (entity, key, meta) => {
1814
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1815
+ await ep.read("haElectricalMeasurement", ["acFrequency"]);
1816
+ },
1817
+ };
1818
+ exports.electrical_measurement_power_reactive = {
1819
+ key: ["power_reactive"],
1820
+ convertGet: async (entity, key, meta) => {
1821
+ await entity.read("haElectricalMeasurement", ["reactivePower"]);
1822
+ },
1823
+ };
1824
+ exports.powerfactor = {
1825
+ key: ["power_factor"],
1826
+ convertGet: async (entity, key, meta) => {
1827
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1828
+ await ep.read("haElectricalMeasurement", ["powerFactor"]);
1829
+ },
1830
+ };
1831
+ exports.acvoltage = {
1832
+ key: ["voltage"],
1833
+ convertGet: async (entity, key, meta) => {
1834
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1835
+ await ep.read("haElectricalMeasurement", ["rmsVoltage"]);
1836
+ },
1837
+ };
1838
+ exports.acvoltage_phase_b = {
1839
+ key: ["voltage_phase_b"],
1840
+ convertGet: async (entity, key, meta) => {
1841
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1842
+ await ep.read("haElectricalMeasurement", ["rmsVoltagePhB"]);
1843
+ },
1844
+ };
1845
+ exports.acvoltage_phase_c = {
1846
+ key: ["voltage_phase_c"],
1847
+ convertGet: async (entity, key, meta) => {
1848
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1849
+ await ep.read("haElectricalMeasurement", ["rmsVoltagePhC"]);
1850
+ },
1851
+ };
1852
+ exports.accurrent = {
1853
+ key: ["current"],
1854
+ convertGet: async (entity, key, meta) => {
1855
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1856
+ await ep.read("haElectricalMeasurement", ["rmsCurrent"]);
1857
+ },
1858
+ };
1859
+ exports.accurrent_phase_b = {
1860
+ key: ["current_phase_b"],
1861
+ convertGet: async (entity, key, meta) => {
1862
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1863
+ await ep.read("haElectricalMeasurement", ["rmsCurrentPhB"]);
1864
+ },
1865
+ };
1866
+ exports.accurrent_phase_c = {
1867
+ key: ["current_phase_c"],
1868
+ convertGet: async (entity, key, meta) => {
1869
+ const ep = (0, modernExtend_1.determineEndpoint)(entity, meta, "haElectricalMeasurement");
1870
+ await ep.read("haElectricalMeasurement", ["rmsCurrentPhC"]);
1871
+ },
1872
+ };
1873
+ exports.temperature = {
1874
+ key: ["temperature"],
1875
+ convertGet: async (entity, key, meta) => {
1876
+ await entity.read("msTemperatureMeasurement", ["measuredValue"]);
1877
+ },
1878
+ };
1879
+ exports.humidity = {
1880
+ key: ["humidity"],
1881
+ convertGet: async (entity, key, meta) => {
1882
+ await entity.read("msRelativeHumidity", ["measuredValue"]);
1883
+ },
1884
+ };
1885
+ // #endregion
1886
+ // #region Non-generic converters
1887
+ exports.elko_power_status = {
1888
+ key: ["system_mode"],
1889
+ convertSet: async (entity, key, value, meta) => {
1890
+ await entity.write("hvacThermostat", { elkoPowerStatus: value === "heat" });
1891
+ return { state: { system_mode: value } };
1892
+ },
1893
+ convertGet: async (entity, key, meta) => {
1894
+ await entity.read("hvacThermostat", ["elkoPowerStatus"]);
1895
+ },
1896
+ };
1897
+ exports.elko_relay_state = {
1898
+ key: ["running_state"],
1899
+ convertGet: async (entity, key, meta) => {
1900
+ await entity.read("hvacThermostat", ["elkoRelayState"]);
1901
+ },
1902
+ };
1903
+ exports.elko_local_temperature_calibration = {
1904
+ key: ["local_temperature_calibration"],
1905
+ convertSet: async (entity, key, value, meta) => {
1906
+ utils.assertNumber(value, key);
1907
+ await entity.write("hvacThermostat", { elkoCalibration: Math.round(value * 10) });
1908
+ return { state: { local_temperature_calibration: value } };
1909
+ },
1910
+ convertGet: async (entity, key, meta) => {
1911
+ await entity.read("hvacThermostat", ["elkoCalibration"]);
1912
+ },
1913
+ };
1914
+ exports.livolo_socket_switch_on_off = {
1915
+ key: ["state"],
1916
+ convertSet: async (entity, key, value, meta) => {
1917
+ if (typeof value !== "string") {
1918
+ return;
1919
+ }
1920
+ const state = value.toLowerCase();
1921
+ let oldstate = 1;
1922
+ if (state === "on") {
1923
+ oldstate = 108;
1924
+ }
1925
+ let channel = 1.0;
1926
+ const postfix = meta.endpoint_name || "left";
1927
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
1928
+ const payloadOn = { 1: { value: Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
1929
+ const payloadOff = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
1930
+ const payloadOnRight = { 1: { value: Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), type: 2 } };
1931
+ const payloadOffRight = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 2 } };
1932
+ const payloadOnBottomLeft = { 1: { value: Buffer.from([4, 0, 0, 0, 0, 0, 0, 0]), type: 4 } };
1933
+ const payloadOffBottomLeft = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 4 } };
1934
+ const payloadOnBottomRight = { 1: { value: Buffer.from([8, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
1935
+ const payloadOffBottomRight = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
1936
+ if (postfix === "left") {
1937
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel });
1938
+ await entity.write("genPowerCfg", state === "on" ? payloadOn : payloadOff, {
1939
+ manufacturerCode: 0x1ad2,
1940
+ disableDefaultResponse: true,
1941
+ disableResponse: true,
1942
+ reservedBits: 3,
1943
+ direction: 1,
1944
+ transactionSequenceNumber: 0xe9,
1945
+ });
1946
+ return { state: { state: value.toUpperCase() } };
1947
+ }
1948
+ if (postfix === "right") {
1949
+ channel = 2.0;
1950
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: oldstate, transtime: channel });
1951
+ await entity.write("genPowerCfg", state === "on" ? payloadOnRight : payloadOffRight, {
1952
+ manufacturerCode: 0x1ad2,
1953
+ disableDefaultResponse: true,
1954
+ disableResponse: true,
1955
+ reservedBits: 3,
1956
+ direction: 1,
1957
+ transactionSequenceNumber: 0xe9,
1958
+ });
1959
+ return { state: { state: value.toUpperCase() } };
1960
+ }
1961
+ if (postfix === "bottom_right") {
1962
+ await entity.write("genPowerCfg", state === "on" ? payloadOnBottomRight : payloadOffBottomRight, {
1963
+ manufacturerCode: 0x1ad2,
1964
+ disableDefaultResponse: true,
1965
+ disableResponse: true,
1966
+ reservedBits: 3,
1967
+ direction: 1,
1968
+ transactionSequenceNumber: 0xe9,
1969
+ });
1970
+ return { state: { state: value.toUpperCase() } };
1971
+ }
1972
+ if (postfix === "bottom_left") {
1973
+ await entity.write("genPowerCfg", state === "on" ? payloadOnBottomLeft : payloadOffBottomLeft, {
1974
+ manufacturerCode: 0x1ad2,
1975
+ disableDefaultResponse: true,
1976
+ disableResponse: true,
1977
+ reservedBits: 3,
1978
+ direction: 1,
1979
+ transactionSequenceNumber: 0xe9,
1980
+ });
1981
+ return { state: { state: value.toUpperCase() } };
1982
+ }
1983
+ return { state: { state: value.toUpperCase() } };
1984
+ },
1985
+ convertGet: async (entity, key, meta) => {
1986
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
1987
+ },
1988
+ };
1989
+ exports.livolo_switch_on_off = {
1990
+ key: ["state"],
1991
+ convertSet: async (entity, key, value, meta) => {
1992
+ utils.assertString(value, key);
1993
+ const postfix = meta.endpoint_name || "left";
1994
+ const state = value.toLowerCase() === "on" ? 108 : 1;
1995
+ let channel = 1;
1996
+ if (postfix === "left") {
1997
+ channel = 1.0;
1998
+ }
1999
+ else if (postfix === "right") {
2000
+ channel = 2.0;
2001
+ }
2002
+ else {
2003
+ return;
2004
+ }
2005
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: state, transtime: channel });
2006
+ return { state: { state: value.toUpperCase() } };
2007
+ },
2008
+ convertGet: async (entity, key, meta) => {
2009
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
2010
+ },
2011
+ };
2012
+ exports.livolo_dimmer_level = {
2013
+ key: ["brightness", "brightness_percent", "level"],
2014
+ convertSet: async (entity, key, value, meta) => {
2015
+ // upscale to 100
2016
+ value = Number(value);
2017
+ utils.assertNumber(value, key);
2018
+ let newValue;
2019
+ if (key === "level") {
2020
+ if (value >= 0 && value <= 1000) {
2021
+ newValue = utils.mapNumberRange(value, 0, 1000, 0, 100);
2022
+ }
2023
+ else {
2024
+ throw new Error("Dimmer level is out of range 0..1000");
2025
+ }
2026
+ }
2027
+ else if (key === "brightness_percent") {
2028
+ if (value >= 0 && value <= 100) {
2029
+ newValue = Math.round(value);
2030
+ }
2031
+ else {
2032
+ throw new Error("Dimmer brightness_percent is out of range 0..100");
2033
+ }
2034
+ }
2035
+ else {
2036
+ if (value >= 0 && value <= 255) {
2037
+ newValue = utils.mapNumberRange(value, 0, 255, 0, 100);
2038
+ }
2039
+ else {
2040
+ throw new Error("Dimmer brightness is out of range 0..255");
2041
+ }
2042
+ }
2043
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
2044
+ const payload = { 769: { value: Buffer.from([newValue, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
2045
+ await entity.write("genPowerCfg", payload, {
2046
+ manufacturerCode: 0x1ad2,
2047
+ disableDefaultResponse: true,
2048
+ disableResponse: true,
2049
+ reservedBits: 3,
2050
+ direction: 1,
2051
+ transactionSequenceNumber: 0xe9,
2052
+ writeUndiv: true,
2053
+ });
2054
+ return {
2055
+ state: { brightness_percent: newValue, brightness: utils.mapNumberRange(newValue, 0, 100, 0, 255), level: newValue * 10 },
2056
+ };
2057
+ },
2058
+ convertGet: async (entity, key, meta) => {
2059
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
2060
+ },
2061
+ };
2062
+ exports.livolo_cover_state = {
2063
+ key: ["state"],
2064
+ convertSet: async (entity, key, value, meta) => {
2065
+ utils.assertEndpoint(entity);
2066
+ let payload;
2067
+ const options = {
2068
+ frameType: 0,
2069
+ manufacturerCode: 0x1ad2,
2070
+ disableDefaultResponse: true,
2071
+ disableResponse: true,
2072
+ reservedBits: 3,
2073
+ direction: 1,
2074
+ writeUndiv: true,
2075
+ transactionSequenceNumber: 0xe9,
2076
+ };
2077
+ switch (value) {
2078
+ case "OPEN":
2079
+ payload = { attrId: 0x0000, selector: null, elementData: [0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
2080
+ break;
2081
+ case "CLOSE":
2082
+ payload = { attrId: 0x0000, selector: null, elementData: [0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
2083
+ break;
2084
+ case "STOP":
2085
+ payload = { attrId: 0x0000, selector: null, elementData: [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
2086
+ break;
2087
+ default:
2088
+ throw new Error(`Value '${value}' is not a valid cover position (must be one of 'OPEN' or 'CLOSE')`);
2089
+ }
2090
+ await entity.writeStructured("genPowerCfg", [payload], options);
2091
+ return {
2092
+ state: {
2093
+ moving: true,
2094
+ },
2095
+ };
2096
+ },
2097
+ };
2098
+ exports.livolo_cover_position = {
2099
+ key: ["position"],
2100
+ convertSet: async (entity, key, value, meta) => {
2101
+ utils.assertNumber(value, key);
2102
+ const position = 100 - value;
2103
+ await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
2104
+ const payload = { 1025: { value: [position, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], type: 1 } };
2105
+ await entity.write("genPowerCfg", payload, {
2106
+ manufacturerCode: 0x1ad2,
2107
+ disableDefaultResponse: true,
2108
+ disableResponse: true,
2109
+ reservedBits: 3,
2110
+ direction: 1,
2111
+ transactionSequenceNumber: 0xe9,
2112
+ writeUndiv: true,
2113
+ });
2114
+ return {
2115
+ state: {
2116
+ position: value,
2117
+ moving: true,
2118
+ },
2119
+ };
2120
+ },
2121
+ };
2122
+ exports.livolo_cover_options = {
2123
+ key: ["options"],
2124
+ convertSet: async (entity, key, value, meta) => {
2125
+ utils.assertObject(value);
2126
+ const options = {
2127
+ frameType: 0,
2128
+ manufacturerCode: 0x1ad2,
2129
+ disableDefaultResponse: true,
2130
+ disableResponse: true,
2131
+ reservedBits: 3,
2132
+ direction: 1,
2133
+ writeUndiv: true,
2134
+ transactionSequenceNumber: 0xe9,
2135
+ };
2136
+ if (value.motor_direction !== undefined) {
2137
+ let direction;
2138
+ switch (value.motor_direction) {
2139
+ case "FORWARD":
2140
+ direction = 0x00;
2141
+ break;
2142
+ case "REVERSE":
2143
+ direction = 0x80;
2144
+ break;
2145
+ default:
2146
+ throw new Error(`livolo_cover_options: ${value.motor_direction} is not a valid motor direction \
2147
+ (must be one of 'FORWARD' or 'REVERSE')`);
2148
+ }
2149
+ const payload = { 4865: { value: [direction, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] } };
2150
+ await entity.write("genPowerCfg", payload, options);
2151
+ }
2152
+ if (value.motor_speed !== undefined) {
2153
+ if (value.motor_speed < 20 || value.motor_speed > 40) {
2154
+ throw new Error("livolo_cover_options: Motor speed is out of range (20-40)");
2155
+ }
2156
+ const payload = { 4609: { value: [value.motor_speed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] } };
2157
+ await entity.write("genPowerCfg", payload, options);
2158
+ }
2159
+ },
2160
+ };
2161
+ exports.ZigUP_lock = {
2162
+ key: ["led"],
2163
+ convertSet: async (entity, key, value, meta) => {
2164
+ const lookup = { off: "lockDoor", on: "unlockDoor", toggle: "toggleDoor" };
2165
+ await entity.command("closuresDoorLock", utils.getFromLookup(value, lookup), { pincodevalue: "" });
2166
+ },
2167
+ };
2168
+ exports.LS21001_alert_behaviour = {
2169
+ key: ["alert_behaviour"],
2170
+ convertSet: async (entity, key, value, meta) => {
2171
+ const lookup = { siren_led: 3, siren: 2, led: 1, nothing: 0 };
2172
+ await entity.write("genBasic", { 16394: { value: utils.getFromLookup(value, lookup), type: 32 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.LEEDARSON_LIGHTING_CO_LTD, disableDefaultResponse: true });
2173
+ return { state: { alert_behaviour: value } };
2174
+ },
2175
+ };
2176
+ exports.STS_PRS_251_beep = {
2177
+ key: ["beep"],
2178
+ convertSet: async (entity, key, value, meta) => {
2179
+ await entity.command("genIdentify", "identify", { identifytime: value }, utils.getOptions(meta.mapped, entity));
2180
+ },
2181
+ };
2182
+ exports.SPZ01_power_outage_memory = {
2183
+ key: ["power_outage_memory"],
2184
+ convertSet: async (entity, key, value, meta) => {
2185
+ await entity.write("genOnOff", { 8192: { value: value ? 0x01 : 0x00, type: 0x20 } });
2186
+ return { state: { power_outage_memory: value } };
2187
+ },
2188
+ };
2189
+ exports.tuya_relay_din_led_indicator = {
2190
+ key: ["indicator_mode"],
2191
+ convertSet: async (entity, key, value, meta) => {
2192
+ utils.assertString(value, key);
2193
+ value = value.toLowerCase();
2194
+ const lookup = { off: 0x00, on_off: 0x01, off_on: 0x02 };
2195
+ const payload = utils.getFromLookup(value, lookup);
2196
+ await entity.write("genOnOff", { 32769: { value: payload, type: 0x30 } });
2197
+ return { state: { indicator_mode: value } };
2198
+ },
2199
+ };
2200
+ exports.kmpcil_res005_on_off = {
2201
+ key: ["state"],
2202
+ convertSet: async (entity, key, value, meta) => {
2203
+ utils.assertString(value, key);
2204
+ const options = { disableDefaultResponse: true };
2205
+ value = value.toLowerCase();
2206
+ utils.assertString(value, key);
2207
+ utils.validateValue(value, ["toggle", "off", "on"]);
2208
+ if (value === "toggle") {
2209
+ if (meta.state.state === undefined) {
2210
+ throw new Error("Cannot toggle, state not known yet");
2211
+ }
2212
+ const payload = { 85: { value: meta.state.state === "OFF" ? 0x01 : 0x00, type: 0x10 } };
2213
+ await entity.write("genBinaryOutput", payload, options);
2214
+ return { state: { state: meta.state.state === "OFF" ? "ON" : "OFF" } };
2215
+ }
2216
+ const payload = { 85: { value: value.toUpperCase() === "OFF" ? 0x00 : 0x01, type: 0x10 } };
2217
+ await entity.write("genBinaryOutput", payload, options);
2218
+ return { state: { state: value.toUpperCase() } };
2219
+ },
2220
+ convertGet: async (entity, key, meta) => {
2221
+ await entity.read("genBinaryOutput", ["presentValue"]);
2222
+ },
2223
+ };
2224
+ exports.hue_wall_switch_device_mode = {
2225
+ key: ["device_mode"],
2226
+ convertSet: async (entity, key, value, meta) => {
2227
+ utils.assertString(value);
2228
+ const values = ["single_rocker", "single_push_button", "dual_rocker", "dual_push_button"];
2229
+ utils.validateValue(value, values);
2230
+ await entity.write("genBasic", { 52: { value: values.indexOf(value), type: 48 } }, manufacturerOptions.hue);
2231
+ },
2232
+ convertGet: async (entity, key, meta) => {
2233
+ await entity.read("genBasic", [0x0034], manufacturerOptions.hue);
2234
+ },
2235
+ };
2236
+ exports.danfoss_thermostat_occupied_heating_setpoint = {
2237
+ key: ["occupied_heating_setpoint"],
2238
+ convertSet: async (entity, key, value, meta) => {
2239
+ utils.assertNumber(value, key);
2240
+ const payload = {
2241
+ // 1: "User Interaction" Changes occupied heating setpoint and triggers an aggressive reaction
2242
+ // of the actuator as soon as control SW runs, to replicate the behavior of turning the dial on the eTRV.
2243
+ setpointType: 1,
2244
+ setpoint: Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100,
2245
+ };
2246
+ await entity.command("hvacThermostat", "danfossSetpointCommand", payload, manufacturerOptions.danfoss);
2247
+ },
2248
+ convertGet: async (entity, key, meta) => {
2249
+ await entity.read("hvacThermostat", ["occupiedHeatingSetpoint"]);
2250
+ },
2251
+ };
2252
+ exports.danfoss_thermostat_occupied_heating_setpoint_scheduled = {
2253
+ key: ["occupied_heating_setpoint_scheduled"],
2254
+ convertSet: async (entity, key, value, meta) => {
2255
+ utils.assertNumber(value, key);
2256
+ const payload = {
2257
+ // 0: "Schedule Change" Just changes occupied heating setpoint. No special behavior,
2258
+ // the PID control setpoint will be update with the new setpoint.
2259
+ setpointType: 0,
2260
+ setpoint: Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100,
2261
+ };
2262
+ await entity.command("hvacThermostat", "danfossSetpointCommand", payload, manufacturerOptions.danfoss);
2263
+ },
2264
+ convertGet: async (entity, key, meta) => {
2265
+ await entity.read("hvacThermostat", ["occupiedHeatingSetpoint"]);
2266
+ },
2267
+ };
2268
+ exports.danfoss_mounted_mode_active = {
2269
+ key: ["mounted_mode_active"],
2270
+ convertGet: async (entity, key, meta) => {
2271
+ await entity.read("hvacThermostat", ["danfossMountedModeActive"], manufacturerOptions.danfoss);
2272
+ },
2273
+ };
2274
+ exports.danfoss_mounted_mode_control = {
2275
+ key: ["mounted_mode_control"],
2276
+ convertSet: async (entity, key, value, meta) => {
2277
+ await entity.write("hvacThermostat", { danfossMountedModeControl: value }, manufacturerOptions.danfoss);
2278
+ return { state: { mounted_mode_control: value } };
2279
+ },
2280
+ convertGet: async (entity, key, meta) => {
2281
+ await entity.read("hvacThermostat", ["danfossMountedModeControl"], manufacturerOptions.danfoss);
2282
+ },
2283
+ };
2284
+ exports.danfoss_thermostat_vertical_orientation = {
2285
+ key: ["thermostat_vertical_orientation"],
2286
+ convertSet: async (entity, key, value, meta) => {
2287
+ await entity.write("hvacThermostat", { danfossThermostatOrientation: value }, manufacturerOptions.danfoss);
2288
+ return { state: { thermostat_vertical_orientation: value } };
2289
+ },
2290
+ convertGet: async (entity, key, meta) => {
2291
+ await entity.read("hvacThermostat", ["danfossThermostatOrientation"], manufacturerOptions.danfoss);
2292
+ },
2293
+ };
2294
+ exports.danfoss_external_measured_room_sensor = {
2295
+ key: ["external_measured_room_sensor"],
2296
+ convertSet: async (entity, key, value, meta) => {
2297
+ await entity.write("hvacThermostat", { danfossExternalMeasuredRoomSensor: value }, manufacturerOptions.danfoss);
2298
+ return { state: { external_measured_room_sensor: value } };
2299
+ },
2300
+ convertGet: async (entity, key, meta) => {
2301
+ await entity.read("hvacThermostat", ["danfossExternalMeasuredRoomSensor"], manufacturerOptions.danfoss);
2302
+ },
2303
+ };
2304
+ exports.danfoss_radiator_covered = {
2305
+ key: ["radiator_covered"],
2306
+ convertSet: async (entity, key, value, meta) => {
2307
+ await entity.write("hvacThermostat", { danfossRadiatorCovered: value }, manufacturerOptions.danfoss);
2308
+ return { state: { radiator_covered: value } };
2309
+ },
2310
+ convertGet: async (entity, key, meta) => {
2311
+ await entity.read("hvacThermostat", ["danfossRadiatorCovered"], manufacturerOptions.danfoss);
2312
+ },
2313
+ };
2314
+ exports.danfoss_viewing_direction = {
2315
+ key: ["viewing_direction"],
2316
+ convertSet: async (entity, key, value, meta) => {
2317
+ await entity.write("hvacUserInterfaceCfg", { danfossViewingDirection: value }, manufacturerOptions.danfoss);
2318
+ return { state: { viewing_direction: value } };
2319
+ },
2320
+ convertGet: async (entity, key, meta) => {
2321
+ await entity.read("hvacUserInterfaceCfg", ["danfossViewingDirection"], manufacturerOptions.danfoss);
2322
+ },
2323
+ };
2324
+ exports.danfoss_algorithm_scale_factor = {
2325
+ key: ["algorithm_scale_factor"],
2326
+ convertSet: async (entity, key, value, meta) => {
2327
+ await entity.write("hvacThermostat", { danfossAlgorithmScaleFactor: value }, manufacturerOptions.danfoss);
2328
+ return { state: { algorithm_scale_factor: value } };
2329
+ },
2330
+ convertGet: async (entity, key, meta) => {
2331
+ await entity.read("hvacThermostat", ["danfossAlgorithmScaleFactor"], manufacturerOptions.danfoss);
2332
+ },
2333
+ };
2334
+ exports.danfoss_heat_available = {
2335
+ key: ["heat_available"],
2336
+ convertSet: async (entity, key, value, meta) => {
2337
+ await entity.write("hvacThermostat", { danfossHeatAvailable: value }, manufacturerOptions.danfoss);
2338
+ return { state: { heat_available: value } };
2339
+ },
2340
+ convertGet: async (entity, key, meta) => {
2341
+ await entity.read("hvacThermostat", ["danfossHeatAvailable"], manufacturerOptions.danfoss);
2342
+ },
2343
+ };
2344
+ exports.danfoss_heat_required = {
2345
+ key: ["heat_required"],
2346
+ convertGet: async (entity, key, meta) => {
2347
+ await entity.read("hvacThermostat", ["danfossHeatRequired"], manufacturerOptions.danfoss);
2348
+ },
2349
+ };
2350
+ exports.danfoss_day_of_week = {
2351
+ key: ["day_of_week"],
2352
+ convertSet: async (entity, key, value, meta) => {
2353
+ const payload = { danfossDayOfWeek: utils.getKey(constants.thermostatDayOfWeek, value, undefined, Number) };
2354
+ await entity.write("hvacThermostat", payload, manufacturerOptions.danfoss);
2355
+ return { state: { day_of_week: value } };
2356
+ },
2357
+ convertGet: async (entity, key, meta) => {
2358
+ await entity.read("hvacThermostat", ["danfossDayOfWeek"], manufacturerOptions.danfoss);
2359
+ },
2360
+ };
2361
+ exports.danfoss_trigger_time = {
2362
+ key: ["trigger_time"],
2363
+ convertSet: async (entity, key, value, meta) => {
2364
+ await entity.write("hvacThermostat", { danfossTriggerTime: value }, manufacturerOptions.danfoss);
2365
+ return { state: { trigger_time: value } };
2366
+ },
2367
+ convertGet: async (entity, key, meta) => {
2368
+ await entity.read("hvacThermostat", ["danfossTriggerTime"], manufacturerOptions.danfoss);
2369
+ },
2370
+ };
2371
+ exports.danfoss_window_open_feature = {
2372
+ key: ["window_open_feature"],
2373
+ convertSet: async (entity, key, value, meta) => {
2374
+ await entity.write("hvacThermostat", { danfossWindowOpenFeatureEnable: value }, manufacturerOptions.danfoss);
2375
+ return { state: { window_open_feature: value } };
2376
+ },
2377
+ convertGet: async (entity, key, meta) => {
2378
+ await entity.read("hvacThermostat", ["danfossWindowOpenFeatureEnable"], manufacturerOptions.danfoss);
2379
+ },
2380
+ };
2381
+ exports.danfoss_window_open_internal = {
2382
+ key: ["window_open_internal"],
2383
+ convertGet: async (entity, key, meta) => {
2384
+ await entity.read("hvacThermostat", ["danfossWindowOpenInternal"], manufacturerOptions.danfoss);
2385
+ },
2386
+ };
2387
+ exports.danfoss_window_open_external = {
2388
+ key: ["window_open_external"],
2389
+ convertSet: async (entity, key, value, meta) => {
2390
+ await entity.write("hvacThermostat", { danfossWindowOpenExternal: value }, manufacturerOptions.danfoss);
2391
+ return { state: { window_open_external: value } };
2392
+ },
2393
+ convertGet: async (entity, key, meta) => {
2394
+ await entity.read("hvacThermostat", ["danfossWindowOpenExternal"], manufacturerOptions.danfoss);
2395
+ },
2396
+ };
2397
+ exports.danfoss_load_balancing_enable = {
2398
+ key: ["load_balancing_enable"],
2399
+ convertSet: async (entity, key, value, meta) => {
2400
+ await entity.write("hvacThermostat", { danfossLoadBalancingEnable: value }, manufacturerOptions.danfoss);
2401
+ return { state: { load_balancing_enable: value } };
2402
+ },
2403
+ convertGet: async (entity, key, meta) => {
2404
+ await entity.read("hvacThermostat", ["danfossLoadBalancingEnable"], manufacturerOptions.danfoss);
2405
+ },
2406
+ };
2407
+ exports.danfoss_load_room_mean = {
2408
+ key: ["load_room_mean"],
2409
+ convertSet: async (entity, key, value, meta) => {
2410
+ await entity.write("hvacThermostat", { danfossLoadRoomMean: value }, manufacturerOptions.danfoss);
2411
+ return { state: { load_room_mean: value } };
2412
+ },
2413
+ convertGet: async (entity, key, meta) => {
2414
+ await entity.read("hvacThermostat", ["danfossLoadRoomMean"], manufacturerOptions.danfoss);
2415
+ },
2416
+ };
2417
+ exports.danfoss_load_estimate = {
2418
+ key: ["load_estimate"],
2419
+ convertGet: async (entity, key, meta) => {
2420
+ await entity.read("hvacThermostat", ["danfossLoadEstimate"], manufacturerOptions.danfoss);
2421
+ },
2422
+ };
2423
+ exports.danfoss_preheat_status = {
2424
+ key: ["preheat_status"],
2425
+ convertGet: async (entity, key, meta) => {
2426
+ await entity.read("hvacThermostat", ["danfossPreheatStatus"], manufacturerOptions.danfoss);
2427
+ },
2428
+ };
2429
+ exports.danfoss_adaptation_status = {
2430
+ key: ["adaptation_run_status"],
2431
+ convertGet: async (entity, key, meta) => {
2432
+ await entity.read("hvacThermostat", ["danfossAdaptionRunStatus"], manufacturerOptions.danfoss);
2433
+ },
2434
+ };
2435
+ exports.danfoss_adaptation_settings = {
2436
+ key: ["adaptation_run_settings"],
2437
+ convertSet: async (entity, key, value, meta) => {
2438
+ await entity.write("hvacThermostat", { danfossAdaptionRunSettings: value }, manufacturerOptions.danfoss);
2439
+ return { state: { adaptation_run_settings: value } };
2440
+ },
2441
+ convertGet: async (entity, key, meta) => {
2442
+ await entity.read("hvacThermostat", ["danfossAdaptionRunSettings"], manufacturerOptions.danfoss);
2443
+ },
2444
+ };
2445
+ exports.danfoss_adaptation_control = {
2446
+ key: ["adaptation_run_control"],
2447
+ convertSet: async (entity, key, value, meta) => {
2448
+ const payload = { danfossAdaptionRunControl: utils.getKey(constants.danfossAdaptionRunControl, value, value, Number) };
2449
+ await entity.write("hvacThermostat", payload, manufacturerOptions.danfoss);
2450
+ return { state: { adaptation_run_control: value } };
2451
+ },
2452
+ convertGet: async (entity, key, meta) => {
2453
+ await entity.read("hvacThermostat", ["danfossAdaptionRunControl"], manufacturerOptions.danfoss);
2454
+ },
2455
+ };
2456
+ exports.danfoss_regulation_setpoint_offset = {
2457
+ key: ["regulation_setpoint_offset"],
2458
+ convertSet: async (entity, key, value, meta) => {
2459
+ const payload = { danfossRegulationSetpointOffset: value };
2460
+ await entity.write("hvacThermostat", payload, manufacturerOptions.danfoss);
2461
+ return { state: { regulation_setpoint_offset: value } };
2462
+ },
2463
+ convertGet: async (entity, key, meta) => {
2464
+ await entity.read("hvacThermostat", ["danfossRegulationSetpointOffset"], manufacturerOptions.danfoss);
2465
+ },
2466
+ };
2467
+ exports.danfoss_output_status = {
2468
+ key: ["output_status"],
2469
+ convertGet: async (entity, key, meta) => {
2470
+ await entity.read("hvacThermostat", ["danfossOutputStatus"], manufacturerOptions.danfoss);
2471
+ },
2472
+ };
2473
+ exports.danfoss_room_status_code = {
2474
+ key: ["room_status_code"],
2475
+ convertGet: async (entity, key, meta) => {
2476
+ await entity.read("hvacThermostat", ["danfossRoomStatusCode"], manufacturerOptions.danfoss);
2477
+ },
2478
+ };
2479
+ exports.danfoss_floor_sensor_mode = {
2480
+ key: ["room_floor_sensor_mode"],
2481
+ convertGet: async (entity, key, meta) => {
2482
+ await entity.read("hvacThermostat", ["danfossRoomFloorSensorMode"], manufacturerOptions.danfoss);
2483
+ },
2484
+ };
2485
+ exports.danfoss_floor_min_setpoint = {
2486
+ key: ["floor_min_setpoint"],
2487
+ convertSet: async (entity, key, value, meta) => {
2488
+ utils.assertNumber(value, key);
2489
+ const danfossFloorMinSetpoint = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
2490
+ await entity.write("hvacThermostat", { danfossFloorMinSetpoint }, manufacturerOptions.danfoss);
2491
+ return { state: { floor_min_setpoint: value } };
2492
+ },
2493
+ convertGet: async (entity, key, meta) => {
2494
+ await entity.read("hvacThermostat", ["danfossFloorMinSetpoint"], manufacturerOptions.danfoss);
2495
+ },
2496
+ };
2497
+ exports.danfoss_floor_max_setpoint = {
2498
+ key: ["floor_max_setpoint"],
2499
+ convertSet: async (entity, key, value, meta) => {
2500
+ utils.assertNumber(value, key);
2501
+ const danfossFloorMaxSetpoint = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
2502
+ await entity.write("hvacThermostat", { danfossFloorMaxSetpoint }, manufacturerOptions.danfoss);
2503
+ return { state: { floor_max_setpoint: value } };
2504
+ },
2505
+ convertGet: async (entity, key, meta) => {
2506
+ await entity.read("hvacThermostat", ["danfossFloorMaxSetpoint"], manufacturerOptions.danfoss);
2507
+ },
2508
+ };
2509
+ exports.danfoss_system_status_code = {
2510
+ key: ["system_status_code"],
2511
+ convertGet: async (entity, key, meta) => {
2512
+ await entity.read("haDiagnostic", ["danfossSystemStatusCode"], manufacturerOptions.danfoss);
2513
+ },
2514
+ };
2515
+ exports.danfoss_system_status_water = {
2516
+ key: ["system_status_water"],
2517
+ convertGet: async (entity, key, meta) => {
2518
+ await entity.read("haDiagnostic", ["danfossSystemStatusWater"], manufacturerOptions.danfoss);
2519
+ },
2520
+ };
2521
+ exports.danfoss_multimaster_role = {
2522
+ key: ["multimaster_role"],
2523
+ convertGet: async (entity, key, meta) => {
2524
+ await entity.read("haDiagnostic", ["danfossMultimasterRole"], manufacturerOptions.danfoss);
2525
+ },
2526
+ };
2527
+ exports.ZMCSW032D_cover_position = {
2528
+ key: ["position", "tilt"],
2529
+ convertSet: async (entity, key, value, meta) => {
2530
+ utils.assertNumber(value, key);
2531
+ if (meta.options.time_close !== undefined && meta.options.time_open !== undefined) {
2532
+ const sleepSeconds = async (s) => {
2533
+ return await new Promise((resolve) => setTimeout(resolve, s * 1000));
2534
+ };
2535
+ const oldPosition = meta.state.position;
2536
+ if (value === 100) {
2537
+ await entity.command("closuresWindowCovering", "upOpen", {}, utils.getOptions(meta.mapped, entity));
2538
+ }
2539
+ else if (value === 0) {
2540
+ await entity.command("closuresWindowCovering", "downClose", {}, utils.getOptions(meta.mapped, entity));
2541
+ }
2542
+ else {
2543
+ if (utils.isNumber(oldPosition) && oldPosition > value) {
2544
+ const delta = oldPosition - value;
2545
+ utils.assertNumber(meta.options.time_open);
2546
+ const mutiplicateur = meta.options.time_open / 100;
2547
+ const timeBeforeStop = delta * mutiplicateur;
2548
+ await entity.command("closuresWindowCovering", "downClose", {}, utils.getOptions(meta.mapped, entity));
2549
+ await sleepSeconds(timeBeforeStop);
2550
+ await entity.command("closuresWindowCovering", "stop", {}, utils.getOptions(meta.mapped, entity));
2551
+ }
2552
+ else if (utils.isNumber(oldPosition) && oldPosition < value) {
2553
+ const delta = value - oldPosition;
2554
+ utils.assertNumber(meta.options.time_close);
2555
+ const mutiplicateur = meta.options.time_close / 100;
2556
+ const timeBeforeStop = delta * mutiplicateur;
2557
+ await entity.command("closuresWindowCovering", "upOpen", {}, utils.getOptions(meta.mapped, entity));
2558
+ await sleepSeconds(timeBeforeStop);
2559
+ await entity.command("closuresWindowCovering", "stop", {}, utils.getOptions(meta.mapped, entity));
2560
+ }
2561
+ }
2562
+ return { state: { position: value } };
2563
+ }
2564
+ },
2565
+ convertGet: async (entity, key, meta) => {
2566
+ const isPosition = key === "position";
2567
+ await entity.read("closuresWindowCovering", [isPosition ? "currentPositionLiftPercentage" : "currentPositionTiltPercentage"]);
2568
+ },
2569
+ };
2570
+ exports.namron_thermostat = {
2571
+ key: [
2572
+ "lcd_brightness",
2573
+ "button_vibration_level",
2574
+ "floor_sensor_type",
2575
+ "sensor",
2576
+ "powerup_status",
2577
+ "floor_sensor_calibration",
2578
+ "dry_time",
2579
+ "mode_after_dry",
2580
+ "temperature_display",
2581
+ "window_open_check",
2582
+ "hysterersis",
2583
+ "display_auto_off_enabled",
2584
+ "alarm_airtemp_overvalue",
2585
+ "away_mode",
2586
+ ],
2587
+ convertSet: async (entity, key, value, meta) => {
2588
+ if (key === "lcd_brightness") {
2589
+ const lookup = { low: 0, mid: 1, high: 2 };
2590
+ const payload = { 4096: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2591
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2592
+ }
2593
+ else if (key === "button_vibration_level") {
2594
+ const lookup = { off: 0, low: 1, high: 2 };
2595
+ const payload = { 4097: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2596
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2597
+ }
2598
+ else if (key === "floor_sensor_type") {
2599
+ const lookup = { "10k": 1, "15k": 2, "50k": 3, "100k": 4, "12k": 5 };
2600
+ const payload = { 4098: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2601
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2602
+ }
2603
+ else if (key === "sensor") {
2604
+ const lookup = { air: 0, floor: 1, both: 2 };
2605
+ const payload = { 4099: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2606
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2607
+ }
2608
+ else if (key === "powerup_status") {
2609
+ const lookup = { default: 0, last_status: 1 };
2610
+ const payload = { 4100: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2611
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2612
+ }
2613
+ else if (key === "floor_sensor_calibration") {
2614
+ utils.assertNumber(value);
2615
+ const payload = { 4101: { value: Math.round(value * 10), type: 0x28 } }; // INT8S
2616
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2617
+ }
2618
+ else if (key === "dry_time") {
2619
+ const payload = { 4102: { value: value, type: 0x20 } }; // INT8U
2620
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2621
+ }
2622
+ else if (key === "mode_after_dry") {
2623
+ const lookup = { off: 0, manual: 1, auto: 2, away: 3 };
2624
+ const payload = { 4103: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2625
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2626
+ }
2627
+ else if (key === "temperature_display") {
2628
+ const lookup = { room: 0, floor: 1 };
2629
+ const payload = { 4104: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2630
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2631
+ }
2632
+ else if (key === "window_open_check") {
2633
+ utils.assertNumber(value);
2634
+ const payload = { 4105: { value: value * 2, type: 0x20 } };
2635
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2636
+ }
2637
+ else if (key === "hysterersis") {
2638
+ utils.assertNumber(value);
2639
+ const payload = { 4106: { value: value * 10, type: 0x20 } };
2640
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2641
+ }
2642
+ else if (key === "display_auto_off_enabled") {
2643
+ const lookup = { disabled: 0, enabled: 1 };
2644
+ const payload = { 4107: { value: utils.getFromLookup(value, lookup), type: zigbee_herdsman_1.Zcl.DataType.ENUM8 } };
2645
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2646
+ }
2647
+ else if (key === "alarm_airtemp_overvalue") {
2648
+ const payload = { 8193: { value: value, type: 0x20 } };
2649
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2650
+ }
2651
+ else if (key === "away_mode") {
2652
+ const payload = { 8194: { value: Number(value === "ON"), type: 0x30 } };
2653
+ await entity.write("hvacThermostat", payload, manufacturerOptions.sunricher);
2654
+ }
2655
+ },
2656
+ convertGet: async (entity, key, meta) => {
2657
+ switch (key) {
2658
+ case "lcd_brightness":
2659
+ await entity.read("hvacThermostat", [0x1000], manufacturerOptions.sunricher);
2660
+ break;
2661
+ case "button_vibration_level":
2662
+ await entity.read("hvacThermostat", [0x1001], manufacturerOptions.sunricher);
2663
+ break;
2664
+ case "floor_sensor_type":
2665
+ await entity.read("hvacThermostat", [0x1002], manufacturerOptions.sunricher);
2666
+ break;
2667
+ case "sensor":
2668
+ await entity.read("hvacThermostat", [0x1003], manufacturerOptions.sunricher);
2669
+ break;
2670
+ case "powerup_status":
2671
+ await entity.read("hvacThermostat", [0x1004], manufacturerOptions.sunricher);
2672
+ break;
2673
+ case "floor_sensor_calibration":
2674
+ await entity.read("hvacThermostat", [0x1005], manufacturerOptions.sunricher);
2675
+ break;
2676
+ case "dry_time":
2677
+ await entity.read("hvacThermostat", [0x1006], manufacturerOptions.sunricher);
2678
+ break;
2679
+ case "mode_after_dry":
2680
+ await entity.read("hvacThermostat", [0x1007], manufacturerOptions.sunricher);
2681
+ break;
2682
+ case "temperature_display":
2683
+ await entity.read("hvacThermostat", [0x1008], manufacturerOptions.sunricher);
2684
+ break;
2685
+ case "window_open_check":
2686
+ await entity.read("hvacThermostat", [0x1009], manufacturerOptions.sunricher);
2687
+ break;
2688
+ case "hysterersis":
2689
+ await entity.read("hvacThermostat", [0x100a], manufacturerOptions.sunricher);
2690
+ break;
2691
+ case "display_auto_off_enabled":
2692
+ await entity.read("hvacThermostat", [0x100b], manufacturerOptions.sunricher);
2693
+ break;
2694
+ case "alarm_airtemp_overvalue":
2695
+ await entity.read("hvacThermostat", [0x2001], manufacturerOptions.sunricher);
2696
+ break;
2697
+ case "away_mode":
2698
+ await entity.read("hvacThermostat", [0x2002], manufacturerOptions.sunricher);
2699
+ break;
2700
+ default: // Unknown key
2701
+ throw new Error(`Unhandled key toZigbee.namron_thermostat.convertGet ${key}`);
2702
+ }
2703
+ },
2704
+ };
2705
+ exports.namron_thermostat_child_lock = {
2706
+ key: ["child_lock"],
2707
+ convertSet: async (entity, key, value, meta) => {
2708
+ const keypadLockout = Number(value === "LOCK");
2709
+ await entity.write("hvacUserInterfaceCfg", { keypadLockout });
2710
+ return { state: { child_lock: value } };
2711
+ },
2712
+ convertGet: async (entity, key, meta) => {
2713
+ await entity.read("hvacUserInterfaceCfg", ["keypadLockout"]);
2714
+ },
2715
+ };
2716
+ exports.easycode_auto_relock = {
2717
+ key: ["auto_relock"],
2718
+ convertSet: async (entity, key, value, meta) => {
2719
+ await entity.write("closuresDoorLock", { autoRelockTime: value ? 1 : 0 }, utils.getOptions(meta.mapped, entity));
2720
+ return { state: { auto_relock: value } };
2721
+ },
2722
+ };
2723
+ exports.tuya_led_control = {
2724
+ key: ["brightness", "color", "color_temp"],
2725
+ options: [exposes.options.color_sync()],
2726
+ convertSet: async (entity, key, value, meta) => {
2727
+ if (key === "brightness" &&
2728
+ meta.state.color_mode === constants.colorModeLookup[2] &&
2729
+ meta.message.color === undefined &&
2730
+ meta.message.color_temp === undefined) {
2731
+ const zclData = { level: Number(value), transtime: 0 };
2732
+ await entity.command("genLevelCtrl", "moveToLevel", zclData, utils.getOptions(meta.mapped, entity));
2733
+ globalStore.putValue(entity, "brightness", zclData.level);
2734
+ return { state: { brightness: zclData.level } };
2735
+ }
2736
+ if (key === "brightness" && utils.isNumber(meta.message.color_temp)) {
2737
+ const zclData = { colortemp: utils.mapNumberRange(meta.message.color_temp, 500, 154, 0, 254), transtime: 0 };
2738
+ const zclDataBrightness = { level: Number(value), transtime: 0 };
2739
+ await entity.command("lightingColorCtrl", "tuyaRgbMode", { enable: 0 });
2740
+ await entity.command("lightingColorCtrl", "moveToColorTemp", zclData, utils.getOptions(meta.mapped, entity));
2741
+ await entity.command("genLevelCtrl", "moveToLevel", zclDataBrightness, utils.getOptions(meta.mapped, entity));
2742
+ globalStore.putValue(entity, "brightness", zclDataBrightness.level);
2743
+ const newState = {
2744
+ brightness: zclDataBrightness.level,
2745
+ color_mode: constants.colorModeLookup[2],
2746
+ color_temp: meta.message.color_temp,
2747
+ };
2748
+ return { state: libColor.syncColorState(newState, meta.state, entity, meta.options) };
2749
+ }
2750
+ if (key === "color_temp") {
2751
+ utils.assertNumber(value, key);
2752
+ const zclData = { colortemp: utils.mapNumberRange(value, 500, 154, 0, 254), transtime: 0 };
2753
+ const zclDataBrightness = { level: globalStore.getValue(entity, "brightness") || 100, transtime: 0 };
2754
+ await entity.command("lightingColorCtrl", "tuyaRgbMode", { enable: 0 });
2755
+ await entity.command("lightingColorCtrl", "moveToColorTemp", zclData, utils.getOptions(meta.mapped, entity));
2756
+ await entity.command("genLevelCtrl", "moveToLevel", zclDataBrightness, utils.getOptions(meta.mapped, entity));
2757
+ const newState = {
2758
+ brightness: zclDataBrightness.level,
2759
+ color_mode: constants.colorModeLookup[2],
2760
+ color_temp: value,
2761
+ };
2762
+ return { state: libColor.syncColorState(newState, meta.state, entity, meta.options) };
2763
+ }
2764
+ const zclData = {
2765
+ brightness: globalStore.getValue(entity, "brightness") || 100,
2766
+ // @ts-expect-error ignore
2767
+ hue: utils.mapNumberRange(meta.state.color.h, 0, 360, 0, 254) || 100,
2768
+ // @ts-expect-error ignore
2769
+ saturation: utils.mapNumberRange(meta.state.color.s, 0, 100, 0, 254) || 100,
2770
+ transtime: 0,
2771
+ };
2772
+ if (utils.isObject(value)) {
2773
+ if (value.h) {
2774
+ zclData.hue = utils.mapNumberRange(value.h, 0, 360, 0, 254);
2775
+ }
2776
+ if (value.hue) {
2777
+ zclData.hue = utils.mapNumberRange(value.hue, 0, 360, 0, 254);
2778
+ }
2779
+ if (value.s) {
2780
+ zclData.saturation = utils.mapNumberRange(value.s, 0, 100, 0, 254);
2781
+ }
2782
+ if (value.saturation) {
2783
+ zclData.saturation = utils.mapNumberRange(value.saturation, 0, 100, 0, 254);
2784
+ }
2785
+ if (value.b) {
2786
+ zclData.brightness = Number(value.b);
2787
+ }
2788
+ if (value.brightness) {
2789
+ zclData.brightness = Number(value.brightness);
2790
+ }
2791
+ if (typeof value === "number") {
2792
+ zclData.brightness = value;
2793
+ }
2794
+ }
2795
+ if (meta.message.color !== undefined) {
2796
+ if (utils.isObject(meta.message.color)) {
2797
+ if (meta.message.color.h) {
2798
+ zclData.hue = utils.mapNumberRange(meta.message.color.h, 0, 360, 0, 254);
2799
+ }
2800
+ if (meta.message.color.s) {
2801
+ zclData.saturation = utils.mapNumberRange(meta.message.color.s, 0, 100, 0, 254);
2802
+ }
2803
+ if (meta.message.color.b) {
2804
+ zclData.brightness = Number(meta.message.color.b);
2805
+ }
2806
+ if (meta.message.color.brightness) {
2807
+ zclData.brightness = Number(meta.message.color.brightness);
2808
+ }
2809
+ }
2810
+ }
2811
+ await entity.command("lightingColorCtrl", "tuyaRgbMode", { enable: 1 });
2812
+ await entity.command("lightingColorCtrl", "tuyaMoveToHueAndSaturationBrightness", zclData, utils.getOptions(meta.mapped, entity));
2813
+ globalStore.putValue(entity, "brightness", zclData.brightness);
2814
+ const newState = {
2815
+ brightness: zclData.brightness,
2816
+ color: {
2817
+ h: utils.mapNumberRange(zclData.hue, 0, 254, 0, 360),
2818
+ hue: utils.mapNumberRange(zclData.hue, 0, 254, 0, 360),
2819
+ s: utils.mapNumberRange(zclData.saturation, 0, 254, 0, 100),
2820
+ saturation: utils.mapNumberRange(zclData.saturation, 0, 254, 0, 100),
2821
+ },
2822
+ color_mode: constants.colorModeLookup[0],
2823
+ };
2824
+ return { state: libColor.syncColorState(newState, meta.state, entity, meta.options) };
2825
+ },
2826
+ convertGet: async (entity, key, meta) => {
2827
+ await entity.read("lightingColorCtrl", ["currentHue", "currentSaturation", "tuyaBrightness", "tuyaRgbMode", "colorTemperature"]);
2828
+ },
2829
+ };
2830
+ exports.tuya_led_controller = {
2831
+ key: ["state", "color"],
2832
+ convertSet: async (entity, key, value, meta) => {
2833
+ if (key === "state") {
2834
+ utils.assertString(value, key);
2835
+ if (value.toLowerCase() === "off") {
2836
+ await entity.command("genOnOff", "offWithEffect", { effectid: 0x01, effectvariant: 0x01 }, utils.getOptions(meta.mapped, entity));
2837
+ }
2838
+ else {
2839
+ const payload = { level: 255, transtime: 0 };
2840
+ await entity.command("genLevelCtrl", "moveToLevelWithOnOff", payload, utils.getOptions(meta.mapped, entity));
2841
+ }
2842
+ return { state: { state: value.toUpperCase() } };
2843
+ }
2844
+ if (key === "color") {
2845
+ const hue = {};
2846
+ const saturation = {};
2847
+ utils.assertObject(value);
2848
+ hue.hue = utils.mapNumberRange(value.h, 0, 360, 0, 254);
2849
+ saturation.saturation = utils.mapNumberRange(value.s, 0, 100, 0, 254);
2850
+ hue.transtime = saturation.transtime = 0;
2851
+ hue.direction = 0;
2852
+ await entity.command("lightingColorCtrl", "moveToHue", hue, utils.getOptions(meta.mapped, entity));
2853
+ await entity.command("lightingColorCtrl", "moveToSaturation", saturation, utils.getOptions(meta.mapped, entity));
2854
+ }
2855
+ },
2856
+ convertGet: async (entity, key, meta) => {
2857
+ if (key === "state") {
2858
+ await entity.read("genOnOff", ["onOff"]);
2859
+ }
2860
+ else if (key === "color") {
2861
+ await entity.read("lightingColorCtrl", ["currentHue", "currentSaturation"]);
2862
+ }
2863
+ },
2864
+ };
2865
+ exports.EMIZB_132_mode = {
2866
+ key: ["interface_mode"],
2867
+ convertSet: async (entity, key, value, meta) => {
2868
+ const endpoint = meta.device.getEndpoint(2);
2869
+ const lookup = {
2870
+ norwegian_han: { value: 0x0200, acVoltageDivisor: 10, acCurrentDivisor: 10 },
2871
+ norwegian_han_extra_load: { value: 0x0201, acVoltageDivisor: 10, acCurrentDivisor: 10 },
2872
+ aidon_meter: { value: 0x0202, acVoltageDivisor: 10, acCurrentDivisor: 10 },
2873
+ kaifa_and_kamstrup: { value: 0x0203, acVoltageDivisor: 10, acCurrentDivisor: 1000 },
2874
+ };
2875
+ await endpoint.write("seMetering", { 770: { value: utils.getFromLookup(value, lookup).value, type: 49 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DEVELCO });
2876
+ // As the device reports the incorrect divisor, we need to set it here
2877
+ // https://github.com/Koenkk/zigbee-herdsman-converters/issues/974#issuecomment-604347303
2878
+ // Values for norwegian_han and aidon_meter have not been been checked
2879
+ endpoint.saveClusterAttributeKeyValue("haElectricalMeasurement", {
2880
+ acVoltageMultiplier: 1,
2881
+ acVoltageDivisor: utils.getFromLookup(value, lookup).acVoltageDivisor,
2882
+ acCurrentMultiplier: 1,
2883
+ acCurrentDivisor: utils.getFromLookup(value, lookup).acCurrentDivisor,
2884
+ });
2885
+ return { state: { interface_mode: value } };
2886
+ },
2887
+ };
2888
+ exports.eurotronic_host_flags = {
2889
+ key: ["eurotronic_host_flags", "system_mode"],
2890
+ convertSet: async (entity, key, value, meta) => {
2891
+ const origValue = value;
2892
+ await entity.read("hvacThermostat", [0x4008], manufacturerOptions.eurotronic);
2893
+ // calculate bit value
2894
+ let bitValue = 0x01; // bit 0 always 1
2895
+ if (meta.state.mirror_display === "ON") {
2896
+ bitValue |= 0x02;
2897
+ }
2898
+ if (value === constants.thermostatSystemModes[0]) {
2899
+ // off
2900
+ bitValue |= 0x20;
2901
+ }
2902
+ else if (value === constants.thermostatSystemModes[4]) {
2903
+ // "heat"
2904
+ bitValue |= 0x04;
2905
+ }
2906
+ else {
2907
+ // auto
2908
+ bitValue |= 0x10;
2909
+ }
2910
+ if (meta.state.child_lock === "LOCK") {
2911
+ bitValue |= 0x80;
2912
+ }
2913
+ value = bitValue;
2914
+ const payload = { 16392: { value, type: 0x22 } };
2915
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
2916
+ return { state: { [key]: origValue } };
2917
+ },
2918
+ convertGet: async (entity, key, meta) => {
2919
+ await entity.read("hvacThermostat", [0x4008], manufacturerOptions.eurotronic);
2920
+ },
2921
+ };
2922
+ exports.eurotronic_error_status = {
2923
+ key: ["eurotronic_error_status"],
2924
+ convertGet: async (entity, key, meta) => {
2925
+ await entity.read("hvacThermostat", [0x4002], manufacturerOptions.eurotronic);
2926
+ },
2927
+ };
2928
+ exports.eurotronic_current_heating_setpoint = {
2929
+ key: ["current_heating_setpoint"],
2930
+ convertSet: async (entity, key, value, meta) => {
2931
+ utils.assertNumber(value, key);
2932
+ const val = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
2933
+ const payload = { 16387: { value: val, type: 0x29 } };
2934
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
2935
+ },
2936
+ convertGet: async (entity, key, meta) => {
2937
+ await entity.read("hvacThermostat", [0x4003], manufacturerOptions.eurotronic);
2938
+ },
2939
+ };
2940
+ exports.eurotronic_valve_position = {
2941
+ key: ["eurotronic_valve_position", "valve_position"],
2942
+ convertSet: async (entity, key, value, meta) => {
2943
+ const payload = { 16385: { value, type: 0x20 } };
2944
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
2945
+ return { state: { [key]: value } };
2946
+ },
2947
+ convertGet: async (entity, key, meta) => {
2948
+ await entity.read("hvacThermostat", [0x4001], manufacturerOptions.eurotronic);
2949
+ },
2950
+ };
2951
+ exports.eurotronic_trv_mode = {
2952
+ key: ["eurotronic_trv_mode", "trv_mode"],
2953
+ convertSet: async (entity, key, value, meta) => {
2954
+ const payload = { 16384: { value, type: 0x30 } };
2955
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
2956
+ return { state: { [key]: value } };
2957
+ },
2958
+ convertGet: async (entity, key, meta) => {
2959
+ await entity.read("hvacThermostat", [0x4000], manufacturerOptions.eurotronic);
2960
+ },
2961
+ };
2962
+ exports.eurotronic_child_lock = {
2963
+ key: ["eurotronic_child_lock", "child_lock"],
2964
+ convertSet: async (entity, key, value, meta) => {
2965
+ await entity.read("hvacThermostat", [0x4008], manufacturerOptions.eurotronic);
2966
+ // calculate bit value
2967
+ let bitValue = 0x01; // bit 0 always 1
2968
+ if (meta.state.mirror_display === "ON") {
2969
+ bitValue |= 0x02;
2970
+ }
2971
+ if (meta.state.system_mode === constants.thermostatSystemModes[0]) {
2972
+ // off
2973
+ bitValue |= 0x20;
2974
+ }
2975
+ else if (meta.state.system_mode === constants.thermostatSystemModes[4]) {
2976
+ // "heat"
2977
+ bitValue |= 0x04;
2978
+ }
2979
+ else {
2980
+ // auto
2981
+ bitValue |= 0x10;
2982
+ }
2983
+ if (value === "LOCK") {
2984
+ bitValue |= 0x80;
2985
+ }
2986
+ const origValue = value;
2987
+ value = bitValue;
2988
+ const payload = { 16392: { value, type: 0x22 } };
2989
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
2990
+ return { state: { [key]: origValue } };
2991
+ },
2992
+ };
2993
+ exports.eurotronic_mirror_display = {
2994
+ key: ["eurotronic_mirror_display", "mirror_display"],
2995
+ convertSet: async (entity, key, value, meta) => {
2996
+ await entity.read("hvacThermostat", [0x4008], manufacturerOptions.eurotronic);
2997
+ // calculate bit value
2998
+ let bitValue = 0x01; // bit 0 always 1
2999
+ if (value === "ON") {
3000
+ bitValue |= 0x02;
3001
+ }
3002
+ if (meta.state.system_mode === constants.thermostatSystemModes[0]) {
3003
+ // off
3004
+ bitValue |= 0x20;
3005
+ }
3006
+ else if (meta.state.system_mode === constants.thermostatSystemModes[4]) {
3007
+ // "heat"
3008
+ bitValue |= 0x04;
3009
+ }
3010
+ else {
3011
+ // auto
3012
+ bitValue |= 0x10;
3013
+ }
3014
+ if (meta.state.child_lock === "LOCK") {
3015
+ bitValue |= 0x80;
3016
+ }
3017
+ const origValue = value;
3018
+ value = bitValue;
3019
+ const payload = { 16392: { value, type: 0x22 } };
3020
+ await entity.write("hvacThermostat", payload, manufacturerOptions.eurotronic);
3021
+ return { state: { [key]: origValue } };
3022
+ },
3023
+ convertGet: async (entity, key, meta) => {
3024
+ await entity.read("hvacThermostat", [0x4008], manufacturerOptions.eurotronic);
3025
+ },
3026
+ };
3027
+ exports.stelpro_thermostat_outdoor_temperature = {
3028
+ key: ["thermostat_outdoor_temperature"],
3029
+ convertSet: async (entity, key, value, meta) => {
3030
+ utils.assertNumber(value, key);
3031
+ if (value > -100 && value < 100) {
3032
+ await entity.write("hvacThermostat", { StelproOutdoorTemp: value * 100 });
3033
+ }
3034
+ },
3035
+ };
3036
+ exports.DTB190502A1_LED = {
3037
+ key: ["LED"],
3038
+ convertSet: async (entity, key, value, meta) => {
3039
+ if (value === "default") {
3040
+ value = 1;
3041
+ }
3042
+ const lookup = {
3043
+ OFF: 0,
3044
+ ON: 1,
3045
+ };
3046
+ value = utils.getFromLookup(value, lookup);
3047
+ // Check for valid data
3048
+ utils.assertNumber(value, key);
3049
+ if ((value >= 0 && value < 2) === false)
3050
+ value = 0;
3051
+ const payload = {
3052
+ 16400: {
3053
+ value,
3054
+ type: 0x21,
3055
+ },
3056
+ };
3057
+ await entity.write("genBasic", payload);
3058
+ },
3059
+ };
3060
+ exports.ptvo_switch_trigger = {
3061
+ key: ["trigger", "interval"],
3062
+ convertSet: async (entity, key, value, meta) => {
3063
+ utils.assertNumber(value, key);
3064
+ utils.assertEndpoint(entity);
3065
+ if (key === "trigger") {
3066
+ await entity.command("genOnOff", "onWithTimedOff", { ctrlbits: 0, ontime: Math.round(value / 100), offwaittime: 0 });
3067
+ }
3068
+ else if (key === "interval") {
3069
+ await entity.configureReporting("genOnOff", [
3070
+ {
3071
+ attribute: "onOff",
3072
+ minimumReportInterval: value,
3073
+ maximumReportInterval: value,
3074
+ reportableChange: 0,
3075
+ },
3076
+ ]);
3077
+ }
3078
+ },
3079
+ };
3080
+ exports.ptvo_switch_uart = {
3081
+ key: ["action"],
3082
+ convertSet: async (entity, key, value, meta) => {
3083
+ if (!value) {
3084
+ return;
3085
+ }
3086
+ const payload = { 14: { value, type: 0x42 } };
3087
+ for (const endpoint of meta.device.endpoints) {
3088
+ const cluster = "genMultistateValue";
3089
+ if (endpoint.supportsInputCluster(cluster) || endpoint.supportsOutputCluster(cluster)) {
3090
+ await endpoint.write(cluster, payload);
3091
+ return;
3092
+ }
3093
+ }
3094
+ await entity.write("genMultistateValue", payload);
3095
+ },
3096
+ };
3097
+ exports.ptvo_switch_analog_input = {
3098
+ key: ["l1", "l2", "l3", "l4", "l5", "l6", "l7", "l8", "l9", "l10", "l11", "l12", "l13", "l14", "l15", "l16"],
3099
+ convertGet: async (entity, key, meta) => {
3100
+ const epId = Number.parseInt(key.substr(1, 2));
3101
+ if (utils.hasEndpoints(meta.device, [epId])) {
3102
+ const endpoint = meta.device.getEndpoint(epId);
3103
+ await endpoint.read("genAnalogInput", ["presentValue", "description"]);
3104
+ }
3105
+ },
3106
+ convertSet: async (entity, key, value, meta) => {
3107
+ const epId = Number.parseInt(key.substr(1, 2));
3108
+ if (utils.hasEndpoints(meta.device, [epId])) {
3109
+ const endpoint = meta.device.getEndpoint(epId);
3110
+ let cluster = "genLevelCtrl";
3111
+ if (endpoint.supportsInputCluster(cluster) || endpoint.supportsOutputCluster(cluster)) {
3112
+ const value2 = Number(value);
3113
+ if (Number.isNaN(value2)) {
3114
+ return;
3115
+ }
3116
+ const payload = { currentLevel: value2 };
3117
+ await endpoint.write(cluster, payload);
3118
+ return;
3119
+ }
3120
+ cluster = "genAnalogInput";
3121
+ if (endpoint.supportsInputCluster(cluster) || endpoint.supportsOutputCluster(cluster)) {
3122
+ const value2 = Number(value);
3123
+ if (Number.isNaN(value2)) {
3124
+ return;
3125
+ }
3126
+ const payload = { presentValue: value2 };
3127
+ await endpoint.write(cluster, payload);
3128
+ return;
3129
+ }
3130
+ }
3131
+ return;
3132
+ },
3133
+ };
3134
+ exports.tint_scene = {
3135
+ key: ["tint_scene"],
3136
+ convertSet: async (entity, key, value, meta) => {
3137
+ await entity.write("genBasic", { 16389: { value, type: 0x20 } }, manufacturerOptions.tint);
3138
+ },
3139
+ };
3140
+ exports.bticino_4027C_cover_state = {
3141
+ key: ["state"],
3142
+ options: [exposes.options.invert_cover()],
3143
+ convertSet: async (entity, key, value, meta) => {
3144
+ utils.assertString(value);
3145
+ const invert = !(utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
3146
+ ? !meta.options.invert_cover
3147
+ : meta.options.invert_cover);
3148
+ const lookup = invert
3149
+ ? { open: "upOpen", close: "downClose", stop: "stop", on: "upOpen", off: "downClose" }
3150
+ : { open: "downClose", close: "upOpen", stop: "stop", on: "downClose", off: "upOpen" };
3151
+ value = value.toLowerCase();
3152
+ utils.validateValue(value, Object.keys(lookup));
3153
+ let position = 50;
3154
+ if (value === "open") {
3155
+ position = 100;
3156
+ }
3157
+ else if (value === "close") {
3158
+ position = 0;
3159
+ }
3160
+ await entity.command("closuresWindowCovering", utils.getFromLookup(value, lookup), {}, utils.getOptions(meta.mapped, entity));
3161
+ return { state: { position } };
3162
+ },
3163
+ };
3164
+ exports.bticino_4027C_cover_position = {
3165
+ key: ["position"],
3166
+ options: [exposes.options.invert_cover(), exposes.options.no_position_support()],
3167
+ convertSet: async (entity, key, value, meta) => {
3168
+ const invert = !(utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
3169
+ ? !meta.options.invert_cover
3170
+ : meta.options.invert_cover);
3171
+ utils.assertNumber(value, key);
3172
+ let newPosition = value;
3173
+ if (meta.options.no_position_support) {
3174
+ newPosition = value >= 50 ? 100 : 0;
3175
+ }
3176
+ const position = newPosition;
3177
+ if (invert) {
3178
+ newPosition = 100 - newPosition;
3179
+ }
3180
+ await entity.command("closuresWindowCovering", "goToLiftPercentage", { percentageliftvalue: newPosition }, utils.getOptions(meta.mapped, entity));
3181
+ return { state: { position: position } };
3182
+ },
3183
+ convertGet: async (entity, key, meta) => {
3184
+ await entity.read("closuresWindowCovering", ["currentPositionLiftPercentage"]);
3185
+ },
3186
+ };
3187
+ exports.legrand_device_mode = {
3188
+ key: ["device_mode"],
3189
+ convertSet: async (entity, key, value, meta) => {
3190
+ utils.assertString(value, key);
3191
+ // enable the dimmer, requires a recent firmware on the device
3192
+ const lookup = {
3193
+ // dimmer
3194
+ dimmer_on: 0x0101,
3195
+ dimmer_off: 0x0100,
3196
+ // contactor
3197
+ switch: 0x0003,
3198
+ auto: 0x0004,
3199
+ // pilot wire
3200
+ pilot_on: 0x0002,
3201
+ pilot_off: 0x0001,
3202
+ };
3203
+ value = value.toLowerCase();
3204
+ utils.validateValue(value, Object.keys(lookup));
3205
+ const payload = { 0: { value: utils.getFromLookup(value, lookup), type: 9 } };
3206
+ await entity.write("manuSpecificLegrandDevices", payload, manufacturerOptions.legrand);
3207
+ return { state: { device_mode: value } };
3208
+ },
3209
+ convertGet: async (entity, key, meta) => {
3210
+ await entity.read("manuSpecificLegrandDevices", [0x0000, 0x0001, 0x0002], manufacturerOptions.legrand);
3211
+ },
3212
+ };
3213
+ exports.legrand_pilot_wire_mode = {
3214
+ key: ["pilot_wire_mode"],
3215
+ convertSet: async (entity, key, value, meta) => {
3216
+ const mode = {
3217
+ comfort: 0x00,
3218
+ "comfort_-1": 0x01,
3219
+ "comfort_-2": 0x02,
3220
+ eco: 0x03,
3221
+ frost_protection: 0x04,
3222
+ off: 0x05,
3223
+ };
3224
+ const payload = { data: Buffer.from([utils.getFromLookup(value, mode)]) };
3225
+ await entity.command("manuSpecificLegrandDevices2", "command0", payload);
3226
+ return { state: { pilot_wire_mode: value } };
3227
+ },
3228
+ convertGet: async (entity, key, meta) => {
3229
+ await entity.read("manuSpecificLegrandDevices2", [0x0000], manufacturerOptions.legrand);
3230
+ },
3231
+ };
3232
+ exports.legrand_power_alarm = {
3233
+ key: ["power_alarm"],
3234
+ convertSet: async (entity, key, value, meta) => {
3235
+ const enableAlarm = !(value === "DISABLE" || value === false);
3236
+ const payloadBolean = { 61441: { value: enableAlarm ? 0x01 : 0x00, type: 0x10 } };
3237
+ const payloadValue = { 61442: { value: value, type: 0x29 } };
3238
+ await entity.write("haElectricalMeasurement", payloadValue);
3239
+ await entity.write("haElectricalMeasurement", payloadBolean);
3240
+ // To have consistent information in the system.
3241
+ await entity.read("haElectricalMeasurement", [0xf000, 0xf001, 0xf002]);
3242
+ },
3243
+ convertGet: async (entity, key, meta) => {
3244
+ await entity.read("haElectricalMeasurement", [0xf000, 0xf001, 0xf002]);
3245
+ },
3246
+ };
3247
+ exports.diyruz_freepad_on_off_config = {
3248
+ key: ["switch_type", "switch_actions"],
3249
+ convertGet: async (entity, key, meta) => {
3250
+ await entity.read("genOnOffSwitchCfg", ["switchType", "switchActions"]);
3251
+ },
3252
+ convertSet: async (entity, key, value, meta) => {
3253
+ const switchTypesLookup = {
3254
+ toggle: 0x00,
3255
+ momentary: 0x01,
3256
+ multifunction: 0x02,
3257
+ };
3258
+ const switchActionsLookup = {
3259
+ on: 0x00,
3260
+ off: 0x01,
3261
+ toggle: 0x02,
3262
+ };
3263
+ const intVal = Number(value);
3264
+ const switchType = utils.getFromLookup(value, switchTypesLookup, intVal);
3265
+ const switchActions = utils.getFromLookup(value, switchActionsLookup, intVal);
3266
+ const payloads = {
3267
+ switch_type: { switchType },
3268
+ switch_actions: { switchActions },
3269
+ };
3270
+ await entity.write("genOnOffSwitchCfg", payloads[key]);
3271
+ return { state: { [`${key}`]: value } };
3272
+ },
3273
+ };
3274
+ exports.TYZB01_on_off = {
3275
+ key: ["state", "time_in_seconds"],
3276
+ convertSet: async (entity, key, value, meta) => {
3277
+ const result = await exports.on_off.convertSet(entity, key, value, meta);
3278
+ utils.assertString(value, key);
3279
+ const lowerCaseValue = value.toLowerCase();
3280
+ if (!["on", "off"].includes(lowerCaseValue)) {
3281
+ return result;
3282
+ }
3283
+ const messageKeys = Object.keys(meta.message);
3284
+ const timeInSecondsValue = (() => {
3285
+ if (messageKeys.includes("state")) {
3286
+ return meta.message.time_in_seconds;
3287
+ }
3288
+ if (meta.endpoint_name) {
3289
+ return meta.message[`time_in_seconds_${meta.endpoint_name}`];
3290
+ }
3291
+ return null;
3292
+ })();
3293
+ if (!timeInSecondsValue) {
3294
+ return result;
3295
+ }
3296
+ const timeInSeconds = Number(timeInSecondsValue);
3297
+ if (!Number.isInteger(timeInSeconds) || timeInSeconds < 0 || timeInSeconds > 0xfffe) {
3298
+ throw Error("The time_in_seconds value must be convertible to an integer in the range: <0x0000, 0xFFFE>");
3299
+ }
3300
+ const on = lowerCaseValue === "on";
3301
+ await entity.command("genOnOff", "onWithTimedOff", {
3302
+ ctrlbits: 0,
3303
+ ontime: on ? 0 : timeInSeconds.valueOf(),
3304
+ offwaittime: on ? timeInSeconds.valueOf() : 0,
3305
+ }, utils.getOptions(meta.mapped, entity));
3306
+ return result;
3307
+ },
3308
+ convertGet: async (entity, key, meta) => {
3309
+ await entity.read("genOnOff", ["onOff"]);
3310
+ },
3311
+ };
3312
+ exports.diyruz_geiger_config = {
3313
+ key: ["sensitivity", "led_feedback", "buzzer_feedback", "sensors_count", "sensors_type", "alert_threshold"],
3314
+ convertSet: async (entity, key, rawValue, meta) => {
3315
+ const lookup = {
3316
+ OFF: 0x00,
3317
+ ON: 0x01,
3318
+ };
3319
+ const sensorsTypeLookup = {
3320
+ "СБМ-20/СТС-5/BOI-33": "0",
3321
+ "СБМ-19/СТС-6": "1",
3322
+ Others: "2",
3323
+ };
3324
+ let value = utils.getFromLookup(rawValue, lookup, Number(rawValue));
3325
+ if (key === "sensors_type") {
3326
+ // @ts-expect-error ignore
3327
+ value = utils.getFromLookup(rawValue, sensorsTypeLookup, Number(rawValue));
3328
+ }
3329
+ const payloads = {
3330
+ sensitivity: { 61440: { value, type: 0x21 } },
3331
+ led_feedback: { 61441: { value, type: 0x10 } },
3332
+ buzzer_feedback: { 61442: { value, type: 0x10 } },
3333
+ sensors_count: { 61443: { value, type: 0x20 } },
3334
+ sensors_type: { 61444: { value, type: 0x30 } },
3335
+ alert_threshold: { 61445: { value, type: 0x23 } },
3336
+ };
3337
+ await entity.write("msIlluminanceLevelSensing", payloads[key]);
3338
+ return {
3339
+ state: { [key]: rawValue },
3340
+ };
3341
+ },
3342
+ convertGet: async (entity, key, meta) => {
3343
+ const payloads = {
3344
+ sensitivity: ["msIlluminanceLevelSensing", 0xf000],
3345
+ led_feedback: ["msIlluminanceLevelSensing", 0xf001],
3346
+ buzzer_feedback: ["msIlluminanceLevelSensing", 0xf002],
3347
+ sensors_count: ["msIlluminanceLevelSensing", 0xf003],
3348
+ sensors_type: ["msIlluminanceLevelSensing", 0xf004],
3349
+ alert_threshold: ["msIlluminanceLevelSensing", 0xf005],
3350
+ };
3351
+ await entity.read(payloads[key][0], [payloads[key][1]]);
3352
+ },
3353
+ };
3354
+ exports.diyruz_airsense_config = {
3355
+ key: ["led_feedback", "enable_abc", "threshold1", "threshold2", "temperature_offset", "pressure_offset", "humidity_offset"],
3356
+ convertSet: async (entity, key, rawValue, meta) => {
3357
+ const lookup = { OFF: 0x00, ON: 0x01 };
3358
+ const value = utils.getFromLookup(rawValue, lookup, Number(rawValue));
3359
+ const payloads = {
3360
+ led_feedback: ["msCO2", { 515: { value, type: 0x10 } }],
3361
+ enable_abc: ["msCO2", { 514: { value, type: 0x10 } }],
3362
+ threshold1: ["msCO2", { 516: { value, type: 0x21 } }],
3363
+ threshold2: ["msCO2", { 517: { value, type: 0x21 } }],
3364
+ temperature_offset: ["msTemperatureMeasurement", { 528: { value, type: 0x29 } }],
3365
+ pressure_offset: ["msPressureMeasurement", { 528: { value, type: 0x2b } }],
3366
+ humidity_offset: ["msRelativeHumidity", { 528: { value, type: 0x29 } }],
3367
+ };
3368
+ await entity.write(payloads[key][0], payloads[key][1]);
3369
+ return {
3370
+ state: { [key]: rawValue },
3371
+ };
3372
+ },
3373
+ convertGet: async (entity, key, meta) => {
3374
+ const payloads = {
3375
+ led_feedback: ["msCO2", 0x0203],
3376
+ enable_abc: ["msCO2", 0x0202],
3377
+ threshold1: ["msCO2", 0x0204],
3378
+ threshold2: ["msCO2", 0x0205],
3379
+ temperature_offset: ["msTemperatureMeasurement", 0x0210],
3380
+ pressure_offset: ["msPressureMeasurement", 0x0210],
3381
+ humidity_offset: ["msRelativeHumidity", 0x0210],
3382
+ };
3383
+ await entity.read(payloads[key][0], [payloads[key][1]]);
3384
+ },
3385
+ };
3386
+ exports.diyruz_zintercom_config = {
3387
+ key: ["mode", "sound", "time_ring", "time_talk", "time_open", "time_bell", "time_report"],
3388
+ convertSet: async (entity, key, rawValue, meta) => {
3389
+ const lookup = { OFF: 0x00, ON: 0x01 };
3390
+ const modeOpenLookup = { never: "0", once: "1", always: "2", drop: "3" };
3391
+ let value = utils.getFromLookup(rawValue, lookup, Number(rawValue));
3392
+ if (key === "mode") {
3393
+ // @ts-expect-error ignore
3394
+ value = utils.getFromLookup(rawValue, modeOpenLookup, Number(rawValue));
3395
+ }
3396
+ const payloads = {
3397
+ mode: { 81: { value, type: 0x30 } },
3398
+ sound: { 82: { value, type: 0x10 } },
3399
+ time_ring: { 83: { value, type: 0x20 } },
3400
+ time_talk: { 84: { value, type: 0x20 } },
3401
+ time_open: { 85: { value, type: 0x20 } },
3402
+ time_bell: { 87: { value, type: 0x20 } },
3403
+ time_report: { 86: { value, type: 0x20 } },
3404
+ };
3405
+ await entity.write("closuresDoorLock", payloads[key]);
3406
+ return {
3407
+ state: { [key]: rawValue },
3408
+ };
3409
+ },
3410
+ convertGet: async (entity, key, meta) => {
3411
+ const payloads = {
3412
+ mode: ["closuresDoorLock", 0x0051],
3413
+ sound: ["closuresDoorLock", 0x0052],
3414
+ time_ring: ["closuresDoorLock", 0x0053],
3415
+ time_talk: ["closuresDoorLock", 0x0054],
3416
+ time_open: ["closuresDoorLock", 0x0055],
3417
+ time_bell: ["closuresDoorLock", 0x0057],
3418
+ time_report: ["closuresDoorLock", 0x0056],
3419
+ };
3420
+ const v = utils.getFromLookup(key, payloads);
3421
+ await entity.read(v[0], [v[1]]);
3422
+ },
3423
+ };
3424
+ exports.power_source = {
3425
+ key: ["power_source", "charging"],
3426
+ convertGet: async (entity, key, meta) => {
3427
+ await entity.read("genBasic", ["powerSource"]);
3428
+ },
3429
+ };
3430
+ exports.ts0201_temperature_humidity_alarm = {
3431
+ key: ["alarm_humidity_max", "alarm_humidity_min", "alarm_temperature_max", "alarm_temperature_min"],
3432
+ convertSet: async (entity, key, value, meta) => {
3433
+ switch (key) {
3434
+ case "alarm_temperature_max":
3435
+ case "alarm_temperature_min":
3436
+ case "alarm_humidity_max":
3437
+ case "alarm_humidity_min": {
3438
+ // await entity.write('manuSpecificTuya_2', {[key]: value});
3439
+ // instead write as custom attribute to override incorrect herdsman dataType from uint16 to int16
3440
+ // https://github.com/Koenkk/zigbee-herdsman/blob/v0.13.191/src/zcl/definition/cluster.ts#L4235
3441
+ const keyToAttributeLookup = {
3442
+ alarm_temperature_max: 0xd00a,
3443
+ alarm_temperature_min: 0xd00b,
3444
+ alarm_humidity_max: 0xd00d,
3445
+ alarm_humidity_min: 0xd00e,
3446
+ };
3447
+ const payload = { [keyToAttributeLookup[key]]: { value: value, type: zigbee_herdsman_1.Zcl.DataType.INT16 } };
3448
+ await entity.write("manuSpecificTuya_2", payload);
3449
+ break;
3450
+ }
3451
+ default: // Unknown key
3452
+ logger_1.logger.warning(`Unhandled key ${key}`, NS);
3453
+ }
3454
+ },
3455
+ };
3456
+ exports.heiman_ir_remote = {
3457
+ key: ["send_key", "create", "learn", "delete", "get_list"],
3458
+ convertSet: async (entity, key, value, meta) => {
3459
+ const options = {
3460
+ // Don't send a manufacturerCode (otherwise set in herdsman):
3461
+ // https://github.com/Koenkk/zigbee-herdsman-converters/pull/2827
3462
+ // @ts-expect-error ignore
3463
+ manufacturerCode: null,
3464
+ ...utils.getOptions(meta.mapped, entity),
3465
+ };
3466
+ switch (key) {
3467
+ case "send_key":
3468
+ utils.assertObject(value);
3469
+ await entity.command("heimanSpecificInfraRedRemote", "sendKey", { id: value.id, keyCode: value.key_code }, options);
3470
+ break;
3471
+ case "create":
3472
+ utils.assertObject(value);
3473
+ await entity.command("heimanSpecificInfraRedRemote", "createId", { modelType: value.model_type }, options);
3474
+ break;
3475
+ case "learn":
3476
+ utils.assertObject(value);
3477
+ await entity.command("heimanSpecificInfraRedRemote", "studyKey", { id: value.id, keyCode: value.key_code }, options);
3478
+ break;
3479
+ case "delete":
3480
+ utils.assertObject(value);
3481
+ await entity.command("heimanSpecificInfraRedRemote", "deleteKey", { id: value.id, keyCode: value.key_code }, options);
3482
+ break;
3483
+ case "get_list":
3484
+ await entity.command("heimanSpecificInfraRedRemote", "getIdAndKeyCodeList", {}, options);
3485
+ break;
3486
+ default: // Unknown key
3487
+ throw new Error(`Unhandled key ${key}`);
3488
+ }
3489
+ },
3490
+ };
3491
+ exports.scene_store = {
3492
+ key: ["scene_store"],
3493
+ convertSet: async (entity, key, value, meta) => {
3494
+ const isGroup = utils.isGroup(entity);
3495
+ const groupid = isGroup ? entity.groupID : value.group_id !== undefined ? value.group_id : 0;
3496
+ let sceneid = value;
3497
+ let scenename = null;
3498
+ if (typeof value === "object") {
3499
+ sceneid = value.ID;
3500
+ scenename = value.name;
3501
+ }
3502
+ utils.assertNumber(sceneid, "ID");
3503
+ if (groupid === 0 && sceneid === 0) {
3504
+ // From Zigbee spec:
3505
+ // "Scene identifier 0x00, along with group identifier 0x0000, is reserved for the global scene used by the OnOff cluster"
3506
+ throw new Error("Scene ID 0 cannot be used with group ID 0 (reserved).");
3507
+ }
3508
+ const response = await entity.command("genScenes", "store", { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3509
+ if (isGroup) {
3510
+ if (meta.membersState) {
3511
+ for (const member of entity.members) {
3512
+ utils.saveSceneState(member, sceneid, groupid, meta.membersState[member.getDevice().ieeeAddr], scenename);
3513
+ }
3514
+ }
3515
+ // @ts-expect-error ignore
3516
+ }
3517
+ else if (response.status === 0) {
3518
+ utils.saveSceneState(entity, sceneid, groupid, meta.state, scenename);
3519
+ }
3520
+ else {
3521
+ // @ts-expect-error ignore
3522
+ throw new Error(`Scene add not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3523
+ }
3524
+ logger_1.logger.info("Successfully stored scene", NS);
3525
+ return { state: {} };
3526
+ },
3527
+ };
3528
+ exports.scene_recall = {
3529
+ key: ["scene_recall"],
3530
+ convertSet: async (entity, key, value, meta) => {
3531
+ const groupid = utils.isGroup(entity) ? entity.groupID : 0;
3532
+ utils.assertNumber(value);
3533
+ const sceneid = value;
3534
+ await entity.command("genScenes", "recall", { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3535
+ const addColorMode = (newState) => {
3536
+ if (newState.color_temp !== undefined) {
3537
+ newState.color_mode = constants.colorModeLookup[2];
3538
+ }
3539
+ else if (newState.color !== undefined) {
3540
+ if (newState.color.x !== undefined) {
3541
+ newState.color_mode = constants.colorModeLookup[1];
3542
+ }
3543
+ else {
3544
+ newState.color_mode = constants.colorModeLookup[0];
3545
+ }
3546
+ }
3547
+ return newState;
3548
+ };
3549
+ if (utils.isGroup(entity)) {
3550
+ const membersState = {};
3551
+ for (const member of entity.members) {
3552
+ let recalledState = utils.getSceneState(member, sceneid, groupid);
3553
+ if (recalledState) {
3554
+ // add color_mode if saved state does not contain it
3555
+ if (recalledState.color_mode === undefined) {
3556
+ recalledState = addColorMode(recalledState);
3557
+ }
3558
+ Object.assign(recalledState, libColor.syncColorState(recalledState, meta.state, entity, meta.options));
3559
+ membersState[member.getDevice().ieeeAddr] = recalledState;
3560
+ }
3561
+ else {
3562
+ logger_1.logger.warning(`Unknown scene was recalled for ${member.getDevice().ieeeAddr}, can't restore state.`, NS);
3563
+ membersState[member.getDevice().ieeeAddr] = {};
3564
+ }
3565
+ }
3566
+ logger_1.logger.info("Successfully recalled group scene", NS);
3567
+ return { membersState };
3568
+ }
3569
+ let recalledState = utils.getSceneState(entity, sceneid, groupid);
3570
+ if (recalledState) {
3571
+ // add color_mode if saved state does not contain it
3572
+ if (recalledState.color_mode === undefined) {
3573
+ recalledState = addColorMode(recalledState);
3574
+ }
3575
+ Object.assign(recalledState, libColor.syncColorState(recalledState, meta.state, entity, meta.options));
3576
+ logger_1.logger.info("Successfully recalled scene", NS);
3577
+ return { state: recalledState };
3578
+ }
3579
+ logger_1.logger.warning(`Unknown scene was recalled for ${entity.deviceIeeeAddress}, can't restore state.`, NS);
3580
+ return { state: {} };
3581
+ },
3582
+ };
3583
+ exports.scene_add = {
3584
+ key: ["scene_add"],
3585
+ convertSet: async (entity, key, value, meta) => {
3586
+ utils.assertObject(value);
3587
+ utils.assertNumber(value.ID, "ID");
3588
+ if (value.color_temp !== undefined && value.color !== undefined) {
3589
+ throw new Error(`Don't specify both 'color_temp' and 'color'`);
3590
+ }
3591
+ const isGroup = utils.isGroup(entity);
3592
+ const groupid = isGroup ? entity.groupID : value.group_id !== undefined ? value.group_id : 0;
3593
+ const sceneid = value.ID;
3594
+ const scenename = value.name;
3595
+ const transtime = value.transition !== undefined ? value.transition : 0;
3596
+ if (groupid === 0 && sceneid === 0) {
3597
+ // From Zigbee spec:
3598
+ // "Scene identifier 0x00, along with group identifier 0x0000, is reserved for the global scene used by the OnOff cluster"
3599
+ throw new Error("Scene ID 0 cannot be used with group ID 0 (reserved).");
3600
+ }
3601
+ const state = {};
3602
+ const extensionfieldsets = [];
3603
+ for (const attribute of Object.keys(value)) {
3604
+ let val = value[attribute];
3605
+ if (attribute === "state") {
3606
+ extensionfieldsets.push({ clstId: 6, len: 1, extField: [val.toLowerCase() === "on" ? 1 : 0] });
3607
+ state.state = val.toUpperCase();
3608
+ }
3609
+ else if (attribute === "brightness") {
3610
+ extensionfieldsets.push({ clstId: 8, len: 1, extField: [val] });
3611
+ state.brightness = val;
3612
+ }
3613
+ else if (attribute === "position") {
3614
+ const invert = utils.getMetaValue(entity, meta.mapped, "coverInverted", "allEqual", false)
3615
+ ? !meta.options.invert_cover
3616
+ : meta.options.invert_cover;
3617
+ extensionfieldsets.push({ clstId: 258, len: 1, extField: [invert ? 100 - val : val] });
3618
+ state.position = val;
3619
+ }
3620
+ else if (attribute === "color_temp") {
3621
+ /*
3622
+ * ZCL version 7 added support for ColorTemperatureMireds
3623
+ *
3624
+ * Currently no devices seem to support this, so always fallback to XY conversion. In the future if a device
3625
+ * supports this, or other features get added this the following commit contains an implementation:
3626
+ * https://github.com/Koenkk/zigbee-herdsman-converters/pull/1837/commits/c22175b946b83230ce4e711c2a3796cf2029e78f
3627
+ *
3628
+ * Conversion to XY is allowed according to the ZCL:
3629
+ * `Since there is a direct relation between ColorTemperatureMireds and XY,
3630
+ * color temperature, if supported, is stored as XY in the scenes table.`
3631
+ *
3632
+ * See https://github.com/Koenkk/zigbee2mqtt/issues/4926#issuecomment-735947705
3633
+ */
3634
+ const [colorTempMin, colorTempMax] = light.findColorTempRange(entity);
3635
+ val = light.clampColorTemp(val, colorTempMin, colorTempMax);
3636
+ const xy = libColor.ColorXY.fromMireds(val);
3637
+ const xScaled = utils.mapNumberRange(xy.x, 0, 1, 0, 65535);
3638
+ const yScaled = utils.mapNumberRange(xy.y, 0, 1, 0, 65535);
3639
+ extensionfieldsets.push({ clstId: 768, len: 4, extField: [xScaled, yScaled] });
3640
+ state.color_mode = constants.colorModeLookup[2];
3641
+ state.color_temp = val;
3642
+ }
3643
+ else if (attribute === "color") {
3644
+ try {
3645
+ val = JSON.parse(val);
3646
+ }
3647
+ catch {
3648
+ /* empty */
3649
+ }
3650
+ const newColor = libColor.Color.fromConverterArg(val);
3651
+ if (newColor.isXY()) {
3652
+ const xScaled = utils.mapNumberRange(newColor.xy.x, 0, 1, 0, 65535);
3653
+ const yScaled = utils.mapNumberRange(newColor.xy.y, 0, 1, 0, 65535);
3654
+ extensionfieldsets.push({
3655
+ clstId: 768,
3656
+ len: 4,
3657
+ extField: [xScaled, yScaled],
3658
+ });
3659
+ state.color_mode = constants.colorModeLookup[1];
3660
+ state.color = newColor.xy.toObject();
3661
+ }
3662
+ else if (newColor.isHSV()) {
3663
+ const hsvCorrected = newColor.hsv.colorCorrected(meta);
3664
+ if (utils.getMetaValue(entity, meta.mapped, "supportsEnhancedHue", "allEqual", true)) {
3665
+ const hScaled = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535);
3666
+ const sScaled = utils.mapNumberRange(hsvCorrected.saturation, 0, 100, 0, 254);
3667
+ extensionfieldsets.push({
3668
+ clstId: 768,
3669
+ len: 13,
3670
+ extField: [0, 0, hScaled, sScaled, 0, 0, 0, 0],
3671
+ });
3672
+ }
3673
+ else {
3674
+ // The extensionFieldSet is always EnhancedCurrentHue according to ZCL
3675
+ // When the bulb or all bulbs in a group do not support enhanchedHue,
3676
+ const colorXY = hsvCorrected.toXY();
3677
+ const xScaled = utils.mapNumberRange(colorXY.x, 0, 1, 0, 65535);
3678
+ const yScaled = utils.mapNumberRange(colorXY.y, 0, 1, 0, 65535);
3679
+ extensionfieldsets.push({
3680
+ clstId: 768,
3681
+ len: 4,
3682
+ extField: [xScaled, yScaled],
3683
+ });
3684
+ }
3685
+ state.color_mode = constants.colorModeLookup[0];
3686
+ state.color = newColor.hsv.toObject(false, false);
3687
+ }
3688
+ }
3689
+ }
3690
+ /*
3691
+ * Remove scene first
3692
+ *
3693
+ * Multiple add scene calls will result in the current and previous
3694
+ * payloads to be merged. Resulting in unexpected behavior when
3695
+ * trying to replace a scene.
3696
+ *
3697
+ * We accept a SUCCESS or NOT_FOUND as a result of the remove call.
3698
+ */
3699
+ const removeresp = await entity.command("genScenes", "remove", { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3700
+ if (isGroup || (utils.isObject(removeresp) && (removeresp.status === 0 || removeresp.status === 133 || removeresp.status === 139))) {
3701
+ const addSceneCommand = Number.isInteger(transtime) ? "add" : "enhancedAdd";
3702
+ const commandTransitionTime = addSceneCommand === "enhancedAdd" ? Math.floor(transtime * 10) : transtime;
3703
+ const response = await entity.command("genScenes", addSceneCommand, { groupid, sceneid, scenename: "", transtime: commandTransitionTime, extensionfieldsets }, utils.getOptions(meta.mapped, entity));
3704
+ if (isGroup) {
3705
+ if (meta.membersState) {
3706
+ for (const member of entity.members) {
3707
+ utils.saveSceneState(member, sceneid, groupid, state, scenename);
3708
+ }
3709
+ }
3710
+ }
3711
+ else {
3712
+ utils.assertObject(response);
3713
+ if (response.status === 0) {
3714
+ utils.saveSceneState(entity, sceneid, groupid, state, scenename);
3715
+ }
3716
+ else {
3717
+ throw new Error(`Scene add not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3718
+ }
3719
+ }
3720
+ }
3721
+ else {
3722
+ const status = utils.isObject(removeresp) ? zigbee_herdsman_1.Zcl.Status[removeresp.status] : "unknown";
3723
+ throw new Error(`Scene add unable to remove existing scene ('${status}')`);
3724
+ }
3725
+ logger_1.logger.info("Successfully added scene", NS);
3726
+ return { state: {} };
3727
+ },
3728
+ };
3729
+ exports.scene_remove = {
3730
+ key: ["scene_remove"],
3731
+ convertSet: async (entity, key, value, meta) => {
3732
+ const isGroup = utils.isGroup(entity);
3733
+ utils.assertNumber(value);
3734
+ const groupid = isGroup ? entity.groupID : 0;
3735
+ const sceneid = value;
3736
+ const response = await entity.command("genScenes", "remove", { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3737
+ if (isGroup) {
3738
+ if (meta.membersState) {
3739
+ for (const member of entity.members) {
3740
+ utils.deleteSceneState(member, sceneid, groupid);
3741
+ }
3742
+ }
3743
+ // @ts-expect-error ignore
3744
+ }
3745
+ else if (response.status === 0) {
3746
+ utils.deleteSceneState(entity, sceneid, groupid);
3747
+ }
3748
+ else {
3749
+ // @ts-expect-error ignore
3750
+ throw new Error(`Scene remove not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3751
+ }
3752
+ logger_1.logger.info("Successfully removed scene", NS);
3753
+ },
3754
+ };
3755
+ exports.scene_remove_all = {
3756
+ key: ["scene_remove_all"],
3757
+ convertSet: async (entity, key, value, meta) => {
3758
+ const groupid = utils.isGroup(entity) ? entity.groupID : 0;
3759
+ const response = await entity.command("genScenes", "removeAll", { groupid }, utils.getOptions(meta.mapped, entity));
3760
+ utils.assertObject(response);
3761
+ if (utils.isGroup(entity)) {
3762
+ if (meta.membersState) {
3763
+ for (const member of entity.members) {
3764
+ utils.deleteSceneState(member);
3765
+ }
3766
+ }
3767
+ }
3768
+ else if (response.status === 0) {
3769
+ utils.deleteSceneState(entity);
3770
+ }
3771
+ else {
3772
+ throw new Error(`Scene remove all not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3773
+ }
3774
+ logger_1.logger.info("Successfully removed all scenes", NS);
3775
+ },
3776
+ };
3777
+ exports.scene_rename = {
3778
+ key: ["scene_rename"],
3779
+ convertSet: async (entity, key, value, meta) => {
3780
+ utils.assertObject(value);
3781
+ const isGroup = utils.isGroup(entity);
3782
+ const sceneid = value.ID;
3783
+ const scenename = value.name;
3784
+ const groupid = isGroup ? entity.groupID : value.group_id !== undefined ? value.group_id : 0;
3785
+ if (isGroup) {
3786
+ if (meta.membersState) {
3787
+ for (const member of entity.members) {
3788
+ const state = utils.getSceneState(member, sceneid, groupid);
3789
+ if (state) {
3790
+ utils.saveSceneState(member, sceneid, groupid, state, scenename);
3791
+ }
3792
+ }
3793
+ }
3794
+ }
3795
+ else {
3796
+ const state = utils.getSceneState(entity, sceneid, groupid);
3797
+ if (!state) {
3798
+ throw new Error("No such scene in device meta data");
3799
+ }
3800
+ utils.saveSceneState(entity, sceneid, groupid, state, scenename);
3801
+ }
3802
+ logger_1.logger.info("Successfully renamed scene", NS);
3803
+ },
3804
+ };
3805
+ exports.TS0003_curtain_switch = {
3806
+ key: ["state"],
3807
+ convertSet: async (entity, key, value, meta) => {
3808
+ utils.assertString(value, key);
3809
+ utils.assertEndpoint(entity);
3810
+ const lookup = { close: 1, stop: 2, open: 1 };
3811
+ value = value.toLowerCase();
3812
+ utils.validateValue(value, Object.keys(lookup));
3813
+ const endpointID = utils.getFromLookup(value, lookup);
3814
+ const endpoint = entity.getDevice().getEndpoint(endpointID);
3815
+ await endpoint.command("genOnOff", "on", {}, utils.getOptions(meta.mapped, entity));
3816
+ },
3817
+ convertGet: async (entity, key, meta) => {
3818
+ await entity.read("genOnOff", ["onOff"]);
3819
+ },
3820
+ };
3821
+ exports.ts0216_duration = {
3822
+ key: ["duration"],
3823
+ convertSet: async (entity, key, value, meta) => {
3824
+ await entity.write("ssIasWd", { maxDuration: value });
3825
+ },
3826
+ convertGet: async (entity, key, meta) => {
3827
+ await entity.read("ssIasWd", ["maxDuration"]);
3828
+ },
3829
+ };
3830
+ exports.ts0216_volume = {
3831
+ key: ["volume"],
3832
+ convertSet: async (entity, key, value, meta) => {
3833
+ utils.assertNumber(value);
3834
+ await entity.write("ssIasWd", { 2: { value: utils.mapNumberRange(value, 0, 100, 100, 10), type: 0x20 } });
3835
+ },
3836
+ convertGet: async (entity, key, meta) => {
3837
+ await entity.read("ssIasWd", [0x0002]);
3838
+ },
3839
+ };
3840
+ exports.ts0216_alarm = {
3841
+ key: ["alarm"],
3842
+ convertSet: async (entity, key, value, meta) => {
3843
+ const info = value ? (2 << 4) + (1 << 2) + 0 : 0;
3844
+ await entity.command("ssIasWd", "startWarning", { startwarninginfo: info, warningduration: 0, strobedutycycle: 0, strobelevel: 3 }, utils.getOptions(meta.mapped, entity));
3845
+ },
3846
+ };
3847
+ exports.tuya_cover_calibration = {
3848
+ key: ["calibration", "calibration_up", "calibration_down"],
3849
+ convertSet: async (entity, key, value, meta) => {
3850
+ utils.assertString(value, key);
3851
+ const lookup = { ON: 0, OFF: 1 };
3852
+ value = value.toUpperCase();
3853
+ const calibration = utils.getFromLookup(value, lookup);
3854
+ switch (key) {
3855
+ case "calibration":
3856
+ case "calibration_up":
3857
+ await entity.write("closuresWindowCovering", { tuyaCalibration: calibration });
3858
+ break;
3859
+ case "calibration_down":
3860
+ await meta.device.getEndpoint(2).write("closuresWindowCovering", { tuyaCalibration: calibration });
3861
+ break;
3862
+ }
3863
+ return { state: { [key]: value } };
3864
+ },
3865
+ convertGet: async (entity, key, meta) => {
3866
+ switch (key) {
3867
+ case "calibration":
3868
+ case "calibration_up":
3869
+ await entity.read("closuresWindowCovering", ["tuyaCalibration"]);
3870
+ break;
3871
+ case "calibration_down":
3872
+ await meta.device.getEndpoint(2).read("closuresWindowCovering", ["tuyaCalibration"]);
3873
+ break;
3874
+ }
3875
+ },
3876
+ };
3877
+ exports.tuya_cover_reversal = {
3878
+ key: ["motor_reversal"],
3879
+ convertSet: async (entity, key, value, meta) => {
3880
+ utils.assertString(value, key);
3881
+ const lookup = { ON: 1, OFF: 0 };
3882
+ value = value.toUpperCase();
3883
+ const reversal = utils.getFromLookup(value, lookup);
3884
+ await entity.write("closuresWindowCovering", { tuyaMotorReversal: reversal });
3885
+ return { state: { motor_reversal: value } };
3886
+ },
3887
+ convertGet: async (entity, key, meta) => {
3888
+ await entity.read("closuresWindowCovering", ["tuyaMotorReversal"]);
3889
+ },
3890
+ };
3891
+ exports.moes_cover_calibration = {
3892
+ key: ["calibration_time"],
3893
+ convertSet: async (entity, key, value, meta) => {
3894
+ utils.assertNumber(value);
3895
+ const calibration = value * 10;
3896
+ await entity.write("closuresWindowCovering", { moesCalibrationTime: calibration });
3897
+ return { state: { calibration_time: value } };
3898
+ },
3899
+ convertGet: async (entity, key, meta) => {
3900
+ await entity.read("closuresWindowCovering", ["moesCalibrationTime"]);
3901
+ },
3902
+ };
3903
+ exports.ZM35HQ_attr = {
3904
+ key: ["sensitivity", "keep_time"],
3905
+ convertSet: async (entity, key, value, meta) => {
3906
+ switch (key) {
3907
+ case "sensitivity":
3908
+ await entity.write("ssIasZone", { currentZoneSensitivityLevel: utils.getFromLookup(value, { low: 0, medium: 1, high: 2 }) });
3909
+ break;
3910
+ case "keep_time":
3911
+ await entity.write("ssIasZone", { 61441: { value: utils.getFromLookup(value, { 30: 0, 60: 1, 120: 2 }), type: 0x20 } });
3912
+ break;
3913
+ default: // Unknown key
3914
+ throw new Error(`Unhandled key ${key}`);
3915
+ }
3916
+ },
3917
+ convertGet: async (entity, key, meta) => {
3918
+ // Apparently, reading values may interfere with a commandStatusChangeNotification for changed occupancy.
3919
+ // Therefore, read "zoneStatus" as well.
3920
+ await entity.read("ssIasZone", ["currentZoneSensitivityLevel", 61441, "zoneStatus"]);
3921
+ },
3922
+ };
3923
+ exports.TS0210_sensitivity = {
3924
+ key: ["sensitivity"],
3925
+ convertSet: async (entity, key, value, meta) => {
3926
+ value = utils.toNumber(value, "sensitivity");
3927
+ await entity.write("ssIasZone", { currentZoneSensitivityLevel: value });
3928
+ return { state: { sensitivity: value } };
3929
+ },
3930
+ };
3931
+ exports.viessmann_window_open = {
3932
+ key: ["window_open"],
3933
+ convertGet: async (entity, key, meta) => {
3934
+ await entity.read("hvacThermostat", ["viessmannWindowOpenInternal"], manufacturerOptions.viessmann);
3935
+ },
3936
+ };
3937
+ exports.viessmann_window_open_force = {
3938
+ key: ["window_open_force"],
3939
+ convertSet: async (entity, key, value, meta) => {
3940
+ if (typeof value === "boolean") {
3941
+ await entity.write("hvacThermostat", { viessmannWindowOpenForce: value }, manufacturerOptions.viessmann);
3942
+ return { state: { window_open_force: value } };
3943
+ }
3944
+ logger_1.logger.error("window_open_force must be a boolean!", NS);
3945
+ },
3946
+ convertGet: async (entity, key, meta) => {
3947
+ await entity.read("hvacThermostat", ["viessmannWindowOpenForce"], manufacturerOptions.viessmann);
3948
+ },
3949
+ };
3950
+ exports.viessmann_assembly_mode = {
3951
+ key: ["assembly_mode"],
3952
+ convertGet: async (entity, key, meta) => {
3953
+ await entity.read("hvacThermostat", ["viessmannAssemblyMode"], manufacturerOptions.viessmann);
3954
+ },
3955
+ };
3956
+ exports.dawondns_only_off = {
3957
+ key: ["state"],
3958
+ convertSet: async (entity, key, value, meta) => {
3959
+ utils.assertString(value, key);
3960
+ value = value.toLowerCase();
3961
+ utils.assertString(value, key);
3962
+ utils.validateValue(value, ["off"]);
3963
+ await entity.command("genOnOff", value, {}, utils.getOptions(meta.mapped, entity));
3964
+ },
3965
+ convertGet: async (entity, key, meta) => {
3966
+ await entity.read("genOnOff", ["onOff"]);
3967
+ },
3968
+ };
3969
+ exports.idlock_master_pin_mode = {
3970
+ key: ["master_pin_mode"],
3971
+ convertSet: async (entity, key, value, meta) => {
3972
+ await entity.write("closuresDoorLock", { 16384: { value: value === true ? 1 : 0, type: 0x10 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3973
+ return { state: { master_pin_mode: value } };
3974
+ },
3975
+ convertGet: async (entity, key, meta) => {
3976
+ await entity.read("closuresDoorLock", [0x4000], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3977
+ },
3978
+ };
3979
+ exports.idlock_rfid_enable = {
3980
+ key: ["rfid_enable"],
3981
+ convertSet: async (entity, key, value, meta) => {
3982
+ await entity.write("closuresDoorLock", { 16385: { value: value === true ? 1 : 0, type: 0x10 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3983
+ return { state: { rfid_enable: value } };
3984
+ },
3985
+ convertGet: async (entity, key, meta) => {
3986
+ await entity.read("closuresDoorLock", [0x4001], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3987
+ },
3988
+ };
3989
+ exports.idlock_service_mode = {
3990
+ key: ["service_mode"],
3991
+ convertSet: async (entity, key, value, meta) => {
3992
+ const lookup = { deactivated: 0, random_pin_1x_use: 5, random_pin_24_hours: 6 };
3993
+ await entity.write("closuresDoorLock", { 16387: { value: utils.getFromLookup(value, lookup), type: 0x20 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3994
+ return { state: { service_mode: value } };
3995
+ },
3996
+ convertGet: async (entity, key, meta) => {
3997
+ await entity.read("closuresDoorLock", [0x4003], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
3998
+ },
3999
+ };
4000
+ exports.idlock_lock_mode = {
4001
+ key: ["lock_mode"],
4002
+ convertSet: async (entity, key, value, meta) => {
4003
+ const lookup = { auto_off_away_off: 0, auto_on_away_off: 1, auto_off_away_on: 2, auto_on_away_on: 3 };
4004
+ await entity.write("closuresDoorLock", { 16388: { value: utils.getFromLookup(value, lookup), type: 0x20 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4005
+ return { state: { lock_mode: value } };
4006
+ },
4007
+ convertGet: async (entity, key, meta) => {
4008
+ await entity.read("closuresDoorLock", [0x4004], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4009
+ },
4010
+ };
4011
+ exports.idlock_relock_enabled = {
4012
+ key: ["relock_enabled"],
4013
+ convertSet: async (entity, key, value, meta) => {
4014
+ await entity.write("closuresDoorLock", { 16389: { value: value === true ? 1 : 0, type: 0x10 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4015
+ return { state: { relock_enabled: value } };
4016
+ },
4017
+ convertGet: async (entity, key, meta) => {
4018
+ await entity.read("closuresDoorLock", [0x4005], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4019
+ },
4020
+ };
4021
+ exports.schneider_pilot_mode = {
4022
+ key: ["schneider_pilot_mode"],
4023
+ convertSet: async (entity, key, value, meta) => {
4024
+ utils.assertString(value, key);
4025
+ const lookup = { contactor: 1, pilot: 3 };
4026
+ value = value.toLowerCase();
4027
+ const mode = utils.getFromLookup(value, lookup);
4028
+ await entity.write("schneiderSpecificPilotMode", { pilotMode: mode }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4029
+ return { state: { schneider_pilot_mode: value } };
4030
+ },
4031
+ convertGet: async (entity, key, meta) => {
4032
+ await entity.read("schneiderSpecificPilotMode", ["pilotMode"], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4033
+ },
4034
+ };
4035
+ exports.schneider_dimmer_mode = {
4036
+ key: ["dimmer_mode"],
4037
+ convertSet: async (entity, key, value, meta) => {
4038
+ const lookup = { RC: 1, RL: 2 };
4039
+ const mode = utils.getFromLookup(value, lookup);
4040
+ await entity.write("lightingBallastCfg", { 57344: { value: mode, type: 0x30 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4041
+ return { state: { dimmer_mode: value } };
4042
+ },
4043
+ convertGet: async (entity, key, meta) => {
4044
+ await entity.read("lightingBallastCfg", [0xe000], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4045
+ },
4046
+ };
4047
+ exports.wiser_dimmer_mode = {
4048
+ key: ["dimmer_mode"],
4049
+ convertSet: async (entity, key, value, meta) => {
4050
+ const controlMode = utils.getKey(constants.wiserDimmerControlMode, value, value, Number);
4051
+ await entity.write("lightingBallastCfg", { wiserControlMode: controlMode }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4052
+ return { state: { dimmer_mode: value } };
4053
+ },
4054
+ convertGet: async (entity, key, meta) => {
4055
+ await entity.read("lightingBallastCfg", ["wiserControlMode"], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC });
4056
+ },
4057
+ };
4058
+ exports.schneider_temperature_measured_value = {
4059
+ key: ["temperature_measured_value"],
4060
+ convertSet: async (entity, key, value, meta) => {
4061
+ utils.assertNumber(value);
4062
+ utils.assertEndpoint(entity);
4063
+ await entity.report("msTemperatureMeasurement", { measuredValue: Math.round(value * 100) });
4064
+ },
4065
+ };
4066
+ exports.schneider_thermostat_system_mode = {
4067
+ key: ["system_mode"],
4068
+ convertSet: async (entity, key, value, meta) => {
4069
+ utils.assertEndpoint(entity);
4070
+ const systemMode = utils.getKey(constants.thermostatSystemModes, value, undefined, Number);
4071
+ entity.saveClusterAttributeKeyValue("hvacThermostat", { systemMode: systemMode });
4072
+ return { state: { system_mode: value } };
4073
+ },
4074
+ };
4075
+ exports.schneider_thermostat_occupied_heating_setpoint = {
4076
+ key: ["occupied_heating_setpoint"],
4077
+ convertSet: async (entity, key, value, meta) => {
4078
+ utils.assertNumber(value, key);
4079
+ utils.assertEndpoint(entity);
4080
+ const occupiedHeatingSetpoint = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
4081
+ entity.saveClusterAttributeKeyValue("hvacThermostat", { occupiedHeatingSetpoint: occupiedHeatingSetpoint });
4082
+ return { state: { occupied_heating_setpoint: value } };
4083
+ },
4084
+ };
4085
+ exports.schneider_thermostat_control_sequence_of_operation = {
4086
+ key: ["control_sequence_of_operation"],
4087
+ convertSet: async (entity, key, value, meta) => {
4088
+ utils.assertEndpoint(entity);
4089
+ const val = utils.getKey(constants.thermostatControlSequenceOfOperations, value, value, Number);
4090
+ entity.saveClusterAttributeKeyValue("hvacThermostat", { ctrlSeqeOfOper: val });
4091
+ return { state: { control_sequence_of_operation: value } };
4092
+ },
4093
+ };
4094
+ exports.schneider_thermostat_pi_heating_demand = {
4095
+ key: ["pi_heating_demand"],
4096
+ convertSet: async (entity, key, value, meta) => {
4097
+ utils.assertEndpoint(entity);
4098
+ entity.saveClusterAttributeKeyValue("hvacThermostat", { pIHeatingDemand: value });
4099
+ return { state: { pi_heating_demand: value } };
4100
+ },
4101
+ };
4102
+ exports.schneider_thermostat_keypad_lockout = {
4103
+ key: ["keypad_lockout"],
4104
+ convertSet: async (entity, key, value, meta) => {
4105
+ utils.assertEndpoint(entity);
4106
+ const keypadLockout = utils.getKey(constants.keypadLockoutMode, value, value, Number);
4107
+ await entity.write("hvacUserInterfaceCfg", { keypadLockout });
4108
+ entity.saveClusterAttributeKeyValue("hvacUserInterfaceCfg", { keypadLockout });
4109
+ return { state: { keypad_lockout: value } };
4110
+ },
4111
+ };
4112
+ exports.wiser_fip_setting = {
4113
+ key: ["fip_setting"],
4114
+ convertSet: async (entity, key, value, meta) => {
4115
+ utils.assertString(value, key);
4116
+ const zoneLookup = { manual: 1, schedule: 2, energy_saver: 3, holiday: 6 };
4117
+ const zonemodeNum = utils.getFromLookup(meta.state.zone_mode, zoneLookup);
4118
+ const fipLookup = { comfort: 0, "comfort_-1": 1, "comfort_-2": 2, energy_saving: 3, frost_protection: 4, off: 5 };
4119
+ value = value.toLowerCase();
4120
+ utils.validateValue(value, Object.keys(fipLookup));
4121
+ const fipmodeNum = utils.getFromLookup(value, fipLookup);
4122
+ const payload = {
4123
+ zonemode: zonemodeNum,
4124
+ fipmode: fipmodeNum,
4125
+ reserved: 0xff,
4126
+ };
4127
+ await entity.command("hvacThermostat", "wiserSmartSetFipMode", payload, { srcEndpoint: 11, disableDefaultResponse: true });
4128
+ return { state: { fip_setting: value } };
4129
+ },
4130
+ convertGet: async (entity, key, meta) => {
4131
+ await entity.read("hvacThermostat", [0xe020]);
4132
+ },
4133
+ };
4134
+ exports.wiser_hact_config = {
4135
+ key: ["hact_config"],
4136
+ convertSet: async (entity, key, value, meta) => {
4137
+ utils.assertString(value, key);
4138
+ const lookup = { unconfigured: 0x00, setpoint_switch: 0x80, setpoint_fip: 0x82, fip_fip: 0x83 };
4139
+ value = value.toLowerCase();
4140
+ const mode = utils.getFromLookup(value, lookup);
4141
+ await entity.write("hvacThermostat", { 57361: { value: mode, type: 0x18 } });
4142
+ return { state: { hact_config: value } };
4143
+ },
4144
+ convertGet: async (entity, key, meta) => {
4145
+ await entity.read("hvacThermostat", [0xe011]);
4146
+ },
4147
+ };
4148
+ exports.wiser_zone_mode = {
4149
+ key: ["zone_mode"],
4150
+ convertSet: async (entity, key, value, meta) => {
4151
+ const lookup = { manual: 1, schedule: 2, energy_saver: 3, holiday: 6 };
4152
+ const zonemodeNum = utils.getFromLookup(value, lookup);
4153
+ await entity.write("hvacThermostat", { 57360: { value: zonemodeNum, type: 0x30 } });
4154
+ return { state: { zone_mode: value } };
4155
+ },
4156
+ convertGet: async (entity, key, meta) => {
4157
+ await entity.read("hvacThermostat", [0xe010]);
4158
+ },
4159
+ };
4160
+ exports.wiser_vact_calibrate_valve = {
4161
+ key: ["calibrate_valve"],
4162
+ convertSet: async (entity, key, value, meta) => {
4163
+ await entity.command("hvacThermostat", "wiserSmartCalibrateValve", {}, { srcEndpoint: 11, disableDefaultResponse: true });
4164
+ return { state: { calibrate_valve: value } };
4165
+ },
4166
+ };
4167
+ exports.wiser_sed_zone_mode = {
4168
+ key: ["zone_mode"],
4169
+ convertSet: async (entity, key, value, meta) => {
4170
+ return { state: { zone_mode: value } };
4171
+ },
4172
+ };
4173
+ exports.wiser_sed_occupied_heating_setpoint = {
4174
+ key: ["occupied_heating_setpoint"],
4175
+ convertSet: async (entity, key, value, meta) => {
4176
+ utils.assertNumber(value, key);
4177
+ utils.assertEndpoint(entity);
4178
+ const occupiedHeatingSetpoint = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
4179
+ entity.saveClusterAttributeKeyValue("hvacThermostat", { occupiedHeatingSetpoint });
4180
+ return { state: { occupied_heating_setpoint: value } };
4181
+ },
4182
+ };
4183
+ exports.wiser_sed_thermostat_local_temperature_calibration = {
4184
+ key: ["local_temperature_calibration"],
4185
+ convertSet: async (entity, key, value, meta) => {
4186
+ utils.assertNumber(value);
4187
+ await entity.write("hvacThermostat", { localTemperatureCalibration: Math.round(value * 10) }, { srcEndpoint: 11, disableDefaultResponse: true });
4188
+ return { state: { local_temperature_calibration: value } };
4189
+ },
4190
+ };
4191
+ exports.wiser_sed_thermostat_keypad_lockout = {
4192
+ key: ["keypad_lockout"],
4193
+ convertSet: async (entity, key, value, meta) => {
4194
+ const keypadLockout = utils.getKey(constants.keypadLockoutMode, value, value, Number);
4195
+ await entity.write("hvacUserInterfaceCfg", { keypadLockout }, { srcEndpoint: 11, disableDefaultResponse: true });
4196
+ return { state: { keypad_lockout: value } };
4197
+ },
4198
+ };
4199
+ exports.sihas_set_people = {
4200
+ key: ["people"],
4201
+ convertSet: async (entity, key, value, meta) => {
4202
+ const payload = { presentValue: value };
4203
+ const endpoint = meta.device.endpoints.find((e) => e.supportsInputCluster("genAnalogInput"));
4204
+ await endpoint.write("genAnalogInput", payload);
4205
+ },
4206
+ convertGet: async (entity, key, meta) => {
4207
+ const endpoint = meta.device.endpoints.find((e) => e.supportsInputCluster("genAnalogInput"));
4208
+ await endpoint.read("genAnalogInput", ["presentValue"]);
4209
+ },
4210
+ };
4211
+ exports.tuya_operation_mode = {
4212
+ key: ["operation_mode"],
4213
+ convertSet: async (entity, key, value, meta) => {
4214
+ // modes:
4215
+ // 0 - 'command' mode. keys send commands. useful for group control
4216
+ // 1 - 'event' mode. keys send events. useful for handling
4217
+ utils.assertString(value, key);
4218
+ const endpoint = meta.device.getEndpoint(1);
4219
+ await endpoint.write("genOnOff", { tuyaOperationMode: utils.getFromLookup(value, { command: 0, event: 1 }) });
4220
+ return { state: { operation_mode: value.toLowerCase() } };
4221
+ },
4222
+ convertGet: async (entity, key, meta) => {
4223
+ const endpoint = meta.device.getEndpoint(1);
4224
+ await endpoint.read("genOnOff", ["tuyaOperationMode"]);
4225
+ },
4226
+ };
4227
+ exports.led_on_motion = {
4228
+ key: ["led_on_motion"],
4229
+ convertSet: async (entity, key, value, meta) => {
4230
+ await entity.write("ssIasZone", { 16384: { value: value === true ? 1 : 0, type: 0x10 } }, { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4231
+ return { state: { led_on_motion: value } };
4232
+ },
4233
+ convertGet: async (entity, key, meta) => {
4234
+ await entity.read("ssIasZone", [0x4000], { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.DATEK_WIRELESS_AS });
4235
+ },
4236
+ };
4237
+ // #endregion
4238
+ // #region Ignore converters
4239
+ exports.ignore_transition = {
4240
+ key: ["transition"],
4241
+ convertSet: async (entity, key, value, meta) => { },
4242
+ };
4243
+ exports.ignore_rate = {
4244
+ key: ["rate"],
4245
+ convertSet: async (entity, key, value, meta) => { },
4246
+ };
4247
+ // #endregion
4248
+ exports.light_onoff_restorable_brightness = {
4249
+ /**
4250
+ * Some devices reset brightness to 100% when turned on, even if previous brightness was different
4251
+ * This uses the stored state of the device to restore to the previous brightness level when turning on
4252
+ */
4253
+ key: ["state", "brightness", "brightness_percent"],
4254
+ options: [exposes.options.transition()],
4255
+ convertSet: async (entity, key, value, meta) => {
4256
+ const deviceState = meta.state || {};
4257
+ const message = meta.message;
4258
+ const state = utils.isString(message.state) ? message.state.toLowerCase() : null;
4259
+ const hasBrightness = message.brightness !== undefined || message.brightness_percent !== undefined;
4260
+ // Add brightness if command is 'on' and we can restore previous value
4261
+ if (state === "on" && !hasBrightness && utils.isNumber(deviceState.brightness) && deviceState.brightness > 0) {
4262
+ message.brightness = deviceState.brightness;
4263
+ }
4264
+ return await exports.light_onoff_brightness.convertSet(entity, key, value, meta);
4265
+ },
4266
+ convertGet: async (entity, key, meta) => {
4267
+ return await exports.light_onoff_brightness.convertGet(entity, key, meta);
4268
+ },
4269
+ };
4270
+ exports.RM01_light_onoff_brightness = {
4271
+ key: ["state", "brightness", "brightness_percent"],
4272
+ options: [exposes.options.transition()],
4273
+ convertSet: async (entity, key, value, meta) => {
4274
+ if (utils.hasEndpoints(meta.device, [0x12])) {
4275
+ const endpoint = meta.device.getEndpoint(0x12);
4276
+ return await exports.light_onoff_brightness.convertSet(endpoint, key, value, meta);
4277
+ }
4278
+ throw new Error("OnOff and LevelControl not supported on this RM01 device.");
4279
+ },
4280
+ convertGet: async (entity, key, meta) => {
4281
+ if (utils.hasEndpoints(meta.device, [0x12])) {
4282
+ const endpoint = meta.device.getEndpoint(0x12);
4283
+ return await exports.light_onoff_brightness.convertGet(endpoint, key, meta);
4284
+ }
4285
+ throw new Error("OnOff and LevelControl not supported on this RM01 device.");
4286
+ },
4287
+ };
4288
+ exports.RM01_light_brightness_step = {
4289
+ options: [exposes.options.transition()],
4290
+ key: ["brightness_step", "brightness_step_onoff"],
4291
+ convertSet: async (entity, key, value, meta) => {
4292
+ if (utils.hasEndpoints(meta.device, [0x12])) {
4293
+ const endpoint = meta.device.getEndpoint(0x12);
4294
+ return await exports.light_brightness_step.convertSet(endpoint, key, value, meta);
4295
+ }
4296
+ throw new Error("LevelControl not supported on this RM01 device.");
4297
+ },
4298
+ };
4299
+ exports.RM01_light_brightness_move = {
4300
+ key: ["brightness_move", "brightness_move_onoff"],
4301
+ convertSet: async (entity, key, value, meta) => {
4302
+ if (utils.hasEndpoints(meta.device, [0x12])) {
4303
+ const endpoint = meta.device.getEndpoint(0x12);
4304
+ return await exports.light_brightness_move.convertSet(endpoint, key, value, meta);
4305
+ }
4306
+ throw new Error("LevelControl not supported on this RM01 device.");
4307
+ },
4308
+ };
4309
+ exports.ptvo_switch_light_brightness = {
4310
+ key: ["brightness", "brightness_percent", "transition"],
4311
+ options: [exposes.options.transition()],
4312
+ convertSet: async (entity, key, value, meta) => {
4313
+ if (key === "transition") {
4314
+ return;
4315
+ }
4316
+ const cluster = "genLevelCtrl";
4317
+ utils.assertEndpoint(entity);
4318
+ if (entity.supportsInputCluster(cluster) || entity.supportsOutputCluster(cluster)) {
4319
+ const message = meta.message;
4320
+ let brightness = undefined;
4321
+ if (message.brightness !== undefined) {
4322
+ brightness = Number(message.brightness);
4323
+ }
4324
+ else if (message.brightness_percent !== undefined)
4325
+ brightness = Math.round(Number(message.brightness_percent) * 2.55);
4326
+ if (brightness !== undefined && brightness === 0) {
4327
+ message.state = "off";
4328
+ message.brightness = 1;
4329
+ }
4330
+ return await exports.light_onoff_brightness.convertSet(entity, key, value, meta);
4331
+ }
4332
+ throw new Error("LevelControl not supported on this endpoint.");
4333
+ },
4334
+ convertGet: async (entity, key, meta) => {
4335
+ const cluster = "genLevelCtrl";
4336
+ utils.assertEndpoint(entity);
4337
+ if (entity.supportsInputCluster(cluster) || entity.supportsOutputCluster(cluster)) {
4338
+ return await exports.light_onoff_brightness.convertGet(entity, key, meta);
4339
+ }
4340
+ throw new Error("LevelControl not supported on this endpoint.");
4341
+ },
4342
+ };
4343
+ exports.TS110E_options = {
4344
+ key: ["min_brightness", "max_brightness", "light_type", "switch_type"],
4345
+ convertSet: async (entity, key, value, meta) => {
4346
+ let payload = null;
4347
+ if (key === "min_brightness" || key === "max_brightness") {
4348
+ const id = key === "min_brightness" ? 64515 : 64516;
4349
+ payload = { [id]: { value: utils.mapNumberRange(utils.toNumber(value, key), 1, 255, 0, 1000), type: 0x21 } };
4350
+ }
4351
+ else if (key === "light_type" || key === "switch_type") {
4352
+ utils.assertString(value, "light_type/switch_type");
4353
+ const lookup = key === "light_type" ? { led: 0, incandescent: 1, halogen: 2 } : { momentary: 0, toggle: 1, state: 2 };
4354
+ payload = { 64514: { value: lookup[value], type: 0x20 } };
4355
+ }
4356
+ await entity.write("genLevelCtrl", payload, utils.getOptions(meta.mapped, entity));
4357
+ return { state: { [key]: value } };
4358
+ },
4359
+ convertGet: async (entity, key, meta) => {
4360
+ let id = null;
4361
+ if (key === "min_brightness")
4362
+ id = 64515;
4363
+ if (key === "max_brightness")
4364
+ id = 64516;
4365
+ if (key === "light_type" || key === "switch_type")
4366
+ id = 64514;
4367
+ await entity.read("genLevelCtrl", [id]);
4368
+ },
4369
+ };
4370
+ exports.TS110E_onoff_brightness = {
4371
+ key: ["state", "brightness"],
4372
+ convertSet: async (entity, key, value, meta) => {
4373
+ const { message, state } = meta;
4374
+ if (message.state === "OFF" || (message.state !== undefined && message.brightness === undefined)) {
4375
+ return await exports.on_off.convertSet(entity, key, value, meta);
4376
+ }
4377
+ if (message.brightness !== undefined) {
4378
+ // set brightness
4379
+ if (state.state === "OFF") {
4380
+ await entity.command("genOnOff", "on", {}, utils.getOptions(meta.mapped, entity));
4381
+ }
4382
+ const brightness = utils.toNumber(message.brightness, "brightness");
4383
+ const level = utils.mapNumberRange(brightness, 0, 254, 0, 1000);
4384
+ await entity.command("genLevelCtrl", "moveToLevelTuya", { level, transtime: 100 }, utils.getOptions(meta.mapped, entity));
4385
+ return { state: { state: "ON", brightness } };
4386
+ }
4387
+ },
4388
+ convertGet: async (entity, key, meta) => {
4389
+ if (key === "state")
4390
+ await exports.on_off.convertGet(entity, key, meta);
4391
+ if (key === "brightness")
4392
+ await entity.read("genLevelCtrl", [61440]);
4393
+ },
4394
+ };
4395
+ exports.TS110E_light_onoff_brightness = {
4396
+ ...exports.light_onoff_brightness,
4397
+ convertSet: async (entity, key, value, meta) => {
4398
+ const { message } = meta;
4399
+ if (message.state === "ON" || (typeof message.brightness === "number" && message.brightness > 1)) {
4400
+ // Does not turn off with physical press when turned on with just moveToLevelWithOnOff, required on before.
4401
+ // https://github.com/Koenkk/zigbee2mqtt/issues/15902#issuecomment-1382848150
4402
+ await entity.command("genOnOff", "on", {}, utils.getOptions(meta.mapped, entity));
4403
+ }
4404
+ return await exports.light_onoff_brightness.convertSet(entity, key, value, meta);
4405
+ },
4406
+ };
4407
+ //# sourceMappingURL=toZigbee.js.map