zigbee-herdsman-converters 15.0.90 → 15.0.92
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/devices/bosch.js +27 -0
- package/devices/climax.js +2 -2
- package/devices/heimgard_technologies.js +79 -0
- package/devices/niko.js +32 -12
- package/devices/tuya.js +77 -4
- package/devices/xiaomi.js +18 -0
- package/devices/zemismart.js +1 -1
- package/lib/tuya.js +1 -1
- package/package.json +2 -2
- package/devices/home_control_as.js +0 -27
package/devices/bosch.js
CHANGED
|
@@ -4,6 +4,7 @@ const fz = require('../converters/fromZigbee');
|
|
|
4
4
|
const tz = require('../converters/toZigbee');
|
|
5
5
|
const reporting = require('../lib/reporting');
|
|
6
6
|
const utils = require('../lib/utils');
|
|
7
|
+
const extend = require('../lib/extend');
|
|
7
8
|
const constants = require('../lib/constants');
|
|
8
9
|
const ota = require('../lib/ota');
|
|
9
10
|
const e = exposes.presets;
|
|
@@ -737,6 +738,32 @@ const definition = [
|
|
|
737
738
|
},
|
|
738
739
|
exposes: [e.switch(), e.power_on_behavior(), e.power(), e.energy()],
|
|
739
740
|
},
|
|
741
|
+
{
|
|
742
|
+
zigbeeModel: ['RBSH-MMS-ZB-EU'],
|
|
743
|
+
model: 'BMCT-SLZ',
|
|
744
|
+
vendor: 'Bosch',
|
|
745
|
+
description: 'Light/shutter control II',
|
|
746
|
+
extend: extend.switch(),
|
|
747
|
+
exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2')],
|
|
748
|
+
endpoint: (device) => {
|
|
749
|
+
return {'l1': 2, 'l2': 3};
|
|
750
|
+
},
|
|
751
|
+
meta: {multiEndpoint: true},
|
|
752
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
753
|
+
// Configuration values:
|
|
754
|
+
// 0x0000 0x0001
|
|
755
|
+
// Roller Shutter 1 3
|
|
756
|
+
// Window Blind 2 3
|
|
757
|
+
// Light Switch 4 3
|
|
758
|
+
|
|
759
|
+
// Configure device as dual switch.
|
|
760
|
+
// Device will perform a rejoin after this write
|
|
761
|
+
await device.getEndpoint(1).write(0xfca0, {0x0000: {value: 0x04, type: 0x30}, 0x0001: {value: 0x03, type: 0x30}});
|
|
762
|
+
|
|
763
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
764
|
+
await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
|
|
765
|
+
},
|
|
766
|
+
},
|
|
740
767
|
];
|
|
741
768
|
|
|
742
769
|
module.exports = definition;
|
package/devices/climax.js
CHANGED
|
@@ -82,14 +82,14 @@ module.exports = [
|
|
|
82
82
|
vendor: 'Climax',
|
|
83
83
|
description: 'Smart siren',
|
|
84
84
|
fromZigbee: [fz.battery, fz.ias_wd, fz.ias_enroll, fz.ias_siren],
|
|
85
|
-
toZigbee: [tz.warning_simple, tz.ias_max_duration, tz.warning],
|
|
85
|
+
toZigbee: [tz.warning_simple, tz.ias_max_duration, tz.warning, tz.squawk],
|
|
86
86
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
87
87
|
const endpoint = device.getEndpoint(1);
|
|
88
88
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'ssIasZone', 'ssIasWd']);
|
|
89
89
|
await endpoint.read('ssIasZone', ['zoneState', 'iasCieAddr', 'zoneId']);
|
|
90
90
|
await endpoint.read('ssIasWd', ['maxDuration']);
|
|
91
91
|
},
|
|
92
|
-
exposes: [e.battery_low(), e.tamper(), e.warning(),
|
|
92
|
+
exposes: [e.battery_low(), e.tamper(), e.warning(), e.squawk(),
|
|
93
93
|
exposes.numeric('max_duration', ea.ALL).withUnit('s').withValueMin(0).withValueMax(600).withDescription('Duration of Siren'),
|
|
94
94
|
exposes.binary('alarm', ea.SET, 'START', 'OFF').withDescription('Manual start of siren')],
|
|
95
95
|
},
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const tz = require('../converters/toZigbee');
|
|
4
|
+
const reporting = require('../lib/reporting');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
const ota = require('../lib/ota');
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
zigbeeModel: ['HC-SLM-1'],
|
|
11
|
+
model: 'HC-SLM-1',
|
|
12
|
+
vendor: 'Heimgard Technologies',
|
|
13
|
+
description: 'Wattle door lock pro',
|
|
14
|
+
fromZigbee: [fz.lock, fz.battery],
|
|
15
|
+
toZigbee: [tz.lock, tz.lock_auto_relock_time, tz.lock_sound_volume],
|
|
16
|
+
ota: ota.zigbeeOTA,
|
|
17
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
+
const endpoint = device.getEndpoint(1);
|
|
19
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
20
|
+
await reporting.lockState(endpoint);
|
|
21
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
22
|
+
await endpoint.read('closuresDoorLock', ['lockState', 'soundVolume']);
|
|
23
|
+
},
|
|
24
|
+
exposes: [
|
|
25
|
+
e.lock(), e.battery(), e.auto_relock_time().withValueMin(0).withValueMax(3600), e.sound_volume()],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
zigbeeModel: ['HC-IWDIM-1'],
|
|
29
|
+
model: 'HC-IWDIM-1',
|
|
30
|
+
vendor: 'Heimgard Technologies',
|
|
31
|
+
description: 'Dimmer',
|
|
32
|
+
fromZigbee: [fz.on_off, fz.brightness, fz.electrical_measurement, fz.metering],
|
|
33
|
+
toZigbee: [tz.on_off, tz.light_brightness_move, tz.light_onoff_brightness],
|
|
34
|
+
ota: ota.zigbeeOTA,
|
|
35
|
+
exposes: [e.light_brightness(), e.power(), e.current(), e.voltage(), e.energy()],
|
|
36
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
37
|
+
const endpoint = device.getEndpoint(1);
|
|
38
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'haElectricalMeasurement', 'seMetering']);
|
|
39
|
+
await reporting.rmsVoltage(endpoint, {change: 2});
|
|
40
|
+
await reporting.rmsCurrent(endpoint, {change: 5});
|
|
41
|
+
await reporting.activePower(endpoint, {change: 2});
|
|
42
|
+
await reporting.currentSummDelivered(endpoint, 2);
|
|
43
|
+
await reporting.onOff(endpoint);
|
|
44
|
+
await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor']);
|
|
45
|
+
await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
|
|
46
|
+
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
47
|
+
await endpoint.read('seMetering', ['unitOfMeasure', 'multiplier', 'divisor']);
|
|
48
|
+
device.save();
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
zigbeeModel: ['HT-MOT-2'],
|
|
53
|
+
model: 'HT-MOT-2',
|
|
54
|
+
vendor: 'Heimgard Technologies',
|
|
55
|
+
description: 'Motion sensor',
|
|
56
|
+
fromZigbee: [fz.ias_occupancy_alarm_1, fz.ias_occupancy_alarm_1_report, fz.battery],
|
|
57
|
+
toZigbee: [tz.identify],
|
|
58
|
+
exposes: [e.battery(), e.tamper(), e.occupancy()],
|
|
59
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
60
|
+
const endpoint = device.getEndpoint(1);
|
|
61
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
62
|
+
await reporting.batteryVoltage(endpoint);
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
zigbeeModel: ['HC-IWSWI-1'],
|
|
67
|
+
model: 'HC-IWSWI-1',
|
|
68
|
+
vendor: 'Heimgard Technologies',
|
|
69
|
+
description: 'In wall light switch',
|
|
70
|
+
fromZigbee: [fz.on_off],
|
|
71
|
+
toZigbee: [tz.identify, tz.on_off],
|
|
72
|
+
exposes: [e.switch()],
|
|
73
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
74
|
+
const endpoint = device.getEndpoint(1);
|
|
75
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
76
|
+
await reporting.onOff(endpoint);
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
package/devices/niko.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const exposes = require('../lib/exposes');
|
|
2
2
|
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
|
+
const utils = require('../lib/utils');
|
|
4
5
|
const reporting = require('../lib/reporting');
|
|
5
6
|
const e = exposes.presets;
|
|
6
7
|
const ea = exposes.access;
|
|
@@ -13,9 +14,8 @@ const local = {
|
|
|
13
14
|
convert: (model, msg, publish, options, meta) => {
|
|
14
15
|
const state = {};
|
|
15
16
|
if (msg.data.hasOwnProperty('switchOperationMode')) {
|
|
16
|
-
const operationModeProperty = `operation_mode${meta.endpoint_name ? `_${meta.endpoint_name}` : ''}`;
|
|
17
17
|
const operationModeMap = {0x02: 'control_relay', 0x01: 'decoupled', 0x00: 'unknown'};
|
|
18
|
-
state[
|
|
18
|
+
state['operation_mode'] = operationModeMap[msg.data.switchOperationMode];
|
|
19
19
|
}
|
|
20
20
|
return state;
|
|
21
21
|
},
|
|
@@ -29,9 +29,22 @@ const local = {
|
|
|
29
29
|
if (msg.data.hasOwnProperty('switchAction')) {
|
|
30
30
|
// NOTE: a single press = two seperate values reported, 16 followed by 64
|
|
31
31
|
// a hold/release cyle = three seperate values, 16, 32, and 48
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
const actionMap = (model.model == '552-721X1') ? {
|
|
33
|
+
16: null,
|
|
34
|
+
64: 'single',
|
|
35
|
+
32: 'hold',
|
|
36
|
+
48: 'release',
|
|
37
|
+
} : {
|
|
38
|
+
16: null,
|
|
39
|
+
64: 'single_left',
|
|
40
|
+
32: 'hold_left',
|
|
41
|
+
48: 'release_left',
|
|
42
|
+
4096: 'single_right',
|
|
43
|
+
8192: 'hold_right',
|
|
44
|
+
12288: 'release_right',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
state['action'] = actionMap[msg.data.switchAction];
|
|
35
48
|
}
|
|
36
49
|
return state;
|
|
37
50
|
},
|
|
@@ -75,12 +88,18 @@ const local = {
|
|
|
75
88
|
if (!operationModeLookup.hasOwnProperty(value)) {
|
|
76
89
|
throw new Error(`operation_mode was called with an invalid value (${value})`);
|
|
77
90
|
} else {
|
|
78
|
-
await
|
|
91
|
+
await utils.enforceEndpoint(entity, key, meta).write(
|
|
92
|
+
'manuSpecificNiko1',
|
|
93
|
+
{'switchOperationMode': operationModeLookup[value]},
|
|
94
|
+
);
|
|
79
95
|
return {state: {operation_mode: value.toLowerCase()}};
|
|
80
96
|
}
|
|
81
97
|
},
|
|
82
98
|
convertGet: async (entity, key, meta) => {
|
|
83
|
-
await
|
|
99
|
+
await utils.enforceEndpoint(entity, key, meta).read(
|
|
100
|
+
'manuSpecificNiko1',
|
|
101
|
+
['switchOperationMode'],
|
|
102
|
+
);
|
|
84
103
|
},
|
|
85
104
|
},
|
|
86
105
|
switch_led_enable: {
|
|
@@ -259,7 +278,7 @@ module.exports = [
|
|
|
259
278
|
endpoint: (device) => {
|
|
260
279
|
return {'l1': 1, 'l2': 2};
|
|
261
280
|
},
|
|
262
|
-
meta: {
|
|
281
|
+
meta: {multiEndpointEnforce: {'operation_mode': 1}},
|
|
263
282
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
264
283
|
const ep1 = device.getEndpoint(1);
|
|
265
284
|
const ep2 = device.getEndpoint(2);
|
|
@@ -272,10 +291,11 @@ module.exports = [
|
|
|
272
291
|
},
|
|
273
292
|
exposes: [
|
|
274
293
|
e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
|
|
275
|
-
e.action([
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
294
|
+
e.action([
|
|
295
|
+
'single_left', 'hold_left', 'release_left',
|
|
296
|
+
'single_right', 'hold_right', 'release_right',
|
|
297
|
+
]),
|
|
298
|
+
exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']),
|
|
279
299
|
exposes.binary('led_enable', ea.ALL, true, false).withEndpoint('l1').withDescription('Enable LED'),
|
|
280
300
|
exposes.binary('led_enable', ea.ALL, true, false).withEndpoint('l2').withDescription('Enable LED'),
|
|
281
301
|
exposes.binary('led_state', ea.ALL, 'ON', 'OFF').withEndpoint('l1').withDescription('LED State'),
|
package/devices/tuya.js
CHANGED
|
@@ -721,6 +721,24 @@ const fzLocal = {
|
|
|
721
721
|
return result;
|
|
722
722
|
},
|
|
723
723
|
},
|
|
724
|
+
TS011F_electrical_measurement: {
|
|
725
|
+
...fz.electrical_measurement,
|
|
726
|
+
convert: (model, msg, publish, options, meta) => {
|
|
727
|
+
const result = fz.electrical_measurement.convert(model, msg, publish, options, meta);
|
|
728
|
+
|
|
729
|
+
// Skip the first reported 0 values as this may be a false measurement
|
|
730
|
+
// https://github.com/Koenkk/zigbee2mqtt/issues/16709#issuecomment-1509599046
|
|
731
|
+
if (['_TZ3000_gvn91tmx', '_TZ3000_amdymr7l'].includes(meta.device.manufacturerName)) {
|
|
732
|
+
for (const key of ['power', 'current', 'voltage']) {
|
|
733
|
+
if (result[key] === 0 && globalStore.getValue(msg.endpoint, key) !== 0) {
|
|
734
|
+
delete result[key];
|
|
735
|
+
}
|
|
736
|
+
globalStore.putValue(msg.endpoint, key, result[key]);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
return result;
|
|
740
|
+
},
|
|
741
|
+
},
|
|
724
742
|
};
|
|
725
743
|
|
|
726
744
|
module.exports = [
|
|
@@ -787,6 +805,7 @@ module.exports = [
|
|
|
787
805
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bq5c8xfe'},
|
|
788
806
|
{modelID: 'TS0601', manufacturerName: '_TZE200_bjawzodf'},
|
|
789
807
|
{modelID: 'TS0601', manufacturerName: '_TZE200_qyflbnbj'},
|
|
808
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_vs0skpuc'},
|
|
790
809
|
{modelID: 'TS0601', manufacturerName: '_TZE200_9yapgbuv'},
|
|
791
810
|
{modelID: 'TS0601', manufacturerName: '_TZE200_zl1kmjqx'}],
|
|
792
811
|
model: 'TS0601_temperature_humidity_sensor',
|
|
@@ -1537,6 +1556,37 @@ module.exports = [
|
|
|
1537
1556
|
],
|
|
1538
1557
|
},
|
|
1539
1558
|
},
|
|
1559
|
+
{
|
|
1560
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_mwvfvw8g']),
|
|
1561
|
+
model: 'TS0601_switch_6_gang',
|
|
1562
|
+
vendor: 'TuYa',
|
|
1563
|
+
description: '6 gang switch',
|
|
1564
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
1565
|
+
toZigbee: [tuya.tz.datapoints],
|
|
1566
|
+
configure: tuya.configureMagicPacket,
|
|
1567
|
+
exposes: [
|
|
1568
|
+
tuya.exposes.switch().withEndpoint('l1'),
|
|
1569
|
+
tuya.exposes.switch().withEndpoint('l2'),
|
|
1570
|
+
tuya.exposes.switch().withEndpoint('l3'),
|
|
1571
|
+
tuya.exposes.switch().withEndpoint('l4'),
|
|
1572
|
+
tuya.exposes.switch().withEndpoint('l5'),
|
|
1573
|
+
tuya.exposes.switch().withEndpoint('l6'),
|
|
1574
|
+
],
|
|
1575
|
+
endpoint: (device) => {
|
|
1576
|
+
return {'l1': 1, 'l2': 1, 'l3': 1, 'l4': 1, 'l5': 1, 'l6': 1};
|
|
1577
|
+
},
|
|
1578
|
+
meta: {
|
|
1579
|
+
multiEndpoint: true,
|
|
1580
|
+
tuyaDatapoints: [
|
|
1581
|
+
[1, 'state_l1', tuya.valueConverter.onOff],
|
|
1582
|
+
[2, 'state_l2', tuya.valueConverter.onOff],
|
|
1583
|
+
[3, 'state_l3', tuya.valueConverter.onOff],
|
|
1584
|
+
[4, 'state_l4', tuya.valueConverter.onOff],
|
|
1585
|
+
[5, 'state_l5', tuya.valueConverter.onOff],
|
|
1586
|
+
[6, 'state_l6', tuya.valueConverter.onOff],
|
|
1587
|
+
],
|
|
1588
|
+
},
|
|
1589
|
+
},
|
|
1540
1590
|
{
|
|
1541
1591
|
fingerprint: [
|
|
1542
1592
|
{modelID: 'TS0601', manufacturerName: '_TZE200_nkjintbl'},
|
|
@@ -2069,7 +2119,7 @@ module.exports = [
|
|
|
2069
2119
|
},
|
|
2070
2120
|
},
|
|
2071
2121
|
{
|
|
2072
|
-
fingerprint:
|
|
2122
|
+
fingerprint: tuya.fingerprint('TS0004', ['_TZ3000_ltt60asa', '_TZ3000_5ajpkyq6']),
|
|
2073
2123
|
model: 'TS0004_switch_module',
|
|
2074
2124
|
vendor: 'TuYa',
|
|
2075
2125
|
description: '4 gang switch module',
|
|
@@ -2652,7 +2702,9 @@ module.exports = [
|
|
|
2652
2702
|
{vendor: 'MatSee Plus', model: 'PJ-ZSW01'}, {vendor: 'MODEMIX', model: 'MOD037'}, {vendor: 'MODEMIX', model: 'MOD048'},
|
|
2653
2703
|
{vendor: 'Coswall', model: 'CS-AJ-DE2U-ZG-11'}, {vendor: 'Aubess', model: 'TS011F_plug_1'}, {vendor: 'Immax', model: '07752L'}],
|
|
2654
2704
|
ota: ota.zigbeeOTA,
|
|
2655
|
-
extend: tuya.extend.switch({
|
|
2705
|
+
extend: tuya.extend.switch({
|
|
2706
|
+
electricalMeasurements: true, electricalMeasurementsFzConverter: fzLocal.TS011F_electrical_measurement,
|
|
2707
|
+
powerOutageMemory: true, indicatorMode: true, childLock: true}),
|
|
2656
2708
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
2657
2709
|
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
2658
2710
|
const endpoint = device.getEndpoint(1);
|
|
@@ -2724,7 +2776,7 @@ module.exports = [
|
|
|
2724
2776
|
},
|
|
2725
2777
|
},
|
|
2726
2778
|
{
|
|
2727
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ntcy3xu1'
|
|
2779
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ntcy3xu1']),
|
|
2728
2780
|
model: 'TS0601_smoke_1',
|
|
2729
2781
|
vendor: 'TuYa',
|
|
2730
2782
|
description: 'Smoke sensor',
|
|
@@ -2798,7 +2850,7 @@ module.exports = [
|
|
|
2798
2850
|
zigbeeModel: ['5p1vj8r'],
|
|
2799
2851
|
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_t5p1vj8r', '_TZE200_uebojraa', '_TZE200_vzekyi4c', '_TZE200_yh7aoahi',
|
|
2800
2852
|
'_TZE200_dnz6yvl2', '_TZE200_dq1mfjug']),
|
|
2801
|
-
model: '
|
|
2853
|
+
model: 'TS0601_smoke_4',
|
|
2802
2854
|
vendor: 'TuYa',
|
|
2803
2855
|
description: 'Smoke sensor',
|
|
2804
2856
|
fromZigbee: [tuya.fz.datapoints],
|
|
@@ -2812,6 +2864,27 @@ module.exports = [
|
|
|
2812
2864
|
],
|
|
2813
2865
|
},
|
|
2814
2866
|
},
|
|
2867
|
+
{
|
|
2868
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ytibqbra']),
|
|
2869
|
+
model: 'TS0601_smoke_5',
|
|
2870
|
+
vendor: 'TuYa',
|
|
2871
|
+
description: 'Smoke sensor',
|
|
2872
|
+
fromZigbee: [tuya.fz.datapoints],
|
|
2873
|
+
toZigbee: [tuya.tz.datapoints],
|
|
2874
|
+
configure: tuya.configureMagicPacket,
|
|
2875
|
+
exposes: [e.smoke(), e.tamper(), e.battery(), tuya.exposes.faultAlarm(),
|
|
2876
|
+
tuya.exposes.silence(), exposes.binary('alarm', ea.STATE_SET, 'ON', 'OFF').withDescription('Enable the alarm')],
|
|
2877
|
+
meta: {
|
|
2878
|
+
tuyaDatapoints: [
|
|
2879
|
+
[1, 'smoke', tuya.valueConverter.trueFalse0],
|
|
2880
|
+
[4, 'tamper', tuya.valueConverter.raw],
|
|
2881
|
+
[11, 'fault_alarm', tuya.valueConverter.trueFalse1],
|
|
2882
|
+
[15, 'battery', tuya.valueConverter.raw],
|
|
2883
|
+
[16, 'silence', tuya.valueConverter.raw],
|
|
2884
|
+
[17, 'alarm', tuya.valueConverter.onOff],
|
|
2885
|
+
],
|
|
2886
|
+
},
|
|
2887
|
+
},
|
|
2815
2888
|
{
|
|
2816
2889
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}],
|
|
2817
2890
|
model: 'SA12IZL',
|
package/devices/xiaomi.js
CHANGED
|
@@ -3155,6 +3155,24 @@ module.exports = [
|
|
|
3155
3155
|
exposes: [e.battery(), e.battery_voltage(), e.action(['single', 'double', 'hold', 'release']),
|
|
3156
3156
|
e.device_temperature(), e.power_outage_count()],
|
|
3157
3157
|
},
|
|
3158
|
+
{
|
|
3159
|
+
zigbeeModel: ['lumi.remote.b286acn03'],
|
|
3160
|
+
model: 'WXKG04LM',
|
|
3161
|
+
vendor: 'Xiaomi',
|
|
3162
|
+
description: 'Aqara T1 double rocker wireless remote switch',
|
|
3163
|
+
meta: {battery: {voltageToPercentage: '3V_2850_3000'}},
|
|
3164
|
+
fromZigbee: [fz.xiaomi_basic, fz.aqara_opple_multistate, fz.aqara_opple],
|
|
3165
|
+
toZigbee: [],
|
|
3166
|
+
endpoint: (device) => {
|
|
3167
|
+
return {left: 1, right: 2, both: 3};
|
|
3168
|
+
},
|
|
3169
|
+
exposes: [e.battery(), e.battery_voltage(), e.action([
|
|
3170
|
+
'button_1_hold', 'button_1_release', 'button_1_single', 'button_1_double', 'button_1_triple',
|
|
3171
|
+
'button_2_hold', 'button_2_release', 'button_2_single', 'button_2_double', 'button_2_triple',
|
|
3172
|
+
'button_3_hold', 'button_3_release', 'button_3_single', 'button_3_double', 'button_3_triple',
|
|
3173
|
+
])],
|
|
3174
|
+
ota: ota.zigbeeOTA,
|
|
3175
|
+
},
|
|
3158
3176
|
{
|
|
3159
3177
|
zigbeeModel: ['lumi.remote.cagl02'],
|
|
3160
3178
|
model: 'CTP-R01',
|
package/devices/zemismart.js
CHANGED
|
@@ -199,7 +199,7 @@ module.exports = [
|
|
|
199
199
|
exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}],
|
|
202
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}, {modelID: 'TS0601', manufacturerName: '_TZE200_shkxsgis'}],
|
|
203
203
|
model: 'TB26-4',
|
|
204
204
|
vendor: 'Zemismart',
|
|
205
205
|
description: '4-gang smart wall switch',
|
package/lib/tuya.js
CHANGED
|
@@ -1909,7 +1909,7 @@ const tuyaExtend = {
|
|
|
1909
1909
|
}
|
|
1910
1910
|
|
|
1911
1911
|
if (options.electricalMeasurements) {
|
|
1912
|
-
fromZigbee.push(fz.electrical_measurement, fz.metering);
|
|
1912
|
+
fromZigbee.push((options.electricalMeasurementsFzConverter || fz.electrical_measurement), fz.metering);
|
|
1913
1913
|
exposes.push(e.power(), e.current(), e.voltage(), e.energy());
|
|
1914
1914
|
}
|
|
1915
1915
|
if (options.childLock) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zigbee-herdsman-converters",
|
|
3
|
-
"version": "15.0.
|
|
3
|
+
"version": "15.0.92",
|
|
4
4
|
"description": "Collection of device converters to be used with zigbee-herdsman",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"files": [
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"buffer-crc32": "^0.2.13",
|
|
39
39
|
"https-proxy-agent": "^5.0.1",
|
|
40
40
|
"tar-stream": "^3.0.0",
|
|
41
|
-
"zigbee-herdsman": "^0.14.
|
|
41
|
+
"zigbee-herdsman": "^0.14.107"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"eslint": "*",
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
const exposes = require('../lib/exposes');
|
|
2
|
-
const fz = require('../converters/fromZigbee');
|
|
3
|
-
const tz = require('../converters/toZigbee');
|
|
4
|
-
const reporting = require('../lib/reporting');
|
|
5
|
-
const e = exposes.presets;
|
|
6
|
-
const ota = require('../lib/ota');
|
|
7
|
-
|
|
8
|
-
module.exports = [
|
|
9
|
-
{
|
|
10
|
-
zigbeeModel: ['HC-SLM-1'],
|
|
11
|
-
model: 'HC-SLM-1',
|
|
12
|
-
vendor: 'Home Control AS',
|
|
13
|
-
description: 'Heimgard (Wattle) door lock pro',
|
|
14
|
-
fromZigbee: [fz.lock, fz.battery],
|
|
15
|
-
toZigbee: [tz.lock, tz.lock_auto_relock_time, tz.lock_sound_volume],
|
|
16
|
-
ota: ota.zigbeeOTA,
|
|
17
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
18
|
-
const endpoint = device.getEndpoint(1);
|
|
19
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
20
|
-
await reporting.lockState(endpoint);
|
|
21
|
-
await reporting.batteryPercentageRemaining(endpoint);
|
|
22
|
-
await endpoint.read('closuresDoorLock', ['lockState', 'soundVolume']);
|
|
23
|
-
},
|
|
24
|
-
exposes: [
|
|
25
|
-
e.lock(), e.battery(), e.auto_relock_time().withValueMin(0).withValueMax(3600), e.sound_volume()],
|
|
26
|
-
},
|
|
27
|
-
];
|