@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/hive.js
ADDED
|
@@ -0,0 +1,524 @@
|
|
|
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 {extendDevice} = require('../lib/utils');
|
|
8
|
+
const e = exposes.presets;
|
|
9
|
+
const ea = exposes.access;
|
|
10
|
+
|
|
11
|
+
module.exports = [
|
|
12
|
+
{
|
|
13
|
+
zigbeeModel: ['FWGU10Bulb02UK'],
|
|
14
|
+
model: 'FWGU10Bulb02UK',
|
|
15
|
+
vendor: 'Hive',
|
|
16
|
+
description: 'GU10 warm white',
|
|
17
|
+
extend: extend.light_onoff_brightness(),
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
zigbeeModel: ['MOT003'],
|
|
21
|
+
model: 'MOT003',
|
|
22
|
+
vendor: 'Hive',
|
|
23
|
+
description: 'Motion sensor',
|
|
24
|
+
fromZigbee: [fz.temperature, fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report,
|
|
25
|
+
fz.ignore_iaszone_statuschange, fz.ignore_iaszone_attreport],
|
|
26
|
+
toZigbee: [],
|
|
27
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
28
|
+
const endpoint = device.getEndpoint(6);
|
|
29
|
+
const binds = ['msTemperatureMeasurement', 'genPowerCfg'];
|
|
30
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
31
|
+
await reporting.temperature(endpoint);
|
|
32
|
+
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
33
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
34
|
+
},
|
|
35
|
+
exposes: [e.temperature(), e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
zigbeeModel: ['DWS003'],
|
|
39
|
+
model: 'DWS003',
|
|
40
|
+
vendor: 'Hive',
|
|
41
|
+
description: 'Contact sensor',
|
|
42
|
+
fromZigbee: [fz.temperature, fz.ias_contact_alarm_1, fz.battery],
|
|
43
|
+
toZigbee: [],
|
|
44
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
45
|
+
const endpoint = device.getEndpoint(6);
|
|
46
|
+
const binds = ['msTemperatureMeasurement', 'genPowerCfg'];
|
|
47
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
48
|
+
await reporting.temperature(endpoint);
|
|
49
|
+
await endpoint.read('genPowerCfg', ['batteryPercentageRemaining']);
|
|
50
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
51
|
+
},
|
|
52
|
+
exposes: [e.temperature(), e.contact(), e.battery_low(), e.tamper(), e.battery()],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
zigbeeModel: ['FWBulb01'],
|
|
56
|
+
model: 'HALIGHTDIMWWE27',
|
|
57
|
+
vendor: 'Hive',
|
|
58
|
+
description: 'Active smart bulb white LED (E27)',
|
|
59
|
+
extend: extend.light_onoff_brightness(),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
zigbeeModel: ['FWCLBulb01UK'],
|
|
63
|
+
model: 'HALIGHTDIMWWE14',
|
|
64
|
+
vendor: 'Hive',
|
|
65
|
+
description: 'Active smart bulb white LED (E14)',
|
|
66
|
+
extend: extend.light_onoff_brightness(),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
zigbeeModel: ['FWBulb02UK'],
|
|
70
|
+
model: 'HALIGHTDIMWWB22',
|
|
71
|
+
vendor: 'Hive',
|
|
72
|
+
description: 'Active smart bulb white LED (B22)',
|
|
73
|
+
extend: extend.light_onoff_brightness(),
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
zigbeeModel: ['TWBulb02UK'],
|
|
77
|
+
model: 'HV-GSCXZB229B',
|
|
78
|
+
vendor: 'Hive',
|
|
79
|
+
description: 'Active light, warm to cool white (E27 & B22)',
|
|
80
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
zigbeeModel: ['TWCLBulb01UK'],
|
|
84
|
+
model: 'HV-CE14CXZB6',
|
|
85
|
+
vendor: 'Hive',
|
|
86
|
+
description: 'Active light, warm to cool white (E14)',
|
|
87
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
zigbeeModel: ['SLP2', 'SLP2b', 'SLP2c'],
|
|
91
|
+
model: '1613V',
|
|
92
|
+
vendor: 'Hive',
|
|
93
|
+
description: 'Active plug',
|
|
94
|
+
fromZigbee: [fz.on_off, fz.metering],
|
|
95
|
+
toZigbee: [tz.on_off],
|
|
96
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
97
|
+
const endpoint = device.getEndpoint(9);
|
|
98
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
99
|
+
await reporting.onOff(endpoint);
|
|
100
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
101
|
+
await reporting.instantaneousDemand(endpoint);
|
|
102
|
+
await reporting.currentSummDelivered(endpoint);
|
|
103
|
+
},
|
|
104
|
+
exposes: [e.switch(), e.power(), e.energy()],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
zigbeeModel: ['TWBulb01US'],
|
|
108
|
+
model: 'HV-GSCXZB269',
|
|
109
|
+
vendor: 'Hive',
|
|
110
|
+
description: 'Active light cool to warm white (E26) ',
|
|
111
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
zigbeeModel: ['TWBulb01UK'],
|
|
115
|
+
model: 'HV-GSCXZB279_HV-GSCXZB229_HV-GSCXZB229K',
|
|
116
|
+
vendor: 'Hive',
|
|
117
|
+
description: 'Active light, warm to cool white (E27 & B22)',
|
|
118
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
zigbeeModel: ['TWGU10Bulb01UK'],
|
|
122
|
+
model: 'HV-GUCXZB5',
|
|
123
|
+
vendor: 'Hive',
|
|
124
|
+
description: 'Active light, warm to cool white (GU10)',
|
|
125
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
zigbeeModel: ['KEYPAD001'],
|
|
129
|
+
model: 'KEYPAD001',
|
|
130
|
+
vendor: 'Hive',
|
|
131
|
+
description: 'Alarm security keypad',
|
|
132
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
133
|
+
fromZigbee: [fz.command_arm_with_transaction, fz.command_panic, fz.battery, fz.ias_occupancy_alarm_1, fz.identify,
|
|
134
|
+
fz.ias_contact_alarm_1, fz.ias_ace_occupancy_with_timeout],
|
|
135
|
+
toZigbee: [tz.arm_mode],
|
|
136
|
+
exposes: [e.battery(), e.battery_voltage(), e.battery_low(), e.occupancy(), e.tamper(), e.contact(),
|
|
137
|
+
exposes.numeric('action_code', ea.STATE).withDescription('Pin code introduced.'),
|
|
138
|
+
exposes.numeric('action_transaction', ea.STATE).withDescription('Last action transaction number.'),
|
|
139
|
+
exposes.text('action_zone', ea.STATE).withDescription('Alarm zone. Default value 23'),
|
|
140
|
+
e.action([
|
|
141
|
+
'panic', 'disarm', 'arm_day_zones', 'arm_all_zones', 'exit_delay', 'entry_delay'])],
|
|
142
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
143
|
+
const endpoint = device.getEndpoint(1);
|
|
144
|
+
const clusters = ['genPowerCfg', 'ssIasZone', 'ssIasAce', 'genIdentify'];
|
|
145
|
+
await reporting.bind(endpoint, coordinatorEndpoint, clusters);
|
|
146
|
+
await reporting.batteryVoltage(endpoint);
|
|
147
|
+
},
|
|
148
|
+
onEvent: async (type, data, device) => {
|
|
149
|
+
if (data.type === 'commandGetPanelStatus' && data.cluster === 'ssIasAce') {
|
|
150
|
+
const payload = {
|
|
151
|
+
panelstatus: globalStore.getValue(data.endpoint, 'panelStatus'),
|
|
152
|
+
secondsremain: 0x00, audiblenotif: 0x00, alarmstatus: 0x00,
|
|
153
|
+
};
|
|
154
|
+
await data.endpoint.commandResponse(
|
|
155
|
+
'ssIasAce', 'getPanelStatusRsp', payload, {}, data.meta.zclTransactionSequenceNumber,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
extendDevice(require('./danfoss'), '014G2461', {
|
|
161
|
+
zigbeeModel: ['TRV001', 'TRV003'],
|
|
162
|
+
model: 'UK7004240',
|
|
163
|
+
vendor: 'Hive',
|
|
164
|
+
description: 'Radiator valve based on Danfoss Ally (014G2461)',
|
|
165
|
+
}),
|
|
166
|
+
{
|
|
167
|
+
zigbeeModel: ['SLR1'],
|
|
168
|
+
model: 'SLR1',
|
|
169
|
+
vendor: 'Hive',
|
|
170
|
+
description: 'Heating thermostat',
|
|
171
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
172
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
173
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
174
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
175
|
+
exposes: [
|
|
176
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
177
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']),
|
|
178
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
179
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
180
|
+
' Must be set to `false` when system_mode = off or `true` for heat'),
|
|
181
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
182
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
183
|
+
' used. 0 to 360 to match the remote display')],
|
|
184
|
+
meta: {disableDefaultResponse: true},
|
|
185
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
186
|
+
const endpoint = device.getEndpoint(5);
|
|
187
|
+
const binds = ['genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat'];
|
|
188
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
189
|
+
await reporting.thermostatTemperature(endpoint);
|
|
190
|
+
await reporting.thermostatRunningState(endpoint);
|
|
191
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
192
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
193
|
+
await reporting.thermostatTemperatureSetpointHold(endpoint);
|
|
194
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint);
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
zigbeeModel: ['SLR1b'],
|
|
199
|
+
model: 'SLR1b',
|
|
200
|
+
vendor: 'Hive',
|
|
201
|
+
description: 'Heating thermostat',
|
|
202
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
203
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
204
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
205
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
206
|
+
exposes: [
|
|
207
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
208
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']),
|
|
209
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
210
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
211
|
+
' Must be set to `false` when system_mode = off or `true` for heat'),
|
|
212
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
213
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
214
|
+
' used. 0 to 360 to match the remote display')],
|
|
215
|
+
meta: {disableDefaultResponse: true},
|
|
216
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
217
|
+
const endpoint = device.getEndpoint(5);
|
|
218
|
+
const binds = ['genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat'];
|
|
219
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
220
|
+
await reporting.thermostatTemperature(endpoint);
|
|
221
|
+
await reporting.thermostatRunningState(endpoint);
|
|
222
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
223
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
224
|
+
await reporting.thermostatTemperatureSetpointHold(endpoint);
|
|
225
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint);
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
zigbeeModel: ['SLR1c'],
|
|
230
|
+
model: 'SLR1c',
|
|
231
|
+
vendor: 'Hive',
|
|
232
|
+
description: 'Heating thermostat',
|
|
233
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
234
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
235
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
236
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
237
|
+
exposes: [
|
|
238
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
239
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']),
|
|
240
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
241
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
242
|
+
' Must be set to `false` when system_mode = off or `true` for heat'),
|
|
243
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
244
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
245
|
+
' used. 0 to 360 to match the remote display')],
|
|
246
|
+
meta: {disableDefaultResponse: true},
|
|
247
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
248
|
+
const endpoint = device.getEndpoint(5);
|
|
249
|
+
const binds = ['genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat'];
|
|
250
|
+
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
251
|
+
await reporting.thermostatTemperature(endpoint);
|
|
252
|
+
await reporting.thermostatRunningState(endpoint);
|
|
253
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
254
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
255
|
+
await reporting.thermostatTemperatureSetpointHold(endpoint);
|
|
256
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(endpoint);
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
zigbeeModel: ['SLR2'],
|
|
261
|
+
model: 'SLR2',
|
|
262
|
+
vendor: 'Hive',
|
|
263
|
+
description: 'Dual channel heating and hot water thermostat',
|
|
264
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
265
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
266
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
267
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
268
|
+
endpoint: (device) => {
|
|
269
|
+
return {'heat': 5, 'water': 6};
|
|
270
|
+
},
|
|
271
|
+
meta: {disableDefaultResponse: true, multiEndpoint: true},
|
|
272
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
273
|
+
const heatEndpoint = device.getEndpoint(5);
|
|
274
|
+
const waterEndpoint = device.getEndpoint(6);
|
|
275
|
+
const binds = [
|
|
276
|
+
'genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat',
|
|
277
|
+
];
|
|
278
|
+
await reporting.bind(heatEndpoint, coordinatorEndpoint, binds);
|
|
279
|
+
await reporting.thermostatTemperature(heatEndpoint);
|
|
280
|
+
await reporting.thermostatRunningState(heatEndpoint);
|
|
281
|
+
await reporting.thermostatSystemMode(heatEndpoint);
|
|
282
|
+
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint);
|
|
283
|
+
await reporting.thermostatTemperatureSetpointHold(heatEndpoint);
|
|
284
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint);
|
|
285
|
+
await reporting.bind(waterEndpoint, coordinatorEndpoint, binds);
|
|
286
|
+
await reporting.thermostatTemperature(waterEndpoint);
|
|
287
|
+
await reporting.thermostatRunningState(waterEndpoint);
|
|
288
|
+
await reporting.thermostatSystemMode(waterEndpoint);
|
|
289
|
+
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint);
|
|
290
|
+
await reporting.thermostatTemperatureSetpointHold(waterEndpoint);
|
|
291
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint);
|
|
292
|
+
},
|
|
293
|
+
exposes: [
|
|
294
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
295
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('heat'),
|
|
296
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
297
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
298
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('heat'),
|
|
299
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
300
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
301
|
+
' used. 0 to 360 to match the remote display').withEndpoint('heat'),
|
|
302
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
|
|
303
|
+
.withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
|
|
304
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
305
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
306
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
|
|
307
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
308
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
309
|
+
' used. 0 to 360 to match the remote display').withEndpoint('water')],
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
zigbeeModel: ['SLR2b'],
|
|
313
|
+
model: 'SLR2b',
|
|
314
|
+
vendor: 'Hive',
|
|
315
|
+
description: 'Dual channel heating and hot water thermostat',
|
|
316
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
317
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
318
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
319
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
320
|
+
endpoint: (device) => {
|
|
321
|
+
return {'heat': 5, 'water': 6};
|
|
322
|
+
},
|
|
323
|
+
meta: {disableDefaultResponse: true, multiEndpoint: true},
|
|
324
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
325
|
+
const heatEndpoint = device.getEndpoint(5);
|
|
326
|
+
const waterEndpoint = device.getEndpoint(6);
|
|
327
|
+
const binds = [
|
|
328
|
+
'genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat',
|
|
329
|
+
];
|
|
330
|
+
await reporting.bind(heatEndpoint, coordinatorEndpoint, binds);
|
|
331
|
+
await reporting.thermostatTemperature(heatEndpoint);
|
|
332
|
+
await reporting.thermostatRunningState(heatEndpoint);
|
|
333
|
+
await reporting.thermostatSystemMode(heatEndpoint);
|
|
334
|
+
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint);
|
|
335
|
+
await reporting.thermostatTemperatureSetpointHold(heatEndpoint);
|
|
336
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint);
|
|
337
|
+
await reporting.bind(waterEndpoint, coordinatorEndpoint, binds);
|
|
338
|
+
await reporting.thermostatTemperature(waterEndpoint);
|
|
339
|
+
await reporting.thermostatRunningState(waterEndpoint);
|
|
340
|
+
await reporting.thermostatSystemMode(waterEndpoint);
|
|
341
|
+
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint);
|
|
342
|
+
await reporting.thermostatTemperatureSetpointHold(waterEndpoint);
|
|
343
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint);
|
|
344
|
+
},
|
|
345
|
+
exposes: [
|
|
346
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
347
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('heat'),
|
|
348
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
349
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
350
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('heat'),
|
|
351
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
352
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
353
|
+
' used. 0 to 360 to match the remote display').withEndpoint('heat'),
|
|
354
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
|
|
355
|
+
.withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
|
|
356
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
357
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
358
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
|
|
359
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
360
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
361
|
+
' used. 0 to 360 to match the remote display').withEndpoint('water')],
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
zigbeeModel: ['SLR2c'],
|
|
365
|
+
model: 'SLR2c',
|
|
366
|
+
vendor: 'Hive',
|
|
367
|
+
description: 'Dual channel heating and hot water thermostat',
|
|
368
|
+
fromZigbee: [fz.thermostat, fz.thermostat_weekly_schedule],
|
|
369
|
+
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
370
|
+
tz.thermostat_occupied_heating_setpoint, tz.thermostat_control_sequence_of_operation, tz.thermostat_weekly_schedule,
|
|
371
|
+
tz.thermostat_clear_weekly_schedule, tz.thermostat_temperature_setpoint_hold, tz.thermostat_temperature_setpoint_hold_duration],
|
|
372
|
+
endpoint: (device) => {
|
|
373
|
+
return {'heat': 5, 'water': 6};
|
|
374
|
+
},
|
|
375
|
+
meta: {disableDefaultResponse: true, multiEndpoint: true},
|
|
376
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
377
|
+
const heatEndpoint = device.getEndpoint(5);
|
|
378
|
+
const waterEndpoint = device.getEndpoint(6);
|
|
379
|
+
const binds = [
|
|
380
|
+
'genBasic', 'genIdentify', 'genAlarms', 'genTime', 'hvacThermostat',
|
|
381
|
+
];
|
|
382
|
+
await reporting.bind(heatEndpoint, coordinatorEndpoint, binds);
|
|
383
|
+
await reporting.thermostatTemperature(heatEndpoint);
|
|
384
|
+
await reporting.thermostatRunningState(heatEndpoint);
|
|
385
|
+
await reporting.thermostatSystemMode(heatEndpoint);
|
|
386
|
+
await reporting.thermostatOccupiedHeatingSetpoint(heatEndpoint);
|
|
387
|
+
await reporting.thermostatTemperatureSetpointHold(heatEndpoint);
|
|
388
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(heatEndpoint);
|
|
389
|
+
await reporting.bind(waterEndpoint, coordinatorEndpoint, binds);
|
|
390
|
+
await reporting.thermostatTemperature(waterEndpoint);
|
|
391
|
+
await reporting.thermostatRunningState(waterEndpoint);
|
|
392
|
+
await reporting.thermostatSystemMode(waterEndpoint);
|
|
393
|
+
await reporting.thermostatOccupiedHeatingSetpoint(waterEndpoint);
|
|
394
|
+
await reporting.thermostatTemperatureSetpointHold(waterEndpoint);
|
|
395
|
+
await reporting.thermostatTemperatureSetpointHoldDuration(waterEndpoint);
|
|
396
|
+
},
|
|
397
|
+
exposes: [
|
|
398
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature()
|
|
399
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withEndpoint('heat'),
|
|
400
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
401
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
402
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('heat'),
|
|
403
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
404
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
405
|
+
' used. 0 to 360 to match the remote display').withEndpoint('heat'),
|
|
406
|
+
exposes.climate().withSetpoint('occupied_heating_setpoint', 22, 22, 1).withLocalTemperature()
|
|
407
|
+
.withSystemMode(['off', 'auto', 'heat', 'emergency_heating']).withRunningState(['idle', 'heat']).withEndpoint('water'),
|
|
408
|
+
exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
|
|
409
|
+
.withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.' +
|
|
410
|
+
' Must be set to `false` when system_mode = off or `true` for heat').withEndpoint('water'),
|
|
411
|
+
exposes.numeric('temperature_setpoint_hold_duration', ea.ALL).withValueMin(0).withValueMax(65535)
|
|
412
|
+
.withDescription('Period in minutes for which the setpoint hold will be active. 65535 = attribute not' +
|
|
413
|
+
' used. 0 to 360 to match the remote display').withEndpoint('water')],
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
zigbeeModel: ['WPT1'],
|
|
417
|
+
model: 'WPT1',
|
|
418
|
+
vendor: 'Hive',
|
|
419
|
+
description: 'Heating thermostat remote control',
|
|
420
|
+
fromZigbee: [fz.battery],
|
|
421
|
+
toZigbee: [],
|
|
422
|
+
exposes: [e.battery()],
|
|
423
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
424
|
+
const endpoint = device.getEndpoint(9);
|
|
425
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
426
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
zigbeeModel: ['SLT2'],
|
|
431
|
+
model: 'SLT2',
|
|
432
|
+
vendor: 'Hive',
|
|
433
|
+
description: 'Heating thermostat remote control',
|
|
434
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
435
|
+
fromZigbee: [fz.battery],
|
|
436
|
+
toZigbee: [],
|
|
437
|
+
exposes: [e.battery()],
|
|
438
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
439
|
+
const endpoint = device.getEndpoint(9);
|
|
440
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
441
|
+
await reporting.batteryVoltage(endpoint);
|
|
442
|
+
},
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
zigbeeModel: ['SLT3'],
|
|
446
|
+
model: 'SLT3',
|
|
447
|
+
vendor: 'Hive',
|
|
448
|
+
description: 'Heating thermostat remote control',
|
|
449
|
+
fromZigbee: [fz.battery],
|
|
450
|
+
toZigbee: [],
|
|
451
|
+
exposes: [e.battery()],
|
|
452
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
453
|
+
const endpoint = device.getEndpoint(9);
|
|
454
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
455
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
zigbeeModel: ['SLT3B'],
|
|
460
|
+
model: 'SLT3B',
|
|
461
|
+
vendor: 'Hive',
|
|
462
|
+
description: 'Heating thermostat remote control',
|
|
463
|
+
fromZigbee: [fz.battery],
|
|
464
|
+
toZigbee: [],
|
|
465
|
+
exposes: [e.battery()],
|
|
466
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
467
|
+
const endpoint = device.getEndpoint(9);
|
|
468
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
469
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
470
|
+
},
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
zigbeeModel: ['SLT3C'],
|
|
474
|
+
model: 'SLT3C',
|
|
475
|
+
vendor: 'Hive',
|
|
476
|
+
description: 'Heating thermostat remote control',
|
|
477
|
+
fromZigbee: [fz.battery],
|
|
478
|
+
toZigbee: [],
|
|
479
|
+
exposes: [e.battery()],
|
|
480
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
481
|
+
const endpoint = device.getEndpoint(9);
|
|
482
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
483
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
484
|
+
},
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
zigbeeModel: ['SLB2'],
|
|
488
|
+
model: 'SLB2',
|
|
489
|
+
vendor: 'Hive',
|
|
490
|
+
description: 'Signal booster',
|
|
491
|
+
toZigbee: [],
|
|
492
|
+
fromZigbee: [fz.linkquality_from_basic],
|
|
493
|
+
onEvent: async (type, data, device) => {
|
|
494
|
+
if (type === 'stop') {
|
|
495
|
+
clearInterval(globalStore.getValue(device, 'interval'));
|
|
496
|
+
globalStore.clearValue(device, 'interval');
|
|
497
|
+
} else if (!globalStore.hasValue(device, 'interval')) {
|
|
498
|
+
const interval = setInterval(async () => {
|
|
499
|
+
try {
|
|
500
|
+
await device.endpoints[0].read('genBasic', ['zclVersion']);
|
|
501
|
+
} catch (error) {
|
|
502
|
+
// Do nothing
|
|
503
|
+
}
|
|
504
|
+
}, 1000 * 60 * 30); // Every 30 minutes
|
|
505
|
+
globalStore.putValue(device, 'interval', interval);
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
exposes: [],
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
zigbeeModel: ['SLT6'],
|
|
512
|
+
model: 'SLT6',
|
|
513
|
+
vendor: 'Hive',
|
|
514
|
+
description: 'Heating thermostat remote control',
|
|
515
|
+
fromZigbee: [fz.battery],
|
|
516
|
+
toZigbee: [],
|
|
517
|
+
exposes: [e.battery()],
|
|
518
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
519
|
+
const endpoint = device.getEndpoint(9);
|
|
520
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
521
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
522
|
+
},
|
|
523
|
+
},
|
|
524
|
+
];
|
|
@@ -0,0 +1,27 @@
|
|
|
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 e = exposes.presets;
|
|
6
|
+
const ota = require('../lib/ota');
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['HC-SLM-1'],
|
|
11
|
+
model: 'HC-SLM-1',
|
|
12
|
+
vendor: 'Home Control AS',
|
|
13
|
+
description: 'Heimgard (Wattle) door lock pro',
|
|
14
|
+
fromZigbee: [fz.lock, fz.battery],
|
|
15
|
+
toZigbee: [tz.lock, tz.lock_auto_relock_time, tz.lock_sound_volume],
|
|
16
|
+
ota: ota.zigbeeOTA,
|
|
17
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
+
const endpoint = device.getEndpoint(1);
|
|
19
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
20
|
+
await reporting.lockState(endpoint);
|
|
21
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
22
|
+
await endpoint.read('closuresDoorLock', ['lockState', 'soundVolume']);
|
|
23
|
+
},
|
|
24
|
+
exposes: [
|
|
25
|
+
e.lock(), e.battery(), e.auto_relock_time().withValueMin(0).withValueMax(3600), e.sound_volume()],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
|
+
const e = exposes.presets;
|
|
4
|
+
|
|
5
|
+
module.exports = [
|
|
6
|
+
{
|
|
7
|
+
zigbeeModel: ['5e56b9c85b6e4fcaaaad3c1319e16c57'],
|
|
8
|
+
model: 'MS-20-Z',
|
|
9
|
+
vendor: 'Hommyn',
|
|
10
|
+
description: 'Occupancy sensor',
|
|
11
|
+
fromZigbee: [fz.battery, fz.ias_occupancy_alarm_1_with_timeout],
|
|
12
|
+
toZigbee: [],
|
|
13
|
+
exposes: [e.battery(), e.occupancy(), e.battery_low(), e.tamper()],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
zigbeeModel: ['2f077707a13f4120846e0775df7e2efe'],
|
|
17
|
+
model: 'WS-20-Z',
|
|
18
|
+
vendor: 'Hommyn',
|
|
19
|
+
description: 'Water leakage sensor',
|
|
20
|
+
fromZigbee: [fz.ias_water_leak_alarm_1],
|
|
21
|
+
toZigbee: [],
|
|
22
|
+
exposes: [e.water_leak(), e.battery_low(), e.tamper()],
|
|
23
|
+
},
|
|
24
|
+
];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const reporting = require('../lib/reporting');
|
|
3
|
+
const extend = require('../lib/extend');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
module.exports = [
|
|
7
|
+
{
|
|
8
|
+
zigbeeModel: ['00500c35'],
|
|
9
|
+
model: 'U86K31ND6',
|
|
10
|
+
vendor: 'Honyar',
|
|
11
|
+
description: '3 gang switch ',
|
|
12
|
+
extend: extend.switch(),
|
|
13
|
+
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.switch().withEndpoint('center')],
|
|
14
|
+
endpoint: (device) => {
|
|
15
|
+
return {'left': 1, 'center': 2, 'right': 3};
|
|
16
|
+
},
|
|
17
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
+
const endpoint1 = device.getEndpoint(1);
|
|
19
|
+
const endpoint2 = device.getEndpoint(2);
|
|
20
|
+
const endpoint3 = device.getEndpoint(3);
|
|
21
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff']);
|
|
22
|
+
await reporting.onOff(endpoint1);
|
|
23
|
+
await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
|
|
24
|
+
await reporting.onOff(endpoint2);
|
|
25
|
+
await reporting.bind(endpoint3, coordinatorEndpoint, ['genOnOff']);
|
|
26
|
+
await reporting.onOff(endpoint3);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['VIYU-A60-806-RGBW-10011725'],
|
|
6
|
+
model: '10011725',
|
|
7
|
+
vendor: 'HORNBACH',
|
|
8
|
+
description: 'FLAIR Viyu Smart LED bulb RGB E27',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
zigbeeModel: ['VIYU_C35_470_RGBW_10297667'],
|
|
13
|
+
model: '10297667',
|
|
14
|
+
vendor: 'HORNBACH',
|
|
15
|
+
description: 'FLAIR Viyu Smart LED bulb RGB E14',
|
|
16
|
+
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
zigbeeModel: ['VIYU-A60-806-CCT-10011723'],
|
|
20
|
+
model: '10011723',
|
|
21
|
+
vendor: 'HORNBACH',
|
|
22
|
+
description: 'FLAIR Viyu Smart LED bulb CCT E27',
|
|
23
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
zigbeeModel: ['VIYU-C35-470-CCT-10011722'],
|
|
27
|
+
model: '10011722',
|
|
28
|
+
vendor: 'HORNBACH',
|
|
29
|
+
description: 'FLAIR Viyu Smart LED candle CCT E14',
|
|
30
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
zigbeeModel: ['VIYU_GU10_350_RGBW_10297666'],
|
|
34
|
+
model: '10297666',
|
|
35
|
+
vendor: 'HORNBACH',
|
|
36
|
+
description: 'FLAIR Viyu Smart GU10 RGBW lamp',
|
|
37
|
+
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
zigbeeModel: ['VIYU-GU10-350-CCT-10011724'],
|
|
41
|
+
model: '10011724',
|
|
42
|
+
vendor: 'HORNBACH',
|
|
43
|
+
description: 'FLAIR Viyu Smart GU10 CCT lamp',
|
|
44
|
+
extend: extend.light_onoff_brightness_colortemp(),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
zigbeeModel: ['VIYU_A60_470_FI_D_CCT_10297665'],
|
|
48
|
+
model: '10297665',
|
|
49
|
+
vendor: 'HORNBACH',
|
|
50
|
+
description: 'FLAIR Viyu Smart LED bulb CCT E27 filament',
|
|
51
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [250, 454]}),
|
|
52
|
+
},
|
|
53
|
+
];
|