@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,359 @@
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 globalStore = require('../lib/store');
5
+ const reporting = require('../lib/reporting');
6
+ const extend = require('../lib/extend');
7
+ const e = exposes.presets;
8
+ const ea = exposes.access;
9
+ const constants = require('../lib/constants');
10
+
11
+ const fzLocal = {
12
+ thermostat_3156105: {
13
+ cluster: 'hvacThermostat',
14
+ type: ['attributeReport', 'readResponse'],
15
+ convert: (model, msg, publish, options, meta) => {
16
+ if (msg.data.hasOwnProperty('runningState')) {
17
+ if (msg.data['runningState'] == 1) {
18
+ msg.data['runningState'] = 0;
19
+ } else if (msg.data['runningState'] == 5) {
20
+ msg.data['runningState'] = 4;
21
+ } else if (msg.data['runningState'] == 7) {
22
+ msg.data['runningState'] = 6;
23
+ } else if (msg.data['runningState'] == 13) {
24
+ msg.data['runningState'] = 9;
25
+ }
26
+ }
27
+ if (msg.data.hasOwnProperty('ctrlSeqeOfOper')) {
28
+ if (msg.data['ctrlSeqeOfOper'] == 6) {
29
+ msg.data['ctrlSeqeOfOper'] = 4;
30
+ }
31
+ }
32
+ return fz.thermostat.convert(model, msg, publish, options, meta);
33
+ },
34
+ },
35
+ };
36
+
37
+ module.exports = [
38
+ {
39
+ zigbeeModel: ['4256251-RZHAC'],
40
+ model: '4256251-RZHAC',
41
+ vendor: 'Centralite',
42
+ description: 'White Swiss power outlet switch with power meter',
43
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
44
+ toZigbee: [tz.on_off],
45
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
46
+ configure: async (device, coordinatorEndpoint, logger) => {
47
+ const endpoint = device.getEndpoint(1);
48
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
49
+ await reporting.onOff(endpoint);
50
+ await reporting.rmsVoltage(endpoint);
51
+ await reporting.rmsCurrent(endpoint);
52
+ await reporting.activePower(endpoint);
53
+ },
54
+ },
55
+ {
56
+ zigbeeModel: ['4256050-ZHAC'],
57
+ model: '4256050-ZHAC',
58
+ vendor: 'Centralite',
59
+ description: '3-Series smart dimming outlet',
60
+ fromZigbee: [fz.restorable_brightness, fz.on_off, fz.electrical_measurement],
61
+ toZigbee: [tz.light_onoff_restorable_brightness],
62
+ exposes: [e.light_brightness(), e.power(), e.voltage(), e.current()],
63
+ configure: async (device, coordinatorEndpoint, logger) => {
64
+ const endpoint = device.getEndpoint(1);
65
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'haElectricalMeasurement']);
66
+ await reporting.onOff(endpoint);
67
+ // 4256050-ZHAC doesn't support reading 'acVoltageMultiplier' or 'acVoltageDivisor'
68
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
69
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
70
+ await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
71
+ await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
72
+ await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
73
+ },
74
+ },
75
+ {
76
+ zigbeeModel: ['4256050-RZHAC'],
77
+ model: '4256050-RZHAC',
78
+ vendor: 'Centralite',
79
+ description: '3-Series smart outlet appliance module',
80
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
81
+ toZigbee: [tz.on_off],
82
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
83
+ configure: async (device, coordinatorEndpoint, logger) => {
84
+ const endpoint = device.getEndpoint(1);
85
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
86
+ await reporting.onOff(endpoint);
87
+ // 4256050-RZHAC doesn't support reading 'acVoltageMultiplier' or 'acVoltageDivisor'
88
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
89
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
90
+ await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
91
+ await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
92
+ await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
93
+ },
94
+ },
95
+ {
96
+ zigbeeModel: ['4257050-ZHAC'],
97
+ model: '4257050-ZHAC',
98
+ vendor: 'Centralite',
99
+ description: '3-Series smart dimming outlet',
100
+ fromZigbee: [fz.restorable_brightness, fz.on_off, fz.electrical_measurement],
101
+ toZigbee: [tz.light_onoff_restorable_brightness],
102
+ exposes: [e.light_brightness(), e.power(), e.voltage(), e.current()],
103
+ configure: async (device, coordinatorEndpoint, logger) => {
104
+ const endpoint = device.getEndpoint(1);
105
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'haElectricalMeasurement']);
106
+ await reporting.onOff(endpoint);
107
+ // 4257050-ZHAC doesn't support reading 'acVoltageMultiplier' or 'acVoltageDivisor'
108
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
109
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
110
+ await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
111
+ await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
112
+ await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
113
+ },
114
+ },
115
+ {
116
+ zigbeeModel: ['4257050-RZHAC'],
117
+ model: '4257050-RZHAC',
118
+ vendor: 'Centralite',
119
+ description: '3-Series smart outlet',
120
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
121
+ toZigbee: [tz.on_off],
122
+ configure: async (device, coordinatorEndpoint, logger) => {
123
+ const endpoint = device.getEndpoint(1);
124
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
125
+ await reporting.onOff(endpoint);
126
+ try {
127
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
128
+ } catch (exception) {
129
+ // For some this fails so set manually
130
+ // https://github.com/Koenkk/zigbee2mqtt/issues/3575
131
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {
132
+ acCurrentDivisor: 1000, acCurrentMultiplier: 1, acPowerMultiplier: 1, acPowerDivisor: 10});
133
+ }
134
+ await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
135
+ await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
136
+ await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
137
+ },
138
+ exposes: [e.switch(), e.power(), e.current(), e.voltage()],
139
+ },
140
+ {
141
+ zigbeeModel: ['3323-G'],
142
+ model: '3323-G',
143
+ vendor: 'Centralite',
144
+ description: 'Micro-door sensor',
145
+ fromZigbee: [fz.ias_contact_alarm_1, fz.temperature],
146
+ toZigbee: [],
147
+ configure: async (device, coordinatorEndpoint, logger) => {
148
+ const endpoint = device.getEndpoint(1);
149
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement']);
150
+ await reporting.temperature(endpoint);
151
+ },
152
+ exposes: [e.contact(), e.battery_low(), e.tamper(), e.temperature()],
153
+ },
154
+ {
155
+ zigbeeModel: ['3328-G'],
156
+ model: '3328-G',
157
+ vendor: 'Centralite',
158
+ description: '3-Series micro motion sensor',
159
+ fromZigbee: [fz.ias_occupancy_alarm_2, fz.temperature],
160
+ toZigbee: [],
161
+ configure: async (device, coordinatorEndpoint, logger) => {
162
+ const endpoint = device.getEndpoint(1);
163
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement']);
164
+ await reporting.temperature(endpoint);
165
+ },
166
+ exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.temperature()],
167
+ },
168
+ {
169
+ zigbeeModel: ['3400-D', '3400'],
170
+ model: '3400-D',
171
+ vendor: 'Centralite',
172
+ description: '3-Series security keypad',
173
+ meta: {battery: {voltageToPercentage: '3V_2100'}},
174
+ fromZigbee: [fz.command_arm_with_transaction, fz.temperature, fz.battery, fz.ias_ace_occupancy_with_timeout],
175
+ toZigbee: [tz.arm_mode],
176
+ exposes: [e.battery(), e.temperature(), e.occupancy(),
177
+ exposes.numeric('action_code', ea.STATE).withDescription('Pin code introduced.'),
178
+ exposes.numeric('action_transaction', ea.STATE).withDescription('Last action transaction number.'),
179
+ exposes.text('action_zone', ea.STATE).withDescription('Alarm zone. Default value 0'),
180
+ e.action([
181
+ 'disarm', 'arm_day_zones', 'arm_night_zones', 'arm_all_zones', 'exit_delay', 'emergency'])],
182
+ configure: async (device, coordinatorEndpoint, logger) => {
183
+ const endpoint = device.getEndpoint(1);
184
+ const clusters = ['msTemperatureMeasurement', 'genPowerCfg', 'ssIasZone', 'ssIasAce'];
185
+ await reporting.bind(endpoint, coordinatorEndpoint, clusters);
186
+ await reporting.temperature(endpoint);
187
+ await reporting.batteryVoltage(endpoint);
188
+ },
189
+ onEvent: async (type, data, device) => {
190
+ if (type === 'message' && data.type === 'commandGetPanelStatus' && data.cluster === 'ssIasAce' &&
191
+ globalStore.hasValue(device.getEndpoint(1), 'panelStatus')) {
192
+ const payload = {
193
+ panelstatus: globalStore.getValue(device.getEndpoint(1), 'panelStatus'),
194
+ secondsremain: 0x00, audiblenotif: 0x00, alarmstatus: 0x00,
195
+ };
196
+ await device.getEndpoint(1).commandResponse(
197
+ 'ssIasAce', 'getPanelStatusRsp', payload, {}, data.meta.zclTransactionSequenceNumber,
198
+ );
199
+ }
200
+ },
201
+ },
202
+ {
203
+ zigbeeModel: ['3420'],
204
+ model: '3420-G',
205
+ vendor: 'Centralite',
206
+ description: '3-Series night light repeater',
207
+ extend: extend.light_onoff_brightness(),
208
+ },
209
+ {
210
+ fingerprint: [{modelID: '3157100', manufacturerName: 'Centralite'}, {modelID: '3157100-E', manufacturerName: 'Centralite'}],
211
+ model: '3157100',
212
+ vendor: 'Centralite',
213
+ description: '3-Series pearl touch thermostat',
214
+ fromZigbee: [fz.battery, fz.thermostat, fz.fan, fz.ignore_time_read],
215
+ toZigbee: [tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
216
+ tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
217
+ tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
218
+ tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
219
+ tz.thermostat_relay_status_log, tz.fan_mode, tz.thermostat_running_state, tz.thermostat_temperature_setpoint_hold],
220
+ exposes: [e.battery(),
221
+ exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
222
+ .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
223
+ exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
224
+ .withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
225
+ .withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
226
+ .withSetpoint('occupied_cooling_setpoint', 7, 30, 1)
227
+ .withLocalTemperatureCalibration(-2.5, 2.5, 0.1)],
228
+ meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
229
+ configure: async (device, coordinatorEndpoint, logger) => {
230
+ const endpoint = device.getEndpoint(1);
231
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat', 'hvacFanCtrl']);
232
+ await reporting.batteryVoltage(endpoint);
233
+ await reporting.thermostatRunningState(endpoint);
234
+ await reporting.thermostatTemperature(endpoint);
235
+ await reporting.fanMode(endpoint);
236
+ await reporting.thermostatTemperatureSetpointHold(endpoint);
237
+ },
238
+ },
239
+ {
240
+ zigbeeModel: ['3156105'],
241
+ model: '3156105',
242
+ vendor: 'Centralite',
243
+ description: 'HA thermostat',
244
+ fromZigbee: [fz.battery, fzLocal.thermostat_3156105, fz.fan, fz.ignore_time_read],
245
+ toZigbee: [tz.thermostat_local_temperature,
246
+ tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
247
+ tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
248
+ tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
249
+ tz.thermostat_relay_status_log, tz.fan_mode, tz.thermostat_running_state, tz.thermostat_temperature_setpoint_hold],
250
+ exposes: [e.battery(),
251
+ exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
252
+ .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
253
+ exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
254
+ .withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
255
+ .withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
256
+ .withSetpoint('occupied_cooling_setpoint', 7, 30, 1)],
257
+ meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
258
+ configure: async (device, coordinatorEndpoint, logger) => {
259
+ const endpoint = device.getEndpoint(1);
260
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat', 'hvacFanCtrl']);
261
+ await reporting.batteryVoltage(endpoint);
262
+ await reporting.thermostatRunningState(endpoint);
263
+ await reporting.thermostatTemperature(endpoint);
264
+ await reporting.fanMode(endpoint);
265
+ await reporting.thermostatTemperatureSetpointHold(endpoint);
266
+ },
267
+ },
268
+ {
269
+ zigbeeModel: ['4200-C'],
270
+ model: '4200-C',
271
+ vendor: 'Centralite',
272
+ description: 'Smart outlet',
273
+ extend: extend.switch({disablePowerOnBehavior: true}),
274
+ configure: async (device, coordinatorEndpoint, logger) => {
275
+ const endpoint = device.getEndpoint(1);
276
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
277
+ },
278
+ },
279
+ {
280
+ zigbeeModel: ['3310-G'],
281
+ model: '3310-G',
282
+ vendor: 'Centralite',
283
+ description: 'Temperature and humidity sensor',
284
+ fromZigbee: [fz.temperature, fz._3310_humidity, fz.battery],
285
+ exposes: [e.temperature(), e.humidity(), e.battery()],
286
+ toZigbee: [],
287
+ meta: {battery: {voltageToPercentage: '3V_2500'}},
288
+ configure: async (device, coordinatorEndpoint, logger) => {
289
+ const endpoint = device.getEndpoint(1);
290
+ const binds = ['msTemperatureMeasurement', 'manuSpecificCentraliteHumidity', 'genPowerCfg'];
291
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
292
+ await reporting.temperature(endpoint);
293
+
294
+ const payload = [{
295
+ attribute: 'measuredValue',
296
+ minimumReportInterval: 10,
297
+ maximumReportInterval: constants.repInterval.HOUR,
298
+ reportableChange: 10,
299
+ }];
300
+ await endpoint.configureReporting('manuSpecificCentraliteHumidity', payload, {manufacturerCode: 0x104E});
301
+
302
+ await reporting.batteryVoltage(endpoint);
303
+ },
304
+ },
305
+ {
306
+ zigbeeModel: ['3200-fr'],
307
+ model: '3200-fr',
308
+ vendor: 'Centralite',
309
+ description: 'Smart outlet',
310
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
311
+ toZigbee: [tz.on_off],
312
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
313
+ configure: async (device, coordinatorEndpoint, logger) => {
314
+ const endpoint = device.getEndpoint(1);
315
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
316
+ await reporting.onOff(endpoint);
317
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
318
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
319
+ await reporting.rmsVoltage(endpoint, {change: 2});
320
+ await reporting.rmsCurrent(endpoint, {change: 10});
321
+ await reporting.activePower(endpoint, {change: 2});
322
+ },
323
+ },
324
+ {
325
+ zigbeeModel: ['3200-de'],
326
+ model: '3200-de',
327
+ vendor: 'Centralite',
328
+ description: 'Smart outlet',
329
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
330
+ toZigbee: [tz.on_off],
331
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
332
+ configure: async (device, coordinatorEndpoint, logger) => {
333
+ const endpoint = device.getEndpoint(1);
334
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
335
+ await reporting.onOff(endpoint);
336
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
337
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
338
+ await reporting.rmsVoltage(endpoint, {change: 2});
339
+ await reporting.rmsCurrent(endpoint, {change: 10});
340
+ await reporting.activePower(endpoint, {change: 2});
341
+ },
342
+ },
343
+ {
344
+ zigbeeModel: ['3315-Geu'],
345
+ model: '3315-Geu',
346
+ vendor: 'Centralite',
347
+ description: 'Water sensor',
348
+ fromZigbee: [fz.temperature, fz.ias_water_leak_alarm_1, fz.battery],
349
+ exposes: [e.temperature(), e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
350
+ toZigbee: [],
351
+ meta: {battery: {voltageToPercentage: '3V_2500'}},
352
+ configure: async (device, coordinatorEndpoint, logger) => {
353
+ const endpoint = device.getEndpoint(1);
354
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
355
+ await reporting.temperature(endpoint);
356
+ await reporting.batteryVoltage(endpoint);
357
+ },
358
+ },
359
+ ];
@@ -0,0 +1,20 @@
1
+ const exposes = require('../lib/exposes');
2
+ const reporting = require('../lib/reporting');
3
+ const e = exposes.presets;
4
+ const extend = require('../lib/extend');
5
+
6
+ module.exports = [
7
+ {
8
+ zigbeeModel: ['ZPLUG'],
9
+ model: 'ZPLUG_Boost',
10
+ vendor: 'CLEODE',
11
+ description: 'ZPlug boost',
12
+ extend: extend.switch(),
13
+ exposes: [e.switch(), e.power()],
14
+ configure: async (device, coordinatorEndpoint, logger) => {
15
+ const endpoint = device.getEndpoint(1);
16
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
17
+ await reporting.readMeteringMultiplierDivisor(endpoint);
18
+ },
19
+ },
20
+ ];
@@ -0,0 +1,36 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = require('../converters/fromZigbee');
3
+ const tz = require('../converters/toZigbee');
4
+ const reporting = require('../lib/reporting');
5
+ const tuya = require('../lib/tuya');
6
+ const e = exposes.presets;
7
+ const ea = exposes.access;
8
+
9
+ module.exports = [
10
+ {
11
+ fingerprint: [{modelID: 'TS0219', manufacturerName: '_TZ3000_vdfwjopk'}],
12
+ model: 'SA100',
13
+ vendor: 'Cleverio',
14
+ description: 'Smart siren',
15
+ fromZigbee: [fz.ts0216_siren, fz.ias_alarm_only_alarm_1, fz.power_source],
16
+ toZigbee: [tz.warning, tz.ts0216_volume],
17
+ exposes: [e.warning(), exposes.binary('alarm', ea.STATE, true, false),
18
+ exposes.numeric('volume', ea.ALL).withValueMin(0).withValueMax(100).withDescription('Volume of siren')],
19
+ meta: {disableDefaultResponse: true},
20
+ configure: async (device, coordinatorEndpoint) => {
21
+ const endpoint = device.getEndpoint(1);
22
+ const bindClusters = ['genPowerCfg'];
23
+ await reporting.bind(endpoint, coordinatorEndpoint, bindClusters);
24
+ },
25
+ },
26
+ {
27
+ fingerprint: [{modelID: 'TS0041A', manufacturerName: '_TYZB01_4qw4rl1u'}],
28
+ model: 'SB100',
29
+ vendor: 'Cleverio',
30
+ description: 'Wireless switch with 1 button',
31
+ exposes: [e.battery(), e.action(['single', 'double', 'hold'])],
32
+ fromZigbee: [fz.tuya_on_off_action, fz.battery],
33
+ toZigbee: [],
34
+ configure: tuya.configureMagicPacket,
35
+ },
36
+ ];
@@ -0,0 +1,138 @@
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
+ const ea = exposes.access;
8
+
9
+ module.exports = [
10
+ {
11
+ zigbeeModel: ['PSS_00.00.00.15TC'],
12
+ model: 'PSS-23ZBS',
13
+ vendor: 'Climax',
14
+ description: 'Power plug',
15
+ extend: extend.switch(),
16
+ },
17
+ {
18
+ zigbeeModel: ['SD8SC_00.00.03.12TC'],
19
+ model: 'SD-8SCZBS',
20
+ vendor: 'Climax',
21
+ description: 'Smoke detector',
22
+ fromZigbee: [fz.ias_smoke_alarm_1, fz.battery],
23
+ toZigbee: [tz.warning],
24
+ exposes: [e.smoke(), e.battery(), e.battery_low(), e.tamper(), e.warning()],
25
+
26
+ },
27
+ {
28
+ zigbeeModel: ['WS15_00.00.00.10TC'],
29
+ model: 'WLS-15ZBS',
30
+ vendor: 'Climax',
31
+ description: 'Water leakage sensor',
32
+ fromZigbee: [fz.ias_water_leak_alarm_1, fz.battery],
33
+ toZigbee: [],
34
+ exposes: [e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
35
+ },
36
+ {
37
+ zigbeeModel: ['SCM-3_00.00.03.15'],
38
+ model: 'SCM-5ZBS',
39
+ vendor: 'Climax',
40
+ description: 'Roller shutter',
41
+ fromZigbee: [fz.cover_position_via_brightness, fz.cover_state_via_onoff],
42
+ toZigbee: [tz.cover_via_brightness],
43
+ exposes: [e.cover_position().setAccess('state', ea.ALL)],
44
+ },
45
+ {
46
+ zigbeeModel: ['PSM_00.00.00.35TC', 'PSMP5_00.00.02.02TC', 'PSMP5_00.00.05.01TC', 'PSMP5_00.00.05.10TC', 'PSMP5_00.00.03.15TC',
47
+ 'PSMP5_00.00.03.16TC', 'PSMP5_00.00.03.19TC'],
48
+ model: 'PSM-29ZBSR',
49
+ vendor: 'Climax',
50
+ description: 'Power plug',
51
+ fromZigbee: [fz.on_off, fz.metering, fz.ignore_basic_report],
52
+ toZigbee: [tz.on_off, tz.ignore_transition],
53
+ configure: async (device, coordinatorEndpoint, logger) => {
54
+ const endpoint = device.getEndpoint(1);
55
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
56
+ await reporting.onOff(endpoint);
57
+ await reporting.readMeteringMultiplierDivisor(endpoint);
58
+ await reporting.instantaneousDemand(endpoint, {min: 10, change: 2});
59
+ },
60
+ whiteLabel: [{vendor: 'Blaupunkt', model: 'PSM-S1'}],
61
+ exposes: [e.switch(), e.power(), e.energy()],
62
+ },
63
+ {
64
+ zigbeeModel: ['RS_00.00.02.06TC'],
65
+ model: 'RS-23ZBS',
66
+ vendor: 'Climax',
67
+ description: 'Temperature & humidity sensor',
68
+ fromZigbee: [fz.temperature, fz.humidity],
69
+ toZigbee: [],
70
+ configure: async (device, coordinatorEndpoint, logger) => {
71
+ const endpoint = device.getEndpoint(1);
72
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
73
+ await reporting.temperature(endpoint);
74
+ // configureReporting.humidity(endpoint); not needed and fails
75
+ // https://github.com/Koenkk/zigbee-herdsman-converters/issues/1312
76
+ },
77
+ exposes: [e.temperature(), e.humidity()],
78
+ },
79
+ {
80
+ zigbeeModel: ['SRACBP5_00.00.03.06TC', 'SRAC_00.00.00.16TC', 'SRACBP5_00.00.05.10TC'],
81
+ model: 'SRAC-23B-ZBSR',
82
+ vendor: 'Climax',
83
+ description: 'Smart siren',
84
+ fromZigbee: [fz.battery, fz.ias_wd, fz.ias_enroll, fz.ias_siren],
85
+ toZigbee: [tz.warning_simple, tz.ias_max_duration, tz.warning],
86
+ configure: async (device, coordinatorEndpoint, logger) => {
87
+ const endpoint = device.getEndpoint(1);
88
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'ssIasZone', 'ssIasWd']);
89
+ await endpoint.read('ssIasZone', ['zoneState', 'iasCieAddr', 'zoneId']);
90
+ await endpoint.read('ssIasWd', ['maxDuration']);
91
+ },
92
+ exposes: [e.battery_low(), e.tamper(), e.warning(),
93
+ exposes.numeric('max_duration', ea.ALL).withUnit('s').withValueMin(0).withValueMax(600).withDescription('Duration of Siren'),
94
+ exposes.binary('alarm', ea.SET, 'START', 'OFF').withDescription('Manual start of siren')],
95
+ },
96
+ {
97
+ zigbeeModel: ['WS15_00.00.00.14TC'],
98
+ model: 'WS-15ZBS',
99
+ vendor: 'Climax',
100
+ description: 'Water leak sensor',
101
+ fromZigbee: [fz.ias_water_leak_alarm_1],
102
+ toZigbee: [],
103
+ exposes: [e.water_leak(), e.battery_low(), e.tamper()],
104
+ },
105
+ {
106
+ zigbeeModel: ['CO_00.00.00.15TC', 'CO_00.00.00.22TC'],
107
+ model: 'CO-8ZBS',
108
+ vendor: 'Climax',
109
+ description: 'Smart carbon monoxide sensor',
110
+ fromZigbee: [fz.ias_carbon_monoxide_alarm_1, fz.battery],
111
+ toZigbee: [],
112
+ exposes: [e.carbon_monoxide(), e.battery_low(), e.tamper(), e.battery()],
113
+ },
114
+ {
115
+ zigbeeModel: ['KP-ACE_00.00.03.12TC'],
116
+ model: 'KP-23EL-ZBS-ACE',
117
+ vendor: 'Climax',
118
+ description: 'Remote Keypad',
119
+ fromZigbee: [fz.ias_keypad, fz.battery, fz.command_arm, fz.command_panic, fz.command_emergency],
120
+ toZigbee: [],
121
+ exposes: [e.battery_low(), e.tamper(), e.action(['emergency', 'panic', 'disarm', 'arm_all_zones', 'arm_day_zones']),
122
+ ],
123
+ },
124
+ {
125
+ zigbeeModel: ['PRL_00.00.03.04TC'],
126
+ model: 'PRL-1ZBS-12/24V',
127
+ vendor: 'Climax',
128
+ description: 'Zigbee 12-24V relay controller',
129
+ extend: extend.switch(),
130
+ configure: async (device, coordinatorEndpoint, logger) => {
131
+ const endpoint = device.getEndpoint(1);
132
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
133
+ await reporting.onOff(endpoint);
134
+ device.powerSource = 'Mains (single phase)';
135
+ device.save();
136
+ },
137
+ },
138
+ ];
@@ -0,0 +1,16 @@
1
+ const extend = require('../lib/extend');
2
+
3
+ module.exports = [
4
+ {
5
+ zigbeeModel: ['Zigbee CCT Downlight'],
6
+ model: '53170161',
7
+ vendor: 'Commercial Electric',
8
+ description: 'Matte White Recessed Retrofit Smart Led Downlight - 4 Inch',
9
+ extend: extend.light_onoff_brightness_colortemp({noConfigure: true}),
10
+ configure: async (device, coordinatorEndpoint, logger) => {
11
+ await extend.light_onoff_brightness_colortemp().configure(device, coordinatorEndpoint, logger);
12
+ device.powerSource = 'Mains (single phase)';
13
+ device.save();
14
+ },
15
+ },
16
+ ];
@@ -0,0 +1,46 @@
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 tuya = require('../lib/tuya');
5
+ const e = exposes.presets;
6
+ const ea = exposes.access;
7
+
8
+ module.exports = [
9
+ {
10
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_4hbx5cvx'}],
11
+ model: '4500994',
12
+ vendor: 'Connecte',
13
+ description: 'Smart thermostat',
14
+ fromZigbee: [fz.connecte_thermostat],
15
+ toZigbee: [tz.connecte_thermostat],
16
+ onEvent: tuya.onEventSetTime,
17
+ configure: tuya.configureMagicPacket,
18
+ exposes: [
19
+ exposes.binary('state', ea.STATE_SET, 'ON', 'OFF')
20
+ .withDescription('On/off state of the switch'),
21
+ e.child_lock(),
22
+ e.window_detection(),
23
+ e.away_mode(),
24
+ exposes.climate()
25
+ .withSetpoint('current_heating_setpoint', 5, 35, 1, ea.STATE_SET)
26
+ .withLocalTemperature(ea.STATE)
27
+ .withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET)
28
+ .withSystemMode(['heat', 'auto'], ea.STATE_SET)
29
+ .withRunningState(['idle', 'heat'], ea.STATE),
30
+ e.temperature_sensor_select(['internal', 'external', 'both']),
31
+ exposes.numeric('external_temperature', ea.STATE)
32
+ .withUnit('°C')
33
+ .withDescription('Current temperature measured on the external sensor (floor)'),
34
+ exposes.numeric('hysteresis', ea.STATE_SET)
35
+ .withDescription('The difference between the temperature at which the thermostat switches off, ' +
36
+ 'and the temperature at which it switches on again.')
37
+ .withValueMin(1)
38
+ .withValueMax(9),
39
+ exposes.numeric('max_temperature_protection', ea.STATE_SET)
40
+ .withUnit('°C')
41
+ .withDescription('Max guarding temperature')
42
+ .withValueMin(20)
43
+ .withValueMax(95),
44
+ ],
45
+ },
46
+ ];
@@ -0,0 +1,11 @@
1
+ const extend = require('../lib/extend');
2
+
3
+ module.exports = [
4
+ {
5
+ zigbeeModel: ['Connected A-19 60W Equivalent ', 'Connected A-19 60W Equivalent '],
6
+ model: 'B00TN589ZG',
7
+ vendor: 'CREE',
8
+ description: 'Connected bulb',
9
+ extend: extend.light_onoff_brightness(),
10
+ },
11
+ ];