zigbee-herdsman-converters 21.7.0 → 21.9.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 (1382) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/package.json +7 -34
  3. package/converters/fromZigbee.d.ts +0 -2036
  4. package/converters/fromZigbee.d.ts.map +0 -1
  5. package/converters/fromZigbee.js +0 -5343
  6. package/converters/fromZigbee.js.map +0 -1
  7. package/converters/toZigbee.d.ts +0 -1578
  8. package/converters/toZigbee.d.ts.map +0 -1
  9. package/converters/toZigbee.js +0 -4422
  10. package/converters/toZigbee.js.map +0 -1
  11. package/devices/ITCommander.d.ts +0 -4
  12. package/devices/ITCommander.d.ts.map +0 -1
  13. package/devices/ITCommander.js +0 -77
  14. package/devices/ITCommander.js.map +0 -1
  15. package/devices/acova.d.ts +0 -4
  16. package/devices/acova.d.ts.map +0 -1
  17. package/devices/acova.js +0 -127
  18. package/devices/acova.js.map +0 -1
  19. package/devices/acuity_brands_lighting.d.ts +0 -4
  20. package/devices/acuity_brands_lighting.d.ts.map +0 -1
  21. package/devices/acuity_brands_lighting.js +0 -29
  22. package/devices/acuity_brands_lighting.js.map +0 -1
  23. package/devices/adeo.d.ts +0 -4
  24. package/devices/adeo.d.ts.map +0 -1
  25. package/devices/adeo.js +0 -486
  26. package/devices/adeo.js.map +0 -1
  27. package/devices/adurosmart.d.ts +0 -4
  28. package/devices/adurosmart.d.ts.map +0 -1
  29. package/devices/adurosmart.js +0 -183
  30. package/devices/adurosmart.js.map +0 -1
  31. package/devices/aeotec.d.ts +0 -4
  32. package/devices/aeotec.d.ts.map +0 -1
  33. package/devices/aeotec.js +0 -66
  34. package/devices/aeotec.js.map +0 -1
  35. package/devices/airam.d.ts +0 -4
  36. package/devices/airam.d.ts.map +0 -1
  37. package/devices/airam.js +0 -106
  38. package/devices/airam.js.map +0 -1
  39. package/devices/airzone_aidoo.d.ts +0 -4
  40. package/devices/airzone_aidoo.d.ts.map +0 -1
  41. package/devices/airzone_aidoo.js +0 -81
  42. package/devices/airzone_aidoo.js.map +0 -1
  43. package/devices/ajax_online.d.ts +0 -4
  44. package/devices/ajax_online.d.ts.map +0 -1
  45. package/devices/ajax_online.js +0 -84
  46. package/devices/ajax_online.js.map +0 -1
  47. package/devices/akuvox.d.ts +0 -4
  48. package/devices/akuvox.d.ts.map +0 -1
  49. package/devices/akuvox.js +0 -68
  50. package/devices/akuvox.js.map +0 -1
  51. package/devices/alchemy.d.ts +0 -4
  52. package/devices/alchemy.d.ts.map +0 -1
  53. package/devices/alchemy.js +0 -22
  54. package/devices/alchemy.js.map +0 -1
  55. package/devices/aldi.d.ts +0 -4
  56. package/devices/aldi.d.ts.map +0 -1
  57. package/devices/aldi.js +0 -57
  58. package/devices/aldi.js.map +0 -1
  59. package/devices/alecto.d.ts +0 -4
  60. package/devices/alecto.d.ts.map +0 -1
  61. package/devices/alecto.js +0 -101
  62. package/devices/alecto.js.map +0 -1
  63. package/devices/amina.d.ts +0 -4
  64. package/devices/amina.d.ts.map +0 -1
  65. package/devices/amina.js +0 -370
  66. package/devices/amina.js.map +0 -1
  67. package/devices/anchor.d.ts +0 -4
  68. package/devices/anchor.d.ts.map +0 -1
  69. package/devices/anchor.js +0 -15
  70. package/devices/anchor.js.map +0 -1
  71. package/devices/atlantic.d.ts +0 -4
  72. package/devices/atlantic.d.ts.map +0 -1
  73. package/devices/atlantic.js +0 -146
  74. package/devices/atlantic.js.map +0 -1
  75. package/devices/atsmart.d.ts +0 -4
  76. package/devices/atsmart.d.ts.map +0 -1
  77. package/devices/atsmart.js +0 -15
  78. package/devices/atsmart.js.map +0 -1
  79. package/devices/aubess.d.ts +0 -4
  80. package/devices/aubess.d.ts.map +0 -1
  81. package/devices/aubess.js +0 -60
  82. package/devices/aubess.js.map +0 -1
  83. package/devices/aurora_lighting.d.ts +0 -4
  84. package/devices/aurora_lighting.d.ts.map +0 -1
  85. package/devices/aurora_lighting.js +0 -338
  86. package/devices/aurora_lighting.js.map +0 -1
  87. package/devices/automaton.d.ts +0 -4
  88. package/devices/automaton.d.ts.map +0 -1
  89. package/devices/automaton.js +0 -65
  90. package/devices/automaton.js.map +0 -1
  91. package/devices/avatto.d.ts +0 -4
  92. package/devices/avatto.d.ts.map +0 -1
  93. package/devices/avatto.js +0 -67
  94. package/devices/avatto.js.map +0 -1
  95. package/devices/awox.d.ts +0 -4
  96. package/devices/awox.d.ts.map +0 -1
  97. package/devices/awox.js +0 -240
  98. package/devices/awox.js.map +0 -1
  99. package/devices/axis.d.ts +0 -4
  100. package/devices/axis.d.ts.map +0 -1
  101. package/devices/axis.js +0 -63
  102. package/devices/axis.js.map +0 -1
  103. package/devices/bankamp.d.ts +0 -4
  104. package/devices/bankamp.d.ts.map +0 -1
  105. package/devices/bankamp.js +0 -15
  106. package/devices/bankamp.js.map +0 -1
  107. package/devices/bega.d.ts +0 -4
  108. package/devices/bega.d.ts.map +0 -1
  109. package/devices/bega.js +0 -29
  110. package/devices/bega.js.map +0 -1
  111. package/devices/belkin.d.ts +0 -4
  112. package/devices/belkin.d.ts.map +0 -1
  113. package/devices/belkin.js +0 -15
  114. package/devices/belkin.js.map +0 -1
  115. package/devices/bitron.d.ts +0 -4
  116. package/devices/bitron.d.ts.map +0 -1
  117. package/devices/bitron.js +0 -359
  118. package/devices/bitron.js.map +0 -1
  119. package/devices/bituo_technik.d.ts +0 -4
  120. package/devices/bituo_technik.d.ts.map +0 -1
  121. package/devices/bituo_technik.js +0 -121
  122. package/devices/bituo_technik.js.map +0 -1
  123. package/devices/blaupunkt.d.ts +0 -4
  124. package/devices/blaupunkt.d.ts.map +0 -1
  125. package/devices/blaupunkt.js +0 -68
  126. package/devices/blaupunkt.js.map +0 -1
  127. package/devices/blitzwolf.d.ts +0 -4
  128. package/devices/blitzwolf.d.ts.map +0 -1
  129. package/devices/blitzwolf.js +0 -73
  130. package/devices/blitzwolf.js.map +0 -1
  131. package/devices/bosch.d.ts +0 -4
  132. package/devices/bosch.d.ts.map +0 -1
  133. package/devices/bosch.js +0 -2048
  134. package/devices/bosch.js.map +0 -1
  135. package/devices/bouffalo_lab.d.ts +0 -4
  136. package/devices/bouffalo_lab.d.ts.map +0 -1
  137. package/devices/bouffalo_lab.js +0 -15
  138. package/devices/bouffalo_lab.js.map +0 -1
  139. package/devices/brimate.d.ts +0 -4
  140. package/devices/brimate.d.ts.map +0 -1
  141. package/devices/brimate.js +0 -55
  142. package/devices/brimate.js.map +0 -1
  143. package/devices/bseed.d.ts +0 -4
  144. package/devices/bseed.d.ts.map +0 -1
  145. package/devices/bseed.js +0 -57
  146. package/devices/bseed.js.map +0 -1
  147. package/devices/bticino.d.ts +0 -4
  148. package/devices/bticino.d.ts.map +0 -1
  149. package/devices/bticino.js +0 -113
  150. package/devices/bticino.js.map +0 -1
  151. package/devices/busch_jaeger.d.ts +0 -4
  152. package/devices/busch_jaeger.d.ts.map +0 -1
  153. package/devices/busch_jaeger.js +0 -186
  154. package/devices/busch_jaeger.js.map +0 -1
  155. package/devices/byun.d.ts +0 -4
  156. package/devices/byun.d.ts.map +0 -1
  157. package/devices/byun.js +0 -64
  158. package/devices/byun.js.map +0 -1
  159. package/devices/calex.d.ts +0 -4
  160. package/devices/calex.d.ts.map +0 -1
  161. package/devices/calex.js +0 -91
  162. package/devices/calex.js.map +0 -1
  163. package/devices/candeo.d.ts +0 -4
  164. package/devices/candeo.d.ts.map +0 -1
  165. package/devices/candeo.js +0 -185
  166. package/devices/candeo.js.map +0 -1
  167. package/devices/casaia.d.ts +0 -4
  168. package/devices/casaia.d.ts.map +0 -1
  169. package/devices/casaia.js +0 -99
  170. package/devices/casaia.js.map +0 -1
  171. package/devices/cel.d.ts +0 -4
  172. package/devices/cel.d.ts.map +0 -1
  173. package/devices/cel.js +0 -20
  174. package/devices/cel.js.map +0 -1
  175. package/devices/centralite.d.ts +0 -4
  176. package/devices/centralite.d.ts.map +0 -1
  177. package/devices/centralite.js +0 -444
  178. package/devices/centralite.js.map +0 -1
  179. package/devices/chacon.d.ts +0 -4
  180. package/devices/chacon.d.ts.map +0 -1
  181. package/devices/chacon.js +0 -18
  182. package/devices/chacon.js.map +0 -1
  183. package/devices/cleode.d.ts +0 -4
  184. package/devices/cleode.d.ts.map +0 -1
  185. package/devices/cleode.js +0 -15
  186. package/devices/cleode.js.map +0 -1
  187. package/devices/cleverio.d.ts +0 -4
  188. package/devices/cleverio.d.ts.map +0 -1
  189. package/devices/cleverio.js +0 -77
  190. package/devices/cleverio.js.map +0 -1
  191. package/devices/climax.d.ts +0 -4
  192. package/devices/climax.d.ts.map +0 -1
  193. package/devices/climax.js +0 -181
  194. package/devices/climax.js.map +0 -1
  195. package/devices/commercial_electric.d.ts +0 -4
  196. package/devices/commercial_electric.d.ts.map +0 -1
  197. package/devices/commercial_electric.js +0 -15
  198. package/devices/commercial_electric.js.map +0 -1
  199. package/devices/cree.d.ts +0 -4
  200. package/devices/cree.d.ts.map +0 -1
  201. package/devices/cree.js +0 -15
  202. package/devices/cree.js.map +0 -1
  203. package/devices/ctm.d.ts +0 -4
  204. package/devices/ctm.d.ts.map +0 -1
  205. package/devices/ctm.js +0 -1383
  206. package/devices/ctm.js.map +0 -1
  207. package/devices/current_products_corp.d.ts +0 -4
  208. package/devices/current_products_corp.d.ts.map +0 -1
  209. package/devices/current_products_corp.js +0 -64
  210. package/devices/current_products_corp.js.map +0 -1
  211. package/devices/custom_devices_diy.d.ts +0 -4
  212. package/devices/custom_devices_diy.d.ts.map +0 -1
  213. package/devices/custom_devices_diy.js +0 -1206
  214. package/devices/custom_devices_diy.js.map +0 -1
  215. package/devices/cy_lighting.d.ts +0 -4
  216. package/devices/cy_lighting.d.ts.map +0 -1
  217. package/devices/cy_lighting.js +0 -15
  218. package/devices/cy_lighting.js.map +0 -1
  219. package/devices/danalock.d.ts +0 -4
  220. package/devices/danalock.d.ts.map +0 -1
  221. package/devices/danalock.js +0 -65
  222. package/devices/danalock.js.map +0 -1
  223. package/devices/danfoss.d.ts +0 -4
  224. package/devices/danfoss.d.ts.map +0 -1
  225. package/devices/danfoss.js +0 -743
  226. package/devices/danfoss.js.map +0 -1
  227. package/devices/databyte.d.ts +0 -4
  228. package/devices/databyte.d.ts.map +0 -1
  229. package/devices/databyte.js +0 -95
  230. package/devices/databyte.js.map +0 -1
  231. package/devices/datek.d.ts +0 -4
  232. package/devices/datek.d.ts.map +0 -1
  233. package/devices/datek.js +0 -298
  234. package/devices/datek.js.map +0 -1
  235. package/devices/dawon_dns.d.ts +0 -4
  236. package/devices/dawon_dns.d.ts.map +0 -1
  237. package/devices/dawon_dns.js +0 -318
  238. package/devices/dawon_dns.js.map +0 -1
  239. package/devices/develco.d.ts +0 -4
  240. package/devices/develco.d.ts.map +0 -1
  241. package/devices/develco.js +0 -1037
  242. package/devices/develco.js.map +0 -1
  243. package/devices/digi.d.ts +0 -4
  244. package/devices/digi.d.ts.map +0 -1
  245. package/devices/digi.js +0 -25
  246. package/devices/digi.js.map +0 -1
  247. package/devices/diyruz.d.ts +0 -4
  248. package/devices/diyruz.d.ts.map +0 -1
  249. package/devices/diyruz.js +0 -403
  250. package/devices/diyruz.js.map +0 -1
  251. package/devices/dlink.d.ts +0 -4
  252. package/devices/dlink.d.ts.map +0 -1
  253. package/devices/dlink.js +0 -76
  254. package/devices/dlink.js.map +0 -1
  255. package/devices/dnake.d.ts +0 -4
  256. package/devices/dnake.d.ts.map +0 -1
  257. package/devices/dnake.js +0 -15
  258. package/devices/dnake.js.map +0 -1
  259. package/devices/dowsing_reynolds.d.ts +0 -4
  260. package/devices/dowsing_reynolds.d.ts.map +0 -1
  261. package/devices/dowsing_reynolds.js +0 -15
  262. package/devices/dowsing_reynolds.js.map +0 -1
  263. package/devices/dresden_elektronik.d.ts +0 -4
  264. package/devices/dresden_elektronik.d.ts.map +0 -1
  265. package/devices/dresden_elektronik.js +0 -50
  266. package/devices/dresden_elektronik.js.map +0 -1
  267. package/devices/easyaccess.d.ts +0 -4
  268. package/devices/easyaccess.d.ts.map +0 -1
  269. package/devices/easyaccess.js +0 -71
  270. package/devices/easyaccess.js.map +0 -1
  271. package/devices/easyiot.d.ts +0 -4
  272. package/devices/easyiot.d.ts.map +0 -1
  273. package/devices/easyiot.js +0 -358
  274. package/devices/easyiot.js.map +0 -1
  275. package/devices/eatonhalo_led.d.ts +0 -4
  276. package/devices/eatonhalo_led.d.ts.map +0 -1
  277. package/devices/eatonhalo_led.js +0 -15
  278. package/devices/eatonhalo_led.js.map +0 -1
  279. package/devices/echostar.d.ts +0 -4
  280. package/devices/echostar.d.ts.map +0 -1
  281. package/devices/echostar.js +0 -65
  282. package/devices/echostar.js.map +0 -1
  283. package/devices/ecodim.d.ts +0 -4
  284. package/devices/ecodim.d.ts.map +0 -1
  285. package/devices/ecodim.js +0 -270
  286. package/devices/ecodim.js.map +0 -1
  287. package/devices/ecolink.d.ts +0 -4
  288. package/devices/ecolink.d.ts.map +0 -1
  289. package/devices/ecolink.js +0 -61
  290. package/devices/ecolink.js.map +0 -1
  291. package/devices/ecosmart.d.ts +0 -4
  292. package/devices/ecosmart.d.ts.map +0 -1
  293. package/devices/ecosmart.js +0 -83
  294. package/devices/ecosmart.js.map +0 -1
  295. package/devices/ecozy.d.ts +0 -4
  296. package/devices/ecozy.d.ts.map +0 -1
  297. package/devices/ecozy.js +0 -89
  298. package/devices/ecozy.js.map +0 -1
  299. package/devices/edp.d.ts +0 -4
  300. package/devices/edp.d.ts.map +0 -1
  301. package/devices/edp.js +0 -74
  302. package/devices/edp.js.map +0 -1
  303. package/devices/efekta.d.ts +0 -4
  304. package/devices/efekta.d.ts.map +0 -1
  305. package/devices/efekta.js +0 -754
  306. package/devices/efekta.js.map +0 -1
  307. package/devices/eglo.d.ts +0 -4
  308. package/devices/eglo.d.ts.map +0 -1
  309. package/devices/eglo.js +0 -132
  310. package/devices/eglo.js.map +0 -1
  311. package/devices/elko.d.ts +0 -4
  312. package/devices/elko.d.ts.map +0 -1
  313. package/devices/elko.js +0 -240
  314. package/devices/elko.js.map +0 -1
  315. package/devices/enbrighten.d.ts +0 -4
  316. package/devices/enbrighten.d.ts.map +0 -1
  317. package/devices/enbrighten.js +0 -97
  318. package/devices/enbrighten.js.map +0 -1
  319. package/devices/enocean.d.ts +0 -4
  320. package/devices/enocean.d.ts.map +0 -1
  321. package/devices/enocean.js +0 -153
  322. package/devices/enocean.js.map +0 -1
  323. package/devices/envilar.d.ts +0 -4
  324. package/devices/envilar.d.ts.map +0 -1
  325. package/devices/envilar.js +0 -100
  326. package/devices/envilar.js.map +0 -1
  327. package/devices/essentialb.d.ts +0 -4
  328. package/devices/essentialb.d.ts.map +0 -1
  329. package/devices/essentialb.js +0 -137
  330. package/devices/essentialb.js.map +0 -1
  331. package/devices/eucontrols.d.ts +0 -4
  332. package/devices/eucontrols.d.ts.map +0 -1
  333. package/devices/eucontrols.js +0 -15
  334. package/devices/eucontrols.js.map +0 -1
  335. package/devices/eurotronic.d.ts +0 -4
  336. package/devices/eurotronic.d.ts.map +0 -1
  337. package/devices/eurotronic.js +0 -128
  338. package/devices/eurotronic.js.map +0 -1
  339. package/devices/evanell.d.ts +0 -4
  340. package/devices/evanell.d.ts.map +0 -1
  341. package/devices/evanell.js +0 -75
  342. package/devices/evanell.js.map +0 -1
  343. package/devices/evn.d.ts +0 -4
  344. package/devices/evn.d.ts.map +0 -1
  345. package/devices/evn.js +0 -94
  346. package/devices/evn.js.map +0 -1
  347. package/devices/evology.d.ts +0 -4
  348. package/devices/evology.d.ts.map +0 -1
  349. package/devices/evology.js +0 -64
  350. package/devices/evology.js.map +0 -1
  351. package/devices/evvr.d.ts +0 -4
  352. package/devices/evvr.d.ts.map +0 -1
  353. package/devices/evvr.js +0 -15
  354. package/devices/evvr.js.map +0 -1
  355. package/devices/ewelink.d.ts +0 -4
  356. package/devices/ewelink.d.ts.map +0 -1
  357. package/devices/ewelink.js +0 -205
  358. package/devices/ewelink.js.map +0 -1
  359. package/devices/ezex.d.ts +0 -4
  360. package/devices/ezex.d.ts.map +0 -1
  361. package/devices/ezex.js +0 -15
  362. package/devices/ezex.js.map +0 -1
  363. package/devices/fantem.d.ts +0 -4
  364. package/devices/fantem.d.ts.map +0 -1
  365. package/devices/fantem.js +0 -118
  366. package/devices/fantem.js.map +0 -1
  367. package/devices/feibit.d.ts +0 -4
  368. package/devices/feibit.d.ts.map +0 -1
  369. package/devices/feibit.js +0 -334
  370. package/devices/feibit.js.map +0 -1
  371. package/devices/fireangel.d.ts +0 -4
  372. package/devices/fireangel.d.ts.map +0 -1
  373. package/devices/fireangel.js +0 -55
  374. package/devices/fireangel.js.map +0 -1
  375. package/devices/frankever.d.ts +0 -4
  376. package/devices/frankever.d.ts.map +0 -1
  377. package/devices/frankever.js +0 -71
  378. package/devices/frankever.js.map +0 -1
  379. package/devices/frient.d.ts +0 -4
  380. package/devices/frient.d.ts.map +0 -1
  381. package/devices/frient.js +0 -42
  382. package/devices/frient.js.map +0 -1
  383. package/devices/futurehome.d.ts +0 -4
  384. package/devices/futurehome.d.ts.map +0 -1
  385. package/devices/futurehome.js +0 -124
  386. package/devices/futurehome.js.map +0 -1
  387. package/devices/ge.d.ts +0 -4
  388. package/devices/ge.d.ts.map +0 -1
  389. package/devices/ge.js +0 -134
  390. package/devices/ge.js.map +0 -1
  391. package/devices/gewiss.d.ts +0 -4
  392. package/devices/gewiss.d.ts.map +0 -1
  393. package/devices/gewiss.js +0 -78
  394. package/devices/gewiss.js.map +0 -1
  395. package/devices/gidealed.d.ts +0 -4
  396. package/devices/gidealed.d.ts.map +0 -1
  397. package/devices/gidealed.js +0 -15
  398. package/devices/gidealed.js.map +0 -1
  399. package/devices/giderwel.d.ts +0 -4
  400. package/devices/giderwel.d.ts.map +0 -1
  401. package/devices/giderwel.js +0 -15
  402. package/devices/giderwel.js.map +0 -1
  403. package/devices/giex.d.ts +0 -4
  404. package/devices/giex.d.ts.map +0 -1
  405. package/devices/giex.js +0 -121
  406. package/devices/giex.js.map +0 -1
  407. package/devices/girier.d.ts +0 -4
  408. package/devices/girier.d.ts.map +0 -1
  409. package/devices/girier.js +0 -56
  410. package/devices/girier.js.map +0 -1
  411. package/devices/gledopto.d.ts +0 -4
  412. package/devices/gledopto.d.ts.map +0 -1
  413. package/devices/gledopto.js +0 -1046
  414. package/devices/gledopto.js.map +0 -1
  415. package/devices/gmmts.d.ts +0 -4
  416. package/devices/gmmts.d.ts.map +0 -1
  417. package/devices/gmmts.js +0 -2287
  418. package/devices/gmmts.js.map +0 -1
  419. package/devices/gmy.d.ts +0 -4
  420. package/devices/gmy.d.ts.map +0 -1
  421. package/devices/gmy.js +0 -15
  422. package/devices/gmy.js.map +0 -1
  423. package/devices/gs.d.ts +0 -4
  424. package/devices/gs.d.ts.map +0 -1
  425. package/devices/gs.js +0 -89
  426. package/devices/gs.js.map +0 -1
  427. package/devices/gumax.d.ts +0 -4
  428. package/devices/gumax.d.ts.map +0 -1
  429. package/devices/gumax.js +0 -15
  430. package/devices/gumax.js.map +0 -1
  431. package/devices/halemeier.d.ts +0 -4
  432. package/devices/halemeier.d.ts.map +0 -1
  433. package/devices/halemeier.js +0 -129
  434. package/devices/halemeier.js.map +0 -1
  435. package/devices/hampton_bay.d.ts +0 -4
  436. package/devices/hampton_bay.d.ts.map +0 -1
  437. package/devices/hampton_bay.js +0 -72
  438. package/devices/hampton_bay.js.map +0 -1
  439. package/devices/heatit.d.ts +0 -4
  440. package/devices/heatit.d.ts.map +0 -1
  441. package/devices/heatit.js +0 -15
  442. package/devices/heatit.js.map +0 -1
  443. package/devices/heiman.d.ts +0 -4
  444. package/devices/heiman.d.ts.map +0 -1
  445. package/devices/heiman.js +0 -807
  446. package/devices/heiman.js.map +0 -1
  447. package/devices/heimgard_technologies.d.ts +0 -4
  448. package/devices/heimgard_technologies.d.ts.map +0 -1
  449. package/devices/heimgard_technologies.js +0 -193
  450. package/devices/heimgard_technologies.js.map +0 -1
  451. package/devices/hej.d.ts +0 -4
  452. package/devices/hej.d.ts.map +0 -1
  453. package/devices/hej.js +0 -73
  454. package/devices/hej.js.map +0 -1
  455. package/devices/hfh.d.ts +0 -4
  456. package/devices/hfh.d.ts.map +0 -1
  457. package/devices/hfh.js +0 -15
  458. package/devices/hfh.js.map +0 -1
  459. package/devices/hilux.d.ts +0 -4
  460. package/devices/hilux.d.ts.map +0 -1
  461. package/devices/hilux.js +0 -22
  462. package/devices/hilux.js.map +0 -1
  463. package/devices/hive.d.ts +0 -4
  464. package/devices/hive.d.ts.map +0 -1
  465. package/devices/hive.js +0 -766
  466. package/devices/hive.js.map +0 -1
  467. package/devices/hommyn.d.ts +0 -4
  468. package/devices/hommyn.d.ts.map +0 -1
  469. package/devices/hommyn.js +0 -64
  470. package/devices/hommyn.js.map +0 -1
  471. package/devices/honyar.d.ts +0 -4
  472. package/devices/honyar.d.ts.map +0 -1
  473. package/devices/honyar.js +0 -171
  474. package/devices/honyar.js.map +0 -1
  475. package/devices/hornbach.d.ts +0 -4
  476. package/devices/hornbach.d.ts.map +0 -1
  477. package/devices/hornbach.js +0 -99
  478. package/devices/hornbach.js.map +0 -1
  479. package/devices/hzc_electric.d.ts +0 -4
  480. package/devices/hzc_electric.d.ts.map +0 -1
  481. package/devices/hzc_electric.js +0 -94
  482. package/devices/hzc_electric.js.map +0 -1
  483. package/devices/icasa.d.ts +0 -4
  484. package/devices/icasa.d.ts.map +0 -1
  485. package/devices/icasa.js +0 -167
  486. package/devices/icasa.js.map +0 -1
  487. package/devices/idinio.d.ts +0 -4
  488. package/devices/idinio.d.ts.map +0 -1
  489. package/devices/idinio.js +0 -15
  490. package/devices/idinio.js.map +0 -1
  491. package/devices/ihorn.d.ts +0 -4
  492. package/devices/ihorn.d.ts.map +0 -1
  493. package/devices/ihorn.js +0 -109
  494. package/devices/ihorn.js.map +0 -1
  495. package/devices/ikea.d.ts +0 -4
  496. package/devices/ikea.d.ts.map +0 -1
  497. package/devices/ikea.js +0 -927
  498. package/devices/ikea.js.map +0 -1
  499. package/devices/ilightsin.d.ts +0 -4
  500. package/devices/ilightsin.d.ts.map +0 -1
  501. package/devices/ilightsin.js +0 -15
  502. package/devices/ilightsin.js.map +0 -1
  503. package/devices/iluminize.d.ts +0 -4
  504. package/devices/iluminize.d.ts.map +0 -1
  505. package/devices/iluminize.js +0 -376
  506. package/devices/iluminize.js.map +0 -1
  507. package/devices/ilux.d.ts +0 -4
  508. package/devices/ilux.d.ts.map +0 -1
  509. package/devices/ilux.js +0 -15
  510. package/devices/ilux.js.map +0 -1
  511. package/devices/imhotepcreation.d.ts +0 -4
  512. package/devices/imhotepcreation.d.ts.map +0 -1
  513. package/devices/imhotepcreation.js +0 -251
  514. package/devices/imhotepcreation.js.map +0 -1
  515. package/devices/immax.d.ts +0 -4
  516. package/devices/immax.d.ts.map +0 -1
  517. package/devices/immax.js +0 -304
  518. package/devices/immax.js.map +0 -1
  519. package/devices/imou.d.ts +0 -4
  520. package/devices/imou.d.ts.map +0 -1
  521. package/devices/imou.js +0 -28
  522. package/devices/imou.js.map +0 -1
  523. package/devices/index.d.ts +0 -13
  524. package/devices/index.d.ts.map +0 -1
  525. package/devices/index.js +0 -638
  526. package/devices/index.js.map +0 -1
  527. package/devices/innr.d.ts +0 -4
  528. package/devices/innr.d.ts.map +0 -1
  529. package/devices/innr.js +0 -878
  530. package/devices/innr.js.map +0 -1
  531. package/devices/inovelli.d.ts +0 -4
  532. package/devices/inovelli.d.ts.map +0 -1
  533. package/devices/inovelli.js +0 -1977
  534. package/devices/inovelli.js.map +0 -1
  535. package/devices/insta.d.ts +0 -4
  536. package/devices/insta.d.ts.map +0 -1
  537. package/devices/insta.js +0 -186
  538. package/devices/insta.js.map +0 -1
  539. package/devices/iolloi.d.ts +0 -4
  540. package/devices/iolloi.d.ts.map +0 -1
  541. package/devices/iolloi.js +0 -16
  542. package/devices/iolloi.js.map +0 -1
  543. package/devices/iotperfect.d.ts +0 -4
  544. package/devices/iotperfect.d.ts.map +0 -1
  545. package/devices/iotperfect.js +0 -62
  546. package/devices/iotperfect.js.map +0 -1
  547. package/devices/iris.d.ts +0 -4
  548. package/devices/iris.d.ts.map +0 -1
  549. package/devices/iris.js +0 -211
  550. package/devices/iris.js.map +0 -1
  551. package/devices/istar.d.ts +0 -4
  552. package/devices/istar.d.ts.map +0 -1
  553. package/devices/istar.js +0 -22
  554. package/devices/istar.js.map +0 -1
  555. package/devices/jasco.d.ts +0 -4
  556. package/devices/jasco.d.ts.map +0 -1
  557. package/devices/jasco.js +0 -34
  558. package/devices/jasco.js.map +0 -1
  559. package/devices/javis.d.ts +0 -4
  560. package/devices/javis.d.ts.map +0 -1
  561. package/devices/javis.js +0 -84
  562. package/devices/javis.js.map +0 -1
  563. package/devices/jethome.d.ts +0 -4
  564. package/devices/jethome.d.ts.map +0 -1
  565. package/devices/jethome.js +0 -124
  566. package/devices/jethome.js.map +0 -1
  567. package/devices/jiawen.d.ts +0 -4
  568. package/devices/jiawen.d.ts.map +0 -1
  569. package/devices/jiawen.js +0 -22
  570. package/devices/jiawen.js.map +0 -1
  571. package/devices/jumitech.d.ts +0 -4
  572. package/devices/jumitech.d.ts.map +0 -1
  573. package/devices/jumitech.js +0 -15
  574. package/devices/jumitech.js.map +0 -1
  575. package/devices/jxuan.d.ts +0 -4
  576. package/devices/jxuan.d.ts.map +0 -1
  577. package/devices/jxuan.js +0 -89
  578. package/devices/jxuan.js.map +0 -1
  579. package/devices/kami.d.ts +0 -4
  580. package/devices/kami.d.ts.map +0 -1
  581. package/devices/kami.js +0 -55
  582. package/devices/kami.js.map +0 -1
  583. package/devices/keen_home.d.ts +0 -4
  584. package/devices/keen_home.d.ts.map +0 -1
  585. package/devices/keen_home.js +0 -160
  586. package/devices/keen_home.js.map +0 -1
  587. package/devices/klikaanklikuit.d.ts +0 -4
  588. package/devices/klikaanklikuit.d.ts.map +0 -1
  589. package/devices/klikaanklikuit.js +0 -22
  590. package/devices/klikaanklikuit.js.map +0 -1
  591. package/devices/kmpcil.d.ts +0 -4
  592. package/devices/kmpcil.d.ts.map +0 -1
  593. package/devices/kmpcil.js +0 -219
  594. package/devices/kmpcil.js.map +0 -1
  595. package/devices/konke.d.ts +0 -4
  596. package/devices/konke.d.ts.map +0 -1
  597. package/devices/konke.js +0 -210
  598. package/devices/konke.js.map +0 -1
  599. package/devices/ksentry.d.ts +0 -4
  600. package/devices/ksentry.d.ts.map +0 -1
  601. package/devices/ksentry.js +0 -15
  602. package/devices/ksentry.js.map +0 -1
  603. package/devices/kurvia.d.ts +0 -4
  604. package/devices/kurvia.d.ts.map +0 -1
  605. package/devices/kurvia.js +0 -20
  606. package/devices/kurvia.js.map +0 -1
  607. package/devices/kwikset.d.ts +0 -4
  608. package/devices/kwikset.d.ts.map +0 -1
  609. package/devices/kwikset.js +0 -157
  610. package/devices/kwikset.js.map +0 -1
  611. package/devices/lanesto.d.ts +0 -4
  612. package/devices/lanesto.d.ts.map +0 -1
  613. package/devices/lanesto.js +0 -15
  614. package/devices/lanesto.js.map +0 -1
  615. package/devices/lds.d.ts +0 -4
  616. package/devices/lds.d.ts.map +0 -1
  617. package/devices/lds.js +0 -15
  618. package/devices/lds.js.map +0 -1
  619. package/devices/led_trading.d.ts +0 -4
  620. package/devices/led_trading.d.ts.map +0 -1
  621. package/devices/led_trading.js +0 -112
  622. package/devices/led_trading.js.map +0 -1
  623. package/devices/ledvance.d.ts +0 -4
  624. package/devices/ledvance.d.ts.map +0 -1
  625. package/devices/ledvance.js +0 -337
  626. package/devices/ledvance.js.map +0 -1
  627. package/devices/leedarson.d.ts +0 -4
  628. package/devices/leedarson.d.ts.map +0 -1
  629. package/devices/leedarson.js +0 -182
  630. package/devices/leedarson.js.map +0 -1
  631. package/devices/legrand.d.ts +0 -4
  632. package/devices/legrand.d.ts.map +0 -1
  633. package/devices/legrand.js +0 -736
  634. package/devices/legrand.js.map +0 -1
  635. package/devices/lellki.d.ts +0 -4
  636. package/devices/lellki.d.ts.map +0 -1
  637. package/devices/lellki.js +0 -169
  638. package/devices/lellki.js.map +0 -1
  639. package/devices/letsled.d.ts +0 -4
  640. package/devices/letsled.d.ts.map +0 -1
  641. package/devices/letsled.js +0 -15
  642. package/devices/letsled.js.map +0 -1
  643. package/devices/letv.d.ts +0 -4
  644. package/devices/letv.d.ts.map +0 -1
  645. package/devices/letv.js +0 -90
  646. package/devices/letv.js.map +0 -1
  647. package/devices/leviton.d.ts +0 -4
  648. package/devices/leviton.d.ts.map +0 -1
  649. package/devices/leviton.js +0 -164
  650. package/devices/leviton.js.map +0 -1
  651. package/devices/lg.d.ts +0 -4
  652. package/devices/lg.d.ts.map +0 -1
  653. package/devices/lg.js +0 -29
  654. package/devices/lg.js.map +0 -1
  655. package/devices/lidl.d.ts +0 -4
  656. package/devices/lidl.d.ts.map +0 -1
  657. package/devices/lidl.js +0 -674
  658. package/devices/lidl.js.map +0 -1
  659. package/devices/lifecontrol.d.ts +0 -4
  660. package/devices/lifecontrol.d.ts.map +0 -1
  661. package/devices/lifecontrol.js +0 -149
  662. package/devices/lifecontrol.js.map +0 -1
  663. package/devices/lightsolutions.d.ts +0 -4
  664. package/devices/lightsolutions.d.ts.map +0 -1
  665. package/devices/lightsolutions.js +0 -36
  666. package/devices/lightsolutions.js.map +0 -1
  667. package/devices/linkind.d.ts +0 -4
  668. package/devices/linkind.d.ts.map +0 -1
  669. package/devices/linkind.js +0 -275
  670. package/devices/linkind.js.map +0 -1
  671. package/devices/linptech.d.ts +0 -4
  672. package/devices/linptech.d.ts.map +0 -1
  673. package/devices/linptech.js +0 -159
  674. package/devices/linptech.js.map +0 -1
  675. package/devices/livingwise.d.ts +0 -4
  676. package/devices/livingwise.d.ts.map +0 -1
  677. package/devices/livingwise.js +0 -119
  678. package/devices/livingwise.js.map +0 -1
  679. package/devices/livolo.d.ts +0 -4
  680. package/devices/livolo.d.ts.map +0 -1
  681. package/devices/livolo.js +0 -422
  682. package/devices/livolo.js.map +0 -1
  683. package/devices/lixee.d.ts +0 -4
  684. package/devices/lixee.d.ts.map +0 -1
  685. package/devices/lixee.js +0 -1926
  686. package/devices/lixee.js.map +0 -1
  687. package/devices/lonsonho.d.ts +0 -4
  688. package/devices/lonsonho.d.ts.map +0 -1
  689. package/devices/lonsonho.js +0 -303
  690. package/devices/lonsonho.js.map +0 -1
  691. package/devices/ls.d.ts +0 -4
  692. package/devices/ls.d.ts.map +0 -1
  693. package/devices/ls.js +0 -68
  694. package/devices/ls.js.map +0 -1
  695. package/devices/lubeez.d.ts +0 -4
  696. package/devices/lubeez.d.ts.map +0 -1
  697. package/devices/lubeez.js +0 -15
  698. package/devices/lubeez.js.map +0 -1
  699. package/devices/lumi.d.ts +0 -4
  700. package/devices/lumi.d.ts.map +0 -1
  701. package/devices/lumi.js +0 -4387
  702. package/devices/lumi.js.map +0 -1
  703. package/devices/lupus.d.ts +0 -4
  704. package/devices/lupus.d.ts.map +0 -1
  705. package/devices/lupus.js +0 -98
  706. package/devices/lupus.js.map +0 -1
  707. package/devices/lutron.d.ts +0 -4
  708. package/devices/lutron.d.ts.map +0 -1
  709. package/devices/lutron.js +0 -71
  710. package/devices/lutron.js.map +0 -1
  711. package/devices/lux.d.ts +0 -4
  712. package/devices/lux.d.ts.map +0 -1
  713. package/devices/lux.js +0 -91
  714. package/devices/lux.js.map +0 -1
  715. package/devices/lytko.d.ts +0 -4
  716. package/devices/lytko.d.ts.map +0 -1
  717. package/devices/lytko.js +0 -788
  718. package/devices/lytko.js.map +0 -1
  719. package/devices/m_elec.d.ts +0 -4
  720. package/devices/m_elec.d.ts.map +0 -1
  721. package/devices/m_elec.js +0 -36
  722. package/devices/m_elec.js.map +0 -1
  723. package/devices/makegood.d.ts +0 -4
  724. package/devices/makegood.d.ts.map +0 -1
  725. package/devices/makegood.js +0 -66
  726. package/devices/makegood.js.map +0 -1
  727. package/devices/matcall_bv.d.ts +0 -4
  728. package/devices/matcall_bv.d.ts.map +0 -1
  729. package/devices/matcall_bv.js +0 -22
  730. package/devices/matcall_bv.js.map +0 -1
  731. package/devices/mazda.d.ts +0 -4
  732. package/devices/mazda.d.ts.map +0 -1
  733. package/devices/mazda.js +0 -142
  734. package/devices/mazda.js.map +0 -1
  735. package/devices/meazon.d.ts +0 -4
  736. package/devices/meazon.d.ts.map +0 -1
  737. package/devices/meazon.js +0 -99
  738. package/devices/meazon.js.map +0 -1
  739. package/devices/mercator.d.ts +0 -4
  740. package/devices/mercator.d.ts.map +0 -1
  741. package/devices/mercator.js +0 -256
  742. package/devices/mercator.js.map +0 -1
  743. package/devices/miboxer.d.ts +0 -4
  744. package/devices/miboxer.d.ts.map +0 -1
  745. package/devices/miboxer.js +0 -93
  746. package/devices/miboxer.js.map +0 -1
  747. package/devices/micromatic.d.ts +0 -4
  748. package/devices/micromatic.d.ts.map +0 -1
  749. package/devices/micromatic.js +0 -15
  750. package/devices/micromatic.js.map +0 -1
  751. package/devices/modular.d.ts +0 -4
  752. package/devices/modular.d.ts.map +0 -1
  753. package/devices/modular.js +0 -15
  754. package/devices/modular.js.map +0 -1
  755. package/devices/moes.d.ts +0 -4
  756. package/devices/moes.d.ts.map +0 -1
  757. package/devices/moes.js +0 -654
  758. package/devices/moes.js.map +0 -1
  759. package/devices/muller_licht.d.ts +0 -4
  760. package/devices/muller_licht.d.ts.map +0 -1
  761. package/devices/muller_licht.js +0 -341
  762. package/devices/muller_licht.js.map +0 -1
  763. package/devices/multiterm.d.ts +0 -4
  764. package/devices/multiterm.d.ts.map +0 -1
  765. package/devices/multiterm.js +0 -123
  766. package/devices/multiterm.js.map +0 -1
  767. package/devices/namron.d.ts +0 -4
  768. package/devices/namron.d.ts.map +0 -1
  769. package/devices/namron.js +0 -1464
  770. package/devices/namron.js.map +0 -1
  771. package/devices/nanoleaf.d.ts +0 -4
  772. package/devices/nanoleaf.d.ts.map +0 -1
  773. package/devices/nanoleaf.js +0 -15
  774. package/devices/nanoleaf.js.map +0 -1
  775. package/devices/neo.d.ts +0 -4
  776. package/devices/neo.d.ts.map +0 -1
  777. package/devices/neo.js +0 -558
  778. package/devices/neo.js.map +0 -1
  779. package/devices/net2grid.d.ts +0 -4
  780. package/devices/net2grid.d.ts.map +0 -1
  781. package/devices/net2grid.js +0 -68
  782. package/devices/net2grid.js.map +0 -1
  783. package/devices/netvox.d.ts +0 -4
  784. package/devices/netvox.d.ts.map +0 -1
  785. package/devices/netvox.js +0 -75
  786. package/devices/netvox.js.map +0 -1
  787. package/devices/nexelec.d.ts +0 -4
  788. package/devices/nexelec.d.ts.map +0 -1
  789. package/devices/nexelec.js +0 -15
  790. package/devices/nexelec.js.map +0 -1
  791. package/devices/niko.d.ts +0 -4
  792. package/devices/niko.d.ts.map +0 -1
  793. package/devices/niko.js +0 -495
  794. package/devices/niko.js.map +0 -1
  795. package/devices/ninja_blocks.d.ts +0 -4
  796. package/devices/ninja_blocks.d.ts.map +0 -1
  797. package/devices/ninja_blocks.js +0 -64
  798. package/devices/ninja_blocks.js.map +0 -1
  799. package/devices/niviss.d.ts +0 -4
  800. package/devices/niviss.d.ts.map +0 -1
  801. package/devices/niviss.js +0 -15
  802. package/devices/niviss.js.map +0 -1
  803. package/devices/nodon.d.ts +0 -4
  804. package/devices/nodon.d.ts.map +0 -1
  805. package/devices/nodon.js +0 -386
  806. package/devices/nodon.js.map +0 -1
  807. package/devices/nordtronic.d.ts +0 -4
  808. package/devices/nordtronic.d.ts.map +0 -1
  809. package/devices/nordtronic.js +0 -41
  810. package/devices/nordtronic.js.map +0 -1
  811. package/devices/nous.d.ts +0 -4
  812. package/devices/nous.d.ts.map +0 -1
  813. package/devices/nous.js +0 -151
  814. package/devices/nous.js.map +0 -1
  815. package/devices/novo.d.ts +0 -4
  816. package/devices/novo.d.ts.map +0 -1
  817. package/devices/novo.js +0 -57
  818. package/devices/novo.js.map +0 -1
  819. package/devices/nue_3a.d.ts +0 -4
  820. package/devices/nue_3a.d.ts.map +0 -1
  821. package/devices/nue_3a.js +0 -361
  822. package/devices/nue_3a.js.map +0 -1
  823. package/devices/nyce.d.ts +0 -4
  824. package/devices/nyce.d.ts.map +0 -1
  825. package/devices/nyce.js +0 -134
  826. package/devices/nyce.js.map +0 -1
  827. package/devices/onenuo.d.ts +0 -4
  828. package/devices/onenuo.d.ts.map +0 -1
  829. package/devices/onenuo.js +0 -86
  830. package/devices/onenuo.js.map +0 -1
  831. package/devices/onesti.d.ts +0 -4
  832. package/devices/onesti.d.ts.map +0 -1
  833. package/devices/onesti.js +0 -208
  834. package/devices/onesti.js.map +0 -1
  835. package/devices/openlumi.d.ts +0 -4
  836. package/devices/openlumi.d.ts.map +0 -1
  837. package/devices/openlumi.js +0 -62
  838. package/devices/openlumi.js.map +0 -1
  839. package/devices/orvibo.d.ts +0 -4
  840. package/devices/orvibo.d.ts.map +0 -1
  841. package/devices/orvibo.js +0 -391
  842. package/devices/orvibo.js.map +0 -1
  843. package/devices/osram.d.ts +0 -4
  844. package/devices/osram.d.ts.map +0 -1
  845. package/devices/osram.js +0 -516
  846. package/devices/osram.js.map +0 -1
  847. package/devices/oujiabao.d.ts +0 -4
  848. package/devices/oujiabao.d.ts.map +0 -1
  849. package/devices/oujiabao.js +0 -55
  850. package/devices/oujiabao.js.map +0 -1
  851. package/devices/owon.d.ts +0 -4
  852. package/devices/owon.d.ts.map +0 -1
  853. package/devices/owon.js +0 -478
  854. package/devices/owon.js.map +0 -1
  855. package/devices/ozsmartthings.d.ts +0 -4
  856. package/devices/ozsmartthings.d.ts.map +0 -1
  857. package/devices/ozsmartthings.js +0 -48
  858. package/devices/ozsmartthings.js.map +0 -1
  859. package/devices/paul_neuhaus.d.ts +0 -4
  860. package/devices/paul_neuhaus.d.ts.map +0 -1
  861. package/devices/paul_neuhaus.js +0 -194
  862. package/devices/paul_neuhaus.js.map +0 -1
  863. package/devices/paulmann.d.ts +0 -4
  864. package/devices/paulmann.d.ts.map +0 -1
  865. package/devices/paulmann.js +0 -330
  866. package/devices/paulmann.js.map +0 -1
  867. package/devices/peq.d.ts +0 -4
  868. package/devices/peq.d.ts.map +0 -1
  869. package/devices/peq.js +0 -64
  870. package/devices/peq.js.map +0 -1
  871. package/devices/perenio.d.ts +0 -4
  872. package/devices/perenio.d.ts.map +0 -1
  873. package/devices/perenio.js +0 -468
  874. package/devices/perenio.js.map +0 -1
  875. package/devices/philio.d.ts +0 -4
  876. package/devices/philio.d.ts.map +0 -1
  877. package/devices/philio.js +0 -16
  878. package/devices/philio.js.map +0 -1
  879. package/devices/philips.d.ts +0 -4
  880. package/devices/philips.d.ts.map +0 -1
  881. package/devices/philips.js +0 -4030
  882. package/devices/philips.js.map +0 -1
  883. package/devices/plaid.d.ts +0 -4
  884. package/devices/plaid.d.ts.map +0 -1
  885. package/devices/plaid.js +0 -65
  886. package/devices/plaid.js.map +0 -1
  887. package/devices/plugwise.d.ts +0 -4
  888. package/devices/plugwise.d.ts.map +0 -1
  889. package/devices/plugwise.js +0 -210
  890. package/devices/plugwise.js.map +0 -1
  891. package/devices/profalux.d.ts +0 -4
  892. package/devices/profalux.d.ts.map +0 -1
  893. package/devices/profalux.js +0 -191
  894. package/devices/profalux.js.map +0 -1
  895. package/devices/prolight.d.ts +0 -4
  896. package/devices/prolight.d.ts.map +0 -1
  897. package/devices/prolight.js +0 -115
  898. package/devices/prolight.js.map +0 -1
  899. package/devices/pushok.d.ts +0 -4
  900. package/devices/pushok.d.ts.map +0 -1
  901. package/devices/pushok.js +0 -300
  902. package/devices/pushok.js.map +0 -1
  903. package/devices/qa.d.ts +0 -4
  904. package/devices/qa.d.ts.map +0 -1
  905. package/devices/qa.js +0 -295
  906. package/devices/qa.js.map +0 -1
  907. package/devices/qmotion.d.ts +0 -4
  908. package/devices/qmotion.d.ts.map +0 -1
  909. package/devices/qmotion.js +0 -73
  910. package/devices/qmotion.js.map +0 -1
  911. package/devices/qoto.d.ts +0 -4
  912. package/devices/qoto.d.ts.map +0 -1
  913. package/devices/qoto.js +0 -87
  914. package/devices/qoto.js.map +0 -1
  915. package/devices/quotra.d.ts +0 -4
  916. package/devices/quotra.d.ts.map +0 -1
  917. package/devices/quotra.js +0 -22
  918. package/devices/quotra.js.map +0 -1
  919. package/devices/rademacher.d.ts +0 -4
  920. package/devices/rademacher.d.ts.map +0 -1
  921. package/devices/rademacher.js +0 -29
  922. package/devices/rademacher.js.map +0 -1
  923. package/devices/radium.d.ts +0 -4
  924. package/devices/radium.d.ts.map +0 -1
  925. package/devices/radium.js +0 -15
  926. package/devices/radium.js.map +0 -1
  927. package/devices/raex.d.ts +0 -4
  928. package/devices/raex.d.ts.map +0 -1
  929. package/devices/raex.js +0 -15
  930. package/devices/raex.js.map +0 -1
  931. package/devices/rgb_genie.d.ts +0 -4
  932. package/devices/rgb_genie.d.ts.map +0 -1
  933. package/devices/rgb_genie.js +0 -279
  934. package/devices/rgb_genie.js.map +0 -1
  935. package/devices/robb.d.ts +0 -4
  936. package/devices/robb.d.ts.map +0 -1
  937. package/devices/robb.js +0 -449
  938. package/devices/robb.js.map +0 -1
  939. package/devices/roome.d.ts +0 -4
  940. package/devices/roome.d.ts.map +0 -1
  941. package/devices/roome.js +0 -55
  942. package/devices/roome.js.map +0 -1
  943. package/devices/rtx.d.ts +0 -4
  944. package/devices/rtx.d.ts.map +0 -1
  945. package/devices/rtx.js +0 -151
  946. package/devices/rtx.js.map +0 -1
  947. package/devices/salus_controls.d.ts +0 -4
  948. package/devices/salus_controls.d.ts.map +0 -1
  949. package/devices/salus_controls.js +0 -136
  950. package/devices/salus_controls.js.map +0 -1
  951. package/devices/samotech.d.ts +0 -4
  952. package/devices/samotech.d.ts.map +0 -1
  953. package/devices/samotech.js +0 -75
  954. package/devices/samotech.js.map +0 -1
  955. package/devices/saswell.d.ts +0 -4
  956. package/devices/saswell.d.ts.map +0 -1
  957. package/devices/saswell.js +0 -125
  958. package/devices/saswell.js.map +0 -1
  959. package/devices/sber.d.ts +0 -4
  960. package/devices/sber.d.ts.map +0 -1
  961. package/devices/sber.js +0 -66
  962. package/devices/sber.js.map +0 -1
  963. package/devices/scanproducts.d.ts +0 -4
  964. package/devices/scanproducts.d.ts.map +0 -1
  965. package/devices/scanproducts.js +0 -22
  966. package/devices/scanproducts.js.map +0 -1
  967. package/devices/schlage.d.ts +0 -4
  968. package/devices/schlage.d.ts.map +0 -1
  969. package/devices/schlage.js +0 -64
  970. package/devices/schlage.js.map +0 -1
  971. package/devices/schneider_electric.d.ts +0 -4
  972. package/devices/schneider_electric.d.ts.map +0 -1
  973. package/devices/schneider_electric.js +0 -2187
  974. package/devices/schneider_electric.js.map +0 -1
  975. package/devices/schwaiger.d.ts +0 -4
  976. package/devices/schwaiger.d.ts.map +0 -1
  977. package/devices/schwaiger.js +0 -109
  978. package/devices/schwaiger.js.map +0 -1
  979. package/devices/seastar_intelligence.d.ts +0 -4
  980. package/devices/seastar_intelligence.d.ts.map +0 -1
  981. package/devices/seastar_intelligence.js +0 -20
  982. package/devices/seastar_intelligence.js.map +0 -1
  983. package/devices/securifi.d.ts +0 -4
  984. package/devices/securifi.d.ts.map +0 -1
  985. package/devices/securifi.js +0 -83
  986. package/devices/securifi.js.map +0 -1
  987. package/devices/sengled.d.ts +0 -7
  988. package/devices/sengled.d.ts.map +0 -1
  989. package/devices/sengled.js +0 -358
  990. package/devices/sengled.js.map +0 -1
  991. package/devices/sercomm.d.ts +0 -4
  992. package/devices/sercomm.d.ts.map +0 -1
  993. package/devices/sercomm.js +0 -189
  994. package/devices/sercomm.js.map +0 -1
  995. package/devices/shade_control.d.ts +0 -4
  996. package/devices/shade_control.d.ts.map +0 -1
  997. package/devices/shade_control.js +0 -65
  998. package/devices/shade_control.js.map +0 -1
  999. package/devices/shenzhen_homa.d.ts +0 -4
  1000. package/devices/shenzhen_homa.d.ts.map +0 -1
  1001. package/devices/shenzhen_homa.js +0 -111
  1002. package/devices/shenzhen_homa.js.map +0 -1
  1003. package/devices/shinasystem.d.ts +0 -4
  1004. package/devices/shinasystem.d.ts.map +0 -1
  1005. package/devices/shinasystem.js +0 -961
  1006. package/devices/shinasystem.js.map +0 -1
  1007. package/devices/shyugj.d.ts +0 -4
  1008. package/devices/shyugj.d.ts.map +0 -1
  1009. package/devices/shyugj.js +0 -21
  1010. package/devices/shyugj.js.map +0 -1
  1011. package/devices/siglis.d.ts +0 -4
  1012. package/devices/siglis.d.ts.map +0 -1
  1013. package/devices/siglis.js +0 -457
  1014. package/devices/siglis.js.map +0 -1
  1015. package/devices/sikom.d.ts +0 -4
  1016. package/devices/sikom.d.ts.map +0 -1
  1017. package/devices/sikom.js +0 -68
  1018. package/devices/sikom.js.map +0 -1
  1019. package/devices/sinope.d.ts +0 -4
  1020. package/devices/sinope.d.ts.map +0 -1
  1021. package/devices/sinope.js +0 -1755
  1022. package/devices/sinope.js.map +0 -1
  1023. package/devices/siterwell.d.ts +0 -4
  1024. package/devices/siterwell.d.ts.map +0 -1
  1025. package/devices/siterwell.js +0 -111
  1026. package/devices/siterwell.js.map +0 -1
  1027. package/devices/skydance.d.ts +0 -4
  1028. package/devices/skydance.d.ts.map +0 -1
  1029. package/devices/skydance.js +0 -156
  1030. package/devices/skydance.js.map +0 -1
  1031. package/devices/slv.d.ts +0 -4
  1032. package/devices/slv.d.ts.map +0 -1
  1033. package/devices/slv.js +0 -38
  1034. package/devices/slv.js.map +0 -1
  1035. package/devices/smart9.d.ts +0 -4
  1036. package/devices/smart9.d.ts.map +0 -1
  1037. package/devices/smart9.js +0 -67
  1038. package/devices/smart9.js.map +0 -1
  1039. package/devices/smart_home_pty.d.ts +0 -4
  1040. package/devices/smart_home_pty.d.ts.map +0 -1
  1041. package/devices/smart_home_pty.js +0 -22
  1042. package/devices/smart_home_pty.js.map +0 -1
  1043. package/devices/smartenit.d.ts +0 -4
  1044. package/devices/smartenit.d.ts.map +0 -1
  1045. package/devices/smartenit.js +0 -81
  1046. package/devices/smartenit.js.map +0 -1
  1047. package/devices/smartthings.d.ts +0 -4
  1048. package/devices/smartthings.d.ts.map +0 -1
  1049. package/devices/smartthings.js +0 -527
  1050. package/devices/smartthings.js.map +0 -1
  1051. package/devices/smartwings.d.ts +0 -4
  1052. package/devices/smartwings.d.ts.map +0 -1
  1053. package/devices/smartwings.js +0 -64
  1054. package/devices/smartwings.js.map +0 -1
  1055. package/devices/smlight.d.ts +0 -4
  1056. package/devices/smlight.d.ts.map +0 -1
  1057. package/devices/smlight.js +0 -22
  1058. package/devices/smlight.js.map +0 -1
  1059. package/devices/sohan_electric.d.ts +0 -4
  1060. package/devices/sohan_electric.d.ts.map +0 -1
  1061. package/devices/sohan_electric.js +0 -20
  1062. package/devices/sohan_electric.js.map +0 -1
  1063. package/devices/solaredge.d.ts +0 -4
  1064. package/devices/solaredge.d.ts.map +0 -1
  1065. package/devices/solaredge.js +0 -15
  1066. package/devices/solaredge.js.map +0 -1
  1067. package/devices/soma.d.ts +0 -4
  1068. package/devices/soma.d.ts.map +0 -1
  1069. package/devices/soma.js +0 -15
  1070. package/devices/soma.js.map +0 -1
  1071. package/devices/somfy.d.ts +0 -4
  1072. package/devices/somfy.d.ts.map +0 -1
  1073. package/devices/somfy.js +0 -88
  1074. package/devices/somfy.js.map +0 -1
  1075. package/devices/somgoms.d.ts +0 -4
  1076. package/devices/somgoms.d.ts.map +0 -1
  1077. package/devices/somgoms.js +0 -84
  1078. package/devices/somgoms.js.map +0 -1
  1079. package/devices/sonoff.d.ts +0 -4
  1080. package/devices/sonoff.d.ts.map +0 -1
  1081. package/devices/sonoff.js +0 -1444
  1082. package/devices/sonoff.js.map +0 -1
  1083. package/devices/sowilo.d.ts +0 -4
  1084. package/devices/sowilo.d.ts.map +0 -1
  1085. package/devices/sowilo.js +0 -15
  1086. package/devices/sowilo.js.map +0 -1
  1087. package/devices/spotmau.d.ts +0 -4
  1088. package/devices/spotmau.d.ts.map +0 -1
  1089. package/devices/spotmau.js +0 -42
  1090. package/devices/spotmau.js.map +0 -1
  1091. package/devices/stelpro.d.ts +0 -4
  1092. package/devices/stelpro.d.ts.map +0 -1
  1093. package/devices/stelpro.js +0 -366
  1094. package/devices/stelpro.js.map +0 -1
  1095. package/devices/sunricher.d.ts +0 -4
  1096. package/devices/sunricher.d.ts.map +0 -1
  1097. package/devices/sunricher.js +0 -1114
  1098. package/devices/sunricher.js.map +0 -1
  1099. package/devices/swann.d.ts +0 -4
  1100. package/devices/swann.d.ts.map +0 -1
  1101. package/devices/swann.js +0 -73
  1102. package/devices/swann.js.map +0 -1
  1103. package/devices/sylvania.d.ts +0 -4
  1104. package/devices/sylvania.d.ts.map +0 -1
  1105. package/devices/sylvania.js +0 -226
  1106. package/devices/sylvania.js.map +0 -1
  1107. package/devices/tapestry.d.ts +0 -4
  1108. package/devices/tapestry.d.ts.map +0 -1
  1109. package/devices/tapestry.js +0 -56
  1110. package/devices/tapestry.js.map +0 -1
  1111. package/devices/tci.d.ts +0 -4
  1112. package/devices/tci.d.ts.map +0 -1
  1113. package/devices/tci.js +0 -29
  1114. package/devices/tci.js.map +0 -1
  1115. package/devices/tech.d.ts +0 -4
  1116. package/devices/tech.d.ts.map +0 -1
  1117. package/devices/tech.js +0 -131
  1118. package/devices/tech.js.map +0 -1
  1119. package/devices/technicolor.d.ts +0 -4
  1120. package/devices/technicolor.d.ts.map +0 -1
  1121. package/devices/technicolor.js +0 -102
  1122. package/devices/technicolor.js.map +0 -1
  1123. package/devices/terncy.d.ts +0 -4
  1124. package/devices/terncy.d.ts.map +0 -1
  1125. package/devices/terncy.js +0 -116
  1126. package/devices/terncy.js.map +0 -1
  1127. package/devices/the_light_group.d.ts +0 -4
  1128. package/devices/the_light_group.d.ts.map +0 -1
  1129. package/devices/the_light_group.js +0 -130
  1130. package/devices/the_light_group.js.map +0 -1
  1131. package/devices/third_reality.d.ts +0 -4
  1132. package/devices/third_reality.d.ts.map +0 -1
  1133. package/devices/third_reality.js +0 -557
  1134. package/devices/third_reality.js.map +0 -1
  1135. package/devices/titan_products.d.ts +0 -4
  1136. package/devices/titan_products.d.ts.map +0 -1
  1137. package/devices/titan_products.js +0 -62
  1138. package/devices/titan_products.js.map +0 -1
  1139. package/devices/tlwglobal.d.ts +0 -4
  1140. package/devices/tlwglobal.d.ts.map +0 -1
  1141. package/devices/tlwglobal.js +0 -32
  1142. package/devices/tlwglobal.js.map +0 -1
  1143. package/devices/tplink.d.ts +0 -4
  1144. package/devices/tplink.d.ts.map +0 -1
  1145. package/devices/tplink.js +0 -82
  1146. package/devices/tplink.js.map +0 -1
  1147. package/devices/trust.d.ts +0 -4
  1148. package/devices/trust.d.ts.map +0 -1
  1149. package/devices/trust.js +0 -183
  1150. package/devices/trust.js.map +0 -1
  1151. package/devices/tubeszb.d.ts +0 -4
  1152. package/devices/tubeszb.d.ts.map +0 -1
  1153. package/devices/tubeszb.js +0 -60
  1154. package/devices/tubeszb.js.map +0 -1
  1155. package/devices/tuya.d.ts +0 -4
  1156. package/devices/tuya.d.ts.map +0 -1
  1157. package/devices/tuya.js +0 -13609
  1158. package/devices/tuya.js.map +0 -1
  1159. package/devices/ubisys.d.ts +0 -4
  1160. package/devices/ubisys.d.ts.map +0 -1
  1161. package/devices/ubisys.js +0 -1300
  1162. package/devices/ubisys.js.map +0 -1
  1163. package/devices/uhome.d.ts +0 -4
  1164. package/devices/uhome.d.ts.map +0 -1
  1165. package/devices/uhome.js +0 -64
  1166. package/devices/uhome.js.map +0 -1
  1167. package/devices/universal_electronics_inc.d.ts +0 -4
  1168. package/devices/universal_electronics_inc.d.ts.map +0 -1
  1169. package/devices/universal_electronics_inc.js +0 -186
  1170. package/devices/universal_electronics_inc.js.map +0 -1
  1171. package/devices/vbled.d.ts +0 -4
  1172. package/devices/vbled.d.ts.map +0 -1
  1173. package/devices/vbled.js +0 -15
  1174. package/devices/vbled.js.map +0 -1
  1175. package/devices/vesternet.d.ts +0 -4
  1176. package/devices/vesternet.d.ts.map +0 -1
  1177. package/devices/vesternet.js +0 -330
  1178. package/devices/vesternet.js.map +0 -1
  1179. package/devices/viessmann.d.ts +0 -4
  1180. package/devices/viessmann.d.ts.map +0 -1
  1181. package/devices/viessmann.js +0 -115
  1182. package/devices/viessmann.js.map +0 -1
  1183. package/devices/villeroy_boch.d.ts +0 -4
  1184. package/devices/villeroy_boch.d.ts.map +0 -1
  1185. package/devices/villeroy_boch.js +0 -22
  1186. package/devices/villeroy_boch.js.map +0 -1
  1187. package/devices/vimar.d.ts +0 -4
  1188. package/devices/vimar.d.ts.map +0 -1
  1189. package/devices/vimar.js +0 -137
  1190. package/devices/vimar.js.map +0 -1
  1191. package/devices/visonic.d.ts +0 -4
  1192. package/devices/visonic.d.ts.map +0 -1
  1193. package/devices/visonic.js +0 -138
  1194. package/devices/visonic.js.map +0 -1
  1195. package/devices/vrey.d.ts +0 -4
  1196. package/devices/vrey.d.ts.map +0 -1
  1197. package/devices/vrey.js +0 -18
  1198. package/devices/vrey.js.map +0 -1
  1199. package/devices/wally.d.ts +0 -4
  1200. package/devices/wally.d.ts.map +0 -1
  1201. package/devices/wally.js +0 -64
  1202. package/devices/wally.js.map +0 -1
  1203. package/devices/waxman.d.ts +0 -4
  1204. package/devices/waxman.d.ts.map +0 -1
  1205. package/devices/waxman.js +0 -85
  1206. package/devices/waxman.js.map +0 -1
  1207. package/devices/weiser.d.ts +0 -4
  1208. package/devices/weiser.d.ts.map +0 -1
  1209. package/devices/weiser.js +0 -103
  1210. package/devices/weiser.js.map +0 -1
  1211. package/devices/weten.d.ts +0 -4
  1212. package/devices/weten.d.ts.map +0 -1
  1213. package/devices/weten.js +0 -89
  1214. package/devices/weten.js.map +0 -1
  1215. package/devices/wirenboard.d.ts +0 -4
  1216. package/devices/wirenboard.d.ts.map +0 -1
  1217. package/devices/wirenboard.js +0 -626
  1218. package/devices/wirenboard.js.map +0 -1
  1219. package/devices/wisdom.d.ts +0 -4
  1220. package/devices/wisdom.d.ts.map +0 -1
  1221. package/devices/wisdom.js +0 -15
  1222. package/devices/wisdom.js.map +0 -1
  1223. package/devices/woolley.d.ts +0 -4
  1224. package/devices/woolley.d.ts.map +0 -1
  1225. package/devices/woolley.js +0 -88
  1226. package/devices/woolley.js.map +0 -1
  1227. package/devices/woox.d.ts +0 -4
  1228. package/devices/woox.d.ts.map +0 -1
  1229. package/devices/woox.js +0 -137
  1230. package/devices/woox.js.map +0 -1
  1231. package/devices/wyze.d.ts +0 -4
  1232. package/devices/wyze.d.ts.map +0 -1
  1233. package/devices/wyze.js +0 -63
  1234. package/devices/wyze.js.map +0 -1
  1235. package/devices/xinghuoyuan.d.ts +0 -4
  1236. package/devices/xinghuoyuan.d.ts.map +0 -1
  1237. package/devices/xinghuoyuan.js +0 -15
  1238. package/devices/xinghuoyuan.js.map +0 -1
  1239. package/devices/xyzroe.d.ts +0 -4
  1240. package/devices/xyzroe.d.ts.map +0 -1
  1241. package/devices/xyzroe.js +0 -519
  1242. package/devices/xyzroe.js.map +0 -1
  1243. package/devices/yale.d.ts +0 -4
  1244. package/devices/yale.d.ts.map +0 -1
  1245. package/devices/yale.js +0 -503
  1246. package/devices/yale.js.map +0 -1
  1247. package/devices/yandex.d.ts +0 -4
  1248. package/devices/yandex.d.ts.map +0 -1
  1249. package/devices/yandex.js +0 -410
  1250. package/devices/yandex.js.map +0 -1
  1251. package/devices/ynoa.d.ts +0 -4
  1252. package/devices/ynoa.d.ts.map +0 -1
  1253. package/devices/ynoa.js +0 -113
  1254. package/devices/ynoa.js.map +0 -1
  1255. package/devices/yookee.d.ts +0 -4
  1256. package/devices/yookee.d.ts.map +0 -1
  1257. package/devices/yookee.js +0 -63
  1258. package/devices/yookee.js.map +0 -1
  1259. package/devices/ysrsai.d.ts +0 -4
  1260. package/devices/ysrsai.d.ts.map +0 -1
  1261. package/devices/ysrsai.js +0 -66
  1262. package/devices/ysrsai.js.map +0 -1
  1263. package/devices/zemismart.d.ts +0 -4
  1264. package/devices/zemismart.d.ts.map +0 -1
  1265. package/devices/zemismart.js +0 -405
  1266. package/devices/zemismart.js.map +0 -1
  1267. package/devices/zen.d.ts +0 -4
  1268. package/devices/zen.d.ts.map +0 -1
  1269. package/devices/zen.js +0 -96
  1270. package/devices/zen.js.map +0 -1
  1271. package/devices/zigbeetlc.d.ts +0 -13
  1272. package/devices/zigbeetlc.d.ts.map +0 -1
  1273. package/devices/zigbeetlc.js +0 -201
  1274. package/devices/zigbeetlc.js.map +0 -1
  1275. package/devices/zipato.d.ts +0 -4
  1276. package/devices/zipato.d.ts.map +0 -1
  1277. package/devices/zipato.js +0 -15
  1278. package/devices/zipato.js.map +0 -1
  1279. package/index.d.ts +0 -21
  1280. package/index.d.ts.map +0 -1
  1281. package/index.js +0 -488
  1282. package/index.js.map +0 -1
  1283. package/lib/color.d.ts +0 -272
  1284. package/lib/color.d.ts.map +0 -1
  1285. package/lib/color.js +0 -765
  1286. package/lib/color.js.map +0 -1
  1287. package/lib/configureKey.d.ts +0 -3
  1288. package/lib/configureKey.d.ts.map +0 -1
  1289. package/lib/configureKey.js +0 -939
  1290. package/lib/configureKey.js.map +0 -1
  1291. package/lib/constants.d.ts +0 -68
  1292. package/lib/constants.d.ts.map +0 -1
  1293. package/lib/constants.js +0 -293
  1294. package/lib/constants.js.map +0 -1
  1295. package/lib/develco.d.ts +0 -15
  1296. package/lib/develco.d.ts.map +0 -1
  1297. package/lib/develco.js +0 -183
  1298. package/lib/develco.js.map +0 -1
  1299. package/lib/ewelink.d.ts +0 -7
  1300. package/lib/ewelink.d.ts.map +0 -1
  1301. package/lib/ewelink.js +0 -34
  1302. package/lib/ewelink.js.map +0 -1
  1303. package/lib/exposes.d.ts +0 -344
  1304. package/lib/exposes.d.ts.map +0 -1
  1305. package/lib/exposes.js +0 -1065
  1306. package/lib/exposes.js.map +0 -1
  1307. package/lib/generateDefinition.d.ts +0 -6
  1308. package/lib/generateDefinition.d.ts.map +0 -1
  1309. package/lib/generateDefinition.js +0 -356
  1310. package/lib/generateDefinition.js.map +0 -1
  1311. package/lib/ikea.d.ts +0 -39
  1312. package/lib/ikea.d.ts.map +0 -1
  1313. package/lib/ikea.js +0 -776
  1314. package/lib/ikea.js.map +0 -1
  1315. package/lib/kelvinToXy.d.ts +0 -8
  1316. package/lib/kelvinToXy.d.ts.map +0 -1
  1317. package/lib/kelvinToXy.js +0 -1914
  1318. package/lib/kelvinToXy.js.map +0 -1
  1319. package/lib/ledvance.d.ts +0 -20
  1320. package/lib/ledvance.d.ts.map +0 -1
  1321. package/lib/ledvance.js +0 -103
  1322. package/lib/ledvance.js.map +0 -1
  1323. package/lib/legacy.d.ts +0 -5128
  1324. package/lib/legacy.d.ts.map +0 -1
  1325. package/lib/legacy.js +0 -6603
  1326. package/lib/legacy.js.map +0 -1
  1327. package/lib/legrand.d.ts +0 -69
  1328. package/lib/legrand.d.ts.map +0 -1
  1329. package/lib/legrand.js +0 -282
  1330. package/lib/legrand.js.map +0 -1
  1331. package/lib/light.d.ts +0 -6
  1332. package/lib/light.d.ts.map +0 -1
  1333. package/lib/light.js +0 -146
  1334. package/lib/light.js.map +0 -1
  1335. package/lib/logger.d.ts +0 -4
  1336. package/lib/logger.d.ts.map +0 -1
  1337. package/lib/logger.js +0 -14
  1338. package/lib/logger.js.map +0 -1
  1339. package/lib/lumi.d.ts +0 -953
  1340. package/lib/lumi.d.ts.map +0 -1
  1341. package/lib/lumi.js +0 -4973
  1342. package/lib/lumi.js.map +0 -1
  1343. package/lib/modernExtend.d.ts +0 -325
  1344. package/lib/modernExtend.d.ts.map +0 -1
  1345. package/lib/modernExtend.js +0 -1995
  1346. package/lib/modernExtend.js.map +0 -1
  1347. package/lib/ota.d.ts +0 -71
  1348. package/lib/ota.d.ts.map +0 -1
  1349. package/lib/ota.js +0 -663
  1350. package/lib/ota.js.map +0 -1
  1351. package/lib/philips.d.ts +0 -84
  1352. package/lib/philips.d.ts.map +0 -1
  1353. package/lib/philips.js +0 -657
  1354. package/lib/philips.js.map +0 -1
  1355. package/lib/reporting.d.ts +0 -58
  1356. package/lib/reporting.d.ts.map +0 -1
  1357. package/lib/reporting.js +0 -336
  1358. package/lib/reporting.js.map +0 -1
  1359. package/lib/store.d.ts +0 -7
  1360. package/lib/store.d.ts.map +0 -1
  1361. package/lib/store.js +0 -56
  1362. package/lib/store.js.map +0 -1
  1363. package/lib/tuya.d.ts +0 -764
  1364. package/lib/tuya.d.ts.map +0 -1
  1365. package/lib/tuya.js +0 -2425
  1366. package/lib/tuya.js.map +0 -1
  1367. package/lib/types.d.ts +0 -433
  1368. package/lib/types.d.ts.map +0 -1
  1369. package/lib/types.js +0 -4
  1370. package/lib/types.js.map +0 -1
  1371. package/lib/ubisys.d.ts +0 -19
  1372. package/lib/ubisys.d.ts.map +0 -1
  1373. package/lib/ubisys.js +0 -293
  1374. package/lib/ubisys.js.map +0 -1
  1375. package/lib/utils.d.ts +0 -93
  1376. package/lib/utils.d.ts.map +0 -1
  1377. package/lib/utils.js +0 -790
  1378. package/lib/utils.js.map +0 -1
  1379. package/lib/zosung.d.ts +0 -52
  1380. package/lib/zosung.d.ts.map +0 -1
  1381. package/lib/zosung.js +0 -256
  1382. package/lib/zosung.js.map +0 -1
