@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,400 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = require('../converters/fromZigbee');
3
+ const tz = require('../converters/toZigbee');
4
+ const ota = require('../lib/ota');
5
+ const tuya = require('../lib/tuya');
6
+ const reporting = require('../lib/reporting');
7
+ const extend = require('../lib/extend');
8
+ const e = exposes.presets;
9
+ const ea = exposes.access;
10
+ const zosung = require('../lib/zosung');
11
+ const fzZosung = zosung.fzZosung;
12
+ const tzZosung = zosung.tzZosung;
13
+ const ez = zosung.presetsZosung;
14
+
15
+ const exposesLocal = {
16
+ hour: (name) => exposes.numeric(name, ea.STATE_SET).withUnit('h').withValueMin(0).withValueMax(23),
17
+ minute: (name) => exposes.numeric(name, ea.STATE_SET).withUnit('m').withValueMin(0).withValueMax(59),
18
+ program_temperature: (name) => exposes.numeric(name, ea.STATE_SET).withUnit('°C')
19
+ .withValueMin(5).withValueMax(35).withValueStep(0.5),
20
+ };
21
+
22
+ module.exports = [
23
+ {
24
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_cymsnfvf'},
25
+ {modelID: 'TS011F', manufacturerName: '_TZ3000_2xlvlnez'}],
26
+ model: 'ZP-LZ-FR2U',
27
+ vendor: 'Moes',
28
+ description: 'Zigbee 3.0 dual USB wireless socket plug',
29
+ extend: tuya.extend.switch({powerOutageMemory: true, indicatorMode: true, childLock: true, endpoints: ['l1', 'l2']}),
30
+ endpoint: (device) => {
31
+ return {'l1': 1, 'l2': 2};
32
+ },
33
+ meta: {multiEndpoint: true},
34
+ configure: async (device, coordinatorEndpoint, logger) => {
35
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
36
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
37
+ await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
38
+ await reporting.onOff(device.getEndpoint(1));
39
+ await reporting.onOff(device.getEndpoint(2));
40
+ },
41
+ },
42
+ {
43
+ fingerprint: [{modelID: 'TS0121', manufacturerName: '_TYZB01_iuepbmpv'}, {modelID: 'TS011F', manufacturerName: '_TZ3000_zmy1waw6'},
44
+ {modelID: 'TS011F', manufacturerName: '_TZ3000_bkfe0bab'}],
45
+ model: 'MS-104Z',
46
+ description: 'Smart light switch module (1 gang)',
47
+ vendor: 'Moes',
48
+ extend: tuya.extend.switch({powerOnBehavior: true}),
49
+ configure: async (device, coordinatorEndpoint, logger) => {
50
+ const endpoint = device.getEndpoint(1);
51
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
52
+ try {
53
+ // Fails for some devices.
54
+ // https://github.com/Koenkk/zigbee2mqtt/issues/4598
55
+ await reporting.onOff(endpoint);
56
+ } catch (e) {
57
+ e;
58
+ }
59
+ },
60
+ },
61
+ {
62
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_pmz6mjyu'}],
63
+ model: 'MS-104BZ',
64
+ description: 'Smart light switch module (2 gang)',
65
+ vendor: 'Moes',
66
+ extend: tuya.extend.switch({endpoints: ['l1', 'l2']}),
67
+ meta: {multiEndpoint: true},
68
+ endpoint: (device) => {
69
+ return {l1: 1, l2: 2};
70
+ },
71
+ configure: async (device, coordinatorEndpoint, logger) => {
72
+ const endpoint1 = device.getEndpoint(1);
73
+ await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff']);
74
+ await reporting.onOff(endpoint1);
75
+ const endpoint2 = device.getEndpoint(2);
76
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
77
+ await reporting.onOff(endpoint2);
78
+ },
79
+ },
80
+ {
81
+ zigbeeModel: ['TS0112'],
82
+ model: 'ZK-EU-2U',
83
+ vendor: 'Moes',
84
+ description: 'Zigbee 3.0 dual USB wireless socket plug',
85
+ extend: extend.switch(),
86
+ exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2')],
87
+ meta: {multiEndpoint: true},
88
+ endpoint: (device) => {
89
+ const hasEndpoint2 = !!device.getEndpoint(2);
90
+ return {l1: 1, l2: hasEndpoint2 ? 2 : 7};
91
+ },
92
+ configure: async (device, coordinatorEndpoint, logger) => {
93
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
94
+ await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
95
+ },
96
+ },
97
+ {
98
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_aoclfnxz'},
99
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ztvwu4nk'},
100
+ {modelID: 'TS0601', manufacturerName: '_TZE200_5toc8efa'},
101
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ye5jkfsb'},
102
+ {modelID: 'TS0601', manufacturerName: '_TZE200_u9bfwha0'}],
103
+ model: 'BHT-002-GCLZB',
104
+ vendor: 'Moes',
105
+ description: 'Moes BHT series Thermostat',
106
+ fromZigbee: [fz.moes_thermostat],
107
+ toZigbee: [tz.moes_thermostat_child_lock, tz.moes_thermostat_current_heating_setpoint, tz.moes_thermostat_mode,
108
+ tz.moes_thermostat_standby, tz.moes_thermostat_sensor, tz.moes_thermostat_calibration,
109
+ tz.moes_thermostat_deadzone_temperature, tz.moes_thermostat_max_temperature_limit, tz.moes_thermostat_min_temperature_limit,
110
+ tz.moes_thermostat_program_schedule],
111
+ exposes: [e.child_lock(), e.deadzone_temperature(), e.max_temperature_limit(), e.min_temperature_limit(),
112
+ exposes.climate().withSetpoint('current_heating_setpoint', 5, 35, 1, ea.STATE_SET)
113
+ .withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
114
+ .withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat', 'cool'], ea.STATE)
115
+ .withPreset(['hold', 'program']),
116
+ e.temperature_sensor_select(['IN', 'AL', 'OU']),
117
+ exposes.composite('program', 'program', ea.STATE_SET).withDescription('Time of day and setpoint to use when in program mode')
118
+ .withFeature(exposesLocal.hour('weekdays_p1_hour'))
119
+ .withFeature(exposesLocal.minute('weekdays_p1_minute'))
120
+ .withFeature(exposesLocal.program_temperature('weekdays_p1_temperature'))
121
+ .withFeature(exposesLocal.hour('weekdays_p2_hour'))
122
+ .withFeature(exposesLocal.minute('weekdays_p2_minute'))
123
+ .withFeature(exposesLocal.program_temperature('weekdays_p2_temperature'))
124
+ .withFeature(exposesLocal.hour('weekdays_p3_hour'))
125
+ .withFeature(exposesLocal.minute('weekdays_p3_minute'))
126
+ .withFeature(exposesLocal.program_temperature('weekdays_p3_temperature'))
127
+ .withFeature(exposesLocal.hour('weekdays_p4_hour'))
128
+ .withFeature(exposesLocal.minute('weekdays_p4_minute'))
129
+ .withFeature(exposesLocal.program_temperature('weekdays_p4_temperature'))
130
+ .withFeature(exposesLocal.hour('saturday_p1_hour'))
131
+ .withFeature(exposesLocal.minute('saturday_p1_minute'))
132
+ .withFeature(exposesLocal.program_temperature('saturday_p1_temperature'))
133
+ .withFeature(exposesLocal.hour('saturday_p2_hour'))
134
+ .withFeature(exposesLocal.minute('saturday_p2_minute'))
135
+ .withFeature(exposesLocal.program_temperature('saturday_p2_temperature'))
136
+ .withFeature(exposesLocal.hour('saturday_p3_hour'))
137
+ .withFeature(exposesLocal.minute('saturday_p3_minute'))
138
+ .withFeature(exposesLocal.program_temperature('saturday_p3_temperature'))
139
+ .withFeature(exposesLocal.hour('saturday_p4_hour'))
140
+ .withFeature(exposesLocal.minute('saturday_p4_minute'))
141
+ .withFeature(exposesLocal.program_temperature('saturday_p4_temperature'))
142
+ .withFeature(exposesLocal.hour('sunday_p1_hour'))
143
+ .withFeature(exposesLocal.minute('sunday_p1_minute'))
144
+ .withFeature(exposesLocal.program_temperature('sunday_p1_temperature'))
145
+ .withFeature(exposesLocal.hour('sunday_p2_hour'))
146
+ .withFeature(exposesLocal.minute('sunday_p2_minute'))
147
+ .withFeature(exposesLocal.program_temperature('sunday_p2_temperature'))
148
+ .withFeature(exposesLocal.hour('sunday_p3_hour'))
149
+ .withFeature(exposesLocal.minute('sunday_p3_minute'))
150
+ .withFeature(exposesLocal.program_temperature('sunday_p3_temperature'))
151
+ .withFeature(exposesLocal.hour('sunday_p4_hour'))
152
+ .withFeature(exposesLocal.minute('sunday_p4_minute'))
153
+ .withFeature(exposesLocal.program_temperature('sunday_p4_temperature')),
154
+ ],
155
+ onEvent: tuya.onEventSetLocalTime,
156
+ },
157
+ {
158
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_amp6tsvy'}, {modelID: 'TS0601', manufacturerName: '_TZE200_tviaymwx'}],
159
+ model: 'ZTS-EU_1gang',
160
+ vendor: 'Moes',
161
+ description: 'Wall touch light switch (1 gang)',
162
+ exposes: [e.switch().setAccess('state', ea.STATE_SET),
163
+ exposes.enum('indicate_light', ea.STATE_SET, Object.values(tuya.moesSwitch.indicateLight))
164
+ .withDescription('Indicator light status'),
165
+ exposes.enum('power_on_behavior', ea.STATE_SET, Object.values(tuya.moesSwitch.powerOnBehavior))
166
+ .withDescription('Controls the behavior when the device is powered on')],
167
+ fromZigbee: [fz.tuya_switch, fz.moes_switch],
168
+ toZigbee: [tz.tuya_switch_state, tz.moes_switch],
169
+ onEvent: tuya.onEventSetLocalTime,
170
+ configure: async (device, coordinatorEndpoint, logger) => {
171
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
172
+ // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
173
+ device.powerSource = 'Mains (single phase)';
174
+ device.save();
175
+ },
176
+ },
177
+ {
178
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_g1ib5ldv'}],
179
+ model: 'ZTS-EU_2gang',
180
+ vendor: 'Moes',
181
+ description: 'Wall touch light switch (2 gang)',
182
+ exposes: [e.switch().withEndpoint('l1').setAccess('state', ea.STATE_SET),
183
+ e.switch().withEndpoint('l2').setAccess('state', ea.STATE_SET),
184
+ exposes.enum('indicate_light', ea.STATE_SET, Object.values(tuya.moesSwitch.indicateLight))
185
+ .withDescription('Indicator light status'),
186
+ exposes.enum('power_on_behavior', ea.STATE_SET, Object.values(tuya.moesSwitch.powerOnBehavior))
187
+ .withDescription('Controls the behavior when the device is powered on')],
188
+ fromZigbee: [fz.ignore_basic_report, fz.tuya_switch, fz.moes_switch],
189
+ toZigbee: [tz.tuya_switch_state, tz.moes_switch],
190
+ onEvent: tuya.onEventSetLocalTime,
191
+ meta: {multiEndpoint: true},
192
+ endpoint: (device) => {
193
+ // Endpoint selection is made in tuya_switch_state
194
+ return {'l1': 1, 'l2': 1};
195
+ },
196
+ configure: async (device, coordinatorEndpoint, logger) => {
197
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
198
+ if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
199
+ // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
200
+ device.powerSource = 'Mains (single phase)';
201
+ device.save();
202
+ },
203
+ },
204
+ {
205
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_tz32mtza'}],
206
+ model: 'ZTS-EU_3gang',
207
+ vendor: 'Moes',
208
+ description: 'Wall touch light switch (3 gang)',
209
+ exposes: [e.switch().withEndpoint('l1').setAccess('state', ea.STATE_SET),
210
+ e.switch().withEndpoint('l2').setAccess('state', ea.STATE_SET),
211
+ e.switch().withEndpoint('l3').setAccess('state', ea.STATE_SET),
212
+ exposes.enum('indicate_light', ea.STATE_SET, Object.values(tuya.moesSwitch.indicateLight))
213
+ .withDescription('Indicator light status'),
214
+ exposes.enum('power_on_behavior', ea.STATE_SET, Object.values(tuya.moesSwitch.powerOnBehavior))
215
+ .withDescription('Controls the behavior when the device is powered on')],
216
+ fromZigbee: [fz.ignore_basic_report, fz.tuya_switch, fz.moes_switch],
217
+ toZigbee: [tz.tuya_switch_state, tz.moes_switch],
218
+ onEvent: tuya.onEventSetLocalTime,
219
+ meta: {multiEndpoint: true},
220
+ endpoint: (device) => {
221
+ // Endpoint selection is made in tuya_switch_state
222
+ return {'l1': 1, 'l2': 1, 'l3': 1};
223
+ },
224
+ configure: async (device, coordinatorEndpoint, logger) => {
225
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
226
+ if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
227
+ if (device.getEndpoint(3)) await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
228
+ // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
229
+ device.powerSource = 'Mains (single phase)';
230
+ device.save();
231
+ },
232
+ },
233
+ {
234
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1ozguk6x'}],
235
+ model: 'ZTS-EU_4gang',
236
+ vendor: 'Moes',
237
+ description: 'Wall touch light switch (4 gang)',
238
+ exposes: [e.switch().withEndpoint('l1').setAccess('state', ea.STATE_SET),
239
+ e.switch().withEndpoint('l2').setAccess('state', ea.STATE_SET),
240
+ e.switch().withEndpoint('l3').setAccess('state', ea.STATE_SET),
241
+ e.switch().withEndpoint('l4').setAccess('state', ea.STATE_SET),
242
+ exposes.enum('indicate_light', ea.STATE_SET, Object.values(tuya.moesSwitch.indicateLight))
243
+ .withDescription('Indicator light status'),
244
+ exposes.enum('power_on_behavior', ea.STATE_SET, Object.values(tuya.moesSwitch.powerOnBehavior))
245
+ .withDescription('Controls the behavior when the device is powered on')],
246
+ fromZigbee: [fz.ignore_basic_report, fz.tuya_switch, fz.moes_switch],
247
+ toZigbee: [tz.tuya_switch_state, tz.moes_switch],
248
+ onEvent: tuya.onEventSetLocalTime,
249
+ meta: {multiEndpoint: true},
250
+ endpoint: (device) => {
251
+ // Endpoint selection is made in tuya_switch_state
252
+ return {'l1': 1, 'l2': 1, 'l3': 1, 'l4': 1};
253
+ },
254
+ configure: async (device, coordinatorEndpoint, logger) => {
255
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
256
+ if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
257
+ if (device.getEndpoint(3)) await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
258
+ if (device.getEndpoint(4)) await reporting.bind(device.getEndpoint(4), coordinatorEndpoint, ['genOnOff']);
259
+ // Reports itself as battery which is not correct: https://github.com/Koenkk/zigbee2mqtt/issues/6190
260
+ device.powerSource = 'Mains (single phase)';
261
+ device.save();
262
+ },
263
+ },
264
+ {
265
+ fingerprint: [{modelID: 'TS0222', manufacturerName: '_TYZB01_kvwjujy9'}, {modelID: 'TS0222', manufacturerName: '_TYZB01_ftdkanlj'}],
266
+ model: 'ZSS-ZK-THL',
267
+ vendor: 'Moes',
268
+ description: 'Smart temperature and humidity meter with display',
269
+ fromZigbee: [fz.battery, fz.illuminance, fz.humidity, fz.temperature],
270
+ toZigbee: [],
271
+ exposes: [e.battery(), e.illuminance(), e.illuminance_lux().withUnit('lx'), e.humidity(), e.temperature()],
272
+ },
273
+ {
274
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_b6wax7g0'}],
275
+ model: 'BRT-100-TRV',
276
+ vendor: 'Moes',
277
+ description: 'Thermostatic radiator valve',
278
+ ota: ota.zigbeeOTA,
279
+ onEvent: tuya.onEventSetLocalTime,
280
+ fromZigbee: [fz.ignore_basic_report, fz.ignore_tuya_set_time, fz.moesS_thermostat],
281
+ toZigbee: [tz.moesS_thermostat_current_heating_setpoint, tz.moesS_thermostat_child_lock,
282
+ tz.moesS_thermostat_window_detection, tz.moesS_thermostat_temperature_calibration,
283
+ tz.moesS_thermostat_boost_heating, tz.moesS_thermostat_boostHeatingCountdownTimeSet,
284
+ tz.moesS_thermostat_eco_temperature, tz.moesS_thermostat_max_temperature,
285
+ tz.moesS_thermostat_min_temperature, tz.moesS_thermostat_moesSecoMode,
286
+ tz.moesS_thermostat_preset, tz.moesS_thermostat_schedule_programming,
287
+ tz.moesS_thermostat_system_mode],
288
+ exposes: [
289
+ e.battery(), e.child_lock(), e.eco_mode(),
290
+ e.eco_temperature().withValueMin(5), e.max_temperature().withValueMax(45), e.min_temperature().withValueMin(5),
291
+ e.valve_state(), e.position(), e.window_detection(),
292
+ exposes.binary('window', ea.STATE, 'OPEN', 'CLOSED').withDescription('Window status closed or open '),
293
+ exposes.climate()
294
+ .withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 1, ea.STATE_SET)
295
+ .withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET)
296
+ .withSystemMode(['heat'], ea.STATE_SET)
297
+ .withRunningState(['idle', 'heat'], ea.STATE)
298
+ .withPreset(['programming', 'manual', 'temporary_manual', 'holiday'],
299
+ 'MANUAL MODE ☝ - In this mode, the device executes manual temperature setting. '+
300
+ 'When the set temperature is lower than the "minimum temperature", the valve is closed (forced closed). ' +
301
+ 'PROGRAMMING MODE ⏱ - In this mode, the device executes a preset week programming temperature time and temperature. ' +
302
+ 'HOLIDAY MODE ⛱ - In this mode, for example, the vacation mode is set for 10 days and the temperature is set' +
303
+ 'to 15 degrees Celsius. After 10 days, the device will automatically switch to programming mode. ' +
304
+ 'TEMPORARY MANUAL MODE - In this mode, ☝ icon will flash. At this time, the device executes the manually set ' +
305
+ 'temperature and returns to the weekly programming mode in the next time period. '),
306
+ exposes.text('programming_mode', ea.STATE_SET).withDescription('PROGRAMMING MODE ⏱ - In this mode, ' +
307
+ 'the device executes a preset week programming temperature time and temperature. ' +
308
+ 'You can set up to 4 stages of temperature every for WEEKDAY ➀➁➂➃➄, SATURDAY ➅ and SUNDAY ➆.'),
309
+ exposes.binary('boost_heating', ea.STATE_SET, 'ON', 'OFF').withDescription('Boost Heating: press and hold "+" for 3 seconds, ' +
310
+ 'the device will enter the boost heating mode, and the ▷╵◁ will flash. The countdown will be displayed in the APP'),
311
+ exposes.numeric('boost_heating_countdown', ea.STATE).withUnit('min').withDescription('Countdown in minutes')
312
+ .withValueMin(0).withValueMax(15),
313
+ exposes.numeric('boost_heating_countdown_time_set', ea.STATE_SET).withUnit('s')
314
+ .withDescription('Boost Time Setting 100 sec - 900 sec, (default = 300 sec)').withValueMin(100)
315
+ .withValueMax(900).withValueStep(100)],
316
+ },
317
+ {
318
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e3oitdyu'}],
319
+ model: 'MS-105B',
320
+ vendor: 'Moes',
321
+ description: 'Smart dimmer module (2 gang)',
322
+ fromZigbee: [fz.moes_105_dimmer, fz.ignore_basic_report],
323
+ toZigbee: [tz.moes_105_dimmer],
324
+ meta: {turnsOffAtBrightness1: true, multiEndpoint: true},
325
+ configure: async (device, coordinatorEndpoint, logger) => {
326
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
327
+ if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
328
+ },
329
+ exposes: [e.light_brightness().withEndpoint('l1').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET),
330
+ e.light_brightness().withEndpoint('l2').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET)],
331
+ endpoint: (device) => {
332
+ return {'l1': 1, 'l2': 1};
333
+ },
334
+ },
335
+ {
336
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_7hcgjxpc'},
337
+ {modelID: 'TS0505B', manufacturerName: '_TZ3210_rcggc0ys'}],
338
+ model: 'ZLD-RCW',
339
+ vendor: 'Moes',
340
+ description: 'RGB+CCT Zigbee LED Controller',
341
+ extend: tuya.extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
342
+ },
343
+ {
344
+ fingerprint: [{modelID: 'TS130F', manufacturerName: '_TZ3000_1dd0d5yi'}],
345
+ model: 'MS-108ZR',
346
+ vendor: 'Moes',
347
+ description: 'Zigbee + RF curtain switch module',
348
+ meta: {coverInverted: true},
349
+ fromZigbee: [fz.tuya_cover_options, fz.cover_position_tilt],
350
+ toZigbee: [tz.cover_state, tz.moes_cover_calibration, tz.cover_position_tilt, tz.tuya_cover_reversal],
351
+ exposes: [e.cover_position(), exposes.numeric('calibration_time', ea.ALL).withValueMin(0).withValueMax(100),
352
+ exposes.enum('moving', ea.STATE, ['UP', 'STOP', 'DOWN']), exposes.binary('motor_reversal', ea.ALL, 'ON', 'OFF')],
353
+ },
354
+ {
355
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nhyj64w2'}],
356
+ model: 'ZTS-EUR-C',
357
+ vendor: 'Moes',
358
+ description: 'Zigbee + RF curtain switch',
359
+ onEvent: tuya.onEventSetLocalTime,
360
+ fromZigbee: [fz.moes_cover, fz.ignore_basic_report],
361
+ toZigbee: [tz.moes_cover],
362
+ exposes: [e.cover_position().setAccess('position', ea.STATE_SET), exposes.enum('backlight', ea.STATE_SET, ['OFF', 'ON']),
363
+ exposes.enum('calibration', ea.STATE_SET, ['OFF', 'ON']), exposes.enum('motor_reversal', ea.STATE_SET, ['OFF', 'ON'])],
364
+ },
365
+ {
366
+ fingerprint: [
367
+ {modelID: 'TS1201', manufacturerName: '_TZ3290_j37rooaxrcdcqo5n'},
368
+ {modelID: 'TS1201', manufacturerName: '_TZ3290_ot6ewjvmejq5ekhl'},
369
+ ],
370
+ model: 'UFO-R11',
371
+ vendor: 'Moes',
372
+ description: 'Universal smart IR remote control',
373
+ fromZigbee: [
374
+ fzZosung.zosung_send_ir_code_00, fzZosung.zosung_send_ir_code_01, fzZosung.zosung_send_ir_code_02,
375
+ fzZosung.zosung_send_ir_code_03, fzZosung.zosung_send_ir_code_04, fzZosung.zosung_send_ir_code_05,
376
+ fz.battery,
377
+ ],
378
+ toZigbee: [tzZosung.zosung_ir_code_to_send, tzZosung.zosung_learn_ir_code],
379
+ exposes: [ez.learn_ir_code(), ez.learned_ir_code(), ez.ir_code_to_send(), e.battery(), e.battery_voltage()],
380
+ configure: async (device, coordinatorEndpoint, logger) => {
381
+ const endpoint = device.getEndpoint(1);
382
+ await endpoint.read('genPowerCfg', ['batteryVoltage', 'batteryPercentageRemaining']);
383
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
384
+ await reporting.batteryPercentageRemaining(endpoint);
385
+ await reporting.batteryVoltage(endpoint);
386
+ },
387
+ },
388
+ {
389
+ fingerprint: [{modelID: 'TS0011', manufacturerName: '_TZ3000_hhiodade'}],
390
+ model: 'ZS-EUB_1gang',
391
+ vendor: 'Moes',
392
+ description: 'Wall light switch (1 gang)',
393
+ extend: tuya.extend.switch({backlightModeOffNormalInverted: true}),
394
+ configure: async (device, coordinatorEndpoint, logger) => {
395
+ await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
396
+ device.powerSource = 'Mains (single phase)';
397
+ device.save();
398
+ },
399
+ },
400
+ ];
@@ -0,0 +1,11 @@
1
+ const tuya = require('../lib/tuya');
2
+
3
+ module.exports = [
4
+ {
5
+ fingerprint: [{modelID: 'TS0505A', manufacturerName: '_TZ3000_evag0pvn'}],
6
+ model: 'MS-SP-LE27WRGB',
7
+ description: 'E27 RGBW bulb',
8
+ vendor: 'Mycket',
9
+ extend: tuya.extend.light_onoff_brightness_colortemp_color(),
10
+ },
11
+ ];
@@ -0,0 +1,220 @@
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 tuya = require('../lib/tuya');
7
+ const e = exposes.presets;
8
+
9
+ module.exports = [
10
+ {
11
+ zigbeeModel: ['tint-ExtendedColor'],
12
+ model: '404036/45327/45317/45328',
13
+ vendor: 'Müller Licht',
14
+ description: 'Tint LED white+color',
15
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556]}),
16
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
17
+ },
18
+ {
19
+ zigbeeModel: ['Retro Bulb Gold XXL white+ambiance'],
20
+ model: '404065',
21
+ vendor: 'Müller Licht',
22
+ description: 'tint LED-Globe Retro Gold XXL E27',
23
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
24
+ toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
25
+ },
26
+ {
27
+ zigbeeModel: ['ZBT-DIMLight-A4700001'],
28
+ model: '404023',
29
+ vendor: 'Müller Licht',
30
+ description: 'LED bulb E27 470 lumen, dimmable, clear',
31
+ extend: extend.light_onoff_brightness(),
32
+ toZigbee: extend.light_onoff_brightness().toZigbee.concat([tz.tint_scene]),
33
+ },
34
+ {
35
+ zigbeeModel: ['Smart Socket'],
36
+ model: '404017',
37
+ vendor: 'Müller Licht',
38
+ description: 'Smart power strip',
39
+ extend: extend.switch(),
40
+ configure: async (device, coordinatorEndpoint, logger) => {
41
+ const endpoint = device.getEndpoint(11) || device.getEndpoint(1);
42
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
43
+ await reporting.onOff(endpoint);
44
+ },
45
+ },
46
+ {
47
+ zigbeeModel: ['tint smart power strip'],
48
+ model: '45391',
49
+ vendor: 'Müller Licht',
50
+ description: 'Smart power strip',
51
+ extend: extend.switch(),
52
+ configure: async (device, coordinatorEndpoint, logger) => {
53
+ const endpoint = device.getEndpoint(1);
54
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
55
+ await reporting.onOff(endpoint);
56
+ },
57
+ },
58
+ {
59
+ // Identify through fingerprint as modelID is the same as Airam 4713407
60
+ fingerprint: [{modelID: 'ZBT-DimmableLight', manufacturerName: 'MLI'}],
61
+ model: '404001',
62
+ vendor: 'Müller Licht',
63
+ description: 'LED bulb E27 806 lumen, dimmable',
64
+ extend: extend.light_onoff_brightness(),
65
+ toZigbee: extend.light_onoff_brightness().toZigbee.concat([tz.tint_scene]),
66
+ },
67
+ {
68
+ zigbeeModel: ['ZBT-ExtendedColor', 'Bulb white+color'],
69
+ model: '404000/404005/404012/404019',
70
+ vendor: 'Müller Licht',
71
+ description: 'Tint LED bulb GU10/E14/E27 350/470/806 lumen, dimmable, color, opal white',
72
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHS: true}),
73
+ toZigbee: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHS: true}).toZigbee
74
+ .concat([tz.tint_scene]),
75
+ // GU10 bulb does not support enhancedHue,
76
+ // we can identify these based on the presense of haDiagnostic input cluster
77
+ meta: {enhancedHue: (entity) => !entity.getDevice().getEndpoint(1).inputClusters.includes(2821)},
78
+ },
79
+ {
80
+ zigbeeModel: ['ZBT-ColorTemperature'],
81
+ model: '404006/404008/404004',
82
+ vendor: 'Müller Licht',
83
+ description: 'Tint LED bulb GU10/E14/E27 350/470/806 lumen, dimmable, opal white',
84
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
85
+ toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
86
+ },
87
+ {
88
+ zigbeeModel: ['ZBT-CCTLight-GU100000'],
89
+ model: '404024',
90
+ vendor: 'Müller Licht',
91
+ description: 'Tint retro LED bulb GU10, dimmable',
92
+ extend: extend.light_onoff_brightness_colortemp(),
93
+ toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
94
+ },
95
+ {
96
+ zigbeeModel: ['RGBW Lighting'],
97
+ model: '44435',
98
+ vendor: 'Müller Licht',
99
+ description: 'Tint LED Stripe, color, opal white',
100
+ extend: extend.light_onoff_brightness_colortemp_color(),
101
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
102
+ },
103
+ {
104
+ zigbeeModel: ['RGB-CCT'],
105
+ model: '404028/44435',
106
+ vendor: 'Müller Licht',
107
+ description: 'Tint LED Panel, color, opal white',
108
+ extend: extend.light_onoff_brightness_colortemp_color(),
109
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
110
+ },
111
+ {
112
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_mntza0sw'},
113
+ {modelID: 'TS0505B', manufacturerName: '_TZ3210_r0vzq1oj'}],
114
+ model: '404062',
115
+ vendor: 'Müller Licht',
116
+ description: 'Kea RGB+CCT',
117
+ extend: tuya.extend.light_onoff_brightness_colortemp_color(
118
+ {colorTempRange: [153, 500], toZigbee: [tz.tint_scene, tuya.tz.do_not_disturb, tuya.tz.color_power_on_behavior]}),
119
+ },
120
+ {
121
+ fingerprint: [{manufacturerName: '_TZ3000_bdbb0fon'}],
122
+ zigbeeModel: ['ZBT-Remote-ALL-RGBW', 'TS1001'],
123
+ model: 'MLI-404011/MLI-404049',
124
+ description: 'Tint remote control',
125
+ vendor: 'Müller Licht',
126
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.legacy.tint404011_brightness_updown_click,
127
+ fz.legacy.tint404011_move_to_color_temp, fz.legacy.tint404011_move_to_color, fz.tint_scene,
128
+ fz.legacy.tint404011_brightness_updown_release, fz.legacy.tint404011_brightness_updown_hold],
129
+ exposes: [e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up', 'brightness_move_down',
130
+ 'brightness_stop', 'color_temperature_move', 'color_move', 'scene_1', 'scene_2', 'scene_3', 'scene_4', 'scene_5', 'scene_6'])],
131
+ toZigbee: [],
132
+ },
133
+ {
134
+ zigbeeModel: ['ZBT-DIMController-D0800'],
135
+ model: '404002',
136
+ description: 'Tint dim remote control',
137
+ vendor: 'Müller Licht',
138
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_step, fz.command_move, fz.command_stop, fz.command_recall],
139
+ exposes: [e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up', 'brightness_move_down',
140
+ 'brightness_stop', 'recall_1'])],
141
+ toZigbee: [],
142
+ configure: async (device, coordinatorEndpoint, logger) => {
143
+ const endpoint = device.getEndpoint(1);
144
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genOnOff', 'genLevelCtrl', 'genScenes']);
145
+ },
146
+ },
147
+ {
148
+ zigbeeModel: ['tint Smart Switch'],
149
+ model: '404021',
150
+ description: 'Tint smart switch',
151
+ vendor: 'Müller Licht',
152
+ extend: extend.switch(),
153
+ configure: async (device, coordinatorEndpoint, logger) => {
154
+ const endpoint = device.getEndpoint(1) || device.getEndpoint(3);
155
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
156
+ await reporting.onOff(endpoint);
157
+ },
158
+ },
159
+ {
160
+ zigbeeModel: ['tint-Remote-white'],
161
+ model: '404022/404049C',
162
+ description: 'Tint dim remote control',
163
+ vendor: 'Müller Licht',
164
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_step, fz.command_move, fz.command_stop, fz.command_move_to_color_temp,
165
+ fz.command_move_to_color, fz.tint_scene],
166
+ exposes: [e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up', 'brightness_move_down',
167
+ 'brightness_stop', 'color_temperature_move', 'color_move', 'scene_1', 'scene_2', 'scene_3', 'scene_4', 'scene_5', 'scene_6'])],
168
+ toZigbee: [],
169
+ configure: async (device, coordinatorEndpoint, logger) => {
170
+ device.powerSource = 'Battery';
171
+ device.save();
172
+ },
173
+ },
174
+ {
175
+ zigbeeModel: ['tint-ColorTemperature', 'tint-ColorTemperature2'],
176
+ model: '404037/404038',
177
+ vendor: 'Müller Licht',
178
+ description: 'CCT LED-bulb',
179
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
180
+ toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
181
+ },
182
+ {
183
+ fingerprint: [{
184
+ // Identify through fingerprint as modelID is the same as Sunricher ZG192910-4
185
+ type: 'Router', manufacturerID: 4635, manufacturerName: 'MLI', modelID: 'CCT Lighting',
186
+ powerSource: 'Mains (single phase)', endpoints: [
187
+ {ID: 1, profileID: 49246, deviceID: 544, inputClusters: [0, 3, 4, 5, 6, 8, 768, 2821, 4096], outputClusters: [25]},
188
+ {ID: 242, profileID: 41440, deviceID: 102, inputClusters: [33], outputClusters: [33]},
189
+ ],
190
+ }],
191
+ model: '404031',
192
+ vendor: 'Müller Licht',
193
+ description: 'Tint Armaro',
194
+ extend: extend.light_onoff_brightness_colortemp(),
195
+ },
196
+ {
197
+ fingerprint: [{manufacturerName: 'MLI', modelID: 'Bulb white'}],
198
+ model: '45727',
199
+ vendor: 'Müller Licht',
200
+ description: 'Tint Amela 42cm, white+ambiance (1800-6500K)',
201
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 555]}),
202
+ toZigbee: extend.light_onoff_brightness_colortemp().toZigbee.concat([tz.tint_scene]),
203
+ },
204
+ {
205
+ fingerprint: [{manufacturerName: 'MLI', modelID: 'Candle white+color'}],
206
+ model: '45730',
207
+ vendor: 'Müller Licht',
208
+ description: 'Tint candle E14 white+color',
209
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
210
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
211
+ },
212
+ {
213
+ fingerprint: [{manufacturerName: 'MLI', modelID: 'Bulb white+color'}],
214
+ model: '45728',
215
+ vendor: 'Müller Licht',
216
+ description: 'Tint bulb E27 white+color',
217
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
218
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([tz.tint_scene]),
219
+ },
220
+ ];