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