zigbee-herdsman-converters 14.0.281 → 14.0.282

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.
@@ -4416,11 +4416,11 @@ const converters = {
4416
4416
  const data = msg.data['247'];
4417
4417
  // Xiaomi struct parsing
4418
4418
  const length = data.length;
4419
- // if (meta.logger) meta.logger.debug(`plug.mmeu01: Xiaomi struct: length ${length}`);
4419
+ // if (meta.logger) meta.logger.debug(`${model.zigbeeModel}: Xiaomi struct: length ${length}`);
4420
4420
  for (let i=0; i < length; i++) {
4421
4421
  const index = data[i];
4422
4422
  let value = null;
4423
- // if (meta.logger) meta.logger.debug(`plug.mmeu01: pos=${i}, ind=${data[i]}, vtype=${data[i+1]}`);
4423
+ // if (meta.logger) meta.logger.debug(`${model.zigbeeModel}: pos=${i}, ind=${data[i]}, vtype=${data[i+1]}`);
4424
4424
  switch (data[i+1]) {
4425
4425
  case 16:
4426
4426
  // 0x10 ZclBoolean
@@ -4437,8 +4437,14 @@ const converters = {
4437
4437
  value = data.readUInt16LE(i+2);
4438
4438
  i += 3;
4439
4439
  break;
4440
+ case 35:
4441
+ // 0x23 Zcl32BitUint
4442
+ value = data.readUInt32LE(i+2);
4443
+ i += 5;
4444
+ break;
4440
4445
  case 39:
4441
4446
  // 0x27 Zcl64BitUint
4447
+ value = data.readBigUInt64BE(i+2);
4442
4448
  i += 9;
4443
4449
  break;
4444
4450
  case 40:
@@ -4446,11 +4452,31 @@ const converters = {
4446
4452
  value = data.readInt8(i+2);
4447
4453
  i += 2;
4448
4454
  break;
4455
+ case 41:
4456
+ // 0x29 Zcl16BitInt
4457
+ value = data.readInt16LE(i+2);
4458
+ i += 3;
4459
+ break;
4460
+ case 43:
4461
+ // 0x2B Zcl32BitInt
4462
+ value = data.readInt32LE(i+2);
4463
+ i += 5;
4464
+ break;
4465
+ case 47:
4466
+ // 0x2F Zcl64BitInt
4467
+ value = data.readBigInt64BE(i+2);
4468
+ i += 9;
4469
+ break;
4449
4470
  case 57:
4450
4471
  // 0x39 ZclSingleFloat
4451
4472
  value = data.readFloatLE(i+2);
4452
4473
  i += 5;
4453
4474
  break;
4475
+ case 58:
4476
+ // 0x3a ZclDoubleFloat
4477
+ value = data.readDoubleLE(i+2);
4478
+ i += 5;
4479
+ break;
4454
4480
  default:
4455
4481
  if (meta.logger) meta.logger.debug(`${model.zigbeeModel}: unknown vtype=${data[i+1]}, pos=${i+1}`);
4456
4482
  }
@@ -4561,7 +4587,7 @@ const converters = {
4561
4587
  if (['WXKG02LM_rev2', 'WXKG07LM'].includes(model.model)) buttonLookup = {1: 'left', 2: 'right', 3: 'both'};
4562
4588
  if (['QBKG12LM', 'QBKG24LM'].includes(model.model)) buttonLookup = {5: 'left', 6: 'right', 7: 'both'};
4563
4589
  if (['QBKG25LM', 'QBKG26LM'].includes(model.model)) buttonLookup = {41: 'left', 42: 'center', 43: 'right'};
4564
- if (['QBKG39LM', 'QBKG41LM', 'WS-EUK02', 'WS-EUK04', 'QBKG31LM'].includes(model.model)) {
4590
+ if (['QBKG39LM', 'QBKG41LM', 'WS-EUK02', 'WS-EUK04', 'QBKG20LM', 'QBKG31LM'].includes(model.model)) {
4565
4591
  buttonLookup = {41: 'left', 42: 'right', 51: 'both'};
4566
4592
  }
4567
4593
 
@@ -1912,7 +1912,7 @@ const converters = {
1912
1912
  key: ['power_outage_memory'],
1913
1913
  convertSet: async (entity, key, value, meta) => {
1914
1914
  if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1915
- 'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG31LM', 'QBCZ15LM',
1915
+ 'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG31LM', 'QBCZ15LM', 'QBKG20LM',
1916
1916
  'QBCZ14LM'].includes(meta.mapped.model)) {
1917
1917
  await entity.write('aqaraOpple', {0x0201: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
1918
1918
  } else if (['ZNCZ02LM', 'QBCZ11LM'].includes(meta.mapped.model)) {
@@ -1935,7 +1935,7 @@ const converters = {
1935
1935
  },
1936
1936
  convertGet: async (entity, key, meta) => {
1937
1937
  if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1938
- 'WS-EUK02', 'WS-EUK01', 'QBKG31LM', 'QBCZ15LM', 'QBCZ14LM'].includes(meta.mapped.model)) {
1938
+ 'WS-EUK02', 'WS-EUK01', 'QBKG31LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM'].includes(meta.mapped.model)) {
1939
1939
  await entity.read('aqaraOpple', [0x0201]);
1940
1940
  } else if (['ZNCZ02LM', 'QBCZ11LM', 'ZNCZ11LM'].includes(meta.mapped.model)) {
1941
1941
  await entity.read('aqaraOpple', [0xFFF0]);
@@ -2033,7 +2033,7 @@ const converters = {
2033
2033
  xiaomi_led_disabled_night: {
2034
2034
  key: ['led_disabled_night'],
2035
2035
  convertSet: async (entity, key, value, meta) => {
2036
- if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG25LM'].includes(meta.mapped.model)) {
2036
+ if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM'].includes(meta.mapped.model)) {
2037
2037
  await entity.write('aqaraOpple', {0x0203: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
2038
2038
  } else if (['ZNCZ11LM'].includes(meta.mapped.model)) {
2039
2039
  const payload = value ?
@@ -2047,7 +2047,7 @@ const converters = {
2047
2047
  return {state: {led_disabled_night: value}};
2048
2048
  },
2049
2049
  convertGet: async (entity, key, meta) => {
2050
- if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG25LM'].includes(meta.mapped.model)) {
2050
+ if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG20LM', 'QBKG25LM'].includes(meta.mapped.model)) {
2051
2051
  await entity.read('aqaraOpple', [0x0203], manufacturerOptions.xiaomi);
2052
2052
  } else {
2053
2053
  throw new Error('Not supported');
@@ -0,0 +1,19 @@
1
+ const reporting = require('../lib/reporting');
2
+ const extend = require('../lib/extend');
3
+
4
+ module.exports = [
5
+ {
6
+ zigbeeModel: ['HK-DIM-A'],
7
+ model: 'HK-DIM-A',
8
+ vendor: 'Candeo',
9
+ description: 'Zigbee LED dimmer smart switch',
10
+ extend: extend.light_onoff_brightness({noConfigure: true, disableEffect: 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
+ await reporting.brightness(endpoint, {min: 1});
17
+ },
18
+ },
19
+ ];
package/devices/nyce.js CHANGED
@@ -4,6 +4,20 @@ const reporting = require('../lib/reporting');
4
4
  const e = exposes.presets;
5
5
 
6
6
  module.exports = [
7
+ {
8
+ zigbeeModel: ['3010'],
9
+ model: 'NCZ-3010',
10
+ vendor: 'Nyce',
11
+ description: 'Door hinge sensor',
12
+ fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
13
+ toZigbee: [],
14
+ configure: async (device, coordinatorEndpoint, logger) => {
15
+ const endpoint = device.getEndpoint(1);
16
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
17
+ await reporting.batteryPercentageRemaining(endpoint);
18
+ },
19
+ exposes: [e.contact(), e.battery_low(), e.battery()],
20
+ },
7
21
  {
8
22
  zigbeeModel: ['3011'],
9
23
  model: 'NCZ-3011-HA',
@@ -537,6 +537,15 @@ module.exports = [
537
537
  extend: hueExtend.light_onoff_brightness_colortemp(),
538
538
  ota: ota.zigbeeOTA,
539
539
  },
540
+ {
541
+ zigbeeModel: ['LTA009'],
542
+ model: '9290024684',
543
+ vendor: 'Philips',
544
+ description: 'Hue white ambiance E27 1100lm with Bluetooth',
545
+ meta: {turnsOffAtBrightness1: true},
546
+ extend: hueExtend.light_onoff_brightness_colortemp(),
547
+ ota: ota.zigbeeOTA,
548
+ },
540
549
  {
541
550
  zigbeeModel: ['LTA008'],
542
551
  model: '9290022267A',
package/devices/robb.js CHANGED
@@ -80,6 +80,20 @@ module.exports = [
80
80
  meta: {multiEndpoint: true, battery: {dontDividePercentage: true}},
81
81
  whiteLabel: [{vendor: 'Sunricher', model: 'SR-ZG9001K8-DIM'}],
82
82
  },
83
+ {
84
+ zigbeeModel: ['ROB_200-025-0'],
85
+ model: 'ROB_200-025-0',
86
+ vendor: 'ROBB',
87
+ description: 'Zigbee 8 button wall switch',
88
+ fromZigbee: [fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.battery, fz.ignore_genOta],
89
+ exposes: [e.battery(), e.action([
90
+ 'on_1', 'off_1', 'brightness_move_up_1', 'brightness_move_down_1', 'brightness_stop_1',
91
+ 'on_2', 'off_2', 'brightness_move_up_2', 'brightness_move_down_2', 'brightness_stop_2',
92
+ 'on_3', 'off_3', 'brightness_move_up_3', 'brightness_move_down_3', 'brightness_stop_3',
93
+ 'on_4', 'off_4', 'brightness_move_up_4', 'brightness_move_down_4', 'brightness_stop_4'])],
94
+ toZigbee: [],
95
+ meta: {multiEndpoint: true, battery: {dontDividePercentage: true}},
96
+ },
83
97
  {
84
98
  zigbeeModel: ['ZG2833K4_EU06', 'ROB_200-008', 'ROB_200-008-0'],
85
99
  model: 'ROB_200-008-0',
package/devices/tuya.js CHANGED
@@ -135,7 +135,7 @@ module.exports = [
135
135
  },
136
136
  {
137
137
  fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3000_4whigl8i'},
138
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_4whigl8i'}],
138
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_4whigl8i'}, {modelID: 'TS0501B', manufacturerName: '_TZ3210_9q49basr'}],
139
139
  model: 'TS0501B',
140
140
  description: 'Zigbee light',
141
141
  vendor: 'TuYa',
package/devices/xiaomi.js CHANGED
@@ -688,6 +688,37 @@ module.exports = [
688
688
  onEvent: preventReset,
689
689
  ota: ota.zigbeeOTA,
690
690
  },
691
+ {
692
+ zigbeeModel: ['lumi.switch.b2nacn01'],
693
+ model: 'QBKG20LM',
694
+ vendor: 'Xiaomi',
695
+ description: 'Aqara smart wall switch T1 (with neutral, double rocker)',
696
+ fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_multistate_action, fz.xiaomi_switch_opple_basic],
697
+ toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
698
+ tz.xiaomi_led_disabled_night],
699
+ meta: {multiEndpoint: true},
700
+ endpoint: (device) => {
701
+ return {'left': 1, 'right': 2};
702
+ },
703
+ exposes: [
704
+ e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
705
+ e.power().withAccess(ea.STATE_GET), e.energy(), e.voltage().withAccess(ea.STATE),
706
+ e.power_outage_memory(), e.led_disabled_night(), e.temperature().withAccess(ea.STATE),
707
+ e.action([
708
+ 'single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
709
+ exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
710
+ .withDescription('Decoupled mode for left button')
711
+ .withEndpoint('left'),
712
+ exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
713
+ .withDescription('Decoupled mode for right button')
714
+ .withEndpoint('right'),
715
+ ],
716
+ configure: async (device, coordinatorEndpoint, logger) => {
717
+ await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
718
+ },
719
+ onEvent: preventReset,
720
+ ota: ota.zigbeeOTA,
721
+ },
691
722
  {
692
723
  zigbeeModel: ['lumi.sens', 'lumi.sensor_ht'],
693
724
  model: 'WSDCGQ01LM',
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.281",
3
+ "version": "14.0.282",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.281",
3
+ "version": "14.0.282",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [