@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.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/converters/fromZigbee.js +8439 -0
- package/converters/toZigbee.js +7162 -0
- package/devices/ITCommander.js +37 -0
- package/devices/RMC002.js +20 -0
- package/devices/acova.js +101 -0
- package/devices/acuity_brands_lighting.js +11 -0
- package/devices/adeo.js +256 -0
- package/devices/adurosmart.js +130 -0
- package/devices/aeotec.js +13 -0
- package/devices/airam.js +59 -0
- package/devices/ajax_online.js +49 -0
- package/devices/akuvox.js +28 -0
- package/devices/alchemy.js +18 -0
- package/devices/aldi.js +53 -0
- package/devices/alecto.js +98 -0
- package/devices/anchor.js +17 -0
- package/devices/atlantic.js +110 -0
- package/devices/atsmart.js +28 -0
- package/devices/aubess.js +21 -0
- package/devices/aurora_lighting.js +292 -0
- package/devices/automaton.js +44 -0
- package/devices/awox.js +184 -0
- package/devices/axis.js +22 -0
- package/devices/bankamp.js +11 -0
- package/devices/bega.js +22 -0
- package/devices/belkin.js +11 -0
- package/devices/bitron.js +334 -0
- package/devices/blaupunkt.js +27 -0
- package/devices/blitzwolf.js +47 -0
- package/devices/bosch.js +702 -0
- package/devices/brimate.js +15 -0
- package/devices/bseed.js +17 -0
- package/devices/bticino.js +118 -0
- package/devices/busch-jaeger.js +140 -0
- package/devices/byun.js +24 -0
- package/devices/calex.js +37 -0
- package/devices/candeo.js +49 -0
- package/devices/casaia.js +52 -0
- package/devices/centralite.js +359 -0
- package/devices/cleode.js +20 -0
- package/devices/cleverio.js +36 -0
- package/devices/climax.js +138 -0
- package/devices/commercial_electric.js +16 -0
- package/devices/connecte.js +46 -0
- package/devices/cree.js +11 -0
- package/devices/ctm.js +999 -0
- package/devices/current_products_corp.js +24 -0
- package/devices/custom_devices_diy.js +850 -0
- package/devices/cy-lighting.js +11 -0
- package/devices/danalock.js +26 -0
- package/devices/danfoss.js +340 -0
- package/devices/databyte.ch.js +55 -0
- package/devices/datek.js +246 -0
- package/devices/dawon_dns.js +338 -0
- package/devices/develco.js +868 -0
- package/devices/digi.js +14 -0
- package/devices/diyruz.js +305 -0
- package/devices/dlink.js +37 -0
- package/devices/dnake.js +11 -0
- package/devices/dresden_elektronik.js +47 -0
- package/devices/easyaccess.js +27 -0
- package/devices/eatonhalo_led.js +11 -0
- package/devices/echostar.js +25 -0
- package/devices/ecodim.js +145 -0
- package/devices/ecolink.js +21 -0
- package/devices/ecosmart.js +64 -0
- package/devices/ecozy.js +31 -0
- package/devices/edp.js +39 -0
- package/devices/eglo.js +25 -0
- package/devices/elko.js +176 -0
- package/devices/enbrighten.js +163 -0
- package/devices/enocean.js +52 -0
- package/devices/envilar.js +73 -0
- package/devices/essentialb.js +87 -0
- package/devices/eurotronic.js +48 -0
- package/devices/evanell.js +29 -0
- package/devices/evn.js +31 -0
- package/devices/evology.js +24 -0
- package/devices/evvr.js +17 -0
- package/devices/ewelink.js +184 -0
- package/devices/ezex.js +24 -0
- package/devices/fantem.js +77 -0
- package/devices/feibit.js +172 -0
- package/devices/fireangel.js +15 -0
- package/devices/frankever.js +23 -0
- package/devices/garza.js +11 -0
- package/devices/ge.js +111 -0
- package/devices/gewiss.js +48 -0
- package/devices/gidealed.js +11 -0
- package/devices/giderwel.js +11 -0
- package/devices/giex.js +222 -0
- package/devices/girier.js +19 -0
- package/devices/gledopto.js +756 -0
- package/devices/gmy.js +11 -0
- package/devices/gs.js +29 -0
- package/devices/halemeier.js +18 -0
- package/devices/hampton_bay.js +37 -0
- package/devices/heiman.js +805 -0
- package/devices/hej.js +107 -0
- package/devices/hfh.js +11 -0
- package/devices/hgkg.js +54 -0
- package/devices/hilux.js +11 -0
- package/devices/hive.js +524 -0
- package/devices/home_control_as.js +27 -0
- package/devices/hommyn.js +24 -0
- package/devices/honyar.js +29 -0
- package/devices/hornbach.js +53 -0
- package/devices/hzc.js +21 -0
- package/devices/hzc_electric.js +42 -0
- package/devices/icasa.js +121 -0
- package/devices/idinio.js +19 -0
- package/devices/ihorn.js +61 -0
- package/devices/ikea.js +1168 -0
- package/devices/ilightsin.js +11 -0
- package/devices/iluminize.js +262 -0
- package/devices/ilux.js +11 -0
- package/devices/immax.js +203 -0
- package/devices/innr.js +705 -0
- package/devices/inovelli.js +1315 -0
- package/devices/insta.js +110 -0
- package/devices/iolloi.js +20 -0
- package/devices/iotperfect.js +20 -0
- package/devices/iris.js +180 -0
- package/devices/istar.js +20 -0
- package/devices/jasco.js +55 -0
- package/devices/javis.js +37 -0
- package/devices/jethome.js +48 -0
- package/devices/jiawen.js +18 -0
- package/devices/jumitech.js +18 -0
- package/devices/jxuan.js +49 -0
- package/devices/kami.js +15 -0
- package/devices/keen_home.js +80 -0
- package/devices/klikaanklikuit.js +17 -0
- package/devices/kmpcil.js +148 -0
- package/devices/konke.js +141 -0
- package/devices/ksentry.js +17 -0
- package/devices/kurvia.js +17 -0
- package/devices/kwikset.js +120 -0
- package/devices/lanesto.js +11 -0
- package/devices/lds.js +11 -0
- package/devices/led_trading.js +69 -0
- package/devices/ledvance.js +353 -0
- package/devices/leedarson.js +130 -0
- package/devices/legrand.js +554 -0
- package/devices/lellki.js +146 -0
- package/devices/letsled.js +11 -0
- package/devices/letv.js +18 -0
- package/devices/leviton.js +142 -0
- package/devices/lg.js +18 -0
- package/devices/lidl.js +1000 -0
- package/devices/lifecontrol.js +92 -0
- package/devices/lightsolutions.js +37 -0
- package/devices/linkind.js +205 -0
- package/devices/livingwise.js +59 -0
- package/devices/livolo.js +286 -0
- package/devices/lixee.js +779 -0
- package/devices/lonsonho.js +218 -0
- package/devices/lubeez.js +18 -0
- package/devices/lupus.js +74 -0
- package/devices/lutron.js +32 -0
- package/devices/lux.js +40 -0
- package/devices/m-elec.js +18 -0
- package/devices/makegood.js +51 -0
- package/devices/matcall_bv.js +18 -0
- package/devices/meazon.js +47 -0
- package/devices/mercator.js +225 -0
- package/devices/miboxer.js +72 -0
- package/devices/micromatic.js +29 -0
- package/devices/moes.js +400 -0
- package/devices/mycket.js +11 -0
- package/devices/m/303/274ller_licht.js +220 -0
- package/devices/namron.js +774 -0
- package/devices/nanoleaf.js +11 -0
- package/devices/neo.js +86 -0
- package/devices/net2grid.js +29 -0
- package/devices/netvox.js +35 -0
- package/devices/niko.js +314 -0
- package/devices/ninja_blocks.js +24 -0
- package/devices/niviss.js +11 -0
- package/devices/nodon.js +109 -0
- package/devices/nordtronic.js +30 -0
- package/devices/nous.js +88 -0
- package/devices/novo.js +17 -0
- package/devices/nue_3a.js +417 -0
- package/devices/nyce.js +67 -0
- package/devices/onesti.js +59 -0
- package/devices/openlumi.js +22 -0
- package/devices/orvibo.js +515 -0
- package/devices/osram.js +519 -0
- package/devices/oujiabao.js +15 -0
- package/devices/owon.js +352 -0
- package/devices/ozsmartthings.js +11 -0
- package/devices/paul_neuhaus.js +96 -0
- package/devices/paulmann.js +158 -0
- package/devices/peq.js +24 -0
- package/devices/perenio.js +413 -0
- package/devices/philips.js +3118 -0
- package/devices/plaid.js +25 -0
- package/devices/plugwise.js +173 -0
- package/devices/popp.js +10 -0
- package/devices/profalux.js +47 -0
- package/devices/prolight.js +54 -0
- package/devices/qmotion.js +33 -0
- package/devices/qoto.js +113 -0
- package/devices/quotra.js +18 -0
- package/devices/rademacher.js +18 -0
- package/devices/rgb_genie.js +119 -0
- package/devices/robb.js +335 -0
- package/devices/roome.js +15 -0
- package/devices/rtx.js +90 -0
- package/devices/salus_controls.js +137 -0
- package/devices/samotech.js +93 -0
- package/devices/saswell.js +58 -0
- package/devices/scanproducts.js +32 -0
- package/devices/schlage.js +24 -0
- package/devices/schneider_electric.js +1039 -0
- package/devices/schwaiger.js +62 -0
- package/devices/seastar_intelligence.js +16 -0
- package/devices/securifi.js +39 -0
- package/devices/sengled.js +332 -0
- package/devices/sercomm.js +140 -0
- package/devices/shenzhen_homa.js +53 -0
- package/devices/shinasystem.js +686 -0
- package/devices/siglis.js +440 -0
- package/devices/sinope.js +1257 -0
- package/devices/siterwell.js +46 -0
- package/devices/skydance.js +112 -0
- package/devices/slv.js +27 -0
- package/devices/smart9.js +27 -0
- package/devices/smart_home_pty.js +18 -0
- package/devices/smartenit.js +42 -0
- package/devices/smartthings.js +495 -0
- package/devices/smartwings.js +24 -0
- package/devices/sohan_electric.js +13 -0
- package/devices/solaredge.js +11 -0
- package/devices/somgoms.js +47 -0
- package/devices/sonoff.js +262 -0
- package/devices/spotmau.js +36 -0
- package/devices/sprut.js +317 -0
- package/devices/stelpro.js +216 -0
- package/devices/sunricher.js +625 -0
- package/devices/swann.js +33 -0
- package/devices/sylvania.js +200 -0
- package/devices/tci.js +25 -0
- package/devices/technicolor.js +47 -0
- package/devices/terncy.js +64 -0
- package/devices/the_light_group.js +70 -0
- package/devices/third_reality.js +195 -0
- package/devices/titan_products.js +22 -0
- package/devices/tplink.js +42 -0
- package/devices/trust.js +114 -0
- package/devices/tubeszb.js +20 -0
- package/devices/tuya.js +4215 -0
- package/devices/ubisys.js +938 -0
- package/devices/uhome.js +25 -0
- package/devices/universal_electronics_inc.js +119 -0
- package/devices/urlighting.js +12 -0
- package/devices/useelink.js +52 -0
- package/devices/vbled.js +18 -0
- package/devices/vesternet.js +188 -0
- package/devices/viessmann.js +51 -0
- package/devices/villeroy_boch.js +18 -0
- package/devices/vimar.js +78 -0
- package/devices/visonic.js +80 -0
- package/devices/vrey.js +18 -0
- package/devices/wally.js +25 -0
- package/devices/waxman.js +45 -0
- package/devices/weiser.js +67 -0
- package/devices/weten.js +13 -0
- package/devices/wisdom.js +11 -0
- package/devices/woox.js +177 -0
- package/devices/wyze.js +23 -0
- package/devices/xiaomi.js +3223 -0
- package/devices/xinghuoyuan.js +11 -0
- package/devices/yale.js +227 -0
- package/devices/ynoa.js +68 -0
- package/devices/yookee.js +23 -0
- package/devices/ysrsai.js +26 -0
- package/devices/zemismart.js +254 -0
- package/devices/zen.js +34 -0
- package/devices/zipato.js +11 -0
- package/index.js +242 -0
- package/lib/color.js +784 -0
- package/lib/configureKey.js +944 -0
- package/lib/constants.js +316 -0
- package/lib/exposes.js +677 -0
- package/lib/extend.js +180 -0
- package/lib/kelvinToXy.js +1912 -0
- package/lib/legacy.js +2223 -0
- package/lib/light.js +111 -0
- package/lib/ota/OTA_URLs.md +119 -0
- package/lib/ota/common.js +476 -0
- package/lib/ota/index.js +10 -0
- package/lib/ota/inovelli.js +72 -0
- package/lib/ota/ledvance.js +52 -0
- package/lib/ota/lixee.js +57 -0
- package/lib/ota/salus.js +82 -0
- package/lib/ota/securifi.js +25 -0
- package/lib/ota/tradfri.js +45 -0
- package/lib/ota/ubisys.js +61 -0
- package/lib/ota/zigbeeOTA.js +161 -0
- package/lib/philips.js +667 -0
- package/lib/reporting.js +234 -0
- package/lib/store.js +57 -0
- package/lib/tuya.js +2027 -0
- package/lib/utils.js +527 -0
- package/lib/xiaomi.d.ts +11 -0
- package/lib/xiaomi.js +1288 -0
- package/lib/zosung.js +243 -0
- package/package.json +39 -0
package/devices/plaid.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const fz = require('../converters/fromZigbee');
|
|
2
|
+
const exposes = require('../lib/exposes');
|
|
3
|
+
const reporting = require('../lib/reporting');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
module.exports = [
|
|
7
|
+
{
|
|
8
|
+
fingerprint: [{modelID: 'PS-SPRZMS-SLP3', manufacturerName: 'PLAID SYSTEMS'}],
|
|
9
|
+
zigbeeModel: ['PS-SPRZMS-SLP3'],
|
|
10
|
+
model: 'PS-SPRZMS-SLP3',
|
|
11
|
+
vendor: 'PLAID SYSTEMS',
|
|
12
|
+
description: 'Spruce temperature and moisture sensor',
|
|
13
|
+
toZigbee: [],
|
|
14
|
+
fromZigbee: [fz.temperature, fz.humidity, fz.plaid_battery],
|
|
15
|
+
exposes: [e.humidity(), e.temperature(), e.battery(), e.battery_voltage()],
|
|
16
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
17
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
+
const endpoint = device.getEndpoint(1);
|
|
19
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg']);
|
|
20
|
+
await reporting.temperature(endpoint);
|
|
21
|
+
await reporting.humidity(endpoint);
|
|
22
|
+
device.powerSource = 'Battery';
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
];
|
|
@@ -0,0 +1,173 @@
|
|
|
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 utils = require('../lib/utils');
|
|
6
|
+
const e = exposes.presets;
|
|
7
|
+
const ea = exposes.access;
|
|
8
|
+
const herdsman = require('zigbee-herdsman');
|
|
9
|
+
|
|
10
|
+
const manufacturerOptions = {manufacturerCode: herdsman.Zcl.ManufacturerCode.PLUGWISE_BV};
|
|
11
|
+
|
|
12
|
+
const plugwisePushForce = {
|
|
13
|
+
0: 'standard',
|
|
14
|
+
0x60000: 'high',
|
|
15
|
+
0x70000: 'very_high',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const plugwiseRadioStrength = {
|
|
19
|
+
0: 'normal',
|
|
20
|
+
1: 'high',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const fzLocal = {
|
|
24
|
+
plugwise_radiator_valve: {
|
|
25
|
+
cluster: 'hvacThermostat',
|
|
26
|
+
type: ['attributeReport', 'readResponse'],
|
|
27
|
+
convert: (model, msg, publish, options, meta) => {
|
|
28
|
+
const result = fz.thermostat.convert(model, msg, publish, options, meta);
|
|
29
|
+
|
|
30
|
+
// Reports pIHeatingDemand between 0 and 100 already
|
|
31
|
+
if (typeof msg.data['pIHeatingDemand'] == 'number') {
|
|
32
|
+
result.pi_heating_demand = utils.precisionRound(msg.data['pIHeatingDemand'], 0);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (typeof msg.data[0x4003] == 'number') {
|
|
36
|
+
result.current_heating_setpoint = utils.precisionRound(msg.data[0x4003], 2) / 100;
|
|
37
|
+
}
|
|
38
|
+
if (typeof msg.data[0x4008] == 'number') {
|
|
39
|
+
result.plugwise_t_diff = msg.data[0x4008];
|
|
40
|
+
}
|
|
41
|
+
if (typeof msg.data[0x4002] == 'number') {
|
|
42
|
+
result.error_status = msg.data[0x4002];
|
|
43
|
+
}
|
|
44
|
+
if (typeof msg.data[0x4001] == 'number') {
|
|
45
|
+
result.valve_position = msg.data[0x4001];
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const tzLocal = {
|
|
53
|
+
plugwise_calibrate_valve: {
|
|
54
|
+
key: ['calibrate_valve'],
|
|
55
|
+
convertSet: async (entity, key, value, meta) => {
|
|
56
|
+
await entity.command('hvacThermostat', 'plugwiseCalibrateValve', {},
|
|
57
|
+
{srcEndpoint: 11, disableDefaultResponse: true, sendWhen: 'active'});
|
|
58
|
+
return {state: {'calibrate_valve': value}};
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
plugwise_valve_position: {
|
|
62
|
+
key: ['plugwise_valve_position', 'valve_position'],
|
|
63
|
+
convertSet: async (entity, key, value, meta) => {
|
|
64
|
+
const payload = {0x4001: {value, type: 0x20}};
|
|
65
|
+
await entity.write('hvacThermostat', payload, manufacturerOptions);
|
|
66
|
+
// Tom does not automatically send back updated value so ask for it
|
|
67
|
+
await entity.read('hvacThermostat', [0x4001], manufacturerOptions);
|
|
68
|
+
},
|
|
69
|
+
convertGet: async (entity, key, meta) => {
|
|
70
|
+
await entity.read('hvacThermostat', [0x4001], manufacturerOptions);
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
plugwise_push_force: {
|
|
74
|
+
key: ['plugwise_push_force', 'force'],
|
|
75
|
+
convertSet: async (entity, key, value, meta) => {
|
|
76
|
+
const val = utils.getKey(plugwisePushForce, value, value, Number);
|
|
77
|
+
const payload = {0x4012: {value: val, type: 0x23}};
|
|
78
|
+
await entity.write('hvacThermostat', payload, manufacturerOptions);
|
|
79
|
+
},
|
|
80
|
+
convertGet: async (entity, key, meta) => {
|
|
81
|
+
await entity.read('hvacThermostat', [0x4012], manufacturerOptions);
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
plugwise_radio_strength: {
|
|
85
|
+
key: ['plugwise_radio_strength', 'radio_strength'],
|
|
86
|
+
convertSet: async (entity, key, value, meta) => {
|
|
87
|
+
const val = utils.getKey(plugwiseRadioStrength, value, value, Number);
|
|
88
|
+
const payload = {0x4014: {value: val, type: 0x10}};
|
|
89
|
+
await entity.write('hvacThermostat', payload, manufacturerOptions);
|
|
90
|
+
},
|
|
91
|
+
convertGet: async (entity, key, meta) => {
|
|
92
|
+
await entity.read('hvacThermostat', [0x4014], manufacturerOptions);
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
module.exports = [
|
|
98
|
+
{
|
|
99
|
+
zigbeeModel: ['160-01'],
|
|
100
|
+
model: '160-01',
|
|
101
|
+
vendor: 'Plugwise',
|
|
102
|
+
description: 'Plug power socket on/off with power consumption monitoring',
|
|
103
|
+
fromZigbee: [fz.on_off, fz.metering],
|
|
104
|
+
toZigbee: [tz.on_off],
|
|
105
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
106
|
+
const endpoint = device.getEndpoint(1);
|
|
107
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
108
|
+
await reporting.onOff(endpoint);
|
|
109
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
110
|
+
await reporting.instantaneousDemand(endpoint);
|
|
111
|
+
},
|
|
112
|
+
exposes: [e.switch(), e.power(), e.energy()],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
zigbeeModel: ['106-03'],
|
|
116
|
+
model: '106-03',
|
|
117
|
+
vendor: 'Plugwise',
|
|
118
|
+
description: 'Tom thermostatic radiator valve',
|
|
119
|
+
fromZigbee: [fz.temperature, fz.battery, fzLocal.plugwise_radiator_valve],
|
|
120
|
+
// sytem_mode and occupied_heating_setpoint is not supported: https://github.com/Koenkk/zigbee2mqtt.io/pull/1666
|
|
121
|
+
toZigbee: [
|
|
122
|
+
tz.thermostat_pi_heating_demand,
|
|
123
|
+
tzLocal.plugwise_valve_position,
|
|
124
|
+
tzLocal.plugwise_push_force,
|
|
125
|
+
tzLocal.plugwise_radio_strength,
|
|
126
|
+
tzLocal.plugwise_calibrate_valve,
|
|
127
|
+
],
|
|
128
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
129
|
+
const endpoint = device.getEndpoint(1);
|
|
130
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg', 'hvacThermostat']);
|
|
131
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
132
|
+
await reporting.thermostatTemperature(endpoint);
|
|
133
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
134
|
+
},
|
|
135
|
+
exposes: [e.battery(),
|
|
136
|
+
exposes.numeric('pi_heating_demand', ea.STATE_GET).withValueMin(0).withValueMax(100).withUnit('%')
|
|
137
|
+
.withDescription('Position of the valve (= demanded heat) where 0% is fully closed and 100% is fully open'),
|
|
138
|
+
exposes.numeric('local_temperature', ea.STATE).withUnit('°C').withDescription('Current temperature measured on the device'),
|
|
139
|
+
exposes.numeric('valve_position', ea.ALL).withValueMin(0).withValueMax(100)
|
|
140
|
+
.withDescription('Directly control the radiator valve. The values range from 0 (valve ' +
|
|
141
|
+
'closed) to 100 (valve fully open)'),
|
|
142
|
+
exposes.enum('force', ea.ALL, ['standard', 'high', 'very_high'])
|
|
143
|
+
.withDescription('How hard the motor pushes the valve. The closer to the boiler, the higher the force needed'),
|
|
144
|
+
exposes.enum('radio_strength', ea.ALL, ['normal', 'high'])
|
|
145
|
+
.withDescription('Transmits with higher power when range is not sufficient'),
|
|
146
|
+
exposes.binary('calibrate_valve', ea.STATE_SET, 'calibrate', 'idle')
|
|
147
|
+
.withDescription('Calibrates valve on next wakeup'),
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
zigbeeModel: ['158-01'],
|
|
152
|
+
model: '158-01',
|
|
153
|
+
vendor: 'Plugwise',
|
|
154
|
+
description: 'Lisa zone thermostat',
|
|
155
|
+
fromZigbee: [fz.thermostat, fz.temperature, fz.battery],
|
|
156
|
+
toZigbee: [
|
|
157
|
+
tz.thermostat_system_mode,
|
|
158
|
+
tz.thermostat_occupied_heating_setpoint,
|
|
159
|
+
],
|
|
160
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
161
|
+
const endpoint = device.getEndpoint(1);
|
|
162
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg', 'hvacThermostat']);
|
|
163
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
164
|
+
await reporting.thermostatTemperature(endpoint);
|
|
165
|
+
},
|
|
166
|
+
exposes: [e.battery(),
|
|
167
|
+
exposes.climate()
|
|
168
|
+
.withSetpoint('occupied_heating_setpoint', 5, 30, 0.5, ea.ALL)
|
|
169
|
+
.withLocalTemperature(ea.STATE)
|
|
170
|
+
.withSystemMode(['off', 'auto'], ea.ALL),
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
];
|
package/devices/popp.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const {extendDevice} = require('../lib/utils');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
extendDevice(require('./danfoss'), '014G2461', {
|
|
5
|
+
zigbeeModel: ['eT093WRO', 'eT093WRG'],
|
|
6
|
+
model: '701721',
|
|
7
|
+
vendor: 'Popp',
|
|
8
|
+
description: 'Smart thermostat based on Danfoss Ally (014G2461)',
|
|
9
|
+
}),
|
|
10
|
+
];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const fz = require('../converters/fromZigbee');
|
|
2
|
+
const tz = require('../converters/toZigbee');
|
|
3
|
+
const exposes = require('../lib/exposes');
|
|
4
|
+
const reporting = require('../lib/reporting');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
const ea = exposes.access;
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 513, inputClusters: [0, 3, 21],
|
|
11
|
+
outputClusters: [3, 4, 5, 6, 8, 256, 64544, 64545]}]}],
|
|
12
|
+
model: 'NB102',
|
|
13
|
+
vendor: 'Profalux',
|
|
14
|
+
description: 'Cover remote',
|
|
15
|
+
fromZigbee: [],
|
|
16
|
+
toZigbee: [],
|
|
17
|
+
exposes: [],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
zigbeeModel: [
|
|
21
|
+
'MOT-C1Z06C\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
|
|
22
|
+
'MOT-C1Z10F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
|
|
23
|
+
],
|
|
24
|
+
fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 512,
|
|
25
|
+
inputClusters: [0, 3, 4, 5, 6, 8, 10, 21, 256, 64544, 64545], outputClusters: [3, 64544]}]}],
|
|
26
|
+
model: 'NSAV061',
|
|
27
|
+
vendor: 'Profalux',
|
|
28
|
+
description: 'Cover',
|
|
29
|
+
fromZigbee: [fz.cover_position_via_brightness, fz.cover_state_via_onoff],
|
|
30
|
+
toZigbee: [tz.cover_via_brightness],
|
|
31
|
+
exposes: [e.cover_position().setAccess('state', ea.ALL)],
|
|
32
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
33
|
+
const endpoint = device.getEndpoint(1);
|
|
34
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genLevelCtrl']);
|
|
35
|
+
await reporting.brightness(endpoint);
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
zigbeeModel: ['MAI-ZTP20F'],
|
|
40
|
+
model: 'MAI-ZTP20F',
|
|
41
|
+
vendor: 'Profalux',
|
|
42
|
+
description: 'Cover remote',
|
|
43
|
+
fromZigbee: [],
|
|
44
|
+
toZigbee: [],
|
|
45
|
+
exposes: [],
|
|
46
|
+
},
|
|
47
|
+
];
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const exposes = require('../lib/exposes');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
module.exports = [
|
|
7
|
+
{
|
|
8
|
+
zigbeeModel: ['PROLIGHT E27 WHITE AND COLOUR'],
|
|
9
|
+
model: '5412748727371',
|
|
10
|
+
vendor: 'Prolight',
|
|
11
|
+
description: 'E27 white and colour bulb',
|
|
12
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
zigbeeModel: ['PROLIGHT E27 WARM WHITE CLEAR'],
|
|
16
|
+
model: '5412748727432',
|
|
17
|
+
vendor: 'Prolight',
|
|
18
|
+
description: 'E27 filament bulb dimmable',
|
|
19
|
+
extend: extend.light_onoff_brightness(),
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
zigbeeModel: ['PROLIGHT E27 WARM WHITE'],
|
|
23
|
+
model: '5412748727364',
|
|
24
|
+
vendor: 'Prolight',
|
|
25
|
+
description: 'E27 bulb dimmable',
|
|
26
|
+
extend: extend.light_onoff_brightness(),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
zigbeeModel: ['PROLIGHT GU10 WHITE AND COLOUR'],
|
|
30
|
+
model: '5412748727401',
|
|
31
|
+
vendor: 'Prolight',
|
|
32
|
+
description: 'GU10 white and colour spot',
|
|
33
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
zigbeeModel: ['PROLIGHT GU10 WARM WHITE'],
|
|
37
|
+
model: '5412748727395',
|
|
38
|
+
vendor: 'Prolight',
|
|
39
|
+
description: 'GU10 spot dimmable',
|
|
40
|
+
extend: extend.light_onoff_brightness(),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
zigbeeModel: ['PROLIGHT REMOTE CONTROL'],
|
|
44
|
+
model: '5412748727388',
|
|
45
|
+
vendor: 'Prolight',
|
|
46
|
+
description: 'Remote control',
|
|
47
|
+
toZigbee: [],
|
|
48
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.command_move_to_level, fz.command_move, fz.command_stop,
|
|
49
|
+
fz.command_move_to_color_temp, fz.command_move_to_color, fz.command_move_color_temperature, fz.battery],
|
|
50
|
+
exposes: [e.battery(), e.action(['on', 'off', 'color_temperature_move', 'color_temperature_move_up',
|
|
51
|
+
'color_temperature_move_down', 'color_move', 'brightness_move_up', 'brightness_move_down',
|
|
52
|
+
'brightness_stop', 'brightness_move_to_level'])],
|
|
53
|
+
},
|
|
54
|
+
];
|
|
@@ -0,0 +1,33 @@
|
|
|
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 e = exposes.presets;
|
|
5
|
+
const ea = exposes.access;
|
|
6
|
+
const reporting = require('../lib/reporting');
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['Rollershade QdR'],
|
|
11
|
+
model: 'QZR-ZIG2400',
|
|
12
|
+
vendor: 'Qmotion',
|
|
13
|
+
description: '5 channel remote',
|
|
14
|
+
fromZigbee: [fz.identify, fz.cover_position_tilt],
|
|
15
|
+
exposes: [e.action(['identify']), exposes.numeric('position', ea.STATE)],
|
|
16
|
+
toZigbee: [],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
zigbeeModel: ['Honeycomb Internal Battery', 'Rollershade Internal Battery'],
|
|
20
|
+
model: 'HDM40PV620',
|
|
21
|
+
vendor: 'Qmotion',
|
|
22
|
+
description: 'Motorized roller blind',
|
|
23
|
+
fromZigbee: [fz.identify, fz.cover_position_tilt, fz.battery],
|
|
24
|
+
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
25
|
+
exposes: [e.cover_position(), e.battery()],
|
|
26
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
27
|
+
const endpoint = device.getEndpoint(1);
|
|
28
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
|
|
29
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
30
|
+
await reporting.currentPositionLiftPercentage(endpoint);
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
package/devices/qoto.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
const fz = require('../converters/fromZigbee');
|
|
2
|
+
const exposes = require('../lib/exposes');
|
|
3
|
+
const tuya = require('../lib/tuya');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
const ea = exposes.access;
|
|
6
|
+
|
|
7
|
+
const dataPoints = {
|
|
8
|
+
valve_state_auto_shutdown: 2,
|
|
9
|
+
water_flow: 3,
|
|
10
|
+
shutdown_timer: 11,
|
|
11
|
+
remaining_watering_time: 101,
|
|
12
|
+
valve_state: 102,
|
|
13
|
+
last_watering_duration: 107,
|
|
14
|
+
battery: 110,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const fzLocal = {
|
|
18
|
+
watering_timer: {
|
|
19
|
+
cluster: 'manuSpecificTuya',
|
|
20
|
+
type: ['commandDataReport'],
|
|
21
|
+
convert: (model, msg, publish, options, meta) => {
|
|
22
|
+
const result = {};
|
|
23
|
+
for (const dpValue of msg.data.dpValues) {
|
|
24
|
+
const dp = dpValue.dp; // First we get the data point ID
|
|
25
|
+
const value = tuya.getDataValue(dpValue); // This function will take care of converting the data to proper JS type
|
|
26
|
+
switch (dp) {
|
|
27
|
+
case dataPoints.water_flow: {
|
|
28
|
+
result.water_flow = value;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
case dataPoints.remaining_watering_time: {
|
|
32
|
+
result.remaining_watering_time = value;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case dataPoints.last_watering_duration: {
|
|
36
|
+
result.last_watering_duration = value;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
case dataPoints.valve_state: {
|
|
41
|
+
result.valve_state = value;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
case dataPoints.shutdown_timer: {
|
|
46
|
+
result.shutdown_timer = value;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case dataPoints.valve_state_auto_shutdown: {
|
|
50
|
+
result.valve_state_auto_shutdown = value;
|
|
51
|
+
result.valve_state = value;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
case dataPoints.battery: {
|
|
56
|
+
result.battery = value;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
default: {
|
|
60
|
+
meta.logger.debug(`>>> UNKNOWN DP #${dp} with data "${JSON.stringify(dpValue)}"`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const tzLocal = {
|
|
70
|
+
valve_state: {
|
|
71
|
+
key: ['valve_state'],
|
|
72
|
+
convertSet: async (entity, key, value, meta) => {
|
|
73
|
+
await tuya.sendDataPointValue(entity, dataPoints.valve_state, value);
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
shutdown_timer: {
|
|
77
|
+
key: ['shutdown_timer'],
|
|
78
|
+
convertSet: async (entity, key, value, meta) => {
|
|
79
|
+
await tuya.sendDataPointValue(entity, dataPoints.shutdown_timer, value);
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
valve_state_auto_shutdown: {
|
|
83
|
+
key: ['valve_state_auto_shutdown'],
|
|
84
|
+
convertSet: async (entity, key, value, meta) => {
|
|
85
|
+
await tuya.sendDataPointValue(entity, dataPoints.valve_state_auto_shutdown, value);
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
module.exports = [
|
|
91
|
+
{
|
|
92
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_arge1ptm', '_TZE200_anv5ujhv']),
|
|
93
|
+
model: 'QT-05M',
|
|
94
|
+
vendor: 'QOTO',
|
|
95
|
+
description: 'Solar powered garden watering timer',
|
|
96
|
+
fromZigbee: [fz.ignore_basic_report, fz.ignore_tuya_set_time, fz.ignore_onoff_report, fzLocal.watering_timer],
|
|
97
|
+
toZigbee: [tzLocal.valve_state, tzLocal.shutdown_timer, tzLocal.valve_state_auto_shutdown],
|
|
98
|
+
exposes: [
|
|
99
|
+
exposes.numeric('water_flow', ea.STATE).withUnit('%').withValueMin(0).withDescription('Current water flow in %.'),
|
|
100
|
+
exposes.numeric('last_watering_duration', ea.STATE).withUnit('sec').withValueMin(0)
|
|
101
|
+
.withDescription('Last watering duration in seconds.'),
|
|
102
|
+
exposes.numeric('remaining_watering_time', ea.STATE).withUnit('sec').withValueMin(0)
|
|
103
|
+
.withDescription('Remaning watering time (for auto shutdown). Updates every minute, and every 10s in the last minute.'),
|
|
104
|
+
exposes.numeric('valve_state', ea.STATE_SET).withValueMin(0).withValueMax(100).withValueStep(5).withUnit('%')
|
|
105
|
+
.withDescription('Set valve to %.'),
|
|
106
|
+
exposes.numeric('shutdown_timer', ea.STATE_SET).withValueMin(0).withValueMax(14400).withUnit('sec')
|
|
107
|
+
.withDescription('Auto shutdown in seconds.'),
|
|
108
|
+
exposes.numeric('valve_state_auto_shutdown', ea.STATE_SET).withValueMin(0).withValueMax(100).withValueStep(5).withUnit('%')
|
|
109
|
+
.withDescription('Set valve to % with auto shutdown.'),
|
|
110
|
+
e.battery(),
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['Dimmer_us'],
|
|
6
|
+
model: 'B07CVL9SZF',
|
|
7
|
+
vendor: 'Quotra',
|
|
8
|
+
description: 'Dimmer',
|
|
9
|
+
extend: extend.light_onoff_brightness(),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
zigbeeModel: ['QV-RGBCCT'],
|
|
13
|
+
model: 'B07JHL6DRV',
|
|
14
|
+
vendor: 'Quotra',
|
|
15
|
+
description: 'RGB WW LED strip',
|
|
16
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [150, 500]}),
|
|
17
|
+
},
|
|
18
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['RDM-35104001'],
|
|
6
|
+
model: '35104001',
|
|
7
|
+
vendor: 'Rademacher',
|
|
8
|
+
description: 'addZ white + colour',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
zigbeeModel: ['RDM-35144001'],
|
|
13
|
+
model: '35144001',
|
|
14
|
+
vendor: 'Rademacher',
|
|
15
|
+
description: 'addZ white + colour',
|
|
16
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
|
|
17
|
+
},
|
|
18
|
+
];
|
|
@@ -0,0 +1,119 @@
|
|
|
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 extend = require('../lib/extend');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
const utils = require('../lib/utils');
|
|
7
|
+
|
|
8
|
+
const fzLocal = {
|
|
9
|
+
// ZB-1026 requires separate on/off converters since it re-uses the transaction number
|
|
10
|
+
// https://github.com/Koenkk/zigbee2mqtt/issues/12957
|
|
11
|
+
ZB1026_command_on: {
|
|
12
|
+
cluster: 'genOnOff',
|
|
13
|
+
type: 'commandOn',
|
|
14
|
+
convert: (model, msg, publish, options, meta) => {
|
|
15
|
+
const payload = {action: utils.postfixWithEndpointName('on', msg, model, meta)};
|
|
16
|
+
utils.addActionGroup(payload, msg, model);
|
|
17
|
+
return payload;
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
ZB1026_command_off: {
|
|
21
|
+
cluster: 'genOnOff',
|
|
22
|
+
type: 'commandOff',
|
|
23
|
+
convert: (model, msg, publish, options, meta) => {
|
|
24
|
+
const payload = {action: utils.postfixWithEndpointName('off', msg, model, meta)};
|
|
25
|
+
utils.addActionGroup(payload, msg, model);
|
|
26
|
+
return payload;
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
module.exports = [
|
|
32
|
+
{
|
|
33
|
+
zigbeeModel: ['RGBgenie ZB-1026'],
|
|
34
|
+
model: 'ZB-1026',
|
|
35
|
+
vendor: 'RGB Genie',
|
|
36
|
+
description: 'Zigbee LED dimmer controller',
|
|
37
|
+
extend: extend.light_onoff_brightness(),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
zigbeeModel: ['RGBgenie ZB-5001'],
|
|
41
|
+
model: 'ZB-5001',
|
|
42
|
+
vendor: 'RGB Genie',
|
|
43
|
+
description: 'Zigbee 3.0 remote control',
|
|
44
|
+
fromZigbee: [fz.command_recall, fzLocal.ZB1026_command_on, fzLocal.ZB1026_command_off,
|
|
45
|
+
fz.command_move, fz.command_stop, fz.battery],
|
|
46
|
+
exposes: [e.battery(), e.action(['recall_*', 'on', 'off', 'brightness_stop', 'brightness_move_up', 'brightness_move_down'])],
|
|
47
|
+
toZigbee: [],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
zigbeeModel: ['RGBgenie ZB-5121'],
|
|
51
|
+
model: 'ZB-5121',
|
|
52
|
+
vendor: 'RGB Genie',
|
|
53
|
+
description: 'Micro remote and dimmer with single scene recall',
|
|
54
|
+
fromZigbee: [fz.battery, fz.command_on, fz.command_off, fz.command_step, fz.command_move, fz.command_stop, fz.command_recall],
|
|
55
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up',
|
|
56
|
+
'brightness_move_down', 'brightness_stop', 'recall_*'])],
|
|
57
|
+
toZigbee: [],
|
|
58
|
+
meta: {battery: {dontDividePercentage: true}},
|
|
59
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
60
|
+
const endpoint = device.getEndpoint(1);
|
|
61
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
|
|
62
|
+
await reporting.batteryVoltage(endpoint);
|
|
63
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
zigbeeModel: ['RGBgenie ZB-5122'],
|
|
68
|
+
model: 'ZB-5122',
|
|
69
|
+
vendor: 'RGB Genie',
|
|
70
|
+
description: 'Micro remote and color dimmer with single scene recall',
|
|
71
|
+
fromZigbee: [fz.battery, fz.command_on, fz.command_off, fz.command_step, fz.command_move,
|
|
72
|
+
fz.command_stop, fz.command_recall, fz.command_move_to_color, fz.command_move_to_color_temp, fz.command_move_hue,
|
|
73
|
+
fz.command_move_color_temperature],
|
|
74
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up',
|
|
75
|
+
'brightness_move_down', 'brightness_stop', 'recall_*', 'color_temperature_move_up', 'color_temperature_move_down',
|
|
76
|
+
'hue_move', 'hue_stop'])],
|
|
77
|
+
toZigbee: [],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
zigbeeModel: ['RGBgenie ZB-3009'],
|
|
81
|
+
model: 'ZB-3009',
|
|
82
|
+
vendor: 'RGB Genie',
|
|
83
|
+
description: '3 scene remote and dimmer ',
|
|
84
|
+
fromZigbee: [fz.command_recall, fz.command_move_hue, fz.command_move, fz.command_stop, fz.command_on, fz.command_off,
|
|
85
|
+
fz.command_move_to_color_temp, fz.command_move_to_color, fz.command_move_color_temperature],
|
|
86
|
+
toZigbee: [],
|
|
87
|
+
exposes: [e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up',
|
|
88
|
+
'brightness_move_down', 'brightness_stop', 'recall_*', 'hue_move', 'color_temperature_move', 'color_move',
|
|
89
|
+
'color_temperature_move_up', 'color_temperature_move_down', 'hue_stop'])],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
zigbeeModel: ['RGBgenie ZB-5028'],
|
|
93
|
+
model: 'ZB-5028',
|
|
94
|
+
vendor: 'RGB Genie',
|
|
95
|
+
description: 'RGB remote with 4 endpoints and 3 scene recalls',
|
|
96
|
+
fromZigbee: [fz.battery, fz.command_on, fz.command_off, fz.command_step, fz.command_move, fz.command_stop, fz.command_recall,
|
|
97
|
+
fz.command_move_hue, fz.command_move_to_color, fz.command_move_to_color_temp],
|
|
98
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up',
|
|
99
|
+
'brightness_move_down', 'brightness_stop', 'recall_1', 'recall_2', 'recall_3', 'hue_move', 'color_temperature_move',
|
|
100
|
+
'color_move', 'hue_stop'])],
|
|
101
|
+
toZigbee: [],
|
|
102
|
+
meta: {multiEndpoint: true, battery: {dontDividePercentage: true}},
|
|
103
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
104
|
+
const endpoint = device.getEndpoint(1);
|
|
105
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
|
|
106
|
+
await reporting.batteryVoltage(endpoint);
|
|
107
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
zigbeeModel: ['RGBgenie ZB-5004'],
|
|
112
|
+
model: 'ZB-5004',
|
|
113
|
+
vendor: 'RGB Genie',
|
|
114
|
+
description: 'Zigbee 3.0 remote control',
|
|
115
|
+
fromZigbee: [fz.command_recall, fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.battery],
|
|
116
|
+
exposes: [e.battery(), e.action(['recall_*', 'on', 'off', 'brightness_stop', 'brightness_move_up', 'brightness_move_down'])],
|
|
117
|
+
toZigbee: [],
|
|
118
|
+
},
|
|
119
|
+
];
|