@willieee802/zigbee-herdsman-converters 15.0.8-4.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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/converters/fromZigbee.js +8439 -0
  4. package/converters/toZigbee.js +7162 -0
  5. package/devices/ITCommander.js +37 -0
  6. package/devices/RMC002.js +20 -0
  7. package/devices/acova.js +101 -0
  8. package/devices/acuity_brands_lighting.js +11 -0
  9. package/devices/adeo.js +256 -0
  10. package/devices/adurosmart.js +130 -0
  11. package/devices/aeotec.js +13 -0
  12. package/devices/airam.js +59 -0
  13. package/devices/ajax_online.js +49 -0
  14. package/devices/akuvox.js +28 -0
  15. package/devices/alchemy.js +18 -0
  16. package/devices/aldi.js +53 -0
  17. package/devices/alecto.js +98 -0
  18. package/devices/anchor.js +17 -0
  19. package/devices/atlantic.js +110 -0
  20. package/devices/atsmart.js +28 -0
  21. package/devices/aubess.js +21 -0
  22. package/devices/aurora_lighting.js +292 -0
  23. package/devices/automaton.js +44 -0
  24. package/devices/awox.js +184 -0
  25. package/devices/axis.js +22 -0
  26. package/devices/bankamp.js +11 -0
  27. package/devices/bega.js +22 -0
  28. package/devices/belkin.js +11 -0
  29. package/devices/bitron.js +334 -0
  30. package/devices/blaupunkt.js +27 -0
  31. package/devices/blitzwolf.js +47 -0
  32. package/devices/bosch.js +702 -0
  33. package/devices/brimate.js +15 -0
  34. package/devices/bseed.js +17 -0
  35. package/devices/bticino.js +118 -0
  36. package/devices/busch-jaeger.js +140 -0
  37. package/devices/byun.js +24 -0
  38. package/devices/calex.js +37 -0
  39. package/devices/candeo.js +49 -0
  40. package/devices/casaia.js +52 -0
  41. package/devices/centralite.js +359 -0
  42. package/devices/cleode.js +20 -0
  43. package/devices/cleverio.js +36 -0
  44. package/devices/climax.js +138 -0
  45. package/devices/commercial_electric.js +16 -0
  46. package/devices/connecte.js +46 -0
  47. package/devices/cree.js +11 -0
  48. package/devices/ctm.js +999 -0
  49. package/devices/current_products_corp.js +24 -0
  50. package/devices/custom_devices_diy.js +850 -0
  51. package/devices/cy-lighting.js +11 -0
  52. package/devices/danalock.js +26 -0
  53. package/devices/danfoss.js +340 -0
  54. package/devices/databyte.ch.js +55 -0
  55. package/devices/datek.js +246 -0
  56. package/devices/dawon_dns.js +338 -0
  57. package/devices/develco.js +868 -0
  58. package/devices/digi.js +14 -0
  59. package/devices/diyruz.js +305 -0
  60. package/devices/dlink.js +37 -0
  61. package/devices/dnake.js +11 -0
  62. package/devices/dresden_elektronik.js +47 -0
  63. package/devices/easyaccess.js +27 -0
  64. package/devices/eatonhalo_led.js +11 -0
  65. package/devices/echostar.js +25 -0
  66. package/devices/ecodim.js +145 -0
  67. package/devices/ecolink.js +21 -0
  68. package/devices/ecosmart.js +64 -0
  69. package/devices/ecozy.js +31 -0
  70. package/devices/edp.js +39 -0
  71. package/devices/eglo.js +25 -0
  72. package/devices/elko.js +176 -0
  73. package/devices/enbrighten.js +163 -0
  74. package/devices/enocean.js +52 -0
  75. package/devices/envilar.js +73 -0
  76. package/devices/essentialb.js +87 -0
  77. package/devices/eurotronic.js +48 -0
  78. package/devices/evanell.js +29 -0
  79. package/devices/evn.js +31 -0
  80. package/devices/evology.js +24 -0
  81. package/devices/evvr.js +17 -0
  82. package/devices/ewelink.js +184 -0
  83. package/devices/ezex.js +24 -0
  84. package/devices/fantem.js +77 -0
  85. package/devices/feibit.js +172 -0
  86. package/devices/fireangel.js +15 -0
  87. package/devices/frankever.js +23 -0
  88. package/devices/garza.js +11 -0
  89. package/devices/ge.js +111 -0
  90. package/devices/gewiss.js +48 -0
  91. package/devices/gidealed.js +11 -0
  92. package/devices/giderwel.js +11 -0
  93. package/devices/giex.js +222 -0
  94. package/devices/girier.js +19 -0
  95. package/devices/gledopto.js +756 -0
  96. package/devices/gmy.js +11 -0
  97. package/devices/gs.js +29 -0
  98. package/devices/halemeier.js +18 -0
  99. package/devices/hampton_bay.js +37 -0
  100. package/devices/heiman.js +805 -0
  101. package/devices/hej.js +107 -0
  102. package/devices/hfh.js +11 -0
  103. package/devices/hgkg.js +54 -0
  104. package/devices/hilux.js +11 -0
  105. package/devices/hive.js +524 -0
  106. package/devices/home_control_as.js +27 -0
  107. package/devices/hommyn.js +24 -0
  108. package/devices/honyar.js +29 -0
  109. package/devices/hornbach.js +53 -0
  110. package/devices/hzc.js +21 -0
  111. package/devices/hzc_electric.js +42 -0
  112. package/devices/icasa.js +121 -0
  113. package/devices/idinio.js +19 -0
  114. package/devices/ihorn.js +61 -0
  115. package/devices/ikea.js +1168 -0
  116. package/devices/ilightsin.js +11 -0
  117. package/devices/iluminize.js +262 -0
  118. package/devices/ilux.js +11 -0
  119. package/devices/immax.js +203 -0
  120. package/devices/innr.js +705 -0
  121. package/devices/inovelli.js +1315 -0
  122. package/devices/insta.js +110 -0
  123. package/devices/iolloi.js +20 -0
  124. package/devices/iotperfect.js +20 -0
  125. package/devices/iris.js +180 -0
  126. package/devices/istar.js +20 -0
  127. package/devices/jasco.js +55 -0
  128. package/devices/javis.js +37 -0
  129. package/devices/jethome.js +48 -0
  130. package/devices/jiawen.js +18 -0
  131. package/devices/jumitech.js +18 -0
  132. package/devices/jxuan.js +49 -0
  133. package/devices/kami.js +15 -0
  134. package/devices/keen_home.js +80 -0
  135. package/devices/klikaanklikuit.js +17 -0
  136. package/devices/kmpcil.js +148 -0
  137. package/devices/konke.js +141 -0
  138. package/devices/ksentry.js +17 -0
  139. package/devices/kurvia.js +17 -0
  140. package/devices/kwikset.js +120 -0
  141. package/devices/lanesto.js +11 -0
  142. package/devices/lds.js +11 -0
  143. package/devices/led_trading.js +69 -0
  144. package/devices/ledvance.js +353 -0
  145. package/devices/leedarson.js +130 -0
  146. package/devices/legrand.js +554 -0
  147. package/devices/lellki.js +146 -0
  148. package/devices/letsled.js +11 -0
  149. package/devices/letv.js +18 -0
  150. package/devices/leviton.js +142 -0
  151. package/devices/lg.js +18 -0
  152. package/devices/lidl.js +1000 -0
  153. package/devices/lifecontrol.js +92 -0
  154. package/devices/lightsolutions.js +37 -0
  155. package/devices/linkind.js +205 -0
  156. package/devices/livingwise.js +59 -0
  157. package/devices/livolo.js +286 -0
  158. package/devices/lixee.js +779 -0
  159. package/devices/lonsonho.js +218 -0
  160. package/devices/lubeez.js +18 -0
  161. package/devices/lupus.js +74 -0
  162. package/devices/lutron.js +32 -0
  163. package/devices/lux.js +40 -0
  164. package/devices/m-elec.js +18 -0
  165. package/devices/makegood.js +51 -0
  166. package/devices/matcall_bv.js +18 -0
  167. package/devices/meazon.js +47 -0
  168. package/devices/mercator.js +225 -0
  169. package/devices/miboxer.js +72 -0
  170. package/devices/micromatic.js +29 -0
  171. package/devices/moes.js +400 -0
  172. package/devices/mycket.js +11 -0
  173. package/devices/m/303/274ller_licht.js +220 -0
  174. package/devices/namron.js +774 -0
  175. package/devices/nanoleaf.js +11 -0
  176. package/devices/neo.js +86 -0
  177. package/devices/net2grid.js +29 -0
  178. package/devices/netvox.js +35 -0
  179. package/devices/niko.js +314 -0
  180. package/devices/ninja_blocks.js +24 -0
  181. package/devices/niviss.js +11 -0
  182. package/devices/nodon.js +109 -0
  183. package/devices/nordtronic.js +30 -0
  184. package/devices/nous.js +88 -0
  185. package/devices/novo.js +17 -0
  186. package/devices/nue_3a.js +417 -0
  187. package/devices/nyce.js +67 -0
  188. package/devices/onesti.js +59 -0
  189. package/devices/openlumi.js +22 -0
  190. package/devices/orvibo.js +515 -0
  191. package/devices/osram.js +519 -0
  192. package/devices/oujiabao.js +15 -0
  193. package/devices/owon.js +352 -0
  194. package/devices/ozsmartthings.js +11 -0
  195. package/devices/paul_neuhaus.js +96 -0
  196. package/devices/paulmann.js +158 -0
  197. package/devices/peq.js +24 -0
  198. package/devices/perenio.js +413 -0
  199. package/devices/philips.js +3118 -0
  200. package/devices/plaid.js +25 -0
  201. package/devices/plugwise.js +173 -0
  202. package/devices/popp.js +10 -0
  203. package/devices/profalux.js +47 -0
  204. package/devices/prolight.js +54 -0
  205. package/devices/qmotion.js +33 -0
  206. package/devices/qoto.js +113 -0
  207. package/devices/quotra.js +18 -0
  208. package/devices/rademacher.js +18 -0
  209. package/devices/rgb_genie.js +119 -0
  210. package/devices/robb.js +335 -0
  211. package/devices/roome.js +15 -0
  212. package/devices/rtx.js +90 -0
  213. package/devices/salus_controls.js +137 -0
  214. package/devices/samotech.js +93 -0
  215. package/devices/saswell.js +58 -0
  216. package/devices/scanproducts.js +32 -0
  217. package/devices/schlage.js +24 -0
  218. package/devices/schneider_electric.js +1039 -0
  219. package/devices/schwaiger.js +62 -0
  220. package/devices/seastar_intelligence.js +16 -0
  221. package/devices/securifi.js +39 -0
  222. package/devices/sengled.js +332 -0
  223. package/devices/sercomm.js +140 -0
  224. package/devices/shenzhen_homa.js +53 -0
  225. package/devices/shinasystem.js +686 -0
  226. package/devices/siglis.js +440 -0
  227. package/devices/sinope.js +1257 -0
  228. package/devices/siterwell.js +46 -0
  229. package/devices/skydance.js +112 -0
  230. package/devices/slv.js +27 -0
  231. package/devices/smart9.js +27 -0
  232. package/devices/smart_home_pty.js +18 -0
  233. package/devices/smartenit.js +42 -0
  234. package/devices/smartthings.js +495 -0
  235. package/devices/smartwings.js +24 -0
  236. package/devices/sohan_electric.js +13 -0
  237. package/devices/solaredge.js +11 -0
  238. package/devices/somgoms.js +47 -0
  239. package/devices/sonoff.js +262 -0
  240. package/devices/spotmau.js +36 -0
  241. package/devices/sprut.js +317 -0
  242. package/devices/stelpro.js +216 -0
  243. package/devices/sunricher.js +625 -0
  244. package/devices/swann.js +33 -0
  245. package/devices/sylvania.js +200 -0
  246. package/devices/tci.js +25 -0
  247. package/devices/technicolor.js +47 -0
  248. package/devices/terncy.js +64 -0
  249. package/devices/the_light_group.js +70 -0
  250. package/devices/third_reality.js +195 -0
  251. package/devices/titan_products.js +22 -0
  252. package/devices/tplink.js +42 -0
  253. package/devices/trust.js +114 -0
  254. package/devices/tubeszb.js +20 -0
  255. package/devices/tuya.js +4215 -0
  256. package/devices/ubisys.js +938 -0
  257. package/devices/uhome.js +25 -0
  258. package/devices/universal_electronics_inc.js +119 -0
  259. package/devices/urlighting.js +12 -0
  260. package/devices/useelink.js +52 -0
  261. package/devices/vbled.js +18 -0
  262. package/devices/vesternet.js +188 -0
  263. package/devices/viessmann.js +51 -0
  264. package/devices/villeroy_boch.js +18 -0
  265. package/devices/vimar.js +78 -0
  266. package/devices/visonic.js +80 -0
  267. package/devices/vrey.js +18 -0
  268. package/devices/wally.js +25 -0
  269. package/devices/waxman.js +45 -0
  270. package/devices/weiser.js +67 -0
  271. package/devices/weten.js +13 -0
  272. package/devices/wisdom.js +11 -0
  273. package/devices/woox.js +177 -0
  274. package/devices/wyze.js +23 -0
  275. package/devices/xiaomi.js +3223 -0
  276. package/devices/xinghuoyuan.js +11 -0
  277. package/devices/yale.js +227 -0
  278. package/devices/ynoa.js +68 -0
  279. package/devices/yookee.js +23 -0
  280. package/devices/ysrsai.js +26 -0
  281. package/devices/zemismart.js +254 -0
  282. package/devices/zen.js +34 -0
  283. package/devices/zipato.js +11 -0
  284. package/index.js +242 -0
  285. package/lib/color.js +784 -0
  286. package/lib/configureKey.js +944 -0
  287. package/lib/constants.js +316 -0
  288. package/lib/exposes.js +677 -0
  289. package/lib/extend.js +180 -0
  290. package/lib/kelvinToXy.js +1912 -0
  291. package/lib/legacy.js +2223 -0
  292. package/lib/light.js +111 -0
  293. package/lib/ota/OTA_URLs.md +119 -0
  294. package/lib/ota/common.js +476 -0
  295. package/lib/ota/index.js +10 -0
  296. package/lib/ota/inovelli.js +72 -0
  297. package/lib/ota/ledvance.js +52 -0
  298. package/lib/ota/lixee.js +57 -0
  299. package/lib/ota/salus.js +82 -0
  300. package/lib/ota/securifi.js +25 -0
  301. package/lib/ota/tradfri.js +45 -0
  302. package/lib/ota/ubisys.js +61 -0
  303. package/lib/ota/zigbeeOTA.js +161 -0
  304. package/lib/philips.js +667 -0
  305. package/lib/reporting.js +234 -0
  306. package/lib/store.js +57 -0
  307. package/lib/tuya.js +2027 -0
  308. package/lib/utils.js +527 -0
  309. package/lib/xiaomi.d.ts +11 -0
  310. package/lib/xiaomi.js +1288 -0
  311. package/lib/zosung.js +243 -0
  312. package/package.json +39 -0