package/lib/tuya.js DELETED
@@ -1,2425 +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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.clusters = exports.modernExtend = exports.fz = exports.tz = exports.valueConverter = exports.valueConverterBasic = exports.Bitmap = exports.enum = exports.Enum = exports.whitelabel = exports.fingerprint = exports.configureMagicPacket = exports.skip = exports.exposes = exports.dataTypes = void 0;
40
- exports.convertBufferToNumber = convertBufferToNumber;
41
- exports.onEvent = onEvent;
42
- exports.convertDecimalValueTo4ByteHexArray = convertDecimalValueTo4ByteHexArray;
43
- exports.onEventMeasurementPoll = onEventMeasurementPoll;
44
- exports.onEventSetTime = onEventSetTime;
45
- exports.onEventSetLocalTime = onEventSetLocalTime;
46
- exports.sendDataPointValue = sendDataPointValue;
47
- exports.sendDataPointBool = sendDataPointBool;
48
- exports.sendDataPointEnum = sendDataPointEnum;
49
- exports.sendDataPointRaw = sendDataPointRaw;
50
- exports.sendDataPointBitmap = sendDataPointBitmap;
51
- exports.sendDataPointStringBuffer = sendDataPointStringBuffer;
52
- exports.getHandlersForDP = getHandlersForDP;
53
- const zigbee_herdsman_1 = require("zigbee-herdsman");
54
- const fromZigbee_1 = __importDefault(require("../converters/fromZigbee"));
55
- const toZigbee_1 = __importDefault(require("../converters/toZigbee"));
56
- const constants = __importStar(require("./constants"));
57
- const exposes = __importStar(require("./exposes"));
58
- const logger_1 = require("./logger");
59
- const modernExtend = __importStar(require("./modernExtend"));
60
- const globalStore = __importStar(require("./store"));
61
- const utils = __importStar(require("./utils"));
62
- const utils_1 = require("./utils");
63
- // import {Color} from './color';
64
- const NS = 'zhc:tuya';
65
- const e = exposes.presets;
66
- const ea = exposes.access;
67
- exports.dataTypes = {
68
- raw: 0, // [ bytes ]
69
- bool: 1, // [0/1]
70
- number: 2, // [ 4 byte value ]
71
- string: 3, // [ N byte string ]
72
- enum: 4, // [ 0-255 ]
73
- bitmap: 5, // [ 1,2,4 bytes ] as bits
74
- };
75
- function convertBufferToNumber(chunks) {
76
- let value = 0;
77
- for (let i = 0; i < chunks.length; i++) {
78
- value = value << 8;
79
- value += chunks[i];
80
- }
81
- return value;
82
- }
83
- function convertStringToHexArray(value) {
84
- const asciiKeys = [];
85
- for (let i = 0; i < value.length; i++) {
86
- asciiKeys.push(value[i].charCodeAt(0));
87
- }
88
- return asciiKeys;
89
- }
90
- function onEvent(args) {
91
- return async (type, data, device, settings, state) => {
92
- args = { queryOnDeviceAnnounce: false, timeStart: '1970', respondToMcuVersionResponse: true, ...args };
93
- const endpoint = device.endpoints[0];
94
- if (type === 'message' && data.cluster === 'manuSpecificTuya') {
95
- if (args.respondToMcuVersionResponse && data.type === 'commandMcuVersionResponse') {
96
- await endpoint.command('manuSpecificTuya', 'mcuVersionRequest', { seq: 0x0002 });
97
- }
98
- else if (data.type === 'commandMcuGatewayConnectionStatus') {
99
- // "payload" can have the following values:
100
- // 0x00: The gateway is not connected to the internet.
101
- // 0x01: The gateway is connected to the internet.
102
- // 0x02: The request timed out after three seconds.
103
- const payload = { payloadSize: 1, payload: 1 };
104
- await endpoint.command('manuSpecificTuya', 'mcuGatewayConnectionStatus', payload, {});
105
- }
106
- }
107
- if (data.type === 'commandMcuSyncTime' && data.cluster === 'manuSpecificTuya') {
108
- try {
109
- const offset = args.timeStart === '2000' ? constants.OneJanuary2000 : 0;
110
- const utcTime = Math.round((new Date().getTime() - offset) / 1000);
111
- const localTime = utcTime - new Date().getTimezoneOffset() * 60;
112
- const payload = {
113
- payloadSize: 8,
114
- payload: [...convertDecimalValueTo4ByteHexArray(utcTime), ...convertDecimalValueTo4ByteHexArray(localTime)],
115
- };
116
- await endpoint.command('manuSpecificTuya', 'mcuSyncTime', payload, {});
117
- }
118
- catch {
119
- /* handle error to prevent crash */
120
- }
121
- }
122
- // Some devices require a dataQuery on deviceAnnounce, otherwise they don't report any data
123
- if (args.queryOnDeviceAnnounce && type === 'deviceAnnounce') {
124
- await endpoint.command('manuSpecificTuya', 'dataQuery', {});
125
- }
126
- if (args.queryIntervalSeconds) {
127
- if (type === 'stop') {
128
- clearTimeout(globalStore.getValue(device, 'query_interval'));
129
- globalStore.clearValue(device, 'query_interval');
130
- }
131
- else if (!globalStore.hasValue(device, 'query_interval')) {
132
- const setTimer = () => {
133
- const timer = setTimeout(async () => {
134
- try {
135
- await endpoint.command('manuSpecificTuya', 'dataQuery', {});
136
- }
137
- catch {
138
- /* Do nothing*/
139
- }
140
- setTimer();
141
- }, args.queryIntervalSeconds * 1000);
142
- globalStore.putValue(device, 'query_interval', timer);
143
- };
144
- setTimer();
145
- }
146
- }
147
- };
148
- }
149
- function getDataValue(dpValue) {
150
- let dataString = '';
151
- switch (dpValue.datatype) {
152
- case exports.dataTypes.raw:
153
- return dpValue.data;
154
- case exports.dataTypes.bool:
155
- return dpValue.data[0] === 1;
156
- case exports.dataTypes.number:
157
- return convertBufferToNumber(dpValue.data);
158
- case exports.dataTypes.string:
159
- // Don't use .map here, doesn't work: https://github.com/Koenkk/zigbee-herdsman-converters/pull/1799/files#r530377091
160
- for (let i = 0; i < dpValue.data.length; ++i) {
161
- dataString += String.fromCharCode(dpValue.data[i]);
162
- }
163
- return dataString;
164
- case exports.dataTypes.enum:
165
- return dpValue.data[0];
166
- case exports.dataTypes.bitmap:
167
- return convertBufferToNumber(dpValue.data);
168
- }
169
- }
170
- function convertDecimalValueTo4ByteHexArray(value) {
171
- const hexValue = Number(value).toString(16).padStart(8, '0');
172
- const chunk1 = hexValue.substring(0, 2);
173
- const chunk2 = hexValue.substring(2, 4);
174
- const chunk3 = hexValue.substring(4, 6);
175
- const chunk4 = hexValue.substring(6);
176
- return [chunk1, chunk2, chunk3, chunk4].map((hexVal) => parseInt(hexVal, 16));
177
- }
178
- function convertDecimalValueTo2ByteHexArray(value) {
179
- const hexValue = Number(value).toString(16).padStart(4, '0');
180
- const chunk1 = hexValue.substring(0, 2);
181
- const chunk2 = hexValue.substring(2);
182
- return [chunk1, chunk2].map((hexVal) => parseInt(hexVal, 16));
183
- }
184
- async function onEventMeasurementPoll(type, data, device, options, electricalMeasurement = true, metering = false) {
185
- const endpoint = device.getEndpoint(1);
186
- const poll = async () => {
187
- if (electricalMeasurement) {
188
- await endpoint.read('haElectricalMeasurement', ['rmsVoltage', 'rmsCurrent', 'activePower']);
189
- }
190
- if (metering) {
191
- await endpoint.read('seMetering', ['currentSummDelivered']);
192
- }
193
- };
194
- utils.onEventPoll(type, data, device, options, 'measurement', 60, poll);
195
- }
196
- async function onEventSetTime(type, data, device) {
197
- // FIXME: Need to join onEventSetTime/onEventSetLocalTime to one command
198
- if (data.type === 'commandMcuSyncTime' && data.cluster === 'manuSpecificTuya') {
199
- try {
200
- const utcTime = Math.round((new Date().getTime() - constants.OneJanuary2000) / 1000);
201
- const localTime = utcTime - new Date().getTimezoneOffset() * 60;
202
- const endpoint = device.getEndpoint(1);
203
- const payload = {
204
- payloadSize: 8,
205
- payload: [...convertDecimalValueTo4ByteHexArray(utcTime), ...convertDecimalValueTo4ByteHexArray(localTime)],
206
- };
207
- await endpoint.command('manuSpecificTuya', 'mcuSyncTime', payload, {});
208
- }
209
- catch {
210
- // endpoint.command can throw an error which needs to
211
- // be caught or the zigbee-herdsman may crash
212
- // Debug message is handled in the zigbee-herdsman
213
- }
214
- }
215
- }
216
- // set UTC and Local Time as total number of seconds from 00: 00: 00 on January 01, 1970
217
- // force to update every device time every hour due to very poor clock
218
- async function onEventSetLocalTime(type, data, device) {
219
- // FIXME: What actually nextLocalTimeUpdate/forceTimeUpdate do?
220
- // I did not find any timers or something else where it was used.
221
- // Actually, there are two ways to set time on Tuya MCU devices:
222
- // 1. Respond to the `commandMcuSyncTime` event
223
- // 2. Just send `mcuSyncTime` anytime (by 1-hour timer or something else)
224
- const nextLocalTimeUpdate = globalStore.getValue(device, 'nextLocalTimeUpdate');
225
- const forceTimeUpdate = nextLocalTimeUpdate == null || nextLocalTimeUpdate < new Date().getTime();
226
- if ((data.type === 'commandMcuSyncTime' && data.cluster === 'manuSpecificTuya') || forceTimeUpdate) {
227
- globalStore.putValue(device, 'nextLocalTimeUpdate', new Date().getTime() + 3600 * 1000);
228
- try {
229
- const utcTime = Math.round(new Date().getTime() / 1000);
230
- const localTime = utcTime - new Date().getTimezoneOffset() * 60;
231
- const endpoint = device.getEndpoint(1);
232
- const payload = {
233
- payloadSize: 8,
234
- payload: [...convertDecimalValueTo4ByteHexArray(utcTime), ...convertDecimalValueTo4ByteHexArray(localTime)],
235
- };
236
- await endpoint.command('manuSpecificTuya', 'mcuSyncTime', payload, {});
237
- }
238
- catch {
239
- // endpoint.command can throw an error which needs to
240
- // be caught or the zigbee-herdsman may crash
241
- // Debug message is handled in the zigbee-herdsman
242
- }
243
- }
244
- }
245
- // Return `seq` - transaction ID for handling concrete response
246
- async function sendDataPoints(entity, dpValues, cmd = 'dataRequest', seq) {
247
- if (seq === undefined) {
248
- seq = globalStore.getValue(entity, 'sequence', 0);
249
- globalStore.putValue(entity, 'sequence', (seq + 1) % 0xffff);
250
- }
251
- await entity.command('manuSpecificTuya', cmd, { seq, dpValues }, { disableDefaultResponse: true });
252
- return seq;
253
- }
254
- function dpValueFromNumberValue(dp, value) {
255
- return { dp, datatype: exports.dataTypes.number, data: convertDecimalValueTo4ByteHexArray(value) };
256
- }
257
- function dpValueFromBool(dp, value) {
258
- return { dp, datatype: exports.dataTypes.bool, data: [value ? 1 : 0] };
259
- }
260
- function dpValueFromEnum(dp, value) {
261
- return { dp, datatype: exports.dataTypes.enum, data: [value] };
262
- }
263
- function dpValueFromString(dp, string) {
264
- return { dp, datatype: exports.dataTypes.string, data: convertStringToHexArray(string) };
265
- }
266
- function dpValueFromRaw(dp, rawBuffer) {
267
- return { dp, datatype: exports.dataTypes.raw, data: rawBuffer };
268
- }
269
- function dpValueFromBitmap(dp, bitmapBuffer) {
270
- return { dp, datatype: exports.dataTypes.bitmap, data: [bitmapBuffer] };
271
- }
272
- async function sendDataPointValue(entity, dp, value, cmd, seq) {
273
- return await sendDataPoints(entity, [dpValueFromNumberValue(dp, value)], cmd, seq);
274
- }
275
- async function sendDataPointBool(entity, dp, value, cmd, seq) {
276
- return await sendDataPoints(entity, [dpValueFromBool(dp, value)], cmd, seq);
277
- }
278
- async function sendDataPointEnum(entity, dp, value, cmd, seq) {
279
- return await sendDataPoints(entity, [dpValueFromEnum(dp, value)], cmd, seq);
280
- }
281
- async function sendDataPointRaw(entity, dp, value, cmd, seq) {
282
- return await sendDataPoints(entity, [dpValueFromRaw(dp, value)], cmd, seq);
283
- }
284
- async function sendDataPointBitmap(entity, dp, value, cmd, seq) {
285
- return await sendDataPoints(entity, [dpValueFromBitmap(dp, value)], cmd, seq);
286
- }
287
- async function sendDataPointStringBuffer(entity, dp, value, cmd, seq) {
288
- return await sendDataPoints(entity, [dpValueFromString(dp, value)], cmd, seq);
289
- }
290
- const tuyaExposes = {
291
- lightType: () => e.enum('light_type', ea.STATE_SET, ['led', 'incandescent', 'halogen']).withDescription('Type of light attached to the device'),
292
- lightBrightnessWithMinMax: () => e
293
- .light_brightness()
294
- .withMinBrightness()
295
- .withMaxBrightness()
296
- .setAccess('state', ea.STATE_SET)
297
- .setAccess('brightness', ea.STATE_SET)
298
- .setAccess('min_brightness', ea.STATE_SET)
299
- .setAccess('max_brightness', ea.STATE_SET),
300
- lightBrightness: () => e.light_brightness().setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET),
301
- countdown: () => e
302
- .numeric('countdown', ea.STATE_SET)
303
- .withValueMin(0)
304
- .withValueMax(43200)
305
- .withValueStep(1)
306
- .withUnit('s')
307
- .withDescription('Countdown to turn device off after a certain time'),
308
- switch: () => e.switch().setAccess('state', ea.STATE_SET),
309
- selfTest: () => e.binary('self_test', ea.STATE_SET, true, false).withDescription('Indicates whether the device is being self-tested'),
310
- selfTestResult: () => e.enum('self_test_result', ea.STATE, ['checking', 'success', 'failure', 'others']).withDescription('Result of the self-test'),
311
- faultAlarm: () => e.binary('fault_alarm', ea.STATE, true, false).withDescription('Indicates whether a fault was detected'),
312
- silence: () => e.binary('silence', ea.STATE_SET, true, false).withDescription('Silence the alarm'),
313
- frostProtection: (extraNote = '') => e
314
- .binary('frost_protection', ea.STATE_SET, 'ON', 'OFF')
315
- .withDescription(`When Anti-Freezing function is activated, the temperature in the house is kept at 8 °C.${extraNote}`),
316
- errorStatus: () => e.numeric('error_status', ea.STATE).withDescription('Error status'),
317
- scheduleAllDays: (access, format) => ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'].map((day) => e.text(`schedule_${day}`, access).withDescription(`Schedule for ${day}, format: "${format}"`)),
318
- temperatureUnit: () => e.enum('temperature_unit', ea.STATE_SET, ['celsius', 'fahrenheit']).withDescription('Temperature unit'),
319
- temperatureCalibration: () => e
320
- .numeric('temperature_calibration', ea.STATE_SET)
321
- .withValueMin(-2.0)
322
- .withValueMax(2.0)
323
- .withValueStep(0.1)
324
- .withUnit('°C')
325
- .withDescription('Temperature calibration'),
326
- humidityCalibration: () => e
327
- .numeric('humidity_calibration', ea.STATE_SET)
328
- .withValueMin(-30)
329
- .withValueMax(30)
330
- .withValueStep(1)
331
- .withUnit('%')
332
- .withDescription('Humidity calibration'),
333
- gasValue: () => e.numeric('gas_value', ea.STATE).withDescription('Measured gas concentration'),
334
- energyWithPhase: (phase) => e.numeric(`energy_${phase}`, ea.STATE).withUnit('kWh').withDescription(`Sum of consumed energy (phase ${phase.toUpperCase()})`),
335
- energyProducedWithPhase: (phase) => e.numeric(`energy_produced_${phase}`, ea.STATE).withUnit('kWh').withDescription(`Sum of produced energy (phase ${phase.toUpperCase()})`),
336
- energyFlowWithPhase: (phase, more) => e
337
- .enum(`energy_flow_${phase}`, ea.STATE, ['consuming', 'producing', ...more])
338
- .withDescription(`Direction of energy (phase ${phase.toUpperCase()})`),
339
- voltageWithPhase: (phase) => e.numeric(`voltage_${phase}`, ea.STATE).withUnit('V').withDescription(`Measured electrical potential value (phase ${phase.toUpperCase()})`),
340
- powerWithPhase: (phase) => e.numeric(`power_${phase}`, ea.STATE).withUnit('W').withDescription(`Instantaneous measured power (phase ${phase.toUpperCase()})`),
341
- currentWithPhase: (phase) => e
342
- .numeric(`current_${phase}`, ea.STATE)
343
- .withUnit('A')
344
- .withDescription(`Instantaneous measured electrical current (phase ${phase.toUpperCase()})`),
345
- powerFactorWithPhase: (phase) => e
346
- .numeric(`power_factor_${phase}`, ea.STATE)
347
- .withUnit('%')
348
- .withDescription(`Instantaneous measured power factor (phase ${phase.toUpperCase()})`),
349
- switchType: () => e.enum('switch_type', ea.ALL, ['toggle', 'state', 'momentary']).withDescription('Type of the switch'),
350
- backlightModeLowMediumHigh: () => e.enum('backlight_mode', ea.ALL, ['low', 'medium', 'high']).withDescription('Intensity of the backlight'),
351
- backlightModeOffNormalInverted: () => e.enum('backlight_mode', ea.ALL, ['off', 'normal', 'inverted']).withDescription('Mode of the backlight'),
352
- backlightModeOffOn: () => e.binary('backlight_mode', ea.ALL, 'ON', 'OFF').withDescription(`Mode of the backlight`),
353
- indicatorMode: () => e.enum('indicator_mode', ea.ALL, ['off', 'off/on', 'on/off', 'on']).withDescription('LED indicator mode'),
354
- indicatorModeNoneRelayPos: () => e.enum('indicator_mode', ea.ALL, ['none', 'relay', 'pos']).withDescription('Mode of the indicator light'),
355
- powerOutageMemory: () => e.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore']).withDescription('Recover state after power outage'),
356
- batteryState: () => e.enum('battery_state', ea.STATE, ['low', 'medium', 'high']).withDescription('State of the battery'),
357
- doNotDisturb: () => e
358
- .binary('do_not_disturb', ea.STATE_SET, true, false)
359
- .withDescription('Do not disturb mode, when enabled this function will keep the light OFF after a power outage'),
360
- colorPowerOnBehavior: () => e.enum('color_power_on_behavior', ea.STATE_SET, ['initial', 'previous', 'customized']).withDescription('Power on behavior state'),
361
- switchMode: () => e.enum('switch_mode', ea.STATE_SET, ['switch', 'scene']).withDescription('Sets the mode of the switch to act as a switch or as a scene'),
362
- switchMode2: () => e
363
- .enum('switch_mode', ea.STATE_SET, ['switch', 'curtain'])
364
- .withDescription('Sets the mode of the switch to act as a switch or as a curtain controller'),
365
- lightMode: () => e.enum('light_mode', ea.STATE_SET, ['normal', 'on', 'off', 'flash']).withDescription(`'Sets the indicator mode of l1.
366
- Normal: Orange while off and white while on.
367
- On: Always white. Off: Always orange.
368
- Flash: Flashes white when triggered.
369
- Note: Orange light will turn off after light off delay, white light always stays on. Light mode updates on next state change.'`),
370
- // Inching can be enabled for multiple endpoints (1 to 6) but it is always controlled on endpoint 1
371
- // So instead of pinning the values to each endpoint, it is easier to keep the structure stand alone.
372
- inchingSwitch: (quantity) => {
373
- const x = e
374
- .composite('inching_control_set', 'inching_control_set', ea.SET)
375
- .withDescription('Device Inching function Settings. The device will automatically turn off ' + 'after each turn on for a specified period of time.');
376
- for (let i = 1; i <= quantity; i++) {
377
- x.withFeature(e
378
- .binary('inching_control', ea.SET, 'ENABLE', 'DISABLE')
379
- .withDescription('Enable/disable inching function for endpoint ' + i + '.')
380
- .withLabel('Inching for Endpoint ' + i)
381
- .withProperty('inching_control_' + i)).withFeature(e
382
- .numeric('inching_time', ea.SET)
383
- .withDescription('Delay time for executing a inching action for endpoint ' + i + '.')
384
- .withLabel('Inching time for endpoint ' + i)
385
- .withProperty('inching_time_' + i)
386
- .withUnit('seconds')
387
- .withValueMin(1)
388
- .withValueMax(65535)
389
- .withValueStep(1));
390
- }
391
- return x;
392
- },
393
- };
394
- exports.exposes = tuyaExposes;
395
- exports.skip = {
396
- // Prevent state from being published when already ON and brightness is also published.
397
- // This prevents 100% -> X% brightness jumps when the switch is already on
398
- // https://github.com/Koenkk/zigbee2mqtt/issues/13800#issuecomment-1263592783
399
- stateOnAndBrightnessPresent: (meta) => {
400
- if (Array.isArray(meta.mapped))
401
- throw new Error('Not supported');
402
- const convertedKey = meta.mapped.meta.multiEndpoint && meta.endpoint_name ? `state_${meta.endpoint_name}` : 'state';
403
- return meta.message.brightness !== undefined && meta.state[convertedKey] === meta.message.state;
404
- },
405
- };
406
- const configureMagicPacket = async (device, coordinatorEndpoint) => {
407
- try {
408
- const endpoint = device.endpoints[0];
409
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
410
- }
411
- catch (e) {
412
- // Fails for some Tuya devices with UNSUPPORTED_ATTRIBUTE, ignore that.
413
- // e.g. https://github.com/Koenkk/zigbee2mqtt/issues/14857
414
- if (e.message.includes('UNSUPPORTED_ATTRIBUTE')) {
415
- logger_1.logger.debug('configureMagicPacket failed, ignoring...', NS);
416
- }
417
- else {
418
- throw e;
419
- }
420
- }
421
- };
422
- exports.configureMagicPacket = configureMagicPacket;
423
- const fingerprint = (modelID, manufacturerNames) => {
424
- return manufacturerNames.map((manufacturerName) => {
425
- return { modelID, manufacturerName };
426
- });
427
- };
428
- exports.fingerprint = fingerprint;
429
- const whitelabel = (vendor, model, description, manufacturerNames) => {
430
- const fingerprint = manufacturerNames.map((manufacturerName) => {
431
- return { manufacturerName };
432
- });
433
- return { vendor, model, description, fingerprint };
434
- };
435
- exports.whitelabel = whitelabel;
436
- class Base {
437
- value;
438
- constructor(value) {
439
- this.value = value;
440
- }
441
- valueOf() {
442
- return this.value;
443
- }
444
- }
445
- class Enum extends Base {
446
- constructor(value) {
447
- super(value);
448
- }
449
- }
450
- exports.Enum = Enum;
451
- const enumConstructor = (value) => new Enum(value);
452
- exports.enum = enumConstructor;
453
- class Bitmap extends Base {
454
- constructor(value) {
455
- super(value);
456
- }
457
- }
458
- exports.Bitmap = Bitmap;
459
- exports.valueConverterBasic = {
460
- lookup: (map, fallbackValue) => {
461
- return {
462
- to: (v, meta) => utils.getFromLookup(v, typeof map === 'function' ? map(meta.options, meta.device) : map),
463
- from: (v, _meta, options) => {
464
- const m = typeof map === 'function' ? map(options, _meta.device) : map;
465
- const value = Object.entries(m).find((i) => i[1].valueOf() === v);
466
- if (!value) {
467
- if (fallbackValue !== undefined)
468
- return fallbackValue;
469
- throw new Error(`Value '${v}' is not allowed, expected one of ${Object.values(m).map((i) => i.valueOf())}`);
470
- }
471
- return value[0];
472
- },
473
- };
474
- },
475
- scale: (min1, max1, min2, max2) => {
476
- return {
477
- to: (v) => utils.mapNumberRange(v, min1, max1, min2, max2),
478
- from: (v) => utils.mapNumberRange(v, min2, max2, min1, max1),
479
- };
480
- },
481
- raw: () => {
482
- return { to: (v) => v, from: (v) => v };
483
- },
484
- divideBy: (value) => {
485
- return { to: (v) => v * value, from: (v) => v / value };
486
- },
487
- divideByFromOnly: (value) => {
488
- return { to: (v) => v, from: (v) => v / value };
489
- },
490
- trueFalse: (valueTrue) => {
491
- return { from: (v) => v === valueTrue.valueOf() };
492
- },
493
- };
494
- exports.valueConverter = {
495
- trueFalse0: exports.valueConverterBasic.trueFalse(0),
496
- trueFalse1: exports.valueConverterBasic.trueFalse(1),
497
- trueFalseInvert: {
498
- to: (v) => !v,
499
- from: (v) => !v,
500
- },
501
- trueFalseEnum0: exports.valueConverterBasic.trueFalse(new Enum(0)),
502
- trueFalseEnum1: exports.valueConverterBasic.trueFalse(new Enum(1)),
503
- onOff: exports.valueConverterBasic.lookup({ ON: true, OFF: false }),
504
- powerOnBehavior: exports.valueConverterBasic.lookup({ off: 0, on: 1, previous: 2 }),
505
- powerOnBehaviorEnum: exports.valueConverterBasic.lookup({ off: new Enum(0), on: new Enum(1), previous: new Enum(2) }),
506
- switchType: exports.valueConverterBasic.lookup({ momentary: new Enum(0), toggle: new Enum(1), state: new Enum(2) }),
507
- switchType2: exports.valueConverterBasic.lookup({ toggle: new Enum(0), state: new Enum(1), momentary: new Enum(2) }),
508
- backlightModeOffNormalInverted: exports.valueConverterBasic.lookup({ off: new Enum(0), normal: new Enum(1), inverted: new Enum(2) }),
509
- backlightModeOffLowMediumHigh: exports.valueConverterBasic.lookup({ off: new Enum(0), low: new Enum(1), medium: new Enum(2), high: new Enum(3) }),
510
- lightType: exports.valueConverterBasic.lookup({ led: 0, incandescent: 1, halogen: 2 }),
511
- countdown: exports.valueConverterBasic.raw(),
512
- scale0_254to0_1000: exports.valueConverterBasic.scale(0, 254, 0, 1000),
513
- scale0_1to0_1000: exports.valueConverterBasic.scale(0, 1, 0, 1000),
514
- temperatureUnit: exports.valueConverterBasic.lookup({ celsius: 0, fahrenheit: 1 }),
515
- temperatureUnitEnum: exports.valueConverterBasic.lookup({ celsius: new Enum(0), fahrenheit: new Enum(1) }),
516
- batteryState: exports.valueConverterBasic.lookup({ low: 0, medium: 1, high: 2 }),
517
- divideBy2: exports.valueConverterBasic.divideBy(2),
518
- divideBy10: exports.valueConverterBasic.divideBy(10),
519
- divideBy100: exports.valueConverterBasic.divideBy(100),
520
- divideBy1000: exports.valueConverterBasic.divideBy(1000),
521
- divideBy10FromOnly: exports.valueConverterBasic.divideByFromOnly(10),
522
- switchMode: exports.valueConverterBasic.lookup({ switch: new Enum(0), scene: new Enum(1) }),
523
- switchMode2: exports.valueConverterBasic.lookup({ switch: new Enum(0), curtain: new Enum(1) }),
524
- lightMode: exports.valueConverterBasic.lookup({ normal: new Enum(0), on: new Enum(1), off: new Enum(2), flash: new Enum(3) }),
525
- raw: exports.valueConverterBasic.raw(),
526
- localTemperatureCalibration: {
527
- from: (value) => (value > 4000 ? value - 4096 : value),
528
- to: (value) => (value < 0 ? 4096 + value : value),
529
- },
530
- setLimit: {
531
- to: (v) => {
532
- if (!v)
533
- throw new Error('Limit cannot be unset, use factory_reset');
534
- return v;
535
- },
536
- from: (v) => v,
537
- },
538
- coverPosition: {
539
- to: async (v, meta) => {
540
- return meta.options.invert_cover ? 100 - v : v;
541
- },
542
- from: (v, meta, options, publish) => {
543
- const position = options.invert_cover ? 100 - v : v;
544
- publish({ state: position === 0 ? 'CLOSE' : 'OPEN' });
545
- return position;
546
- },
547
- },
548
- coverPositionInverted: {
549
- to: async (v, meta) => {
550
- return meta.options.invert_cover ? v : 100 - v;
551
- },
552
- from: (v, meta, options, publish) => {
553
- const position = options.invert_cover ? v : 100 - v;
554
- publish({ state: position === 0 ? 'CLOSE' : 'OPEN' });
555
- return position;
556
- },
557
- },
558
- tubularMotorDirection: exports.valueConverterBasic.lookup({ normal: new Enum(0), reversed: new Enum(1) }),
559
- plus1: {
560
- from: (v) => v + 1,
561
- to: (v) => v - 1,
562
- },
563
- static: (value) => {
564
- return {
565
- from: (v) => {
566
- return value;
567
- },
568
- };
569
- },
570
- phaseVariant1: {
571
- from: (v) => {
572
- const buffer = Buffer.from(v, 'base64');
573
- return { voltage: (buffer[14] | (buffer[13] << 8)) / 10, current: (buffer[12] | (buffer[11] << 8)) / 1000 };
574
- },
575
- },
576
- phaseVariant2: {
577
- from: (v) => {
578
- const buf = Buffer.from(v, 'base64');
579
- return { voltage: (buf[1] | (buf[0] << 8)) / 10, current: (buf[4] | (buf[3] << 8)) / 1000, power: buf[7] | (buf[6] << 8) };
580
- },
581
- },
582
- phaseVariant2WithPhase: (phase) => {
583
- return {
584
- from: (v) => {
585
- // Support negative power readings
586
- // https://github.com/Koenkk/zigbee2mqtt/issues/18603#issuecomment-2277697295
587
- const buf = Buffer.from(v, 'base64');
588
- let power = buf[7] | (buf[6] << 8);
589
- if (power > 0x7fff) {
590
- power = (0x999a - power) * -1;
591
- }
592
- return {
593
- [`voltage_${phase}`]: (buf[1] | (buf[0] << 8)) / 10,
594
- [`current_${phase}`]: (buf[4] | (buf[3] << 8)) / 1000,
595
- [`power_${phase}`]: power,
596
- };
597
- },
598
- };
599
- },
600
- phaseVariant3: {
601
- from: (v) => {
602
- const buf = Buffer.from(v, 'base64');
603
- return {
604
- voltage: ((buf[0] << 8) | buf[1]) / 10,
605
- current: ((buf[2] << 16) | (buf[3] << 8) | buf[4]) / 1000,
606
- power: (buf[5] << 16) | (buf[6] << 8) | buf[7],
607
- };
608
- },
609
- },
610
- power: {
611
- from: (v) => {
612
- // Support negative readings
613
- // https://github.com/Koenkk/zigbee2mqtt/issues/18603
614
- return v > 0x0fffffff ? (0x1999999c - v) * -1 : v;
615
- },
616
- },
617
- threshold: {
618
- from: (v) => {
619
- const buffer = Buffer.from(v, 'base64');
620
- const stateLookup = { 0: 'not_set', 1: 'over_current_threshold', 3: 'over_voltage_threshold' };
621
- const protectionLookup = { 0: 'OFF', 1: 'ON' };
622
- return {
623
- threshold_1_protection: protectionLookup[buffer[1]],
624
- threshold_1: stateLookup[buffer[0]],
625
- threshold_1_value: buffer[3] | (buffer[2] << 8),
626
- threshold_2_protection: protectionLookup[buffer[5]],
627
- threshold_2: stateLookup[buffer[4]],
628
- threshold_2_value: buffer[7] | (buffer[6] << 8),
629
- };
630
- },
631
- },
632
- threshold_2: {
633
- to: async (v, meta) => {
634
- const entity = meta.device.endpoints[0];
635
- const onOffLookup = { on: 1, off: 0 };
636
- const sendCommand = utils.getMetaValue(entity, meta.mapped, 'tuyaSendCommand', undefined, 'dataRequest');
637
- if (meta.message.overload_breaker) {
638
- const threshold = meta.state['overload_threshold'];
639
- const buf = Buffer.from([
640
- 3,
641
- utils.getFromLookup(meta.message.overload_breaker, onOffLookup),
642
- 0,
643
- utils.toNumber(threshold, 'overload_threshold'),
644
- ]);
645
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
646
- }
647
- else if (meta.message.overload_threshold) {
648
- const state = meta.state['overload_breaker'];
649
- const buf = Buffer.from([
650
- 3,
651
- utils.getFromLookup(state, onOffLookup),
652
- 0,
653
- utils.toNumber(meta.message.overload_threshold, 'overload_threshold'),
654
- ]);
655
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
656
- }
657
- else if (meta.message.leakage_threshold) {
658
- const state = meta.state['leakage_breaker'];
659
- const buf = Buffer.alloc(8);
660
- buf.writeUInt8(4, 4);
661
- buf.writeUInt8(utils.getFromLookup(state, onOffLookup), 5);
662
- buf.writeUInt16BE(utils.toNumber(meta.message.leakage_threshold, 'leakage_threshold'), 6);
663
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
664
- }
665
- else if (meta.message.leakage_breaker) {
666
- const threshold = meta.state['leakage_threshold'];
667
- const buf = Buffer.alloc(8);
668
- buf.writeUInt8(4, 4);
669
- buf.writeUInt8(utils.getFromLookup(meta.message.leakage_breaker, onOffLookup), 5);
670
- buf.writeUInt16BE(utils.toNumber(threshold, 'leakage_threshold'), 6);
671
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
672
- }
673
- else if (meta.message.high_temperature_threshold) {
674
- const state = meta.state['high_temperature_breaker'];
675
- const buf = Buffer.alloc(12);
676
- buf.writeUInt8(5, 8);
677
- buf.writeUInt8(utils.getFromLookup(state, onOffLookup), 9);
678
- buf.writeUInt16BE(utils.toNumber(meta.message.high_temperature_threshold, 'high_temperature_threshold'), 10);
679
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
680
- }
681
- else if (meta.message.high_temperature_breaker) {
682
- const threshold = meta.state['high_temperature_threshold'];
683
- const buf = Buffer.alloc(12);
684
- buf.writeUInt8(5, 8);
685
- buf.writeUInt8(utils.getFromLookup(meta.message.high_temperature_breaker, onOffLookup), 9);
686
- buf.writeUInt16BE(utils.toNumber(threshold, 'high_temperature_threshold'), 10);
687
- await sendDataPointRaw(entity, 17, Array.from(buf), sendCommand, 1);
688
- }
689
- },
690
- from: (v) => {
691
- const data = Buffer.from(v, 'base64');
692
- const result = {};
693
- const lookup = { 0: 'OFF', 1: 'ON' };
694
- const alarmLookup = { 3: 'overload', 4: 'leakage', 5: 'high_temperature' };
695
- const len = data.length;
696
- let i = 0;
697
- while (i < len) {
698
- if (Object.prototype.hasOwnProperty.call(alarmLookup, data[i])) {
699
- const alarm = alarmLookup[data[i]];
700
- const state = lookup[data[i + 1]];
701
- const threshold = data[i + 3] | (data[i + 2] << 8);
702
- result[`${alarm}_breaker`] = state;
703
- result[`${alarm}_threshold`] = threshold;
704
- }
705
- i += 4;
706
- }
707
- return result;
708
- },
709
- },
710
- threshold_3: {
711
- to: async (v, meta) => {
712
- const entity = meta.device.endpoints[0];
713
- const onOffLookup = { on: 1, off: 0 };
714
- const sendCommand = utils.getMetaValue(entity, meta.mapped, 'tuyaSendCommand', undefined, 'dataRequest');
715
- if (meta.message.over_current_threshold) {
716
- const state = meta.state['over_current_breaker'];
717
- const buf = Buffer.from([
718
- 1,
719
- utils.getFromLookup(state, onOffLookup),
720
- 0,
721
- utils.toNumber(meta.message.over_current_threshold, 'over_current_threshold'),
722
- ]);
723
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
724
- }
725
- else if (meta.message.over_current_breaker) {
726
- const threshold = meta.state['over_current_threshold'];
727
- const buf = Buffer.from([
728
- 1,
729
- utils.getFromLookup(meta.message.over_current_breaker, onOffLookup),
730
- 0,
731
- utils.toNumber(threshold, 'over_current_threshold'),
732
- ]);
733
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
734
- }
735
- else if (meta.message.over_voltage_threshold) {
736
- const state = meta.state['over_voltage_breaker'];
737
- const buf = Buffer.alloc(8);
738
- buf.writeUInt8(3, 4);
739
- buf.writeUInt8(utils.getFromLookup(state, onOffLookup), 5);
740
- buf.writeUInt16BE(utils.toNumber(meta.message.over_voltage_threshold, 'over_voltage_threshold'), 6);
741
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
742
- }
743
- else if (meta.message.over_voltage_breaker) {
744
- const threshold = meta.state['over_voltage_threshold'];
745
- const buf = Buffer.alloc(8);
746
- buf.writeUInt8(3, 4);
747
- buf.writeUInt8(utils.getFromLookup(meta.message.over_voltage_breaker, onOffLookup), 5);
748
- buf.writeUInt16BE(utils.toNumber(threshold, 'over_voltage_threshold'), 6);
749
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
750
- }
751
- else if (meta.message.under_voltage_threshold) {
752
- const state = meta.state['under_voltage_breaker'];
753
- const buf = Buffer.alloc(12);
754
- buf.writeUInt8(4, 8);
755
- buf.writeUInt8(utils.getFromLookup(state, onOffLookup), 9);
756
- buf.writeUInt16BE(utils.toNumber(meta.message.under_voltage_threshold, 'under_voltage_threshold'), 10);
757
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
758
- }
759
- else if (meta.message.under_voltage_breaker) {
760
- const threshold = meta.state['under_voltage_threshold'];
761
- const buf = Buffer.alloc(12);
762
- buf.writeUInt8(4, 8);
763
- buf.writeUInt8(utils.getFromLookup(meta.message.under_voltage_breaker, onOffLookup), 9);
764
- buf.writeUInt16BE(utils.toNumber(threshold, 'under_voltage_threshold'), 10);
765
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
766
- }
767
- else if (meta.message.insufficient_balance_threshold) {
768
- const state = meta.state['insufficient_balance_breaker'];
769
- const buf = Buffer.alloc(16);
770
- buf.writeUInt8(8, 12);
771
- buf.writeUInt8(utils.getFromLookup(state, onOffLookup), 13);
772
- buf.writeUInt16BE(utils.toNumber(meta.message.insufficient_balance_threshold, 'insufficient_balance_threshold'), 14);
773
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
774
- }
775
- else if (meta.message.insufficient_balance_breaker) {
776
- const threshold = meta.state['insufficient_balance_threshold'];
777
- const buf = Buffer.alloc(16);
778
- buf.writeUInt8(8, 12);
779
- buf.writeUInt8(utils.getFromLookup(meta.message.insufficient_balance_breaker, onOffLookup), 13);
780
- buf.writeUInt16BE(utils.toNumber(threshold, 'insufficient_balance_threshold'), 14);
781
- await sendDataPointRaw(entity, 18, Array.from(buf), sendCommand, 1);
782
- }
783
- },
784
- from: (v) => {
785
- const data = Buffer.from(v, 'base64');
786
- const result = {};
787
- const lookup = { 0: 'OFF', 1: 'ON' };
788
- const alarmLookup = { 1: 'over_current', 3: 'over_voltage', 4: 'under_voltage', 8: 'insufficient_balance' };
789
- const len = data.length;
790
- let i = 0;
791
- while (i < len) {
792
- if (Object.prototype.hasOwnProperty.call(alarmLookup, data[i])) {
793
- const alarm = alarmLookup[data[i]];
794
- const state = lookup[data[i + 1]];
795
- const threshold = data[i + 3] | (data[i + 2] << 8);
796
- result[`${alarm}_breaker`] = state;
797
- result[`${alarm}_threshold`] = threshold;
798
- }
799
- i += 4;
800
- }
801
- return result;
802
- },
803
- },
804
- selfTestResult: exports.valueConverterBasic.lookup({ checking: 0, success: 1, failure: 2, others: 3 }),
805
- lockUnlock: exports.valueConverterBasic.lookup({ LOCK: true, UNLOCK: false }),
806
- localTempCalibration1: {
807
- from: (v) => {
808
- if (v > 55)
809
- v -= 0x100000000;
810
- return v / 10;
811
- },
812
- to: (v) => {
813
- if (v > 0)
814
- return v * 10;
815
- if (v < 0)
816
- return v * 10 + 0x100000000;
817
- return v;
818
- },
819
- },
820
- localTempCalibration2: {
821
- from: (v) => v,
822
- to: (v) => {
823
- if (v < 0)
824
- return v + 0x100000000;
825
- return v;
826
- },
827
- },
828
- localTempCalibration3: {
829
- from: (v) => {
830
- if (v > 0x7fffffff)
831
- v -= 0x100000000;
832
- return v / 10;
833
- },
834
- to: (v) => {
835
- if (v > 0)
836
- return v * 10;
837
- if (v < 0)
838
- return v * 10 + 0x100000000;
839
- return v;
840
- },
841
- },
842
- thermostatHolidayStartStop: {
843
- from: (v) => {
844
- const start = {
845
- year: v.slice(0, 4),
846
- month: v.slice(4, 6),
847
- day: v.slice(6, 8),
848
- hours: v.slice(8, 10),
849
- minutes: v.slice(10, 12),
850
- };
851
- const end = {
852
- year: v.slice(12, 16),
853
- month: v.slice(16, 18),
854
- day: v.slice(18, 20),
855
- hours: v.slice(20, 22),
856
- minutes: v.slice(22, 24),
857
- };
858
- const startStr = `${start.year}/${start.month}/${start.day} ${start.hours}:${start.minutes}`;
859
- const endStr = `${end.year}/${end.month}/${end.day} ${end.hours}:${end.minutes}`;
860
- return `${startStr} | ${endStr}`;
861
- },
862
- to: (v) => {
863
- const numberPattern = /\d+/g;
864
- // @ts-expect-error ignore
865
- return v.match(numberPattern).join([]).toString();
866
- },
867
- },
868
- thermostatScheduleDaySingleDP: {
869
- from: (v) => {
870
- // day split to 10 min segments = total 144 segments
871
- const maxPeriodsInDay = 10;
872
- const periodSize = 3;
873
- const schedule = [];
874
- for (let i = 0; i < maxPeriodsInDay; i++) {
875
- const time = v[i * periodSize];
876
- const totalMinutes = time * 10;
877
- const hours = totalMinutes / 60;
878
- const rHours = Math.floor(hours);
879
- const minutes = (hours - rHours) * 60;
880
- const rMinutes = Math.round(minutes);
881
- const strHours = rHours.toString().padStart(2, '0');
882
- const strMinutes = rMinutes.toString().padStart(2, '0');
883
- const tempHexArray = [v[i * periodSize + 1], v[i * periodSize + 2]];
884
- const tempRaw = Buffer.from(tempHexArray).readUIntBE(0, tempHexArray.length);
885
- const temp = tempRaw / 10;
886
- schedule.push(`${strHours}:${strMinutes}/${temp}`);
887
- if (rHours === 24)
888
- break;
889
- }
890
- return schedule.join(' ');
891
- },
892
- to: (v, meta) => {
893
- const dayByte = {
894
- monday: 1,
895
- tuesday: 2,
896
- wednesday: 4,
897
- thursday: 8,
898
- friday: 16,
899
- saturday: 32,
900
- sunday: 64,
901
- };
902
- const weekDay = v.week_day;
903
- utils.assertString(weekDay, 'week_day');
904
- if (Object.keys(dayByte).indexOf(weekDay) === -1) {
905
- throw new Error('Invalid "week_day" property value: ' + weekDay);
906
- }
907
- let weekScheduleType = 'separate';
908
- if (meta.state && meta.state.working_day) {
909
- weekScheduleType = String(meta.state.working_day);
910
- }
911
- const payload = [];
912
- switch (weekScheduleType) {
913
- case 'mon_sun':
914
- payload.push(127);
915
- break;
916
- case 'mon_fri+sat+sun':
917
- if (['saturday', 'sunday'].indexOf(weekDay) === -1) {
918
- payload.push(31);
919
- break;
920
- }
921
- payload.push(dayByte[weekDay]);
922
- break;
923
- case 'separate':
924
- payload.push(dayByte[weekDay]);
925
- break;
926
- default:
927
- throw new Error('Invalid "working_day" property, need to set it before');
928
- }
929
- // day split to 10 min segments = total 144 segments
930
- const maxPeriodsInDay = 10;
931
- utils.assertString(v.schedule, 'schedule');
932
- const schedule = v.schedule.split(' ');
933
- const schedulePeriods = schedule.length;
934
- if (schedulePeriods > 10)
935
- throw new Error('There cannot be more than 10 periods in the schedule: ' + v);
936
- if (schedulePeriods < 2)
937
- throw new Error('There cannot be less than 2 periods in the schedule: ' + v);
938
- let prevHour;
939
- for (const period of schedule) {
940
- const timeTemp = period.split('/');
941
- const hm = timeTemp[0].split(':', 2);
942
- const h = parseInt(hm[0]);
943
- const m = parseInt(hm[1]);
944
- const temp = parseFloat(timeTemp[1]);
945
- if (h < 0 || h > 24 || m < 0 || m >= 60 || m % 10 !== 0 || temp < 5 || temp > 30 || temp % 0.5 !== 0) {
946
- throw new Error('Invalid hour, minute or temperature of: ' + period);
947
- }
948
- else if (prevHour > h) {
949
- throw new Error(`The hour of the next segment can't be less than the previous one: ${prevHour} > ${h}`);
950
- }
951
- prevHour = h;
952
- const segment = (h * 60 + m) / 10;
953
- const tempHexArray = convertDecimalValueTo2ByteHexArray(temp * 10);
954
- payload.push(segment, ...tempHexArray);
955
- }
956
- // Add "technical" periods to be valid payload
957
- for (let i = 0; i < maxPeriodsInDay - schedulePeriods; i++) {
958
- // by default it sends 9000b2, it's 24 hours and 18 degrees
959
- payload.push(144, 0, 180);
960
- }
961
- return payload;
962
- },
963
- },
964
- thermostatScheduleDayMultiDP: {
965
- from: (v) => exports.valueConverter.thermostatScheduleDayMultiDPWithTransitionCount().from(v),
966
- to: (v) => exports.valueConverter.thermostatScheduleDayMultiDPWithTransitionCount().to(v),
967
- },
968
- thermostatScheduleDayMultiDPWithTransitionCount: (transitionCount = 4) => {
969
- return {
970
- from: (v) => {
971
- const schedule = [];
972
- for (let index = 1; index < transitionCount * 4 - 1; index = index + 4) {
973
- schedule.push(String(parseInt(v[index + 0])).padStart(2, '0') +
974
- ':' +
975
- String(parseInt(v[index + 1])).padStart(2, '0') +
976
- '/' +
977
- // @ts-expect-error ignore
978
- (parseFloat((v[index + 2] << 8) + v[index + 3]) / 10.0).toFixed(1));
979
- }
980
- return schedule.join(' ');
981
- },
982
- to: (v) => {
983
- const payload = [0];
984
- const transitions = v.split(' ');
985
- if (transitions.length != transitionCount) {
986
- throw new Error(`Invalid schedule: there should be ${transitionCount} transitions`);
987
- }
988
- for (const transition of transitions) {
989
- const timeTemp = transition.split('/');
990
- if (timeTemp.length != 2) {
991
- throw new Error('Invalid schedule: wrong transition format: ' + transition);
992
- }
993
- const hourMin = timeTemp[0].split(':');
994
- const hour = parseInt(hourMin[0]);
995
- const min = parseInt(hourMin[1]);
996
- const temperature = Math.floor(parseFloat(timeTemp[1]) * 10);
997
- if (hour < 0 || hour > 24 || min < 0 || min > 60 || temperature < 50 || temperature > 300) {
998
- throw new Error('Invalid hour, minute or temperature of: ' + transition);
999
- }
1000
- payload.push(hour, min, (temperature & 0xff00) >> 8, temperature & 0xff);
1001
- }
1002
- return payload;
1003
- },
1004
- };
1005
- },
1006
- thermostatScheduleDayMultiDPWithDayNumber: (dayNum, transitionCount = 4) => {
1007
- return {
1008
- from: (v) => exports.valueConverter.thermostatScheduleDayMultiDPWithTransitionCount(transitionCount).from(v),
1009
- to: (v) => {
1010
- const data = exports.valueConverter.thermostatScheduleDayMultiDPWithTransitionCount(transitionCount).to(v);
1011
- data[0] = dayNum;
1012
- return data;
1013
- },
1014
- };
1015
- },
1016
- thermostatScheduleDayMultiDP_TRV602Z: {
1017
- from: (v) => {
1018
- const schedule = [];
1019
- for (let index = 1; index < 24; index = index + 4) {
1020
- const firstByte = (parseInt(v[index + 0]) - 192) << 8;
1021
- const secondByte = parseInt(v[index + 1]);
1022
- const minutesSinceMidnight = firstByte | secondByte;
1023
- const hour = Math.floor(minutesSinceMidnight / 60);
1024
- const minutes = minutesSinceMidnight % 60;
1025
- schedule.push(String(hour).padStart(2, '0') + ':' + String(minutes).padStart(2, '0') + '/' + (parseFloat(v[index + 3]) / 10.0).toFixed(1));
1026
- }
1027
- return schedule.join(' ');
1028
- },
1029
- to: (v) => {
1030
- const payload = [];
1031
- const transitions = v.split(' ');
1032
- if (transitions.length != 6) {
1033
- throw new Error('Invalid schedule: there should be 6 transitions');
1034
- }
1035
- for (const transition of transitions) {
1036
- const timeTemp = transition.split('/');
1037
- if (timeTemp.length != 2) {
1038
- throw new Error('Invalid schedule: wrong transition format: ' + transition);
1039
- }
1040
- const hourMin = timeTemp[0].split(':');
1041
- const hour = parseInt(hourMin[0]);
1042
- const min = parseInt(hourMin[1]);
1043
- const temperature = Math.floor(parseFloat(timeTemp[1]) * 10);
1044
- if (hour < 0 || hour > 24 || min < 0 || min > 60 || temperature < 50 || temperature > 300) {
1045
- throw new Error('Invalid hour, minute or temperature of: ' + transition);
1046
- }
1047
- const minutesSinceMidnight = hour * 60 + min;
1048
- const firstByte = ((minutesSinceMidnight & 3840) >> 8) + 192;
1049
- const secondByte = minutesSinceMidnight & 255;
1050
- payload.push(firstByte, secondByte, 64, temperature);
1051
- }
1052
- return payload;
1053
- },
1054
- },
1055
- thermostatScheduleDayMultiDP_TRV602Z_WithDayNumber: (dayNum) => {
1056
- return {
1057
- from: (v) => exports.valueConverter.thermostatScheduleDayMultiDP_TRV602Z.from(v),
1058
- to: (v) => {
1059
- const data = exports.valueConverter.thermostatScheduleDayMultiDP_TRV602Z.to(v);
1060
- data.unshift(dayNum);
1061
- return data;
1062
- },
1063
- };
1064
- },
1065
- tv02Preset: () => {
1066
- return {
1067
- from: (v) => {
1068
- if (v === 0)
1069
- return 'auto';
1070
- else if (v === 1)
1071
- return 'manual';
1072
- else
1073
- return 'holiday'; // 2 and 3 are holiday
1074
- },
1075
- to: (v, meta) => {
1076
- if (v === 'auto')
1077
- return new Enum(0);
1078
- else if (v === 'manual')
1079
- return new Enum(1);
1080
- else if (v === 'holiday') {
1081
- // https://github.com/Koenkk/zigbee2mqtt/issues/20486
1082
- if (meta.device.manufacturerName === '_TZE200_mudxchsu')
1083
- return new Enum(2);
1084
- else
1085
- return new Enum(3);
1086
- }
1087
- else
1088
- throw new Error(`Unsupported preset '${v}'`);
1089
- },
1090
- };
1091
- },
1092
- thermostatSystemModeAndPreset: (toKey) => {
1093
- return {
1094
- from: (v) => {
1095
- utils.assertNumber(v, 'system_mode');
1096
- const presetLookup = { 0: 'auto', 1: 'manual', 2: 'off', 3: 'on' };
1097
- const systemModeLookup = { 0: 'auto', 1: 'auto', 2: 'off', 3: 'heat' };
1098
- return { preset: presetLookup[v], system_mode: systemModeLookup[v] };
1099
- },
1100
- to: (v) => {
1101
- const presetLookup = { auto: new Enum(0), manual: new Enum(1), off: new Enum(2), on: new Enum(3) };
1102
- const systemModeLookup = { auto: new Enum(1), off: new Enum(2), heat: new Enum(3) };
1103
- const lookup = toKey === 'preset' ? presetLookup : systemModeLookup;
1104
- return utils.getFromLookup(v, lookup);
1105
- },
1106
- };
1107
- },
1108
- thermostatGtz10SystemModeAndPreset: (toKey) => {
1109
- return {
1110
- from: (v) => {
1111
- utils.assertNumber(v, 'system_mode');
1112
- const presetLookup = {
1113
- 0: 'manual',
1114
- 1: 'auto',
1115
- 2: 'holiday',
1116
- 3: 'comfort',
1117
- 4: 'eco',
1118
- 5: 'off',
1119
- };
1120
- const systemModeLookup = {
1121
- 0: 'heat',
1122
- 1: 'auto',
1123
- 5: 'off',
1124
- };
1125
- return { preset: presetLookup[v], system_mode: systemModeLookup[v] };
1126
- },
1127
- to: (v) => {
1128
- const presetLookup = {
1129
- manual: new Enum(0),
1130
- auto: new Enum(1),
1131
- holiday: new Enum(2),
1132
- comfort: new Enum(3),
1133
- eco: new Enum(4),
1134
- off: new Enum(5),
1135
- };
1136
- const systemModeLookup = {
1137
- heat: new Enum(0),
1138
- auto: new Enum(1),
1139
- off: new Enum(5),
1140
- };
1141
- const lookup = toKey === 'preset' ? presetLookup : systemModeLookup;
1142
- return utils.getFromLookup(v, lookup);
1143
- },
1144
- };
1145
- },
1146
- ZWT198_schedule: {
1147
- from: (value, meta, options) => {
1148
- const programmingMode = [];
1149
- for (let i = 0; i < 8; i++) {
1150
- const start = i * 4;
1151
- const time = value[start].toString().padStart(2, '0') + ':' + value[start + 1].toString().padStart(2, '0');
1152
- const temp = (value[start + 2] * 256 + value[start + 3]) / 10;
1153
- const tempStr = temp.toFixed(1) + '°C';
1154
- programmingMode.push(time + '/' + tempStr);
1155
- }
1156
- return {
1157
- schedule_weekday: programmingMode.slice(0, 6).join(' '),
1158
- schedule_holiday: programmingMode.slice(6, 8).join(' '),
1159
- };
1160
- },
1161
- to: async (v, meta) => {
1162
- const dpId = 109;
1163
- const payload = [];
1164
- let weekdayFormat;
1165
- let holidayFormat;
1166
- if (meta.message.schedule_weekday !== undefined) {
1167
- weekdayFormat = v;
1168
- holidayFormat = meta.state['schedule_holiday'];
1169
- }
1170
- else {
1171
- weekdayFormat = meta.state['schedule_weekday'];
1172
- holidayFormat = v;
1173
- }
1174
- function scheduleToRaw(key, input, number, payload, meta) {
1175
- const items = input.trim().split(/\s+/);
1176
- if (items.length != number) {
1177
- throw new Error('Wrong number of items for ' + key + ' :' + items.length);
1178
- }
1179
- else {
1180
- for (let i = 0; i < number; i++) {
1181
- const timeTemperature = items[i].split('/');
1182
- if (timeTemperature.length != 2) {
1183
- throw new Error('Invalid schedule: wrong transition format: ' + items[i]);
1184
- }
1185
- const hourMinute = timeTemperature[0].split(':', 2);
1186
- const hour = parseInt(hourMinute[0]);
1187
- const minute = parseInt(hourMinute[1]);
1188
- const temperature = parseFloat(timeTemperature[1]);
1189
- if (!utils.isNumber(hour) ||
1190
- !utils.isNumber(temperature) ||
1191
- !utils.isNumber(minute) ||
1192
- hour < 0 ||
1193
- hour >= 24 ||
1194
- minute < 0 ||
1195
- minute >= 60 ||
1196
- temperature < 5 ||
1197
- temperature >= 35) {
1198
- throw new Error('Invalid hour, minute or temperature (5<t<35) in ' +
1199
- key +
1200
- ' of: `' +
1201
- items[i] +
1202
- '`; Format is `hh:m/cc.c` or `hh:mm/cc.c°C`');
1203
- }
1204
- const temperature10 = Math.round(temperature * 10);
1205
- payload.push(hour, minute, (temperature10 >> 8) & 0xff, temperature10 & 0xff);
1206
- }
1207
- }
1208
- return;
1209
- }
1210
- scheduleToRaw('schedule_weekday', weekdayFormat, 6, payload, meta);
1211
- scheduleToRaw('schedule_holiday', holidayFormat, 2, payload, meta);
1212
- const entity = meta.device.endpoints[0];
1213
- const sendCommand = utils.getMetaValue(entity, meta.mapped, 'tuyaSendCommand', undefined, 'dataRequest');
1214
- await sendDataPointRaw(entity, dpId, payload, sendCommand, 1);
1215
- },
1216
- },
1217
- PO_BOCO_ELEC_schedule: (day) => ({
1218
- to: (v) => {
1219
- const payload = [80 + day];
1220
- const modeMapping = {
1221
- off: 5,
1222
- antifrost: 4,
1223
- eco: 3,
1224
- 'comfort_-2': 2,
1225
- 'comfort_-1': 1,
1226
- comfort: 0,
1227
- };
1228
- const items = v.split(' / ');
1229
- items.forEach((item) => {
1230
- if (Object.keys(modeMapping).includes(item)) {
1231
- payload.push(modeMapping[item]);
1232
- }
1233
- else {
1234
- const time = item.split(':');
1235
- const hours = parseInt(time[0]);
1236
- const minutes = Math.floor(parseInt(time[1]) / 5);
1237
- const total = hours * 12 + minutes;
1238
- if (total > 0)
1239
- payload.push(total);
1240
- }
1241
- });
1242
- return payload;
1243
- },
1244
- from: (v) => {
1245
- const payload = [];
1246
- const modeMapping = {
1247
- 5: 'off',
1248
- 4: 'antifrost',
1249
- 3: 'eco',
1250
- 2: 'comfort_-2',
1251
- 1: 'comfort_-1',
1252
- 0: 'comfort',
1253
- };
1254
- for (let index = 1; index < v.length; index++) {
1255
- const item = v[index];
1256
- if (index % 2) {
1257
- if (item > 5)
1258
- break;
1259
- const mode = modeMapping[item];
1260
- payload.push(mode);
1261
- }
1262
- else {
1263
- const nextItem = v[index + 1];
1264
- if (nextItem > 5)
1265
- break;
1266
- const date = new Date();
1267
- date.setHours(0, item * 5);
1268
- const hours = date.getHours().toString().padStart(2, '0');
1269
- const minutes = date.getMinutes().toString().padStart(2, '0');
1270
- payload.push(`${hours}:${minutes}`);
1271
- }
1272
- }
1273
- return payload.join(' / ');
1274
- },
1275
- }),
1276
- PO_BOCO_ELEC_holiday: {
1277
- to: (v) => {
1278
- const payload = [];
1279
- const regex = /(?<startYear>\d{4})\/(?<startMonth>\d{2})\/(?<startDay>\d{2})\s(?<startHours>\d{2}):(?<startMinutes>\d{2}) \| (?<endYear>\d{4})\/(?<endMonth>\d{2})\/(?<endDay>\d{2})\s(?<endHours>\d{2}):(?<endMinutes>\d{2}) \| (?<mode>off|antifrost|eco|comfort_-2|comfort_-1|comfort)$/g;
1280
- const regexResult = regex.exec(v);
1281
- if (!regexResult)
1282
- throw new Error('Invalid syntax. Should be' +
1283
- '`startYear/startMonth/startDay startHours:startMinutes | endYear/endMonth/endDay endHours:endMinutes | mode`. ' +
1284
- 'For example: `2024/12/12 09:00 | 2024/12/14 10:00 | comfort`');
1285
- const { startYear, startMonth, startDay, startHours, startMinutes, endYear, endMonth, endDay, endHours, endMin, mode } = regexResult.groups;
1286
- const startDate = new Date(parseInt(startYear), parseInt(startMonth) - 1, parseInt(startDay), parseInt(startHours), parseInt(startMinutes));
1287
- const endDate = new Date(parseInt(endYear), parseInt(endMonth) - 1, parseInt(endDay), parseInt(endHours), parseInt(startMinutes));
1288
- const diffHours = Math.abs(startDate.getTime() - endDate.getTime()) / 36e5;
1289
- const modeMapping = {
1290
- off: 5,
1291
- antifrost: 4,
1292
- eco: 3,
1293
- 'comfort_-2': 2,
1294
- 'comfort_-1': 1,
1295
- comfort: 0,
1296
- };
1297
- if (endMin)
1298
- logger_1.logger.warning('The end date minutes will be ignore.', NS);
1299
- if (diffHours > 255)
1300
- throw new Error('You cannot set an interval superior at 255 hours.');
1301
- else if (startDate.getTime() > endDate.getTime())
1302
- throw new Error('You cannot set a negative interval.');
1303
- payload.push(parseInt(startYear.slice(2)), parseInt(startMonth), parseInt(startDay), parseInt(startHours), parseInt(startMinutes), modeMapping[mode], 0, diffHours);
1304
- return payload;
1305
- },
1306
- from: (v) => {
1307
- const startYear = '2' + v[0].toString().padStart(3, '0');
1308
- const startMonth = v[1].toString().padStart(2, '0');
1309
- const startDay = v[2].toString().padStart(2, '0');
1310
- const startHours = v[3].toString().padStart(2, '0');
1311
- const startMinutes = v[4].toString().padStart(2, '0');
1312
- const mode = v[5];
1313
- const diffHours = v[7];
1314
- const modeMapping = {
1315
- 5: 'off',
1316
- 4: 'antifrost',
1317
- 3: 'eco',
1318
- 2: 'comfort_-2',
1319
- 1: 'comfort_-1',
1320
- 0: 'comfort',
1321
- };
1322
- const endDate = new Date(parseInt(startYear), parseInt(startMonth) - 1, parseInt(startDay), parseInt(startHours), parseInt(startMinutes));
1323
- endDate.setHours(endDate.getHours() + diffHours);
1324
- const endYear = endDate.getFullYear().toString();
1325
- const endMonth = (endDate.getMonth() + 1).toString().padStart(2, '0');
1326
- const endDay = endDate.getDate().toString().padStart(2, '0');
1327
- const endHours = endDate.getHours().toString().padStart(2, '0');
1328
- return (`${startYear}/${startMonth}/${startDay} ${startHours}:${startMinutes}` +
1329
- ` | ${endYear}/${endMonth}/${endDay} ${endHours}:${startMinutes}` +
1330
- ` | ${modeMapping[mode]}`);
1331
- },
1332
- },
1333
- TV02SystemMode: {
1334
- to: async (v, meta) => {
1335
- const entity = meta.device.endpoints[0];
1336
- if (meta.message.system_mode) {
1337
- if (meta.message.system_mode === 'off') {
1338
- await sendDataPointBool(entity, 107, true, 'dataRequest', 1);
1339
- }
1340
- else {
1341
- await sendDataPointEnum(entity, 2, 1, 'dataRequest', 1); // manual
1342
- }
1343
- }
1344
- else if (meta.message.heating_stop) {
1345
- if (meta.message.heating_stop === 'ON') {
1346
- await sendDataPointBool(entity, 107, true, 'dataRequest', 1);
1347
- }
1348
- else {
1349
- await sendDataPointEnum(entity, 2, 1, 'dataRequest', 1); // manual
1350
- }
1351
- }
1352
- },
1353
- from: (v) => {
1354
- return { system_mode: v === false ? 'heat' : 'off', heating_stop: v === false ? 'OFF' : 'ON' };
1355
- },
1356
- },
1357
- TV02FrostProtection: {
1358
- to: async (v, meta) => {
1359
- const entity = meta.device.endpoints[0];
1360
- if (v === 'ON') {
1361
- await sendDataPointBool(entity, 10, true, 'dataRequest', 1);
1362
- }
1363
- else {
1364
- await sendDataPointEnum(entity, 2, 1, 'dataRequest', 1); // manual
1365
- }
1366
- },
1367
- from: (v) => {
1368
- return { frost_protection: v === false ? 'OFF' : 'ON' };
1369
- },
1370
- },
1371
- inverse: { to: (v) => !v, from: (v) => !v },
1372
- onOffNotStrict: { from: (v) => (v ? 'ON' : 'OFF'), to: (v) => v === 'ON' },
1373
- errorOrBatteryLow: {
1374
- from: (v) => {
1375
- if (v === 0)
1376
- return { battery_low: false };
1377
- if (v === 1)
1378
- return { battery_low: true };
1379
- return { error: v };
1380
- },
1381
- },
1382
- // https://developer.tuya.com/en/docs/connect-subdevices-to-gateways/tuya-zigbee-multiple-switch-access-standard?id=K9ik6zvnqr09m
1383
- inchingSwitch: {
1384
- to: (value) => {
1385
- let result = '';
1386
- for (let i = 1; i <= 6; i++) {
1387
- if (value['inching_control_' + i] == undefined || value['inching_time_' + i] == undefined)
1388
- continue;
1389
- let state = value['inching_control_' + i] == 'ENABLE' ? 1 : 0;
1390
- if (i != 1) {
1391
- // Second endpoint onwards base number is determined by 2 powered by endpoint number less 1
1392
- state += 2 ** (i - 1);
1393
- }
1394
- const secs = parseInt(value['inching_time_' + i]);
1395
- const byte1 = secs >> 8; // Equivalent to Math.truc(secs / 256)
1396
- const byte2 = secs % 256;
1397
- const ascii = String.fromCharCode(state, byte1, byte2);
1398
- result += Buffer.from(ascii).toString('base64');
1399
- }
1400
- return result;
1401
- },
1402
- from: (value) => {
1403
- // break the value into 4 char encoded char which will give 3 char when decoded
1404
- const data = {};
1405
- for (let i = 0; i < value.length; i += 4) {
1406
- const b64asc = value.substring(i, i + 4);
1407
- const str = Buffer.from(b64asc, 'base64').toString('utf8');
1408
- const cca0 = str.charCodeAt(0);
1409
- const cca1 = str.charCodeAt(1);
1410
- const cca2 = str.charCodeAt(2);
1411
- let tmp = 0;
1412
- let status = '';
1413
- // first value indicates the endpoint and if it is on or off
1414
- // 0-1 - 1st endpoint, 2-3 - 2nd endpoint, ...
1415
- switch (cca0) {
1416
- case 0:
1417
- data['inching_control_1'] = 'DISABLE';
1418
- data['inching_time_1'] = (cca1 << 8) + cca2;
1419
- break;
1420
- case 1:
1421
- data['inching_control_1'] = 'ENABLE';
1422
- data['inching_time_1'] = (cca1 << 8) + cca2;
1423
- break;
1424
- default:
1425
- // endpoint #
1426
- tmp = Math.trunc(Math.log2(cca0)) + 1;
1427
- status = cca0 % 2 ? 'ENABLE' : 'DISABLE';
1428
- data['inching_control_' + tmp] = status;
1429
- data['inching_time_' + tmp] = (cca1 << 8) + cca2;
1430
- }
1431
- }
1432
- return data;
1433
- },
1434
- },
1435
- };
1436
- const tuyaTz = {
1437
- power_on_behavior_1: {
1438
- key: ['power_on_behavior', 'power_outage_memory'],
1439
- convertSet: async (entity, key, value, meta) => {
1440
- // Deprecated: remove power_outage_memory
1441
- const moesStartUpOnOff = utils.getFromLookup(value, key === 'power_on_behavior' ? { off: 0, on: 1, previous: 2 } : { off: 0, on: 1, restore: 2 });
1442
- await entity.write('genOnOff', { moesStartUpOnOff });
1443
- return { state: { [key]: value } };
1444
- },
1445
- convertGet: async (entity, key, meta) => {
1446
- await entity.read('genOnOff', ['moesStartUpOnOff']);
1447
- },
1448
- },
1449
- power_on_behavior_2: {
1450
- key: ['power_on_behavior'],
1451
- convertSet: async (entity, key, value, meta) => {
1452
- const powerOnBehavior = utils.getFromLookup(value, { off: 0, on: 1, previous: 2 });
1453
- await entity.write('manuSpecificTuya_3', { powerOnBehavior });
1454
- return { state: { [key]: value } };
1455
- },
1456
- convertGet: async (entity, key, meta) => {
1457
- await entity.read('manuSpecificTuya_3', ['powerOnBehavior']);
1458
- },
1459
- },
1460
- switch_type: {
1461
- key: ['switch_type'],
1462
- convertSet: async (entity, key, value, meta) => {
1463
- const switchType = utils.getFromLookup(value, { toggle: 0, state: 1, momentary: 2 });
1464
- await entity.write('manuSpecificTuya_3', { switchType }, { disableDefaultResponse: true });
1465
- return { state: { [key]: value } };
1466
- },
1467
- convertGet: async (entity, key, meta) => {
1468
- await entity.read('manuSpecificTuya_3', ['switchType']);
1469
- },
1470
- },
1471
- backlight_indicator_mode_1: {
1472
- key: ['backlight_mode', 'indicator_mode'],
1473
- convertSet: async (entity, key, value, meta) => {
1474
- const tuyaBacklightMode = utils.getFromLookup(value, key === 'backlight_mode' ? { low: 0, medium: 1, high: 2, off: 0, normal: 1, inverted: 2 } : { off: 0, 'off/on': 1, 'on/off': 2, on: 3 });
1475
- await entity.write('genOnOff', { tuyaBacklightMode });
1476
- return { state: { [key]: value } };
1477
- },
1478
- convertGet: async (entity, key, meta) => {
1479
- await entity.read('genOnOff', ['tuyaBacklightMode']);
1480
- },
1481
- },
1482
- backlight_indicator_mode_2: {
1483
- key: ['backlight_mode'],
1484
- convertSet: async (entity, key, value, meta) => {
1485
- const tuyaBacklightSwitch = utils.getFromLookup(value, { off: 0, on: 1 });
1486
- await entity.write('genOnOff', { tuyaBacklightSwitch });
1487
- return { state: { [key]: value } };
1488
- },
1489
- convertGet: async (entity, key, meta) => {
1490
- await entity.read('genOnOff', ['tuyaBacklightSwitch']);
1491
- },
1492
- },
1493
- child_lock: {
1494
- key: ['child_lock'],
1495
- convertSet: async (entity, key, value, meta) => {
1496
- const v = utils.getFromLookup(value, { lock: true, unlock: false });
1497
- await entity.write('genOnOff', { 0x8000: { value: v, type: 0x10 } });
1498
- },
1499
- },
1500
- min_brightness_attribute: {
1501
- key: ['min_brightness'],
1502
- convertSet: async (entity, key, value, meta) => {
1503
- const number = utils.toNumber(value, `min_brightness`);
1504
- const minValueHex = number.toString(16);
1505
- const maxValueHex = 'ff';
1506
- const minMaxValue = parseInt(`${minValueHex}${maxValueHex}`, 16);
1507
- const payload = { 0xfc00: { value: minMaxValue, type: 0x21 } };
1508
- await entity.write('genLevelCtrl', payload, { disableDefaultResponse: true });
1509
- return { state: { min_brightness: number } };
1510
- },
1511
- convertGet: async (entity, key, meta) => {
1512
- await entity.read('genLevelCtrl', [0xfc00]);
1513
- },
1514
- },
1515
- min_brightness_command: {
1516
- key: ['min_brightness'],
1517
- convertSet: async (entity, key, value, meta) => {
1518
- utils.assertNumber(value, key);
1519
- const payload = { minimum: value };
1520
- await entity.command('lightingColorCtrl', 'tuyaSetMinimumBrightness', payload);
1521
- return { state: { min_brightness: value } };
1522
- },
1523
- // The response contains the value but as the data type, randomly
1524
- // causing malformed messages
1525
- // convertGet: async (entity, key, meta) => {
1526
- // await entity.read('lightingColorCtrl', [0xf102]);
1527
- // },
1528
- },
1529
- color_power_on_behavior: {
1530
- key: ['color_power_on_behavior'],
1531
- convertSet: async (entity, key, value, meta) => {
1532
- const v = utils.getFromLookup(value, { initial: 0, previous: 1, customized: 2 });
1533
- await entity.command('lightingColorCtrl', 'tuyaOnStartUp', { mode: v * 256, data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] });
1534
- return { state: { color_power_on_behavior: value } };
1535
- },
1536
- },
1537
- datapoints: {
1538
- convertSet: async (entity, key, value, meta) => {
1539
- // A set converter is only called once; therefore we need to loop
1540
- const state = {};
1541
- if (Array.isArray(meta.mapped))
1542
- throw new Error(`Not supported for groups`);
1543
- const datapoints = meta.mapped.meta?.tuyaDatapoints;
1544
- if (!datapoints)
1545
- throw new Error('No datapoints map defined');
1546
- for (const [attr, value] of Object.entries(meta.message)) {
1547
- const convertedKey = meta.mapped.meta.multiEndpoint && meta.endpoint_name && !attr.startsWith(`${key}_`) ? `${attr}_${meta.endpoint_name}` : attr;
1548
- const dpEntry = datapoints.find((d) => d[1] === convertedKey);
1549
- if (!dpEntry?.[1] || !dpEntry?.[2].to) {
1550
- throw new Error(`No datapoint defined for '${attr}'`);
1551
- }
1552
- if (dpEntry[3] && dpEntry[3].skip && dpEntry[3].skip(meta))
1553
- continue;
1554
- const dpId = dpEntry[0];
1555
- const convertedValue = await dpEntry[2].to(value, meta);
1556
- const sendCommand = utils.getMetaValue(entity, meta.mapped, 'tuyaSendCommand', undefined, 'dataRequest');
1557
- if (convertedValue === undefined) {
1558
- // conversion done inside converter, ignore.
1559
- }
1560
- else if (typeof convertedValue === 'boolean') {
1561
- await sendDataPointBool(entity, dpId, convertedValue, sendCommand, 1);
1562
- }
1563
- else if (typeof convertedValue === 'number') {
1564
- await sendDataPointValue(entity, dpId, convertedValue, sendCommand, 1);
1565
- }
1566
- else if (typeof convertedValue === 'string') {
1567
- await sendDataPointStringBuffer(entity, dpId, convertedValue, sendCommand, 1);
1568
- }
1569
- else if (Array.isArray(convertedValue)) {
1570
- await sendDataPointRaw(entity, dpId, convertedValue, sendCommand, 1);
1571
- }
1572
- else if (convertedValue instanceof Enum) {
1573
- await sendDataPointEnum(entity, dpId, convertedValue.valueOf(), sendCommand, 1);
1574
- }
1575
- else if (convertedValue instanceof Bitmap) {
1576
- await sendDataPointBitmap(entity, dpId, convertedValue.valueOf(), sendCommand, 1);
1577
- }
1578
- else {
1579
- throw new Error(`Don't know how to send type '${typeof convertedValue}'`);
1580
- }
1581
- if (dpEntry[3] && dpEntry[3].optimistic === false)
1582
- continue;
1583
- state[attr] = value;
1584
- }
1585
- return { state };
1586
- },
1587
- },
1588
- do_not_disturb: {
1589
- key: ['do_not_disturb'],
1590
- convertSet: async (entity, key, value, meta) => {
1591
- await entity.command('lightingColorCtrl', 'tuyaDoNotDisturb', { enable: value ? 1 : 0 });
1592
- return { state: { do_not_disturb: value } };
1593
- },
1594
- },
1595
- on_off_countdown: {
1596
- // Note: This is the Tuya on-off countdown feature documented for switches and smart plugs
1597
- // using the Zigbee 'onWithTimedOff' command in a non-standard way.
1598
- // There is also an alternative on-off countdown implementation mostly for for Tuya Lighting
1599
- // products that uses private commands and attributes. However, those devices should also
1600
- // provide datapoints so there is little reason to provide support.
1601
- key: ['state', 'countdown'],
1602
- convertSet: async (entity, key, value, meta) => {
1603
- const state = meta.message.state !== undefined ? (utils.isString(meta.message.state) ? meta.message.state.toLowerCase() : undefined) : undefined;
1604
- const countdown = meta.message.countdown !== undefined ? meta.message.countdown : undefined;
1605
- const result = {};
1606
- if (countdown !== undefined) {
1607
- // OnTime is a 16bit register and so might very well work up to 0xFFFF seconds but
1608
- // the Tuya documentation says that the maximum is 43200 (so 12 hours).
1609
- // @ts-expect-error ignore
1610
- if (!Number.isInteger(countdown) || countdown < 0 || countdown > 12 * 3600) {
1611
- throw new Error('countdown must be an integer between 1 and 43200 (12 hours) or 0 to cancel');
1612
- }
1613
- }
1614
- // The order of the commands matters because 'on/off/toggle' cancels 'onWithTimedOff'.
1615
- if (state !== undefined) {
1616
- utils.validateValue(state, ['toggle', 'off', 'on']);
1617
- await entity.command('genOnOff', state, {}, utils.getOptions(meta.mapped, entity));
1618
- if (state === 'toggle') {
1619
- const currentState = meta.state[`state${meta.endpoint_name ? `_${meta.endpoint_name}` : ''}`];
1620
- if (currentState) {
1621
- result.state = currentState === 'OFF' ? 'ON' : 'OFF';
1622
- }
1623
- }
1624
- else {
1625
- result.state = state.toUpperCase();
1626
- }
1627
- // A side effect of setting the state is to cancel any running coundown.
1628
- result.countdown = 0;
1629
- }
1630
- if (countdown !== undefined) {
1631
- // offwaittime is probably not used but according to the Tuya documentation, it should
1632
- // be set to the same value than ontime.
1633
- const payload = { ctrlbits: 0, ontime: countdown, offwaittime: countdown };
1634
- await entity.command('genOnOff', 'onWithTimedOff', payload, utils.getOptions(meta.mapped, entity));
1635
- if (result.state !== undefined) {
1636
- result.countdown = countdown;
1637
- }
1638
- }
1639
- return { state: result };
1640
- },
1641
- convertGet: async (entity, key, meta) => {
1642
- if (key == 'state') {
1643
- await entity.read('genOnOff', ['onOff']);
1644
- }
1645
- else if (key == 'countdown') {
1646
- await entity.read('genOnOff', ['onTime']);
1647
- }
1648
- },
1649
- },
1650
- inchingSwitch: {
1651
- key: ['inching_control_set'],
1652
- convertSet: async (entity, key, value, meta) => {
1653
- const inching = exports.valueConverter.inchingSwitch.to(value);
1654
- const payload = { payload: inching };
1655
- const endpoint = meta.device.getEndpoint(1);
1656
- await endpoint.command('manuSpecificTuya_4', 'setInchingSwitch', payload, utils.getOptions(meta.mapped, endpoint));
1657
- return { state: { inching_control_set: value } };
1658
- },
1659
- },
1660
- };
1661
- exports.tz = tuyaTz;
1662
- const tuyaFz = {
1663
- brightness: {
1664
- cluster: 'genLevelCtrl',
1665
- type: ['attributeReport', 'readResponse'],
1666
- convert: (model, msg, publish, options, meta) => {
1667
- if (msg.data['61440'] !== undefined) {
1668
- const property = utils.postfixWithEndpointName('brightness', msg, model, meta);
1669
- return { [property]: utils.mapNumberRange(msg.data['61440'], 0, 1000, 0, 255) };
1670
- }
1671
- },
1672
- },
1673
- gateway_connection_status: {
1674
- cluster: 'manuSpecificTuya',
1675
- type: ['commandMcuGatewayConnectionStatus'],
1676
- convert: async (model, msg, publish, options, meta) => {
1677
- // "payload" can have the following values:
1678
- // 0x00: The gateway is not connected to the internet.
1679
- // 0x01: The gateway is connected to the internet.
1680
- // 0x02: The request timed out after three seconds.
1681
- const payload = { payloadSize: 1, payload: 1 };
1682
- await msg.endpoint.command('manuSpecificTuya', 'mcuGatewayConnectionStatus', payload, {});
1683
- },
1684
- },
1685
- power_on_behavior_1: {
1686
- cluster: 'genOnOff',
1687
- type: ['attributeReport', 'readResponse'],
1688
- convert: (model, msg, publish, options, meta) => {
1689
- if (msg.data.moesStartUpOnOff !== undefined) {
1690
- const lookup = { 0: 'off', 1: 'on', 2: 'previous' };
1691
- const property = utils.postfixWithEndpointName('power_on_behavior', msg, model, meta);
1692
- return { [property]: lookup[msg.data['moesStartUpOnOff']] };
1693
- }
1694
- },
1695
- },
1696
- power_on_behavior_2: {
1697
- cluster: 'manuSpecificTuya_3',
1698
- type: ['attributeReport', 'readResponse'],
1699
- convert: (model, msg, publish, options, meta) => {
1700
- const attribute = 'powerOnBehavior';
1701
- const lookup = { 0: 'off', 1: 'on', 2: 'previous' };
1702
- if (msg.data[attribute] !== undefined) {
1703
- const property = utils.postfixWithEndpointName('power_on_behavior', msg, model, meta);
1704
- return { [property]: lookup[msg.data[attribute]] };
1705
- }
1706
- },
1707
- },
1708
- power_outage_memory: {
1709
- cluster: 'genOnOff',
1710
- type: ['attributeReport', 'readResponse'],
1711
- convert: (model, msg, publish, options, meta) => {
1712
- if (msg.data.moesStartUpOnOff !== undefined) {
1713
- const lookup = { 0x00: 'off', 0x01: 'on', 0x02: 'restore' };
1714
- const property = utils.postfixWithEndpointName('power_outage_memory', msg, model, meta);
1715
- return { [property]: lookup[msg.data['moesStartUpOnOff']] };
1716
- }
1717
- },
1718
- },
1719
- switch_type: {
1720
- cluster: 'manuSpecificTuya_3',
1721
- type: ['attributeReport', 'readResponse'],
1722
- convert: (model, msg, publish, options, meta) => {
1723
- if (msg.data.switchType !== undefined) {
1724
- const lookup = { 0: 'toggle', 1: 'state', 2: 'momentary' };
1725
- return { switch_type: lookup[msg.data['switchType']] };
1726
- }
1727
- },
1728
- },
1729
- backlight_mode_low_medium_high: {
1730
- cluster: 'genOnOff',
1731
- type: ['attributeReport', 'readResponse'],
1732
- convert: (model, msg, publish, options, meta) => {
1733
- if (msg.data.tuyaBacklightMode !== undefined) {
1734
- const value = msg.data['tuyaBacklightMode'];
1735
- const backlightLookup = { 0: 'low', 1: 'medium', 2: 'high' };
1736
- return { backlight_mode: backlightLookup[value] };
1737
- }
1738
- },
1739
- },
1740
- backlight_mode_off_normal_inverted: {
1741
- cluster: 'genOnOff',
1742
- type: ['attributeReport', 'readResponse'],
1743
- convert: (model, msg, publish, options, meta) => {
1744
- if (msg.data.tuyaBacklightMode !== undefined) {
1745
- return { backlight_mode: utils.getFromLookup(msg.data['tuyaBacklightMode'], { 0: 'off', 1: 'normal', 2: 'inverted' }) };
1746
- }
1747
- },
1748
- },
1749
- backlight_mode_off_on: {
1750
- cluster: 'genOnOff',
1751
- type: ['attributeReport', 'readResponse'],
1752
- convert: (model, msg, publish, options, meta) => {
1753
- if (msg.data.tuyaBacklightSwitch !== undefined) {
1754
- return { backlight_mode: utils.getFromLookup(msg.data['tuyaBacklightSwitch'], { 0: 'OFF', 1: 'ON' }) };
1755
- }
1756
- },
1757
- },
1758
- indicator_mode: {
1759
- cluster: 'genOnOff',
1760
- type: ['attributeReport', 'readResponse'],
1761
- convert: (model, msg, publish, options, meta) => {
1762
- if (msg.data.tuyaBacklightMode !== undefined) {
1763
- return { indicator_mode: utils.getFromLookup(msg.data['tuyaBacklightMode'], { 0: 'off', 1: 'off/on', 2: 'on/off', 3: 'on' }) };
1764
- }
1765
- },
1766
- },
1767
- child_lock: {
1768
- cluster: 'genOnOff',
1769
- type: ['attributeReport', 'readResponse'],
1770
- convert: (model, msg, publish, options, meta) => {
1771
- if (msg.data['32768'] !== undefined) {
1772
- const value = msg.data['32768'];
1773
- return { child_lock: value ? 'LOCK' : 'UNLOCK' };
1774
- }
1775
- },
1776
- },
1777
- min_brightness_attribute: {
1778
- cluster: 'genLevelCtrl',
1779
- type: ['attributeReport', 'readResponse'],
1780
- convert: (model, msg, publish, options, meta) => {
1781
- if (msg.data[0xfc00] !== undefined) {
1782
- const property = utils.postfixWithEndpointName('min_brightness', msg, model, meta);
1783
- const value = parseInt(msg.data[0xfc00].toString(16).slice(0, 2), 16);
1784
- return { [property]: value };
1785
- }
1786
- },
1787
- },
1788
- datapoints: {
1789
- cluster: 'manuSpecificTuya',
1790
- type: ['commandDataResponse', 'commandDataReport', 'commandActiveStatusReport', 'commandActiveStatusReportAlt'],
1791
- convert: (model, msg, publish, options, meta) => {
1792
- const result = {};
1793
- if (!model.meta || !model.meta.tuyaDatapoints)
1794
- throw new Error('No datapoints map defined');
1795
- const datapoints = model.meta.tuyaDatapoints;
1796
- for (const dpValue of msg.data.dpValues) {
1797
- const dpId = dpValue.dp;
1798
- const dpEntry = datapoints.find((d) => d[0] === dpId);
1799
- const value = getDataValue(dpValue);
1800
- if (dpEntry?.[2]?.from) {
1801
- if (dpEntry[1]) {
1802
- result[dpEntry[1]] = dpEntry[2].from(value, meta, options, publish, msg);
1803
- }
1804
- else {
1805
- Object.assign(result, dpEntry[2].from(value, meta, options, publish, msg));
1806
- }
1807
- }
1808
- else {
1809
- logger_1.logger.debug(`Datapoint ${dpId} not defined for '${meta.device.manufacturerName}' with value ${value}`, NS);
1810
- }
1811
- }
1812
- return result;
1813
- },
1814
- },
1815
- on_off_action: {
1816
- cluster: 'genOnOff',
1817
- type: 'commandTuyaAction',
1818
- convert: (model, msg, publish, options, meta) => {
1819
- if (utils.hasAlreadyProcessedMessage(msg, model, msg.data[0]))
1820
- return;
1821
- const clickMapping = { 0: 'single', 1: 'double', 2: 'hold' };
1822
- const buttonMapping = { 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8' };
1823
- // TS004F has single endpoint, TS0041A/TS0041 can have multiple but have just one button
1824
- const button = msg.device.endpoints.length == 1 || ['TS0041A', 'TS0041'].includes(msg.device.modelID) ? '' : `${buttonMapping[msg.endpoint.ID]}_`;
1825
- return { action: `${button}${clickMapping[msg.data.value]}` };
1826
- },
1827
- },
1828
- on_off_countdown: {
1829
- // While a countdown is in progress, the device will report onTime at all multiples of 60.
1830
- // More reportings can be configured for 'onTime` but they will happen independently of
1831
- // the builtin 60s reporting.
1832
- cluster: 'genOnOff',
1833
- type: ['attributeReport', 'readResponse'],
1834
- convert: (model, msg, publish, options, meta) => {
1835
- if (msg.data.onTime !== undefined) {
1836
- const payload = {};
1837
- const property = utils.postfixWithEndpointName('countdown', msg, model, meta);
1838
- const countdown = msg.data['onTime'];
1839
- payload[property] = countdown;
1840
- return payload;
1841
- }
1842
- },
1843
- },
1844
- inchingSwitch: {
1845
- cluster: 'manuSpecificTuya_4',
1846
- type: ['attributeReport', 'readResponse'],
1847
- convert: (model, msg, publish, options, meta) => {
1848
- if (msg.data.inching !== undefined) {
1849
- const payload = {};
1850
- const value = exports.valueConverter.inchingSwitch.from(msg.data['inching']);
1851
- payload['inching_control_set'] = value;
1852
- return payload;
1853
- }
1854
- },
1855
- },
1856
- };
1857
- exports.fz = tuyaFz;
1858
- function getHandlersForDP(name, dp, type, converter, readOnly, skip, endpoint, useGlobalSequence) {
1859
- const keyName = endpoint ? `${name}_${endpoint}` : name;
1860
- const fromZigbee = [
1861
- {
1862
- cluster: 'manuSpecificTuya',
1863
- type: ['commandDataResponse', 'commandDataReport', 'commandActiveStatusReport', 'commandActiveStatusReportAlt'],
1864
- convert: (model, msg, publish, options, meta) => {
1865
- const dpValue = msg.data.dpValues.find((d) => d.dp === dp);
1866
- if (dpValue) {
1867
- return { [keyName]: converter.from(getDataValue(dpValue)) };
1868
- }
1869
- },
1870
- },
1871
- ];
1872
- const toZigbee = readOnly
1873
- ? undefined
1874
- : [
1875
- {
1876
- key: [name],
1877
- endpoints: endpoint ? [endpoint] : undefined,
1878
- convertSet: async (entity, key, value, meta) => {
1879
- // A set converter is only called once; therefore we need to loop
1880
- const state = {};
1881
- if (Array.isArray(meta.mapped))
1882
- throw new Error(`Not supported for groups`);
1883
- for (const [attr, value] of Object.entries(meta.message)) {
1884
- const convertedKey = meta.mapped.meta && meta.mapped.meta.multiEndpoint && meta.endpoint_name && !attr.startsWith(`${key}_`)
1885
- ? `${attr}_${meta.endpoint_name}`
1886
- : attr;
1887
- // logger.debug(`key: ${key}, convertedKey: ${convertedKey}, keyName: ${keyName}`);
1888
- if (convertedKey !== keyName)
1889
- continue;
1890
- if (skip && skip(meta))
1891
- continue;
1892
- const convertedValue = await converter.to(value, meta);
1893
- const sendCommand = utils.getMetaValue(entity, meta.mapped, 'tuyaSendCommand', undefined, 'dataRequest');
1894
- const seq = useGlobalSequence ? undefined : 1;
1895
- // logger.debug(`dp: ${dp}, value: ${value}, convertedValue: ${convertedValue}`);
1896
- if (convertedValue === undefined) {
1897
- // conversion done inside converter, ignore.
1898
- }
1899
- else if (type == exports.dataTypes.bool) {
1900
- await sendDataPointBool(entity, dp, convertedValue, sendCommand, seq);
1901
- }
1902
- else if (type == exports.dataTypes.number) {
1903
- await sendDataPointValue(entity, dp, convertedValue, sendCommand, seq);
1904
- }
1905
- else if (type == exports.dataTypes.string) {
1906
- await sendDataPointStringBuffer(entity, dp, convertedValue, sendCommand, seq);
1907
- }
1908
- else if (type == exports.dataTypes.raw) {
1909
- await sendDataPointRaw(entity, dp, convertedValue, sendCommand, seq);
1910
- }
1911
- else if (type == exports.dataTypes.enum) {
1912
- await sendDataPointEnum(entity, dp, convertedValue, sendCommand, seq);
1913
- }
1914
- else if (type == exports.dataTypes.bitmap) {
1915
- await sendDataPointBitmap(entity, dp, convertedValue, sendCommand, seq);
1916
- }
1917
- else {
1918
- throw new Error(`Don't know how to send type '${typeof convertedValue}'`);
1919
- }
1920
- state[key] = value;
1921
- }
1922
- return { state };
1923
- },
1924
- },
1925
- ];
1926
- return [fromZigbee, toZigbee];
1927
- }
1928
- const tuyaModernExtend = {
1929
- tuyaBase(args) {
1930
- const result = {
1931
- configure: [exports.configureMagicPacket],
1932
- onEvent: onEvent(args.onEvent),
1933
- isModernExtend: true,
1934
- };
1935
- if (args?.dp) {
1936
- result.fromZigbee = [tuyaFz.datapoints];
1937
- result.toZigbee = [tuyaTz.datapoints];
1938
- }
1939
- return result;
1940
- },
1941
- dpEnumLookup(args) {
1942
- const { name, dp, type, lookup, description, readOnly, endpoint, expose, skip } = args;
1943
- let exp;
1944
- if (expose) {
1945
- exp = expose;
1946
- }
1947
- else {
1948
- exp = new exposes.Enum(name, readOnly ? ea.STATE : ea.STATE_SET, Object.keys(lookup)).withDescription(description);
1949
- }
1950
- if (endpoint)
1951
- exp = exp.withEndpoint(endpoint);
1952
- const handlers = getHandlersForDP(name, dp, type, {
1953
- from: (value) => utils.getFromLookupByValue(value, lookup),
1954
- to: (value) => utils.getFromLookup(value, lookup),
1955
- }, readOnly, skip, endpoint);
1956
- return { exposes: [exp], fromZigbee: handlers[0], toZigbee: handlers[1], isModernExtend: true };
1957
- },
1958
- dpBinary(args) {
1959
- const { name, dp, type, valueOn, valueOff, description, readOnly, endpoint, expose, skip } = args;
1960
- let exp;
1961
- if (expose) {
1962
- exp = expose;
1963
- }
1964
- else {
1965
- exp = e.binary(name, readOnly ? ea.STATE : ea.STATE_SET, valueOn[0], valueOff[0]).withDescription(description);
1966
- }
1967
- if (endpoint)
1968
- exp = exp.withEndpoint(endpoint);
1969
- const handlers = getHandlersForDP(name, dp, type, {
1970
- from: (value) => (value === valueOn[1] ? valueOn[0] : valueOff[0]),
1971
- to: (value) => (value === valueOn[0] ? valueOn[1] : valueOff[1]),
1972
- }, readOnly, skip, endpoint);
1973
- return { exposes: [exp], fromZigbee: handlers[0], toZigbee: handlers[1], isModernExtend: true };
1974
- },
1975
- dpNumeric(args) {
1976
- const { name, dp, type, description, readOnly, endpoint, unit, valueMax, valueMin, valueStep, scale, expose, skip } = args;
1977
- let exp;
1978
- if (expose) {
1979
- exp = expose;
1980
- }
1981
- else {
1982
- exp = e.numeric(name, readOnly ? ea.STATE : ea.STATE_SET).withDescription(description);
1983
- }
1984
- if (endpoint)
1985
- exp = exp.withEndpoint(endpoint);
1986
- if (unit)
1987
- exp = exp.withUnit(unit);
1988
- if (valueMin !== undefined)
1989
- exp = exp.withValueMin(valueMin);
1990
- if (valueMax !== undefined)
1991
- exp = exp.withValueMax(valueMax);
1992
- if (valueStep !== undefined)
1993
- exp = exp.withValueStep(valueStep);
1994
- let converter;
1995
- if (scale === undefined) {
1996
- converter = exports.valueConverterBasic.raw();
1997
- }
1998
- else {
1999
- if (Array.isArray(scale)) {
2000
- converter = exports.valueConverterBasic.scale(scale[0], scale[1], scale[2], scale[3]);
2001
- }
2002
- else {
2003
- converter = exports.valueConverterBasic.divideBy(scale);
2004
- }
2005
- }
2006
- const handlers = getHandlersForDP(name, dp, type, converter, readOnly, skip, endpoint);
2007
- return { exposes: [exp], fromZigbee: handlers[0], toZigbee: handlers[1], isModernExtend: true };
2008
- },
2009
- dpLight(args) {
2010
- const { state, brightness, min, max, colorTemp, endpoint } = args;
2011
- let exp = e.light_brightness().setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET);
2012
- let fromZigbee = [];
2013
- let toZigbee = [];
2014
- let ext;
2015
- if (min) {
2016
- exp = exp.withMinBrightness().setAccess('min_brightness', ea.STATE_SET);
2017
- }
2018
- if (max) {
2019
- exp = exp.withMaxBrightness().setAccess('max_brightness', ea.STATE_SET);
2020
- }
2021
- if (colorTemp) {
2022
- exp = exp.withColorTemp(colorTemp.range).setAccess('color_temp', ea.STATE_SET);
2023
- }
2024
- // if (color) {
2025
- // exp = exp.withColor(['hs']).setAccess('color_hs', ea.STATE_SET);
2026
- // }
2027
- if (endpoint)
2028
- exp = exp.withEndpoint(endpoint);
2029
- ext = tuyaModernExtend.dpBinary({
2030
- name: 'state',
2031
- dp: state.dp,
2032
- type: state.type,
2033
- valueOn: state.valueOn,
2034
- valueOff: state.valueOff,
2035
- skip: state.skip,
2036
- endpoint: endpoint,
2037
- });
2038
- fromZigbee = [...fromZigbee, ...ext.fromZigbee];
2039
- toZigbee = [...toZigbee, ...ext.toZigbee];
2040
- ext = tuyaModernExtend.dpNumeric({ name: 'brightness', dp: brightness.dp, type: brightness.type, scale: brightness.scale, endpoint: endpoint });
2041
- fromZigbee = [...fromZigbee, ...ext.fromZigbee];
2042
- toZigbee = [...toZigbee, ...ext.toZigbee];
2043
- if (min) {
2044
- ext = tuyaModernExtend.dpNumeric({ name: 'min_brightness', dp: min.dp, type: min.type, scale: min.scale, endpoint: endpoint });
2045
- fromZigbee = [...fromZigbee, ...ext.fromZigbee];
2046
- toZigbee = [...toZigbee, ...ext.toZigbee];
2047
- }
2048
- if (max) {
2049
- ext = tuyaModernExtend.dpNumeric({ name: 'max_brightness', dp: max.dp, type: max.type, scale: max.scale, endpoint: endpoint });
2050
- fromZigbee = [...fromZigbee, ...ext.fromZigbee];
2051
- toZigbee = [...toZigbee, ...ext.toZigbee];
2052
- }
2053
- if (colorTemp) {
2054
- ext = tuyaModernExtend.dpNumeric({
2055
- name: 'color_temp',
2056
- dp: colorTemp.dp,
2057
- type: colorTemp.type,
2058
- scale: colorTemp.scale,
2059
- endpoint: endpoint,
2060
- });
2061
- fromZigbee = [...fromZigbee, ...ext.fromZigbee];
2062
- toZigbee = [...toZigbee, ...ext.toZigbee];
2063
- }
2064
- // if (color) {
2065
- // const handlers = getHandlersForDP('color', color.dp, color.type,
2066
- // valueConverterBasic.color1000(), undefined, undefined, endpoint);
2067
- // fromZigbee = [...fromZigbee, ...handlers[0]];
2068
- // toZigbee = [...toZigbee, ...handlers[1]];
2069
- // }
2070
- // combine extends for one expose
2071
- return { exposes: [exp], fromZigbee, toZigbee, isModernExtend: true };
2072
- },
2073
- dpTemperature(args) {
2074
- return tuyaModernExtend.dpNumeric({ name: 'temperature', type: exports.dataTypes.number, readOnly: true, scale: 10, expose: e.temperature(), ...args });
2075
- },
2076
- dpHumidity(args) {
2077
- return tuyaModernExtend.dpNumeric({ name: 'humidity', type: exports.dataTypes.number, readOnly: true, expose: e.humidity(), ...args });
2078
- },
2079
- dpBattery(args) {
2080
- return tuyaModernExtend.dpNumeric({ name: 'battery', type: exports.dataTypes.number, readOnly: true, expose: e.battery(), ...args });
2081
- },
2082
- dpBatteryState(args) {
2083
- return tuyaModernExtend.dpEnumLookup({
2084
- name: 'battery_state',
2085
- type: exports.dataTypes.number,
2086
- lookup: { low: 0, medium: 1, high: 2 },
2087
- readOnly: true,
2088
- expose: tuyaExposes.batteryState(),
2089
- ...args,
2090
- });
2091
- },
2092
- dpTemperatureUnit(args) {
2093
- return tuyaModernExtend.dpEnumLookup({
2094
- name: 'temperature_unit',
2095
- type: exports.dataTypes.enum,
2096
- lookup: { celsius: 0, fahrenheit: 1 },
2097
- readOnly: true,
2098
- expose: tuyaExposes.temperatureUnit(),
2099
- ...args,
2100
- });
2101
- },
2102
- dpContact(args, invert) {
2103
- return tuyaModernExtend.dpBinary({
2104
- name: 'contact',
2105
- type: exports.dataTypes.bool,
2106
- valueOn: invert ? [true, true] : [true, false],
2107
- valueOff: invert ? [false, false] : [false, true],
2108
- readOnly: true,
2109
- expose: e.contact(),
2110
- ...args,
2111
- });
2112
- },
2113
- dpAction(args) {
2114
- const { lookup } = args;
2115
- return tuyaModernExtend.dpEnumLookup({
2116
- name: 'action',
2117
- type: exports.dataTypes.number,
2118
- readOnly: true,
2119
- expose: e.action(Object.keys(lookup)),
2120
- ...args,
2121
- });
2122
- },
2123
- dpIlluminance(args) {
2124
- return tuyaModernExtend.dpNumeric({ name: 'illuminance', type: exports.dataTypes.number, readOnly: true, expose: e.illuminance(), ...args });
2125
- },
2126
- dpGas(args, invert) {
2127
- return tuyaModernExtend.dpBinary({
2128
- name: 'gas',
2129
- type: exports.dataTypes.enum,
2130
- valueOn: invert ? [true, 1] : [true, 0],
2131
- valueOff: invert ? [false, 0] : [false, 1],
2132
- readOnly: true,
2133
- expose: e.gas(),
2134
- ...args,
2135
- });
2136
- },
2137
- dpOnOff(args) {
2138
- const { readOnly } = args;
2139
- return tuyaModernExtend.dpBinary({
2140
- name: 'state',
2141
- type: exports.dataTypes.bool,
2142
- valueOn: ['ON', true],
2143
- valueOff: ['OFF', false],
2144
- expose: e.switch().setAccess('state', readOnly ? ea.STATE : ea.STATE_SET),
2145
- ...args,
2146
- });
2147
- },
2148
- dpPowerOnBehavior(args) {
2149
- const { readOnly } = args;
2150
- let { lookup } = args;
2151
- lookup = lookup || { off: 0, on: 1, previous: 2 };
2152
- return tuyaModernExtend.dpEnumLookup({
2153
- name: 'power_on_behavior',
2154
- lookup: lookup,
2155
- type: exports.dataTypes.enum,
2156
- expose: e.power_on_behavior(Object.keys(lookup)).withAccess(readOnly ? ea.STATE : ea.STATE_SET),
2157
- ...args,
2158
- });
2159
- },
2160
- tuyaLight(args) {
2161
- args = { minBrightness: 'none', powerOnBehavior: false, switchType: false, ...args };
2162
- if (args.colorTemp) {
2163
- args.colorTemp = { startup: false, ...args.colorTemp };
2164
- }
2165
- if (args.color) {
2166
- args.color = { applyRedFix: true, enhancedHue: false, ...(utils.isBoolean(args.color) ? {} : args.color) };
2167
- }
2168
- const result = modernExtend.light({ ...args, powerOnBehavior: false });
2169
- result.fromZigbee.push(tuyaFz.brightness);
2170
- result.toZigbee.push(tuyaTz.do_not_disturb);
2171
- result.exposes.push(tuyaExposes.doNotDisturb());
2172
- if (args.powerOnBehavior) {
2173
- result.fromZigbee.push(tuyaFz.power_on_behavior_2);
2174
- result.toZigbee.push(tuyaTz.power_on_behavior_2);
2175
- if (args.endpointNames) {
2176
- result.exposes.push(...args.endpointNames.map((ee) => e.power_on_behavior().withEndpoint(ee)));
2177
- }
2178
- else {
2179
- result.exposes.push(e.power_on_behavior());
2180
- }
2181
- }
2182
- if (args.switchType) {
2183
- result.fromZigbee.push(tuyaFz.switch_type);
2184
- result.toZigbee.push(tuyaTz.switch_type);
2185
- result.exposes.push(tuyaExposes.switchType());
2186
- }
2187
- if (args.minBrightness === 'attribute') {
2188
- result.fromZigbee.push(tuyaFz.min_brightness_attribute);
2189
- result.toZigbee.push(tuyaTz.min_brightness_attribute);
2190
- result.exposes = result.exposes.map((e) => (typeof e !== 'function' && utils.isLightExpose(e) ? e.withMinBrightness() : e));
2191
- }
2192
- else if (args.minBrightness === 'command') {
2193
- result.toZigbee.push(tuyaTz.min_brightness_command);
2194
- result.exposes = result.exposes.map((e) => typeof e !== 'function' && utils.isLightExpose(e) ? e.withMinBrightness().setAccess('min_brightness', ea.STATE_SET) : e);
2195
- }
2196
- if (args.color) {
2197
- result.toZigbee.push(tuyaTz.color_power_on_behavior);
2198
- result.exposes.push(tuyaExposes.colorPowerOnBehavior());
2199
- }
2200
- result.configure = [(0, utils_1.configureSetPowerSourceWhenUnknown)('Mains (single phase)')];
2201
- return result;
2202
- },
2203
- tuyaOnOff: (args = {}) => {
2204
- const exposes = args.endpoints
2205
- ? args.endpoints.map((ee) => e.switch().withEndpoint(ee))
2206
- : [e.switch()];
2207
- const fromZigbee = [fromZigbee_1.default.on_off, fromZigbee_1.default.ignore_basic_report];
2208
- const toZigbee = [];
2209
- if (args.onOffCountdown) {
2210
- fromZigbee.push(tuyaFz.on_off_countdown);
2211
- toZigbee.push(tuyaTz.on_off_countdown);
2212
- if (args.endpoints) {
2213
- exposes.push(...args.endpoints.map((ee) => tuyaExposes.countdown().withAccess(ea.ALL).withEndpoint(ee)));
2214
- }
2215
- else {
2216
- exposes.push(tuyaExposes.countdown().withAccess(ea.ALL));
2217
- }
2218
- }
2219
- else {
2220
- toZigbee.push(toZigbee_1.default.on_off);
2221
- }
2222
- if (args.powerOutageMemory) {
2223
- // Legacy, powerOnBehavior is preferred
2224
- fromZigbee.push(tuyaFz.power_outage_memory);
2225
- toZigbee.push(tuyaTz.power_on_behavior_1);
2226
- exposes.push(tuyaExposes.powerOutageMemory());
2227
- }
2228
- else if (args.powerOnBehavior2) {
2229
- fromZigbee.push(tuyaFz.power_on_behavior_2);
2230
- toZigbee.push(tuyaTz.power_on_behavior_2);
2231
- if (args.endpoints) {
2232
- exposes.push(...args.endpoints.map((ee) => e.power_on_behavior().withEndpoint(ee)));
2233
- }
2234
- else {
2235
- exposes.push(e.power_on_behavior());
2236
- }
2237
- }
2238
- else {
2239
- fromZigbee.push(tuyaFz.power_on_behavior_1);
2240
- toZigbee.push(tuyaTz.power_on_behavior_1);
2241
- exposes.push(e.power_on_behavior());
2242
- }
2243
- if (args.switchType) {
2244
- fromZigbee.push(tuyaFz.switch_type);
2245
- toZigbee.push(tuyaTz.switch_type);
2246
- exposes.push(tuyaExposes.switchType());
2247
- }
2248
- if (args.backlightModeOffOn) {
2249
- fromZigbee.push(tuyaFz.backlight_mode_off_on);
2250
- exposes.push(tuyaExposes.backlightModeOffOn());
2251
- toZigbee.push(tuyaTz.backlight_indicator_mode_2);
2252
- }
2253
- if (args.backlightModeLowMediumHigh) {
2254
- fromZigbee.push(tuyaFz.backlight_mode_low_medium_high);
2255
- exposes.push(tuyaExposes.backlightModeLowMediumHigh());
2256
- toZigbee.push(tuyaTz.backlight_indicator_mode_1);
2257
- }
2258
- if (args.backlightModeOffNormalInverted) {
2259
- fromZigbee.push(tuyaFz.backlight_mode_off_normal_inverted);
2260
- exposes.push(tuyaExposes.backlightModeOffNormalInverted());
2261
- toZigbee.push(tuyaTz.backlight_indicator_mode_1);
2262
- }
2263
- if (args.indicatorMode) {
2264
- fromZigbee.push(tuyaFz.indicator_mode);
2265
- exposes.push(tuyaExposes.indicatorMode());
2266
- toZigbee.push(tuyaTz.backlight_indicator_mode_1);
2267
- }
2268
- if (args.electricalMeasurements) {
2269
- fromZigbee.push(args.electricalMeasurementsFzConverter || fromZigbee_1.default.electrical_measurement, fromZigbee_1.default.metering);
2270
- exposes.push(e.power(), e.current(), e.voltage(), e.energy());
2271
- }
2272
- if (args.childLock) {
2273
- fromZigbee.push(tuyaFz.child_lock);
2274
- toZigbee.push(tuyaTz.child_lock);
2275
- exposes.push(e.child_lock());
2276
- }
2277
- if (args.switchMode) {
2278
- if (args.endpoints) {
2279
- args.endpoints.forEach(function (ep) {
2280
- const epExtend = tuyaModernExtend.tuyaSwitchMode({
2281
- description: `Switch mode ${ep}`,
2282
- endpointName: ep,
2283
- });
2284
- fromZigbee.push(...epExtend.fromZigbee);
2285
- toZigbee.push(...epExtend.toZigbee);
2286
- exposes.push(...epExtend.exposes);
2287
- });
2288
- }
2289
- else {
2290
- const extend = tuyaModernExtend.tuyaSwitchMode({ description: 'Switch mode' });
2291
- fromZigbee.push(...extend.fromZigbee);
2292
- toZigbee.push(...extend.toZigbee);
2293
- exposes.push(...extend.exposes);
2294
- }
2295
- }
2296
- if (args.inchingSwitch) {
2297
- let quantity = 1;
2298
- if (args.endpoints) {
2299
- quantity = args.endpoints.length;
2300
- }
2301
- fromZigbee.push(tuyaFz.inchingSwitch);
2302
- exposes.push(tuyaExposes.inchingSwitch(quantity));
2303
- toZigbee.push(tuyaTz.inchingSwitch);
2304
- }
2305
- const configure = [(0, utils_1.configureSetPowerSourceWhenUnknown)('Mains (single phase)')];
2306
- return { exposes, fromZigbee, toZigbee, isModernExtend: true, configure };
2307
- },
2308
- dpBacklightMode(args) {
2309
- const { readOnly } = args;
2310
- let { lookup } = args;
2311
- lookup = lookup || { off: 0, normal: 1, inverted: 2 };
2312
- return tuyaModernExtend.dpEnumLookup({
2313
- name: 'backlight_mode',
2314
- lookup: lookup,
2315
- type: exports.dataTypes.enum,
2316
- expose: tuyaExposes.backlightModeOffNormalInverted().withAccess(readOnly ? ea.STATE : ea.STATE_SET),
2317
- ...args,
2318
- });
2319
- },
2320
- combineActions(actions) {
2321
- let newValues = [];
2322
- let newFromZigbee = [];
2323
- let description;
2324
- // collect action values and handlers
2325
- for (const actionME of actions) {
2326
- const { exposes, fromZigbee } = actionME;
2327
- newValues = newValues.concat(exposes[0].values);
2328
- description = exposes[0].description;
2329
- newFromZigbee = newFromZigbee.concat(fromZigbee);
2330
- }
2331
- // create single enum-expose
2332
- const exp = new exposes.Enum('action', ea.STATE, newValues).withDescription(description);
2333
- return { exposes: [exp], fromZigbee: newFromZigbee, isModernExtend: true };
2334
- },
2335
- tuyaSwitchMode: (args) => modernExtend.enumLookup({
2336
- name: 'switch_mode',
2337
- lookup: { switch: 0, scene: 1 },
2338
- cluster: 'manuSpecificTuya_3',
2339
- attribute: 'switchMode',
2340
- description: 'Work mode for switch',
2341
- entityCategory: 'config',
2342
- ...args,
2343
- }),
2344
- tuyaLedIndicator() {
2345
- const fromZigbee = [tuyaFz.backlight_mode_off_normal_inverted];
2346
- const exp = tuyaExposes.backlightModeOffNormalInverted();
2347
- const toZigbee = [tuyaTz.backlight_indicator_mode_1];
2348
- return { exposes: [exp], toZigbee, fromZigbee, isModernExtend: true };
2349
- },
2350
- tuyaMagicPacket() {
2351
- return { configure: [exports.configureMagicPacket], isModernExtend: true };
2352
- },
2353
- tuyaOnOffAction(args) {
2354
- return modernExtend.actionEnumLookup({
2355
- actionLookup: { 0: 'single', 1: 'double', 2: 'hold' },
2356
- cluster: 'genOnOff',
2357
- commands: ['commandTuyaAction'],
2358
- attribute: 'value',
2359
- });
2360
- },
2361
- tuyaOnOffActionLegacy(args) {
2362
- // For new devices use tuyaOnOffAction instead
2363
- const actions = args.actions.map((a) => (args.endpointNames ? args.endpointNames.map((e) => `${e}_${a}`) : [a])).flat();
2364
- const exposes = [e.action(actions)];
2365
- const fromZigbee = [tuyaFz.on_off_action];
2366
- return { exposes, fromZigbee, isModernExtend: true };
2367
- },
2368
- dpChildLock(args) {
2369
- return tuyaModernExtend.dpBinary({
2370
- name: 'child_lock',
2371
- type: exports.dataTypes.bool,
2372
- valueOn: ['LOCK', true],
2373
- valueOff: ['UNLOCK', false],
2374
- expose: e.child_lock(),
2375
- ...args,
2376
- });
2377
- },
2378
- };
2379
- exports.modernExtend = tuyaModernExtend;
2380
- const tuyaClusters = {
2381
- addTuyaCommonPrivateCluster: () => modernExtend.deviceAddCustomCluster('manuSpecificTuya_4', {
2382
- ID: 0xe000,
2383
- attributes: {
2384
- random_timing: { ID: 0xd001, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
2385
- cycle_timing: { ID: 0xd002, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
2386
- inching: { ID: 0xd003, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR },
2387
- },
2388
- commands: {
2389
- setRandomTiming: {
2390
- ID: 0xf7,
2391
- parameters: [{ name: 'payload', type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
2392
- },
2393
- setCycleTiming: {
2394
- ID: 0xf8,
2395
- parameters: [{ name: 'payload', type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
2396
- },
2397
- setInchingSwitch: {
2398
- ID: 0xfb,
2399
- parameters: [{ name: 'payload', type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
2400
- },
2401
- },
2402
- commandsResponse: {},
2403
- }),
2404
- };
2405
- exports.clusters = tuyaClusters;
2406
- exports.exposes = tuyaExposes;
2407
- exports.modernExtend = tuyaModernExtend;
2408
- exports.tz = tuyaTz;
2409
- exports.fz = tuyaFz;
2410
- exports.clusters = tuyaClusters;
2411
- exports.enum = (value) => new Enum(value);
2412
- exports.bitmap = (value) => new Bitmap(value);
2413
- exports.valueConverter = exports.valueConverter;
2414
- exports.valueConverterBasic = exports.valueConverterBasic;
2415
- exports.sendDataPointBool = sendDataPointBool;
2416
- exports.sendDataPointEnum = sendDataPointEnum;
2417
- exports.onEventSetTime = onEventSetTime;
2418
- exports.onEventSetLocalTime = onEventSetLocalTime;
2419
- exports.onEventMeasurementPoll = onEventMeasurementPoll;
2420
- exports.skip = exports.skip;
2421
- exports.configureMagicPacket = exports.configureMagicPacket;
2422
- exports.fingerprint = exports.fingerprint;
2423
- exports.whitelabel = exports.whitelabel;
2424
- exports.dataTypes = exports.dataTypes;
2425
- //# sourceMappingURL=tuya.js.map