zigbee-herdsman-converters 21.9.0 → 21.9.1

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 (1394) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/converters/fromZigbee.d.ts +2036 -0
  3. package/converters/fromZigbee.d.ts.map +1 -0
  4. package/converters/fromZigbee.js +5343 -0
  5. package/converters/fromZigbee.js.map +1 -0
  6. package/converters/toZigbee.d.ts +1578 -0
  7. package/converters/toZigbee.d.ts.map +1 -0
  8. package/converters/toZigbee.js +4422 -0
  9. package/converters/toZigbee.js.map +1 -0
  10. package/devices/ITCommander.d.ts +4 -0
  11. package/devices/ITCommander.d.ts.map +1 -0
  12. package/devices/ITCommander.js +77 -0
  13. package/devices/ITCommander.js.map +1 -0
  14. package/devices/acova.d.ts +4 -0
  15. package/devices/acova.d.ts.map +1 -0
  16. package/devices/acova.js +127 -0
  17. package/devices/acova.js.map +1 -0
  18. package/devices/acuity_brands_lighting.d.ts +4 -0
  19. package/devices/acuity_brands_lighting.d.ts.map +1 -0
  20. package/devices/acuity_brands_lighting.js +29 -0
  21. package/devices/acuity_brands_lighting.js.map +1 -0
  22. package/devices/adeo.d.ts +4 -0
  23. package/devices/adeo.d.ts.map +1 -0
  24. package/devices/adeo.js +486 -0
  25. package/devices/adeo.js.map +1 -0
  26. package/devices/adurosmart.d.ts +4 -0
  27. package/devices/adurosmart.d.ts.map +1 -0
  28. package/devices/adurosmart.js +183 -0
  29. package/devices/adurosmart.js.map +1 -0
  30. package/devices/aeotec.d.ts +4 -0
  31. package/devices/aeotec.d.ts.map +1 -0
  32. package/devices/aeotec.js +66 -0
  33. package/devices/aeotec.js.map +1 -0
  34. package/devices/airam.d.ts +4 -0
  35. package/devices/airam.d.ts.map +1 -0
  36. package/devices/airam.js +106 -0
  37. package/devices/airam.js.map +1 -0
  38. package/devices/airzone_aidoo.d.ts +4 -0
  39. package/devices/airzone_aidoo.d.ts.map +1 -0
  40. package/devices/airzone_aidoo.js +81 -0
  41. package/devices/airzone_aidoo.js.map +1 -0
  42. package/devices/ajax_online.d.ts +4 -0
  43. package/devices/ajax_online.d.ts.map +1 -0
  44. package/devices/ajax_online.js +84 -0
  45. package/devices/ajax_online.js.map +1 -0
  46. package/devices/akuvox.d.ts +4 -0
  47. package/devices/akuvox.d.ts.map +1 -0
  48. package/devices/akuvox.js +68 -0
  49. package/devices/akuvox.js.map +1 -0
  50. package/devices/alchemy.d.ts +4 -0
  51. package/devices/alchemy.d.ts.map +1 -0
  52. package/devices/alchemy.js +22 -0
  53. package/devices/alchemy.js.map +1 -0
  54. package/devices/aldi.d.ts +4 -0
  55. package/devices/aldi.d.ts.map +1 -0
  56. package/devices/aldi.js +57 -0
  57. package/devices/aldi.js.map +1 -0
  58. package/devices/alecto.d.ts +4 -0
  59. package/devices/alecto.d.ts.map +1 -0
  60. package/devices/alecto.js +101 -0
  61. package/devices/alecto.js.map +1 -0
  62. package/devices/amina.d.ts +4 -0
  63. package/devices/amina.d.ts.map +1 -0
  64. package/devices/amina.js +370 -0
  65. package/devices/amina.js.map +1 -0
  66. package/devices/anchor.d.ts +4 -0
  67. package/devices/anchor.d.ts.map +1 -0
  68. package/devices/anchor.js +15 -0
  69. package/devices/anchor.js.map +1 -0
  70. package/devices/atlantic.d.ts +4 -0
  71. package/devices/atlantic.d.ts.map +1 -0
  72. package/devices/atlantic.js +146 -0
  73. package/devices/atlantic.js.map +1 -0
  74. package/devices/atsmart.d.ts +4 -0
  75. package/devices/atsmart.d.ts.map +1 -0
  76. package/devices/atsmart.js +15 -0
  77. package/devices/atsmart.js.map +1 -0
  78. package/devices/aubess.d.ts +4 -0
  79. package/devices/aubess.d.ts.map +1 -0
  80. package/devices/aubess.js +60 -0
  81. package/devices/aubess.js.map +1 -0
  82. package/devices/aurora_lighting.d.ts +4 -0
  83. package/devices/aurora_lighting.d.ts.map +1 -0
  84. package/devices/aurora_lighting.js +338 -0
  85. package/devices/aurora_lighting.js.map +1 -0
  86. package/devices/automaton.d.ts +4 -0
  87. package/devices/automaton.d.ts.map +1 -0
  88. package/devices/automaton.js +65 -0
  89. package/devices/automaton.js.map +1 -0
  90. package/devices/avatto.d.ts +4 -0
  91. package/devices/avatto.d.ts.map +1 -0
  92. package/devices/avatto.js +67 -0
  93. package/devices/avatto.js.map +1 -0
  94. package/devices/awox.d.ts +4 -0
  95. package/devices/awox.d.ts.map +1 -0
  96. package/devices/awox.js +240 -0
  97. package/devices/awox.js.map +1 -0
  98. package/devices/axis.d.ts +4 -0
  99. package/devices/axis.d.ts.map +1 -0
  100. package/devices/axis.js +63 -0
  101. package/devices/axis.js.map +1 -0
  102. package/devices/bankamp.d.ts +4 -0
  103. package/devices/bankamp.d.ts.map +1 -0
  104. package/devices/bankamp.js +15 -0
  105. package/devices/bankamp.js.map +1 -0
  106. package/devices/bega.d.ts +4 -0
  107. package/devices/bega.d.ts.map +1 -0
  108. package/devices/bega.js +29 -0
  109. package/devices/bega.js.map +1 -0
  110. package/devices/belkin.d.ts +4 -0
  111. package/devices/belkin.d.ts.map +1 -0
  112. package/devices/belkin.js +15 -0
  113. package/devices/belkin.js.map +1 -0
  114. package/devices/bitron.d.ts +4 -0
  115. package/devices/bitron.d.ts.map +1 -0
  116. package/devices/bitron.js +359 -0
  117. package/devices/bitron.js.map +1 -0
  118. package/devices/bituo_technik.d.ts +4 -0
  119. package/devices/bituo_technik.d.ts.map +1 -0
  120. package/devices/bituo_technik.js +121 -0
  121. package/devices/bituo_technik.js.map +1 -0
  122. package/devices/blaupunkt.d.ts +4 -0
  123. package/devices/blaupunkt.d.ts.map +1 -0
  124. package/devices/blaupunkt.js +68 -0
  125. package/devices/blaupunkt.js.map +1 -0
  126. package/devices/blitzwolf.d.ts +4 -0
  127. package/devices/blitzwolf.d.ts.map +1 -0
  128. package/devices/blitzwolf.js +73 -0
  129. package/devices/blitzwolf.js.map +1 -0
  130. package/devices/bosch.d.ts +4 -0
  131. package/devices/bosch.d.ts.map +1 -0
  132. package/devices/bosch.js +2048 -0
  133. package/devices/bosch.js.map +1 -0
  134. package/devices/bouffalo_lab.d.ts +4 -0
  135. package/devices/bouffalo_lab.d.ts.map +1 -0
  136. package/devices/bouffalo_lab.js +15 -0
  137. package/devices/bouffalo_lab.js.map +1 -0
  138. package/devices/brimate.d.ts +4 -0
  139. package/devices/brimate.d.ts.map +1 -0
  140. package/devices/brimate.js +55 -0
  141. package/devices/brimate.js.map +1 -0
  142. package/devices/bseed.d.ts +4 -0
  143. package/devices/bseed.d.ts.map +1 -0
  144. package/devices/bseed.js +57 -0
  145. package/devices/bseed.js.map +1 -0
  146. package/devices/bticino.d.ts +4 -0
  147. package/devices/bticino.d.ts.map +1 -0
  148. package/devices/bticino.js +113 -0
  149. package/devices/bticino.js.map +1 -0
  150. package/devices/busch_jaeger.d.ts +4 -0
  151. package/devices/busch_jaeger.d.ts.map +1 -0
  152. package/devices/busch_jaeger.js +186 -0
  153. package/devices/busch_jaeger.js.map +1 -0
  154. package/devices/byun.d.ts +4 -0
  155. package/devices/byun.d.ts.map +1 -0
  156. package/devices/byun.js +64 -0
  157. package/devices/byun.js.map +1 -0
  158. package/devices/calex.d.ts +4 -0
  159. package/devices/calex.d.ts.map +1 -0
  160. package/devices/calex.js +91 -0
  161. package/devices/calex.js.map +1 -0
  162. package/devices/candeo.d.ts +4 -0
  163. package/devices/candeo.d.ts.map +1 -0
  164. package/devices/candeo.js +185 -0
  165. package/devices/candeo.js.map +1 -0
  166. package/devices/casaia.d.ts +4 -0
  167. package/devices/casaia.d.ts.map +1 -0
  168. package/devices/casaia.js +99 -0
  169. package/devices/casaia.js.map +1 -0
  170. package/devices/cel.d.ts +4 -0
  171. package/devices/cel.d.ts.map +1 -0
  172. package/devices/cel.js +20 -0
  173. package/devices/cel.js.map +1 -0
  174. package/devices/centralite.d.ts +4 -0
  175. package/devices/centralite.d.ts.map +1 -0
  176. package/devices/centralite.js +444 -0
  177. package/devices/centralite.js.map +1 -0
  178. package/devices/chacon.d.ts +4 -0
  179. package/devices/chacon.d.ts.map +1 -0
  180. package/devices/chacon.js +18 -0
  181. package/devices/chacon.js.map +1 -0
  182. package/devices/cleode.d.ts +4 -0
  183. package/devices/cleode.d.ts.map +1 -0
  184. package/devices/cleode.js +15 -0
  185. package/devices/cleode.js.map +1 -0
  186. package/devices/cleverio.d.ts +4 -0
  187. package/devices/cleverio.d.ts.map +1 -0
  188. package/devices/cleverio.js +77 -0
  189. package/devices/cleverio.js.map +1 -0
  190. package/devices/climax.d.ts +4 -0
  191. package/devices/climax.d.ts.map +1 -0
  192. package/devices/climax.js +181 -0
  193. package/devices/climax.js.map +1 -0
  194. package/devices/commercial_electric.d.ts +4 -0
  195. package/devices/commercial_electric.d.ts.map +1 -0
  196. package/devices/commercial_electric.js +15 -0
  197. package/devices/commercial_electric.js.map +1 -0
  198. package/devices/cree.d.ts +4 -0
  199. package/devices/cree.d.ts.map +1 -0
  200. package/devices/cree.js +15 -0
  201. package/devices/cree.js.map +1 -0
  202. package/devices/ctm.d.ts +4 -0
  203. package/devices/ctm.d.ts.map +1 -0
  204. package/devices/ctm.js +1383 -0
  205. package/devices/ctm.js.map +1 -0
  206. package/devices/current_products_corp.d.ts +4 -0
  207. package/devices/current_products_corp.d.ts.map +1 -0
  208. package/devices/current_products_corp.js +64 -0
  209. package/devices/current_products_corp.js.map +1 -0
  210. package/devices/custom_devices_diy.d.ts +4 -0
  211. package/devices/custom_devices_diy.d.ts.map +1 -0
  212. package/devices/custom_devices_diy.js +1206 -0
  213. package/devices/custom_devices_diy.js.map +1 -0
  214. package/devices/cy_lighting.d.ts +4 -0
  215. package/devices/cy_lighting.d.ts.map +1 -0
  216. package/devices/cy_lighting.js +15 -0
  217. package/devices/cy_lighting.js.map +1 -0
  218. package/devices/danalock.d.ts +4 -0
  219. package/devices/danalock.d.ts.map +1 -0
  220. package/devices/danalock.js +65 -0
  221. package/devices/danalock.js.map +1 -0
  222. package/devices/danfoss.d.ts +4 -0
  223. package/devices/danfoss.d.ts.map +1 -0
  224. package/devices/danfoss.js +743 -0
  225. package/devices/danfoss.js.map +1 -0
  226. package/devices/databyte.d.ts +4 -0
  227. package/devices/databyte.d.ts.map +1 -0
  228. package/devices/databyte.js +95 -0
  229. package/devices/databyte.js.map +1 -0
  230. package/devices/datek.d.ts +4 -0
  231. package/devices/datek.d.ts.map +1 -0
  232. package/devices/datek.js +298 -0
  233. package/devices/datek.js.map +1 -0
  234. package/devices/dawon_dns.d.ts +4 -0
  235. package/devices/dawon_dns.d.ts.map +1 -0
  236. package/devices/dawon_dns.js +318 -0
  237. package/devices/dawon_dns.js.map +1 -0
  238. package/devices/develco.d.ts +4 -0
  239. package/devices/develco.d.ts.map +1 -0
  240. package/devices/develco.js +1037 -0
  241. package/devices/develco.js.map +1 -0
  242. package/devices/digi.d.ts +4 -0
  243. package/devices/digi.d.ts.map +1 -0
  244. package/devices/digi.js +25 -0
  245. package/devices/digi.js.map +1 -0
  246. package/devices/diyruz.d.ts +4 -0
  247. package/devices/diyruz.d.ts.map +1 -0
  248. package/devices/diyruz.js +403 -0
  249. package/devices/diyruz.js.map +1 -0
  250. package/devices/dlink.d.ts +4 -0
  251. package/devices/dlink.d.ts.map +1 -0
  252. package/devices/dlink.js +76 -0
  253. package/devices/dlink.js.map +1 -0
  254. package/devices/dnake.d.ts +4 -0
  255. package/devices/dnake.d.ts.map +1 -0
  256. package/devices/dnake.js +15 -0
  257. package/devices/dnake.js.map +1 -0
  258. package/devices/dowsing_reynolds.d.ts +4 -0
  259. package/devices/dowsing_reynolds.d.ts.map +1 -0
  260. package/devices/dowsing_reynolds.js +15 -0
  261. package/devices/dowsing_reynolds.js.map +1 -0
  262. package/devices/dresden_elektronik.d.ts +4 -0
  263. package/devices/dresden_elektronik.d.ts.map +1 -0
  264. package/devices/dresden_elektronik.js +50 -0
  265. package/devices/dresden_elektronik.js.map +1 -0
  266. package/devices/easyaccess.d.ts +4 -0
  267. package/devices/easyaccess.d.ts.map +1 -0
  268. package/devices/easyaccess.js +71 -0
  269. package/devices/easyaccess.js.map +1 -0
  270. package/devices/easyiot.d.ts +4 -0
  271. package/devices/easyiot.d.ts.map +1 -0
  272. package/devices/easyiot.js +358 -0
  273. package/devices/easyiot.js.map +1 -0
  274. package/devices/eatonhalo_led.d.ts +4 -0
  275. package/devices/eatonhalo_led.d.ts.map +1 -0
  276. package/devices/eatonhalo_led.js +15 -0
  277. package/devices/eatonhalo_led.js.map +1 -0
  278. package/devices/echostar.d.ts +4 -0
  279. package/devices/echostar.d.ts.map +1 -0
  280. package/devices/echostar.js +65 -0
  281. package/devices/echostar.js.map +1 -0
  282. package/devices/ecodim.d.ts +4 -0
  283. package/devices/ecodim.d.ts.map +1 -0
  284. package/devices/ecodim.js +270 -0
  285. package/devices/ecodim.js.map +1 -0
  286. package/devices/ecolink.d.ts +4 -0
  287. package/devices/ecolink.d.ts.map +1 -0
  288. package/devices/ecolink.js +61 -0
  289. package/devices/ecolink.js.map +1 -0
  290. package/devices/ecosmart.d.ts +4 -0
  291. package/devices/ecosmart.d.ts.map +1 -0
  292. package/devices/ecosmart.js +83 -0
  293. package/devices/ecosmart.js.map +1 -0
  294. package/devices/ecozy.d.ts +4 -0
  295. package/devices/ecozy.d.ts.map +1 -0
  296. package/devices/ecozy.js +89 -0
  297. package/devices/ecozy.js.map +1 -0
  298. package/devices/edp.d.ts +4 -0
  299. package/devices/edp.d.ts.map +1 -0
  300. package/devices/edp.js +74 -0
  301. package/devices/edp.js.map +1 -0
  302. package/devices/efekta.d.ts +4 -0
  303. package/devices/efekta.d.ts.map +1 -0
  304. package/devices/efekta.js +754 -0
  305. package/devices/efekta.js.map +1 -0
  306. package/devices/eglo.d.ts +4 -0
  307. package/devices/eglo.d.ts.map +1 -0
  308. package/devices/eglo.js +132 -0
  309. package/devices/eglo.js.map +1 -0
  310. package/devices/elko.d.ts +4 -0
  311. package/devices/elko.d.ts.map +1 -0
  312. package/devices/elko.js +240 -0
  313. package/devices/elko.js.map +1 -0
  314. package/devices/enbrighten.d.ts +4 -0
  315. package/devices/enbrighten.d.ts.map +1 -0
  316. package/devices/enbrighten.js +97 -0
  317. package/devices/enbrighten.js.map +1 -0
  318. package/devices/enocean.d.ts +4 -0
  319. package/devices/enocean.d.ts.map +1 -0
  320. package/devices/enocean.js +153 -0
  321. package/devices/enocean.js.map +1 -0
  322. package/devices/envilar.d.ts +4 -0
  323. package/devices/envilar.d.ts.map +1 -0
  324. package/devices/envilar.js +100 -0
  325. package/devices/envilar.js.map +1 -0
  326. package/devices/essentialb.d.ts +4 -0
  327. package/devices/essentialb.d.ts.map +1 -0
  328. package/devices/essentialb.js +137 -0
  329. package/devices/essentialb.js.map +1 -0
  330. package/devices/essentials.d.ts +4 -0
  331. package/devices/essentials.d.ts.map +1 -0
  332. package/devices/essentials.js +151 -0
  333. package/devices/essentials.js.map +1 -0
  334. package/devices/eucontrols.d.ts +4 -0
  335. package/devices/eucontrols.d.ts.map +1 -0
  336. package/devices/eucontrols.js +15 -0
  337. package/devices/eucontrols.js.map +1 -0
  338. package/devices/eurotronic.d.ts +4 -0
  339. package/devices/eurotronic.d.ts.map +1 -0
  340. package/devices/eurotronic.js +128 -0
  341. package/devices/eurotronic.js.map +1 -0
  342. package/devices/evanell.d.ts +4 -0
  343. package/devices/evanell.d.ts.map +1 -0
  344. package/devices/evanell.js +75 -0
  345. package/devices/evanell.js.map +1 -0
  346. package/devices/evn.d.ts +4 -0
  347. package/devices/evn.d.ts.map +1 -0
  348. package/devices/evn.js +94 -0
  349. package/devices/evn.js.map +1 -0
  350. package/devices/evology.d.ts +4 -0
  351. package/devices/evology.d.ts.map +1 -0
  352. package/devices/evology.js +64 -0
  353. package/devices/evology.js.map +1 -0
  354. package/devices/evvr.d.ts +4 -0
  355. package/devices/evvr.d.ts.map +1 -0
  356. package/devices/evvr.js +15 -0
  357. package/devices/evvr.js.map +1 -0
  358. package/devices/ewelink.d.ts +4 -0
  359. package/devices/ewelink.d.ts.map +1 -0
  360. package/devices/ewelink.js +343 -0
  361. package/devices/ewelink.js.map +1 -0
  362. package/devices/ezex.d.ts +4 -0
  363. package/devices/ezex.d.ts.map +1 -0
  364. package/devices/ezex.js +15 -0
  365. package/devices/ezex.js.map +1 -0
  366. package/devices/fantem.d.ts +4 -0
  367. package/devices/fantem.d.ts.map +1 -0
  368. package/devices/fantem.js +118 -0
  369. package/devices/fantem.js.map +1 -0
  370. package/devices/feibit.d.ts +4 -0
  371. package/devices/feibit.d.ts.map +1 -0
  372. package/devices/feibit.js +334 -0
  373. package/devices/feibit.js.map +1 -0
  374. package/devices/fireangel.d.ts +4 -0
  375. package/devices/fireangel.d.ts.map +1 -0
  376. package/devices/fireangel.js +55 -0
  377. package/devices/fireangel.js.map +1 -0
  378. package/devices/frankever.d.ts +4 -0
  379. package/devices/frankever.d.ts.map +1 -0
  380. package/devices/frankever.js +71 -0
  381. package/devices/frankever.js.map +1 -0
  382. package/devices/frient.d.ts +4 -0
  383. package/devices/frient.d.ts.map +1 -0
  384. package/devices/frient.js +42 -0
  385. package/devices/frient.js.map +1 -0
  386. package/devices/futurehome.d.ts +4 -0
  387. package/devices/futurehome.d.ts.map +1 -0
  388. package/devices/futurehome.js +124 -0
  389. package/devices/futurehome.js.map +1 -0
  390. package/devices/ge.d.ts +4 -0
  391. package/devices/ge.d.ts.map +1 -0
  392. package/devices/ge.js +134 -0
  393. package/devices/ge.js.map +1 -0
  394. package/devices/gewiss.d.ts +4 -0
  395. package/devices/gewiss.d.ts.map +1 -0
  396. package/devices/gewiss.js +78 -0
  397. package/devices/gewiss.js.map +1 -0
  398. package/devices/gidealed.d.ts +4 -0
  399. package/devices/gidealed.d.ts.map +1 -0
  400. package/devices/gidealed.js +15 -0
  401. package/devices/gidealed.js.map +1 -0
  402. package/devices/giderwel.d.ts +4 -0
  403. package/devices/giderwel.d.ts.map +1 -0
  404. package/devices/giderwel.js +15 -0
  405. package/devices/giderwel.js.map +1 -0
  406. package/devices/giex.d.ts +4 -0
  407. package/devices/giex.d.ts.map +1 -0
  408. package/devices/giex.js +121 -0
  409. package/devices/giex.js.map +1 -0
  410. package/devices/girier.d.ts +4 -0
  411. package/devices/girier.d.ts.map +1 -0
  412. package/devices/girier.js +56 -0
  413. package/devices/girier.js.map +1 -0
  414. package/devices/gledopto.d.ts +4 -0
  415. package/devices/gledopto.d.ts.map +1 -0
  416. package/devices/gledopto.js +1046 -0
  417. package/devices/gledopto.js.map +1 -0
  418. package/devices/gmmts.d.ts +4 -0
  419. package/devices/gmmts.d.ts.map +1 -0
  420. package/devices/gmmts.js +2287 -0
  421. package/devices/gmmts.js.map +1 -0
  422. package/devices/gmy.d.ts +4 -0
  423. package/devices/gmy.d.ts.map +1 -0
  424. package/devices/gmy.js +15 -0
  425. package/devices/gmy.js.map +1 -0
  426. package/devices/gs.d.ts +4 -0
  427. package/devices/gs.d.ts.map +1 -0
  428. package/devices/gs.js +89 -0
  429. package/devices/gs.js.map +1 -0
  430. package/devices/gumax.d.ts +4 -0
  431. package/devices/gumax.d.ts.map +1 -0
  432. package/devices/gumax.js +15 -0
  433. package/devices/gumax.js.map +1 -0
  434. package/devices/halemeier.d.ts +4 -0
  435. package/devices/halemeier.d.ts.map +1 -0
  436. package/devices/halemeier.js +129 -0
  437. package/devices/halemeier.js.map +1 -0
  438. package/devices/hampton_bay.d.ts +4 -0
  439. package/devices/hampton_bay.d.ts.map +1 -0
  440. package/devices/hampton_bay.js +72 -0
  441. package/devices/hampton_bay.js.map +1 -0
  442. package/devices/heatit.d.ts +4 -0
  443. package/devices/heatit.d.ts.map +1 -0
  444. package/devices/heatit.js +15 -0
  445. package/devices/heatit.js.map +1 -0
  446. package/devices/heiman.d.ts +4 -0
  447. package/devices/heiman.d.ts.map +1 -0
  448. package/devices/heiman.js +807 -0
  449. package/devices/heiman.js.map +1 -0
  450. package/devices/heimgard_technologies.d.ts +4 -0
  451. package/devices/heimgard_technologies.d.ts.map +1 -0
  452. package/devices/heimgard_technologies.js +193 -0
  453. package/devices/heimgard_technologies.js.map +1 -0
  454. package/devices/hej.d.ts +4 -0
  455. package/devices/hej.d.ts.map +1 -0
  456. package/devices/hej.js +73 -0
  457. package/devices/hej.js.map +1 -0
  458. package/devices/hfh.d.ts +4 -0
  459. package/devices/hfh.d.ts.map +1 -0
  460. package/devices/hfh.js +15 -0
  461. package/devices/hfh.js.map +1 -0
  462. package/devices/hilux.d.ts +4 -0
  463. package/devices/hilux.d.ts.map +1 -0
  464. package/devices/hilux.js +22 -0
  465. package/devices/hilux.js.map +1 -0
  466. package/devices/hive.d.ts +4 -0
  467. package/devices/hive.d.ts.map +1 -0
  468. package/devices/hive.js +766 -0
  469. package/devices/hive.js.map +1 -0
  470. package/devices/hommyn.d.ts +4 -0
  471. package/devices/hommyn.d.ts.map +1 -0
  472. package/devices/hommyn.js +64 -0
  473. package/devices/hommyn.js.map +1 -0
  474. package/devices/honyar.d.ts +4 -0
  475. package/devices/honyar.d.ts.map +1 -0
  476. package/devices/honyar.js +171 -0
  477. package/devices/honyar.js.map +1 -0
  478. package/devices/hornbach.d.ts +4 -0
  479. package/devices/hornbach.d.ts.map +1 -0
  480. package/devices/hornbach.js +99 -0
  481. package/devices/hornbach.js.map +1 -0
  482. package/devices/hzc_electric.d.ts +4 -0
  483. package/devices/hzc_electric.d.ts.map +1 -0
  484. package/devices/hzc_electric.js +94 -0
  485. package/devices/hzc_electric.js.map +1 -0
  486. package/devices/icasa.d.ts +4 -0
  487. package/devices/icasa.d.ts.map +1 -0
  488. package/devices/icasa.js +167 -0
  489. package/devices/icasa.js.map +1 -0
  490. package/devices/idinio.d.ts +4 -0
  491. package/devices/idinio.d.ts.map +1 -0
  492. package/devices/idinio.js +15 -0
  493. package/devices/idinio.js.map +1 -0
  494. package/devices/ihorn.d.ts +4 -0
  495. package/devices/ihorn.d.ts.map +1 -0
  496. package/devices/ihorn.js +109 -0
  497. package/devices/ihorn.js.map +1 -0
  498. package/devices/ikea.d.ts +4 -0
  499. package/devices/ikea.d.ts.map +1 -0
  500. package/devices/ikea.js +927 -0
  501. package/devices/ikea.js.map +1 -0
  502. package/devices/ilightsin.d.ts +4 -0
  503. package/devices/ilightsin.d.ts.map +1 -0
  504. package/devices/ilightsin.js +15 -0
  505. package/devices/ilightsin.js.map +1 -0
  506. package/devices/iluminize.d.ts +4 -0
  507. package/devices/iluminize.d.ts.map +1 -0
  508. package/devices/iluminize.js +376 -0
  509. package/devices/iluminize.js.map +1 -0
  510. package/devices/ilux.d.ts +4 -0
  511. package/devices/ilux.d.ts.map +1 -0
  512. package/devices/ilux.js +15 -0
  513. package/devices/ilux.js.map +1 -0
  514. package/devices/imhotepcreation.d.ts +4 -0
  515. package/devices/imhotepcreation.d.ts.map +1 -0
  516. package/devices/imhotepcreation.js +251 -0
  517. package/devices/imhotepcreation.js.map +1 -0
  518. package/devices/immax.d.ts +4 -0
  519. package/devices/immax.d.ts.map +1 -0
  520. package/devices/immax.js +304 -0
  521. package/devices/immax.js.map +1 -0
  522. package/devices/imou.d.ts +4 -0
  523. package/devices/imou.d.ts.map +1 -0
  524. package/devices/imou.js +28 -0
  525. package/devices/imou.js.map +1 -0
  526. package/devices/index.d.ts +13 -0
  527. package/devices/index.d.ts.map +1 -0
  528. package/devices/index.js +642 -0
  529. package/devices/index.js.map +1 -0
  530. package/devices/innr.d.ts +4 -0
  531. package/devices/innr.d.ts.map +1 -0
  532. package/devices/innr.js +878 -0
  533. package/devices/innr.js.map +1 -0
  534. package/devices/inovelli.d.ts +4 -0
  535. package/devices/inovelli.d.ts.map +1 -0
  536. package/devices/inovelli.js +1977 -0
  537. package/devices/inovelli.js.map +1 -0
  538. package/devices/insta.d.ts +4 -0
  539. package/devices/insta.d.ts.map +1 -0
  540. package/devices/insta.js +186 -0
  541. package/devices/insta.js.map +1 -0
  542. package/devices/iolloi.d.ts +4 -0
  543. package/devices/iolloi.d.ts.map +1 -0
  544. package/devices/iolloi.js +16 -0
  545. package/devices/iolloi.js.map +1 -0
  546. package/devices/iotperfect.d.ts +4 -0
  547. package/devices/iotperfect.d.ts.map +1 -0
  548. package/devices/iotperfect.js +62 -0
  549. package/devices/iotperfect.js.map +1 -0
  550. package/devices/iris.d.ts +4 -0
  551. package/devices/iris.d.ts.map +1 -0
  552. package/devices/iris.js +211 -0
  553. package/devices/iris.js.map +1 -0
  554. package/devices/istar.d.ts +4 -0
  555. package/devices/istar.d.ts.map +1 -0
  556. package/devices/istar.js +22 -0
  557. package/devices/istar.js.map +1 -0
  558. package/devices/jasco.d.ts +4 -0
  559. package/devices/jasco.d.ts.map +1 -0
  560. package/devices/jasco.js +34 -0
  561. package/devices/jasco.js.map +1 -0
  562. package/devices/javis.d.ts +4 -0
  563. package/devices/javis.d.ts.map +1 -0
  564. package/devices/javis.js +84 -0
  565. package/devices/javis.js.map +1 -0
  566. package/devices/jethome.d.ts +4 -0
  567. package/devices/jethome.d.ts.map +1 -0
  568. package/devices/jethome.js +124 -0
  569. package/devices/jethome.js.map +1 -0
  570. package/devices/jiawen.d.ts +4 -0
  571. package/devices/jiawen.d.ts.map +1 -0
  572. package/devices/jiawen.js +22 -0
  573. package/devices/jiawen.js.map +1 -0
  574. package/devices/jumitech.d.ts +4 -0
  575. package/devices/jumitech.d.ts.map +1 -0
  576. package/devices/jumitech.js +15 -0
  577. package/devices/jumitech.js.map +1 -0
  578. package/devices/jxuan.d.ts +4 -0
  579. package/devices/jxuan.d.ts.map +1 -0
  580. package/devices/jxuan.js +89 -0
  581. package/devices/jxuan.js.map +1 -0
  582. package/devices/kami.d.ts +4 -0
  583. package/devices/kami.d.ts.map +1 -0
  584. package/devices/kami.js +55 -0
  585. package/devices/kami.js.map +1 -0
  586. package/devices/keen_home.d.ts +4 -0
  587. package/devices/keen_home.d.ts.map +1 -0
  588. package/devices/keen_home.js +160 -0
  589. package/devices/keen_home.js.map +1 -0
  590. package/devices/klikaanklikuit.d.ts +4 -0
  591. package/devices/klikaanklikuit.d.ts.map +1 -0
  592. package/devices/klikaanklikuit.js +22 -0
  593. package/devices/klikaanklikuit.js.map +1 -0
  594. package/devices/kmpcil.d.ts +4 -0
  595. package/devices/kmpcil.d.ts.map +1 -0
  596. package/devices/kmpcil.js +219 -0
  597. package/devices/kmpcil.js.map +1 -0
  598. package/devices/konke.d.ts +4 -0
  599. package/devices/konke.d.ts.map +1 -0
  600. package/devices/konke.js +210 -0
  601. package/devices/konke.js.map +1 -0
  602. package/devices/ksentry.d.ts +4 -0
  603. package/devices/ksentry.d.ts.map +1 -0
  604. package/devices/ksentry.js +15 -0
  605. package/devices/ksentry.js.map +1 -0
  606. package/devices/kurvia.d.ts +4 -0
  607. package/devices/kurvia.d.ts.map +1 -0
  608. package/devices/kurvia.js +20 -0
  609. package/devices/kurvia.js.map +1 -0
  610. package/devices/kwikset.d.ts +4 -0
  611. package/devices/kwikset.d.ts.map +1 -0
  612. package/devices/kwikset.js +157 -0
  613. package/devices/kwikset.js.map +1 -0
  614. package/devices/lanesto.d.ts +4 -0
  615. package/devices/lanesto.d.ts.map +1 -0
  616. package/devices/lanesto.js +15 -0
  617. package/devices/lanesto.js.map +1 -0
  618. package/devices/lds.d.ts +4 -0
  619. package/devices/lds.d.ts.map +1 -0
  620. package/devices/lds.js +15 -0
  621. package/devices/lds.js.map +1 -0
  622. package/devices/led_trading.d.ts +4 -0
  623. package/devices/led_trading.d.ts.map +1 -0
  624. package/devices/led_trading.js +112 -0
  625. package/devices/led_trading.js.map +1 -0
  626. package/devices/ledvance.d.ts +4 -0
  627. package/devices/ledvance.d.ts.map +1 -0
  628. package/devices/ledvance.js +337 -0
  629. package/devices/ledvance.js.map +1 -0
  630. package/devices/leedarson.d.ts +4 -0
  631. package/devices/leedarson.d.ts.map +1 -0
  632. package/devices/leedarson.js +182 -0
  633. package/devices/leedarson.js.map +1 -0
  634. package/devices/legrand.d.ts +4 -0
  635. package/devices/legrand.d.ts.map +1 -0
  636. package/devices/legrand.js +740 -0
  637. package/devices/legrand.js.map +1 -0
  638. package/devices/lellki.d.ts +4 -0
  639. package/devices/lellki.d.ts.map +1 -0
  640. package/devices/lellki.js +169 -0
  641. package/devices/lellki.js.map +1 -0
  642. package/devices/letsled.d.ts +4 -0
  643. package/devices/letsled.d.ts.map +1 -0
  644. package/devices/letsled.js +15 -0
  645. package/devices/letsled.js.map +1 -0
  646. package/devices/letv.d.ts +4 -0
  647. package/devices/letv.d.ts.map +1 -0
  648. package/devices/letv.js +90 -0
  649. package/devices/letv.js.map +1 -0
  650. package/devices/leviton.d.ts +4 -0
  651. package/devices/leviton.d.ts.map +1 -0
  652. package/devices/leviton.js +164 -0
  653. package/devices/leviton.js.map +1 -0
  654. package/devices/lg.d.ts +4 -0
  655. package/devices/lg.d.ts.map +1 -0
  656. package/devices/lg.js +29 -0
  657. package/devices/lg.js.map +1 -0
  658. package/devices/lidl.d.ts +4 -0
  659. package/devices/lidl.d.ts.map +1 -0
  660. package/devices/lidl.js +674 -0
  661. package/devices/lidl.js.map +1 -0
  662. package/devices/lifecontrol.d.ts +4 -0
  663. package/devices/lifecontrol.d.ts.map +1 -0
  664. package/devices/lifecontrol.js +149 -0
  665. package/devices/lifecontrol.js.map +1 -0
  666. package/devices/lightsolutions.d.ts +4 -0
  667. package/devices/lightsolutions.d.ts.map +1 -0
  668. package/devices/lightsolutions.js +36 -0
  669. package/devices/lightsolutions.js.map +1 -0
  670. package/devices/linkind.d.ts +4 -0
  671. package/devices/linkind.d.ts.map +1 -0
  672. package/devices/linkind.js +275 -0
  673. package/devices/linkind.js.map +1 -0
  674. package/devices/linptech.d.ts +4 -0
  675. package/devices/linptech.d.ts.map +1 -0
  676. package/devices/linptech.js +159 -0
  677. package/devices/linptech.js.map +1 -0
  678. package/devices/livingwise.d.ts +4 -0
  679. package/devices/livingwise.d.ts.map +1 -0
  680. package/devices/livingwise.js +119 -0
  681. package/devices/livingwise.js.map +1 -0
  682. package/devices/livolo.d.ts +4 -0
  683. package/devices/livolo.d.ts.map +1 -0
  684. package/devices/livolo.js +422 -0
  685. package/devices/livolo.js.map +1 -0
  686. package/devices/lixee.d.ts +4 -0
  687. package/devices/lixee.d.ts.map +1 -0
  688. package/devices/lixee.js +1926 -0
  689. package/devices/lixee.js.map +1 -0
  690. package/devices/lonsonho.d.ts +4 -0
  691. package/devices/lonsonho.d.ts.map +1 -0
  692. package/devices/lonsonho.js +303 -0
  693. package/devices/lonsonho.js.map +1 -0
  694. package/devices/ls.d.ts +4 -0
  695. package/devices/ls.d.ts.map +1 -0
  696. package/devices/ls.js +68 -0
  697. package/devices/ls.js.map +1 -0
  698. package/devices/lubeez.d.ts +4 -0
  699. package/devices/lubeez.d.ts.map +1 -0
  700. package/devices/lubeez.js +15 -0
  701. package/devices/lubeez.js.map +1 -0
  702. package/devices/lumi.d.ts +4 -0
  703. package/devices/lumi.d.ts.map +1 -0
  704. package/devices/lumi.js +4387 -0
  705. package/devices/lumi.js.map +1 -0
  706. package/devices/lupus.d.ts +4 -0
  707. package/devices/lupus.d.ts.map +1 -0
  708. package/devices/lupus.js +98 -0
  709. package/devices/lupus.js.map +1 -0
  710. package/devices/lutron.d.ts +4 -0
  711. package/devices/lutron.d.ts.map +1 -0
  712. package/devices/lutron.js +71 -0
  713. package/devices/lutron.js.map +1 -0
  714. package/devices/lux.d.ts +4 -0
  715. package/devices/lux.d.ts.map +1 -0
  716. package/devices/lux.js +91 -0
  717. package/devices/lux.js.map +1 -0
  718. package/devices/lytko.d.ts +4 -0
  719. package/devices/lytko.d.ts.map +1 -0
  720. package/devices/lytko.js +788 -0
  721. package/devices/lytko.js.map +1 -0
  722. package/devices/m_elec.d.ts +4 -0
  723. package/devices/m_elec.d.ts.map +1 -0
  724. package/devices/m_elec.js +36 -0
  725. package/devices/m_elec.js.map +1 -0
  726. package/devices/makegood.d.ts +4 -0
  727. package/devices/makegood.d.ts.map +1 -0
  728. package/devices/makegood.js +66 -0
  729. package/devices/makegood.js.map +1 -0
  730. package/devices/matcall_bv.d.ts +4 -0
  731. package/devices/matcall_bv.d.ts.map +1 -0
  732. package/devices/matcall_bv.js +22 -0
  733. package/devices/matcall_bv.js.map +1 -0
  734. package/devices/mazda.d.ts +4 -0
  735. package/devices/mazda.d.ts.map +1 -0
  736. package/devices/mazda.js +174 -0
  737. package/devices/mazda.js.map +1 -0
  738. package/devices/meazon.d.ts +4 -0
  739. package/devices/meazon.d.ts.map +1 -0
  740. package/devices/meazon.js +99 -0
  741. package/devices/meazon.js.map +1 -0
  742. package/devices/mercator.d.ts +4 -0
  743. package/devices/mercator.d.ts.map +1 -0
  744. package/devices/mercator.js +256 -0
  745. package/devices/mercator.js.map +1 -0
  746. package/devices/miboxer.d.ts +4 -0
  747. package/devices/miboxer.d.ts.map +1 -0
  748. package/devices/miboxer.js +93 -0
  749. package/devices/miboxer.js.map +1 -0
  750. package/devices/micromatic.d.ts +4 -0
  751. package/devices/micromatic.d.ts.map +1 -0
  752. package/devices/micromatic.js +15 -0
  753. package/devices/micromatic.js.map +1 -0
  754. package/devices/modular.d.ts +4 -0
  755. package/devices/modular.d.ts.map +1 -0
  756. package/devices/modular.js +15 -0
  757. package/devices/modular.js.map +1 -0
  758. package/devices/moes.d.ts +4 -0
  759. package/devices/moes.d.ts.map +1 -0
  760. package/devices/moes.js +654 -0
  761. package/devices/moes.js.map +1 -0
  762. package/devices/muller_licht.d.ts +4 -0
  763. package/devices/muller_licht.d.ts.map +1 -0
  764. package/devices/muller_licht.js +341 -0
  765. package/devices/muller_licht.js.map +1 -0
  766. package/devices/multiterm.d.ts +4 -0
  767. package/devices/multiterm.d.ts.map +1 -0
  768. package/devices/multiterm.js +123 -0
  769. package/devices/multiterm.js.map +1 -0
  770. package/devices/namron.d.ts +4 -0
  771. package/devices/namron.d.ts.map +1 -0
  772. package/devices/namron.js +1464 -0
  773. package/devices/namron.js.map +1 -0
  774. package/devices/nanoleaf.d.ts +4 -0
  775. package/devices/nanoleaf.d.ts.map +1 -0
  776. package/devices/nanoleaf.js +15 -0
  777. package/devices/nanoleaf.js.map +1 -0
  778. package/devices/nedis.d.ts +4 -0
  779. package/devices/nedis.d.ts.map +1 -0
  780. package/devices/nedis.js +88 -0
  781. package/devices/nedis.js.map +1 -0
  782. package/devices/neo.d.ts +4 -0
  783. package/devices/neo.d.ts.map +1 -0
  784. package/devices/neo.js +558 -0
  785. package/devices/neo.js.map +1 -0
  786. package/devices/net2grid.d.ts +4 -0
  787. package/devices/net2grid.d.ts.map +1 -0
  788. package/devices/net2grid.js +68 -0
  789. package/devices/net2grid.js.map +1 -0
  790. package/devices/netvox.d.ts +4 -0
  791. package/devices/netvox.d.ts.map +1 -0
  792. package/devices/netvox.js +75 -0
  793. package/devices/netvox.js.map +1 -0
  794. package/devices/nexelec.d.ts +4 -0
  795. package/devices/nexelec.d.ts.map +1 -0
  796. package/devices/nexelec.js +15 -0
  797. package/devices/nexelec.js.map +1 -0
  798. package/devices/niko.d.ts +4 -0
  799. package/devices/niko.d.ts.map +1 -0
  800. package/devices/niko.js +495 -0
  801. package/devices/niko.js.map +1 -0
  802. package/devices/ninja_blocks.d.ts +4 -0
  803. package/devices/ninja_blocks.d.ts.map +1 -0
  804. package/devices/ninja_blocks.js +64 -0
  805. package/devices/ninja_blocks.js.map +1 -0
  806. package/devices/niviss.d.ts +4 -0
  807. package/devices/niviss.d.ts.map +1 -0
  808. package/devices/niviss.js +15 -0
  809. package/devices/niviss.js.map +1 -0
  810. package/devices/nodon.d.ts +4 -0
  811. package/devices/nodon.d.ts.map +1 -0
  812. package/devices/nodon.js +386 -0
  813. package/devices/nodon.js.map +1 -0
  814. package/devices/nordtronic.d.ts +4 -0
  815. package/devices/nordtronic.d.ts.map +1 -0
  816. package/devices/nordtronic.js +41 -0
  817. package/devices/nordtronic.js.map +1 -0
  818. package/devices/nous.d.ts +4 -0
  819. package/devices/nous.d.ts.map +1 -0
  820. package/devices/nous.js +151 -0
  821. package/devices/nous.js.map +1 -0
  822. package/devices/novo.d.ts +4 -0
  823. package/devices/novo.d.ts.map +1 -0
  824. package/devices/novo.js +57 -0
  825. package/devices/novo.js.map +1 -0
  826. package/devices/nue_3a.d.ts +4 -0
  827. package/devices/nue_3a.d.ts.map +1 -0
  828. package/devices/nue_3a.js +361 -0
  829. package/devices/nue_3a.js.map +1 -0
  830. package/devices/nyce.d.ts +4 -0
  831. package/devices/nyce.d.ts.map +1 -0
  832. package/devices/nyce.js +134 -0
  833. package/devices/nyce.js.map +1 -0
  834. package/devices/onenuo.d.ts +4 -0
  835. package/devices/onenuo.d.ts.map +1 -0
  836. package/devices/onenuo.js +86 -0
  837. package/devices/onenuo.js.map +1 -0
  838. package/devices/onesti.d.ts +4 -0
  839. package/devices/onesti.d.ts.map +1 -0
  840. package/devices/onesti.js +208 -0
  841. package/devices/onesti.js.map +1 -0
  842. package/devices/openlumi.d.ts +4 -0
  843. package/devices/openlumi.d.ts.map +1 -0
  844. package/devices/openlumi.js +62 -0
  845. package/devices/openlumi.js.map +1 -0
  846. package/devices/orvibo.d.ts +4 -0
  847. package/devices/orvibo.d.ts.map +1 -0
  848. package/devices/orvibo.js +391 -0
  849. package/devices/orvibo.js.map +1 -0
  850. package/devices/osram.d.ts +4 -0
  851. package/devices/osram.d.ts.map +1 -0
  852. package/devices/osram.js +516 -0
  853. package/devices/osram.js.map +1 -0
  854. package/devices/oujiabao.d.ts +4 -0
  855. package/devices/oujiabao.d.ts.map +1 -0
  856. package/devices/oujiabao.js +55 -0
  857. package/devices/oujiabao.js.map +1 -0
  858. package/devices/owon.d.ts +4 -0
  859. package/devices/owon.d.ts.map +1 -0
  860. package/devices/owon.js +478 -0
  861. package/devices/owon.js.map +1 -0
  862. package/devices/ozsmartthings.d.ts +4 -0
  863. package/devices/ozsmartthings.d.ts.map +1 -0
  864. package/devices/ozsmartthings.js +48 -0
  865. package/devices/ozsmartthings.js.map +1 -0
  866. package/devices/paul_neuhaus.d.ts +4 -0
  867. package/devices/paul_neuhaus.d.ts.map +1 -0
  868. package/devices/paul_neuhaus.js +194 -0
  869. package/devices/paul_neuhaus.js.map +1 -0
  870. package/devices/paulmann.d.ts +4 -0
  871. package/devices/paulmann.d.ts.map +1 -0
  872. package/devices/paulmann.js +330 -0
  873. package/devices/paulmann.js.map +1 -0
  874. package/devices/peq.d.ts +4 -0
  875. package/devices/peq.d.ts.map +1 -0
  876. package/devices/peq.js +64 -0
  877. package/devices/peq.js.map +1 -0
  878. package/devices/perenio.d.ts +4 -0
  879. package/devices/perenio.d.ts.map +1 -0
  880. package/devices/perenio.js +468 -0
  881. package/devices/perenio.js.map +1 -0
  882. package/devices/philio.d.ts +4 -0
  883. package/devices/philio.d.ts.map +1 -0
  884. package/devices/philio.js +16 -0
  885. package/devices/philio.js.map +1 -0
  886. package/devices/philips.d.ts +4 -0
  887. package/devices/philips.d.ts.map +1 -0
  888. package/devices/philips.js +4051 -0
  889. package/devices/philips.js.map +1 -0
  890. package/devices/plaid.d.ts +4 -0
  891. package/devices/plaid.d.ts.map +1 -0
  892. package/devices/plaid.js +65 -0
  893. package/devices/plaid.js.map +1 -0
  894. package/devices/plugwise.d.ts +4 -0
  895. package/devices/plugwise.d.ts.map +1 -0
  896. package/devices/plugwise.js +210 -0
  897. package/devices/plugwise.js.map +1 -0
  898. package/devices/profalux.d.ts +4 -0
  899. package/devices/profalux.d.ts.map +1 -0
  900. package/devices/profalux.js +191 -0
  901. package/devices/profalux.js.map +1 -0
  902. package/devices/prolight.d.ts +4 -0
  903. package/devices/prolight.d.ts.map +1 -0
  904. package/devices/prolight.js +115 -0
  905. package/devices/prolight.js.map +1 -0
  906. package/devices/pushok.d.ts +4 -0
  907. package/devices/pushok.d.ts.map +1 -0
  908. package/devices/pushok.js +300 -0
  909. package/devices/pushok.js.map +1 -0
  910. package/devices/qa.d.ts +4 -0
  911. package/devices/qa.d.ts.map +1 -0
  912. package/devices/qa.js +295 -0
  913. package/devices/qa.js.map +1 -0
  914. package/devices/qmotion.d.ts +4 -0
  915. package/devices/qmotion.d.ts.map +1 -0
  916. package/devices/qmotion.js +73 -0
  917. package/devices/qmotion.js.map +1 -0
  918. package/devices/qoto.d.ts +4 -0
  919. package/devices/qoto.d.ts.map +1 -0
  920. package/devices/qoto.js +87 -0
  921. package/devices/qoto.js.map +1 -0
  922. package/devices/quotra.d.ts +4 -0
  923. package/devices/quotra.d.ts.map +1 -0
  924. package/devices/quotra.js +22 -0
  925. package/devices/quotra.js.map +1 -0
  926. package/devices/rademacher.d.ts +4 -0
  927. package/devices/rademacher.d.ts.map +1 -0
  928. package/devices/rademacher.js +29 -0
  929. package/devices/rademacher.js.map +1 -0
  930. package/devices/radium.d.ts +4 -0
  931. package/devices/radium.d.ts.map +1 -0
  932. package/devices/radium.js +15 -0
  933. package/devices/radium.js.map +1 -0
  934. package/devices/raex.d.ts +4 -0
  935. package/devices/raex.d.ts.map +1 -0
  936. package/devices/raex.js +15 -0
  937. package/devices/raex.js.map +1 -0
  938. package/devices/rgb_genie.d.ts +4 -0
  939. package/devices/rgb_genie.d.ts.map +1 -0
  940. package/devices/rgb_genie.js +279 -0
  941. package/devices/rgb_genie.js.map +1 -0
  942. package/devices/robb.d.ts +4 -0
  943. package/devices/robb.d.ts.map +1 -0
  944. package/devices/robb.js +449 -0
  945. package/devices/robb.js.map +1 -0
  946. package/devices/roome.d.ts +4 -0
  947. package/devices/roome.d.ts.map +1 -0
  948. package/devices/roome.js +55 -0
  949. package/devices/roome.js.map +1 -0
  950. package/devices/rtx.d.ts +4 -0
  951. package/devices/rtx.d.ts.map +1 -0
  952. package/devices/rtx.js +151 -0
  953. package/devices/rtx.js.map +1 -0
  954. package/devices/salus_controls.d.ts +4 -0
  955. package/devices/salus_controls.d.ts.map +1 -0
  956. package/devices/salus_controls.js +136 -0
  957. package/devices/salus_controls.js.map +1 -0
  958. package/devices/samotech.d.ts +4 -0
  959. package/devices/samotech.d.ts.map +1 -0
  960. package/devices/samotech.js +75 -0
  961. package/devices/samotech.js.map +1 -0
  962. package/devices/saswell.d.ts +4 -0
  963. package/devices/saswell.d.ts.map +1 -0
  964. package/devices/saswell.js +125 -0
  965. package/devices/saswell.js.map +1 -0
  966. package/devices/sber.d.ts +4 -0
  967. package/devices/sber.d.ts.map +1 -0
  968. package/devices/sber.js +66 -0
  969. package/devices/sber.js.map +1 -0
  970. package/devices/scanproducts.d.ts +4 -0
  971. package/devices/scanproducts.d.ts.map +1 -0
  972. package/devices/scanproducts.js +22 -0
  973. package/devices/scanproducts.js.map +1 -0
  974. package/devices/schlage.d.ts +4 -0
  975. package/devices/schlage.d.ts.map +1 -0
  976. package/devices/schlage.js +64 -0
  977. package/devices/schlage.js.map +1 -0
  978. package/devices/schneider_electric.d.ts +4 -0
  979. package/devices/schneider_electric.d.ts.map +1 -0
  980. package/devices/schneider_electric.js +2187 -0
  981. package/devices/schneider_electric.js.map +1 -0
  982. package/devices/schwaiger.d.ts +4 -0
  983. package/devices/schwaiger.d.ts.map +1 -0
  984. package/devices/schwaiger.js +109 -0
  985. package/devices/schwaiger.js.map +1 -0
  986. package/devices/seastar_intelligence.d.ts +4 -0
  987. package/devices/seastar_intelligence.d.ts.map +1 -0
  988. package/devices/seastar_intelligence.js +20 -0
  989. package/devices/seastar_intelligence.js.map +1 -0
  990. package/devices/securifi.d.ts +4 -0
  991. package/devices/securifi.d.ts.map +1 -0
  992. package/devices/securifi.js +83 -0
  993. package/devices/securifi.js.map +1 -0
  994. package/devices/sengled.d.ts +7 -0
  995. package/devices/sengled.d.ts.map +1 -0
  996. package/devices/sengled.js +358 -0
  997. package/devices/sengled.js.map +1 -0
  998. package/devices/sercomm.d.ts +4 -0
  999. package/devices/sercomm.d.ts.map +1 -0
  1000. package/devices/sercomm.js +189 -0
  1001. package/devices/sercomm.js.map +1 -0
  1002. package/devices/shade_control.d.ts +4 -0
  1003. package/devices/shade_control.d.ts.map +1 -0
  1004. package/devices/shade_control.js +65 -0
  1005. package/devices/shade_control.js.map +1 -0
  1006. package/devices/shenzhen_homa.d.ts +4 -0
  1007. package/devices/shenzhen_homa.d.ts.map +1 -0
  1008. package/devices/shenzhen_homa.js +111 -0
  1009. package/devices/shenzhen_homa.js.map +1 -0
  1010. package/devices/shinasystem.d.ts +4 -0
  1011. package/devices/shinasystem.d.ts.map +1 -0
  1012. package/devices/shinasystem.js +961 -0
  1013. package/devices/shinasystem.js.map +1 -0
  1014. package/devices/shyugj.d.ts +4 -0
  1015. package/devices/shyugj.d.ts.map +1 -0
  1016. package/devices/shyugj.js +21 -0
  1017. package/devices/shyugj.js.map +1 -0
  1018. package/devices/siglis.d.ts +4 -0
  1019. package/devices/siglis.d.ts.map +1 -0
  1020. package/devices/siglis.js +457 -0
  1021. package/devices/siglis.js.map +1 -0
  1022. package/devices/sikom.d.ts +4 -0
  1023. package/devices/sikom.d.ts.map +1 -0
  1024. package/devices/sikom.js +68 -0
  1025. package/devices/sikom.js.map +1 -0
  1026. package/devices/sinope.d.ts +4 -0
  1027. package/devices/sinope.d.ts.map +1 -0
  1028. package/devices/sinope.js +1755 -0
  1029. package/devices/sinope.js.map +1 -0
  1030. package/devices/siterwell.d.ts +4 -0
  1031. package/devices/siterwell.d.ts.map +1 -0
  1032. package/devices/siterwell.js +111 -0
  1033. package/devices/siterwell.js.map +1 -0
  1034. package/devices/skydance.d.ts +4 -0
  1035. package/devices/skydance.d.ts.map +1 -0
  1036. package/devices/skydance.js +156 -0
  1037. package/devices/skydance.js.map +1 -0
  1038. package/devices/slv.d.ts +4 -0
  1039. package/devices/slv.d.ts.map +1 -0
  1040. package/devices/slv.js +38 -0
  1041. package/devices/slv.js.map +1 -0
  1042. package/devices/smart9.d.ts +4 -0
  1043. package/devices/smart9.d.ts.map +1 -0
  1044. package/devices/smart9.js +67 -0
  1045. package/devices/smart9.js.map +1 -0
  1046. package/devices/smart_home_pty.d.ts +4 -0
  1047. package/devices/smart_home_pty.d.ts.map +1 -0
  1048. package/devices/smart_home_pty.js +22 -0
  1049. package/devices/smart_home_pty.js.map +1 -0
  1050. package/devices/smartenit.d.ts +4 -0
  1051. package/devices/smartenit.d.ts.map +1 -0
  1052. package/devices/smartenit.js +81 -0
  1053. package/devices/smartenit.js.map +1 -0
  1054. package/devices/smartthings.d.ts +4 -0
  1055. package/devices/smartthings.d.ts.map +1 -0
  1056. package/devices/smartthings.js +527 -0
  1057. package/devices/smartthings.js.map +1 -0
  1058. package/devices/smartwings.d.ts +4 -0
  1059. package/devices/smartwings.d.ts.map +1 -0
  1060. package/devices/smartwings.js +64 -0
  1061. package/devices/smartwings.js.map +1 -0
  1062. package/devices/smlight.d.ts +4 -0
  1063. package/devices/smlight.d.ts.map +1 -0
  1064. package/devices/smlight.js +22 -0
  1065. package/devices/smlight.js.map +1 -0
  1066. package/devices/sohan_electric.d.ts +4 -0
  1067. package/devices/sohan_electric.d.ts.map +1 -0
  1068. package/devices/sohan_electric.js +20 -0
  1069. package/devices/sohan_electric.js.map +1 -0
  1070. package/devices/solaredge.d.ts +4 -0
  1071. package/devices/solaredge.d.ts.map +1 -0
  1072. package/devices/solaredge.js +15 -0
  1073. package/devices/solaredge.js.map +1 -0
  1074. package/devices/soma.d.ts +4 -0
  1075. package/devices/soma.d.ts.map +1 -0
  1076. package/devices/soma.js +15 -0
  1077. package/devices/soma.js.map +1 -0
  1078. package/devices/somfy.d.ts +4 -0
  1079. package/devices/somfy.d.ts.map +1 -0
  1080. package/devices/somfy.js +88 -0
  1081. package/devices/somfy.js.map +1 -0
  1082. package/devices/somgoms.d.ts +4 -0
  1083. package/devices/somgoms.d.ts.map +1 -0
  1084. package/devices/somgoms.js +84 -0
  1085. package/devices/somgoms.js.map +1 -0
  1086. package/devices/sonoff.d.ts +4 -0
  1087. package/devices/sonoff.d.ts.map +1 -0
  1088. package/devices/sonoff.js +1452 -0
  1089. package/devices/sonoff.js.map +1 -0
  1090. package/devices/sowilo.d.ts +4 -0
  1091. package/devices/sowilo.d.ts.map +1 -0
  1092. package/devices/sowilo.js +15 -0
  1093. package/devices/sowilo.js.map +1 -0
  1094. package/devices/spotmau.d.ts +4 -0
  1095. package/devices/spotmau.d.ts.map +1 -0
  1096. package/devices/spotmau.js +42 -0
  1097. package/devices/spotmau.js.map +1 -0
  1098. package/devices/stelpro.d.ts +4 -0
  1099. package/devices/stelpro.d.ts.map +1 -0
  1100. package/devices/stelpro.js +366 -0
  1101. package/devices/stelpro.js.map +1 -0
  1102. package/devices/sunricher.d.ts +4 -0
  1103. package/devices/sunricher.d.ts.map +1 -0
  1104. package/devices/sunricher.js +1308 -0
  1105. package/devices/sunricher.js.map +1 -0
  1106. package/devices/swann.d.ts +4 -0
  1107. package/devices/swann.d.ts.map +1 -0
  1108. package/devices/swann.js +73 -0
  1109. package/devices/swann.js.map +1 -0
  1110. package/devices/sylvania.d.ts +4 -0
  1111. package/devices/sylvania.d.ts.map +1 -0
  1112. package/devices/sylvania.js +226 -0
  1113. package/devices/sylvania.js.map +1 -0
  1114. package/devices/tapestry.d.ts +4 -0
  1115. package/devices/tapestry.d.ts.map +1 -0
  1116. package/devices/tapestry.js +56 -0
  1117. package/devices/tapestry.js.map +1 -0
  1118. package/devices/tci.d.ts +4 -0
  1119. package/devices/tci.d.ts.map +1 -0
  1120. package/devices/tci.js +29 -0
  1121. package/devices/tci.js.map +1 -0
  1122. package/devices/tech.d.ts +4 -0
  1123. package/devices/tech.d.ts.map +1 -0
  1124. package/devices/tech.js +131 -0
  1125. package/devices/tech.js.map +1 -0
  1126. package/devices/technicolor.d.ts +4 -0
  1127. package/devices/technicolor.d.ts.map +1 -0
  1128. package/devices/technicolor.js +102 -0
  1129. package/devices/technicolor.js.map +1 -0
  1130. package/devices/terncy.d.ts +4 -0
  1131. package/devices/terncy.d.ts.map +1 -0
  1132. package/devices/terncy.js +116 -0
  1133. package/devices/terncy.js.map +1 -0
  1134. package/devices/the_light_group.d.ts +4 -0
  1135. package/devices/the_light_group.d.ts.map +1 -0
  1136. package/devices/the_light_group.js +130 -0
  1137. package/devices/the_light_group.js.map +1 -0
  1138. package/devices/third_reality.d.ts +4 -0
  1139. package/devices/third_reality.d.ts.map +1 -0
  1140. package/devices/third_reality.js +569 -0
  1141. package/devices/third_reality.js.map +1 -0
  1142. package/devices/titan_products.d.ts +4 -0
  1143. package/devices/titan_products.d.ts.map +1 -0
  1144. package/devices/titan_products.js +62 -0
  1145. package/devices/titan_products.js.map +1 -0
  1146. package/devices/tlwglobal.d.ts +4 -0
  1147. package/devices/tlwglobal.d.ts.map +1 -0
  1148. package/devices/tlwglobal.js +32 -0
  1149. package/devices/tlwglobal.js.map +1 -0
  1150. package/devices/tplink.d.ts +4 -0
  1151. package/devices/tplink.d.ts.map +1 -0
  1152. package/devices/tplink.js +82 -0
  1153. package/devices/tplink.js.map +1 -0
  1154. package/devices/trust.d.ts +4 -0
  1155. package/devices/trust.d.ts.map +1 -0
  1156. package/devices/trust.js +183 -0
  1157. package/devices/trust.js.map +1 -0
  1158. package/devices/tubeszb.d.ts +4 -0
  1159. package/devices/tubeszb.d.ts.map +1 -0
  1160. package/devices/tubeszb.js +60 -0
  1161. package/devices/tubeszb.js.map +1 -0
  1162. package/devices/tuya.d.ts +4 -0
  1163. package/devices/tuya.d.ts.map +1 -0
  1164. package/devices/tuya.js +13607 -0
  1165. package/devices/tuya.js.map +1 -0
  1166. package/devices/ubisys.d.ts +4 -0
  1167. package/devices/ubisys.d.ts.map +1 -0
  1168. package/devices/ubisys.js +1300 -0
  1169. package/devices/ubisys.js.map +1 -0
  1170. package/devices/uhome.d.ts +4 -0
  1171. package/devices/uhome.d.ts.map +1 -0
  1172. package/devices/uhome.js +64 -0
  1173. package/devices/uhome.js.map +1 -0
  1174. package/devices/universal_electronics_inc.d.ts +4 -0
  1175. package/devices/universal_electronics_inc.d.ts.map +1 -0
  1176. package/devices/universal_electronics_inc.js +186 -0
  1177. package/devices/universal_electronics_inc.js.map +1 -0
  1178. package/devices/vbled.d.ts +4 -0
  1179. package/devices/vbled.d.ts.map +1 -0
  1180. package/devices/vbled.js +15 -0
  1181. package/devices/vbled.js.map +1 -0
  1182. package/devices/vesternet.d.ts +4 -0
  1183. package/devices/vesternet.d.ts.map +1 -0
  1184. package/devices/vesternet.js +330 -0
  1185. package/devices/vesternet.js.map +1 -0
  1186. package/devices/viessmann.d.ts +4 -0
  1187. package/devices/viessmann.d.ts.map +1 -0
  1188. package/devices/viessmann.js +115 -0
  1189. package/devices/viessmann.js.map +1 -0
  1190. package/devices/villeroy_boch.d.ts +4 -0
  1191. package/devices/villeroy_boch.d.ts.map +1 -0
  1192. package/devices/villeroy_boch.js +22 -0
  1193. package/devices/villeroy_boch.js.map +1 -0
  1194. package/devices/vimar.d.ts +4 -0
  1195. package/devices/vimar.d.ts.map +1 -0
  1196. package/devices/vimar.js +137 -0
  1197. package/devices/vimar.js.map +1 -0
  1198. package/devices/visonic.d.ts +4 -0
  1199. package/devices/visonic.d.ts.map +1 -0
  1200. package/devices/visonic.js +138 -0
  1201. package/devices/visonic.js.map +1 -0
  1202. package/devices/vrey.d.ts +4 -0
  1203. package/devices/vrey.d.ts.map +1 -0
  1204. package/devices/vrey.js +18 -0
  1205. package/devices/vrey.js.map +1 -0
  1206. package/devices/wally.d.ts +4 -0
  1207. package/devices/wally.d.ts.map +1 -0
  1208. package/devices/wally.js +64 -0
  1209. package/devices/wally.js.map +1 -0
  1210. package/devices/waxman.d.ts +4 -0
  1211. package/devices/waxman.d.ts.map +1 -0
  1212. package/devices/waxman.js +85 -0
  1213. package/devices/waxman.js.map +1 -0
  1214. package/devices/weiser.d.ts +4 -0
  1215. package/devices/weiser.d.ts.map +1 -0
  1216. package/devices/weiser.js +103 -0
  1217. package/devices/weiser.js.map +1 -0
  1218. package/devices/weten.d.ts +4 -0
  1219. package/devices/weten.d.ts.map +1 -0
  1220. package/devices/weten.js +89 -0
  1221. package/devices/weten.js.map +1 -0
  1222. package/devices/wirenboard.d.ts +4 -0
  1223. package/devices/wirenboard.d.ts.map +1 -0
  1224. package/devices/wirenboard.js +626 -0
  1225. package/devices/wirenboard.js.map +1 -0
  1226. package/devices/wisdom.d.ts +4 -0
  1227. package/devices/wisdom.d.ts.map +1 -0
  1228. package/devices/wisdom.js +15 -0
  1229. package/devices/wisdom.js.map +1 -0
  1230. package/devices/woolley.d.ts +4 -0
  1231. package/devices/woolley.d.ts.map +1 -0
  1232. package/devices/woolley.js +88 -0
  1233. package/devices/woolley.js.map +1 -0
  1234. package/devices/woox.d.ts +4 -0
  1235. package/devices/woox.d.ts.map +1 -0
  1236. package/devices/woox.js +137 -0
  1237. package/devices/woox.js.map +1 -0
  1238. package/devices/wyze.d.ts +4 -0
  1239. package/devices/wyze.d.ts.map +1 -0
  1240. package/devices/wyze.js +63 -0
  1241. package/devices/wyze.js.map +1 -0
  1242. package/devices/xinghuoyuan.d.ts +4 -0
  1243. package/devices/xinghuoyuan.d.ts.map +1 -0
  1244. package/devices/xinghuoyuan.js +15 -0
  1245. package/devices/xinghuoyuan.js.map +1 -0
  1246. package/devices/xyzroe.d.ts +4 -0
  1247. package/devices/xyzroe.d.ts.map +1 -0
  1248. package/devices/xyzroe.js +519 -0
  1249. package/devices/xyzroe.js.map +1 -0
  1250. package/devices/yale.d.ts +4 -0
  1251. package/devices/yale.d.ts.map +1 -0
  1252. package/devices/yale.js +503 -0
  1253. package/devices/yale.js.map +1 -0
  1254. package/devices/yandex.d.ts +4 -0
  1255. package/devices/yandex.d.ts.map +1 -0
  1256. package/devices/yandex.js +410 -0
  1257. package/devices/yandex.js.map +1 -0
  1258. package/devices/ynoa.d.ts +4 -0
  1259. package/devices/ynoa.d.ts.map +1 -0
  1260. package/devices/ynoa.js +113 -0
  1261. package/devices/ynoa.js.map +1 -0
  1262. package/devices/yookee.d.ts +4 -0
  1263. package/devices/yookee.d.ts.map +1 -0
  1264. package/devices/yookee.js +63 -0
  1265. package/devices/yookee.js.map +1 -0
  1266. package/devices/ysrsai.d.ts +4 -0
  1267. package/devices/ysrsai.d.ts.map +1 -0
  1268. package/devices/ysrsai.js +66 -0
  1269. package/devices/ysrsai.js.map +1 -0
  1270. package/devices/zemismart.d.ts +4 -0
  1271. package/devices/zemismart.d.ts.map +1 -0
  1272. package/devices/zemismart.js +405 -0
  1273. package/devices/zemismart.js.map +1 -0
  1274. package/devices/zen.d.ts +4 -0
  1275. package/devices/zen.d.ts.map +1 -0
  1276. package/devices/zen.js +96 -0
  1277. package/devices/zen.js.map +1 -0
  1278. package/devices/zigbeetlc.d.ts +13 -0
  1279. package/devices/zigbeetlc.d.ts.map +1 -0
  1280. package/devices/zigbeetlc.js +201 -0
  1281. package/devices/zigbeetlc.js.map +1 -0
  1282. package/devices/zipato.d.ts +4 -0
  1283. package/devices/zipato.d.ts.map +1 -0
  1284. package/devices/zipato.js +15 -0
  1285. package/devices/zipato.js.map +1 -0
  1286. package/index.d.ts +21 -0
  1287. package/index.d.ts.map +1 -0
  1288. package/index.js +488 -0
  1289. package/index.js.map +1 -0
  1290. package/lib/color.d.ts +272 -0
  1291. package/lib/color.d.ts.map +1 -0
  1292. package/lib/color.js +765 -0
  1293. package/lib/color.js.map +1 -0
  1294. package/lib/configureKey.d.ts +3 -0
  1295. package/lib/configureKey.d.ts.map +1 -0
  1296. package/lib/configureKey.js +939 -0
  1297. package/lib/configureKey.js.map +1 -0
  1298. package/lib/constants.d.ts +68 -0
  1299. package/lib/constants.d.ts.map +1 -0
  1300. package/lib/constants.js +293 -0
  1301. package/lib/constants.js.map +1 -0
  1302. package/lib/develco.d.ts +15 -0
  1303. package/lib/develco.d.ts.map +1 -0
  1304. package/lib/develco.js +183 -0
  1305. package/lib/develco.js.map +1 -0
  1306. package/lib/ewelink.d.ts +30 -0
  1307. package/lib/ewelink.d.ts.map +1 -0
  1308. package/lib/ewelink.js +718 -0
  1309. package/lib/ewelink.js.map +1 -0
  1310. package/lib/exposes.d.ts +344 -0
  1311. package/lib/exposes.d.ts.map +1 -0
  1312. package/lib/exposes.js +1065 -0
  1313. package/lib/exposes.js.map +1 -0
  1314. package/lib/generateDefinition.d.ts +6 -0
  1315. package/lib/generateDefinition.d.ts.map +1 -0
  1316. package/lib/generateDefinition.js +356 -0
  1317. package/lib/generateDefinition.js.map +1 -0
  1318. package/lib/ikea.d.ts +39 -0
  1319. package/lib/ikea.d.ts.map +1 -0
  1320. package/lib/ikea.js +776 -0
  1321. package/lib/ikea.js.map +1 -0
  1322. package/lib/kelvinToXy.d.ts +8 -0
  1323. package/lib/kelvinToXy.d.ts.map +1 -0
  1324. package/lib/kelvinToXy.js +1914 -0
  1325. package/lib/kelvinToXy.js.map +1 -0
  1326. package/lib/ledvance.d.ts +20 -0
  1327. package/lib/ledvance.d.ts.map +1 -0
  1328. package/lib/ledvance.js +103 -0
  1329. package/lib/ledvance.js.map +1 -0
  1330. package/lib/legacy.d.ts +5128 -0
  1331. package/lib/legacy.d.ts.map +1 -0
  1332. package/lib/legacy.js +6603 -0
  1333. package/lib/legacy.js.map +1 -0
  1334. package/lib/legrand.d.ts +69 -0
  1335. package/lib/legrand.d.ts.map +1 -0
  1336. package/lib/legrand.js +282 -0
  1337. package/lib/legrand.js.map +1 -0
  1338. package/lib/light.d.ts +6 -0
  1339. package/lib/light.d.ts.map +1 -0
  1340. package/lib/light.js +146 -0
  1341. package/lib/light.js.map +1 -0
  1342. package/lib/logger.d.ts +4 -0
  1343. package/lib/logger.d.ts.map +1 -0
  1344. package/lib/logger.js +14 -0
  1345. package/lib/logger.js.map +1 -0
  1346. package/lib/lumi.d.ts +953 -0
  1347. package/lib/lumi.d.ts.map +1 -0
  1348. package/lib/lumi.js +4973 -0
  1349. package/lib/lumi.js.map +1 -0
  1350. package/lib/modernExtend.d.ts +325 -0
  1351. package/lib/modernExtend.d.ts.map +1 -0
  1352. package/lib/modernExtend.js +1995 -0
  1353. package/lib/modernExtend.js.map +1 -0
  1354. package/lib/ota.d.ts +71 -0
  1355. package/lib/ota.d.ts.map +1 -0
  1356. package/lib/ota.js +663 -0
  1357. package/lib/ota.js.map +1 -0
  1358. package/lib/philips.d.ts +84 -0
  1359. package/lib/philips.d.ts.map +1 -0
  1360. package/lib/philips.js +657 -0
  1361. package/lib/philips.js.map +1 -0
  1362. package/lib/reporting.d.ts +58 -0
  1363. package/lib/reporting.d.ts.map +1 -0
  1364. package/lib/reporting.js +336 -0
  1365. package/lib/reporting.js.map +1 -0
  1366. package/lib/store.d.ts +7 -0
  1367. package/lib/store.d.ts.map +1 -0
  1368. package/lib/store.js +56 -0
  1369. package/lib/store.js.map +1 -0
  1370. package/lib/sunricher.d.ts +13 -0
  1371. package/lib/sunricher.d.ts.map +1 -0
  1372. package/lib/sunricher.js +14 -0
  1373. package/lib/sunricher.js.map +1 -0
  1374. package/lib/tuya.d.ts +764 -0
  1375. package/lib/tuya.d.ts.map +1 -0
  1376. package/lib/tuya.js +2425 -0
  1377. package/lib/tuya.js.map +1 -0
  1378. package/lib/types.d.ts +433 -0
  1379. package/lib/types.d.ts.map +1 -0
  1380. package/lib/types.js +4 -0
  1381. package/lib/types.js.map +1 -0
  1382. package/lib/ubisys.d.ts +19 -0
  1383. package/lib/ubisys.d.ts.map +1 -0
  1384. package/lib/ubisys.js +293 -0
  1385. package/lib/ubisys.js.map +1 -0
  1386. package/lib/utils.d.ts +93 -0
  1387. package/lib/utils.d.ts.map +1 -0
  1388. package/lib/utils.js +790 -0
  1389. package/lib/utils.js.map +1 -0
  1390. package/lib/zosung.d.ts +52 -0
  1391. package/lib/zosung.d.ts.map +1 -0
  1392. package/lib/zosung.js +256 -0
  1393. package/lib/zosung.js.map +1 -0
  1394. package/package.json +2 -2