@@ -0,0 +1,64 @@
1
+ const extend = require('../lib/extend');
2
+
3
+ module.exports = [
4
+ {
5
+ zigbeeModel: ['Ecosmart-ZBT-A19-CCT-Bulb'],
6
+ model: 'A9A19A60WESDZ02',
7
+ vendor: 'EcoSmart',
8
+ description: 'Tuneable white (A19)',
9
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
10
+ },
11
+ {
12
+ zigbeeModel: ['Ecosmart-ZBT-BR30-CCT-Bulb'],
13
+ model: 'A9BR3065WESDZ02',
14
+ vendor: 'EcoSmart',
15
+ description: 'Tuneable white (BR30)',
16
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
17
+ },
18
+ {
19
+ zigbeeModel: ['zhaRGBW'],
20
+ model: 'D1821',
21
+ vendor: 'EcoSmart',
22
+ description: 'A19 RGB bulb',
23
+ extend: extend.light_onoff_brightness_colortemp_color(),
24
+ },
25
+ {
26
+ // eslint-disable-next-line
27
+ zigbeeModel: ['\u0000\u0002\u0000\u0004\u0000\f^I\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004^��&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
28
+ model: 'D1531',
29
+ vendor: 'EcoSmart',
30
+ description: 'A19 bright white bulb',
31
+ extend: extend.light_onoff_brightness(),
32
+ },
33
+ {
34
+ // eslint-disable-next-line
35
+ zigbeeModel: ['\u0000\u0002\u0000\u0004\u0012 �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
36
+ model: 'D1532',
37
+ vendor: 'EcoSmart',
38
+ description: 'A19 soft white bulb',
39
+ extend: extend.light_onoff_brightness(),
40
+ },
41
+ {
42
+ zigbeeModel: ['zhaTunW'],
43
+ model: 'D1542',
44
+ vendor: 'EcoSmart',
45
+ description: 'GU10 adjustable white bulb',
46
+ extend: extend.light_onoff_brightness_colortemp(),
47
+ },
48
+ {
49
+ // eslint-disable-next-line
50
+ zigbeeModel: ['\u0000\u0002\u0000\u0004T\u0002\u000eZ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\u0000\f]�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\"�T\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\u0000\f^�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0011�\"�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004� �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0000\f^\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
51
+ model: 'D1533',
52
+ vendor: 'EcoSmart',
53
+ description: 'PAR20/A19 bright white bulb',
54
+ extend: extend.light_onoff_brightness(),
55
+ },
56
+ {
57
+ // eslint-disable-next-line
58
+ zigbeeModel: ['\u0000\u0002\u0000\u0004�V\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004��\"�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004�\u0003\"�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004r �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004b �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
59
+ model: 'D1523',
60
+ vendor: 'EcoSmart',
61
+ description: 'A19 soft white bulb',
62
+ extend: extend.light_onoff_brightness(),
63
+ },
64
+ ];
@@ -0,0 +1,31 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const tz = require('../converters/toZigbee');
4
+ const reporting = require('../lib/reporting');
5
+ const e = exposes.presets;
6
+ const ea = exposes.access;
7
+
8
+ module.exports = [
9
+ {
10
+ zigbeeModel: ['Thermostat'],
11
+ model: '1TST-EU',
12
+ vendor: 'eCozy',
13
+ description: 'Smart heating thermostat',
14
+ fromZigbee: [fz.battery, fz.legacy.thermostat_att_report],
15
+ toZigbee: [tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration, tz.thermostat_occupancy,
16
+ tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_setpoint_raise_lower,
17
+ tz.thermostat_remote_sensing, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
18
+ tz.thermostat_weekly_schedule, tz.thermostat_clear_weekly_schedule, tz.thermostat_relay_status_log,
19
+ tz.thermostat_pi_heating_demand, tz.thermostat_running_state],
20
+ exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
21
+ .withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])
22
+ .withLocalTemperatureCalibration()
23
+ .withPiHeatingDemand(ea.STATE_GET)],
24
+ configure: async (device, coordinatorEndpoint, logger) => {
25
+ const endpoint = device.getEndpoint(3);
26
+ const binds = ['genBasic', 'genPowerCfg', 'genIdentify', 'genTime', 'genPollCtrl', 'hvacThermostat', 'hvacUserInterfaceCfg'];
27
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
28
+ await reporting.thermostatTemperature(endpoint);
29
+ },
30
+ },
31
+ ];
package/devices/edp.js ADDED
@@ -0,0 +1,39 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const tz = require('../converters/toZigbee');
4
+ const reporting = require('../lib/reporting');
5
+ const extend = require('../lib/extend');
6
+ const e = exposes.presets;
7
+
8
+ module.exports = [
9
+ {
10
+ zigbeeModel: ['ZB-SmartPlug-1.0.0'],
11
+ model: 'PLUG EDP RE:DY',
12
+ vendor: 'EDP',
13
+ description: 're:dy plug',
14
+ fromZigbee: [fz.on_off, fz.metering],
15
+ toZigbee: [tz.on_off],
16
+ configure: async (device, coordinatorEndpoint, logger) => {
17
+ const endpoint = device.getEndpoint(85);
18
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
19
+ // await reporting.readMeteringMultiplierDivisor(endpoint);
20
+ // Fix for UNSUPPORTED_ATTRIBUTE
21
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 1000, multiplier: 1});
22
+ await reporting.onOff(endpoint);
23
+ await reporting.instantaneousDemand(endpoint);
24
+ },
25
+ exposes: [e.switch(), e.power(), e.energy()],
26
+ },
27
+ {
28
+ zigbeeModel: ['ZB-RelayControl-1.0.0'],
29
+ model: 'SWITCH EDP RE:DY',
30
+ vendor: 'EDP',
31
+ description: 're:dy switch',
32
+ extend: extend.switch(),
33
+ configure: async (device, coordinatorEndpoint, logger) => {
34
+ const endpoint = device.getEndpoint(85);
35
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
36
+ await reporting.onOff(endpoint);
37
+ },
38
+ },
39
+ ];
@@ -0,0 +1,25 @@
1
+ const extend = require('../lib/extend');
2
+
3
+ module.exports = [
4
+ {
5
+ zigbeeModel: ['EBF_RGB_Zm'],
6
+ model: '900091',
7
+ vendor: 'EGLO',
8
+ description: 'ROVITO-Z ceiling light',
9
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
10
+ },
11
+ {
12
+ zigbeeModel: ['ESMLFzm_w6_TW'],
13
+ model: '12242',
14
+ vendor: 'EGLO',
15
+ description: 'ST64 adjustable white filament bulb',
16
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
17
+ },
18
+ {
19
+ zigbeeModel: ['EGLO_ZM_RGB_TW'],
20
+ model: '900024',
21
+ vendor: 'EGLO',
22
+ description: 'SALITERAS-Z ceiling light',
23
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
24
+ },
25
+ ];
@@ -0,0 +1,176 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const tz = require('../converters/toZigbee');
4
+ const constants = require('../lib/constants');
5
+ const reporting = require('../lib/reporting');
6
+ const extend = require('../lib/extend');
7
+ const ea = exposes.access;
8
+ const e = exposes.presets;
9
+
10
+ module.exports = [
11
+ {
12
+ zigbeeModel: ['ElkoDimmerZHA'],
13
+ model: '316GLEDRF',
14
+ vendor: 'ELKO',
15
+ description: 'ZigBee in-wall smart dimmer',
16
+ extend: extend.light_onoff_brightness({noConfigure: true}),
17
+ meta: {disableDefaultResponse: true},
18
+ configure: async (device, coordinatorEndpoint, logger) => {
19
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
20
+ const endpoint = device.getEndpoint(1);
21
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
22
+ await reporting.onOff(endpoint);
23
+ },
24
+ },
25
+ {
26
+ zigbeeModel: ['ElkoDimmerRemoteZHA'],
27
+ model: 'EKO05806',
28
+ vendor: 'ELKO',
29
+ description: 'Elko ESH 316 Endevender RF',
30
+ fromZigbee: [fz.command_toggle, fz.command_step],
31
+ toZigbee: [],
32
+ exposes: [e.action(['toggle', 'brightness_step_up', 'brightness_step_down'])],
33
+ configure: async (device, coordinatorEndpoint, logger) => {
34
+ const endpoint = device.getEndpoint(1);
35
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
36
+ await reporting.onOff(endpoint);
37
+ },
38
+ },
39
+ {
40
+ zigbeeModel: ['Super TR'],
41
+ model: '4523430',
42
+ vendor: 'ELKO',
43
+ description: 'ESH Plus Super TR RF PH',
44
+ fromZigbee: [fz.elko_thermostat, fz.thermostat],
45
+ toZigbee: [tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_heating_setpoint, tz.elko_load,
46
+ tz.elko_display_text, tz.elko_power_status, tz.elko_external_temp, tz.elko_mean_power, tz.elko_child_lock, tz.elko_frost_guard,
47
+ tz.elko_relay_state, tz.elko_sensor_mode, tz.elko_local_temperature_calibration, tz.elko_max_floor_temp,
48
+ tz.elko_regulator_mode, tz.elko_regulator_time, tz.elko_night_switching],
49
+ exposes: [exposes.text('display_text', ea.ALL).withDescription('Displayed text on thermostat display (zone). Max 14 characters'),
50
+ exposes.numeric('load', ea.ALL).withUnit('W')
51
+ .withDescription('Load in W when heating is on (between 0-2000 W). The thermostat uses the value as input to the ' +
52
+ 'mean_power calculation.')
53
+ .withValueMin(0).withValueMax(2000),
54
+ exposes.binary('regulator_mode', ea.ALL, 'regulator', 'thermostat')
55
+ .withDescription('Device in regulator or thermostat mode.'),
56
+ exposes.numeric('regulator_time', ea.ALL).withUnit('min')
57
+ .withValueMin(5).withValueMax(20).withDescription('When device is in regulator mode this controls the time between each ' +
58
+ 'in/out connection. When device is in thermostat mode this controls the time between each in/out switch when measured ' +
59
+ 'temperature is within +-0.5 °C set temperature. Choose a long time for (slow) concrete floors and a short time for ' +
60
+ '(quick) wooden floors.'),
61
+ exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 50, 1)
62
+ .withLocalTemperature(ea.STATE)
63
+ .withLocalTemperatureCalibration()
64
+ .withSystemMode(['off', 'heat']).withRunningState(['idle', 'heat']),
65
+ e.temperature_sensor_select(['air', 'floor', 'supervisor_floor']),
66
+ exposes.numeric('floor_temp', ea.STATE_GET).withUnit('°C')
67
+ .withDescription('Current temperature measured from the floor sensor'),
68
+ exposes.numeric('max_floor_temp', ea.ALL).withUnit('°C')
69
+ .withDescription('Set max floor temperature (between 20-35 °C) when "supervisor_floor" is set')
70
+ .withValueMin(20).withValueMax(35),
71
+ exposes.numeric('mean_power', ea.STATE_GET).withUnit('W')
72
+ .withDescription('Reports average power usage last 10 minutes'),
73
+ exposes.binary('child_lock', ea.ALL, 'lock', 'unlock')
74
+ .withDescription('Enables/disables physical input on the device'),
75
+ exposes.binary('frost_guard', ea.ALL, 'on', 'off')
76
+ .withDescription('When frost guard is ON, it is activated when the thermostat is switched OFF with the ON/OFF button.' +
77
+ 'At the same time, the display will fade and the text "Frostsikring x °C" appears in the display and remains until the ' +
78
+ 'thermostat is switched on again.'),
79
+ exposes.binary('night_switching', ea.ALL, 'on', 'off')
80
+ .withDescription('Turn on or off night setting.'),
81
+ ],
82
+ configure: async (device, coordinatorEndpoint, logger) => {
83
+ const endpoint = device.getEndpoint(1);
84
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacThermostat', 'genBasic', 'genIdentify']);
85
+
86
+ // standard ZCL attributes
87
+ await reporting.thermostatTemperature(endpoint);
88
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
89
+
90
+ // ELKO attributes
91
+ // Load value
92
+ await endpoint.configureReporting('hvacThermostat', [{
93
+ attribute: 'elkoLoad',
94
+ minimumReportInterval: 0,
95
+ maximumReportInterval: constants.repInterval.HOUR,
96
+ reportableChange: null,
97
+ }]);
98
+ // Power status
99
+ await endpoint.configureReporting('hvacThermostat', [{
100
+ attribute: 'elkoPowerStatus',
101
+ minimumReportInterval: 0,
102
+ maximumReportInterval: constants.repInterval.HOUR,
103
+ reportableChange: null,
104
+ }]);
105
+ // Power consumption
106
+ await endpoint.configureReporting('hvacThermostat', [{
107
+ attribute: 'elkoMeanPower',
108
+ minimumReportInterval: 0,
109
+ maximumReportInterval: constants.repInterval.HOUR,
110
+ reportableChange: 5,
111
+ }]);
112
+ // External temp sensor (floor)
113
+ await endpoint.configureReporting('hvacThermostat', [{
114
+ attribute: 'elkoExternalTemp',
115
+ minimumReportInterval: 0,
116
+ maximumReportInterval: constants.repInterval.HOUR,
117
+ reportableChange: 10,
118
+ }]);
119
+ // Child lock active/inactive
120
+ await endpoint.configureReporting('hvacThermostat', [{
121
+ attribute: 'elkoChildLock',
122
+ minimumReportInterval: 0,
123
+ maximumReportInterval: constants.repInterval.HOUR,
124
+ reportableChange: null,
125
+ }]);
126
+ // Night switching
127
+ await endpoint.configureReporting('hvacThermostat', [{
128
+ attribute: 'elkoNightSwitching',
129
+ minimumReportInterval: 0,
130
+ maximumReportInterval: constants.repInterval.HOUR,
131
+ reportableChange: null,
132
+ }]);
133
+ // Frost guard
134
+ await endpoint.configureReporting('hvacThermostat', [{
135
+ attribute: 'elkoFrostGuard',
136
+ minimumReportInterval: 0,
137
+ maximumReportInterval: constants.repInterval.HOUR,
138
+ reportableChange: null,
139
+ }]);
140
+ // Heating active/inactive
141
+ await endpoint.configureReporting('hvacThermostat', [{
142
+ attribute: 'elkoRelayState',
143
+ minimumReportInterval: 0,
144
+ maximumReportInterval: constants.repInterval.HOUR,
145
+ reportableChange: null,
146
+ }]);
147
+ // Max floor temp
148
+ await endpoint.configureReporting('hvacThermostat', [{
149
+ attribute: 'elkoMaxFloorTemp',
150
+ minimumReportInterval: 0,
151
+ maximumReportInterval: constants.repInterval.HOUR,
152
+ reportableChange: 1,
153
+ }]);
154
+
155
+ // Regulator mode
156
+ await endpoint.configureReporting('hvacThermostat', [{
157
+ attribute: 'elkoRegulatorMode',
158
+ minimumReportInterval: 0,
159
+ maximumReportInterval: constants.repInterval.HOUR,
160
+ reportableChange: null,
161
+ }]);
162
+ // Regulator time
163
+ await endpoint.configureReporting('hvacThermostat', [{
164
+ attribute: 'elkoRegulatorTime',
165
+ minimumReportInterval: 0,
166
+ maximumReportInterval: constants.repInterval.HOUR,
167
+ reportableChange: 1,
168
+ }]);
169
+ // Trigger read
170
+ await endpoint.read('hvacThermostat', ['elkoDisplayText', 'elkoSensor']);
171
+
172
+ device.powerSource = 'Mains (single phase)';
173
+ device.save();
174
+ },
175
+ },
176
+ ];
@@ -0,0 +1,163 @@
1
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
2
+ const exposes = require('../lib/exposes');
3
+ const reporting = require('../lib/reporting');
4
+ const extend = require('../lib/extend');
5
+ const e = exposes.presets;
6
+
7
+ module.exports = [
8
+ {
9
+ zigbeeModel: ['43076'],
10
+ model: '43076',
11
+ vendor: 'Enbrighten',
12
+ description: 'Zigbee in-wall smart switch',
13
+ extend: extend.switch(),
14
+ configure: async (device, coordinatorEndpoint, logger) => {
15
+ const endpoint = device.getEndpoint(1);
16
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
17
+ await reporting.onOff(endpoint);
18
+ },
19
+ },
20
+ {
21
+ zigbeeModel: ['43078'],
22
+ model: '43078',
23
+ vendor: 'Enbrighten',
24
+ description: 'Zigbee in-wall smart switch',
25
+ extend: extend.switch(),
26
+ fromZigbee: [...extend.switch().fromZigbee, fz.metering],
27
+ configure: async (device, coordinatorEndpoint, logger) => {
28
+ const endpoint = device.getEndpoint(1);
29
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
30
+ await reporting.onOff(endpoint);
31
+ await reporting.readMeteringMultiplierDivisor(endpoint);
32
+ await reporting.instantaneousDemand(endpoint);
33
+ },
34
+ exposes: [e.switch(), e.power(), e.energy()],
35
+ },
36
+ {
37
+ zigbeeModel: ['43080'],
38
+ model: '43080',
39
+ vendor: 'Enbrighten',
40
+ description: 'Zigbee in-wall smart dimmer',
41
+ extend: extend.light_onoff_brightness({noConfigure: true}),
42
+ configure: async (device, coordinatorEndpoint, logger) => {
43
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
44
+ const endpoint = device.getEndpoint(1);
45
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
46
+ await reporting.onOff(endpoint);
47
+ },
48
+ },
49
+ {
50
+ zigbeeModel: ['43113'],
51
+ model: '43113',
52
+ vendor: 'Enbrighten',
53
+ description: 'Zigbee in-wall smart dimmer',
54
+ extend: extend.light_onoff_brightness({noConfigure: true}),
55
+ configure: async (device, coordinatorEndpoint, logger) => {
56
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
57
+ const endpoint = device.getEndpoint(1);
58
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
59
+ await reporting.onOff(endpoint);
60
+ },
61
+ },
62
+ {
63
+ zigbeeModel: ['43102'],
64
+ model: '43102',
65
+ vendor: 'Enbrighten',
66
+ description: 'Zigbee in-wall outlet',
67
+ extend: extend.switch(),
68
+ },
69
+ {
70
+ zigbeeModel: ['43100'],
71
+ model: '43100',
72
+ vendor: 'Enbrighten',
73
+ description: 'Plug-in Zigbee outdoor smart switch',
74
+ extend: extend.switch(),
75
+ fromZigbee: [fz.command_on_state, fz.command_off_state],
76
+ configure: async (device, coordinatorEndpoint, logger) => {
77
+ const endpoint1 = device.getEndpoint(1);
78
+ const endpoint2 = device.getEndpoint(2);
79
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
80
+ await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff']);
81
+ await reporting.onOff(endpoint1);
82
+ },
83
+ },
84
+ {
85
+ zigbeeModel: ['43082'],
86
+ model: '43082',
87
+ vendor: 'Enbrighten',
88
+ description: 'Zigbee in-wall smart dimmer',
89
+ extend: extend.light_onoff_brightness({disableEffect: true, noConfigure: true}),
90
+ fromZigbee: [...extend.light_onoff_brightness({disableEffect: true, noConfigure: true}).fromZigbee, fz.metering],
91
+ configure: async (device, coordinatorEndpoint, logger) => {
92
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
93
+ const endpoint = device.getEndpoint(1);
94
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'seMetering']);
95
+ await reporting.onOff(endpoint);
96
+ await reporting.readMeteringMultiplierDivisor(endpoint);
97
+ await reporting.instantaneousDemand(endpoint);
98
+ },
99
+ exposes: [e.light_brightness(), e.power(), e.energy()],
100
+ },
101
+ {
102
+ zigbeeModel: ['43084'],
103
+ model: '43084',
104
+ vendor: 'Enbrighten',
105
+ description: 'Zigbee in-wall smart switch',
106
+ extend: extend.switch(),
107
+ configure: async (device, coordinatorEndpoint, logger) => {
108
+ const endpoint = device.getEndpoint(1);
109
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
110
+ await reporting.onOff(endpoint);
111
+ },
112
+ },
113
+ {
114
+ zigbeeModel: ['43090'],
115
+ model: '43090',
116
+ vendor: 'Enbrighten',
117
+ description: 'Zigbee in-wall smart dimmer',
118
+ extend: extend.light_onoff_brightness({noConfigure: true}),
119
+ configure: async (device, coordinatorEndpoint, logger) => {
120
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
121
+ const endpoint = device.getEndpoint(1);
122
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
123
+ await reporting.onOff(endpoint);
124
+ },
125
+ },
126
+ {
127
+ zigbeeModel: ['43094'],
128
+ model: '43094',
129
+ vendor: 'Enbrighten',
130
+ description: 'Zigbee in-wall smart switch ZB4102',
131
+ extend: extend.switch(),
132
+ configure: async (device, coordinatorEndpoint, logger) => {
133
+ const endpoint = device.getEndpoint(1);
134
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
135
+ await reporting.onOff(endpoint);
136
+ },
137
+ },
138
+ {
139
+ zigbeeModel: ['43096'],
140
+ model: '43096',
141
+ vendor: 'Enbrighten',
142
+ description: 'Zigbee plug-in smart dimmer with dual controlled outlets',
143
+ extend: extend.light_onoff_brightness({noConfigure: true}),
144
+ configure: async (device, coordinatorEndpoint, logger) => {
145
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
146
+ const endpoint = device.getEndpoint(1);
147
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
148
+ await reporting.onOff(endpoint);
149
+ },
150
+ },
151
+ {
152
+ zigbeeModel: ['43109'],
153
+ model: '43109',
154
+ vendor: 'Enbrighten',
155
+ description: 'Zigbee in-wall smart switch',
156
+ extend: extend.switch(),
157
+ configure: async (device, coordinatorEndpoint, logger) => {
158
+ const endpoint = device.getEndpoint(1);
159
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
160
+ await reporting.onOff(endpoint);
161
+ },
162
+ },
163
+ ];
@@ -0,0 +1,52 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const e = exposes.presets;
4
+
5
+ module.exports = [
6
+ {
7
+ fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000017.....$/}],
8
+ model: 'PTM 215Z',
9
+ vendor: 'EnOcean',
10
+ description: 'Pushbutton transmitter module',
11
+ fromZigbee: [fz.enocean_ptm215z],
12
+ toZigbee: [],
13
+ exposes: [e.action(['press_1', 'release_1', 'press_2', 'release_2', 'press_3', 'release_3', 'press_4', 'release_4',
14
+ 'press_1_and_3', 'release_1_and_3', 'press_2_and_4', 'release_2_and_4', 'press_energy_bar'])],
15
+ whiteLabel: [
16
+ {vendor: 'Niko', description: 'Dimmer switch for Hue system', model: '91004'},
17
+ {vendor: 'NodOn', description: 'Smart switch for Philips Hue', model: 'CWS-4-1-01_HUE'},
18
+ {vendor: 'Vimar', description: 'Zigbee Friends of Hue RF switch', model: '03906'},
19
+ {vendor: 'Sunricher', model: 'SR-ZGP2801K4-FOH-E'},
20
+ {vendor: 'LED Trading', model: '9125'},
21
+ {vendor: 'Feller', description: 'Smart light control for Philips Hue', model: '4120.2.S.FMI.61'},
22
+ ],
23
+ },
24
+ {
25
+ fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000015.....$/}],
26
+ model: 'PTM 215ZE',
27
+ vendor: 'EnOcean',
28
+ description: 'Pushbutton transmitter module',
29
+ fromZigbee: [fz.enocean_ptm215ze],
30
+ toZigbee: [],
31
+ exposes: [e.action(['press_1', 'release_1', 'press_2', 'release_2', 'press_3', 'release_3', 'press_4', 'release_4',
32
+ 'press_1_and_2', 'release_1_and_2', 'press_1_and_3', 'release_1_and_3', 'press_1_and_4', 'release_1_and_4',
33
+ 'press_2_and_3', 'release_2_and_3', 'press_2_and_4', 'release_2_and_4', 'press_3_and_4', 'release_3_and_4',
34
+ 'press_energy_bar', 'release_energy_bar', 'press_or_release_all',
35
+ 'lock', 'unlock', 'half_open', 'tilt'])],
36
+ whiteLabel: [
37
+ {vendor: 'Easyfit by EnOcean', description: 'Wall switch for Zigbee', model: 'EWSxZ'},
38
+ {vendor: 'Trio2sys', description: 'Zigbee Green Power complete switch', model: '20020002'},
39
+ ],
40
+ },
41
+ {
42
+ fingerprint: [{modelID: 'GreenPower_7', ieeeAddr: /^0x00000000015.....$/}],
43
+ model: 'PTM 216Z',
44
+ vendor: 'EnOcean',
45
+ description: 'Pushbutton transmitter module',
46
+ fromZigbee: [fz.enocean_ptm216z],
47
+ toZigbee: [],
48
+ exposes: [e.action(['press_1', 'press_2', 'press_1_and_2', 'press_3', 'press_1_and_3', 'press_3_and_4', 'press_1_and_2_and_3',
49
+ 'press_4', 'press_1_and_4', 'press_2_and_4', 'press_1_and_2_and_4', 'press_3_and_4', 'press_1_and_3_and_4',
50
+ 'press_2_and_3_and_4', 'press_all', 'press_energy_bar', 'release'])],
51
+ },
52
+ ];
@@ -0,0 +1,73 @@
1
+ const reporting = require('../lib/reporting');
2
+ const extend = require('../lib/extend');
3
+ const exposes = require('../lib/exposes');
4
+ const e = exposes.presets;
5
+ const fz = require('../converters/fromZigbee');
6
+
7
+ module.exports = [
8
+ {
9
+ zigbeeModel: ['ZG_LED_DRIVER42CC'],
10
+ model: 'ZG_LED_DRIVER42CC',
11
+ vendor: 'ENVILAR',
12
+ description: 'Zigbee LED driver',
13
+ extend: extend.light_onoff_brightness(),
14
+ },
15
+ {
16
+ zigbeeModel: ['ZG50CC-CCT-DRIVER', 'HK-CCT'],
17
+ model: 'ZG50CC-CCT-DRIVER',
18
+ vendor: 'Envilar',
19
+ description: 'Zigbee CCT LED driver',
20
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [160, 450]}),
21
+ },
22
+ {
23
+ zigbeeModel: ['ZGR904-S'],
24
+ model: 'ZGR904-S',
25
+ vendor: 'Envilar',
26
+ description: 'Touchlink remote',
27
+ meta: {battery: {dontDividePercentage: true}},
28
+ fromZigbee: [fz.command_recall, fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.battery],
29
+ toZigbee: [],
30
+ exposes: [e.battery(),
31
+ e.action(['recall_1', 'recall_2', 'on', 'off', 'brightness_stop', 'brightness_move_up', 'brightness_move_down'])],
32
+ },
33
+ {
34
+ zigbeeModel: ['ZG102-BOX-UNIDIM'],
35
+ model: 'ZG102-BOX-UNIDIM',
36
+ vendor: 'Envilar',
37
+ description: 'ZigBee AC phase-cut dimmer',
38
+ extend: extend.light_onoff_brightness({noConfigure: true}),
39
+ configure: async (device, coordinatorEndpoint, logger) => {
40
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
41
+ const endpoint = device.getEndpoint(1);
42
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
43
+ await reporting.onOff(endpoint);
44
+ },
45
+ },
46
+ {
47
+ zigbeeModel: ['ZG302-BOX-RELAY'],
48
+ model: 'ZG302-BOX-RELAY',
49
+ vendor: 'Envilar',
50
+ description: 'Zigbee AC in wall switch',
51
+ extend: extend.switch(),
52
+ configure: async (device, coordinatorEndpoint, logger) => {
53
+ const endpoint = device.getEndpoint(1);
54
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genIdentify', 'genOnOff']);
55
+ },
56
+ },
57
+ {
58
+ zigbeeModel: ['2CH-ZG-BOX-RELAY'],
59
+ model: '2CH-ZG-BOX-RELAY',
60
+ vendor: 'Envilar',
61
+ description: '2 channel box relay',
62
+ extend: extend.switch(),
63
+ exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2')],
64
+ endpoint: (device) => {
65
+ return {'l1': 1, 'l2': 2};
66
+ },
67
+ meta: {multiEndpoint: true},
68
+ configure: async (device, coordinatorEndpoint, logger) => {
69
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
70
+ await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
71
+ },
72
+ },
73
+ ];