@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/insta.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
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 ota = require('../lib/ota');
|
|
5
|
+
const reporting = require('../lib/reporting');
|
|
6
|
+
const utils = require('../lib/utils');
|
|
7
|
+
const e = exposes.presets;
|
|
8
|
+
|
|
9
|
+
module.exports = [
|
|
10
|
+
{
|
|
11
|
+
zigbeeModel: [' Remote'],
|
|
12
|
+
model: 'InstaRemote',
|
|
13
|
+
vendor: 'Insta',
|
|
14
|
+
description: 'ZigBee Light Link wall/handheld transmitter',
|
|
15
|
+
whiteLabel: [{vendor: 'Gira', model: '2430-100'}, {vendor: 'Gira', model: '2435-10'}, {vendor: 'Jung', model: 'ZLLCD5004M'},
|
|
16
|
+
{vendor: 'Jung', model: 'ZLLLS5004M'}, {vendor: 'Jung', model: 'ZLLA5004M'}, {vendor: 'Jung', model: 'ZLLHS4'}],
|
|
17
|
+
fromZigbee: [fz.legacy.insta_scene_click, fz.command_on, fz.command_off_with_effect, fz.legacy.insta_down_hold,
|
|
18
|
+
fz.legacy.insta_up_hold, fz.legacy.insta_stop],
|
|
19
|
+
exposes: [e.action(['select_0', 'select_1', 'select_2', 'select_3', 'select_4', 'select_5', 'on', 'off', 'down', 'up', 'stop'])],
|
|
20
|
+
toZigbee: [],
|
|
21
|
+
ota: ota.zigbeeOTA,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
zigbeeModel: ['NEXENTRO Blinds Actuator', 'Generic UP Device'],
|
|
25
|
+
model: '57008000',
|
|
26
|
+
vendor: 'Insta',
|
|
27
|
+
description: 'Blinds actor with lift/tilt calibration & with with inputs for wall switches',
|
|
28
|
+
fromZigbee: [fz.cover_position_tilt, fz.command_cover_open, fz.command_cover_close, fz.command_cover_stop],
|
|
29
|
+
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
30
|
+
exposes: [e.cover_position_tilt()],
|
|
31
|
+
endpoint: (device) => {
|
|
32
|
+
return {'default': 6};
|
|
33
|
+
},
|
|
34
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
35
|
+
await utils.sleep(10000); // https://github.com/Koenkk/zigbee-herdsman-converters/issues/2493
|
|
36
|
+
await reporting.bind(device.getEndpoint(6), coordinatorEndpoint, ['closuresWindowCovering']);
|
|
37
|
+
await reporting.bind(device.getEndpoint(7), coordinatorEndpoint, ['closuresWindowCovering']);
|
|
38
|
+
await reporting.currentPositionLiftPercentage(device.getEndpoint(6));
|
|
39
|
+
await reporting.currentPositionTiltPercentage(device.getEndpoint(6));
|
|
40
|
+
|
|
41
|
+
// Has Unknown power source, force it here.
|
|
42
|
+
device.powerSource = 'Mains (single phase)';
|
|
43
|
+
device.save();
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
fingerprint: [
|
|
48
|
+
// It seems several Insta devices use the same ModelID with a different endpoint configuration
|
|
49
|
+
// This is the single "Switching Actuator Mini"
|
|
50
|
+
{manufacturerName: 'Insta GmbH', modelID: 'Generic UP Device', endpoints: [
|
|
51
|
+
{ID: 1, profileID: 260, deviceID: 256, inputClusters: [0, 3, 4, 5, 6, 4096], outputClusters: [25]},
|
|
52
|
+
{ID: 4, profileID: 260, deviceID: 261, inputClusters: [0, 3], outputClusters: [3, 4, 5, 6, 8, 25, 768]},
|
|
53
|
+
{ID: 242, profileID: 41440, deviceID: 97},
|
|
54
|
+
]},
|
|
55
|
+
],
|
|
56
|
+
zigbeeModel: ['NEXENTRO Switching Actuator', '57005000'],
|
|
57
|
+
model: '57005000',
|
|
58
|
+
vendor: 'Insta',
|
|
59
|
+
description: 'Switching Actuator Mini with input for wall switch',
|
|
60
|
+
fromZigbee: [fz.on_off, fz.command_on, fz.command_off],
|
|
61
|
+
toZigbee: [tz.on_off],
|
|
62
|
+
exposes: [e.switch()],
|
|
63
|
+
// The configure method below is needed to make the device reports on/off state changes
|
|
64
|
+
// when the device is controlled manually through the button on it.
|
|
65
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
66
|
+
const endpoint = device.getEndpoint(1);
|
|
67
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
68
|
+
await reporting.onOff(endpoint);
|
|
69
|
+
|
|
70
|
+
// Has Unknown power source, force it here.
|
|
71
|
+
device.powerSource = 'Mains (single phase)';
|
|
72
|
+
device.save();
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
fingerprint: [
|
|
77
|
+
// It seems several Insta devices use the same ModelID with a different endpoint configuration
|
|
78
|
+
// This is the "Pushbutton Interface 2-gang"
|
|
79
|
+
{manufacturerName: 'Insta GmbH', modelID: 'Generic UP Device', endpoints: [
|
|
80
|
+
{ID: 4, profileID: 260, deviceID: 261, inputClusters: [0, 3], outputClusters: [3, 4, 5, 6, 8, 25, 768]},
|
|
81
|
+
{ID: 5, profileID: 260, deviceID: 261, inputClusters: [0, 3], outputClusters: [3, 4, 5, 6, 8, 25, 768]},
|
|
82
|
+
{ID: 7, profileID: 260, deviceID: 515, inputClusters: [0, 3], outputClusters: [3, 4, 25, 258]},
|
|
83
|
+
{ID: 242, profileID: 41440, deviceID: 97},
|
|
84
|
+
]},
|
|
85
|
+
],
|
|
86
|
+
zigbeeModel: ['NEXENTRO Pushbutton Interface', '57004000'],
|
|
87
|
+
model: '57004000',
|
|
88
|
+
vendor: 'Insta',
|
|
89
|
+
description: 'Pushbutton Interface 2-gang 230V',
|
|
90
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.command_recall, fz.command_move, fz.command_stop,
|
|
91
|
+
fz.command_cover_open, fz.command_cover_close, fz.command_cover_stop],
|
|
92
|
+
toZigbee: [],
|
|
93
|
+
exposes: [e.action([
|
|
94
|
+
'on_e1', 'off_e1', 'toggle_e1', 'recall_*_e1', 'brightness_stop_e1', 'brightness_move_*_e1',
|
|
95
|
+
'on_e2', 'off_e2', 'toggle_e2', 'recall_*_e2', 'brightness_stop_e2', 'brightness_move_*_e2',
|
|
96
|
+
'close_cover', 'open_cover', 'stop_cover',
|
|
97
|
+
])],
|
|
98
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
99
|
+
// Has Unknown power source, force it here.
|
|
100
|
+
device.powerSource = 'Mains (single phase)';
|
|
101
|
+
device.save();
|
|
102
|
+
},
|
|
103
|
+
meta: {multiEndpoint: true},
|
|
104
|
+
endpoint: (device) => {
|
|
105
|
+
return {
|
|
106
|
+
'e1': 4, 'e2': 5, 'cover': 7,
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const reporting = require('../lib/reporting');
|
|
2
|
+
const extend = require('../lib/extend');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
fingerprint: [{modelID: 'Dimmer-Switch-ZB3.0', manufacturerName: 'HZC'}],
|
|
7
|
+
model: 'ID-UK21FW09',
|
|
8
|
+
vendor: 'Iolloi',
|
|
9
|
+
description: 'Zigbee LED smart dimmer switch',
|
|
10
|
+
extend: extend.light_onoff_brightness({noConfigure: true, disableEffect: true}),
|
|
11
|
+
whiteLabel: [{vendor: 'Iolloi', model: 'ID-EU20FW09'}],
|
|
12
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
13
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
14
|
+
const endpoint = device.getEndpoint(1);
|
|
15
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
16
|
+
await reporting.onOff(endpoint);
|
|
17
|
+
await reporting.brightness(endpoint);
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
];
|
|
@@ -0,0 +1,20 @@
|
|
|
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 extend = require('../lib/extend');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
const ea = exposes.access;
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_vrjkcam9'},
|
|
11
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_d0ypnbvn'}],
|
|
12
|
+
model: 'PF-PM02D-TYZ',
|
|
13
|
+
vendor: 'IOTPerfect',
|
|
14
|
+
description: 'Smart water/gas valve',
|
|
15
|
+
extend: extend.switch(),
|
|
16
|
+
exposes: [e.switch().setAccess('state', ea.STATE_SET)],
|
|
17
|
+
fromZigbee: [fz.tuya_switch, fz.ignore_time_read, fz.ignore_basic_report],
|
|
18
|
+
toZigbee: [tz.tuya_switch_state],
|
|
19
|
+
},
|
|
20
|
+
];
|
package/devices/iris.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
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 e = exposes.presets;
|
|
6
|
+
const extend = require('../lib/extend');
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['1116-S'],
|
|
11
|
+
model: 'IL06_1',
|
|
12
|
+
vendor: 'Iris',
|
|
13
|
+
description: 'Contact and temperature sensor',
|
|
14
|
+
fromZigbee: [fz.ias_contact_alarm_1, fz.temperature, fz.battery],
|
|
15
|
+
toZigbee: [],
|
|
16
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
17
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
+
const endpoint = device.getEndpoint(1);
|
|
19
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
20
|
+
await reporting.temperature(endpoint);
|
|
21
|
+
await reporting.batteryVoltage(endpoint);
|
|
22
|
+
device.powerSource = 'Battery';
|
|
23
|
+
device.save();
|
|
24
|
+
},
|
|
25
|
+
exposes: [e.contact(), e.battery_low(), e.tamper(), e.temperature(), e.battery()],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
zigbeeModel: ['3210-L'],
|
|
29
|
+
model: '3210-L',
|
|
30
|
+
vendor: 'Iris',
|
|
31
|
+
description: 'Smart plug',
|
|
32
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement],
|
|
33
|
+
toZigbee: [tz.on_off],
|
|
34
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
35
|
+
const endpoint = device.getEndpoint(1);
|
|
36
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
|
|
37
|
+
// 3210-L doesn't support reading 'acVoltageMultiplier' or 'acVoltageDivisor'
|
|
38
|
+
await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
|
|
39
|
+
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
40
|
+
await reporting.onOff(endpoint);
|
|
41
|
+
await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
|
|
42
|
+
await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
|
|
43
|
+
await reporting.activePower(endpoint); // Power reports in 0.1W
|
|
44
|
+
},
|
|
45
|
+
exposes: [e.switch(), e.power(), e.current(), e.voltage()],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
zigbeeModel: ['3326-L'],
|
|
49
|
+
model: '3326-L',
|
|
50
|
+
vendor: 'Iris',
|
|
51
|
+
description: 'Motion and temperature sensor',
|
|
52
|
+
fromZigbee: [fz.ias_occupancy_alarm_2, fz.temperature, fz.battery],
|
|
53
|
+
toZigbee: [],
|
|
54
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
55
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
56
|
+
const endpoint = device.getEndpoint(1);
|
|
57
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
58
|
+
await reporting.temperature(endpoint);
|
|
59
|
+
await reporting.batteryVoltage(endpoint);
|
|
60
|
+
},
|
|
61
|
+
exposes: [e.occupancy(), e.battery_low(), e.temperature(), e.battery()],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
zigbeeModel: ['3320-L'],
|
|
65
|
+
model: '3320-L',
|
|
66
|
+
vendor: 'Iris',
|
|
67
|
+
description: 'Contact and temperature sensor',
|
|
68
|
+
fromZigbee: [fz.ias_contact_alarm_1, fz.temperature, fz.battery],
|
|
69
|
+
toZigbee: [],
|
|
70
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
71
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
72
|
+
const endpoint = device.getEndpoint(1);
|
|
73
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
74
|
+
await reporting.temperature(endpoint);
|
|
75
|
+
await reporting.batteryVoltage(endpoint);
|
|
76
|
+
},
|
|
77
|
+
exposes: [e.contact(), e.battery_low(), e.temperature(), e.battery()],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
zigbeeModel: ['3450-L', '3450-L2'],
|
|
81
|
+
model: '3450-L',
|
|
82
|
+
vendor: 'Iris',
|
|
83
|
+
description: 'Smart fob',
|
|
84
|
+
fromZigbee: [fz.command_on_presence, fz.command_off, fz.battery, fz.checkin_presence],
|
|
85
|
+
toZigbee: [],
|
|
86
|
+
exposes: [e.action(['on_1', 'off_1', 'on_2', 'off_2', 'on_3', 'off_3', 'on_4', 'off_4']),
|
|
87
|
+
e.battery(), e.presence()],
|
|
88
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}, multiEndpoint: true},
|
|
89
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
90
|
+
const endpoint1 = device.getEndpoint(1);
|
|
91
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'genPowerCfg', 'genPollCtrl']);
|
|
92
|
+
await reporting.batteryVoltage(endpoint1);
|
|
93
|
+
const interval = 100 - 10; // 100 seconds is default timeout so set inverval to 10 seconds before
|
|
94
|
+
await endpoint1.write('genPollCtrl', {'checkinInterval': (interval * 4)});
|
|
95
|
+
const endpoint2 = device.getEndpoint(2);
|
|
96
|
+
await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
|
|
97
|
+
const endpoint3 = device.getEndpoint(3);
|
|
98
|
+
await reporting.bind(endpoint3, coordinatorEndpoint, ['genOnOff']);
|
|
99
|
+
const endpoint4 = device.getEndpoint(4);
|
|
100
|
+
await reporting.bind(endpoint4, coordinatorEndpoint, ['genOnOff']);
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
zigbeeModel: ['3460-L'],
|
|
105
|
+
model: '3460-L',
|
|
106
|
+
vendor: 'Iris',
|
|
107
|
+
description: 'Smart button',
|
|
108
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.battery, fz.temperature],
|
|
109
|
+
toZigbee: [],
|
|
110
|
+
exposes: [e.battery(), e.temperature(), e.action(['on', 'off'])],
|
|
111
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
112
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
113
|
+
const endpoint = device.getEndpoint(1);
|
|
114
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'msTemperatureMeasurement']);
|
|
115
|
+
await reporting.onOff(endpoint);
|
|
116
|
+
await reporting.batteryVoltage(endpoint);
|
|
117
|
+
await reporting.temperature(endpoint);
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
zigbeeModel: ['1117-S'],
|
|
122
|
+
model: 'iL07_1',
|
|
123
|
+
vendor: 'Iris',
|
|
124
|
+
description: 'Motion Sensor',
|
|
125
|
+
fromZigbee: [fz.ias_occupancy_alarm_2, fz.temperature, fz.humidity],
|
|
126
|
+
toZigbee: [],
|
|
127
|
+
exposes: [e.occupancy(), e.battery_low(), e.temperature(), e.humidity()],
|
|
128
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
129
|
+
const endpoint = device.getEndpoint(1);
|
|
130
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity']);
|
|
131
|
+
await reporting.temperature(endpoint);
|
|
132
|
+
await reporting.humidity(endpoint);
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
zigbeeModel: ['HT8-ZB'],
|
|
137
|
+
model: '27087-03',
|
|
138
|
+
vendor: 'Iris',
|
|
139
|
+
description: 'Hose faucet water timer',
|
|
140
|
+
fromZigbee: [fz.on_off, fz.battery, fz.ignore_time_read],
|
|
141
|
+
toZigbee: [tz.on_off],
|
|
142
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
143
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
144
|
+
const endpoint = device.getEndpoint(1);
|
|
145
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genPowerCfg']);
|
|
146
|
+
await reporting.batteryVoltage(endpoint);
|
|
147
|
+
},
|
|
148
|
+
exposes: [e.switch(), e.battery()],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
zigbeeModel: ['1113-S'],
|
|
152
|
+
model: 'iL03_1',
|
|
153
|
+
vendor: 'Iris',
|
|
154
|
+
description: 'Smart plug',
|
|
155
|
+
extend: extend.switch(),
|
|
156
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
157
|
+
const endpoint = device.getEndpoint(1);
|
|
158
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
159
|
+
await reporting.onOff(endpoint);
|
|
160
|
+
device.powerSource = 'Mains (single phase)';
|
|
161
|
+
device.save();
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
zigbeeModel: ['3315-L'],
|
|
166
|
+
model: '3315-L',
|
|
167
|
+
vendor: 'Iris',
|
|
168
|
+
description: 'Water sensor',
|
|
169
|
+
fromZigbee: [fz.temperature, fz.ias_water_leak_alarm_1, fz.battery],
|
|
170
|
+
exposes: [e.temperature(), e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
|
|
171
|
+
toZigbee: [],
|
|
172
|
+
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
173
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
174
|
+
const endpoint = device.getEndpoint(1);
|
|
175
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
|
|
176
|
+
await reporting.temperature(endpoint);
|
|
177
|
+
await reporting.batteryVoltage(endpoint);
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
];
|
package/devices/istar.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['iStar DIM Light'],
|
|
6
|
+
model: 'SCCV2401-1',
|
|
7
|
+
vendor: 'iStar',
|
|
8
|
+
description: 'Zigbee 3.0 LED controller, dimmable white 12-36V DC max. 5A',
|
|
9
|
+
extend: extend.light_onoff_brightness(),
|
|
10
|
+
meta: {turnsOffAtBrightness1: true},
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
zigbeeModel: ['iStar CCT Light'],
|
|
14
|
+
model: 'SCCV2403-2',
|
|
15
|
+
vendor: 'iStar',
|
|
16
|
+
description: 'Zigbee 3.0 LED controller, dimmable white spectrum',
|
|
17
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
18
|
+
meta: {turnsOffAtBrightness1: true},
|
|
19
|
+
},
|
|
20
|
+
];
|
package/devices/jasco.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const fz = require('../converters/fromZigbee');
|
|
2
|
+
const reporting = require('../lib/reporting');
|
|
3
|
+
const extend = require('../lib/extend');
|
|
4
|
+
const exposes = require('../lib/exposes');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['35938'],
|
|
11
|
+
model: 'ZB3102',
|
|
12
|
+
vendor: 'Jasco Products',
|
|
13
|
+
description: 'Zigbee plug-in smart dimmer',
|
|
14
|
+
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
15
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
16
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
17
|
+
const endpoint = device.getEndpoint(1);
|
|
18
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
19
|
+
await reporting.onOff(endpoint);
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
zigbeeModel: ['43132'],
|
|
24
|
+
model: '43132',
|
|
25
|
+
vendor: 'Jasco',
|
|
26
|
+
description: 'Zigbee smart outlet',
|
|
27
|
+
extend: extend.switch(),
|
|
28
|
+
fromZigbee: [...extend.switch().fromZigbee, fz.metering],
|
|
29
|
+
exposes: [e.switch(), e.power(), e.energy()],
|
|
30
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
31
|
+
const endpoint = device.getEndpoint(1);
|
|
32
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
33
|
+
await reporting.onOff(endpoint);
|
|
34
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
35
|
+
await reporting.instantaneousDemand(endpoint);
|
|
36
|
+
await reporting.currentSummDelivered(endpoint);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
zigbeeModel: ['43095'],
|
|
41
|
+
model: '43095',
|
|
42
|
+
vendor: 'Jasco Products',
|
|
43
|
+
description: 'Zigbee smart plug-in switch with energy metering',
|
|
44
|
+
fromZigbee: [fz.command_on_state, fz.command_off_state, fz.metering],
|
|
45
|
+
extend: extend.switch(),
|
|
46
|
+
exposes: [e.switch(), e.power(), e.energy()],
|
|
47
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
48
|
+
const endpoint1 = device.getEndpoint(1);
|
|
49
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
50
|
+
await reporting.onOff(endpoint1);
|
|
51
|
+
await reporting.instantaneousDemand(endpoint1);
|
|
52
|
+
await reporting.readMeteringMultiplierDivisor(endpoint1);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
];
|
package/devices/javis.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
|
|
7
|
+
module.exports = [
|
|
8
|
+
{
|
|
9
|
+
zigbeeModel: ['JAVISLOCK'],
|
|
10
|
+
fingerprint: [{modelID: 'doorlock_5001', manufacturerName: 'Lmiot'},
|
|
11
|
+
{modelID: 'E321V000A03', manufacturerName: 'Vensi'}],
|
|
12
|
+
model: 'JS-SLK2-ZB',
|
|
13
|
+
vendor: 'JAVIS',
|
|
14
|
+
description: 'Intelligent biometric digital lock',
|
|
15
|
+
fromZigbee: [fz.javis_lock_report, fz.battery],
|
|
16
|
+
toZigbee: [],
|
|
17
|
+
exposes: [e.battery(), e.action(['unlock'])],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
zigbeeModel: ['JAVISSENSOR'],
|
|
21
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lgstepha'},
|
|
22
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_kagkgk0i'},
|
|
23
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_i0b1dbqu'}],
|
|
24
|
+
model: 'JS-MC-SENSOR-ZB',
|
|
25
|
+
vendor: 'JAVIS',
|
|
26
|
+
description: 'Microwave sensor',
|
|
27
|
+
fromZigbee: [fz.javis_microwave_sensor, fz.ignore_basic_report],
|
|
28
|
+
toZigbee: [tz.javis_microwave_sensor],
|
|
29
|
+
exposes: [e.occupancy(), e.illuminance_lux(),
|
|
30
|
+
exposes.binary('led_enable', ea.STATE_SET, true, false).withDescription('Enabled LED'),
|
|
31
|
+
exposes.enum('keep_time', ea.STATE_SET, ['0', '1', '2', '3', '4', '5', '6', '7'])
|
|
32
|
+
.withDescription('PIR keep time 0:5s|1:30s|2:60s|3:180s|4:300s|5:600s|6:1200s|7:1800s'),
|
|
33
|
+
exposes.enum('sensitivity', ea.STATE_SET, ['25', '50', '75', '100']),
|
|
34
|
+
exposes.numeric('illuminance_calibration', ea.STATE_SET).withDescription('Illuminance calibration')
|
|
35
|
+
.withValueMin(-10000).withValueMax(10000)],
|
|
36
|
+
},
|
|
37
|
+
];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const reporting = require('../lib/reporting');
|
|
4
|
+
const utils = require('../lib/utils');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
|
|
7
|
+
const jetHome = {
|
|
8
|
+
fz: {
|
|
9
|
+
multiStateAction: {
|
|
10
|
+
cluster: 'genMultistateInput',
|
|
11
|
+
type: ['attributeReport', 'readResponse'],
|
|
12
|
+
convert: (model, msg, publish, options, meta) => {
|
|
13
|
+
const actionLookup = {0: 'release', 1: 'single', 2: 'double', 3: 'triple', 4: 'hold'};
|
|
14
|
+
const value = msg.data['presentValue'];
|
|
15
|
+
const action = actionLookup[value];
|
|
16
|
+
return {action: utils.postfixWithEndpointName(action, msg, model, meta)};
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
module.exports = [
|
|
23
|
+
{
|
|
24
|
+
fingerprint: [{modelID: 'WS7', manufacturerName: 'JetHome'}],
|
|
25
|
+
model: 'WS7',
|
|
26
|
+
vendor: 'JetHome',
|
|
27
|
+
description: '3-ch battery discrete input module',
|
|
28
|
+
fromZigbee: [fz.battery, jetHome.fz.multiStateAction],
|
|
29
|
+
toZigbee: [],
|
|
30
|
+
exposes: [
|
|
31
|
+
e.battery(), e.battery_voltage(), e.action(
|
|
32
|
+
['release_in1', 'single_in1', 'double_in1', 'hold_in1',
|
|
33
|
+
'release_in2', 'single_in2', 'double_in2', 'hold_in2',
|
|
34
|
+
'release_in3', 'single_in3', 'double_in3', 'hold_in3'])],
|
|
35
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
36
|
+
const endpoint = device.getEndpoint(1);
|
|
37
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
38
|
+
await reporting.batteryVoltage(endpoint);
|
|
39
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
40
|
+
},
|
|
41
|
+
meta: {multiEndpoint: true},
|
|
42
|
+
endpoint: (device) => {
|
|
43
|
+
return {
|
|
44
|
+
'in1': 1, 'in2': 2, 'in3': 3,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['FB56-ZCW08KU1.1', 'FB56-ZCW08KU1.0'],
|
|
6
|
+
model: 'K2RGBW01',
|
|
7
|
+
vendor: 'JIAWEN',
|
|
8
|
+
description: 'Wireless Bulb E27 9W RGBW',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
zigbeeModel: ['FB56-ZBW02KU1.5'],
|
|
13
|
+
model: 'JW-A04-CT',
|
|
14
|
+
vendor: 'JIAWEN',
|
|
15
|
+
description: 'LED strip light controller',
|
|
16
|
+
extend: extend.light_onoff_brightness(),
|
|
17
|
+
},
|
|
18
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const reporting = require('../lib/reporting');
|
|
2
|
+
const extend = require('../lib/extend');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['J2182548'],
|
|
7
|
+
model: 'J2182548',
|
|
8
|
+
vendor: 'JUMITECH APS',
|
|
9
|
+
description: 'ZigBee AC phase-cut dimmer single-line',
|
|
10
|
+
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
11
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
12
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
13
|
+
const endpoint = device.getEndpoint(1);
|
|
14
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
15
|
+
await reporting.onOff(endpoint);
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
];
|
package/devices/jxuan.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const tz = require('../converters/toZigbee');
|
|
2
|
+
const exposes = require('../lib/exposes');
|
|
3
|
+
const e = exposes.presets;
|
|
4
|
+
const ea = exposes.access;
|
|
5
|
+
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
6
|
+
const reporting = require('../lib/reporting');
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['wall pir'],
|
|
11
|
+
model: 'PRZ01',
|
|
12
|
+
vendor: 'J.XUAN',
|
|
13
|
+
description: 'Human body movement sensor',
|
|
14
|
+
fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery],
|
|
15
|
+
toZigbee: [],
|
|
16
|
+
exposes: [e.occupancy(), e.battery_low(), e.battery()],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
zigbeeModel: ['door sensor'],
|
|
20
|
+
model: 'DSZ01',
|
|
21
|
+
vendor: 'J.XUAN',
|
|
22
|
+
description: 'Door or window contact switch',
|
|
23
|
+
fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
|
|
24
|
+
toZigbee: [],
|
|
25
|
+
exposes: [e.contact(), e.battery_low()],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
zigbeeModel: ['JD-SWITCH\u000002'],
|
|
29
|
+
model: 'WSZ01',
|
|
30
|
+
vendor: 'J.XUAN',
|
|
31
|
+
description: 'Wireless switch',
|
|
32
|
+
fromZigbee: [fz.WSZ01_on_off_action, fz.battery],
|
|
33
|
+
toZigbee: [],
|
|
34
|
+
exposes: [e.action(['release', 'single', 'double', 'hold']), e.battery()],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
zigbeeModel: ['00090bdc'],
|
|
38
|
+
model: 'SPZ01',
|
|
39
|
+
vendor: 'J.XUAN',
|
|
40
|
+
description: 'plug',
|
|
41
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering],
|
|
42
|
+
exposes: [e.switch(), e.power(), e.power_outage_memory().withAccess(ea.STATE_SET)],
|
|
43
|
+
toZigbee: [tz.on_off, tz.SPZ01_power_outage_memory],
|
|
44
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
45
|
+
const endpoint = device.getEndpoint(1);
|
|
46
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
];
|
package/devices/kami.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
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: ['Z3ContactSensor'],
|
|
8
|
+
model: 'N20',
|
|
9
|
+
vendor: 'KAMI',
|
|
10
|
+
description: 'Contact sensor or motion sensor',
|
|
11
|
+
fromZigbee: [fz.KAMI_contact, fz.KAMI_occupancy],
|
|
12
|
+
toZigbee: [],
|
|
13
|
+
exposes: [e.contact(), e.action(['motion'])],
|
|
14
|
+
},
|
|
15
|
+
];
|