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.
- package/converters/fromZigbee.js +29 -3
- package/converters/toZigbee.js +4 -4
- package/devices/candeo.js +19 -0
- package/devices/nyce.js +14 -0
- package/devices/philips.js +9 -0
- package/devices/robb.js +14 -0
- package/devices/tuya.js +1 -1
- package/devices/xiaomi.js +31 -0
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -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(
|
|
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(
|
|
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
|
|
package/converters/toZigbee.js
CHANGED
|
@@ -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',
|
package/devices/philips.js
CHANGED
|
@@ -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',
|
package/npm-shrinkwrap.json
CHANGED