@@ -0,0 +1,4387 @@
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
+ const fromZigbee_1 = __importDefault(require("../converters/fromZigbee"));
40
+ const toZigbee_1 = __importDefault(require("../converters/toZigbee"));
41
+ const constants = __importStar(require("../lib/constants"));
42
+ const exposes = __importStar(require("../lib/exposes"));
43
+ const logger_1 = require("../lib/logger");
44
+ const lumi = __importStar(require("../lib/lumi"));
45
+ const modernExtend_1 = require("../lib/modernExtend");
46
+ const reporting = __importStar(require("../lib/reporting"));
47
+ const globalStore = __importStar(require("../lib/store"));
48
+ const e = exposes.presets;
49
+ const ea = exposes.access;
50
+ const { lumiAction, lumiOperationMode, lumiPowerOnBehavior, lumiZigbeeOTA, lumiSwitchType, lumiAirQuality, lumiVoc, lumiDisplayUnit, lumiLight, lumiOutageCountRestoreBindReporting, lumiElectricityMeter, lumiPower, lumiOverloadProtection, lumiLedIndicator, lumiButtonLock, lumiMotorSpeed, lumiCurtainSpeed, lumiCurtainManualOpenClose, lumiCurtainAdaptivePullingSpeed, lumiCurtainManualStop, lumiCurtainReverse, lumiCurtainStatus, lumiCurtainLastManualOperation, lumiCurtainPosition, lumiCurtainTraverseTime, lumiCurtainCalibrationStatus, lumiCurtainCalibrated, lumiCurtainIdentifyBeep, lumiOnOff, lumiLedDisabledNight, lumiFlipIndicatorLight, lumiPreventReset, lumiClickMode, lumiSlider, lumiSetEventMode, lumiSwitchMode, lumiVibration, lumiKnobRotation, lumiCommandMode, lumiBattery, } = lumi.modernExtend;
51
+ const NS = 'zhc:lumi';
52
+ const { manufacturerCode } = lumi;
53
+ const definitions = [
54
+ {
55
+ zigbeeModel: ['lumi.flood.acn001'],
56
+ model: 'SJCGQ13LM',
57
+ vendor: 'Aqara',
58
+ description: 'Water leak sensor E1',
59
+ fromZigbee: [fromZigbee_1.default.ias_water_leak_alarm_1, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
60
+ toZigbee: [],
61
+ exposes: [e.water_leak(), e.battery(), e.battery_low(), e.battery_voltage(), e.device_temperature(), e.power_outage_count(false)],
62
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
63
+ configure: async (device, coordinatorEndpoint) => {
64
+ const endpoint = device.getEndpoint(1);
65
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
66
+ },
67
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
68
+ },
69
+ {
70
+ zigbeeModel: ['lumi.airm.fhac01'],
71
+ model: 'KQJCMB11LM',
72
+ vendor: 'Aqara',
73
+ description: 'Air monitoring panel S1',
74
+ fromZigbee: [fromZigbee_1.default.temperature, fromZigbee_1.default.humidity, lumi.fromZigbee.lumi_pm25, lumi.fromZigbee.lumi_co2],
75
+ toZigbee: [],
76
+ exposes: [e.temperature(), e.humidity(), e.pm25(), e.co2()],
77
+ extend: [lumiZigbeeOTA()],
78
+ },
79
+ {
80
+ zigbeeModel: ['lumi.magnet.acn001'],
81
+ model: 'MCCGQ14LM',
82
+ vendor: 'Aqara',
83
+ description: 'Door and window sensor E1',
84
+ fromZigbee: [fromZigbee_1.default.ias_contact_alarm_1, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
85
+ toZigbee: [],
86
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
87
+ exposes: [e.contact(), e.battery(), e.battery_low(), e.battery_voltage()],
88
+ configure: async (device, coordinatorEndpoint) => {
89
+ const endpoint = device.getEndpoint(1);
90
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
91
+ },
92
+ extend: [
93
+ (0, modernExtend_1.quirkCheckinInterval)('1_HOUR'),
94
+ // OTA request: "fieldControl":0, "manufacturerCode":4447, "imageType":10635, no available for now
95
+ // https://github.com/Koenkk/zigbee-OTA/pull/138
96
+ // lumiZigbeeOTA(),
97
+ ],
98
+ },
99
+ {
100
+ zigbeeModel: ['lumi.magnet.ac01'],
101
+ model: 'MCCGQ13LM',
102
+ vendor: 'Aqara',
103
+ description: 'Door and window sensor P1',
104
+ fromZigbee: [lumi.fromZigbee.lumi_contact, fromZigbee_1.default.ias_contact_alarm_1, lumi.fromZigbee.lumi_specific],
105
+ toZigbee: [lumi.toZigbee.lumi_detection_distance],
106
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
107
+ exposes: [
108
+ e.contact(),
109
+ e.battery(),
110
+ e.battery_voltage(),
111
+ e.tamper(),
112
+ e
113
+ .enum('detection_distance', ea.ALL, ['10mm', '20mm', '30mm'])
114
+ .withDescription('The sensor will be considered "off" within the set distance. Please press the device button before setting'),
115
+ ],
116
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
117
+ },
118
+ {
119
+ zigbeeModel: ['lumi.dimmer.rcbac1'],
120
+ model: 'ZNDDMK11LM',
121
+ vendor: 'Aqara',
122
+ description: 'Smart lightstrip driver',
123
+ fromZigbee: [lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific, ...(0, modernExtend_1.light)({ colorTemp: { range: undefined }, color: true }).fromZigbee],
124
+ toZigbee: [
125
+ lumi.toZigbee.lumi_dimmer_mode,
126
+ lumi.toZigbee.lumi_switch_power_outage_memory,
127
+ ...(0, modernExtend_1.light)({ colorTemp: { range: undefined }, color: true }).toZigbee,
128
+ ],
129
+ exposes: [
130
+ e.power(),
131
+ e.energy(),
132
+ e.voltage(),
133
+ e.device_temperature(),
134
+ e.power_outage_memory(),
135
+ // When in rgbw mode, only one of color and colortemp will be valid, and l2 will be invalid
136
+ // Do not control l2 in rgbw mode
137
+ e.light_brightness_colortemp_colorxy([153, 370]).removeFeature('color_temp_startup').withEndpoint('l1'),
138
+ e.light_brightness_colortemp([153, 370]).removeFeature('color_temp_startup').withEndpoint('l2'),
139
+ e.enum('dimmer_mode', ea.ALL, ['rgbw', 'dual_ct']).withDescription('Switch between rgbw mode or dual color temperature mode'),
140
+ ],
141
+ extend: [(0, modernExtend_1.deviceEndpoints)({ endpoints: { l1: 1, l2: 2 } }), lumiZigbeeOTA()],
142
+ },
143
+ {
144
+ zigbeeModel: ['lumi.light.aqcn02'],
145
+ model: 'ZNLDP12LM',
146
+ vendor: 'Aqara',
147
+ description: 'Light bulb',
148
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'light' }), lumiZigbeeOTA()],
149
+ },
150
+ {
151
+ zigbeeModel: ['lumi.light.acn003'],
152
+ model: 'ZNXDD01LM',
153
+ vendor: 'Aqara',
154
+ description: 'Ceiling light L1-350',
155
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'switch' }), lumiZigbeeOTA()],
156
+ },
157
+ {
158
+ zigbeeModel: ['lumi.light.cwac02', 'lumi.light.acn014'],
159
+ model: 'ZNLDP13LM',
160
+ vendor: 'Aqara',
161
+ description: 'Light bulb T1',
162
+ whiteLabel: [{ vendor: 'Aqara', model: 'LEDLBT1-L01' }],
163
+ extend: [
164
+ lumiZigbeeOTA(),
165
+ lumiLight({ colorTemp: true, powerOutageMemory: 'switch' }),
166
+ (0, modernExtend_1.forceDeviceType)({ type: 'Router' }),
167
+ (0, modernExtend_1.forcePowerSource)({ powerSource: 'Mains (single phase)' }),
168
+ ],
169
+ },
170
+ {
171
+ zigbeeModel: ['lumi.light.cwopcn01'],
172
+ model: 'XDD11LM',
173
+ vendor: 'Aqara',
174
+ description: 'Opple MX960',
175
+ meta: { turnsOffAtBrightness1: true },
176
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'switch' }), lumiZigbeeOTA()],
177
+ },
178
+ {
179
+ zigbeeModel: ['lumi.light.cwopcn02'],
180
+ model: 'XDD12LM',
181
+ vendor: 'Aqara',
182
+ description: 'Opple MX650',
183
+ meta: { turnsOffAtBrightness1: true },
184
+ extend: [lumiZigbeeOTA(), lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
185
+ },
186
+ {
187
+ zigbeeModel: ['lumi.light.cwopcn03'],
188
+ model: 'XDD13LM',
189
+ vendor: 'Aqara',
190
+ description: 'Opple MX480',
191
+ meta: { turnsOffAtBrightness1: true },
192
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'switch' }), lumiZigbeeOTA()],
193
+ },
194
+ {
195
+ zigbeeModel: ['lumi.light.cwjwcn01'],
196
+ model: 'JWSP001A',
197
+ vendor: 'Aqara',
198
+ description: 'Jiawen LED Driver & Dimmer',
199
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
200
+ },
201
+ {
202
+ zigbeeModel: ['lumi.light.cwjwcn02'],
203
+ model: 'JWDL001A',
204
+ vendor: 'Aqara',
205
+ description: 'Embedded spot led light',
206
+ extend: [lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
207
+ },
208
+ {
209
+ zigbeeModel: ['lumi.sensor_switch'],
210
+ model: 'WXKG01LM',
211
+ vendor: 'Xiaomi',
212
+ whiteLabel: [
213
+ { vendor: 'Xiaomi', model: 'YTC4040GL' },
214
+ { vendor: 'Xiaomi', model: 'YTC4006CN' },
215
+ { vendor: 'Xiaomi', model: 'YTC4017CN' },
216
+ { vendor: 'Xiaomi', model: 'ZHTZ02LM' },
217
+ ],
218
+ description: 'Mi wireless switch',
219
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
220
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action_WXKG01LM],
221
+ exposes: [
222
+ e.battery(),
223
+ e.action(['single', 'double', 'triple', 'quadruple', 'hold', 'release', 'many']),
224
+ e.battery_voltage(),
225
+ e.power_outage_count(false),
226
+ ],
227
+ toZigbee: [],
228
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
229
+ },
230
+ {
231
+ zigbeeModel: ['lumi.sensor_switch.aq2', 'lumi.remote.b1acn01'],
232
+ model: 'WXKG11LM',
233
+ vendor: 'Aqara',
234
+ description: 'Wireless mini switch',
235
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
236
+ exposes: [
237
+ e.battery(),
238
+ e.battery_voltage(),
239
+ e.action(['single', 'double', 'triple', 'quadruple', 'hold', 'release']),
240
+ e.device_temperature(),
241
+ e.power_outage_count(),
242
+ ],
243
+ fromZigbee: [lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_basic],
244
+ toZigbee: [],
245
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
246
+ },
247
+ {
248
+ zigbeeModel: ['lumi.sensor_switch.aq3', 'lumi.sensor_swit'],
249
+ model: 'WXKG12LM',
250
+ vendor: 'Aqara',
251
+ description: 'Wireless mini switch (with gyroscope)',
252
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
253
+ exposes: [e.battery(), e.action(['single', 'double', 'hold', 'release', 'shake']), e.battery_voltage()],
254
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action_multistate],
255
+ toZigbee: [],
256
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
257
+ },
258
+ {
259
+ zigbeeModel: ['lumi.sensor_86sw1'],
260
+ model: 'WXKG03LM_rev1',
261
+ vendor: 'Aqara',
262
+ description: 'Wireless remote switch (single rocker), 2016 model',
263
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
264
+ exposes: [e.battery(), e.action(['single']), e.battery_voltage()],
265
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_basic],
266
+ toZigbee: [],
267
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
268
+ },
269
+ {
270
+ zigbeeModel: ['lumi.remote.b186acn01'],
271
+ model: 'WXKG03LM_rev2',
272
+ vendor: 'Aqara',
273
+ description: 'Wireless remote switch (single rocker), 2018 model',
274
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
275
+ exposes: [e.battery(), e.action(['single', 'double', 'hold']), e.battery_voltage()],
276
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_basic],
277
+ toZigbee: [],
278
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
279
+ },
280
+ {
281
+ zigbeeModel: ['lumi.remote.b186acn02'],
282
+ model: 'WXKG06LM',
283
+ vendor: 'Aqara',
284
+ description: 'Wireless remote switch D1 (single rocker)',
285
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_action_multistate],
286
+ toZigbee: [],
287
+ exposes: [e.battery(), e.action(['single', 'double', 'hold']), e.battery_voltage()],
288
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
289
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
290
+ configure: async (device, coordinatorEndpoint) => {
291
+ try {
292
+ const endpoint = device.endpoints[1];
293
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
294
+ }
295
+ catch {
296
+ // fails for some but device works as expected: https://github.com/Koenkk/zigbee2mqtt/issues/9136
297
+ }
298
+ },
299
+ },
300
+ {
301
+ zigbeeModel: ['lumi.light.acn132'],
302
+ model: 'LGYCDD01LM',
303
+ vendor: 'Aqara',
304
+ whiteLabel: [{ vendor: 'Aqara', model: 'RLS-K01D' }],
305
+ description: 'Light strip T1',
306
+ extend: [
307
+ (0, modernExtend_1.light)({ effect: false, powerOnBehavior: false, colorTemp: { startup: false, range: [153, 370] }, color: true }),
308
+ lumiPowerOnBehavior(),
309
+ (0, modernExtend_1.numeric)({
310
+ name: 'length',
311
+ valueMin: 1,
312
+ valueMax: 10,
313
+ valueStep: 0.2,
314
+ scale: 5,
315
+ unit: 'm',
316
+ cluster: 'manuSpecificLumi',
317
+ attribute: { ID: 0x051b, type: 0x20 },
318
+ description: 'LED strip length',
319
+ zigbeeCommandOptions: { manufacturerCode },
320
+ }),
321
+ (0, modernExtend_1.numeric)({
322
+ name: 'min_brightness',
323
+ valueMin: 0,
324
+ valueMax: 99,
325
+ unit: '%',
326
+ cluster: 'manuSpecificLumi',
327
+ attribute: { ID: 0x0515, type: 0x20 },
328
+ description: 'Minimum brightness level',
329
+ zigbeeCommandOptions: { manufacturerCode },
330
+ }),
331
+ (0, modernExtend_1.numeric)({
332
+ name: 'max_brightness',
333
+ valueMin: 1,
334
+ valueMax: 100,
335
+ unit: '%',
336
+ cluster: 'manuSpecificLumi',
337
+ attribute: { ID: 0x0516, type: 0x20 },
338
+ description: 'Maximum brightness level',
339
+ zigbeeCommandOptions: { manufacturerCode },
340
+ }),
341
+ (0, modernExtend_1.binary)({
342
+ name: 'audio',
343
+ valueOn: ['ON', 1],
344
+ valueOff: ['OFF', 0],
345
+ cluster: 'manuSpecificLumi',
346
+ attribute: { ID: 0x051c, type: 0x20 },
347
+ description: 'Enabling audio',
348
+ zigbeeCommandOptions: { manufacturerCode },
349
+ }),
350
+ (0, modernExtend_1.enumLookup)({
351
+ name: 'audio_sensitivity',
352
+ lookup: { low: 0, medium: 1, high: 2 },
353
+ cluster: 'manuSpecificLumi',
354
+ attribute: { ID: 0x051e, type: 0x20 },
355
+ description: 'Audio sensitivity',
356
+ zigbeeCommandOptions: { manufacturerCode },
357
+ }),
358
+ (0, modernExtend_1.enumLookup)({
359
+ name: 'audio_effect',
360
+ lookup: { random: 0, blink: 1, rainbow: 2, wave: 3 },
361
+ cluster: 'manuSpecificLumi',
362
+ attribute: { ID: 0x051d, type: 0x23 },
363
+ description: 'Audio effect',
364
+ zigbeeCommandOptions: { manufacturerCode },
365
+ }),
366
+ (0, modernExtend_1.numeric)({
367
+ name: 'preset',
368
+ valueMin: 1,
369
+ valueMax: 32,
370
+ cluster: 'manuSpecificLumi',
371
+ attribute: { ID: 0x051f, type: 0x23 },
372
+ description: 'Preset index (0-6 default presets)',
373
+ zigbeeCommandOptions: { manufacturerCode },
374
+ }),
375
+ (0, modernExtend_1.numeric)({
376
+ name: 'speed',
377
+ valueMin: 1,
378
+ valueMax: 100,
379
+ cluster: 'manuSpecificLumi',
380
+ attribute: { ID: 0x0520, type: 0x20 },
381
+ description: 'Effect speed',
382
+ zigbeeCommandOptions: { manufacturerCode },
383
+ }),
384
+ lumiZigbeeOTA(),
385
+ ],
386
+ },
387
+ {
388
+ zigbeeModel: ['lumi.sensor_86sw2', 'lumi.sensor_86sw2.es1'],
389
+ model: 'WXKG02LM_rev1',
390
+ vendor: 'Aqara',
391
+ description: 'Wireless remote switch (double rocker), 2016 model',
392
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
393
+ exposes: [e.battery(), e.action(['single_left', 'single_right', 'single_both']), e.battery_voltage(), e.power_outage_count(false)],
394
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_basic],
395
+ toZigbee: [],
396
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
397
+ },
398
+ {
399
+ zigbeeModel: ['lumi.remote.b286acn01'],
400
+ model: 'WXKG02LM_rev2',
401
+ vendor: 'Aqara',
402
+ description: 'Wireless remote switch (double rocker), 2018 model',
403
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
404
+ exposes: [
405
+ e.battery(),
406
+ e.action([
407
+ 'single_left',
408
+ 'single_right',
409
+ 'single_both',
410
+ 'double_left',
411
+ 'double_right',
412
+ 'double_both',
413
+ 'hold_left',
414
+ 'hold_right',
415
+ 'hold_both',
416
+ ]),
417
+ e.battery_voltage(),
418
+ ],
419
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_basic],
420
+ toZigbee: [],
421
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
422
+ },
423
+ {
424
+ zigbeeModel: ['lumi.switch.b1laus01'],
425
+ model: 'WS-USC01',
426
+ vendor: 'Aqara',
427
+ description: 'Smart wall switch (no neutral, single rocker), US',
428
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
429
+ toZigbee: [
430
+ toZigbee_1.default.on_off,
431
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
432
+ lumi.toZigbee.lumi_flip_indicator_light,
433
+ lumi.toZigbee.lumi_switch_mode_switch,
434
+ lumi.toZigbee.lumi_switch_power_outage_memory,
435
+ ],
436
+ exposes: [
437
+ e.switch(),
438
+ e.action(['single', 'double']),
439
+ e.flip_indicator_light(),
440
+ e.power_outage_memory(),
441
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
442
+ e
443
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
444
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
445
+ e.power_outage_count(),
446
+ e.device_temperature().withAccess(ea.STATE),
447
+ ],
448
+ configure: async (device, coordinatorEndpoint) => {
449
+ const endpoint1 = device.getEndpoint(1);
450
+ // set "event" mode
451
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
452
+ device.powerSource = 'Mains (single phase)';
453
+ device.save();
454
+ },
455
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
456
+ },
457
+ {
458
+ zigbeeModel: ['lumi.switch.b2laus01'],
459
+ model: 'WS-USC02',
460
+ vendor: 'Aqara',
461
+ description: 'Smart wall switch (no neutral, double rocker), US',
462
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
463
+ toZigbee: [
464
+ toZigbee_1.default.on_off,
465
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
466
+ lumi.toZigbee.lumi_flip_indicator_light,
467
+ lumi.toZigbee.lumi_switch_power_outage_memory,
468
+ lumi.toZigbee.lumi_switch_mode_switch,
469
+ ],
470
+ exposes: [
471
+ e.switch().withEndpoint('top'),
472
+ e.switch().withEndpoint('bottom'),
473
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for top button').withEndpoint('top'),
474
+ e
475
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
476
+ .withDescription('Decoupled mode for bottom button')
477
+ .withEndpoint('bottom'),
478
+ e
479
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
480
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
481
+ e.power_outage_count(),
482
+ e.device_temperature().withAccess(ea.STATE),
483
+ e.flip_indicator_light(),
484
+ e.power_outage_memory(),
485
+ e.action(['single_top', 'single_bottom', 'single_both', 'double_top', 'double_bottom', 'double_both']),
486
+ ],
487
+ meta: { multiEndpoint: true },
488
+ endpoint: (device) => {
489
+ return { top: 1, bottom: 2 };
490
+ },
491
+ configure: async (device, coordinatorEndpoint) => {
492
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
493
+ },
494
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
495
+ },
496
+ {
497
+ zigbeeModel: ['lumi.switch.b1naus01'],
498
+ model: 'WS-USC03',
499
+ vendor: 'Aqara',
500
+ description: 'Smart wall switch (with neutral, single rocker), US',
501
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
502
+ toZigbee: [
503
+ toZigbee_1.default.on_off,
504
+ lumi.toZigbee.lumi_power,
505
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
506
+ lumi.toZigbee.lumi_switch_power_outage_memory,
507
+ lumi.toZigbee.lumi_flip_indicator_light,
508
+ ],
509
+ exposes: [
510
+ e.switch(),
511
+ e.action(['single', 'double']),
512
+ e.flip_indicator_light(),
513
+ e.power_outage_count(),
514
+ e.device_temperature().withAccess(ea.STATE),
515
+ e.power().withAccess(ea.STATE_GET),
516
+ e.energy(),
517
+ e.voltage(),
518
+ e.power_outage_memory(),
519
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
520
+ ],
521
+ configure: async (device, coordinatorEndpoint) => {
522
+ const endpoint1 = device.getEndpoint(1);
523
+ // set "event" mode
524
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
525
+ },
526
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
527
+ },
528
+ {
529
+ zigbeeModel: ['lumi.switch.b2naus01'],
530
+ model: 'WS-USC04',
531
+ vendor: 'Aqara',
532
+ description: 'Smart wall switch (with neutral, double rocker), US',
533
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
534
+ toZigbee: [
535
+ toZigbee_1.default.on_off,
536
+ lumi.toZigbee.lumi_power,
537
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
538
+ lumi.toZigbee.lumi_switch_power_outage_memory,
539
+ lumi.toZigbee.lumi_flip_indicator_light,
540
+ ],
541
+ exposes: [
542
+ e.switch().withEndpoint('top'),
543
+ e.switch().withEndpoint('bottom'),
544
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for top button').withEndpoint('top'),
545
+ e
546
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
547
+ .withDescription('Decoupled mode for bottom button')
548
+ .withEndpoint('bottom'),
549
+ e.power_outage_count(),
550
+ e.device_temperature().withAccess(ea.STATE),
551
+ e.flip_indicator_light(),
552
+ e.power().withAccess(ea.STATE_GET),
553
+ e.energy(),
554
+ e.voltage(),
555
+ e.power_outage_memory(),
556
+ e.action(['single_top', 'single_bottom', 'single_both', 'double_top', 'double_bottom', 'double_both']),
557
+ ],
558
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
559
+ endpoint: (device) => {
560
+ return { top: 1, bottom: 2 };
561
+ },
562
+ configure: async (device, coordinatorEndpoint) => {
563
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
564
+ },
565
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
566
+ },
567
+ {
568
+ zigbeeModel: ['lumi.switch.l1acn1'],
569
+ model: 'QBKG27LM',
570
+ vendor: 'Aqara',
571
+ description: 'Smart wall switch H1 (no neutral, single rocker)',
572
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_action_multistate],
573
+ toZigbee: [
574
+ toZigbee_1.default.on_off,
575
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
576
+ lumi.toZigbee.lumi_switch_power_outage_memory,
577
+ lumi.toZigbee.lumi_led_disabled_night,
578
+ lumi.toZigbee.lumi_flip_indicator_light,
579
+ lumi.toZigbee.lumi_switch_mode_switch,
580
+ ],
581
+ exposes: [
582
+ e.switch(),
583
+ e.device_temperature(),
584
+ e.power_outage_memory(),
585
+ e.led_disabled_night(),
586
+ e.flip_indicator_light(),
587
+ e.action(['single', 'double']),
588
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
589
+ e.power_outage_count(),
590
+ e
591
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
592
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
593
+ ],
594
+ configure: async (device, coordinatorEndpoint) => {
595
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
596
+ },
597
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
598
+ },
599
+ {
600
+ zigbeeModel: ['lumi.switch.l2acn1'],
601
+ model: 'QBKG28LM',
602
+ vendor: 'Aqara',
603
+ description: 'Smart wall switch H1 (no neutral, double rocker)',
604
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
605
+ toZigbee: [
606
+ toZigbee_1.default.on_off,
607
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
608
+ lumi.toZigbee.lumi_switch_power_outage_memory,
609
+ lumi.toZigbee.lumi_flip_indicator_light,
610
+ lumi.toZigbee.lumi_led_disabled_night,
611
+ lumi.toZigbee.lumi_switch_mode_switch,
612
+ ],
613
+ meta: { multiEndpoint: true },
614
+ endpoint: (device) => {
615
+ return { left: 1, right: 2 };
616
+ },
617
+ exposes: [
618
+ e.switch().withEndpoint('left'),
619
+ e.switch().withEndpoint('right'),
620
+ e.device_temperature(),
621
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
622
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
623
+ e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
624
+ e.power_outage_memory(),
625
+ e.flip_indicator_light(),
626
+ e.led_disabled_night(),
627
+ e
628
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
629
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
630
+ ],
631
+ configure: async (device, coordinatorEndpoint) => {
632
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
633
+ },
634
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
635
+ },
636
+ {
637
+ zigbeeModel: ['lumi.switch.l3acn1'],
638
+ model: 'QBKG29LM',
639
+ vendor: 'Aqara',
640
+ description: 'Smart wall switch H1 (no neutral, triple rocker)',
641
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
642
+ toZigbee: [
643
+ toZigbee_1.default.on_off,
644
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
645
+ lumi.toZigbee.lumi_switch_power_outage_memory,
646
+ lumi.toZigbee.lumi_flip_indicator_light,
647
+ lumi.toZigbee.lumi_led_disabled_night,
648
+ lumi.toZigbee.lumi_switch_mode_switch,
649
+ ],
650
+ meta: { multiEndpoint: true },
651
+ endpoint: (device) => ({ left: 1, center: 2, right: 3 }),
652
+ exposes: [
653
+ e.switch().withEndpoint('left'),
654
+ e.switch().withEndpoint('center'),
655
+ e.switch().withEndpoint('right'),
656
+ e.power_outage_memory(),
657
+ e.flip_indicator_light(),
658
+ e.led_disabled_night(),
659
+ e.power_outage_count(),
660
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
661
+ e
662
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
663
+ .withDescription('Decoupled mode for center button')
664
+ .withEndpoint('center'),
665
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
666
+ e
667
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
668
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
669
+ e.device_temperature().withAccess(ea.STATE),
670
+ e.action([
671
+ 'single_left',
672
+ 'double_left',
673
+ 'single_center',
674
+ 'double_center',
675
+ 'single_right',
676
+ 'double_right',
677
+ 'single_left_center',
678
+ 'double_left_center',
679
+ 'single_left_right',
680
+ 'double_left_right',
681
+ 'single_center_right',
682
+ 'double_center_right',
683
+ 'single_all',
684
+ 'double_all',
685
+ ]),
686
+ ],
687
+ configure: async (device, coordinatorEndpoint) => {
688
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
689
+ },
690
+ extend: [lumiPreventReset()],
691
+ },
692
+ {
693
+ zigbeeModel: ['lumi.switch.n1acn1'],
694
+ model: 'QBKG30LM',
695
+ vendor: 'Aqara',
696
+ description: 'Smart wall switch H1 Pro (with neutral, single rocker)',
697
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_action_multistate],
698
+ toZigbee: [
699
+ toZigbee_1.default.on_off,
700
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
701
+ lumi.toZigbee.lumi_switch_power_outage_memory,
702
+ lumi.toZigbee.lumi_led_disabled_night,
703
+ lumi.toZigbee.lumi_flip_indicator_light,
704
+ ],
705
+ exposes: [
706
+ e.switch(),
707
+ e.power(),
708
+ e.energy(),
709
+ e.voltage(),
710
+ e.device_temperature(),
711
+ e.power_outage_memory(),
712
+ e.led_disabled_night(),
713
+ e.flip_indicator_light(),
714
+ e.action(['single', 'double']),
715
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
716
+ e.power_outage_count(),
717
+ ],
718
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
719
+ },
720
+ {
721
+ zigbeeModel: ['lumi.switch.n2acn1'],
722
+ model: 'QBKG31LM',
723
+ vendor: 'Aqara',
724
+ description: 'Smart wall switch H1 Pro (with neutral, double rocker)',
725
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
726
+ endpoint: (device) => {
727
+ return { left: 1, right: 2 };
728
+ },
729
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_action_multistate],
730
+ toZigbee: [
731
+ toZigbee_1.default.on_off,
732
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
733
+ lumi.toZigbee.lumi_switch_power_outage_memory,
734
+ lumi.toZigbee.lumi_led_disabled_night,
735
+ lumi.toZigbee.lumi_flip_indicator_light,
736
+ ],
737
+ exposes: [
738
+ e.switch().withEndpoint('left'),
739
+ e.switch().withEndpoint('right'),
740
+ e.power(),
741
+ e.energy(),
742
+ e.voltage(),
743
+ e.device_temperature(),
744
+ e.power_outage_memory(),
745
+ e.led_disabled_night(),
746
+ e.flip_indicator_light(),
747
+ e.action(['single_left', 'single_right', 'single_both', 'double_left', 'double_right', 'double_both']),
748
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
749
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
750
+ e.power_outage_count(),
751
+ ],
752
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
753
+ },
754
+ {
755
+ zigbeeModel: ['lumi.switch.n3acn1'],
756
+ model: 'QBKG32LM',
757
+ vendor: 'Aqara',
758
+ description: 'Smart wall switch H1 Pro (with neutral, triple rocker)',
759
+ meta: { multiEndpoint: true },
760
+ endpoint: (device) => {
761
+ return { left: 1, center: 2, right: 3 };
762
+ },
763
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_action_multistate],
764
+ toZigbee: [
765
+ toZigbee_1.default.on_off,
766
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
767
+ lumi.toZigbee.lumi_switch_power_outage_memory,
768
+ lumi.toZigbee.lumi_led_disabled_night,
769
+ lumi.toZigbee.lumi_flip_indicator_light,
770
+ ],
771
+ exposes: [
772
+ e.switch().withEndpoint('left'),
773
+ e.switch().withEndpoint('right'),
774
+ e.switch().withEndpoint('center'),
775
+ e.power(),
776
+ e.energy(),
777
+ e.voltage(),
778
+ e.device_temperature(),
779
+ e.power_outage_memory(),
780
+ e.led_disabled_night(),
781
+ e.flip_indicator_light(),
782
+ e.action([
783
+ 'single_left',
784
+ 'double_left',
785
+ 'single_center',
786
+ 'double_center',
787
+ 'single_right',
788
+ 'double_right',
789
+ 'single_left_center',
790
+ 'double_left_center',
791
+ 'single_left_right',
792
+ 'double_left_right',
793
+ 'single_center_right',
794
+ 'double_center_right',
795
+ 'single_all',
796
+ 'double_all',
797
+ ]),
798
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
799
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
800
+ e
801
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
802
+ .withDescription('Decoupled mode for center button')
803
+ .withEndpoint('center'),
804
+ e.power_outage_count(),
805
+ ],
806
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
807
+ },
808
+ {
809
+ zigbeeModel: ['lumi.switch.l1aeu1'],
810
+ model: 'WS-EUK01',
811
+ vendor: 'Aqara',
812
+ description: 'Smart wall switch H1 EU (no neutral, single rocker)',
813
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
814
+ toZigbee: [
815
+ toZigbee_1.default.on_off,
816
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
817
+ lumi.toZigbee.lumi_switch_power_outage_memory,
818
+ lumi.toZigbee.lumi_flip_indicator_light,
819
+ lumi.toZigbee.lumi_led_disabled_night,
820
+ lumi.toZigbee.lumi_switch_mode_switch,
821
+ ],
822
+ exposes: [
823
+ e.switch(),
824
+ e.action(['single', 'double']),
825
+ e.power_outage_memory(),
826
+ e.flip_indicator_light(),
827
+ e.led_disabled_night(),
828
+ e.power_outage_count(),
829
+ e.device_temperature().withAccess(ea.STATE),
830
+ e.operation_mode_select(['control_relay', 'decoupled']).withDescription('Switches between direct relay control and action sending only'),
831
+ e
832
+ .mode_switch_select(['anti_flicker_mode', 'quick_mode'])
833
+ .withDescription('Features. Anti flicker mode can be used to solve blinking issues of some lights.' +
834
+ 'Quick mode makes the device respond faster.'),
835
+ ],
836
+ configure: async (device, coordinatorEndpoint) => {
837
+ const endpoint1 = device.getEndpoint(1);
838
+ // set "event" mode
839
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
840
+ },
841
+ extend: [lumiPreventReset()],
842
+ },
843
+ {
844
+ zigbeeModel: ['lumi.switch.l2aeu1'],
845
+ model: 'WS-EUK02',
846
+ vendor: 'Aqara',
847
+ description: 'Smart wall switch H1 EU (no neutral, double rocker)',
848
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
849
+ toZigbee: [
850
+ toZigbee_1.default.on_off,
851
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
852
+ lumi.toZigbee.lumi_switch_power_outage_memory,
853
+ lumi.toZigbee.lumi_flip_indicator_light,
854
+ lumi.toZigbee.lumi_led_disabled_night,
855
+ lumi.toZigbee.lumi_switch_mode_switch,
856
+ ],
857
+ meta: { multiEndpoint: true },
858
+ endpoint: (_device) => {
859
+ return { left: 1, right: 2 };
860
+ },
861
+ exposes: [
862
+ e.switch().withEndpoint('left'),
863
+ e.switch().withEndpoint('right'),
864
+ e.power_outage_memory(),
865
+ e.flip_indicator_light(),
866
+ e.led_disabled_night(),
867
+ e.power_outage_count(),
868
+ e.device_temperature().withAccess(ea.STATE),
869
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
870
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
871
+ e
872
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
873
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
874
+ e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
875
+ ],
876
+ configure: async (device, coordinatorEndpoint) => {
877
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
878
+ },
879
+ extend: [lumiPreventReset()],
880
+ },
881
+ {
882
+ zigbeeModel: ['lumi.switch.n1aeu1'],
883
+ model: 'WS-EUK03',
884
+ vendor: 'Aqara',
885
+ description: 'Smart wall switch H1 EU (with neutral, single rocker)',
886
+ fromZigbee: [fromZigbee_1.default.on_off, fromZigbee_1.default.electrical_measurement, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
887
+ toZigbee: [
888
+ toZigbee_1.default.on_off,
889
+ toZigbee_1.default.electrical_measurement_power,
890
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
891
+ lumi.toZigbee.lumi_switch_power_outage_memory,
892
+ lumi.toZigbee.lumi_flip_indicator_light,
893
+ lumi.toZigbee.lumi_led_disabled_night,
894
+ ],
895
+ exposes: [
896
+ e.switch(),
897
+ e.action(['single', 'double']),
898
+ e.power().withAccess(ea.STATE_GET),
899
+ e.energy(),
900
+ e.flip_indicator_light(),
901
+ e.power_outage_memory(),
902
+ e.device_temperature().withAccess(ea.STATE),
903
+ e.led_disabled_night(),
904
+ e.power_outage_count(),
905
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
906
+ ],
907
+ configure: async (device, coordinatorEndpoint) => {
908
+ const endpoint1 = device.getEndpoint(1);
909
+ // set "event" mode
910
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
911
+ },
912
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
913
+ },
914
+ {
915
+ zigbeeModel: ['lumi.switch.n2aeu1'],
916
+ model: 'WS-EUK04',
917
+ vendor: 'Aqara',
918
+ description: 'Smart wall switch H1 EU (with neutral, double rocker)',
919
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
920
+ toZigbee: [
921
+ toZigbee_1.default.on_off,
922
+ lumi.toZigbee.lumi_power,
923
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
924
+ lumi.toZigbee.lumi_switch_power_outage_memory,
925
+ lumi.toZigbee.lumi_flip_indicator_light,
926
+ lumi.toZigbee.lumi_led_disabled_night,
927
+ ],
928
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
929
+ endpoint: (device) => {
930
+ return { left: 1, right: 2 };
931
+ },
932
+ exposes: [
933
+ e.switch().withEndpoint('left'),
934
+ e.switch().withEndpoint('right'),
935
+ e.power().withAccess(ea.STATE_GET),
936
+ e.energy(),
937
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
938
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
939
+ e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
940
+ e.device_temperature().withAccess(ea.STATE),
941
+ e.power_outage_memory(),
942
+ e.flip_indicator_light(),
943
+ e.led_disabled_night(),
944
+ e.power_outage_count(),
945
+ ],
946
+ configure: async (device, coordinatorEndpoint) => {
947
+ const endpoint1 = device.getEndpoint(1);
948
+ // set "event" mode
949
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
950
+ },
951
+ extend: [lumiPreventReset()],
952
+ },
953
+ {
954
+ zigbeeModel: ['lumi.ctrl_neutral1'],
955
+ model: 'QBKG04LM',
956
+ vendor: 'Aqara',
957
+ description: 'Smart wall switch (no neutral, single rocker)',
958
+ fromZigbee: [lumi.fromZigbee.lumi_on_off, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_operation_mode_basic],
959
+ exposes: [
960
+ e.switch(),
961
+ e.action(['release', 'hold', 'double', 'single', 'hold_release']),
962
+ e.enum('operation_mode', ea.STATE_SET, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
963
+ ],
964
+ toZigbee: [toZigbee_1.default.on_off, { ...lumi.toZigbee.lumi_switch_operation_mode_basic, convertGet: null }],
965
+ endpoint: (device) => {
966
+ return { system: 1, default: 2 };
967
+ },
968
+ configure: async (device, coordinatorEndpoint) => {
969
+ // Device advertises itself as Router but is an EndDevice
970
+ device.type = 'EndDevice';
971
+ device.save();
972
+ },
973
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
974
+ },
975
+ {
976
+ zigbeeModel: ['lumi.ctrl_ln1.aq1', 'lumi.ctrl_ln1'],
977
+ model: 'QBKG11LM',
978
+ vendor: 'Aqara',
979
+ description: 'Smart wall switch (with neutral, single rocker)',
980
+ fromZigbee: [
981
+ lumi.fromZigbee.lumi_action,
982
+ lumi.fromZigbee.lumi_action_multistate,
983
+ lumi.fromZigbee.lumi_on_off,
984
+ lumi.fromZigbee.lumi_basic,
985
+ lumi.fromZigbee.lumi_operation_mode_basic,
986
+ fromZigbee_1.default.ignore_multistate_report,
987
+ lumi.fromZigbee.lumi_power,
988
+ ],
989
+ exposes: [
990
+ e.switch(),
991
+ e.power().withAccess(ea.STATE_GET),
992
+ e.device_temperature(),
993
+ e.energy(),
994
+ e.action(['single', 'double', 'release', 'hold']),
995
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
996
+ ],
997
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_operation_mode_basic, lumi.toZigbee.lumi_power],
998
+ endpoint: (device) => {
999
+ return { system: 1 };
1000
+ },
1001
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1002
+ configure: async (device, coordinatorEndpoint) => {
1003
+ device.powerSource = 'Mains (single phase)';
1004
+ device.save();
1005
+ },
1006
+ },
1007
+ {
1008
+ zigbeeModel: ['lumi.ctrl_neutral2'],
1009
+ model: 'QBKG03LM',
1010
+ vendor: 'Aqara',
1011
+ description: 'Smart wall switch (no neutral, double rocker)',
1012
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_on_off, lumi.fromZigbee.lumi_operation_mode_basic, lumi.fromZigbee.lumi_basic],
1013
+ exposes: [
1014
+ e.switch().withEndpoint('left'),
1015
+ e.switch().withEndpoint('right'),
1016
+ e.device_temperature(),
1017
+ e.action([
1018
+ 'release_left',
1019
+ 'release_right',
1020
+ 'release_both',
1021
+ 'double_left',
1022
+ 'double_right',
1023
+ 'single_left',
1024
+ 'single_right',
1025
+ 'hold_release_left',
1026
+ 'hold_release_left',
1027
+ ]),
1028
+ e
1029
+ .enum('operation_mode', ea.STATE_SET, ['control_left_relay', 'control_right_relay', 'decoupled'])
1030
+ .withDescription('Operation mode for left button')
1031
+ .withEndpoint('left')
1032
+ .withCategory('config'),
1033
+ e
1034
+ .enum('operation_mode', ea.STATE_SET, ['control_left_relay', 'control_right_relay', 'decoupled'])
1035
+ .withDescription('Operation mode for right button')
1036
+ .withEndpoint('right')
1037
+ .withCategory('config'),
1038
+ ],
1039
+ toZigbee: [toZigbee_1.default.on_off, { ...lumi.toZigbee.lumi_switch_operation_mode_basic, convertGet: null }, lumi.toZigbee.lumi_power],
1040
+ meta: { multiEndpoint: true },
1041
+ endpoint: (device) => {
1042
+ return { system: 1, left: 2, right: 3 };
1043
+ },
1044
+ configure: async (device, coordinatorEndpoint) => {
1045
+ // Device advertises itself as Router but is an EndDevice
1046
+ device.type = 'EndDevice';
1047
+ device.save();
1048
+ },
1049
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1050
+ },
1051
+ {
1052
+ zigbeeModel: ['lumi.ctrl_ln2.aq1', 'lumi.ctrl_ln2'],
1053
+ model: 'QBKG12LM',
1054
+ vendor: 'Aqara',
1055
+ description: 'Smart wall switch (with neutral, double rocker)',
1056
+ fromZigbee: [
1057
+ lumi.fromZigbee.lumi_action,
1058
+ lumi.fromZigbee.lumi_action_multistate,
1059
+ lumi.fromZigbee.lumi_on_off,
1060
+ lumi.fromZigbee.lumi_basic,
1061
+ lumi.fromZigbee.lumi_operation_mode_basic,
1062
+ lumi.fromZigbee.lumi_power,
1063
+ ],
1064
+ exposes: [
1065
+ e.switch().withEndpoint('left'),
1066
+ e.switch().withEndpoint('right'),
1067
+ e.device_temperature(),
1068
+ e.energy(),
1069
+ e.power().withAccess(ea.STATE_GET),
1070
+ e.action([
1071
+ 'single_left',
1072
+ 'single_right',
1073
+ 'single_both',
1074
+ 'double_left',
1075
+ 'double_right',
1076
+ 'double_both',
1077
+ 'hold_left',
1078
+ 'hold_right',
1079
+ 'hold_both',
1080
+ 'release_left',
1081
+ 'release_right',
1082
+ 'release_both',
1083
+ ]),
1084
+ e
1085
+ .enum('operation_mode', ea.ALL, ['control_left_relay', 'control_right_relay', 'decoupled'])
1086
+ .withDescription('Operation mode for left button')
1087
+ .withEndpoint('left'),
1088
+ e
1089
+ .enum('operation_mode', ea.ALL, ['control_left_relay', 'control_right_relay', 'decoupled'])
1090
+ .withDescription('Operation mode for right button')
1091
+ .withEndpoint('right'),
1092
+ ],
1093
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
1094
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_operation_mode_basic, lumi.toZigbee.lumi_power],
1095
+ endpoint: (device) => {
1096
+ return { left: 1, right: 2, system: 1 };
1097
+ },
1098
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1099
+ configure: async (device, coordinatorEndpoint) => {
1100
+ device.powerSource = 'Mains (single phase)';
1101
+ device.save();
1102
+ },
1103
+ },
1104
+ {
1105
+ zigbeeModel: ['lumi.remote.b286acn02'],
1106
+ model: 'WXKG07LM',
1107
+ vendor: 'Aqara',
1108
+ description: 'Wireless remote switch D1 (double rocker)',
1109
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1110
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_action_multistate],
1111
+ toZigbee: [],
1112
+ endpoint: (device) => {
1113
+ return { left: 1, right: 2, both: 3 };
1114
+ },
1115
+ exposes: [
1116
+ e.battery(),
1117
+ e.battery_voltage(),
1118
+ e.action([
1119
+ 'single_left',
1120
+ 'single_right',
1121
+ 'single_both',
1122
+ 'double_left',
1123
+ 'double_right',
1124
+ 'double_both',
1125
+ 'hold_left',
1126
+ 'hold_right',
1127
+ 'hold_both',
1128
+ ]),
1129
+ ],
1130
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
1131
+ },
1132
+ {
1133
+ zigbeeModel: ['lumi.switch.b1lacn02'],
1134
+ model: 'QBKG21LM',
1135
+ vendor: 'Aqara',
1136
+ description: 'Smart wall switch D1 (no neutral, single rocker)',
1137
+ fromZigbee: [lumi.fromZigbee.lumi_on_off, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_operation_mode_basic],
1138
+ exposes: [
1139
+ e.switch(),
1140
+ e.action(['release', 'hold', 'double', 'single', 'hold_release']),
1141
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
1142
+ ],
1143
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_operation_mode_basic],
1144
+ endpoint: (device) => {
1145
+ return { system: 1, default: 2 };
1146
+ },
1147
+ extend: [lumiPreventReset()],
1148
+ configure: async (device, coordinatorEndpoint) => {
1149
+ // Device advertises itself as Router but is an EndDevice
1150
+ device.type = 'EndDevice';
1151
+ device.powerSource = 'Mains (single phase)';
1152
+ device.save();
1153
+ },
1154
+ },
1155
+ {
1156
+ zigbeeModel: ['lumi.switch.b2lacn02'],
1157
+ model: 'QBKG22LM',
1158
+ vendor: 'Aqara',
1159
+ description: 'Smart wall switch D1 (no neutral, double rocker)',
1160
+ fromZigbee: [lumi.fromZigbee.lumi_on_off, lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_operation_mode_basic],
1161
+ exposes: [
1162
+ e.switch().withEndpoint('left'),
1163
+ e.switch().withEndpoint('right'),
1164
+ e.action([
1165
+ 'release_left',
1166
+ 'release_right',
1167
+ 'release_both',
1168
+ 'double_left',
1169
+ 'double_right',
1170
+ 'single_left',
1171
+ 'single_right',
1172
+ 'hold_release_left',
1173
+ 'hold_release_left',
1174
+ ]),
1175
+ e
1176
+ .enum('operation_mode', ea.ALL, ['control_left_relay', 'control_right_relay', 'decoupled'])
1177
+ .withDescription('Operation mode for left button')
1178
+ .withEndpoint('left'),
1179
+ e
1180
+ .enum('operation_mode', ea.ALL, ['control_left_relay', 'control_right_relay', 'decoupled'])
1181
+ .withDescription('Operation mode for right button')
1182
+ .withEndpoint('right'),
1183
+ ],
1184
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_operation_mode_basic],
1185
+ meta: { multiEndpoint: true },
1186
+ endpoint: (device) => {
1187
+ return { system: 1, left: 2, right: 3 };
1188
+ },
1189
+ extend: [lumiPreventReset()],
1190
+ configure: async (device, coordinatorEndpoint) => {
1191
+ // Device advertises itself as Router but is an EndDevice
1192
+ device.type = 'EndDevice';
1193
+ device.save();
1194
+ },
1195
+ },
1196
+ {
1197
+ zigbeeModel: ['lumi.switch.l3acn3'],
1198
+ model: 'QBKG25LM',
1199
+ vendor: 'Aqara',
1200
+ description: 'Smart wall switch D1 (no neutral, triple rocker)',
1201
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
1202
+ toZigbee: [
1203
+ toZigbee_1.default.on_off,
1204
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
1205
+ lumi.toZigbee.lumi_switch_power_outage_memory,
1206
+ lumi.toZigbee.lumi_led_disabled_night,
1207
+ lumi.toZigbee.lumi_switch_mode_switch,
1208
+ lumi.toZigbee.lumi_flip_indicator_light,
1209
+ ],
1210
+ meta: { multiEndpoint: true },
1211
+ endpoint: (device) => {
1212
+ return { left: 1, center: 2, right: 3 };
1213
+ },
1214
+ exposes: [
1215
+ e.switch().withEndpoint('left'),
1216
+ e.switch().withEndpoint('center'),
1217
+ e.switch().withEndpoint('right'),
1218
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
1219
+ e
1220
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
1221
+ .withDescription('Decoupled mode for center button')
1222
+ .withEndpoint('center'),
1223
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
1224
+ e
1225
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
1226
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
1227
+ e.power_outage_memory(),
1228
+ e.led_disabled_night(),
1229
+ e.device_temperature().withAccess(ea.STATE),
1230
+ e.flip_indicator_light(),
1231
+ e.action([
1232
+ 'left_single',
1233
+ 'left_double',
1234
+ 'center_single',
1235
+ 'center_double',
1236
+ 'right_single',
1237
+ 'right_double',
1238
+ 'single_left_center',
1239
+ 'double_left_center',
1240
+ 'single_left_right',
1241
+ 'double_left_right',
1242
+ 'single_center_right',
1243
+ 'double_center_right',
1244
+ 'single_all',
1245
+ 'double_all',
1246
+ ]),
1247
+ e.power_outage_count(),
1248
+ ],
1249
+ configure: async (device, coordinatorEndpoint) => {
1250
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
1251
+ },
1252
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1253
+ },
1254
+ {
1255
+ zigbeeModel: ['lumi.switch.n3acn3'],
1256
+ model: 'QBKG26LM',
1257
+ vendor: 'Aqara',
1258
+ description: 'Smart wall switch D1 (with neutral, triple rocker)',
1259
+ exposes: [
1260
+ e.switch().withEndpoint('left'),
1261
+ e.switch().withEndpoint('center'),
1262
+ e.switch().withEndpoint('right'),
1263
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
1264
+ e
1265
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
1266
+ .withDescription('Decoupled mode for center button')
1267
+ .withEndpoint('center'),
1268
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
1269
+ e.power().withAccess(ea.STATE),
1270
+ e.power_outage_memory(),
1271
+ e.led_disabled_night(),
1272
+ e.voltage(),
1273
+ e.energy(),
1274
+ e.device_temperature().withAccess(ea.STATE),
1275
+ e.flip_indicator_light(),
1276
+ e.action([
1277
+ 'single_left',
1278
+ 'double_left',
1279
+ 'single_center',
1280
+ 'double_center',
1281
+ 'single_right',
1282
+ 'double_right',
1283
+ 'single_left_center',
1284
+ 'double_left_center',
1285
+ 'single_left_right',
1286
+ 'double_left_right',
1287
+ 'single_center_right',
1288
+ 'double_center_right',
1289
+ 'single_all',
1290
+ 'double_all',
1291
+ ]),
1292
+ ],
1293
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_action_multistate],
1294
+ toZigbee: [
1295
+ toZigbee_1.default.on_off,
1296
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
1297
+ lumi.toZigbee.lumi_switch_power_outage_memory,
1298
+ lumi.toZigbee.lumi_led_disabled_night,
1299
+ lumi.toZigbee.lumi_flip_indicator_light,
1300
+ ],
1301
+ meta: { multiEndpoint: true },
1302
+ endpoint: (device) => {
1303
+ return { left: 1, center: 2, right: 3 };
1304
+ },
1305
+ configure: async (device, coordinatorEndpoint) => {
1306
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
1307
+ },
1308
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1309
+ },
1310
+ {
1311
+ zigbeeModel: ['lumi.switch.b1nacn02'],
1312
+ model: 'QBKG23LM',
1313
+ vendor: 'Aqara',
1314
+ description: 'Smart wall switch D1 (with neutral, single rocker)',
1315
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action_multistate],
1316
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_power, lumi.toZigbee.lumi_switch_operation_mode_basic],
1317
+ endpoint: (device) => {
1318
+ return { system: 1 };
1319
+ },
1320
+ exposes: [
1321
+ e.switch(),
1322
+ e.power().withAccess(ea.STATE_GET),
1323
+ e.energy(),
1324
+ e.device_temperature().withAccess(ea.STATE),
1325
+ e.voltage(),
1326
+ e.action(['single', 'release']),
1327
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
1328
+ ],
1329
+ configure: async (device, coordinatorEndpoint) => {
1330
+ device.type = 'Router';
1331
+ device.powerSource = 'Mains (single phase)';
1332
+ device.save();
1333
+ },
1334
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1335
+ },
1336
+ {
1337
+ zigbeeModel: ['lumi.switch.b2nacn02'],
1338
+ model: 'QBKG24LM',
1339
+ vendor: 'Aqara',
1340
+ description: 'Smart wall switch D1 (with neutral, double rocker)',
1341
+ fromZigbee: [
1342
+ fromZigbee_1.default.on_off,
1343
+ lumi.fromZigbee.lumi_power,
1344
+ lumi.fromZigbee.lumi_action_multistate,
1345
+ lumi.fromZigbee.lumi_operation_mode_basic,
1346
+ lumi.fromZigbee.lumi_specific,
1347
+ lumi.fromZigbee.lumi_basic,
1348
+ ],
1349
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_power, lumi.toZigbee.lumi_switch_operation_mode_basic],
1350
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
1351
+ endpoint: (device) => {
1352
+ return { left: 1, right: 2, system: 1 };
1353
+ },
1354
+ exposes: [
1355
+ e.switch().withEndpoint('left'),
1356
+ e.switch().withEndpoint('right'),
1357
+ e.energy(),
1358
+ e.power().withAccess(ea.STATE_GET),
1359
+ e.action(['hold_left', 'single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
1360
+ e
1361
+ .enum('operation_mode', ea.ALL, ['control_left_relay', 'decoupled'])
1362
+ .withDescription('Decoupled mode for left button')
1363
+ .withEndpoint('left'),
1364
+ e
1365
+ .enum('operation_mode', ea.ALL, ['control_right_relay', 'decoupled'])
1366
+ .withDescription('Decoupled mode for right button')
1367
+ .withEndpoint('right'),
1368
+ ],
1369
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
1370
+ },
1371
+ {
1372
+ zigbeeModel: ['lumi.switch.b1lacn01'],
1373
+ model: 'QBKG17LM',
1374
+ vendor: 'Aqara',
1375
+ description: 'Smart wall switch T1 (no neutral, single rocker)',
1376
+ extend: [
1377
+ lumiZigbeeOTA(),
1378
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true }),
1379
+ lumiLedDisabledNight(),
1380
+ lumiFlipIndicatorLight(),
1381
+ lumiAction({ actionLookup: { single: 1, double: 2 } }),
1382
+ lumiPreventReset(),
1383
+ ],
1384
+ },
1385
+ {
1386
+ zigbeeModel: ['lumi.switch.b2lacn01'],
1387
+ model: 'QBKG18LM',
1388
+ vendor: 'Aqara',
1389
+ description: 'Smart wall switch T1 (no neutral, double rocker)',
1390
+ extend: [
1391
+ lumiZigbeeOTA(),
1392
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { left: 1, right: 2 } }),
1393
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true, endpointNames: ['left', 'right'] }),
1394
+ lumiLedDisabledNight(),
1395
+ lumiFlipIndicatorLight(),
1396
+ lumiAction({ actionLookup: { single: 1, double: 2 }, buttonLookup: { left: 41, right: 42, both: 51 } }),
1397
+ lumiPreventReset(),
1398
+ ],
1399
+ },
1400
+ {
1401
+ zigbeeModel: ['lumi.switch.b1nacn01'],
1402
+ model: 'QBKG19LM',
1403
+ vendor: 'Aqara',
1404
+ description: 'Smart wall switch T1 (with neutral, single rocker)',
1405
+ extend: [
1406
+ lumiZigbeeOTA(),
1407
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true }),
1408
+ lumiLedDisabledNight(),
1409
+ lumiFlipIndicatorLight(),
1410
+ lumiAction({ actionLookup: { single: 1, double: 2 } }),
1411
+ lumiElectricityMeter(),
1412
+ lumiPower(),
1413
+ lumiPreventReset(),
1414
+ ],
1415
+ },
1416
+ {
1417
+ zigbeeModel: ['lumi.switch.b2nacn01'],
1418
+ model: 'QBKG20LM',
1419
+ vendor: 'Aqara',
1420
+ description: 'Smart wall switch T1 (with neutral, double rocker)',
1421
+ extend: [
1422
+ (0, modernExtend_1.forceDeviceType)({ type: 'Router' }),
1423
+ (0, modernExtend_1.forcePowerSource)({ powerSource: 'Mains (single phase)' }),
1424
+ lumiZigbeeOTA(),
1425
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { left: 1, right: 2 } }),
1426
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true, endpointNames: ['left', 'right'] }),
1427
+ lumiLedDisabledNight(),
1428
+ lumiFlipIndicatorLight(),
1429
+ lumiAction({ actionLookup: { single: 1, double: 2 }, buttonLookup: { left: 41, right: 42, both: 51 } }),
1430
+ lumiElectricityMeter(),
1431
+ lumiPower(),
1432
+ lumiPreventReset(),
1433
+ ],
1434
+ },
1435
+ {
1436
+ zigbeeModel: ['lumi.switch.b3l01'],
1437
+ model: 'QBKG33LM',
1438
+ vendor: 'Aqara',
1439
+ description: 'Smart wall switch T1 (no neutral, triple rocker)',
1440
+ extend: [
1441
+ lumiZigbeeOTA(),
1442
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { left: 1, center: 2, right: 3 } }),
1443
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true, endpointNames: ['left', 'center', 'right'] }),
1444
+ lumiLedDisabledNight(),
1445
+ lumiFlipIndicatorLight(),
1446
+ lumiAction({
1447
+ actionLookup: { single: 1, double: 2 },
1448
+ buttonLookup: {
1449
+ left: 41,
1450
+ center: 42,
1451
+ right: 43,
1452
+ left_center: 51,
1453
+ left_right: 52,
1454
+ center_right: 53,
1455
+ all: 61,
1456
+ },
1457
+ }),
1458
+ lumiPreventReset(),
1459
+ ],
1460
+ },
1461
+ {
1462
+ zigbeeModel: ['lumi.switch.b3n01'],
1463
+ model: 'QBKG34LM',
1464
+ vendor: 'Aqara',
1465
+ description: 'Smart wall switch T1 (with neutral, triple rocker)',
1466
+ extend: [
1467
+ lumiZigbeeOTA(),
1468
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { left: 1, center: 2, right: 3 } }),
1469
+ lumiOnOff({ powerOutageMemory: 'binary', operationMode: true, endpointNames: ['left', 'center', 'right'] }),
1470
+ lumiLedDisabledNight(),
1471
+ lumiFlipIndicatorLight(),
1472
+ lumiAction({
1473
+ actionLookup: { single: 1, double: 2 },
1474
+ buttonLookup: {
1475
+ left: 41,
1476
+ center: 42,
1477
+ right: 43,
1478
+ left_center: 51,
1479
+ left_right: 52,
1480
+ center_right: 53,
1481
+ all: 61,
1482
+ },
1483
+ }),
1484
+ lumiElectricityMeter(),
1485
+ lumiPower(),
1486
+ lumiPreventReset(),
1487
+ ],
1488
+ },
1489
+ {
1490
+ zigbeeModel: ['lumi.sens', 'lumi.sensor_ht'],
1491
+ model: 'WSDCGQ01LM',
1492
+ vendor: 'Xiaomi',
1493
+ whiteLabel: [
1494
+ { vendor: 'Xiaomi', model: 'YTC4042GL' },
1495
+ { vendor: 'Xiaomi', model: 'YTC4007CN' },
1496
+ { vendor: 'Xiaomi', model: 'YTC4018CN' },
1497
+ ],
1498
+ description: 'Mi temperature and humidity sensor',
1499
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1500
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_temperature, fromZigbee_1.default.humidity],
1501
+ toZigbee: [],
1502
+ exposes: [e.battery(), e.temperature(), e.humidity(), e.battery_voltage()],
1503
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1504
+ },
1505
+ {
1506
+ zigbeeModel: ['lumi.weather'],
1507
+ model: 'WSDCGQ11LM',
1508
+ vendor: 'Aqara',
1509
+ description: 'Temperature and humidity sensor',
1510
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1511
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_temperature, fromZigbee_1.default.humidity, fromZigbee_1.default.pressure],
1512
+ toZigbee: [],
1513
+ exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure(), e.battery_voltage()],
1514
+ configure: async (device, coordinatorEndpoint) => {
1515
+ device.powerSource = 'Battery';
1516
+ device.save();
1517
+ },
1518
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1519
+ },
1520
+ {
1521
+ zigbeeModel: ['lumi.sensor_ht.agl02'],
1522
+ model: 'WSDCGQ12LM',
1523
+ vendor: 'Aqara',
1524
+ description: 'Temperature and humidity sensor T1',
1525
+ whiteLabel: [
1526
+ { vendor: 'Aqara', model: 'TH-S02D' },
1527
+ { vendor: 'Yandex', model: 'YNDX-00523' },
1528
+ ],
1529
+ fromZigbee: [lumi.fromZigbee.lumi_specific, fromZigbee_1.default.temperature, fromZigbee_1.default.humidity, lumi.fromZigbee.lumi_pressure, fromZigbee_1.default.battery],
1530
+ toZigbee: [],
1531
+ exposes: [e.temperature(), e.humidity(), e.pressure(), e.device_temperature(), e.battery(), e.battery_voltage(), e.power_outage_count(false)],
1532
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1533
+ configure: async (device, coordinatorEndpoint) => {
1534
+ const endpoint = device.getEndpoint(1);
1535
+ const binds = ['msTemperatureMeasurement', 'msRelativeHumidity', 'msPressureMeasurement'];
1536
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
1537
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
1538
+ },
1539
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1540
+ },
1541
+ {
1542
+ zigbeeModel: ['lumi.sensor_motion'],
1543
+ model: 'RTCGQ01LM',
1544
+ vendor: 'Xiaomi',
1545
+ whiteLabel: [
1546
+ { vendor: 'Xiaomi', model: 'YTC4041GL' },
1547
+ { vendor: 'Xiaomi', model: 'YTC4004CN' },
1548
+ { vendor: 'Xiaomi', model: 'YTC4016CN' },
1549
+ { vendor: 'Xiaomi', model: 'ZHTZ02LM' },
1550
+ ],
1551
+ description: 'Mi motion sensor',
1552
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1553
+ fromZigbee: [lumi.fromZigbee.lumi_basic, fromZigbee_1.default.occupancy_with_timeout],
1554
+ toZigbee: [],
1555
+ exposes: [e.battery(), e.occupancy(), e.battery_voltage(), e.power_outage_count(false)],
1556
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1557
+ },
1558
+ {
1559
+ zigbeeModel: ['lumi.sensor_motion.aq2'],
1560
+ model: 'RTCGQ11LM',
1561
+ vendor: 'Aqara',
1562
+ description: 'Motion sensor',
1563
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1564
+ fromZigbee: [lumi.fromZigbee.lumi_basic, fromZigbee_1.default.occupancy_with_timeout, lumi.fromZigbee.lumi_illuminance],
1565
+ toZigbee: [],
1566
+ exposes: [e.battery(), e.occupancy(), e.device_temperature(), e.battery_voltage(), e.illuminance(), e.power_outage_count(false)],
1567
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1568
+ },
1569
+ {
1570
+ zigbeeModel: ['lumi.motion.agl02'],
1571
+ model: 'RTCGQ12LM',
1572
+ vendor: 'Aqara',
1573
+ description: 'Motion sensor T1',
1574
+ whiteLabel: [{ vendor: 'Yandex', model: 'YNDX-00522' }],
1575
+ fromZigbee: [lumi.fromZigbee.lumi_occupancy_illuminance, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
1576
+ toZigbee: [lumi.toZigbee.lumi_detection_interval],
1577
+ exposes: [
1578
+ e.occupancy(),
1579
+ e.illuminance(),
1580
+ e
1581
+ .numeric('detection_interval', ea.ALL)
1582
+ .withValueMin(2)
1583
+ .withValueMax(65535)
1584
+ .withUnit('s')
1585
+ .withDescription('Time interval for detecting actions'),
1586
+ e.device_temperature(),
1587
+ e.battery(),
1588
+ e.battery_voltage(),
1589
+ e.power_outage_count(false),
1590
+ ],
1591
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1592
+ configure: async (device, coordinatorEndpoint) => {
1593
+ const endpoint = device.getEndpoint(1);
1594
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
1595
+ await endpoint.read('manuSpecificLumi', [0x0102], { manufacturerCode: manufacturerCode });
1596
+ },
1597
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1598
+ },
1599
+ {
1600
+ zigbeeModel: ['lumi.motion.agl04'],
1601
+ model: 'RTCGQ13LM',
1602
+ vendor: 'Aqara',
1603
+ description: 'High precision motion sensor',
1604
+ fromZigbee: [lumi.fromZigbee.lumi_occupancy, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
1605
+ toZigbee: [lumi.toZigbee.lumi_detection_interval, lumi.toZigbee.lumi_motion_sensitivity],
1606
+ exposes: [
1607
+ e.occupancy(),
1608
+ e.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
1609
+ e
1610
+ .numeric('detection_interval', ea.ALL)
1611
+ .withValueMin(2)
1612
+ .withValueMax(65535)
1613
+ .withUnit('s')
1614
+ .withDescription('Time interval for detecting actions'),
1615
+ e.device_temperature(),
1616
+ e.battery(),
1617
+ e.battery_voltage(),
1618
+ e.power_outage_count(false),
1619
+ ],
1620
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1621
+ configure: async (device, coordinatorEndpoint) => {
1622
+ const endpoint = device.getEndpoint(1);
1623
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
1624
+ await endpoint.read('manuSpecificLumi', [0x0102], { manufacturerCode: manufacturerCode });
1625
+ await endpoint.read('manuSpecificLumi', [0x010c], { manufacturerCode: manufacturerCode });
1626
+ },
1627
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1628
+ },
1629
+ {
1630
+ zigbeeModel: ['lumi.motion.ac02'],
1631
+ model: 'RTCGQ14LM',
1632
+ vendor: 'Aqara',
1633
+ whiteLabel: [{ vendor: 'Aqara', model: 'MS-S02' }],
1634
+ description: 'Motion sensor P1',
1635
+ fromZigbee: [lumi.fromZigbee.lumi_occupancy_illuminance, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
1636
+ toZigbee: [lumi.toZigbee.lumi_detection_interval, lumi.toZigbee.lumi_motion_sensitivity, lumi.toZigbee.lumi_trigger_indicator],
1637
+ exposes: [
1638
+ e.occupancy(),
1639
+ e.illuminance(),
1640
+ e
1641
+ .motion_sensitivity_select(['low', 'medium', 'high'])
1642
+ .withDescription('Select motion sensitivity to use. Press pairing button right before changing this otherwise it will fail.'),
1643
+ e
1644
+ .detection_interval()
1645
+ .withDescription('Time interval between action detection. Press pairing button right before changing this otherwise it will fail.'),
1646
+ e
1647
+ .trigger_indicator()
1648
+ .withDescription('When this option is enabled then ' +
1649
+ 'blue LED will blink once when motion is detected. ' +
1650
+ 'Press pairing button right before changing this otherwise it will fail.'),
1651
+ e.device_temperature(),
1652
+ e.battery(),
1653
+ e.battery_voltage(),
1654
+ ],
1655
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1656
+ configure: async (device, coordinatorEndpoint) => {
1657
+ const endpoint = device.getEndpoint(1);
1658
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
1659
+ await endpoint.read('manuSpecificLumi', [0x0102], { manufacturerCode: manufacturerCode });
1660
+ await endpoint.read('manuSpecificLumi', [0x010c], { manufacturerCode: manufacturerCode });
1661
+ await endpoint.read('manuSpecificLumi', [0x0152], { manufacturerCode: manufacturerCode });
1662
+ },
1663
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1664
+ },
1665
+ {
1666
+ zigbeeModel: ['lumi.motion.acn001'],
1667
+ model: 'RTCGQ15LM',
1668
+ vendor: 'Aqara',
1669
+ description: 'Motion sensor E1',
1670
+ fromZigbee: [lumi.fromZigbee.lumi_occupancy_illuminance, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
1671
+ toZigbee: [lumi.toZigbee.lumi_detection_interval],
1672
+ exposes: [
1673
+ e.occupancy(),
1674
+ e.illuminance(),
1675
+ e
1676
+ .numeric('detection_interval', ea.ALL)
1677
+ .withValueMin(2)
1678
+ .withValueMax(65535)
1679
+ .withUnit('s')
1680
+ .withDescription('Time interval for detecting actions'),
1681
+ e.device_temperature(),
1682
+ e.battery(),
1683
+ e.battery_voltage(),
1684
+ e.power_outage_count(false),
1685
+ ],
1686
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1687
+ configure: async (device, coordinatorEndpoint) => {
1688
+ const endpoint = device.getEndpoint(1);
1689
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
1690
+ await endpoint.read('manuSpecificLumi', [0x0102], { manufacturerCode: manufacturerCode });
1691
+ },
1692
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1693
+ },
1694
+ {
1695
+ zigbeeModel: ['lumi.motion.ac01'],
1696
+ model: 'RTCZCGQ11LM',
1697
+ vendor: 'Aqara',
1698
+ description: 'Presence sensor FP1',
1699
+ fromZigbee: [lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_presence_region_events],
1700
+ toZigbee: [
1701
+ lumi.toZigbee.lumi_presence,
1702
+ lumi.toZigbee.lumi_monitoring_mode,
1703
+ lumi.toZigbee.lumi_approach_distance,
1704
+ lumi.toZigbee.lumi_motion_sensitivity,
1705
+ lumi.toZigbee.lumi_reset_nopresence_status,
1706
+ lumi.toZigbee.lumi_presence_region_upsert,
1707
+ lumi.toZigbee.lumi_presence_region_delete,
1708
+ ],
1709
+ exposes: [
1710
+ e.presence().withAccess(ea.STATE_GET),
1711
+ e.device_temperature(),
1712
+ e.power_outage_count(),
1713
+ e
1714
+ .enum('presence_event', ea.STATE, ['enter', 'leave', 'left_enter', 'right_leave', 'right_enter', 'left_leave', 'approach', 'away'])
1715
+ .withDescription('Presence events: "enter", "leave", "left_enter", "right_leave", "right_enter", "left_leave", "approach", "away"'),
1716
+ e
1717
+ .enum('monitoring_mode', ea.ALL, ['undirected', 'left_right'])
1718
+ .withDescription('Monitoring mode with or without considering right and left sides'),
1719
+ e.enum('approach_distance', ea.ALL, ['far', 'medium', 'near']).withDescription('The distance at which the sensor detects approaching'),
1720
+ e
1721
+ .enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high'])
1722
+ .withDescription('Different sensitivities means different static human body recognition rate and response speed of occupied'),
1723
+ e.enum('reset_nopresence_status', ea.SET, ['']).withDescription('Reset the status of no presence'),
1724
+ e
1725
+ .enum('action', ea.STATE, ['region_*_enter', 'region_*_leave', 'region_*_occupied', 'region_*_unoccupied'])
1726
+ .withDescription('Most recent region event. Event template is "region_<REGION_ID>_<EVENT_TYPE>", ' +
1727
+ 'where <REGION_ID> is region number (1-10), <EVENT_TYPE> is one of "enter", "leave", "occupied", "unoccupied". ' +
1728
+ '"enter" / "leave" events are usually triggered first, followed by "occupied" / "unoccupied" after a couple of seconds.'),
1729
+ e
1730
+ .composite('region_upsert', 'region_upsert', ea.SET)
1731
+ .withDescription('Definition of a new region to be added (or replace existing one). ' +
1732
+ 'Creating or modifying a region requires you to define which zones of a 7x4 detection grid ' +
1733
+ 'should be active for that zone. Regions can overlap, meaning that a zone can be defined ' +
1734
+ 'in more than one region (eg. "zone x = 1 & y = 1" can be added to region 1 & 2). ' +
1735
+ '"Zone x = 1 & y = 1" is the nearest zone on the right (from sensor\'s perspective, along the detection path).')
1736
+ .withFeature(e
1737
+ .numeric('region_id', ea.SET)
1738
+ .withValueMin(lumi.presence.constants.region_config_regionId_min)
1739
+ .withValueMax(lumi.presence.constants.region_config_regionId_max))
1740
+ .withFeature(e
1741
+ .list('zones', ea.SET, e
1742
+ .composite('Zone position', 'zone_position', ea.SET)
1743
+ .withFeature(e
1744
+ .numeric('x', ea.SET)
1745
+ .withValueMin(lumi.presence.constants.region_config_zoneX_min)
1746
+ .withValueMax(lumi.presence.constants.region_config_zoneX_max))
1747
+ .withFeature(e
1748
+ .numeric('y', ea.SET)
1749
+ .withValueMin(lumi.presence.constants.region_config_zoneY_min)
1750
+ .withValueMax(lumi.presence.constants.region_config_zoneY_max)))
1751
+ .withDescription('list of dictionaries in the format {"x": 1, "y": 1}, {"x": 2, "y": 1}')),
1752
+ e
1753
+ .composite('region_delete', 'region_delete', ea.SET)
1754
+ .withDescription('Region definition to be deleted from the device.')
1755
+ .withFeature(e
1756
+ .numeric('region_id', ea.SET)
1757
+ .withValueMin(lumi.presence.constants.region_config_regionId_min)
1758
+ .withValueMax(lumi.presence.constants.region_config_regionId_max)),
1759
+ ],
1760
+ configure: async (device, coordinatorEndpoint) => {
1761
+ device.softwareBuildID = `${device.applicationVersion}`;
1762
+ device.save();
1763
+ const endpoint = device.getEndpoint(1);
1764
+ await endpoint.read('manuSpecificLumi', [0x010c], { manufacturerCode: manufacturerCode });
1765
+ await endpoint.read('manuSpecificLumi', [0x0142], { manufacturerCode: manufacturerCode });
1766
+ await endpoint.read('manuSpecificLumi', [0x0144], { manufacturerCode: manufacturerCode });
1767
+ await endpoint.read('manuSpecificLumi', [0x0146], { manufacturerCode: manufacturerCode });
1768
+ },
1769
+ extend: [lumiZigbeeOTA()],
1770
+ },
1771
+ {
1772
+ zigbeeModel: ['lumi.sensor_occupy.agl1'],
1773
+ model: 'FP1E',
1774
+ vendor: 'Aqara',
1775
+ description: 'Presence sensor',
1776
+ fromZigbee: [lumi.fromZigbee.lumi_specific],
1777
+ toZigbee: [lumi.toZigbee.lumi_motion_sensitivity],
1778
+ exposes: [
1779
+ e.device_temperature(),
1780
+ e.power_outage_count(),
1781
+ e.motion_sensitivity_select(['low', 'medium', 'high']).withDescription('Select motion sensitivity to use.'),
1782
+ ],
1783
+ configure: async (device, coordinatorEndpoint) => {
1784
+ // Retrieve motion sensitivity value
1785
+ const endpoint = device.getEndpoint(1);
1786
+ await endpoint.read('manuSpecificLumi', [0x010c], { manufacturerCode: manufacturerCode });
1787
+ },
1788
+ extend: [
1789
+ lumiZigbeeOTA(),
1790
+ lumi.lumiModernExtend.fp1ePresence(),
1791
+ lumi.lumiModernExtend.fp1eMovement(),
1792
+ lumi.lumiModernExtend.fp1eTargetDistance(),
1793
+ lumi.lumiModernExtend.fp1eDetectionRange(),
1794
+ lumi.lumiModernExtend.fp1eSpatialLearning(),
1795
+ lumi.lumiModernExtend.fp1eRestartDevice(),
1796
+ (0, modernExtend_1.identify)(),
1797
+ ],
1798
+ },
1799
+ {
1800
+ zigbeeModel: ['lumi.sensor_magnet'],
1801
+ model: 'MCCGQ01LM',
1802
+ vendor: 'Xiaomi',
1803
+ whiteLabel: [
1804
+ { vendor: 'Xiaomi', model: 'YTC4039GL' },
1805
+ { vendor: 'Xiaomi', model: 'YTC4005CN' },
1806
+ { vendor: 'Xiaomi', model: 'YTC4015CN' },
1807
+ { vendor: 'Xiaomi', model: 'ZHTZ02LM' },
1808
+ ],
1809
+ description: 'Mi door and window sensor',
1810
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1811
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_contact],
1812
+ toZigbee: [],
1813
+ exposes: [e.battery(), e.contact(), e.battery_voltage(), e.power_outage_count(false)],
1814
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1815
+ },
1816
+ {
1817
+ zigbeeModel: ['lumi.sensor_magnet.aq2'],
1818
+ model: 'MCCGQ11LM',
1819
+ vendor: 'Aqara',
1820
+ description: 'Door and window sensor',
1821
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1822
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_contact],
1823
+ toZigbee: [],
1824
+ exposes: [e.battery(), e.contact(), e.device_temperature(), e.battery_voltage(), e.power_outage_count(false), e.trigger_count()],
1825
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1826
+ configure: async (device) => {
1827
+ device.powerSource = 'Battery';
1828
+ device.save();
1829
+ },
1830
+ },
1831
+ {
1832
+ zigbeeModel: ['lumi.sensor_wleak.aq1'],
1833
+ model: 'SJCGQ11LM',
1834
+ vendor: 'Aqara',
1835
+ description: 'Water leak sensor',
1836
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1837
+ fromZigbee: [lumi.fromZigbee.lumi_basic, fromZigbee_1.default.ias_water_leak_alarm_1],
1838
+ toZigbee: [],
1839
+ exposes: [
1840
+ e.battery(),
1841
+ e.water_leak(),
1842
+ e.battery_low(),
1843
+ e.battery_voltage(),
1844
+ e.device_temperature(),
1845
+ e.power_outage_count(false),
1846
+ e.trigger_count(),
1847
+ ],
1848
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1849
+ },
1850
+ {
1851
+ zigbeeModel: ['lumi.flood.agl02'],
1852
+ model: 'SJCGQ12LM',
1853
+ vendor: 'Aqara',
1854
+ description: 'Water leak sensor T1',
1855
+ whiteLabel: [
1856
+ { vendor: 'Aqara', model: 'WL-S02D' },
1857
+ { vendor: 'Yandex', model: 'YNDX-00521' },
1858
+ ],
1859
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1860
+ fromZigbee: [lumi.fromZigbee.lumi_basic, fromZigbee_1.default.ias_water_leak_alarm_1, lumi.fromZigbee.lumi_specific],
1861
+ toZigbee: [],
1862
+ exposes: [e.battery(), e.water_leak(), e.battery_low(), e.tamper(), e.battery_voltage()],
1863
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
1864
+ },
1865
+ {
1866
+ zigbeeModel: ['lumi.sensor_cube', 'lumi.sensor_cube.aqgl01'],
1867
+ model: 'MFKZQ01LM',
1868
+ vendor: 'Aqara',
1869
+ description: 'Cube',
1870
+ whiteLabel: [{ vendor: 'Xiaomi', model: 'MFKZQ01LM' }],
1871
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
1872
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_action_analog],
1873
+ exposes: [
1874
+ e.battery(),
1875
+ e.battery_voltage(),
1876
+ e.angle('action_angle'),
1877
+ e.device_temperature(),
1878
+ e.power_outage_count(false),
1879
+ e.cube_side('action_from_side'),
1880
+ e.cube_side('action_side'),
1881
+ e.cube_side('action_to_side'),
1882
+ e.cube_side('side'),
1883
+ e.action(['shake', 'throw', 'wakeup', 'fall', 'tap', 'slide', 'flip180', 'flip90', 'rotate_left', 'rotate_right']),
1884
+ ],
1885
+ toZigbee: [],
1886
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
1887
+ },
1888
+ {
1889
+ zigbeeModel: ['lumi.plug'],
1890
+ model: 'ZNCZ02LM',
1891
+ description: 'Mi smart plug',
1892
+ vendor: 'Xiaomi',
1893
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_basic, fromZigbee_1.default.ignore_occupancy_report, fromZigbee_1.default.ignore_illuminance_report],
1894
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_power_outage_memory, lumi.toZigbee.lumi_power],
1895
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.power_outage_memory()],
1896
+ extend: [lumiZigbeeOTA()],
1897
+ },
1898
+ {
1899
+ zigbeeModel: ['lumi.plug.mitw01'],
1900
+ model: 'ZNCZ03LM',
1901
+ description: 'Mi smart plug TW',
1902
+ vendor: 'Xiaomi',
1903
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_basic, fromZigbee_1.default.ignore_occupancy_report, fromZigbee_1.default.ignore_illuminance_report],
1904
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_power],
1905
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE), e.voltage()],
1906
+ },
1907
+ {
1908
+ zigbeeModel: ['lumi.plug.mmeu01'],
1909
+ model: 'ZNCZ04LM',
1910
+ description: 'Mi smart plug EU',
1911
+ vendor: 'Xiaomi',
1912
+ fromZigbee: [
1913
+ fromZigbee_1.default.on_off,
1914
+ lumi.fromZigbee.lumi_power,
1915
+ lumi.fromZigbee.lumi_specific,
1916
+ fromZigbee_1.default.ignore_occupancy_report,
1917
+ fromZigbee_1.default.ignore_illuminance_report,
1918
+ fromZigbee_1.default.ignore_time_read,
1919
+ ],
1920
+ toZigbee: [
1921
+ toZigbee_1.default.on_off,
1922
+ lumi.toZigbee.lumi_power,
1923
+ lumi.toZigbee.lumi_switch_power_outage_memory,
1924
+ lumi.toZigbee.lumi_auto_off,
1925
+ lumi.toZigbee.lumi_led_disabled_night,
1926
+ lumi.toZigbee.lumi_overload_protection,
1927
+ ],
1928
+ exposes: [
1929
+ e.switch(),
1930
+ e.power().withAccess(ea.STATE_GET),
1931
+ e.energy(),
1932
+ e.device_temperature().withAccess(ea.STATE),
1933
+ e.voltage(),
1934
+ e.current(),
1935
+ e.consumer_connected(),
1936
+ e.led_disabled_night(),
1937
+ e.power_outage_memory(),
1938
+ e.auto_off(20),
1939
+ e.overload_protection(100, 2300),
1940
+ ],
1941
+ extend: [lumiZigbeeOTA()],
1942
+ },
1943
+ {
1944
+ zigbeeModel: ['lumi.plug.maus01'],
1945
+ model: 'ZNCZ12LM',
1946
+ description: 'Smart plug US',
1947
+ vendor: 'Aqara',
1948
+ fromZigbee: [
1949
+ fromZigbee_1.default.on_off,
1950
+ lumi.fromZigbee.lumi_power,
1951
+ lumi.fromZigbee.lumi_specific,
1952
+ lumi.fromZigbee.lumi_basic,
1953
+ fromZigbee_1.default.ignore_occupancy_report,
1954
+ fromZigbee_1.default.ignore_illuminance_report,
1955
+ ],
1956
+ toZigbee: [
1957
+ toZigbee_1.default.on_off,
1958
+ lumi.toZigbee.lumi_power,
1959
+ lumi.toZigbee.lumi_switch_power_outage_memory,
1960
+ lumi.toZigbee.lumi_auto_off,
1961
+ lumi.toZigbee.lumi_led_disabled_night,
1962
+ lumi.toZigbee.lumi_overload_protection,
1963
+ ],
1964
+ exposes: [
1965
+ e.switch(),
1966
+ e.power().withAccess(ea.STATE_GET),
1967
+ e.energy(),
1968
+ e.device_temperature().withAccess(ea.STATE),
1969
+ e.voltage(),
1970
+ e.current(),
1971
+ e.consumer_connected(),
1972
+ e.led_disabled_night(),
1973
+ e.power_outage_memory(),
1974
+ e.auto_off(20),
1975
+ e.overload_protection(100, 2300),
1976
+ ],
1977
+ extend: [lumiZigbeeOTA()],
1978
+ },
1979
+ {
1980
+ zigbeeModel: ['lumi.plug.maeu01'],
1981
+ model: 'SP-EUC01',
1982
+ description: 'Smart plug EU',
1983
+ vendor: 'Aqara',
1984
+ extend: [(0, modernExtend_1.forceDeviceType)({ type: 'Router' }), lumiZigbeeOTA()],
1985
+ fromZigbee: [
1986
+ fromZigbee_1.default.on_off,
1987
+ lumi.fromZigbee.lumi_basic,
1988
+ fromZigbee_1.default.electrical_measurement,
1989
+ fromZigbee_1.default.metering,
1990
+ lumi.fromZigbee.lumi_specific,
1991
+ lumi.fromZigbee.lumi_power,
1992
+ fromZigbee_1.default.device_temperature,
1993
+ ],
1994
+ toZigbee: [
1995
+ toZigbee_1.default.on_off,
1996
+ lumi.toZigbee.lumi_switch_power_outage_memory,
1997
+ lumi.toZigbee.lumi_led_disabled_night,
1998
+ lumi.toZigbee.lumi_overload_protection,
1999
+ lumi.toZigbee.lumi_auto_off,
2000
+ lumi.toZigbee.lumi_socket_button_lock,
2001
+ ],
2002
+ configure: async (device, coordinatorEndpoint) => {
2003
+ const endpoint = device.getEndpoint(1);
2004
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
2005
+ await reporting.onOff(endpoint);
2006
+ // Not all plugs support electricity measurements:
2007
+ // - https://github.com/Koenkk/zigbee2mqtt/issues/6861
2008
+ // - https://github.com/Koenkk/zigbee-herdsman-converters/issues/1050#issuecomment-673111969
2009
+ // Voltage and current are not supported:
2010
+ // - https://github.com/Koenkk/zigbee-herdsman-converters/issues/1050
2011
+ try {
2012
+ await reporting.bind(endpoint, coordinatorEndpoint, ['haElectricalMeasurement']);
2013
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
2014
+ }
2015
+ catch (e) {
2016
+ logger_1.logger.warning(`SP-EUC01 failed to setup electricity measurements (${e.message})`, NS);
2017
+ logger_1.logger.debug(e.stack, NS);
2018
+ }
2019
+ try {
2020
+ await reporting.bind(endpoint, coordinatorEndpoint, ['seMetering']);
2021
+ await reporting.readMeteringMultiplierDivisor(endpoint);
2022
+ await reporting.currentSummDelivered(endpoint, { change: 0 });
2023
+ }
2024
+ catch (e) {
2025
+ logger_1.logger.warning(`SP-EUC01 failed to setup metering (${e.message})`, NS);
2026
+ logger_1.logger.debug(e.stack, NS);
2027
+ }
2028
+ },
2029
+ onEvent: async (type, data, device) => {
2030
+ const switchEndpoint = device.getEndpoint(1);
2031
+ if (switchEndpoint == null) {
2032
+ return;
2033
+ }
2034
+ // This device doesn't support temperature reporting.
2035
+ // Therefore we read the temperature every 30 min.
2036
+ if (type === 'stop') {
2037
+ clearInterval(globalStore.getValue(device, 'interval'));
2038
+ globalStore.clearValue(device, 'interval');
2039
+ }
2040
+ else if (!globalStore.hasValue(device, 'interval')) {
2041
+ const interval = setInterval(async () => {
2042
+ try {
2043
+ await switchEndpoint.read('genDeviceTempCfg', ['currentTemperature']);
2044
+ }
2045
+ catch {
2046
+ // Do nothing
2047
+ }
2048
+ }, 1800000);
2049
+ globalStore.putValue(device, 'interval', interval);
2050
+ }
2051
+ },
2052
+ exposes: [
2053
+ e.switch(),
2054
+ e.power(),
2055
+ e.energy(),
2056
+ e.power_outage_memory(),
2057
+ e.voltage(),
2058
+ e.current(),
2059
+ e.device_temperature().withDescription('Device temperature (polled every 30 min)'),
2060
+ e.consumer_connected(),
2061
+ e.led_disabled_night(),
2062
+ e.overload_protection(100, 2300),
2063
+ e.auto_off(20),
2064
+ e.button_lock(),
2065
+ ],
2066
+ },
2067
+ {
2068
+ zigbeeModel: ['lumi.plug.aq1'],
2069
+ model: 'ZNCZ11LM',
2070
+ vendor: 'Aqara',
2071
+ description: 'Smart plug',
2072
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, fromZigbee_1.default.ignore_occupancy_report, lumi.fromZigbee.lumi_basic],
2073
+ toZigbee: [
2074
+ toZigbee_1.default.on_off,
2075
+ lumi.toZigbee.lumi_power,
2076
+ lumi.toZigbee.lumi_led_disabled_night,
2077
+ lumi.toZigbee.lumi_switch_power_outage_memory,
2078
+ lumi.toZigbee.lumi_auto_off,
2079
+ ],
2080
+ exposes: [
2081
+ e.switch(),
2082
+ e.power().withAccess(ea.STATE_GET),
2083
+ e.energy(),
2084
+ e.device_temperature(),
2085
+ e.voltage(),
2086
+ e.power_outage_memory(),
2087
+ e.led_disabled_night(),
2088
+ e.auto_off(30),
2089
+ ],
2090
+ extend: [(0, modernExtend_1.customTimeResponse)('2000_LOCAL')],
2091
+ },
2092
+ {
2093
+ zigbeeModel: ['lumi.ctrl_86plug', 'lumi.ctrl_86plug.aq1'],
2094
+ model: 'QBCZ11LM',
2095
+ description: 'Smart wall outlet',
2096
+ vendor: 'Aqara',
2097
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_basic],
2098
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_power_outage_memory, lumi.toZigbee.lumi_power],
2099
+ exposes: [
2100
+ e.switch(),
2101
+ e.power().withAccess(ea.STATE_GET),
2102
+ e.energy(),
2103
+ e.device_temperature().withAccess(ea.STATE),
2104
+ e.voltage(),
2105
+ e.power_outage_memory(),
2106
+ ],
2107
+ extend: [lumiZigbeeOTA()],
2108
+ },
2109
+ {
2110
+ zigbeeModel: ['lumi.sensor_smoke'],
2111
+ model: 'JTYJ-GD-01LM/BW',
2112
+ description: 'Mijia Honeywell smoke detector',
2113
+ vendor: 'Xiaomi',
2114
+ whiteLabel: [{ vendor: 'Xiaomi', model: 'YTC4020RT' }],
2115
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2116
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_smoke],
2117
+ toZigbee: [lumi.toZigbee.lumi_sensitivity, lumi.toZigbee.lumi_selftest],
2118
+ exposes: [
2119
+ e.smoke(),
2120
+ e.battery_low(),
2121
+ e.tamper(),
2122
+ e.battery(),
2123
+ e.enum('sensitivity', ea.STATE_SET, ['low', 'medium', 'high']),
2124
+ e.numeric('smoke_density', ea.STATE),
2125
+ e.enum('selftest', ea.SET, ['']),
2126
+ e.battery_voltage(),
2127
+ e.binary('test', ea.STATE, true, false).withDescription('Test mode activated'),
2128
+ e.device_temperature(),
2129
+ e.power_outage_count(false),
2130
+ ],
2131
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2132
+ },
2133
+ {
2134
+ zigbeeModel: ['lumi.sensor_natgas'],
2135
+ model: 'JTQJ-BF-01LM/BW',
2136
+ vendor: 'Xiaomi',
2137
+ whiteLabel: [{ vendor: 'Xiaomi', model: 'YTC4019RT' }],
2138
+ description: 'Mijia Honeywell gas leak detector',
2139
+ fromZigbee: [fromZigbee_1.default.ias_gas_alarm_1, lumi.fromZigbee.lumi_gas_sensitivity, lumi.fromZigbee.lumi_gas_density],
2140
+ toZigbee: [lumi.toZigbee.lumi_sensitivity, lumi.toZigbee.lumi_selftest],
2141
+ exposes: [
2142
+ e.gas(),
2143
+ e.tamper(),
2144
+ e.enum('sensitivity', ea.STATE_SET, ['low', 'medium', 'high']),
2145
+ e.numeric('gas_density', ea.STATE),
2146
+ e.enum('selftest', ea.SET, ['']),
2147
+ ],
2148
+ configure: async (device, coordinatorEndpoint) => {
2149
+ device.powerSource = 'Mains (single phase)';
2150
+ device.type = 'Router';
2151
+ device.save();
2152
+ },
2153
+ },
2154
+ {
2155
+ zigbeeModel: ['lumi.sensor_gas.acn02'],
2156
+ model: 'JT-BZ-01AQ/A',
2157
+ vendor: 'Aqara',
2158
+ description: 'Smart natural gas detector',
2159
+ whiteLabel: [{ vendor: 'Aqara', model: 'JT-BZ-03AQ/A' }],
2160
+ fromZigbee: [lumi.fromZigbee.lumi_specific],
2161
+ toZigbee: [
2162
+ lumi.toZigbee.lumi_alarm,
2163
+ lumi.toZigbee.lumi_density,
2164
+ lumi.toZigbee.lumi_gas_sensitivity,
2165
+ lumi.toZigbee.lumi_selftest,
2166
+ lumi.toZigbee.lumi_buzzer,
2167
+ lumi.toZigbee.lumi_buzzer_manual,
2168
+ lumi.toZigbee.lumi_linkage_alarm,
2169
+ lumi.toZigbee.lumi_state,
2170
+ lumi.toZigbee.lumi_power_outage_count,
2171
+ ],
2172
+ exposes: [
2173
+ e.gas().withAccess(ea.STATE_GET),
2174
+ e.numeric('gas_density', ea.STATE_GET).withUnit('%LEL').withDescription('Value of gas concentration'),
2175
+ e
2176
+ .enum('gas_sensitivity', ea.ALL, ['10%LEL', '15%LEL'])
2177
+ .withDescription('Gas concentration value at which an alarm is triggered ("10%LEL" is more sensitive than "15%LEL")'),
2178
+ e
2179
+ .enum('selftest', ea.SET, ['selftest'])
2180
+ .withDescription('Starts the self-test process (checking the indicator light and buzzer work properly)'),
2181
+ e.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
2182
+ e
2183
+ .enum('buzzer', ea.SET, ['mute', 'alarm'])
2184
+ .withDescription('The buzzer can be muted and alarmed manually. ' +
2185
+ 'During a gas alarm, the buzzer can be manually muted for 10 minutes ("mute"), but cannot be unmuted manually ' +
2186
+ 'before this timeout expires. The buzzer cannot be pre-muted, as this function only works during a gas alarm. ' +
2187
+ 'During the absence of a gas alarm, the buzzer can be manually alarmed ("alarm") and disalarmed ("mute"), ' +
2188
+ 'but for this "linkage_alarm" option must be enabled'),
2189
+ e.binary('buzzer_manual_alarm', ea.STATE_GET, true, false).withDescription('Buzzer alarmed (manually)'),
2190
+ e.binary('buzzer_manual_mute', ea.STATE_GET, true, false).withDescription('Buzzer muted (manually)'),
2191
+ e
2192
+ .binary('linkage_alarm', ea.ALL, true, false)
2193
+ .withDescription('When this option is enabled and a gas ' +
2194
+ 'alarm has occurred, then "linkage_alarm_state"=true, and when the gas alarm has ended or the buzzer has ' +
2195
+ 'been manually muted, then "linkage_alarm_state"=false'),
2196
+ e.binary('linkage_alarm_state', ea.STATE, true, false).withDescription('"linkage_alarm" is triggered'),
2197
+ e
2198
+ .binary('state', ea.STATE_GET, 'preparation', 'work')
2199
+ .withDescription('"Preparation" or "work" ' +
2200
+ '(measurement of the gas concentration value and triggering of an alarm are only performed in the "work" state)'),
2201
+ e.power_outage_count().withAccess(ea.STATE_GET),
2202
+ ],
2203
+ configure: async (device, coordinatorEndpoint) => {
2204
+ const endpoint = device.getEndpoint(1);
2205
+ await endpoint.write('manuSpecificLumi', { 0x014b: { value: 1, type: 0x20 } }, { manufacturerCode: manufacturerCode });
2206
+ await endpoint.read('manuSpecificLumi', [0x013a], { manufacturerCode: manufacturerCode });
2207
+ await endpoint.read('manuSpecificLumi', [0x013b], { manufacturerCode: manufacturerCode });
2208
+ await endpoint.read('manuSpecificLumi', [0x013d], { manufacturerCode: manufacturerCode });
2209
+ await endpoint.read('manuSpecificLumi', [0x0126], { manufacturerCode: manufacturerCode });
2210
+ await endpoint.read('manuSpecificLumi', [0x0139], { manufacturerCode: manufacturerCode });
2211
+ await endpoint.read('manuSpecificLumi', [0x010c], { manufacturerCode: manufacturerCode });
2212
+ await endpoint.read('manuSpecificLumi', [0x014b], { manufacturerCode: manufacturerCode });
2213
+ await endpoint.read('manuSpecificLumi', [0x0002], { manufacturerCode: manufacturerCode });
2214
+ },
2215
+ extend: [lumiZigbeeOTA()],
2216
+ },
2217
+ {
2218
+ zigbeeModel: ['lumi.sensor_smoke.acn03'],
2219
+ model: 'JY-GZ-01AQ',
2220
+ vendor: 'Aqara',
2221
+ description: 'Smart smoke detector',
2222
+ whiteLabel: [{ vendor: 'Aqara', model: 'JY-GZ-03AQ' }],
2223
+ fromZigbee: [lumi.fromZigbee.lumi_specific, fromZigbee_1.default.battery],
2224
+ toZigbee: [
2225
+ lumi.toZigbee.lumi_alarm,
2226
+ lumi.toZigbee.lumi_density,
2227
+ lumi.toZigbee.lumi_selftest,
2228
+ lumi.toZigbee.lumi_buzzer,
2229
+ lumi.toZigbee.lumi_buzzer_manual,
2230
+ lumi.toZigbee.lumi_heartbeat_indicator,
2231
+ lumi.toZigbee.lumi_linkage_alarm,
2232
+ ],
2233
+ exposes: [
2234
+ e.smoke().withAccess(ea.STATE_GET),
2235
+ e.numeric('smoke_density', ea.STATE_GET).withDescription('Value of smoke concentration'),
2236
+ e.numeric('smoke_density_dbm', ea.STATE_GET).withUnit('dB/m').withDescription('Value of smoke concentration in dB/m'),
2237
+ e
2238
+ .enum('selftest', ea.SET, ['selftest'])
2239
+ .withDescription('Starts the self-test process (checking the indicator light and buzzer work properly)'),
2240
+ e.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
2241
+ e
2242
+ .enum('buzzer', ea.SET, ['mute', 'alarm'])
2243
+ .withDescription('The buzzer can be muted and alarmed manually. ' +
2244
+ 'During a smoke alarm, the buzzer can be manually muted for 80 seconds ("mute") and unmuted ("alarm"). ' +
2245
+ 'The buzzer cannot be pre-muted, as this function only works during a smoke alarm. ' +
2246
+ 'During the absence of a smoke alarm, the buzzer can be manually alarmed ("alarm") and disalarmed ("mute"), ' +
2247
+ 'but for this "linkage_alarm" option must be enabled'),
2248
+ e.binary('buzzer_manual_alarm', ea.STATE_GET, true, false).withDescription('Buzzer alarmed (manually)'),
2249
+ e.binary('buzzer_manual_mute', ea.STATE_GET, true, false).withDescription('Buzzer muted (manually)'),
2250
+ e
2251
+ .binary('heartbeat_indicator', ea.ALL, true, false)
2252
+ .withDescription('When this option is enabled then in the normal monitoring state, the green indicator light flashes every 60 seconds'),
2253
+ e
2254
+ .binary('linkage_alarm', ea.ALL, true, false)
2255
+ .withDescription('When this option is enabled and a smoke ' +
2256
+ 'alarm has occurred, then "linkage_alarm_state"=true, and when the smoke alarm has ended or the buzzer has ' +
2257
+ 'been manually muted, then "linkage_alarm_state"=false'),
2258
+ e.binary('linkage_alarm_state', ea.STATE, true, false).withDescription('"linkage_alarm" is triggered'),
2259
+ e.battery(),
2260
+ e.battery_voltage(),
2261
+ e.power_outage_count(false),
2262
+ ],
2263
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2264
+ configure: async (device, coordinatorEndpoint) => {
2265
+ const endpoint = device.getEndpoint(1);
2266
+ await endpoint.write('manuSpecificLumi', { 0x014b: { value: 1, type: 0x20 } }, { manufacturerCode: manufacturerCode });
2267
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
2268
+ await endpoint.read('manuSpecificLumi', [0x013a], { manufacturerCode: manufacturerCode });
2269
+ await endpoint.read('manuSpecificLumi', [0x013b], { manufacturerCode: manufacturerCode });
2270
+ await endpoint.read('manuSpecificLumi', [0x013c], { manufacturerCode: manufacturerCode });
2271
+ await endpoint.read('manuSpecificLumi', [0x013d], { manufacturerCode: manufacturerCode });
2272
+ await endpoint.read('manuSpecificLumi', [0x0126], { manufacturerCode: manufacturerCode });
2273
+ await endpoint.read('manuSpecificLumi', [0x014b], { manufacturerCode: manufacturerCode });
2274
+ },
2275
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
2276
+ },
2277
+ {
2278
+ zigbeeModel: ['lumi.lock.v1'],
2279
+ model: 'A6121',
2280
+ vendor: 'Xiaomi',
2281
+ description: 'Vima Smart Lock',
2282
+ fromZigbee: [lumi.fromZigbee.lumi_lock_report],
2283
+ exposes: [e.text('inserted', ea.STATE)],
2284
+ toZigbee: [],
2285
+ },
2286
+ {
2287
+ zigbeeModel: ['lumi.vibration.aq1'],
2288
+ model: 'DJT11LM',
2289
+ vendor: 'Aqara',
2290
+ description: 'Vibration sensor',
2291
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2292
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_vibration_analog],
2293
+ toZigbee: [lumi.toZigbee.lumi_vibration_sensitivity],
2294
+ exposes: [
2295
+ e.battery(),
2296
+ e.device_temperature(),
2297
+ e.vibration(),
2298
+ e.action(['vibration', 'tilt', 'drop']),
2299
+ e.numeric('strength', ea.STATE),
2300
+ e.enum('sensitivity', ea.STATE_SET, ['low', 'medium', 'high']),
2301
+ e.angle_axis('angle_x'),
2302
+ e.angle_axis('angle_y'),
2303
+ e.angle_axis('angle_z'),
2304
+ e.x_axis(),
2305
+ e.y_axis(),
2306
+ e.z_axis(),
2307
+ e.battery_voltage(),
2308
+ e.power_outage_count(false),
2309
+ ],
2310
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2311
+ },
2312
+ {
2313
+ zigbeeModel: ['lumi.vibration.agl01'],
2314
+ model: 'DJT12LM',
2315
+ vendor: 'Aqara',
2316
+ description: 'Vibration sensor T1',
2317
+ extend: [
2318
+ lumiVibration(),
2319
+ // Doesn't seem to be working at all
2320
+ // https://github.com/Koenkk/zigbee2mqtt/issues/21731
2321
+ // lumiMiscellaneous(),
2322
+ (0, modernExtend_1.battery)({ voltageToPercentage: { min: 2850, max: 3000 }, voltage: true }),
2323
+ lumiZigbeeOTA(),
2324
+ (0, modernExtend_1.quirkCheckinInterval)('1_HOUR'),
2325
+ ],
2326
+ },
2327
+ {
2328
+ zigbeeModel: ['lumi.curtain'],
2329
+ model: 'ZNCLDJ11LM',
2330
+ description: 'Curtain controller',
2331
+ vendor: 'Aqara',
2332
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_curtain_position, lumi.fromZigbee.lumi_curtain_position_tilt],
2333
+ toZigbee: [lumi.toZigbee.lumi_curtain_position_state, lumi.toZigbee.lumi_curtain_options],
2334
+ onEvent: async (type, data, device) => {
2335
+ if (type === 'message' &&
2336
+ data.type === 'attributeReport' &&
2337
+ data.cluster === 'genBasic' &&
2338
+ data.data['1028'] !== undefined &&
2339
+ data.data['1028'] == 0) {
2340
+ // Try to read the position after the motor stops, the device occasionally report wrong data right after stopping
2341
+ // Might need to add delay, seems to be working without one but needs more tests.
2342
+ await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
2343
+ }
2344
+ },
2345
+ exposes: [
2346
+ e.cover_position().setAccess('state', ea.ALL),
2347
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2348
+ e.enum('motor_state', ea.STATE, ['stopped', 'opening', 'closing']).withDescription('Motor state'),
2349
+ ],
2350
+ extend: [lumiZigbeeOTA()],
2351
+ },
2352
+ {
2353
+ zigbeeModel: ['lumi.curtain.aq2'],
2354
+ model: 'ZNGZDJ11LM',
2355
+ description: 'Roller shade controller',
2356
+ vendor: 'Aqara',
2357
+ whiteLabel: [{ vendor: 'Aqara', model: 'SRSC-M01' }],
2358
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_curtain_position, lumi.fromZigbee.lumi_curtain_position_tilt],
2359
+ toZigbee: [lumi.toZigbee.lumi_curtain_position_state, lumi.toZigbee.lumi_curtain_options],
2360
+ exposes: [
2361
+ e.cover_position().setAccess('state', ea.ALL),
2362
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2363
+ ],
2364
+ extend: [lumiZigbeeOTA()],
2365
+ },
2366
+ {
2367
+ zigbeeModel: ['lumi.curtain.vagl02'],
2368
+ model: 'ZNGZDJ16LM',
2369
+ description: 'Roller shade controller T1C',
2370
+ vendor: 'Aqara',
2371
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_curtain_position, lumi.fromZigbee.lumi_curtain_position_tilt],
2372
+ toZigbee: [lumi.toZigbee.lumi_curtain_position_state, lumi.toZigbee.lumi_curtain_options],
2373
+ exposes: [
2374
+ e.cover_position().setAccess('state', ea.ALL),
2375
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2376
+ ],
2377
+ extend: [lumiZigbeeOTA()],
2378
+ },
2379
+ {
2380
+ zigbeeModel: ['lumi.curtain.hagl04'],
2381
+ model: 'ZNCLDJ12LM',
2382
+ vendor: 'Aqara',
2383
+ description: 'Curtain controller B1',
2384
+ fromZigbee: [
2385
+ lumi.fromZigbee.lumi_basic,
2386
+ lumi.fromZigbee.lumi_curtain_position,
2387
+ lumi.fromZigbee.lumi_curtain_position_tilt,
2388
+ lumi.fromZigbee.lumi_curtain_status,
2389
+ ],
2390
+ toZigbee: [lumi.toZigbee.lumi_curtain_position_state, lumi.toZigbee.lumi_curtain_options],
2391
+ onEvent: async (type, data, device) => {
2392
+ // The position (genAnalogOutput.presentValue) reported via an attribute contains an invalid value
2393
+ // however when reading it will provide the correct value.
2394
+ if (data.type === 'attributeReport' && data.cluster === 'genAnalogOutput') {
2395
+ await device.endpoints[0].read('genAnalogOutput', ['presentValue']);
2396
+ }
2397
+ },
2398
+ exposes: [
2399
+ e.cover_position().setAccess('state', ea.ALL),
2400
+ e.battery(),
2401
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2402
+ e.enum('motor_state', ea.STATE, ['closing', 'opening', 'stopped']).withDescription('The current state of the motor.'),
2403
+ e.power_outage_count(),
2404
+ ],
2405
+ extend: [lumiZigbeeOTA()],
2406
+ },
2407
+ {
2408
+ zigbeeModel: ['lumi.curtain.hagl07'],
2409
+ model: 'ZNCLDJ14LM',
2410
+ vendor: 'Aqara',
2411
+ description: 'Curtain controller C2',
2412
+ fromZigbee: [
2413
+ lumi.fromZigbee.lumi_basic,
2414
+ lumi.fromZigbee.lumi_curtain_position,
2415
+ lumi.fromZigbee.lumi_curtain_status,
2416
+ lumi.fromZigbee.lumi_curtain_options,
2417
+ ],
2418
+ toZigbee: [
2419
+ lumi.toZigbee.lumi_curtain_position_state,
2420
+ lumi.toZigbee.lumi_curtain_hand_open,
2421
+ lumi.toZigbee.lumi_curtain_reverse,
2422
+ lumi.toZigbee.lumi_curtain_limits_calibration_ZNCLDJ14LM,
2423
+ ],
2424
+ exposes: [
2425
+ e.cover_position().setAccess('state', ea.ALL),
2426
+ e.binary('reverse_direction', ea.ALL, true, false).withDescription('Whether the curtain direction is inverted'),
2427
+ e.binary('hand_open', ea.ALL, true, false).withDescription('Pulling curtains by hand starts the motor'),
2428
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2429
+ e.enum('motor_state', ea.STATE, ['closing', 'opening', 'stopped']).withDescription('The current state of the motor.'),
2430
+ e.power_outage_count(),
2431
+ ],
2432
+ extend: [lumiZigbeeOTA()],
2433
+ },
2434
+ {
2435
+ zigbeeModel: ['lumi.curtain.acn04'],
2436
+ model: 'ZNCLDJ01LM',
2437
+ vendor: 'Aqara',
2438
+ description: 'Curtain controller C3',
2439
+ toZigbee: [lumi.toZigbee.lumi_curtain_limits_calibration, lumi.toZigbee.lumi_curtain_automatic_calibration_ZNCLDJ01LM],
2440
+ exposes: [
2441
+ e.enum('limits_calibration', ea.SET, ['start', 'end', 'reset']).withDescription('Calibrate the position limits'),
2442
+ e
2443
+ .enum('automatic_calibration', ea.SET, ['calibrate'])
2444
+ .withDescription('Performs an automatic calibration process similar to Aqara’s method to set curtain limits.'),
2445
+ ],
2446
+ extend: [
2447
+ (0, modernExtend_1.windowCovering)({ controls: ['lift'], coverInverted: true, configureReporting: true }),
2448
+ lumiCurtainSpeed(),
2449
+ lumiCurtainManualOpenClose(),
2450
+ lumiCurtainAdaptivePullingSpeed(),
2451
+ lumiCurtainManualStop(),
2452
+ lumiCurtainReverse(),
2453
+ lumiCurtainStatus(),
2454
+ lumiCurtainLastManualOperation(),
2455
+ lumiCurtainPosition(),
2456
+ lumiCurtainTraverseTime(),
2457
+ lumiCurtainCalibrationStatus(),
2458
+ lumiCurtainCalibrated(),
2459
+ lumiCurtainIdentifyBeep(),
2460
+ (0, modernExtend_1.identify)(),
2461
+ lumiZigbeeOTA(),
2462
+ ],
2463
+ },
2464
+ {
2465
+ zigbeeModel: ['lumi.curtain.acn002'],
2466
+ model: 'ZNJLBL01LM',
2467
+ description: 'Roller shade driver E1',
2468
+ vendor: 'Aqara',
2469
+ whiteLabel: [{ vendor: 'Aqara', model: 'RSD-M01' }],
2470
+ fromZigbee: [
2471
+ lumi.fromZigbee.lumi_curtain_position,
2472
+ lumi.fromZigbee.lumi_curtain_status,
2473
+ fromZigbee_1.default.ignore_basic_report,
2474
+ lumi.fromZigbee.lumi_specific,
2475
+ ],
2476
+ toZigbee: [lumi.toZigbee.lumi_curtain_position_state, lumi.toZigbee.lumi_curtain_battery, lumi.toZigbee.lumi_curtain_charging_status],
2477
+ onEvent: async (type, data, device) => {
2478
+ if (type === 'message' &&
2479
+ data.type === 'attributeReport' &&
2480
+ data.cluster === 'genMultistateOutput' &&
2481
+ data.data.presentValue !== undefined &&
2482
+ data.data['presentValue'] > 1) {
2483
+ // Try to read the position after the motor stops, the device occasionally report wrong data right after stopping
2484
+ // Might need to add delay, seems to be working without one but needs more tests.
2485
+ await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
2486
+ }
2487
+ },
2488
+ exposes: [
2489
+ e.cover_position().setAccess('state', ea.ALL),
2490
+ e.battery().withAccess(ea.STATE_GET),
2491
+ e.device_temperature(),
2492
+ e.binary('charging_status', ea.STATE_GET, true, false).withDescription('The current charging status.'),
2493
+ e.enum('motor_state', ea.STATE, ['closing', 'opening', 'stopped', 'blocked']).withDescription('The current state of the motor.'),
2494
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2495
+ ],
2496
+ configure: async (device, coordinatorEndpoint) => {
2497
+ device.powerSource = 'Battery';
2498
+ device.save();
2499
+ const endpoint = device.getEndpoint(1);
2500
+ await endpoint.read('manuSpecificLumi', [0x040a], { manufacturerCode: manufacturerCode });
2501
+ },
2502
+ extend: [
2503
+ (0, modernExtend_1.quirkAddEndpointCluster)({
2504
+ endpointID: 1,
2505
+ inputClusters: ['manuSpecificLumi'],
2506
+ }),
2507
+ lumiZigbeeOTA(),
2508
+ lumiMotorSpeed(),
2509
+ ],
2510
+ },
2511
+ {
2512
+ // 'lumi.curtain.acn003' - CN version (ZNCLBL01LM), 'lumi.curtain.agl001' - global version (CM-M01)
2513
+ zigbeeModel: ['lumi.curtain.acn003', 'lumi.curtain.agl001'],
2514
+ model: 'ZNCLBL01LM',
2515
+ vendor: 'Aqara',
2516
+ whiteLabel: [
2517
+ { vendor: 'Aqara', model: 'CM-M01' },
2518
+ { vendor: 'Aqara', model: 'CM-M01R' },
2519
+ ],
2520
+ description: 'Curtain driver E1',
2521
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_curtain_position_tilt, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.power_source],
2522
+ toZigbee: [
2523
+ lumi.toZigbee.lumi_curtain_position_state,
2524
+ lumi.toZigbee.lumi_curtain_battery_voltage,
2525
+ lumi.toZigbee.lumi_curtain_hooks_lock,
2526
+ lumi.toZigbee.lumi_curtain_hooks_state,
2527
+ lumi.toZigbee.lumi_curtain_hand_open,
2528
+ lumi.toZigbee.lumi_curtain_limits_calibration,
2529
+ toZigbee_1.default.power_source,
2530
+ toZigbee_1.default.battery_percentage_remaining,
2531
+ ],
2532
+ exposes: [
2533
+ e.cover_position().setAccess('state', ea.ALL),
2534
+ e.binary('hand_open', ea.ALL, true, false).withDescription('Pulling curtains by hand starts the motor'),
2535
+ e.enum('limits_calibration', ea.SET, ['start', 'end', 'reset']).withDescription('Calibrate the position limits'),
2536
+ e.battery().withAccess(ea.STATE_GET),
2537
+ e.battery_voltage().withAccess(ea.STATE_GET),
2538
+ e.device_temperature(),
2539
+ e.illuminance(),
2540
+ e.action(['manual_open', 'manual_close']),
2541
+ e.enum('motor_state', ea.STATE, ['stopped', 'opening', 'closing', 'pause']).withDescription('Motor state'),
2542
+ e.binary('running', ea.STATE, true, false).withDescription('Whether the motor is moving or not'),
2543
+ e.enum('hooks_lock', ea.STATE_SET, ['LOCK', 'UNLOCK']).withDescription('Lock the curtain driver hooks'),
2544
+ e.enum('hooks_state', ea.STATE_GET, ['unlocked', 'locked', 'locking', 'unlocking']).withDescription('Hooks state'),
2545
+ e.numeric('target_position', ea.STATE).withUnit('%').withDescription('Target position'),
2546
+ e.enum('power_source', ea.STATE_GET, ['battery', 'dc_source']).withDescription('The current power source'),
2547
+ e.binary('charging', ea.STATE_GET, true, false).withDescription('The current charging state'),
2548
+ ],
2549
+ configure: async (device, coordinatorEndpoint) => {
2550
+ const endpoint = device.getEndpoint(1);
2551
+ // Read correct version to replace version advertised by `genBasic` and `genOta`:
2552
+ // https://github.com/Koenkk/zigbee2mqtt/issues/15745
2553
+ await endpoint.read('manuSpecificLumi', [0x00ee], { manufacturerCode: manufacturerCode });
2554
+ await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
2555
+ await endpoint.read('manuSpecificLumi', [0x040b], { manufacturerCode: manufacturerCode });
2556
+ await endpoint.read('manuSpecificLumi', [0x0428], { manufacturerCode: manufacturerCode });
2557
+ await endpoint.read('genBasic', ['powerSource']);
2558
+ await endpoint.read('closuresWindowCovering', ['currentPositionLiftPercentage']);
2559
+ },
2560
+ extend: [lumiZigbeeOTA()],
2561
+ },
2562
+ {
2563
+ zigbeeModel: ['lumi.relay.c2acn01'],
2564
+ model: 'LLKZMK11LM',
2565
+ vendor: 'Aqara',
2566
+ description: 'Dual relay module',
2567
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_power, fromZigbee_1.default.ignore_multistate_report, fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_basic_raw],
2568
+ meta: { multiEndpoint: true },
2569
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_interlock, lumi.toZigbee.lumi_power, lumi.toZigbee.lumi_switch_power_outage_memory],
2570
+ endpoint: (device) => {
2571
+ return { l1: 1, l2: 2 };
2572
+ },
2573
+ exposes: [
2574
+ e.power().withAccess(ea.STATE_GET),
2575
+ e.energy(),
2576
+ e.device_temperature(),
2577
+ e.voltage(),
2578
+ e.current(),
2579
+ e.switch().withEndpoint('l1'),
2580
+ e.switch().withEndpoint('l2'),
2581
+ e.power_outage_count(false),
2582
+ e.power_outage_memory(),
2583
+ e.binary('interlock', ea.STATE_SET, true, false).withDescription('Enabling prevents both relais being on at the same time'),
2584
+ ],
2585
+ extend: [lumiZigbeeOTA()],
2586
+ configure: async (device, coordinatorEndpoint) => {
2587
+ device.powerSource = 'Mains (single phase)';
2588
+ device.save();
2589
+ },
2590
+ },
2591
+ {
2592
+ zigbeeModel: ['lumi.switch.acn047'],
2593
+ model: 'LLKZMK12LM',
2594
+ vendor: 'Aqara',
2595
+ whiteLabel: [{ vendor: 'Aqara', model: 'DCM-K01' }],
2596
+ description: 'Dual relay module T2',
2597
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_power],
2598
+ toZigbee: [toZigbee_1.default.on_off],
2599
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
2600
+ endpoint: (device) => {
2601
+ return { l1: 1, l2: 2 };
2602
+ },
2603
+ exposes: [
2604
+ e.switch().withEndpoint('l1'),
2605
+ e.switch().withEndpoint('l2'),
2606
+ e.power(),
2607
+ e.current(),
2608
+ e.energy(),
2609
+ e.voltage(),
2610
+ e.device_temperature(),
2611
+ ],
2612
+ extend: [
2613
+ lumiSwitchType(),
2614
+ lumiPowerOnBehavior({ lookup: { on: 0, previous: 1, off: 2, toggle: 3 } }),
2615
+ lumiOperationMode({ description: 'Decoupled mode for 1st relay', endpointName: 'l1' }),
2616
+ lumiOperationMode({ description: 'Decoupled mode for 2nd relay', endpointName: 'l2' }),
2617
+ lumiAction({ endpointNames: ['l1', 'l2'] }),
2618
+ (0, modernExtend_1.binary)({
2619
+ name: 'interlock',
2620
+ valueOn: ['ON', 1],
2621
+ valueOff: ['OFF', 0],
2622
+ cluster: 'manuSpecificLumi',
2623
+ attribute: { ID: 0x02d0, type: 0x10 },
2624
+ description: 'Enabling prevents both relays being on at the same time (Interlock)',
2625
+ zigbeeCommandOptions: { manufacturerCode },
2626
+ }),
2627
+ (0, modernExtend_1.enumLookup)({
2628
+ name: 'mode',
2629
+ lookup: { power: 0, pulse: 1, dry: 3 },
2630
+ cluster: 'manuSpecificLumi',
2631
+ attribute: { ID: 0x0289, type: 0x20 },
2632
+ description: 'Work mode: Power mode, Dry mode with impulse, Dry mode',
2633
+ zigbeeCommandOptions: { manufacturerCode },
2634
+ }),
2635
+ (0, modernExtend_1.numeric)({
2636
+ name: 'pulse_length',
2637
+ valueMin: 200,
2638
+ valueMax: 2000,
2639
+ unit: 'ms',
2640
+ cluster: 'manuSpecificLumi',
2641
+ attribute: { ID: 0x00eb, type: 0x21 },
2642
+ description: 'Impulse length in Dry mode with impulse',
2643
+ zigbeeCommandOptions: { manufacturerCode },
2644
+ }),
2645
+ lumiZigbeeOTA(),
2646
+ ],
2647
+ },
2648
+ {
2649
+ zigbeeModel: ['lumi.lock.acn02'],
2650
+ model: 'ZNMS12LM',
2651
+ description: 'Smart door lock S2',
2652
+ vendor: 'Aqara',
2653
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_door_lock_report, lumi.fromZigbee.lumi_door_lock_low_battery],
2654
+ toZigbee: [],
2655
+ exposes: [
2656
+ e.battery(),
2657
+ e.battery_voltage(),
2658
+ e.battery_low(),
2659
+ e.binary('state', ea.STATE, 'UNLOCK', 'LOCK'),
2660
+ e.binary('reverse', ea.STATE, 'UNLOCK', 'LOCK'),
2661
+ e.enum('action', ea.STATE, [
2662
+ 'finger_not_match',
2663
+ 'password_not_match',
2664
+ 'reverse_lock',
2665
+ 'reverse_lock_cancel',
2666
+ 'locked',
2667
+ 'lock_opened',
2668
+ 'finger_add',
2669
+ 'finger_delete',
2670
+ 'password_add',
2671
+ 'password_delete',
2672
+ 'lock_opened_inside',
2673
+ 'lock_opened_outside',
2674
+ 'ring_bell',
2675
+ 'change_language_to',
2676
+ 'finger_open',
2677
+ 'password_open',
2678
+ 'door_closed',
2679
+ ]),
2680
+ ],
2681
+ meta: { battery: { voltageToPercentage: { min: 3000, max: 4200 } } },
2682
+ configure: async (device, coordinatorEndpoint) => {
2683
+ // Device advertises itself as Router but is an EndDevice
2684
+ device.type = 'EndDevice';
2685
+ device.save();
2686
+ },
2687
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
2688
+ },
2689
+ {
2690
+ zigbeeModel: ['lumi.lock.acn03'],
2691
+ model: 'ZNMS13LM',
2692
+ description: 'Smart door lock S2 Pro',
2693
+ vendor: 'Aqara',
2694
+ fromZigbee: [lumi.fromZigbee.lumi_door_lock_report, fromZigbee_1.default.ignore_basic_report],
2695
+ toZigbee: [],
2696
+ exposes: [
2697
+ e.binary('state', ea.STATE, 'UNLOCK', 'LOCK'),
2698
+ e.binary('reverse', ea.STATE, 'UNLOCK', 'LOCK'),
2699
+ e.enum('action', ea.STATE, [
2700
+ 'finger_not_match',
2701
+ 'password_not_match',
2702
+ 'reverse_lock',
2703
+ 'reverse_lock_cancel',
2704
+ 'locked',
2705
+ 'lock_opened',
2706
+ 'finger_add',
2707
+ 'finger_delete',
2708
+ 'password_add',
2709
+ 'password_delete',
2710
+ 'lock_opened_inside',
2711
+ 'lock_opened_outside',
2712
+ 'ring_bell',
2713
+ 'change_language_to',
2714
+ 'finger_open',
2715
+ 'password_open',
2716
+ 'door_closed',
2717
+ ]),
2718
+ ],
2719
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2720
+ configure: async (device, coordinatorEndpoint) => {
2721
+ // Device advertises itself as Router but is an EndDevice
2722
+ device.type = 'EndDevice';
2723
+ device.save();
2724
+ },
2725
+ },
2726
+ {
2727
+ zigbeeModel: ['lumi.lock.aq1'],
2728
+ model: 'ZNMS11LM',
2729
+ description: 'Smart door lock',
2730
+ vendor: 'Aqara',
2731
+ fromZigbee: [lumi.fromZigbee.lumi_door_lock_report, fromZigbee_1.default.ignore_basic_report],
2732
+ toZigbee: [],
2733
+ exposes: [
2734
+ e.binary('state', ea.STATE, 'UNLOCK', 'LOCK'),
2735
+ e.binary('reverse', ea.STATE, 'UNLOCK', 'LOCK'),
2736
+ e.enum('action', ea.STATE, [
2737
+ 'finger_not_match',
2738
+ 'password_not_match',
2739
+ 'reverse_lock',
2740
+ 'reverse_lock_cancel',
2741
+ 'locked',
2742
+ 'lock_opened',
2743
+ 'finger_add',
2744
+ 'finger_delete',
2745
+ 'password_add',
2746
+ 'password_delete',
2747
+ 'lock_opened_inside',
2748
+ 'lock_opened_outside',
2749
+ 'ring_bell',
2750
+ 'change_language_to',
2751
+ 'finger_open',
2752
+ 'password_open',
2753
+ 'door_closed',
2754
+ ]),
2755
+ ],
2756
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
2757
+ },
2758
+ {
2759
+ zigbeeModel: ['lumi.remote.b286opcn01'],
2760
+ model: 'WXCJKG11LM',
2761
+ vendor: 'Aqara',
2762
+ description: 'Opple wireless switch (single band)',
2763
+ fromZigbee: [
2764
+ lumi.fromZigbee.lumi_action_on,
2765
+ lumi.fromZigbee.lumi_action_off,
2766
+ fromZigbee_1.default.battery,
2767
+ lumi.fromZigbee.lumi_action_multistate,
2768
+ lumi.fromZigbee.lumi_specific,
2769
+ ],
2770
+ exposes: [
2771
+ e.battery(),
2772
+ e.battery_voltage(),
2773
+ e.action([
2774
+ 'button_1_hold',
2775
+ 'button_1_release',
2776
+ 'button_1_single',
2777
+ 'button_1_double',
2778
+ 'button_1_triple',
2779
+ 'button_2_hold',
2780
+ 'button_2_release',
2781
+ 'button_2_single',
2782
+ 'button_2_double',
2783
+ 'button_2_triple',
2784
+ ]),
2785
+ e
2786
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
2787
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
2788
+ ],
2789
+ toZigbee: [lumi.toZigbee.lumi_operation_mode_opple],
2790
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2791
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2792
+ configure: async (device, coordinatorEndpoint) => {
2793
+ const endpoint = device.getEndpoint(1);
2794
+ await endpoint.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode });
2795
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
2796
+ },
2797
+ },
2798
+ {
2799
+ zigbeeModel: ['lumi.remote.b486opcn01'],
2800
+ model: 'WXCJKG12LM',
2801
+ vendor: 'Aqara',
2802
+ description: 'Opple wireless switch (double band)',
2803
+ fromZigbee: [
2804
+ lumi.fromZigbee.lumi_action_on,
2805
+ lumi.fromZigbee.lumi_action_off,
2806
+ lumi.fromZigbee.lumi_action_step,
2807
+ lumi.fromZigbee.lumi_action_step_color_temp,
2808
+ fromZigbee_1.default.battery,
2809
+ lumi.fromZigbee.lumi_action_multistate,
2810
+ lumi.fromZigbee.lumi_specific,
2811
+ ],
2812
+ exposes: [
2813
+ e.battery(),
2814
+ e.battery_voltage(),
2815
+ e.action([
2816
+ 'button_1_hold',
2817
+ 'button_1_release',
2818
+ 'button_1_single',
2819
+ 'button_1_double',
2820
+ 'button_1_triple',
2821
+ 'button_2_hold',
2822
+ 'button_2_release',
2823
+ 'button_2_single',
2824
+ 'button_2_double',
2825
+ 'button_2_triple',
2826
+ 'button_3_hold',
2827
+ 'button_3_release',
2828
+ 'button_3_single',
2829
+ 'button_3_double',
2830
+ 'button_3_triple',
2831
+ 'button_4_hold',
2832
+ 'button_4_release',
2833
+ 'button_4_single',
2834
+ 'button_4_double',
2835
+ 'button_4_triple',
2836
+ ]),
2837
+ e
2838
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
2839
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
2840
+ ],
2841
+ toZigbee: [lumi.toZigbee.lumi_operation_mode_opple],
2842
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2843
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2844
+ configure: async (device, coordinatorEndpoint) => {
2845
+ const endpoint = device.getEndpoint(1);
2846
+ await endpoint.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode });
2847
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'lightingColorCtrl', 'genPowerCfg']);
2848
+ },
2849
+ },
2850
+ {
2851
+ zigbeeModel: ['lumi.remote.b686opcn01'],
2852
+ model: 'WXCJKG13LM',
2853
+ vendor: 'Aqara',
2854
+ description: 'Opple wireless switch (triple band)',
2855
+ fromZigbee: [
2856
+ lumi.fromZigbee.lumi_action_on,
2857
+ lumi.fromZigbee.lumi_action_off,
2858
+ lumi.fromZigbee.lumi_action_step,
2859
+ lumi.fromZigbee.lumi_action_move,
2860
+ lumi.fromZigbee.lumi_action_stop,
2861
+ lumi.fromZigbee.lumi_action_step_color_temp,
2862
+ lumi.fromZigbee.lumi_action_move_color_temp,
2863
+ fromZigbee_1.default.battery,
2864
+ lumi.fromZigbee.lumi_action_multistate,
2865
+ lumi.fromZigbee.lumi_specific,
2866
+ ],
2867
+ exposes: [
2868
+ e.battery(),
2869
+ e.battery_voltage(),
2870
+ e.action([
2871
+ 'button_1_hold',
2872
+ 'button_1_release',
2873
+ 'button_1_single',
2874
+ 'button_1_double',
2875
+ 'button_1_triple',
2876
+ 'button_2_hold',
2877
+ 'button_2_release',
2878
+ 'button_2_single',
2879
+ 'button_2_double',
2880
+ 'button_2_triple',
2881
+ 'button_3_hold',
2882
+ 'button_3_release',
2883
+ 'button_3_single',
2884
+ 'button_3_double',
2885
+ 'button_3_triple',
2886
+ 'button_4_hold',
2887
+ 'button_4_release',
2888
+ 'button_4_single',
2889
+ 'button_4_double',
2890
+ 'button_4_triple',
2891
+ 'button_5_hold',
2892
+ 'button_5_release',
2893
+ 'button_5_single',
2894
+ 'button_5_double',
2895
+ 'button_5_triple',
2896
+ 'button_6_hold',
2897
+ 'button_6_release',
2898
+ 'button_6_single',
2899
+ 'button_6_double',
2900
+ 'button_6_triple',
2901
+ ]),
2902
+ e
2903
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
2904
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
2905
+ e.power_outage_count(false),
2906
+ ],
2907
+ toZigbee: [lumi.toZigbee.lumi_operation_mode_opple],
2908
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2909
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2910
+ configure: async (device, coordinatorEndpoint) => {
2911
+ const endpoint = device.getEndpoint(1);
2912
+ await endpoint.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode });
2913
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'lightingColorCtrl', 'genPowerCfg']);
2914
+ },
2915
+ },
2916
+ {
2917
+ zigbeeModel: ['lumi.sen_ill.mgl01'],
2918
+ model: 'GZCGQ01LM',
2919
+ vendor: 'Xiaomi',
2920
+ whiteLabel: [{ vendor: 'Xiaomi', model: 'YTC4043GL' }],
2921
+ description: 'Mi light sensor',
2922
+ fromZigbee: [fromZigbee_1.default.battery, fromZigbee_1.default.illuminance, lumi.fromZigbee.lumi_specific],
2923
+ toZigbee: [toZigbee_1.default.illuminance],
2924
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
2925
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
2926
+ configure: async (device, coordinatorEndpoint) => {
2927
+ const endpoint = device.getEndpoint(1);
2928
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msIlluminanceMeasurement']);
2929
+ await reporting.illuminance(endpoint, { min: 15, max: constants.repInterval.HOUR, change: 500 });
2930
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
2931
+ },
2932
+ exposes: [e.battery(), e.battery_voltage(), e.illuminance().withAccess(ea.STATE_GET)],
2933
+ },
2934
+ {
2935
+ zigbeeModel: ['lumi.light.acn128'],
2936
+ model: 'TDL01LM',
2937
+ vendor: 'Aqara',
2938
+ description: 'Spotlight T3',
2939
+ whiteLabel: [
2940
+ { vendor: 'Aqara', model: 'MZSD11LM' },
2941
+ { vendor: 'Aqara', model: 'MZSD12LM' },
2942
+ { vendor: 'Aqara', model: 'MZTD11LM' },
2943
+ ],
2944
+ extend: [
2945
+ lumiZigbeeOTA(),
2946
+ lumiLight({
2947
+ colorTemp: true,
2948
+ color: false,
2949
+ powerOutageMemory: 'enum',
2950
+ levelConfig: { disabledFeatures: ['current_level_startup'] },
2951
+ }),
2952
+ (0, modernExtend_1.numeric)({
2953
+ name: 'min_brightness',
2954
+ valueMin: 0,
2955
+ valueMax: 99,
2956
+ unit: '%',
2957
+ cluster: 'manuSpecificLumi',
2958
+ attribute: { ID: 0x0515, type: 0x20 },
2959
+ description: 'Minimum brightness level',
2960
+ zigbeeCommandOptions: { manufacturerCode },
2961
+ }),
2962
+ (0, modernExtend_1.numeric)({
2963
+ name: 'max_brightness',
2964
+ valueMin: 1,
2965
+ valueMax: 100,
2966
+ unit: '%',
2967
+ cluster: 'manuSpecificLumi',
2968
+ attribute: { ID: 0x0516, type: 0x20 },
2969
+ description: 'Maximum brightness level',
2970
+ zigbeeCommandOptions: { manufacturerCode },
2971
+ }),
2972
+ ],
2973
+ },
2974
+ {
2975
+ zigbeeModel: ['lumi.light.rgbac1'],
2976
+ model: 'ZNTGMK11LM',
2977
+ vendor: 'Aqara',
2978
+ description: 'Smart RGBW light controller',
2979
+ extend: [(0, modernExtend_1.light)({ colorTemp: { range: undefined }, color: { modes: ['xy', 'hs'] } }), lumiZigbeeOTA()],
2980
+ },
2981
+ {
2982
+ zigbeeModel: ['lumi.light.cwacn1'],
2983
+ model: 'ZNTGMK12LM',
2984
+ vendor: 'Aqara',
2985
+ description: 'Smart color temperature light controller',
2986
+ extend: [lumiLight({ colorTemp: true, powerOutageCount: true, deviceTemperature: true }), lumiZigbeeOTA()],
2987
+ },
2988
+ {
2989
+ zigbeeModel: ['lumi.light.cbacn1'],
2990
+ model: 'HLQDQ01LM',
2991
+ vendor: 'Aqara',
2992
+ description: 'Smart LED controller',
2993
+ extend: [(0, modernExtend_1.light)(), lumiZigbeeOTA()],
2994
+ },
2995
+ {
2996
+ zigbeeModel: ['lumi.light.acn004'],
2997
+ model: 'SSWQD02LM',
2998
+ vendor: 'Aqara',
2999
+ description: 'Smart dimmer controller T1 Pro',
3000
+ extend: [lumiZigbeeOTA(), lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
3001
+ },
3002
+ {
3003
+ zigbeeModel: ['lumi.dimmer.acn003'],
3004
+ model: 'ZNDDQDQ11LM',
3005
+ vendor: 'Aqara',
3006
+ description: 'T1 light strip controller',
3007
+ extend: [lumiZigbeeOTA(), lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
3008
+ },
3009
+ {
3010
+ zigbeeModel: ['lumi.dimmer.acn004'],
3011
+ model: 'ZNDDQDQ12LM',
3012
+ vendor: 'Aqara',
3013
+ description: 'T1 light strip controller',
3014
+ extend: [lumiZigbeeOTA(), lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
3015
+ },
3016
+ {
3017
+ zigbeeModel: ['lumi.light.acn026', 'lumi.light.acn024', 'lumi.light.acn025'],
3018
+ model: 'SSWQD03LM',
3019
+ vendor: 'Aqara',
3020
+ description: 'Spotlight T2',
3021
+ extend: [lumiZigbeeOTA(), lumiLight({ colorTemp: true, powerOutageMemory: 'switch' })],
3022
+ },
3023
+ {
3024
+ zigbeeModel: ['lumi.switch.n0agl1'],
3025
+ model: 'SSM-U01',
3026
+ vendor: 'Aqara',
3027
+ description: 'Single switch module T1 (with neutral)',
3028
+ // Ignore energy metering reports, rely on aqara_opple: https://github.com/Koenkk/zigbee2mqtt/issues/10709
3029
+ fromZigbee: [
3030
+ fromZigbee_1.default.on_off,
3031
+ fromZigbee_1.default.device_temperature,
3032
+ lumi.fromZigbee.lumi_specific,
3033
+ fromZigbee_1.default.ignore_metering,
3034
+ fromZigbee_1.default.ignore_electrical_measurement,
3035
+ lumi.fromZigbee.lumi_power,
3036
+ ],
3037
+ exposes: [
3038
+ e.switch(),
3039
+ e.energy(),
3040
+ e.power(),
3041
+ e.device_temperature(),
3042
+ e.power_outage_memory(),
3043
+ e.power_outage_count(),
3044
+ e.switch_type(),
3045
+ e.voltage(),
3046
+ e.current(),
3047
+ ],
3048
+ toZigbee: [lumi.toZigbee.lumi_switch_type, toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_power_outage_memory, lumi.toZigbee.lumi_led_disabled_night],
3049
+ configure: async (device, coordinatorEndpoint) => {
3050
+ const endpoint = device.getEndpoint(1);
3051
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genDeviceTempCfg']);
3052
+ await reporting.onOff(endpoint);
3053
+ await reporting.deviceTemperature(endpoint);
3054
+ device.powerSource = 'Mains (single phase)';
3055
+ device.type = 'Router';
3056
+ device.save();
3057
+ },
3058
+ extend: [lumiZigbeeOTA()],
3059
+ },
3060
+ {
3061
+ zigbeeModel: ['lumi.switch.n0acn2'],
3062
+ model: 'DLKZMK11LM',
3063
+ vendor: 'Aqara',
3064
+ description: 'Single switch module T1 (with neutral), CN',
3065
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific],
3066
+ toZigbee: [
3067
+ toZigbee_1.default.on_off,
3068
+ lumi.toZigbee.lumi_power,
3069
+ lumi.toZigbee.lumi_switch_type,
3070
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3071
+ lumi.toZigbee.lumi_led_disabled_night,
3072
+ ],
3073
+ exposes: [
3074
+ e.switch(),
3075
+ e.power().withAccess(ea.STATE_GET),
3076
+ e.energy(),
3077
+ e.device_temperature().withAccess(ea.STATE),
3078
+ e.voltage(),
3079
+ e.current(),
3080
+ e.power_outage_memory(),
3081
+ e.led_disabled_night(),
3082
+ e.switch_type(),
3083
+ ],
3084
+ configure: async (device, coordinatorEndpoint) => {
3085
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3086
+ device.powerSource = 'Mains (single phase)';
3087
+ device.save();
3088
+ },
3089
+ extend: [lumiZigbeeOTA()],
3090
+ },
3091
+ {
3092
+ zigbeeModel: ['lumi.switch.l0agl1'],
3093
+ model: 'SSM-U02',
3094
+ vendor: 'Aqara',
3095
+ description: 'Single switch module T1 (no neutral)',
3096
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_specific],
3097
+ exposes: [e.switch(), e.power_outage_memory(), e.switch_type(), e.power_outage_count(), e.device_temperature()],
3098
+ toZigbee: [lumi.toZigbee.lumi_switch_type, toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_power_outage_memory],
3099
+ configure: async (device, coordinatorEndpoint) => {
3100
+ const endpoint = device.getEndpoint(1);
3101
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
3102
+ await reporting.onOff(endpoint);
3103
+ device.powerSource = 'Mains (single phase)';
3104
+ device.save();
3105
+ },
3106
+ },
3107
+ {
3108
+ zigbeeModel: ['lumi.switch.l0acn1'],
3109
+ model: 'DLKZMK12LM',
3110
+ vendor: 'Aqara',
3111
+ description: 'Single switch module T1 (no neutral), CN',
3112
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_specific],
3113
+ exposes: [e.switch(), e.power_outage_memory(), e.switch_type()],
3114
+ toZigbee: [lumi.toZigbee.lumi_switch_type, toZigbee_1.default.on_off, lumi.toZigbee.lumi_switch_power_outage_memory],
3115
+ configure: async (device, coordinatorEndpoint) => {
3116
+ const endpoint = device.getEndpoint(1);
3117
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
3118
+ await reporting.onOff(endpoint);
3119
+ device.powerSource = 'Mains (single phase)';
3120
+ device.save();
3121
+ },
3122
+ },
3123
+ {
3124
+ zigbeeModel: ['lumi.switch.n4acn4'],
3125
+ model: 'ZNCJMB14LM',
3126
+ vendor: 'Aqara',
3127
+ description: 'Smart touch panel S1',
3128
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_smart_panel_ZNCJMB14LM],
3129
+ toZigbee: [toZigbee_1.default.on_off, lumi.toZigbee.lumi_smart_panel_ZNCJMB14LM],
3130
+ meta: { multiEndpoint: true },
3131
+ endpoint: (device) => {
3132
+ return { left: 1, center: 2, right: 3 };
3133
+ },
3134
+ exposes: [
3135
+ e.switch().withEndpoint('left'),
3136
+ e.switch().withEndpoint('center'),
3137
+ e.switch().withEndpoint('right'),
3138
+ e.binary('standby_enabled', ea.STATE_SET, true, false).withDescription('Enable standby'),
3139
+ e.enum('theme', ea.STATE_SET, ['classic', 'concise']).withDescription('Display theme'),
3140
+ e.enum('beep_volume', ea.STATE_SET, ['mute', 'low', 'medium', 'high']).withDescription('Beep volume'),
3141
+ e
3142
+ .numeric('lcd_brightness', ea.STATE_SET)
3143
+ .withValueMin(1)
3144
+ .withValueMax(100)
3145
+ .withUnit('%')
3146
+ .withDescription('LCD brightness (will not persist if auto-brightness is enabled)'),
3147
+ e.enum('language', ea.STATE_SET, ['chinese', 'english']).withDescription('Interface language'),
3148
+ e.enum('screen_saver_style', ea.STATE_SET, ['classic', 'analog clock']).withDescription('Screen saver style'),
3149
+ e.numeric('standby_time', ea.STATE_SET).withValueMin(0).withValueMax(65534).withUnit('s').withDescription('Display standby time'),
3150
+ e.enum('font_size', ea.STATE_SET, ['small', 'medium', 'large']).withDescription('Display font size'),
3151
+ e.binary('lcd_auto_brightness_enabled', ea.STATE_SET, true, false).withDescription('Enable LCD auto brightness'),
3152
+ e.enum('homepage', ea.STATE_SET, ['scene', 'feel', 'thermostat', 'switch']).withDescription('Default display homepage'),
3153
+ e.binary('screen_saver_enabled', ea.STATE_SET, true, false).withDescription('Enable screen saver'),
3154
+ e
3155
+ .numeric('standby_lcd_brightness', ea.STATE_SET)
3156
+ .withValueMin(1)
3157
+ .withValueMax(100)
3158
+ .withUnit('%')
3159
+ .withDescription('Standby LCD brightness'),
3160
+ e
3161
+ .enum('available_switches', ea.STATE_SET, ['none', '1', '2', '3', '1 and 2', '1 and 3', '2 and 3', 'all'])
3162
+ .withDescription('Control which switches are available in the switches screen (none disables switches screen)'),
3163
+ e
3164
+ .composite('switch_1_text_icon', 'switch_1_text_icon', ea.STATE_SET)
3165
+ .withDescription('Switch 1 text and icon')
3166
+ .withFeature(e.enum('switch_1_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']).withDescription('Icon'))
3167
+ .withFeature(e.text('switch_1_text', ea.STATE_SET).withDescription('Text')),
3168
+ e
3169
+ .composite('switch_2_text_icon', 'switch_2_text_icon', ea.STATE_SET)
3170
+ .withDescription('Switch 2 text and icon')
3171
+ .withFeature(e.enum('switch_2_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']).withDescription('Icon'))
3172
+ .withFeature(e.text('switch_2_text', ea.STATE_SET).withDescription('Text')),
3173
+ e
3174
+ .composite('switch_3_text_icon', 'switch_3_text_icon', ea.STATE_SET)
3175
+ .withDescription('Switch 3 text and icon')
3176
+ .withFeature(e.enum('switch_3_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']).withDescription('Icon'))
3177
+ .withFeature(e.text('switch_3_text', ea.STATE_SET).withDescription('Text')),
3178
+ ],
3179
+ configure: async (device, coordinatorEndpoint) => {
3180
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
3181
+ await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
3182
+ await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
3183
+ await reporting.onOff(device.getEndpoint(1));
3184
+ // await reporting.onOff(device.getEndpoint(2)); ToDo: Currently fails
3185
+ // await reporting.onOff(device.getEndpoint(3)); ToDo: Currently fails
3186
+ },
3187
+ extend: [lumiZigbeeOTA()],
3188
+ },
3189
+ {
3190
+ zigbeeModel: ['lumi.remote.b186acn03'],
3191
+ model: 'WXKG05LM',
3192
+ vendor: 'Aqara',
3193
+ description: 'Wireless remote switch T1 (single rocker)',
3194
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3195
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3196
+ fromZigbee: [lumi.fromZigbee.lumi_action, lumi.fromZigbee.lumi_action_multistate, fromZigbee_1.default.battery, lumi.fromZigbee.lumi_specific],
3197
+ toZigbee: [],
3198
+ exposes: [e.action(['single', 'double', 'hold']), e.battery()],
3199
+ },
3200
+ {
3201
+ zigbeeModel: ['lumi.remote.b28ac1'],
3202
+ model: 'WXKG15LM',
3203
+ vendor: 'Aqara',
3204
+ whiteLabel: [{ vendor: 'Aqara', model: 'WRS-R02' }],
3205
+ description: 'Wireless remote switch H1 (double rocker)',
3206
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.command_toggle],
3207
+ toZigbee: [lumi.toZigbee.lumi_switch_click_mode, lumi.toZigbee.lumi_operation_mode_opple],
3208
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } }, multiEndpoint: true },
3209
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3210
+ exposes: [
3211
+ e.battery(),
3212
+ e.battery_voltage(),
3213
+ e.action([
3214
+ 'single_left',
3215
+ 'single_right',
3216
+ 'single_both',
3217
+ 'double_left',
3218
+ 'double_right',
3219
+ 'double_both',
3220
+ 'triple_left',
3221
+ 'triple_right',
3222
+ 'triple_both',
3223
+ 'hold_left',
3224
+ 'hold_right',
3225
+ 'hold_both',
3226
+ ]),
3227
+ e
3228
+ .enum('click_mode', ea.ALL, ['fast', 'multi'])
3229
+ .withDescription('Click mode, fast: only supports single click which will be send immediately after clicking.' +
3230
+ 'multi: supports more events like double and hold'),
3231
+ e
3232
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
3233
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
3234
+ ],
3235
+ configure: async (device, coordinatorEndpoint) => {
3236
+ const endpoint1 = device.getEndpoint(1);
3237
+ const endpoint2 = device.getEndpoint(3);
3238
+ // set "event" mode
3239
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode });
3240
+ // turn on the "multiple clicks" mode, otherwise the only "single click" events.
3241
+ // if value is 1 - there will be single clicks, 2 - multiple.
3242
+ await endpoint1.write('manuSpecificLumi', { 0x0125: { value: 0x02, type: 0x20 } }, { manufacturerCode: manufacturerCode });
3243
+ await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
3244
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
3245
+ // TODO/BUG:
3246
+ // Did not understand how to separate the left and right keys in command mode -
3247
+ // the "toggleCommand" always arrives from the first endpoint
3248
+ },
3249
+ },
3250
+ {
3251
+ zigbeeModel: ['lumi.switch.b1lc04'],
3252
+ model: 'QBKG38LM',
3253
+ vendor: 'Aqara',
3254
+ description: 'Smart wall switch E1 (no neutral, single rocker)',
3255
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3256
+ toZigbee: [
3257
+ toZigbee_1.default.on_off,
3258
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
3259
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3260
+ lumi.toZigbee.lumi_switch_mode_switch,
3261
+ lumi.toZigbee.lumi_flip_indicator_light,
3262
+ ],
3263
+ exposes: [
3264
+ e.switch(),
3265
+ e.power_outage_memory(),
3266
+ e.action(['single', 'double']),
3267
+ e.device_temperature(),
3268
+ e.flip_indicator_light(),
3269
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for button'),
3270
+ e
3271
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
3272
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
3273
+ ],
3274
+ configure: async (device, coordinatorEndpoint) => {
3275
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3276
+ },
3277
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
3278
+ },
3279
+ {
3280
+ zigbeeModel: ['lumi.switch.b2lc04'],
3281
+ model: 'QBKG39LM',
3282
+ vendor: 'Aqara',
3283
+ description: 'Smart wall switch E1 (no neutral, double rocker)',
3284
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3285
+ toZigbee: [
3286
+ toZigbee_1.default.on_off,
3287
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
3288
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3289
+ lumi.toZigbee.lumi_switch_mode_switch,
3290
+ lumi.toZigbee.lumi_flip_indicator_light,
3291
+ ],
3292
+ meta: { multiEndpoint: true },
3293
+ endpoint: (device) => {
3294
+ return { left: 1, right: 2 };
3295
+ },
3296
+ exposes: [
3297
+ e.switch().withEndpoint('left'),
3298
+ e.switch().withEndpoint('right'),
3299
+ e.device_temperature(),
3300
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
3301
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
3302
+ e
3303
+ .enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
3304
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights. Quick mode makes the device respond faster.'),
3305
+ e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
3306
+ e.power_outage_memory(),
3307
+ e.flip_indicator_light(),
3308
+ ],
3309
+ configure: async (device, coordinatorEndpoint) => {
3310
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3311
+ },
3312
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
3313
+ },
3314
+ {
3315
+ zigbeeModel: ['lumi.airmonitor.acn01'],
3316
+ model: 'VOCKQJK11LM',
3317
+ vendor: 'Aqara',
3318
+ whiteLabel: [{ vendor: 'Aqara', model: 'AAQS-S01' }],
3319
+ description: 'TVOC air quality monitor',
3320
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_specific],
3321
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3322
+ exposes: [e.device_temperature(), e.battery(), e.battery_voltage()],
3323
+ extend: [
3324
+ (0, modernExtend_1.quirkCheckinInterval)('1_HOUR'),
3325
+ (0, modernExtend_1.quirkAddEndpointCluster)({
3326
+ endpointID: 1,
3327
+ inputClusters: ['msTemperatureMeasurement', 'msRelativeHumidity', 'genAnalogInput', 'manuSpecificLumi'],
3328
+ }),
3329
+ lumiAirQuality(),
3330
+ lumiVoc(),
3331
+ (0, modernExtend_1.temperature)(),
3332
+ (0, modernExtend_1.humidity)(),
3333
+ lumiDisplayUnit(),
3334
+ lumiOutageCountRestoreBindReporting(),
3335
+ lumiZigbeeOTA(),
3336
+ ],
3337
+ configure: async (device, coordinatorEndpoint) => {
3338
+ const endpoint = device.getEndpoint(1);
3339
+ const binds = ['genPowerCfg'];
3340
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
3341
+ await reporting.batteryVoltage(endpoint);
3342
+ },
3343
+ },
3344
+ {
3345
+ zigbeeModel: ['lumi.switch.b2nc01'],
3346
+ model: 'QBKG41LM',
3347
+ vendor: 'Aqara',
3348
+ description: 'Smart wall switch E1 (with neutral, double rocker)',
3349
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3350
+ toZigbee: [
3351
+ toZigbee_1.default.on_off,
3352
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
3353
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3354
+ lumi.toZigbee.lumi_flip_indicator_light,
3355
+ ],
3356
+ meta: { multiEndpoint: true },
3357
+ endpoint: (device) => {
3358
+ return { left: 1, right: 2 };
3359
+ },
3360
+ exposes: [
3361
+ e.switch().withEndpoint('left'),
3362
+ e.switch().withEndpoint('right'),
3363
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
3364
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
3365
+ e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
3366
+ e.power_outage_memory(),
3367
+ e.device_temperature(),
3368
+ e.flip_indicator_light(),
3369
+ ],
3370
+ configure: async (device, coordinatorEndpoint) => {
3371
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3372
+ },
3373
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
3374
+ },
3375
+ {
3376
+ zigbeeModel: ['lumi.plug.macn01'],
3377
+ model: 'ZNCZ15LM',
3378
+ vendor: 'Aqara',
3379
+ description: 'Smart plug T1, CN',
3380
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific],
3381
+ toZigbee: [
3382
+ toZigbee_1.default.on_off,
3383
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3384
+ lumi.toZigbee.lumi_led_disabled_night,
3385
+ lumi.toZigbee.lumi_overload_protection,
3386
+ lumi.toZigbee.lumi_socket_button_lock,
3387
+ ],
3388
+ exposes: [
3389
+ e.switch(),
3390
+ e.power().withAccess(ea.STATE),
3391
+ e.energy(),
3392
+ e.device_temperature().withAccess(ea.STATE),
3393
+ e.voltage(),
3394
+ e.current(),
3395
+ e.consumer_connected().withAccess(ea.STATE),
3396
+ e.power_outage_memory(),
3397
+ e.led_disabled_night(),
3398
+ e.button_lock(),
3399
+ e.overload_protection(100, 2500),
3400
+ ],
3401
+ extend: [lumiZigbeeOTA()],
3402
+ },
3403
+ {
3404
+ zigbeeModel: ['lumi.switch.b1nc01'],
3405
+ model: 'QBKG40LM',
3406
+ vendor: 'Aqara',
3407
+ description: 'Smart wall switch E1 (with neutral, single rocker)',
3408
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3409
+ toZigbee: [
3410
+ toZigbee_1.default.on_off,
3411
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
3412
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3413
+ lumi.toZigbee.lumi_flip_indicator_light,
3414
+ ],
3415
+ exposes: [
3416
+ e.switch(),
3417
+ e.action(['single', 'double']),
3418
+ e.power_outage_memory(),
3419
+ e.device_temperature(),
3420
+ e.flip_indicator_light(),
3421
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
3422
+ ],
3423
+ configure: async (device, coordinatorEndpoint) => {
3424
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3425
+ },
3426
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
3427
+ },
3428
+ {
3429
+ zigbeeModel: ['lumi.remote.b1acn02'],
3430
+ model: 'WXKG13LM',
3431
+ vendor: 'Aqara',
3432
+ description: 'Wireless mini switch T1',
3433
+ whiteLabel: [
3434
+ { vendor: 'Aqara', model: 'WB-R02D' },
3435
+ { vendor: 'Yandex', model: 'YNDX-00524' },
3436
+ ],
3437
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3438
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3439
+ toZigbee: [],
3440
+ exposes: [e.battery(), e.battery_voltage(), e.action(['single', 'double', 'triple', 'quadruple', 'quintuple', 'hold', 'release', 'many'])],
3441
+ configure: async (device, coordinatorEndpoint) => {
3442
+ const endpoint1 = device.getEndpoint(1);
3443
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3444
+ },
3445
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
3446
+ },
3447
+ {
3448
+ zigbeeModel: ['lumi.sen_ill.agl01'],
3449
+ model: 'GZCGQ11LM',
3450
+ vendor: 'Aqara',
3451
+ description: 'Light sensor T1',
3452
+ fromZigbee: [fromZigbee_1.default.battery, fromZigbee_1.default.illuminance, lumi.fromZigbee.lumi_specific],
3453
+ toZigbee: [lumi.toZigbee.lumi_detection_period],
3454
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3455
+ exposes: [
3456
+ e.battery(),
3457
+ e.battery_voltage(),
3458
+ e.illuminance(),
3459
+ e
3460
+ .numeric('detection_period', exposes.access.ALL)
3461
+ .withValueMin(1)
3462
+ .withValueMax(59)
3463
+ .withUnit('s')
3464
+ .withDescription('Time interval in seconds to report after light changes'),
3465
+ ],
3466
+ configure: async (device, coordinatorEndpoint) => {
3467
+ const endpoint = device.getEndpoint(1);
3468
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3469
+ await endpoint.read('manuSpecificLumi', [0x0000], { manufacturerCode: manufacturerCode });
3470
+ },
3471
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
3472
+ },
3473
+ {
3474
+ zigbeeModel: ['lumi.plug.sacn03'],
3475
+ model: 'QBCZ15LM',
3476
+ vendor: 'Aqara',
3477
+ description: 'Smart wall outlet H1 (USB)',
3478
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific],
3479
+ toZigbee: [
3480
+ toZigbee_1.default.on_off,
3481
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3482
+ lumi.toZigbee.lumi_led_disabled_night,
3483
+ lumi.toZigbee.lumi_button_switch_mode,
3484
+ lumi.toZigbee.lumi_overload_protection,
3485
+ lumi.toZigbee.lumi_socket_button_lock,
3486
+ ],
3487
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
3488
+ endpoint: () => {
3489
+ return { relay: 1, usb: 2 };
3490
+ },
3491
+ exposes: [
3492
+ e.switch().withEndpoint('relay'),
3493
+ e.switch().withEndpoint('usb'),
3494
+ e.power().withAccess(ea.STATE),
3495
+ e.energy(),
3496
+ e.device_temperature().withAccess(ea.STATE),
3497
+ e.voltage(),
3498
+ e.current(),
3499
+ e.power_outage_memory(),
3500
+ e.led_disabled_night(),
3501
+ e.button_lock(),
3502
+ e
3503
+ .enum('button_switch_mode', exposes.access.ALL, ['relay', 'relay_and_usb'])
3504
+ .withDescription('Control both relay and usb or only the relay with the physical switch button'),
3505
+ e.overload_protection(100, 2500),
3506
+ ],
3507
+ extend: [lumiZigbeeOTA()],
3508
+ },
3509
+ {
3510
+ zigbeeModel: ['lumi.magnet.agl02'],
3511
+ model: 'MCCGQ12LM',
3512
+ vendor: 'Aqara',
3513
+ description: 'Door and window sensor T1',
3514
+ whiteLabel: [
3515
+ { vendor: 'Aqara', model: 'DW-S03D' },
3516
+ { vendor: 'Yandex', model: 'YNDX-00520' },
3517
+ ],
3518
+ fromZigbee: [lumi.fromZigbee.lumi_contact, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.ias_contact_alarm_1],
3519
+ toZigbee: [],
3520
+ exposes: [e.contact(), e.battery(), e.battery_voltage()],
3521
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3522
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
3523
+ },
3524
+ {
3525
+ zigbeeModel: ['lumi.plug.sacn02'],
3526
+ model: 'QBCZ14LM',
3527
+ vendor: 'Aqara',
3528
+ description: 'Smart wall outlet T1',
3529
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_specific],
3530
+ toZigbee: [
3531
+ toZigbee_1.default.on_off,
3532
+ lumi.toZigbee.lumi_switch_power_outage_memory,
3533
+ lumi.toZigbee.lumi_led_disabled_night,
3534
+ lumi.toZigbee.lumi_overload_protection,
3535
+ lumi.toZigbee.lumi_socket_button_lock,
3536
+ ],
3537
+ exposes: [
3538
+ e.switch(),
3539
+ e.power().withAccess(ea.STATE),
3540
+ e.energy(),
3541
+ e.device_temperature().withAccess(ea.STATE),
3542
+ e.voltage(),
3543
+ e.current(),
3544
+ e.power_outage_memory(),
3545
+ e.led_disabled_night(),
3546
+ e.button_lock(),
3547
+ e.overload_protection(100, 2500),
3548
+ ],
3549
+ extend: [lumiZigbeeOTA()],
3550
+ },
3551
+ {
3552
+ zigbeeModel: ['lumi.remote.rkba01'],
3553
+ model: 'ZNXNKG02LM',
3554
+ vendor: 'Aqara',
3555
+ description: 'Smart rotary knob H1 (wireless)',
3556
+ extend: [
3557
+ (0, modernExtend_1.quirkCheckinInterval)('1_HOUR'),
3558
+ lumiPreventReset(),
3559
+ lumiCommandMode(),
3560
+ lumiAction({ actionLookup: { hold: 0, single: 1, double: 2, release: 255 } }),
3561
+ lumiBattery({ voltageToPercentage: { min: 2850, max: 3000 } }),
3562
+ lumiKnobRotation(),
3563
+ (0, modernExtend_1.enumLookup)({
3564
+ name: 'sensitivity',
3565
+ lookup: { low: 720, medium: 360, high: 180 },
3566
+ cluster: 'manuSpecificLumi',
3567
+ attribute: { ID: 0x0234, type: 0x21 },
3568
+ description: 'Rotation sensitivity',
3569
+ zigbeeCommandOptions: { manufacturerCode },
3570
+ }),
3571
+ ],
3572
+ },
3573
+ {
3574
+ zigbeeModel: ['lumi.remote.acn003'],
3575
+ model: 'WXKG16LM',
3576
+ vendor: 'Aqara',
3577
+ description: 'Wireless remote switch E1 (single rocker)',
3578
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3579
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3580
+ fromZigbee: [lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3581
+ toZigbee: [lumi.toZigbee.lumi_switch_click_mode],
3582
+ exposes: [
3583
+ e.battery(),
3584
+ e.battery_voltage(),
3585
+ e.action(['single', 'double', 'hold']),
3586
+ e
3587
+ .enum('click_mode', ea.ALL, ['fast', 'multi'])
3588
+ .withDescription('Click mode, fast: only supports single click which will be send immediately after clicking.' +
3589
+ 'multi: supports more events like double and hold'),
3590
+ ],
3591
+ configure: async (device, coordinatorEndpoint) => {
3592
+ await device.getEndpoint(1).write('manuSpecificLumi', { 0x0125: { value: 0x02, type: 0x20 } }, { manufacturerCode: manufacturerCode });
3593
+ },
3594
+ },
3595
+ {
3596
+ zigbeeModel: ['lumi.remote.acn004'],
3597
+ model: 'WXKG17LM',
3598
+ vendor: 'Aqara',
3599
+ description: 'Wireless remote switch E1 (double rocker)',
3600
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3601
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiPreventReset()],
3602
+ exposes: [
3603
+ e.battery(),
3604
+ e.battery_voltage(),
3605
+ e.action(['single_left', 'single_right', 'single_both', 'double_left', 'double_right', 'hold_left', 'hold_right']),
3606
+ e
3607
+ .enum('click_mode', ea.ALL, ['fast', 'multi'])
3608
+ .withDescription('Click mode, fast: only supports single click which will be send immediately after clicking, multi: supports more events like double and hold'),
3609
+ ],
3610
+ fromZigbee: [lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3611
+ toZigbee: [lumi.toZigbee.lumi_switch_click_mode],
3612
+ configure: async (device, coordinatorEndpoint) => {
3613
+ const endpoint1 = device.getEndpoint(1);
3614
+ // set multiclick mode
3615
+ await endpoint1.write('manuSpecificLumi', { 0x0125: { value: 0x02, type: 0x20 } }, { manufacturerCode: manufacturerCode });
3616
+ },
3617
+ },
3618
+ {
3619
+ zigbeeModel: ['lumi.remote.b18ac1'],
3620
+ model: 'WXKG14LM',
3621
+ vendor: 'Aqara',
3622
+ description: 'Wireless remote switch H1 (single rocker)',
3623
+ fromZigbee: [lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.command_toggle],
3624
+ toZigbee: [lumi.toZigbee.lumi_switch_click_mode, lumi.toZigbee.lumi_operation_mode_opple],
3625
+ exposes: [
3626
+ e.battery(),
3627
+ e.battery_voltage(),
3628
+ e.action(['single', 'double', 'triple', 'hold']),
3629
+ e
3630
+ .enum('click_mode', ea.ALL, ['fast', 'multi'])
3631
+ .withDescription('Click mode, fast: only supports single click which will be send immediately after clicking.' +
3632
+ 'multi: supports more events like double and hold'),
3633
+ e
3634
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
3635
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
3636
+ ],
3637
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3638
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3639
+ configure: async (device, coordinatorEndpoint) => {
3640
+ const endpoint1 = device.getEndpoint(1);
3641
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
3642
+ await endpoint1.read('manuSpecificLumi', [0x0125], { manufacturerCode: manufacturerCode });
3643
+ },
3644
+ },
3645
+ {
3646
+ zigbeeModel: ['lumi.airrtc.agl001'],
3647
+ model: 'SRTS-A01',
3648
+ vendor: 'Aqara',
3649
+ description: 'Smart radiator thermostat E1',
3650
+ fromZigbee: [lumi.fromZigbee.lumi_trv, fromZigbee_1.default.thermostat, fromZigbee_1.default.battery],
3651
+ toZigbee: [lumi.toZigbee.lumi_trv, toZigbee_1.default.thermostat_occupied_heating_setpoint],
3652
+ exposes: [
3653
+ e.setup().withDescription('Indicates if the device is in setup mode (E11)'),
3654
+ e
3655
+ .climate()
3656
+ .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
3657
+ .withLocalTemperature(ea.STATE, 'Current temperature measured by the internal or external sensor')
3658
+ .withSystemMode(['off', 'heat'], ea.ALL)
3659
+ .withPreset(['manual', 'away', 'auto'])
3660
+ .setAccess('preset', ea.ALL),
3661
+ e.temperature_sensor_select(['internal', 'external']).withAccess(ea.ALL),
3662
+ e.external_temperature_input().withDescription('Input for remote temperature sensor (when sensor is set to external)'),
3663
+ e.calibrated().withDescription('Indicates if this valve is calibrated, use the calibrate option to calibrate'),
3664
+ e.enum('calibrate', ea.ALL, ['calibrate']).withDescription('Calibrates the valve').withCategory('config'),
3665
+ e.child_lock().withAccess(ea.ALL),
3666
+ e.window_detection_bool(),
3667
+ e.window_open(),
3668
+ e.valve_detection_bool(),
3669
+ e
3670
+ .valve_alarm()
3671
+ .withDescription('Notifies of a temperature control abnormality if valve detection is enabled ' +
3672
+ '(e.g., thermostat not installed correctly, valve failure or incorrect calibration, ' +
3673
+ 'incorrect link to external temperature sensor)'),
3674
+ e.away_preset_temperature().withAccess(ea.ALL),
3675
+ e.battery_voltage(),
3676
+ e.battery(),
3677
+ e.power_outage_count(),
3678
+ e.device_temperature(),
3679
+ e.schedule(),
3680
+ e
3681
+ .schedule_settings()
3682
+ .withDescription('Smart schedule configuration (default: mon,tue,wed,thu,fri|8:00,24.0|18:00,17.0|23:00,22.0|8:00,22.0)'),
3683
+ ],
3684
+ configure: async (device, coordinatorEndpoint) => {
3685
+ const endpoint = device.getEndpoint(1);
3686
+ // Initialize battery percentage and voltage
3687
+ await endpoint.read('manuSpecificLumi', [0x040a], { manufacturerCode: manufacturerCode });
3688
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
3689
+ },
3690
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
3691
+ },
3692
+ {
3693
+ zigbeeModel: ['aqara.feeder.acn001'],
3694
+ model: 'ZNCWWSQ01LM',
3695
+ vendor: 'Aqara',
3696
+ description: 'Smart pet feeder C1',
3697
+ whiteLabel: [{ vendor: 'Aqara', model: 'PETC1-M01' }],
3698
+ fromZigbee: [lumi.fromZigbee.lumi_feeder],
3699
+ toZigbee: [lumi.toZigbee.lumi_feeder],
3700
+ exposes: [
3701
+ e.enum('feed', ea.STATE_SET, ['', 'START']).withDescription('Start feeding'),
3702
+ e.enum('feeding_source', ea.STATE, ['schedule', 'manual', 'remote']).withDescription('Feeding source'),
3703
+ e.numeric('feeding_size', ea.STATE).withDescription('Feeding size').withUnit('portion'),
3704
+ e.numeric('portions_per_day', ea.STATE).withDescription('Portions per day'),
3705
+ e.numeric('weight_per_day', ea.STATE).withDescription('Weight per day').withUnit('g'),
3706
+ e.binary('error', ea.STATE, true, false).withDescription('Indicates whether there is an error with the feeder'),
3707
+ e
3708
+ .list('schedule', ea.STATE_SET, e
3709
+ .composite('dayTime', 'dayTime', exposes.access.STATE_SET)
3710
+ .withFeature(e.enum('days', exposes.access.STATE_SET, [
3711
+ 'everyday',
3712
+ 'workdays',
3713
+ 'weekend',
3714
+ 'mon',
3715
+ 'tue',
3716
+ 'wed',
3717
+ 'thu',
3718
+ 'fri',
3719
+ 'sat',
3720
+ 'sun',
3721
+ 'mon-wed-fri-sun',
3722
+ 'tue-thu-sat',
3723
+ ]))
3724
+ .withFeature(e.numeric('hour', exposes.access.STATE_SET))
3725
+ .withFeature(e.numeric('minute', exposes.access.STATE_SET))
3726
+ .withFeature(e.numeric('size', exposes.access.STATE_SET)))
3727
+ .withDescription('Feeding schedule'),
3728
+ e
3729
+ .binary('led_indicator', ea.STATE_SET, 'ON', 'OFF')
3730
+ .withLabel('Disable LED at night')
3731
+ .withDescription('LED indicator will be disabled every day from 21:00 to 09:00')
3732
+ .withCategory('config'),
3733
+ e.child_lock(),
3734
+ e.enum('mode', ea.STATE_SET, ['schedule', 'manual']).withDescription('Feeding mode'),
3735
+ e
3736
+ .numeric('serving_size', ea.STATE_SET)
3737
+ .withValueMin(1)
3738
+ .withValueMax(10)
3739
+ .withDescription('One serving size')
3740
+ .withUnit('portion')
3741
+ .withCategory('config'),
3742
+ e
3743
+ .numeric('portion_weight', ea.STATE_SET)
3744
+ .withValueMin(1)
3745
+ .withValueMax(20)
3746
+ .withDescription('Portion weight')
3747
+ .withUnit('g')
3748
+ .withCategory('config'),
3749
+ ],
3750
+ extend: [lumiZigbeeOTA()],
3751
+ configure: async (device, coordinatorEndpoint) => {
3752
+ const endpoint = device.getEndpoint(1);
3753
+ await endpoint.read('manuSpecificLumi', [0xfff1], { manufacturerCode: manufacturerCode });
3754
+ device.powerSource = 'Mains (single phase)';
3755
+ device.save();
3756
+ },
3757
+ },
3758
+ {
3759
+ zigbeeModel: ['lumi.remote.acn007'],
3760
+ model: 'WXKG20LM',
3761
+ vendor: 'Aqara',
3762
+ description: 'Wireless mini switch E1',
3763
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3764
+ toZigbee: [],
3765
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3766
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3767
+ exposes: [
3768
+ e.battery(),
3769
+ e.battery_voltage(),
3770
+ e.action(['single', 'double', 'hold', 'release']),
3771
+ e.device_temperature(),
3772
+ e.power_outage_count(),
3773
+ ],
3774
+ },
3775
+ {
3776
+ zigbeeModel: ['lumi.remote.acn009'],
3777
+ model: 'WXKG22LM',
3778
+ vendor: 'Aqara',
3779
+ description: 'Wireless remote switch H1M (double rocker)',
3780
+ fromZigbee: [fromZigbee_1.default.battery, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific, fromZigbee_1.default.command_toggle],
3781
+ toZigbee: [lumi.toZigbee.lumi_switch_click_mode, lumi.toZigbee.lumi_operation_mode_opple],
3782
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } }, multiEndpoint: true },
3783
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR')],
3784
+ exposes: [
3785
+ e.battery(),
3786
+ e.battery_voltage(),
3787
+ e.action([
3788
+ 'single_left',
3789
+ 'single_right',
3790
+ 'single_both',
3791
+ 'double_left',
3792
+ 'double_right',
3793
+ 'double_both',
3794
+ 'triple_left',
3795
+ 'triple_right',
3796
+ 'triple_both',
3797
+ 'hold_left',
3798
+ 'hold_right',
3799
+ 'hold_both',
3800
+ ]),
3801
+ e
3802
+ .enum('click_mode', ea.ALL, ['fast', 'multi'])
3803
+ .withDescription('Click mode, fast: only supports single click which will be send immediately after clicking.' +
3804
+ 'multi: supports more events like double and hold'),
3805
+ e
3806
+ .enum('operation_mode', ea.ALL, ['command', 'event'])
3807
+ .withDescription('Operation mode, select "command" to enable bindings (wake up the device before changing modes!)'),
3808
+ ],
3809
+ configure: async (device, coordinatorEndpoint) => {
3810
+ const endpoint1 = device.getEndpoint(1);
3811
+ const endpoint2 = device.getEndpoint(3);
3812
+ // set "event" mode
3813
+ await endpoint1.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode });
3814
+ // turn on the "multiple clicks" mode, otherwise the only "single click" events.
3815
+ // if value is 1 - there will be single clicks, 2 - multiple.
3816
+ await endpoint1.write('manuSpecificLumi', { 0x0125: { value: 0x02, type: 0x20 } }, { manufacturerCode: manufacturerCode });
3817
+ await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
3818
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
3819
+ // TODO/BUG:
3820
+ // Did not understand how to separate the left and right keys in command mode -
3821
+ // the "toggleCommand" always arrives from the first endpoint
3822
+ },
3823
+ },
3824
+ {
3825
+ zigbeeModel: ['lumi.remote.b286acn03'],
3826
+ model: 'WXKG04LM',
3827
+ vendor: 'Aqara',
3828
+ description: 'Wireless remote switch T1 (double rocker)',
3829
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
3830
+ fromZigbee: [lumi.fromZigbee.lumi_basic, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
3831
+ toZigbee: [],
3832
+ endpoint: (device) => {
3833
+ return { left: 1, right: 2, both: 3 };
3834
+ },
3835
+ exposes: [
3836
+ e.battery(),
3837
+ e.battery_voltage(),
3838
+ e.action([
3839
+ 'button_1_hold',
3840
+ 'button_1_release',
3841
+ 'button_1_single',
3842
+ 'button_1_double',
3843
+ 'button_1_triple',
3844
+ 'button_2_hold',
3845
+ 'button_2_release',
3846
+ 'button_2_single',
3847
+ 'button_2_double',
3848
+ 'button_2_triple',
3849
+ 'button_3_hold',
3850
+ 'button_3_release',
3851
+ 'button_3_single',
3852
+ 'button_3_double',
3853
+ 'button_3_triple',
3854
+ ]),
3855
+ ],
3856
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
3857
+ },
3858
+ {
3859
+ zigbeeModel: ['lumi.switch.acn048'],
3860
+ model: 'ZNQBKG38LM',
3861
+ vendor: 'Aqara',
3862
+ description: 'Smart wall switch Z1 (single rocker)',
3863
+ extend: [
3864
+ lumiZigbeeOTA(),
3865
+ lumiPreventReset(),
3866
+ lumiOnOff({ operationMode: true, powerOutageMemory: 'enum', lockRelay: true }),
3867
+ lumiAction(),
3868
+ lumiElectricityMeter(),
3869
+ lumiPower(),
3870
+ lumiLedDisabledNight(),
3871
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3872
+ lumiSetEventMode(),
3873
+ ],
3874
+ },
3875
+ {
3876
+ zigbeeModel: ['lumi.switch.acn049'],
3877
+ model: 'ZNQBKG39LM',
3878
+ vendor: 'Aqara',
3879
+ description: 'Smart wall switch Z1 (double rocker)',
3880
+ extend: [
3881
+ lumiZigbeeOTA(),
3882
+ lumiPreventReset(),
3883
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, bottom: 2 } }),
3884
+ lumiOnOff({
3885
+ operationMode: true,
3886
+ powerOutageMemory: 'enum',
3887
+ lockRelay: true,
3888
+ endpointNames: ['top', 'bottom'],
3889
+ }),
3890
+ lumiAction({ endpointNames: ['top', 'bottom'] }),
3891
+ lumiElectricityMeter(),
3892
+ lumiPower(),
3893
+ lumiLedDisabledNight(),
3894
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3895
+ lumiSetEventMode(),
3896
+ ],
3897
+ },
3898
+ {
3899
+ zigbeeModel: ['lumi.switch.acn054'],
3900
+ model: 'ZNQBKG40LM',
3901
+ vendor: 'Aqara',
3902
+ description: 'Smart wall switch Z1 (triple rocker)',
3903
+ extend: [
3904
+ lumiZigbeeOTA(),
3905
+ lumiPreventReset(),
3906
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, center: 2, bottom: 3 } }),
3907
+ lumiOnOff({
3908
+ operationMode: true,
3909
+ powerOutageMemory: 'enum',
3910
+ lockRelay: true,
3911
+ endpointNames: ['top', 'center', 'bottom'],
3912
+ }),
3913
+ lumiAction({ endpointNames: ['top', 'center', 'bottom'] }),
3914
+ lumiElectricityMeter(),
3915
+ lumiPower(),
3916
+ lumiLedDisabledNight(),
3917
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3918
+ lumiSetEventMode(),
3919
+ ],
3920
+ },
3921
+ {
3922
+ zigbeeModel: ['lumi.switch.acn055'],
3923
+ model: 'ZNQBKG41LM',
3924
+ vendor: 'Aqara',
3925
+ description: 'Smart wall switch Z1 (quadruple rocker)',
3926
+ extend: [
3927
+ lumiZigbeeOTA(),
3928
+ lumiPreventReset(),
3929
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, center: 2, bottom: 3, wireless: 4 } }),
3930
+ lumiOnOff({
3931
+ operationMode: true,
3932
+ powerOutageMemory: 'enum',
3933
+ lockRelay: true,
3934
+ endpointNames: ['top', 'center', 'bottom'],
3935
+ }),
3936
+ lumiAction({
3937
+ actionLookup: { hold: 0, single: 1, double: 2, release: 255 },
3938
+ endpointNames: ['top', 'center', 'bottom', 'wireless'],
3939
+ }),
3940
+ lumiElectricityMeter(),
3941
+ lumiPower(),
3942
+ lumiLedDisabledNight(),
3943
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3944
+ lumiSetEventMode(),
3945
+ ],
3946
+ },
3947
+ {
3948
+ zigbeeModel: ['lumi.switch.acn056'],
3949
+ model: 'ZNQBKG42LM',
3950
+ vendor: 'Aqara',
3951
+ description: 'Smart wall switch Z1 Pro (single rocker)',
3952
+ extend: [
3953
+ lumiZigbeeOTA(),
3954
+ lumiPreventReset(),
3955
+ lumiOnOff({ operationMode: true, powerOutageMemory: 'enum', lockRelay: true }),
3956
+ lumiAction({ extraActions: ['slider_single', 'slider_double', 'slider_hold', 'slider_up', 'slider_down'] }),
3957
+ lumiElectricityMeter(),
3958
+ lumiPower(),
3959
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3960
+ lumiSlider(),
3961
+ lumiSwitchMode(),
3962
+ ],
3963
+ },
3964
+ {
3965
+ zigbeeModel: ['lumi.switch.acn057'],
3966
+ model: 'ZNQBKG43LM',
3967
+ vendor: 'Aqara',
3968
+ description: 'Smart wall switch Z1 Pro (double rocker)',
3969
+ extend: [
3970
+ lumiZigbeeOTA(),
3971
+ lumiPreventReset(),
3972
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, bottom: 2 } }),
3973
+ lumiOnOff({
3974
+ operationMode: true,
3975
+ powerOutageMemory: 'enum',
3976
+ lockRelay: true,
3977
+ endpointNames: ['top', 'bottom'],
3978
+ }),
3979
+ lumiAction({
3980
+ endpointNames: ['top', 'bottom'],
3981
+ extraActions: ['slider_single', 'slider_double', 'slider_hold', 'slider_up', 'slider_down'],
3982
+ }),
3983
+ lumiElectricityMeter(),
3984
+ lumiPower(),
3985
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
3986
+ lumiSlider(),
3987
+ lumiSwitchMode(),
3988
+ ],
3989
+ },
3990
+ {
3991
+ zigbeeModel: ['lumi.switch.acn058'],
3992
+ model: 'ZNQBKG44LM',
3993
+ vendor: 'Aqara',
3994
+ description: 'Smart wall switch Z1 Pro (triple rocker)',
3995
+ extend: [
3996
+ lumiZigbeeOTA(),
3997
+ lumiPreventReset(),
3998
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, center: 2, bottom: 3 } }),
3999
+ lumiOnOff({
4000
+ operationMode: true,
4001
+ powerOutageMemory: 'enum',
4002
+ lockRelay: true,
4003
+ endpointNames: ['top', 'center', 'bottom'],
4004
+ }),
4005
+ lumiAction({
4006
+ endpointNames: ['top', 'center', 'bottom'],
4007
+ extraActions: ['slider_single', 'slider_double', 'slider_hold', 'slider_up', 'slider_down'],
4008
+ }),
4009
+ lumiElectricityMeter(),
4010
+ lumiPower(),
4011
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
4012
+ lumiSlider(),
4013
+ lumiSwitchMode(),
4014
+ ],
4015
+ },
4016
+ {
4017
+ zigbeeModel: ['lumi.switch.acn059'],
4018
+ model: 'ZNQBKG45LM',
4019
+ vendor: 'Aqara',
4020
+ description: 'Smart wall switch Z1 Pro (quadruple rocker)',
4021
+ extend: [
4022
+ lumiZigbeeOTA(),
4023
+ lumiPreventReset(),
4024
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { top: 1, center: 2, bottom: 3, wireless: 4 } }),
4025
+ lumiOnOff({
4026
+ operationMode: true,
4027
+ powerOutageMemory: 'enum',
4028
+ lockRelay: true,
4029
+ endpointNames: ['top', 'center', 'bottom'],
4030
+ }),
4031
+ lumiAction({
4032
+ actionLookup: { hold: 0, single: 1, double: 2, release: 255 },
4033
+ endpointNames: ['top', 'center', 'bottom', 'wireless'],
4034
+ extraActions: ['slider_single', 'slider_double', 'slider_hold', 'slider_up', 'slider_down'],
4035
+ }),
4036
+ lumiElectricityMeter(),
4037
+ lumiPower(),
4038
+ lumiClickMode({ attribute: { ID: 0x0286, type: 0x20 } }),
4039
+ lumiSlider(),
4040
+ lumiSwitchMode(),
4041
+ ],
4042
+ },
4043
+ {
4044
+ zigbeeModel: ['lumi.switch.acn061'],
4045
+ model: 'WS-K01D',
4046
+ vendor: 'Aqara',
4047
+ description: 'Smart wall switch H1 20A (with neutral, single rocker)',
4048
+ extend: [
4049
+ lumiZigbeeOTA(),
4050
+ lumiPreventReset(),
4051
+ lumiOnOff({ operationMode: true, powerOutageMemory: 'binary' }),
4052
+ lumiAction({ actionLookup: { single: 1, double: 2 } }),
4053
+ lumiElectricityMeter(),
4054
+ lumiPower(),
4055
+ lumiLedDisabledNight(),
4056
+ lumiSetEventMode(),
4057
+ lumiFlipIndicatorLight(),
4058
+ ],
4059
+ },
4060
+ {
4061
+ zigbeeModel: ['lumi.remote.cagl02'],
4062
+ model: 'CTP-R01',
4063
+ vendor: 'Aqara',
4064
+ whiteLabel: [{ vendor: 'Aqara', model: 'MFCZQ12LM' }],
4065
+ description: 'Cube T1 Pro',
4066
+ meta: { battery: { voltageToPercentage: { min: 2850, max: 3000 } } },
4067
+ extend: [(0, modernExtend_1.quirkCheckinInterval)('1_HOUR'), lumiZigbeeOTA()],
4068
+ fromZigbee: [
4069
+ lumi.fromZigbee.lumi_specific,
4070
+ lumi.fromZigbee.lumi_action_multistate,
4071
+ lumi.fromZigbee.lumi_action_analog,
4072
+ fromZigbee_1.default.ignore_onoff_report,
4073
+ ],
4074
+ toZigbee: [lumi.toZigbee.lumi_cube_operation_mode],
4075
+ exposes: [
4076
+ e.battery(),
4077
+ e.battery_voltage(),
4078
+ e.power_outage_count(false),
4079
+ e
4080
+ .enum('operation_mode', ea.SET, ['action_mode', 'scene_mode'])
4081
+ .withDescription('[Soft Switch]: There is a configuration window, opens once an hour on itself, ' +
4082
+ 'only during which the cube will respond to mode switch. ' +
4083
+ 'Mode switch will be scheduled to take effect when the window becomes available. ' +
4084
+ 'You can also give it a throw action (no backward motion) to force a respond! ' +
4085
+ 'Otherwise, you may open lid and click LINK once to make the cube respond immediately. ' +
4086
+ '[Hard Switch]: Open lid and click LINK button 5 times.'),
4087
+ e.cube_side('side'),
4088
+ e
4089
+ .action([
4090
+ 'shake',
4091
+ 'throw',
4092
+ 'tap',
4093
+ 'slide',
4094
+ 'flip180',
4095
+ 'flip90',
4096
+ 'hold',
4097
+ 'side_up',
4098
+ 'rotate_left',
4099
+ 'rotate_right',
4100
+ '1_min_inactivity',
4101
+ 'flip_to_side',
4102
+ ])
4103
+ .withDescription('Triggered action'),
4104
+ e.cube_side('action_from_side'),
4105
+ e.angle('action_angle'),
4106
+ ],
4107
+ configure: async (device, coordinatorEndpoint) => {
4108
+ device.softwareBuildID = `0.0.0_00${device.applicationVersion}`;
4109
+ device.save();
4110
+ const endpoint = device.getEndpoint(1);
4111
+ await endpoint.write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableDefaultResponse: true, disableResponse: true });
4112
+ await endpoint.read('manuSpecificLumi', [0x148], {
4113
+ manufacturerCode: manufacturerCode,
4114
+ disableDefaultResponse: true,
4115
+ disableResponse: true,
4116
+ });
4117
+ },
4118
+ },
4119
+ {
4120
+ zigbeeModel: ['lumi.switch.acn040'],
4121
+ model: 'ZNQBKG31LM',
4122
+ vendor: 'Aqara',
4123
+ description: 'Smart wall switch E1 (with neutral, triple rocker)',
4124
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
4125
+ toZigbee: [
4126
+ toZigbee_1.default.on_off,
4127
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
4128
+ lumi.toZigbee.lumi_switch_power_outage_memory,
4129
+ lumi.toZigbee.lumi_switch_mode_switch,
4130
+ lumi.toZigbee.lumi_flip_indicator_light,
4131
+ ],
4132
+ endpoint: (device) => {
4133
+ return { left: 1, center: 2, right: 3 };
4134
+ },
4135
+ meta: { multiEndpoint: true },
4136
+ exposes: [
4137
+ e.switch().withEndpoint('left'),
4138
+ e.switch().withEndpoint('center'),
4139
+ e.switch().withEndpoint('right'),
4140
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
4141
+ e
4142
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
4143
+ .withDescription('Decoupled mode for center button')
4144
+ .withEndpoint('center'),
4145
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
4146
+ e.action([
4147
+ 'single_left',
4148
+ 'double_left',
4149
+ 'single_center',
4150
+ 'double_center',
4151
+ 'single_right',
4152
+ 'double_right',
4153
+ 'single_left_center',
4154
+ 'double_left_center',
4155
+ 'single_left_right',
4156
+ 'double_left_right',
4157
+ 'single_center_right',
4158
+ 'double_center_right',
4159
+ 'single_all',
4160
+ 'double_all',
4161
+ ]),
4162
+ e.power_outage_memory(),
4163
+ e.device_temperature(),
4164
+ e.flip_indicator_light(),
4165
+ ],
4166
+ configure: async (device, coordinatorEndpoint) => {
4167
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
4168
+ },
4169
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
4170
+ },
4171
+ {
4172
+ zigbeeModel: ['lumi.switch.acn029'],
4173
+ model: 'ZNQBKG24LM',
4174
+ vendor: 'Aqara',
4175
+ description: 'Smart wall switch H1M (with neutral, single rocker)',
4176
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_power, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific],
4177
+ toZigbee: [
4178
+ toZigbee_1.default.on_off,
4179
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
4180
+ lumi.toZigbee.lumi_switch_power_outage_memory,
4181
+ lumi.toZigbee.lumi_led_disabled_night,
4182
+ lumi.toZigbee.lumi_flip_indicator_light,
4183
+ ],
4184
+ exposes: [
4185
+ e.switch(),
4186
+ e.power(),
4187
+ e.energy(),
4188
+ e.voltage(),
4189
+ e.device_temperature(),
4190
+ e.action(['single', 'double']),
4191
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
4192
+ e.power_outage_memory(),
4193
+ e.led_disabled_night(),
4194
+ e.flip_indicator_light(),
4195
+ ],
4196
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
4197
+ },
4198
+ {
4199
+ zigbeeModel: ['lumi.switch.acn030'],
4200
+ model: 'ZNQBKG25LM',
4201
+ vendor: 'Aqara',
4202
+ description: 'Smart wall switch H1M (with neutral, double rocker)',
4203
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_power],
4204
+ toZigbee: [
4205
+ toZigbee_1.default.on_off,
4206
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
4207
+ lumi.toZigbee.lumi_switch_power_outage_memory,
4208
+ lumi.toZigbee.lumi_led_disabled_night,
4209
+ lumi.toZigbee.lumi_flip_indicator_light,
4210
+ ],
4211
+ endpoint: (device) => {
4212
+ return { left: 1, right: 2 };
4213
+ },
4214
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
4215
+ exposes: [
4216
+ e.power(),
4217
+ e.energy(),
4218
+ e.voltage(),
4219
+ e.switch().withEndpoint('left'),
4220
+ e.switch().withEndpoint('right'),
4221
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
4222
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
4223
+ e.action([
4224
+ 'single_left',
4225
+ 'double_left',
4226
+ 'single_right',
4227
+ 'double_right',
4228
+ 'single_left_right',
4229
+ 'double_left_right',
4230
+ 'single_all',
4231
+ 'double_all',
4232
+ ]),
4233
+ e.power_outage_memory(),
4234
+ e.led_disabled_night(),
4235
+ e.device_temperature(),
4236
+ e.flip_indicator_light(),
4237
+ ],
4238
+ configure: async (device, coordinatorEndpoint) => {
4239
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
4240
+ },
4241
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
4242
+ },
4243
+ {
4244
+ zigbeeModel: ['lumi.switch.acn031'],
4245
+ model: 'ZNQBKG26LM',
4246
+ vendor: 'Aqara',
4247
+ description: 'Smart wall switch H1M (with neutral, triple rocker)',
4248
+ fromZigbee: [fromZigbee_1.default.on_off, lumi.fromZigbee.lumi_action_multistate, lumi.fromZigbee.lumi_specific, lumi.fromZigbee.lumi_power],
4249
+ toZigbee: [
4250
+ toZigbee_1.default.on_off,
4251
+ lumi.toZigbee.lumi_switch_operation_mode_opple,
4252
+ lumi.toZigbee.lumi_switch_power_outage_memory,
4253
+ lumi.toZigbee.lumi_led_disabled_night,
4254
+ lumi.toZigbee.lumi_flip_indicator_light,
4255
+ ],
4256
+ endpoint: (device) => {
4257
+ return { left: 1, center: 2, right: 3 };
4258
+ },
4259
+ meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy'] },
4260
+ exposes: [
4261
+ e.power(),
4262
+ e.energy(),
4263
+ e.voltage(),
4264
+ e.switch().withEndpoint('left'),
4265
+ e.switch().withEndpoint('center'),
4266
+ e.switch().withEndpoint('right'),
4267
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for left button').withEndpoint('left'),
4268
+ e
4269
+ .enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
4270
+ .withDescription('Decoupled mode for center button')
4271
+ .withEndpoint('center'),
4272
+ e.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button').withEndpoint('right'),
4273
+ e.action([
4274
+ 'single_left',
4275
+ 'double_left',
4276
+ 'single_center',
4277
+ 'double_center',
4278
+ 'single_right',
4279
+ 'double_right',
4280
+ 'single_left_center',
4281
+ 'double_left_center',
4282
+ 'single_left_right',
4283
+ 'double_left_right',
4284
+ 'single_center_right',
4285
+ 'double_center_right',
4286
+ 'single_all',
4287
+ 'double_all',
4288
+ ]),
4289
+ e.power_outage_memory(),
4290
+ e.led_disabled_night(),
4291
+ e.device_temperature(),
4292
+ e.flip_indicator_light(),
4293
+ ],
4294
+ configure: async (device, coordinatorEndpoint) => {
4295
+ await device.getEndpoint(1).write('manuSpecificLumi', { mode: 1 }, { manufacturerCode: manufacturerCode, disableResponse: true });
4296
+ },
4297
+ extend: [lumiZigbeeOTA(), lumiPreventReset()],
4298
+ },
4299
+ {
4300
+ zigbeeModel: ['lumi.plug.aeu001'],
4301
+ model: 'WP-P01D',
4302
+ vendor: 'Aqara',
4303
+ description: 'Smart wall outlet H2 EU',
4304
+ extend: [
4305
+ lumiZigbeeOTA(),
4306
+ lumiOnOff({ powerOutageMemory: 'enum' }),
4307
+ lumiPower(),
4308
+ lumiElectricityMeter(),
4309
+ lumiOverloadProtection(),
4310
+ lumiLedIndicator(),
4311
+ lumiButtonLock(),
4312
+ (0, modernExtend_1.binary)({
4313
+ name: 'charging_protection',
4314
+ cluster: 'manuSpecificLumi',
4315
+ attribute: { ID: 0x0202, type: 0x10 },
4316
+ valueOn: ['ON', 1],
4317
+ valueOff: ['OFF', 0],
4318
+ description: 'Turn off the outlet if the power is below the set limit for half an hour',
4319
+ access: 'ALL',
4320
+ zigbeeCommandOptions: { manufacturerCode },
4321
+ }),
4322
+ (0, modernExtend_1.numeric)({
4323
+ name: 'charging_limit',
4324
+ cluster: 'manuSpecificLumi',
4325
+ attribute: { ID: 0x0206, type: 0x39 },
4326
+ valueMin: 0.1,
4327
+ valueMax: 2,
4328
+ valueStep: 0.1,
4329
+ unit: 'W',
4330
+ description: 'Charging protection power limit',
4331
+ access: 'ALL',
4332
+ zigbeeCommandOptions: { manufacturerCode },
4333
+ }),
4334
+ ],
4335
+ },
4336
+ {
4337
+ zigbeeModel: ['lumi.light.acn031'],
4338
+ model: 'HCXDD12LM',
4339
+ vendor: 'Aqara',
4340
+ description: 'Ceiling light T1',
4341
+ extend: [
4342
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { white: 1, rgb: 2 } }),
4343
+ lumiLight({ colorTemp: true, powerOutageMemory: 'light', endpointNames: ['white'] }),
4344
+ lumiLight({ colorTemp: true, deviceTemperature: false, powerOutageCount: false, color: { modes: ['xy', 'hs'] }, endpointNames: ['rgb'] }),
4345
+ lumiZigbeeOTA(),
4346
+ ],
4347
+ },
4348
+ {
4349
+ zigbeeModel: ['lumi.light.acn032'],
4350
+ model: 'CL-L02D',
4351
+ vendor: 'Aqara',
4352
+ description: 'Ceiling light T1M',
4353
+ extend: [
4354
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { white: 1, rgb: 2 } }),
4355
+ lumiLight({ colorTemp: true, endpointNames: ['white'] }),
4356
+ lumiLight({ colorTemp: true, deviceTemperature: false, powerOutageCount: false, color: { modes: ['xy', 'hs'] }, endpointNames: ['rgb'] }),
4357
+ lumiZigbeeOTA(),
4358
+ ],
4359
+ },
4360
+ {
4361
+ zigbeeModel: ['lumi.switch.rkna01'],
4362
+ model: 'ZNXNKG01LM',
4363
+ vendor: 'Aqara',
4364
+ description: 'Smart rotary knob H1 (with neutral)',
4365
+ extend: [
4366
+ lumiPreventReset(),
4367
+ (0, modernExtend_1.deviceEndpoints)({ endpoints: { left: 1, center: 2, right: 3 } }),
4368
+ lumiOnOff({ powerOutageMemory: 'binary', endpointNames: ['left', 'center', 'right'] }),
4369
+ lumiCommandMode(),
4370
+ lumiAction({ actionLookup: { hold: 0, single: 1, double: 2, release: 255 } }),
4371
+ lumiKnobRotation(),
4372
+ lumiElectricityMeter(),
4373
+ lumiPower(),
4374
+ lumiZigbeeOTA(),
4375
+ ],
4376
+ },
4377
+ {
4378
+ zigbeeModel: ['lumi.valve.agl001'],
4379
+ model: 'VC-X01D',
4380
+ vendor: 'Aqara',
4381
+ description: 'Valve controller T1',
4382
+ extend: [lumiZigbeeOTA(), (0, modernExtend_1.onOff)({ powerOnBehavior: false }), (0, modernExtend_1.battery)()],
4383
+ },
4384
+ ];
4385
+ exports.default = definitions;
4386
+ module.exports = definitions;
4387
+ //# sourceMappingURL=lumi.js.map