zigbee-herdsman-converters 15.0.102 → 15.0.104
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/converters/fromZigbee.js +1 -1
- package/devices/develco.js +1 -1
- package/devices/profalux.js +1 -0
- package/devices/shinasystem.js +5 -1
- package/devices/tuya.js +213 -17
- package/devices/xiaomi.js +34 -0
- package/lib/philips.js +1 -1
- package/lib/reporting.js +1 -1
- package/lib/tuya.js +2 -2
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -5379,7 +5379,7 @@ const converters = {
|
|
|
5379
5379
|
if (['QBKG39LM', 'QBKG41LM', 'WS-EUK02', 'WS-EUK04', 'QBKG20LM', 'QBKG28LM', 'QBKG31LM'].includes(model.model)) {
|
|
5380
5380
|
buttonLookup = {41: 'left', 42: 'right', 51: 'both'};
|
|
5381
5381
|
}
|
|
5382
|
-
if (['QBKG25LM', 'QBKG26LM', 'QBKG29LM', 'QBKG34LM', 'ZNQBKG31LM'].includes(model.model)) {
|
|
5382
|
+
if (['QBKG25LM', 'QBKG26LM', 'QBKG29LM', 'QBKG34LM', 'ZNQBKG31LM', 'ZNQBKG26LM'].includes(model.model)) {
|
|
5383
5383
|
buttonLookup = {
|
|
5384
5384
|
41: 'left', 42: 'center', 43: 'right',
|
|
5385
5385
|
51: 'left_center', 52: 'left_right', 53: 'center_right',
|
package/devices/develco.js
CHANGED
|
@@ -297,7 +297,7 @@ module.exports = [
|
|
|
297
297
|
const endpoint = device.getEndpoint(2);
|
|
298
298
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
|
|
299
299
|
await reporting.onOff(endpoint);
|
|
300
|
-
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
300
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint, true);
|
|
301
301
|
await reporting.activePower(endpoint);
|
|
302
302
|
await reporting.rmsCurrent(endpoint);
|
|
303
303
|
await reporting.rmsVoltage(endpoint);
|
package/devices/profalux.js
CHANGED
|
@@ -20,6 +20,7 @@ module.exports = [
|
|
|
20
20
|
zigbeeModel: [
|
|
21
21
|
'MOT-C1Z06C\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
|
|
22
22
|
'MOT-C1Z10F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
|
|
23
|
+
'MOT-C1Z06F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
|
|
23
24
|
],
|
|
24
25
|
fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 512,
|
|
25
26
|
inputClusters: [0, 3, 4, 5, 6, 8, 10, 21, 256, 64544, 64545], outputClusters: [3, 64544]}]}],
|
package/devices/shinasystem.js
CHANGED
|
@@ -522,6 +522,7 @@ module.exports = [
|
|
|
522
522
|
zigbeeModel: ['SBM300ZB4'],
|
|
523
523
|
model: 'SBM300ZB4',
|
|
524
524
|
vendor: 'ShinaSystem',
|
|
525
|
+
ota: ota.zigbeeOTA,
|
|
525
526
|
description: 'SiHAS remote control 4 button',
|
|
526
527
|
fromZigbee: [fz.sihas_action, fz.battery],
|
|
527
528
|
toZigbee: [],
|
|
@@ -541,6 +542,7 @@ module.exports = [
|
|
|
541
542
|
zigbeeModel: ['SBM300ZC1'],
|
|
542
543
|
model: 'SBM300ZC1',
|
|
543
544
|
vendor: 'ShinaSystem',
|
|
545
|
+
ota: ota.zigbeeOTA,
|
|
544
546
|
description: 'SiHAS remote control',
|
|
545
547
|
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
546
548
|
fromZigbee: [fz.battery, fz.sihas_action],
|
|
@@ -556,6 +558,7 @@ module.exports = [
|
|
|
556
558
|
zigbeeModel: ['SBM300ZC2'],
|
|
557
559
|
model: 'SBM300ZC2',
|
|
558
560
|
vendor: 'ShinaSystem',
|
|
561
|
+
ota: ota.zigbeeOTA,
|
|
559
562
|
description: 'SiHAS remote control 2 button',
|
|
560
563
|
fromZigbee: [fz.sihas_action, fz.battery],
|
|
561
564
|
toZigbee: [],
|
|
@@ -572,6 +575,7 @@ module.exports = [
|
|
|
572
575
|
zigbeeModel: ['SBM300ZC3'],
|
|
573
576
|
model: 'SBM300ZC3',
|
|
574
577
|
vendor: 'ShinaSystem',
|
|
578
|
+
ota: ota.zigbeeOTA,
|
|
575
579
|
description: 'SiHAS remote control 3 button',
|
|
576
580
|
fromZigbee: [fz.sihas_action, fz.battery],
|
|
577
581
|
toZigbee: [],
|
|
@@ -590,6 +594,7 @@ module.exports = [
|
|
|
590
594
|
zigbeeModel: ['SBM300ZC4'],
|
|
591
595
|
model: 'SBM300ZC4',
|
|
592
596
|
vendor: 'ShinaSystem',
|
|
597
|
+
ota: ota.zigbeeOTA,
|
|
593
598
|
description: 'SiHAS remote control 4 button',
|
|
594
599
|
fromZigbee: [fz.sihas_action, fz.battery],
|
|
595
600
|
toZigbee: [],
|
|
@@ -747,7 +752,6 @@ module.exports = [
|
|
|
747
752
|
zigbeeModel: ['ISM300Z3'],
|
|
748
753
|
model: 'ISM300Z3',
|
|
749
754
|
vendor: 'ShinaSystem',
|
|
750
|
-
ota: ota.zigbeeOTA,
|
|
751
755
|
description: 'SiHAS IOT smart inner switch 3 gang',
|
|
752
756
|
fromZigbee: [fzLocal.ISM300Z3_on_off],
|
|
753
757
|
toZigbee: [tzLocal.ISM300Z3_on_off, tzLocal.ISM300Z3_rf_pairing],
|
package/devices/tuya.js
CHANGED
|
@@ -1201,7 +1201,9 @@ module.exports = [
|
|
|
1201
1201
|
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_rk2yzt0u'},
|
|
1202
1202
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_o4cjetlm'}, {manufacturerName: '_TZ3000_o4cjetlm'},
|
|
1203
1203
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_iedbgyxt'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_h3noz0a5'},
|
|
1204
|
-
{modelID: 'TS0001', manufacturerName: '_TYZB01_4tlksk8a'}, {modelID: 'TS0011', manufacturerName: '_TYZB01_rifa0wlb'}
|
|
1204
|
+
{modelID: 'TS0001', manufacturerName: '_TYZB01_4tlksk8a'}, {modelID: 'TS0011', manufacturerName: '_TYZB01_rifa0wlb'},
|
|
1205
|
+
{modelID: 'TS0001', manufacturerName: '_TZ3000_5ucujjts'},
|
|
1206
|
+
],
|
|
1205
1207
|
model: 'ZN231392',
|
|
1206
1208
|
vendor: 'TuYa',
|
|
1207
1209
|
description: 'Smart water/gas valve',
|
|
@@ -1284,6 +1286,7 @@ module.exports = [
|
|
|
1284
1286
|
tuya.whitelabel('Lidl', 'HG08010', 'Livarno Home outdoor spotlight', ['_TZ3210_umi6vbsz']),
|
|
1285
1287
|
tuya.whitelabel('Lidl', 'HG08008', 'Livarno Home LED ceiling light', ['_TZ3210_p9ao60da']),
|
|
1286
1288
|
tuya.whitelabel('Lidl', 'HG08007', 'Livarno Home outdoor LED band', ['_TZ3210_zbabx9wh']),
|
|
1289
|
+
tuya.whitelabel('Lidl', '399629_2110', 'Livarno Lux Ceiling Panel RGB+CCT', ['_TZ3210_c0s1xloa']),
|
|
1287
1290
|
],
|
|
1288
1291
|
extend: tuya.extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500], noConfigure: true}),
|
|
1289
1292
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -1291,13 +1294,12 @@ module.exports = [
|
|
|
1291
1294
|
},
|
|
1292
1295
|
},
|
|
1293
1296
|
{
|
|
1294
|
-
fingerprint: tuya.fingerprint('TS0505B', ['
|
|
1297
|
+
fingerprint: tuya.fingerprint('TS0505B', ['_TZ3210_iystcadi']),
|
|
1295
1298
|
model: 'TS0505B_2',
|
|
1296
1299
|
vendor: 'TuYa',
|
|
1297
1300
|
description: 'Zigbee RGB+CCT light',
|
|
1298
1301
|
whiteLabel: [
|
|
1299
1302
|
tuya.whitelabel('Lidl', '14149505L/14149506L_2', 'Livarno Lux light bar RGB+CCT (black/white)', ['_TZ3210_iystcadi']),
|
|
1300
|
-
tuya.whitelabel('Lidl', '399629_2110', 'Livarno Lux Ceiling Panel RGB+CCT', ['_TZ3210_c0s1xloa']),
|
|
1301
1303
|
],
|
|
1302
1304
|
toZigbee: [tz.on_off, tzLocal.led_control],
|
|
1303
1305
|
fromZigbee: [fz.on_off, fz.tuya_led_controller, fz.brightness, fz.ignore_basic_report],
|
|
@@ -1818,7 +1820,7 @@ module.exports = [
|
|
|
1818
1820
|
},
|
|
1819
1821
|
},
|
|
1820
1822
|
{
|
|
1821
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_aqnazj70', '_TZE200_k6jhsr0q', '_TZE200_di3tfv5b', '_TZE200_mexisfik']),
|
|
1823
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_aqnazj70', '_TZE200_k6jhsr0q', '_TZE200_di3tfv5b', '_TZE200_mexisfik', '_TZE204_6wi2mope']),
|
|
1822
1824
|
model: 'TS0601_switch_4_gang',
|
|
1823
1825
|
vendor: 'TuYa',
|
|
1824
1826
|
description: '4 gang switch',
|
|
@@ -2205,7 +2207,8 @@ module.exports = [
|
|
|
2205
2207
|
vendor: 'TuYa',
|
|
2206
2208
|
description: 'Wireless switch with 4 buttons',
|
|
2207
2209
|
whiteLabel: [{vendor: 'Lonsonho', model: 'TS0044'}, {vendor: 'Haozee', model: 'ESW-OZAA-EU'},
|
|
2208
|
-
{vendor: 'LoraTap', model: 'SS6400ZB'}, {vendor: 'Moes', model: 'ZT-SY-EU-G-4S-WH-MS'}
|
|
2210
|
+
{vendor: 'LoraTap', model: 'SS6400ZB'}, {vendor: 'Moes', model: 'ZT-SY-EU-G-4S-WH-MS'},
|
|
2211
|
+
tuya.whitelabel('Moes', 'ZT-SR-EU4', 'Star Ring 4 Gang Scene Switch', ['_TZ3000_a4xycprs'])],
|
|
2209
2212
|
fromZigbee: [fz.tuya_on_off_action, fz.battery],
|
|
2210
2213
|
exposes: [e.battery(), e.action(['1_single', '1_double', '1_hold', '2_single', '2_double', '2_hold',
|
|
2211
2214
|
'3_single', '3_double', '3_hold', '4_single', '4_double', '4_hold'])],
|
|
@@ -2347,7 +2350,8 @@ module.exports = [
|
|
|
2347
2350
|
description: '1 gang switch',
|
|
2348
2351
|
extend: tuya.extend.switch(),
|
|
2349
2352
|
whiteLabel: [{vendor: 'CR Smart Home', model: 'TS0001', description: 'Valve control'}, {vendor: 'Lonsonho', model: 'X701'},
|
|
2350
|
-
{vendor: 'Bandi', model: 'BDS03G1'}
|
|
2353
|
+
{vendor: 'Bandi', model: 'BDS03G1'},
|
|
2354
|
+
],
|
|
2351
2355
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
2352
2356
|
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
2353
2357
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
@@ -2519,7 +2523,6 @@ module.exports = [
|
|
|
2519
2523
|
{modelID: 'TS0601', manufacturerName: '_TZE200_3ylew7b4'},
|
|
2520
2524
|
{modelID: 'TS0601', manufacturerName: '_TZE200_llm0epxg'},
|
|
2521
2525
|
{modelID: 'TS0601', manufacturerName: '_TZE200_n1aauwb4'},
|
|
2522
|
-
{modelID: 'TS0601', manufacturerName: '_TZE204_sxm7l9xa'},
|
|
2523
2526
|
{modelID: 'TS0601', manufacturerName: '_TZE200_xu4a5rhj'},
|
|
2524
2527
|
{modelID: 'TS0601', manufacturerName: '_TZE204_r0jdjrvi'},
|
|
2525
2528
|
],
|
|
@@ -4547,7 +4550,7 @@ module.exports = [
|
|
|
4547
4550
|
},
|
|
4548
4551
|
},
|
|
4549
4552
|
{
|
|
4550
|
-
fingerprint: tuya.fingerprint('TS110E', ['_TZ3210_zxbtub8r', '_TZ3210_k1msuvg6'
|
|
4553
|
+
fingerprint: tuya.fingerprint('TS110E', ['_TZ3210_zxbtub8r', '_TZ3210_k1msuvg6']),
|
|
4551
4554
|
model: 'TS110E_1gang_1',
|
|
4552
4555
|
vendor: 'TuYa',
|
|
4553
4556
|
description: '1 channel dimmer',
|
|
@@ -4559,14 +4562,7 @@ module.exports = [
|
|
|
4559
4562
|
[tz.light_onoff_brightness],
|
|
4560
4563
|
[tzLocal.TS110E_light_onoff_brightness],
|
|
4561
4564
|
),
|
|
4562
|
-
exposes: (
|
|
4563
|
-
const exps = [e.light_brightness().withMinBrightness().withMaxBrightness(), e.linkquality()];
|
|
4564
|
-
if (!device || !device.manufacturerName === '_TZ3210_weaqkhab') {
|
|
4565
|
-
// _TZ3210_weaqkhab doesn't support power_on_behavior and switch_type
|
|
4566
|
-
exps.push(e.power_on_behavior(), tuya.exposes.switchType());
|
|
4567
|
-
}
|
|
4568
|
-
return exps;
|
|
4569
|
-
},
|
|
4565
|
+
exposes: [e.light_brightness().withMinBrightness().withMaxBrightness()],
|
|
4570
4566
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
4571
4567
|
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
4572
4568
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
@@ -4574,7 +4570,7 @@ module.exports = [
|
|
|
4574
4570
|
},
|
|
4575
4571
|
},
|
|
4576
4572
|
{
|
|
4577
|
-
fingerprint: tuya.fingerprint('TS110E', ['_TZ3210_ngqk6jia']),
|
|
4573
|
+
fingerprint: tuya.fingerprint('TS110E', ['_TZ3210_ngqk6jia', '_TZ3210_weaqkhab']),
|
|
4578
4574
|
model: 'TS110E_1gang_2',
|
|
4579
4575
|
vendor: 'TuYa',
|
|
4580
4576
|
description: '1 channel dimmer',
|
|
@@ -4853,4 +4849,204 @@ module.exports = [
|
|
|
4853
4849
|
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
4854
4850
|
},
|
|
4855
4851
|
},
|
|
4852
|
+
{
|
|
4853
|
+
fingerprint: [
|
|
4854
|
+
{modelID: 'TS0001', manufacturerName: '_TZ3000_bmqxalil'},
|
|
4855
|
+
],
|
|
4856
|
+
model: 'TS0001_switch_1_gang',
|
|
4857
|
+
vendor: 'TuYa',
|
|
4858
|
+
description: '1-Gang switch with backlight',
|
|
4859
|
+
extend: tuya.extend.switch({powerOnBehavior2: true, backlightModeOffOn: true}),
|
|
4860
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
4861
|
+
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
4862
|
+
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
4863
|
+
},
|
|
4864
|
+
whiteLabel: [
|
|
4865
|
+
tuya.whitelabel('Homeetec', '37022454', '1 Gang switch with backlight', ['_TZ3000_bmqxalil']),
|
|
4866
|
+
],
|
|
4867
|
+
},
|
|
4868
|
+
{
|
|
4869
|
+
fingerprint: [
|
|
4870
|
+
{modelID: 'TS0002', manufacturerName: '_TZ3000_in5qxhtt'},
|
|
4871
|
+
],
|
|
4872
|
+
model: 'TS0002_switch_2_gang',
|
|
4873
|
+
vendor: 'TuYa',
|
|
4874
|
+
description: '2-Gang switch with backlight',
|
|
4875
|
+
extend: tuya.extend.switch({powerOnBehavior2: true, backlightModeOffOn: true, endpoints: ['l1', 'l2']}),
|
|
4876
|
+
endpoint: (device) => {
|
|
4877
|
+
return {'l1': 1, 'l2': 2};
|
|
4878
|
+
},
|
|
4879
|
+
meta: {multiEndpoint: true},
|
|
4880
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
4881
|
+
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
4882
|
+
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
4883
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
4884
|
+
},
|
|
4885
|
+
whiteLabel: [
|
|
4886
|
+
tuya.whitelabel('Homeetec', '37022463', '2 Gang switch with backlight', ['_TZ3000_in5qxhtt']),
|
|
4887
|
+
],
|
|
4888
|
+
},
|
|
4889
|
+
{
|
|
4890
|
+
fingerprint: [
|
|
4891
|
+
{modelID: 'TS0003', manufacturerName: '_TZ3000_pv4puuxi'},
|
|
4892
|
+
],
|
|
4893
|
+
model: 'TS0003_switch_3_gang',
|
|
4894
|
+
vendor: 'TuYa',
|
|
4895
|
+
description: '3-Gang switch with backlight',
|
|
4896
|
+
extend: tuya.extend.switch({powerOnBehavior2: true, backlightModeOffOn: true, endpoints: ['left', 'center', 'right']}),
|
|
4897
|
+
endpoint: (device) => {
|
|
4898
|
+
return {'left': 1, 'center': 2, 'right': 3};
|
|
4899
|
+
},
|
|
4900
|
+
meta: {multiEndpoint: true},
|
|
4901
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
4902
|
+
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
4903
|
+
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
4904
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
4905
|
+
await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
|
|
4906
|
+
},
|
|
4907
|
+
whiteLabel: [
|
|
4908
|
+
tuya.whitelabel('Homeetec', '37022474', '3 Gang switch with backlight', ['_TZ3000_pv4puuxi']),
|
|
4909
|
+
],
|
|
4910
|
+
},
|
|
4911
|
+
{
|
|
4912
|
+
fingerprint: [
|
|
4913
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_hewlydpz'},
|
|
4914
|
+
],
|
|
4915
|
+
model: 'TS0601_switch_4_gang_2',
|
|
4916
|
+
vendor: 'TuYa',
|
|
4917
|
+
description: '4-Gang switch with backlight',
|
|
4918
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
4919
|
+
toZigbee: [tuya.tz.datapoints],
|
|
4920
|
+
configure: tuya.configureMagicPacket,
|
|
4921
|
+
exposes: [
|
|
4922
|
+
tuya.exposes.switch().withEndpoint('l1'),
|
|
4923
|
+
tuya.exposes.switch().withEndpoint('l2'),
|
|
4924
|
+
tuya.exposes.switch().withEndpoint('l3'),
|
|
4925
|
+
tuya.exposes.switch().withEndpoint('l4'),
|
|
4926
|
+
tuya.exposes.backlightModeOffOn(),
|
|
4927
|
+
],
|
|
4928
|
+
endpoint: (device) => {
|
|
4929
|
+
return {'l1': 1, 'l2': 1, 'l3': 1, 'l4': 1};
|
|
4930
|
+
},
|
|
4931
|
+
meta: {
|
|
4932
|
+
multiEndpoint: true,
|
|
4933
|
+
tuyaDatapoints: [
|
|
4934
|
+
[1, 'state_l1', tuya.valueConverter.onOff],
|
|
4935
|
+
[2, 'state_l2', tuya.valueConverter.onOff],
|
|
4936
|
+
[3, 'state_l3', tuya.valueConverter.onOff],
|
|
4937
|
+
[4, 'state_l4', tuya.valueConverter.onOff],
|
|
4938
|
+
[7, 'backlight_mode', tuya.valueConverter.onOff],
|
|
4939
|
+
],
|
|
4940
|
+
},
|
|
4941
|
+
whiteLabel: [
|
|
4942
|
+
tuya.whitelabel('Homeetec', '37022714', '4 Gang switch with backlight', ['_TZE200_hewlydpz']),
|
|
4943
|
+
],
|
|
4944
|
+
},
|
|
4945
|
+
{
|
|
4946
|
+
fingerprint: [
|
|
4947
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_p6vz3wzt'},
|
|
4948
|
+
],
|
|
4949
|
+
model: 'TS0601_cover_5',
|
|
4950
|
+
vendor: 'TuYa',
|
|
4951
|
+
description: 'Curtain/blind switch',
|
|
4952
|
+
options: [exposes.options.invert_cover()],
|
|
4953
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
4954
|
+
toZigbee: [tuya.tz.datapoints],
|
|
4955
|
+
exposes: [
|
|
4956
|
+
e.cover_position(),
|
|
4957
|
+
exposes.enum('calibration', ea.STATE_SET, ['START', 'END']).withDescription('Calibration'),
|
|
4958
|
+
exposes.binary('backlight_mode', ea.STATE_SET, 'ON', 'OFF').withDescription('Backlight'),
|
|
4959
|
+
exposes.enum('motor_steering', ea.STATE_SET, ['FORWARD', 'BACKWARD']).withDescription('Motor Steering'),
|
|
4960
|
+
exposes.binary('child_lock', ea.STATE_SET, 'ON', 'OFF').withDescription('Child Lock'),
|
|
4961
|
+
],
|
|
4962
|
+
meta: {
|
|
4963
|
+
tuyaDatapoints: [
|
|
4964
|
+
[1, 'state', tuya.valueConverterBasic.lookup({'OPEN': tuya.enum(0), 'STOP': tuya.enum(1), 'CLOSE': tuya.enum(2)})],
|
|
4965
|
+
[2, 'position', tuya.valueConverter.coverPosition],
|
|
4966
|
+
[3, 'calibration', tuya.valueConverterBasic.lookup({'START': tuya.enum(0), 'END': tuya.enum(1)})],
|
|
4967
|
+
[7, 'backlight_mode', tuya.valueConverter.onOff],
|
|
4968
|
+
[8, 'motor_steering', tuya.valueConverterBasic.lookup({'FORWARD': tuya.enum(0), 'BACKWARD': tuya.enum(1)})],
|
|
4969
|
+
[103, 'child_lock', tuya.valueConverter.onOff],
|
|
4970
|
+
],
|
|
4971
|
+
},
|
|
4972
|
+
whiteLabel: [
|
|
4973
|
+
tuya.whitelabel('Homeetec', '37022483', 'Curtain/blind switch', ['_TZE200_p6vz3wzt']),
|
|
4974
|
+
],
|
|
4975
|
+
},
|
|
4976
|
+
{
|
|
4977
|
+
fingerprint: [
|
|
4978
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_jhkttplm'},
|
|
4979
|
+
],
|
|
4980
|
+
model: 'TS0601_cover_with_1_switch',
|
|
4981
|
+
vendor: 'TuYa',
|
|
4982
|
+
description: 'Curtain/blind switch with 1 Gang switch',
|
|
4983
|
+
options: [exposes.options.invert_cover()],
|
|
4984
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
4985
|
+
toZigbee: [tuya.tz.datapoints],
|
|
4986
|
+
exposes: [
|
|
4987
|
+
e.cover_position(),
|
|
4988
|
+
tuya.exposes.switch().withEndpoint('l1'),
|
|
4989
|
+
exposes.enum('calibration', ea.STATE_SET, ['START', 'END']).withDescription('Calibration'),
|
|
4990
|
+
exposes.binary('backlight_mode', ea.STATE_SET, 'ON', 'OFF').withDescription('Backlight'),
|
|
4991
|
+
exposes.enum('motor_steering', ea.STATE_SET, ['FORWARD', 'BACKWARD']).withDescription('Motor Steering'),
|
|
4992
|
+
exposes.binary('child_lock', ea.STATE_SET, 'ON', 'OFF').withDescription('Child Lock'),
|
|
4993
|
+
],
|
|
4994
|
+
endpoint: (device) => {
|
|
4995
|
+
return {'l1': 1};
|
|
4996
|
+
},
|
|
4997
|
+
meta: {
|
|
4998
|
+
multiEndpoint: true,
|
|
4999
|
+
tuyaDatapoints: [
|
|
5000
|
+
[1, 'state', tuya.valueConverterBasic.lookup({'OPEN': tuya.enum(0), 'STOP': tuya.enum(1), 'CLOSE': tuya.enum(2)})],
|
|
5001
|
+
[2, 'position', tuya.valueConverter.coverPosition],
|
|
5002
|
+
[3, 'calibration', tuya.valueConverterBasic.lookup({'START': tuya.enum(0), 'END': tuya.enum(1)})],
|
|
5003
|
+
[7, 'backlight_mode', tuya.valueConverter.onOff],
|
|
5004
|
+
[8, 'motor_steering', tuya.valueConverterBasic.lookup({'FORWARD': tuya.enum(0), 'BACKWARD': tuya.enum(1)})],
|
|
5005
|
+
[101, 'state_l1', tuya.valueConverter.onOff],
|
|
5006
|
+
[103, 'child_lock', tuya.valueConverter.onOff],
|
|
5007
|
+
],
|
|
5008
|
+
},
|
|
5009
|
+
whiteLabel: [
|
|
5010
|
+
tuya.whitelabel('Homeetec', '37022493', 'Curtain/blind switch with 1 Gang switch', ['_TZE200_jhkttplm']),
|
|
5011
|
+
],
|
|
5012
|
+
},
|
|
5013
|
+
{
|
|
5014
|
+
fingerprint: [
|
|
5015
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_5nldle7w'},
|
|
5016
|
+
],
|
|
5017
|
+
model: 'TS0601_cover_with_2_switch',
|
|
5018
|
+
vendor: 'TuYa',
|
|
5019
|
+
description: 'Curtain/blind switch with 2 Gang switch',
|
|
5020
|
+
options: [exposes.options.invert_cover()],
|
|
5021
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
5022
|
+
toZigbee: [tuya.tz.datapoints],
|
|
5023
|
+
exposes: [
|
|
5024
|
+
e.cover_position(),
|
|
5025
|
+
tuya.exposes.switch().withEndpoint('l1'),
|
|
5026
|
+
tuya.exposes.switch().withEndpoint('l2'),
|
|
5027
|
+
exposes.enum('calibration', ea.STATE_SET, ['START', 'END']).withDescription('Calibration'),
|
|
5028
|
+
exposes.binary('backlight_mode', ea.STATE_SET, 'ON', 'OFF').withDescription('Backlight'),
|
|
5029
|
+
exposes.enum('motor_steering', ea.STATE_SET, ['FORWARD', 'BACKWARD']).withDescription('Motor Steering'),
|
|
5030
|
+
exposes.binary('child_lock', ea.STATE_SET, 'ON', 'OFF').withDescription('Child Lock'),
|
|
5031
|
+
],
|
|
5032
|
+
endpoint: (device) => {
|
|
5033
|
+
return {'l1': 1, 'l2': 1};
|
|
5034
|
+
},
|
|
5035
|
+
meta: {
|
|
5036
|
+
multiEndpoint: true,
|
|
5037
|
+
tuyaDatapoints: [
|
|
5038
|
+
[1, 'state', tuya.valueConverterBasic.lookup({'OPEN': tuya.enum(0), 'STOP': tuya.enum(1), 'CLOSE': tuya.enum(2)})],
|
|
5039
|
+
[2, 'position', tuya.valueConverter.coverPosition],
|
|
5040
|
+
[3, 'calibration', tuya.valueConverterBasic.lookup({'START': tuya.enum(0), 'END': tuya.enum(1)})],
|
|
5041
|
+
[7, 'backlight_mode', tuya.valueConverter.onOff],
|
|
5042
|
+
[8, 'motor_steering', tuya.valueConverterBasic.lookup({'FORWARD': tuya.enum(0), 'BACKWARD': tuya.enum(1)})],
|
|
5043
|
+
[101, 'state_l2', tuya.valueConverter.onOff],
|
|
5044
|
+
[102, 'state_l1', tuya.valueConverter.onOff],
|
|
5045
|
+
[103, 'child_lock', tuya.valueConverter.onOff],
|
|
5046
|
+
],
|
|
5047
|
+
},
|
|
5048
|
+
whiteLabel: [
|
|
5049
|
+
tuya.whitelabel('Homeetec', '37022173', 'Curtain/blind switch with 2 Gang switch', ['_TZE200_5nldle7w']),
|
|
5050
|
+
],
|
|
5051
|
+
},
|
|
4856
5052
|
];
|
package/devices/xiaomi.js
CHANGED
|
@@ -3246,4 +3246,38 @@ module.exports = [
|
|
|
3246
3246
|
},
|
|
3247
3247
|
ota: ota.zigbeeOTA,
|
|
3248
3248
|
},
|
|
3249
|
+
{
|
|
3250
|
+
zigbeeModel: ['lumi.switch.acn031'],
|
|
3251
|
+
model: 'ZNQBKG26LM',
|
|
3252
|
+
vendor: 'Xiaomi',
|
|
3253
|
+
description: 'Aqara smart wall switch H1M (with neutral, triple rocker)',
|
|
3254
|
+
fromZigbee: [fz.on_off, fz.xiaomi_multistate_action, fz.aqara_opple, fz.xiaomi_power],
|
|
3255
|
+
toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.aqara_switch_mode_switch,
|
|
3256
|
+
tz.xiaomi_flip_indicator_light],
|
|
3257
|
+
endpoint: (device) => {
|
|
3258
|
+
return {'left': 1, 'center': 2, 'right': 3};
|
|
3259
|
+
},
|
|
3260
|
+
meta: {multiEndpoint: true},
|
|
3261
|
+
exposes: [
|
|
3262
|
+
e.switch().withEndpoint('left'), e.switch().withEndpoint('center'), e.switch().withEndpoint('right'),
|
|
3263
|
+
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
3264
|
+
.withDescription('Decoupled mode for left button')
|
|
3265
|
+
.withEndpoint('left'),
|
|
3266
|
+
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
3267
|
+
.withDescription('Decoupled mode for center button')
|
|
3268
|
+
.withEndpoint('center'),
|
|
3269
|
+
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
|
|
3270
|
+
.withDescription('Decoupled mode for right button')
|
|
3271
|
+
.withEndpoint('right'),
|
|
3272
|
+
e.action(['single_left', 'double_left', 'single_center', 'double_center', 'single_right', 'double_right',
|
|
3273
|
+
'single_left_center', 'double_left_center', 'single_left_right', 'double_left_right',
|
|
3274
|
+
'single_center_right', 'double_center_right', 'single_all', 'double_all']),
|
|
3275
|
+
e.device_temperature(), e.flip_indicator_light(),
|
|
3276
|
+
],
|
|
3277
|
+
onEvent: preventReset,
|
|
3278
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
3279
|
+
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
3280
|
+
},
|
|
3281
|
+
ota: ota.zigbeeOTA,
|
|
3282
|
+
},
|
|
3249
3283
|
];
|
package/lib/philips.js
CHANGED
|
@@ -52,7 +52,7 @@ const knownEffects = {
|
|
|
52
52
|
|
|
53
53
|
const extend = {
|
|
54
54
|
light_onoff_brightness: (options={}) => {
|
|
55
|
-
options = {disableHueEffects:
|
|
55
|
+
options = {disableHueEffects: false, ...options};
|
|
56
56
|
if (!options.disableHueEffects) options.disableEffect = true;
|
|
57
57
|
const result = extendDontUse.light_onoff_brightness(options);
|
|
58
58
|
result['ota'] = ota.zigbeeOTA;
|
package/lib/reporting.js
CHANGED
|
@@ -25,7 +25,7 @@ async function readEletricalMeasurementMultiplierDivisors(endpoint, readFrequenc
|
|
|
25
25
|
// Split into three chunks, some devices fail to respond when reading too much attributes at once.
|
|
26
26
|
await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor', 'acCurrentMultiplier']);
|
|
27
27
|
await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor', 'acPowerMultiplier', 'acPowerDivisor']);
|
|
28
|
-
// Only read frequency multiplier/
|
|
28
|
+
// Only read frequency multiplier/divisor when enabled as not all devices support this.
|
|
29
29
|
if (readFrequencyAttrs) {
|
|
30
30
|
await endpoint.read('haElectricalMeasurement', ['acFrequencyDivisor', 'acFrequencyMultiplier']);
|
|
31
31
|
}
|
package/lib/tuya.js
CHANGED
|
@@ -1656,7 +1656,7 @@ const tuyaTz = {
|
|
|
1656
1656
|
'scale_protection', 'error', 'radar_scene', 'radar_sensitivity', 'tumble_alarm_time', 'tumble_switch', 'fall_sensitivity',
|
|
1657
1657
|
'min_temperature', 'max_temperature', 'window_detection', 'boost_heating', 'alarm_ringtone', 'alarm_time', 'fan_speed',
|
|
1658
1658
|
'reverse_direction', 'border', 'click_control', 'motor_direction', 'opening_mode', 'factory_reset', 'set_upper_limit', 'set_bottom_limit',
|
|
1659
|
-
'motor_speed',
|
|
1659
|
+
'motor_speed', 'backlight_mode', 'calibration', 'motor_steering',
|
|
1660
1660
|
],
|
|
1661
1661
|
convertSet: async (entity, key, value, meta) => {
|
|
1662
1662
|
// A set converter is only called once; therefore we need to loop
|
|
@@ -1664,7 +1664,7 @@ const tuyaTz = {
|
|
|
1664
1664
|
const datapoints = utils.getMetaValue(entity, meta.mapped, 'tuyaDatapoints', undefined, undefined);
|
|
1665
1665
|
if (!datapoints) throw new Error('No datapoints map defined');
|
|
1666
1666
|
for (const [key, value] of Object.entries(meta.message)) {
|
|
1667
|
-
const convertedKey = meta.mapped.meta.multiEndpoint ? `${key}_${meta.endpoint_name}` : key;
|
|
1667
|
+
const convertedKey = meta.mapped.meta.multiEndpoint && meta.endpoint_name ? `${key}_${meta.endpoint_name}` : key;
|
|
1668
1668
|
const dpEntry = datapoints.find((d) => d[1] === convertedKey);
|
|
1669
1669
|
if (!dpEntry || !dpEntry[1]) {
|
|
1670
1670
|
throw new Error(`No datapoint defined for '${key}'`);
|