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.
@@ -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',
@@ -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);
@@ -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]}]}],
@@ -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', ['_TZ3210_c0s1xloa', '_TZ3210_iystcadi']),
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', '_TZ3210_weaqkhab']),
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: (device, options) => {
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: true, ...options};
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/devisor when enabled as not all devices support this.
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}'`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "15.0.102",
3
+ "version": "15.0.104",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [