@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,352 @@
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 e = exposes.presets;
7
+ const ea = exposes.access;
8
+
9
+ const fzLocal = {
10
+ temperature: {
11
+ ...fz.temperature,
12
+ convert: (model, msg, publish, options, meta) => {
13
+ // https://github.com/Koenkk/zigbee2mqtt/issues/15173
14
+ if (msg.data.measuredValue < 32767) {
15
+ return fz.temperature.convert(model, msg, publish, options, meta);
16
+ }
17
+ },
18
+ },
19
+ PC321_metering: {
20
+ cluster: 'seMetering',
21
+ type: ['attributeReport', 'readResponse'],
22
+ convert: (model, msg, publish, options, meta) => {
23
+ const payload = {};
24
+ if (msg.data.hasOwnProperty('owonL1Energy')) {
25
+ payload.energy_l1 = msg.data['owonL1Energy'][1] / 1000.0;
26
+ }
27
+ if (msg.data.hasOwnProperty('owonL2Energy')) {
28
+ payload.energy_l2 = msg.data['owonL2Energy'][1] / 1000.0;
29
+ }
30
+ if (msg.data.hasOwnProperty('owonL3Energy')) {
31
+ payload.energy_l3 = msg.data['owonL3Energy'][1] / 1000.0;
32
+ }
33
+ if (msg.data.hasOwnProperty('owonL1ReactiveEnergy')) {
34
+ payload.reactive_energy_l1 = msg.data['owonL1ReactiveEnergy'][1] / 1000.0;
35
+ }
36
+ if (msg.data.hasOwnProperty('owonL2ReactiveEnergy')) {
37
+ payload.reactive_energy_l2 = msg.data['owonL2ReactiveEnergy'][1] / 1000.0;
38
+ }
39
+ if (msg.data.hasOwnProperty('owonL3ReactiveEnergy')) {
40
+ payload.reactive_energy_l3 = msg.data['owonL3ReactiveEnergy'][1] / 1000.0;
41
+ }
42
+ if (msg.data.hasOwnProperty('owonL1PhasePower')) {
43
+ payload.power_l1 = msg.data['owonL1PhasePower'];
44
+ }
45
+ if (msg.data.hasOwnProperty('owonL2PhasePower')) {
46
+ payload.power_l2 = msg.data['owonL2PhasePower'];
47
+ }
48
+ if (msg.data.hasOwnProperty('owonL3PhasePower')) {
49
+ payload.power_l3 = msg.data['owonL3PhasePower'];
50
+ }
51
+ if (msg.data.hasOwnProperty('owonL1PhaseReactivePower')) {
52
+ payload.reactive_power_l1 = msg.data['owonL1PhaseReactivePower'];
53
+ }
54
+ if (msg.data.hasOwnProperty('owonL2PhaseReactivePower')) {
55
+ payload.reactive_power_l2 = msg.data['owonL2PhaseReactivePower'];
56
+ }
57
+ if (msg.data.hasOwnProperty('owonL3PhaseReactivePower')) {
58
+ payload.reactive_power_l3 = msg.data['owonL3PhaseReactivePower'];
59
+ }
60
+ if (msg.data.hasOwnProperty('owonL1PhaseVoltage')) {
61
+ payload.voltage_l1 = msg.data['owonL1PhaseVoltage'] / 10.0;
62
+ }
63
+ if (msg.data.hasOwnProperty('owonL2PhaseVoltage')) {
64
+ payload.voltage_l2 = msg.data['owonL2PhaseVoltage'] / 10.0;
65
+ }
66
+ if (msg.data.hasOwnProperty('owonL3PhaseVoltage')) {
67
+ payload.voltage_l3 = msg.data['owonL3PhaseVoltage'] / 10.0;
68
+ }
69
+ if (msg.data.hasOwnProperty('owonL1PhaseCurrent')) {
70
+ payload.current_l1 = msg.data['owonL1PhaseCurrent'] / 1000.0;
71
+ }
72
+ if (msg.data.hasOwnProperty('owonL2PhaseCurrent')) {
73
+ payload.current_l2 = msg.data['owonL2PhaseCurrent'] / 1000.0;
74
+ }
75
+ if (msg.data.hasOwnProperty('owonL3PhaseCurrent')) {
76
+ payload.current_l3 = msg.data['owonL3PhaseCurrent'] / 1000.0;
77
+ }
78
+ if (msg.data.hasOwnProperty('owonFrequency')) {
79
+ payload.frequency = msg.data['owonFrequency'];
80
+ }
81
+ if (msg.data.hasOwnProperty('owonReactiveEnergySum')) {
82
+ payload.reactive_energy_sum = msg.data['owonReactiveEnergySum'];
83
+ }
84
+ return payload;
85
+ },
86
+ },
87
+ };
88
+
89
+ module.exports = [
90
+ {
91
+ zigbeeModel: ['WSP402'],
92
+ model: 'WSP402',
93
+ vendor: 'OWON',
94
+ description: 'Smart plug',
95
+ fromZigbee: [fz.on_off, fz.metering],
96
+ toZigbee: [tz.on_off],
97
+ exposes: [e.switch(), e.power(), e.energy()],
98
+ configure: async (device, coordinatorEndpoint, logger) => {
99
+ const endpoint = device.getEndpoint(1);
100
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
101
+ await reporting.onOff(endpoint);
102
+ await reporting.readMeteringMultiplierDivisor(endpoint);
103
+ await reporting.instantaneousDemand(endpoint, {min: 5, max: constants.repInterval.MINUTES_5, change: 2}); // divider 1000: 2W
104
+ await reporting.currentSummDelivered(endpoint, {min: 5, max: constants.repInterval.MINUTES_5,
105
+ change: [10, 10]}); // divider 1000: 0,01kWh
106
+ },
107
+ },
108
+ {
109
+ zigbeeModel: ['WSP403-E'],
110
+ model: 'WSP403',
111
+ vendor: 'OWON',
112
+ description: 'Smart plug',
113
+ fromZigbee: [fz.on_off, fz.metering],
114
+ toZigbee: [tz.on_off],
115
+ exposes: [e.switch(), e.power(), e.energy()],
116
+ configure: async (device, coordinatorEndpoint, logger) => {
117
+ const endpoint = device.getEndpoint(1);
118
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
119
+ await reporting.onOff(endpoint);
120
+ await reporting.readMeteringMultiplierDivisor(endpoint);
121
+ await reporting.instantaneousDemand(endpoint, {min: 5, max: constants.repInterval.MINUTES_5, change: 2}); // divider 1000: 2W
122
+ await reporting.currentSummDelivered(endpoint, {min: 5, max: constants.repInterval.MINUTES_5,
123
+ change: [10, 10]}); // divider 1000: 0,01kWh
124
+ },
125
+ },
126
+ {
127
+ zigbeeModel: ['WSP404'],
128
+ model: 'WSP404',
129
+ vendor: 'OWON',
130
+ description: 'Smart plug',
131
+ fromZigbee: [fz.on_off, fz.metering],
132
+ toZigbee: [tz.on_off],
133
+ exposes: [e.switch(), e.power(), e.energy()],
134
+ configure: async (device, coordinatorEndpoint, logger) => {
135
+ const endpoint = device.getEndpoint(1);
136
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
137
+ await reporting.onOff(endpoint);
138
+ await reporting.readMeteringMultiplierDivisor(endpoint);
139
+ await reporting.instantaneousDemand(endpoint, {min: 5, max: constants.repInterval.MINUTES_5, change: 2}); // divider 1000: 2W
140
+ await reporting.currentSummDelivered(endpoint, {min: 5, max: constants.repInterval.MINUTES_5,
141
+ change: [10, 10]}); // divider 1000: 0,01kWh
142
+ },
143
+ },
144
+ {
145
+ zigbeeModel: ['CB432'],
146
+ model: 'CB432',
147
+ vendor: 'OWON',
148
+ description: '32A/63A power circuit breaker',
149
+ fromZigbee: [fz.on_off, fz.metering, fz.electrical_measurement],
150
+ toZigbee: [tz.on_off],
151
+ exposes: [e.switch(), e.power(), e.energy()],
152
+ configure: async (device, coordinatorEndpoint) => {
153
+ const endpoint = device.getEndpoint(1);
154
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
155
+ await reporting.onOff(endpoint);
156
+ await reporting.readMeteringMultiplierDivisor(endpoint);
157
+ await reporting.instantaneousDemand(endpoint);
158
+ await reporting.currentSummDelivered(endpoint);
159
+ },
160
+ },
161
+ {
162
+ zigbeeModel: ['PIR313-E', 'PIR313'],
163
+ model: 'PIR313-E',
164
+ vendor: 'OWON',
165
+ description: 'Motion sensor',
166
+ fromZigbee: [fz.battery, fz.ignore_basic_report, fz.ias_occupancy_alarm_1, fz.temperature, fz.humidity,
167
+ fz.occupancy_timeout, fz.illuminance],
168
+ toZigbee: [],
169
+ exposes: [e.occupancy(), e.tamper(), e.battery_low(), e.illuminance(), e.illuminance_lux().withUnit('lx'),
170
+ e.temperature(), e.humidity()],
171
+ configure: async (device, coordinatorEndpoint, logger) => {
172
+ const endpoint2 = device.getEndpoint(2);
173
+ const endpoint3 = device.getEndpoint(3);
174
+ if (device.modelID == 'PIR313') {
175
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['msIlluminanceMeasurement']);
176
+ await reporting.bind(endpoint3, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
177
+ } else {
178
+ await reporting.bind(endpoint3, coordinatorEndpoint, ['msIlluminanceMeasurement']);
179
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
180
+ }
181
+ device.powerSource = 'Battery';
182
+ device.save();
183
+ },
184
+ },
185
+ {
186
+ zigbeeModel: ['AC201'],
187
+ model: 'AC201',
188
+ vendor: 'OWON',
189
+ description: 'HVAC controller/IR blaster',
190
+ fromZigbee: [fz.fan, fz.thermostat],
191
+ toZigbee: [tz.fan_mode, tz.thermostat_system_mode, tz.thermostat_occupied_heating_setpoint,
192
+ tz.thermostat_occupied_cooling_setpoint, tz.thermostat_ac_louver_position, tz.thermostat_local_temperature],
193
+ exposes: [exposes.climate().withSystemMode(['off', 'heat', 'cool', 'auto', 'dry', 'fan_only'])
194
+ .withSetpoint('occupied_heating_setpoint', 8, 30, 1).withSetpoint('occupied_cooling_setpoint', 8, 30, 1)
195
+ .withAcLouverPosition(['fully_open', 'fully_closed', 'half_open', 'quarter_open', 'three_quarters_open'])
196
+ .withLocalTemperature(), e.fan().withModes(['low', 'medium', 'high', 'on', 'auto'])],
197
+ configure: async (device, coordinatorEndpoint, logger) => {
198
+ const endpoint = device.getEndpoint(1);
199
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacFanCtrl']);
200
+ await reporting.fanMode(endpoint);
201
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacThermostat']);
202
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
203
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
204
+ await reporting.thermostatTemperature(endpoint, {min: 60, max: 600, change: 0.1});
205
+ await reporting.thermostatSystemMode(endpoint);
206
+ await reporting.thermostatAcLouverPosition(endpoint);
207
+ },
208
+ },
209
+ {
210
+ zigbeeModel: ['THS317'],
211
+ model: 'THS317',
212
+ vendor: 'OWON',
213
+ description: 'Temperature and humidity sensor',
214
+ fromZigbee: [fz.temperature, fz.humidity, fz.battery],
215
+ toZigbee: [],
216
+ exposes: [e.battery(), e.temperature(), e.humidity()],
217
+ configure: async (device, coordinatorEndpoint, logger) => {
218
+ const endpoint = device.getEndpoint(2);
219
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg']);
220
+ await reporting.temperature(endpoint);
221
+ await reporting.humidity(endpoint);
222
+ await reporting.batteryVoltage(endpoint);
223
+ await reporting.batteryPercentageRemaining(endpoint);
224
+ device.powerSource = 'Battery';
225
+ device.save();
226
+ },
227
+ },
228
+ {
229
+ zigbeeModel: ['THS317-ET'],
230
+ model: 'THS317-ET',
231
+ vendor: 'OWON',
232
+ description: 'Temperature sensor',
233
+ fromZigbee: [fzLocal.temperature, fz.battery],
234
+ toZigbee: [],
235
+ exposes: [e.battery(), e.temperature()],
236
+ configure: async (device, coordinatorEndpoint, logger) => {
237
+ const endpoint = device.getEndpoint(3) || device.getEndpoint(1);
238
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
239
+ await reporting.temperature(endpoint);
240
+ await reporting.batteryVoltage(endpoint);
241
+ await reporting.batteryPercentageRemaining(endpoint);
242
+ device.powerSource = 'Battery';
243
+ device.save();
244
+ },
245
+ },
246
+ {
247
+ zigbeeModel: ['PC321'],
248
+ model: 'PC321',
249
+ vendor: 'OWON',
250
+ description: '3-Phase clamp power meter',
251
+ fromZigbee: [fz.metering, fzLocal.PC321_metering],
252
+ toZigbee: [],
253
+ configure: async (device, coordinatorEndpoint, logger) => {
254
+ const endpoint = device.getEndpoint(1);
255
+ await reporting.bind(endpoint, coordinatorEndpoint, ['seMetering']);
256
+ await reporting.readMeteringMultiplierDivisor(endpoint);
257
+ if (device.powerSource === 'Unknown') {
258
+ device.powerSource = 'Mains (single phase)';
259
+ device.save();
260
+ }
261
+ },
262
+ meta: {publishDuplicateTransaction: true},
263
+ exposes: [e.energy(),
264
+ exposes.numeric('voltage_l1', ea.STATE).withUnit('V').withDescription('Phase 1 voltage'),
265
+ exposes.numeric('voltage_l2', ea.STATE).withUnit('V').withDescription('Phase 2 voltage'),
266
+ exposes.numeric('voltage_l3', ea.STATE).withUnit('V').withDescription('Phase 3 voltage'),
267
+ exposes.numeric('current_l1', ea.STATE).withUnit('A').withDescription('Phase 1 current'),
268
+ exposes.numeric('current_l2', ea.STATE).withUnit('A').withDescription('Phase 2 current'),
269
+ exposes.numeric('current_l3', ea.STATE).withUnit('A').withDescription('Phase 3 current'),
270
+ exposes.numeric('energy_l1', ea.STATE).withUnit('kWh').withDescription('Phase 1 energy'),
271
+ exposes.numeric('energy_l2', ea.STATE).withUnit('kWh').withDescription('Phase 2 energy'),
272
+ exposes.numeric('energy_l3', ea.STATE).withUnit('kWh').withDescription('Phase 3 energy'),
273
+ exposes.numeric('reactive_energy_l1', ea.STATE).withUnit('kVArh').withDescription('Phase 1 reactive energy'),
274
+ exposes.numeric('reactive_energy_l2', ea.STATE).withUnit('kVArh').withDescription('Phase 2 reactive energy'),
275
+ exposes.numeric('reactive_energy_l3', ea.STATE).withUnit('kVArh').withDescription('Phase 3 reactive energy'),
276
+ exposes.numeric('power_l1', ea.STATE).withUnit('W').withDescription('Phase 1 power'),
277
+ exposes.numeric('power_l2', ea.STATE).withUnit('W').withDescription('Phase 2 power'),
278
+ exposes.numeric('power_l3', ea.STATE).withUnit('W').withDescription('Phase 3 power'),
279
+ exposes.numeric('reactive_power_l1', ea.STATE).withUnit('VAr').withDescription('Phase 1 reactive power'),
280
+ exposes.numeric('reactive_power_l2', ea.STATE).withUnit('VAr').withDescription('Phase 2 reactive power'),
281
+ exposes.numeric('reactive_power_l3', ea.STATE).withUnit('VAr').withDescription('Phase 3 reactive power'),
282
+ ],
283
+ },
284
+ {
285
+ zigbeeModel: ['PCT504', 'PCT504-E'],
286
+ model: 'PCT504',
287
+ vendor: 'OWON',
288
+ description: 'HVAC fan coil',
289
+ fromZigbee: [fz.fan, fz.thermostat, fz.humidity, fz.occupancy, fz.legacy.hvac_user_interface],
290
+ toZigbee: [tz.fan_mode,
291
+ tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
292
+ tz.thermostat_occupied_cooling_setpoint, tz.thermostat_unoccupied_cooling_setpoint,
293
+ tz.thermostat_min_heat_setpoint_limit, tz.thermostat_max_heat_setpoint_limit,
294
+ tz.thermostat_min_cool_setpoint_limit, tz.thermostat_max_cool_setpoint_limit,
295
+ tz.thermostat_local_temperature,
296
+ tz.thermostat_keypad_lockout,
297
+ tz.thermostat_system_mode, tz.thermostat_running_mode, tz.thermostat_running_state, tz.thermostat_programming_operation_mode],
298
+ exposes: [e.humidity(), e.occupancy(),
299
+ exposes.climate().withSystemMode(['off', 'heat', 'cool', 'fan_only', 'sleep']).withLocalTemperature()
300
+ .withRunningMode(['off', 'heat', 'cool'])
301
+ .withRunningState(['idle', 'heat', 'cool', 'fan_only'])
302
+ .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
303
+ .withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5),
304
+ e.fan().withModes(['low', 'medium', 'high', 'on', 'auto']),
305
+ e.programming_operation_mode(['setpoint', 'eco']), e.keypad_lockout(),
306
+ e.max_heat_setpoint_limit(5, 30, 0.5), e.min_heat_setpoint_limit(5, 30, 0.5),
307
+ e.max_cool_setpoint_limit(7, 35, 0.5), e.min_cool_setpoint_limit(7, 35, 0.5)],
308
+ configure: async (device, coordinatorEndpoint, logger) => {
309
+ const endpoint = device.getEndpoint(1);
310
+ const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'hvacFanCtrl',
311
+ 'msTemperatureMeasurement', 'msOccupancySensing'];
312
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
313
+ await reporting.fanMode(endpoint);
314
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacThermostat']);
315
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
316
+ await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
317
+ await reporting.thermostatOccupiedCoolingSetpoint(endpoint);
318
+ await reporting.thermostatUnoccupiedCoolingSetpoint(endpoint);
319
+ await reporting.thermostatTemperature(endpoint, {min: 60, max: 600, change: 0.1});
320
+ await reporting.thermostatSystemMode(endpoint);
321
+ await reporting.thermostatRunningMode(endpoint);
322
+ await reporting.thermostatRunningState(endpoint);
323
+ await reporting.humidity(endpoint, {min: 60, max: 600, change: 1});
324
+ await reporting.thermostatKeypadLockMode(endpoint);
325
+
326
+ await endpoint.read('hvacThermostat', ['systemMode', 'runningMode', 'runningState',
327
+ 'occupiedHeatingSetpoint', 'unoccupiedHeatingSetpoint',
328
+ 'occupiedCoolingSetpoint', 'unoccupiedCoolingSetpoint', 'localTemp']);
329
+ await endpoint.read('msRelativeHumidity', ['measuredValue']);
330
+
331
+ const endpoint2 = device.getEndpoint(2);
332
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['msOccupancySensing']);
333
+ await reporting.occupancy(endpoint2, {min: 1, max: 600, change: 1});
334
+ await endpoint2.read('msOccupancySensing', ['occupancy']);
335
+ },
336
+ },
337
+ {
338
+ zigbeeModel: ['PIR323-PTH'],
339
+ model: 'PIR323-PTH',
340
+ vendor: 'OWON',
341
+ description: 'Multi-sensor',
342
+ fromZigbee: [fz.battery, fz.ignore_basic_report, fz.ias_occupancy_alarm_1, fz.temperature, fz.humidity, fz.occupancy_timeout],
343
+ toZigbee: [],
344
+ exposes: [e.occupancy(), e.battery_low(), e.temperature(), e.humidity()],
345
+ configure: async (device, coordinatorEndpoint, logger) => {
346
+ const endpoint = device.getEndpoint(2);
347
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
348
+ device.powerSource = 'Battery';
349
+ device.save();
350
+ },
351
+ },
352
+ ];
@@ -0,0 +1,11 @@
1
+ const tuya = require('../lib/tuya');
2
+
3
+ module.exports = [
4
+ {
5
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_mcm6m1ma'}],
6
+ model: 'DL41-03-10-R-ZB',
7
+ vendor: 'Oz Smart Things',
8
+ description: 'Oz Smart RGBW Zigbee downlight 10w',
9
+ extend: tuya.extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
10
+ },
11
+ ];
@@ -0,0 +1,96 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const extend = require('../lib/extend');
4
+ const e = exposes.presets;
5
+
6
+ module.exports = [
7
+ {
8
+ zigbeeModel: ['NLG-remote', 'Neuhaus remote'],
9
+ model: '100.462.31',
10
+ vendor: 'Paul Neuhaus',
11
+ description: 'Q-REMOTE',
12
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.command_step, fz.command_move_to_color_temp, fz.command_stop,
13
+ fz.command_move_to_color, fz.command_move, fz.command_color_loop_set, fz.command_ehanced_move_to_hue_and_saturation,
14
+ fz.tint_scene, fz.command_recall],
15
+ exposes: [e.action(['on', 'off', 'toggle', 'brightness_step_up', 'brightness_step_down', 'color_temperature_move', 'color_move',
16
+ 'brightness_stop', 'brightness_move_up', 'brightness_move_down', 'color_loop_set', 'enhanced_move_to_hue_and_saturation',
17
+ 'recall_*', 'scene_*'])],
18
+ toZigbee: [],
19
+ },
20
+ {
21
+ zigbeeModel: ['NLG-CCT light'],
22
+ model: 'NLG-CCT light',
23
+ vendor: 'Paul Neuhaus',
24
+ description: 'Various color temperature lights (e.g. 100.424.11)',
25
+ extend: extend.light_onoff_brightness_colortemp(),
26
+ },
27
+ {
28
+ zigbeeModel: ['Neuhaus NLG-TW light', 'NLG-TW light'],
29
+ model: 'NLG-TW light',
30
+ vendor: 'Paul Neuhaus',
31
+ description: 'Various tunable white lights (e.g. 8195-55)',
32
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
33
+ },
34
+ {
35
+ zigbeeModel: ['NLG-RGBW light '], // the space as the end is intentional, as this is what the device sends
36
+ model: 'NLG-RGBW_light',
37
+ vendor: 'Paul Neuhaus',
38
+ description: 'Various RGBW lights (e.g. 100.110.39)',
39
+ extend: extend.light_onoff_brightness_colortemp_color(),
40
+ endpoint: (device) => {
41
+ return {'default': 2};
42
+ },
43
+ },
44
+ {
45
+ zigbeeModel: ['NLG-RGBW light'],
46
+ model: 'NLG-RGBW__light',
47
+ vendor: 'Paul Neuhaus',
48
+ description: 'Various RGBW lights (e.g. 100.111.57)',
49
+ extend: extend.light_onoff_brightness_colortemp_color(),
50
+ },
51
+ {
52
+ zigbeeModel: ['NLG-RGB-TW light'],
53
+ model: 'NLG-RGB-TW light',
54
+ vendor: 'Paul Neuhaus',
55
+ description: 'Various RGB + tunable white lights (e.g. 100.470.92)',
56
+ extend: extend.light_onoff_brightness_colortemp_color(),
57
+ },
58
+ {
59
+ zigbeeModel: ['NLG-plug'],
60
+ model: '100.425.90',
61
+ vendor: 'Paul Neuhaus',
62
+ description: 'Q-PLUG adapter plug with night orientation light',
63
+ extend: extend.switch(),
64
+ },
65
+ {
66
+ zigbeeModel: ['JZ-CT-Z01'],
67
+ model: '100.110.51',
68
+ vendor: 'Paul Neuhaus',
69
+ description: 'Q-FLAG LED panel, Smart-Home CCT',
70
+ extend: extend.light_onoff_brightness_colortemp(),
71
+ },
72
+ {
73
+ zigbeeModel: ['JZ-RGBW-Z01'],
74
+ model: '100.075.74',
75
+ vendor: 'Paul Neuhaus',
76
+ description: 'Q-VIDAL RGBW ceiling lamp, 6032-55',
77
+ endpoint: (device) => {
78
+ return {'default': 2};
79
+ },
80
+ extend: extend.light_onoff_brightness_colortemp_color(),
81
+ },
82
+ {
83
+ zigbeeModel: ['JZD60-J4R150'],
84
+ model: '100.001.96',
85
+ vendor: 'Paul Neuhaus',
86
+ description: 'Q-LED Lamp RGBW E27 socket',
87
+ extend: extend.light_onoff_brightness_colortemp_color(),
88
+ },
89
+ {
90
+ zigbeeModel: ['Neuhaus RGB+CCT light'],
91
+ model: '100.491.61',
92
+ vendor: 'Paul Neuhaus',
93
+ description: 'Q-MIA LED RGBW wall lamp, 9185-13',
94
+ extend: extend.light_onoff_brightness_colortemp_color(),
95
+ },
96
+ ];
@@ -0,0 +1,158 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const extend = require('../lib/extend');
4
+ const e = exposes.presets;
5
+
6
+ module.exports = [
7
+ {
8
+ zigbeeModel: ['501.34'],
9
+ model: '501.34',
10
+ vendor: 'Paulmann',
11
+ description: 'Smart switch 4 buttons white',
12
+ fromZigbee: [fz.command_on, fz.command_off, fz.battery, fz.command_move, fz.command_stop],
13
+ toZigbee: [],
14
+ exposes: [e.battery(), e.action(['on_1', 'off_1', 'on_2', 'off_2', 'brightness_move_up_1', 'brightness_move_down_1',
15
+ 'brightness_move_stop_1', 'brightness_move_up_2', 'brightness_move_down_2', 'brightness_move_stop_2'])],
16
+ meta: {multiEndpoint: true},
17
+ },
18
+ {
19
+ zigbeeModel: ['H036-0007'],
20
+ model: '929.66',
21
+ vendor: 'Paulmann',
22
+ description: 'Smart home Zigbee LED module coin 1x2.5W RGBW',
23
+ extend: extend.light_onoff_brightness_colortemp_color(),
24
+ },
25
+ {
26
+ zigbeeModel: ['Switch Controller'],
27
+ model: '50043',
28
+ vendor: 'Paulmann',
29
+ description: 'SmartHome Zigbee Cephei Switch Controller',
30
+ extend: extend.switch(),
31
+ },
32
+ {
33
+ zigbeeModel: ['50131'],
34
+ model: '501.31',
35
+ vendor: 'Paulmann',
36
+ description: 'Smart plug for Euro- and Schuko-sockets',
37
+ extend: extend.switch(),
38
+ },
39
+ {
40
+ zigbeeModel: ['Dimmablelight'],
41
+ model: '50044/50045',
42
+ vendor: 'Paulmann',
43
+ description: 'SmartHome Zigbee Dimmer or LED-stripe',
44
+ extend: extend.light_onoff_brightness(),
45
+ },
46
+ {
47
+ zigbeeModel: ['500.47'],
48
+ model: '500.47',
49
+ vendor: 'Paulmann',
50
+ description: 'SmartHome Zigbee MaxLED RGBW controller max. 72W 24V DC',
51
+ extend: extend.light_onoff_brightness_colortemp_color(),
52
+ },
53
+ {
54
+ zigbeeModel: ['RGBW light', '500.49', 'RGBW_light'],
55
+ model: '50049/500.63',
56
+ vendor: 'Paulmann',
57
+ description: 'Smart Home Zigbee YourLED RGB Controller max. 60W / Smart Home Zigbee LED Reflektor 3,5W GU10 RGBW dimmbar',
58
+ extend: extend.light_onoff_brightness_colortemp_color(),
59
+ },
60
+ {
61
+ zigbeeModel: ['RGBCW_LIGHT'],
62
+ model: '4137',
63
+ vendor: 'Paulmann',
64
+ description: 'Smart Home Zigbee LED bulb 9,3W Matt E27 RGBW',
65
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
66
+ },
67
+ {
68
+ fingerprint: [{modelID: 'RGBW Controller', manufacturerName: 'Paulmann Licht'}],
69
+ model: '94191',
70
+ vendor: 'Paulmann',
71
+ description: 'Plug & shine LED strip',
72
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
73
+ },
74
+ {
75
+ fingerprint: [{modelID: 'CCT Light', manufacturerName: 'Paulmann lamp'}],
76
+ zigbeeModel: ['CCT light', 'CCT_light', 'CCT light '],
77
+ model: '50064',
78
+ vendor: 'Paulmann',
79
+ description: 'SmartHome led spot',
80
+ extend: extend.light_onoff_brightness_colortemp(),
81
+ },
82
+ {
83
+ zigbeeModel: ['500.46', 'H036-0006'],
84
+ model: '929.63',
85
+ vendor: 'Paulmann',
86
+ description: 'SmartHome Zigbee LED-Modul Coin 1x6W Tunable White',
87
+ extend: extend.light_onoff_brightness_colortemp(),
88
+ },
89
+ {
90
+ zigbeeModel: ['H036-0005'],
91
+ model: '929.60',
92
+ vendor: 'Paulmann',
93
+ description: 'SmartHome Zigbee LED-Modul Coin 1x6W White',
94
+ extend: extend.light_onoff_brightness(),
95
+ },
96
+ {
97
+ zigbeeModel: ['371000001'],
98
+ model: '371000001',
99
+ vendor: 'Paulmann',
100
+ description: 'SmartHome led spot tuneable white',
101
+ extend: extend.light_onoff_brightness_colortemp(),
102
+ },
103
+ {
104
+ zigbeeModel: ['371000002'],
105
+ model: '371000002',
106
+ vendor: 'Paulmann',
107
+ description: 'Amaris LED panels',
108
+ extend: extend.light_onoff_brightness_colortemp_color(),
109
+ },
110
+ {
111
+ zigbeeModel: ['371232040'],
112
+ model: '371232040',
113
+ vendor: 'Paulmann',
114
+ description: 'LED panels',
115
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 350]}),
116
+ },
117
+ {
118
+ zigbeeModel: ['500.44'],
119
+ model: '500.44',
120
+ vendor: 'Paulmann',
121
+ description: 'URail power supply',
122
+ extend: extend.light_onoff_brightness_color(),
123
+ },
124
+ {
125
+ zigbeeModel: ['500.45'],
126
+ model: '500.45',
127
+ vendor: 'Paulmann',
128
+ description: 'SmartHome Zigbee Pendulum Light Aptare',
129
+ extend: extend.light_onoff_brightness(),
130
+ },
131
+ {
132
+ zigbeeModel: ['500.48'],
133
+ model: '500.48',
134
+ vendor: 'Paulmann',
135
+ description: 'SmartHome Zigbee YourLED dim/switch controller max. 60 W',
136
+ extend: extend.light_onoff_brightness(),
137
+ },
138
+ {
139
+ zigbeeModel: ['H036-0001'],
140
+ model: '93999',
141
+ vendor: 'Paulmann',
142
+ description: 'Plug Shine Zigbee controller',
143
+ extend: extend.light_onoff_brightness(),
144
+ },
145
+ {
146
+ zigbeeModel: ['RemoteControl'],
147
+ model: '500.67',
148
+ vendor: 'Paulmann',
149
+ description: 'RGB remote control',
150
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.command_step, fz.command_move_to_color_temp,
151
+ fz.command_move_to_color, fz.command_stop, fz.command_move, fz.command_color_loop_set,
152
+ fz.command_ehanced_move_to_hue_and_saturation, fz.tint_scene],
153
+ toZigbee: [],
154
+ exposes: [e.action([
155
+ 'on', 'off', 'toggle', 'brightness_step_up', 'brightness_step_down', 'color_temperature_move', 'color_move', 'brightness_stop',
156
+ 'brightness_move_down', 'brightness_move_up', 'color_loop_set', 'enhanced_move_to_hue_and_saturation', 'scene_*'])],
157
+ },
158
+ ];
package/devices/peq.js ADDED
@@ -0,0 +1,24 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
+ const reporting = require('../lib/reporting');
4
+ const e = exposes.presets;
5
+
6
+ module.exports = [
7
+ {
8
+ zigbeeModel: ['3300'],
9
+ model: '3300-P',
10
+ vendor: 'PEQ',
11
+ description: 'Door & window contact sensor',
12
+ fromZigbee: [fz.temperature, fz.ias_contact_alarm_1, fz.battery],
13
+ toZigbee: [],
14
+ meta: {battery: {voltageToPercentage: '3V_2500'}},
15
+ configure: async (device, coordinatorEndpoint, logger) => {
16
+ const endpoint = device.getEndpoint(1);
17
+ await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
18
+ await reporting.temperature(endpoint);
19
+ await reporting.batteryVoltage(endpoint);
20
+ await reporting.batteryPercentageRemaining(endpoint);
21
+ },
22
+ exposes: [e.temperature(), e.contact(), e.battery_low(), e.tamper(), e.battery()],
23
+ },
24
+ ];