zigbee-herdsman-converters 14.0.591 → 14.0.594
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/climax.js +1 -1
- package/devices/develco.js +30 -1
- package/devices/ecodim.js +3 -3
- package/devices/gewiss.js +2 -2
- package/devices/giex.js +4 -1
- package/devices/istar.js +8 -0
- package/devices/lidl.js +8 -0
- package/devices/philips.js +1 -1
- package/devices/skydance.js +9 -0
- package/devices/tuya.js +15 -7
- package/devices/woolley.js +17 -0
- package/devices/xiaomi.js +44 -24
- package/lib/utils.js +4 -1
- package/lib/xiaomi.js +3 -2
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -1556,7 +1556,7 @@ const converters = {
|
|
|
1556
1556
|
result[postfixWithEndpointName('tilt', msg, model, meta)] = invert ? value : 100 - value;
|
|
1557
1557
|
if (coverStateFromTilt) {
|
|
1558
1558
|
result[postfixWithEndpointName('state', msg, model, meta)] =
|
|
1559
|
-
invert ? (value === 100 ? '
|
|
1559
|
+
invert ? (value === 100 ? 'OPEN' : 'CLOSE') : (value === 0 ? 'OPEN' : 'CLOSE');
|
|
1560
1560
|
}
|
|
1561
1561
|
}
|
|
1562
1562
|
return result;
|
package/devices/climax.js
CHANGED
|
@@ -91,7 +91,7 @@ module.exports = [
|
|
|
91
91
|
},
|
|
92
92
|
exposes: [e.battery_low(), e.tamper(), e.warning(),
|
|
93
93
|
exposes.numeric('max_duration', ea.ALL).withUnit('s').withValueMin(0).withValueMax(600).withDescription('Duration of Siren'),
|
|
94
|
-
exposes.binary('alarm', ea.SET, '
|
|
94
|
+
exposes.binary('alarm', ea.SET, 'START', 'OFF').withDescription('Manual start of siren')],
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
zigbeeModel: ['WS15_00.00.00.14TC'],
|
package/devices/develco.js
CHANGED
|
@@ -8,6 +8,35 @@ const ota = require('../lib/ota');
|
|
|
8
8
|
const e = exposes.presets;
|
|
9
9
|
const ea = exposes.access;
|
|
10
10
|
|
|
11
|
+
const fzLocal = {
|
|
12
|
+
// SPLZB-134 reports strange values sometimes
|
|
13
|
+
// https://github.com/Koenkk/zigbee2mqtt/issues/13329
|
|
14
|
+
SPLZB134_electrical_measurement: {
|
|
15
|
+
...fz.electrical_measurement,
|
|
16
|
+
convert: (model, msg, publish, options, meta) => {
|
|
17
|
+
if (msg.data.rmsVoltage !== 0xFFFF && msg.data.rmsCurrent !== 0xFFFF && msg.data.activePower !== -0x8000) {
|
|
18
|
+
return fz.electrical_measurement.convert(model, msg, publish, options, meta);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
SPLZB134_device_temperature: {
|
|
23
|
+
...fz.device_temperature,
|
|
24
|
+
convert: (model, msg, publish, options, meta) => {
|
|
25
|
+
if (msg.data.currentTemperature !== -0x8000) {
|
|
26
|
+
return fz.device_temperature.convert(model, msg, publish, options, meta);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
SPLZB134_metering: {
|
|
31
|
+
...fz.metering,
|
|
32
|
+
convert: (model, msg, publish, options, meta) => {
|
|
33
|
+
if (msg.data.instantaneousDemand !== -0x800000) {
|
|
34
|
+
return fz.metering.convert(model, msg, publish, options, meta);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
11
40
|
module.exports = [
|
|
12
41
|
{
|
|
13
42
|
zigbeeModel: ['SPLZB-131'],
|
|
@@ -65,7 +94,7 @@ module.exports = [
|
|
|
65
94
|
model: 'SPLZB-134',
|
|
66
95
|
vendor: 'Develco',
|
|
67
96
|
description: 'Power plug (type G)',
|
|
68
|
-
fromZigbee: [fz.on_off,
|
|
97
|
+
fromZigbee: [fz.on_off, fzLocal.SPLZB134_electrical_measurement, fzLocal.SPLZB134_metering, fzLocal.SPLZB134_device_temperature],
|
|
69
98
|
toZigbee: [tz.on_off],
|
|
70
99
|
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy(), e.device_temperature()],
|
|
71
100
|
configure: async (device, coordinatorEndpoint, logger) => {
|
package/devices/ecodim.js
CHANGED
|
@@ -8,9 +8,9 @@ module.exports = [
|
|
|
8
8
|
{
|
|
9
9
|
fingerprint: [
|
|
10
10
|
{type: 'Router', manufacturerName: 'EcoDim BV', modelID: 'EcoDim-Zigbee 3.0', endpoints: [
|
|
11
|
-
{ID: 1, profileID: 260,
|
|
12
|
-
{ID: 2, profileID: 260,
|
|
13
|
-
{ID: 242, profileID: 41440,
|
|
11
|
+
{ID: 1, profileID: 260, inputClusters: [0, 3, 4, 5, 6, 8, 2821, 4096], outputClusters: [25]},
|
|
12
|
+
{ID: 2, profileID: 260, inputClusters: [0, 3, 4, 5, 6, 8], outputClusters: []},
|
|
13
|
+
{ID: 242, profileID: 41440, inputClusters: [], outputClusters: [33]},
|
|
14
14
|
]},
|
|
15
15
|
],
|
|
16
16
|
model: 'Eco-Dim.05',
|
package/devices/gewiss.js
CHANGED
|
@@ -39,8 +39,8 @@ module.exports = [
|
|
|
39
39
|
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
40
40
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
41
41
|
const endpoint = device.getEndpoint(1);
|
|
42
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['
|
|
43
|
-
await reporting.
|
|
42
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresWindowCovering']);
|
|
43
|
+
await reporting.currentPositionLiftPercentage(endpoint);
|
|
44
44
|
},
|
|
45
45
|
exposes: [e.cover_position()],
|
|
46
46
|
},
|
package/devices/giex.js
CHANGED
|
@@ -104,7 +104,10 @@ const tzLocal = {
|
|
|
104
104
|
|
|
105
105
|
module.exports = [
|
|
106
106
|
{
|
|
107
|
-
fingerprint: [
|
|
107
|
+
fingerprint: [
|
|
108
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_sh1btabb'},
|
|
109
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_a7sghmms'},
|
|
110
|
+
],
|
|
108
111
|
model: 'QT06',
|
|
109
112
|
vendor: 'GiEX',
|
|
110
113
|
description: 'Water irrigation valve',
|
package/devices/istar.js
CHANGED
|
@@ -9,4 +9,12 @@ module.exports = [
|
|
|
9
9
|
extend: extend.light_onoff_brightness(),
|
|
10
10
|
meta: {turnsOffAtBrightness1: true},
|
|
11
11
|
},
|
|
12
|
+
{
|
|
13
|
+
zigbeeModel: ['iStar CCT Light'],
|
|
14
|
+
model: 'SCCV2403-2',
|
|
15
|
+
vendor: 'iStar',
|
|
16
|
+
description: 'Zigbee 3.0 LED controller, dimmable white spectrum',
|
|
17
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
18
|
+
meta: {turnsOffAtBrightness1: true},
|
|
19
|
+
},
|
|
12
20
|
];
|
package/devices/lidl.js
CHANGED
|
@@ -561,6 +561,14 @@ module.exports = [
|
|
|
561
561
|
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
562
562
|
},
|
|
563
563
|
},
|
|
564
|
+
{
|
|
565
|
+
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_zbabx9wh'}],
|
|
566
|
+
model: 'HG08007',
|
|
567
|
+
vendor: 'TuYa',
|
|
568
|
+
description: 'Livarno Home outdoor LED band',
|
|
569
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500], disableColorTempStartup: true}),
|
|
570
|
+
meta: {applyRedFix: true, enhancedHue: false},
|
|
571
|
+
},
|
|
564
572
|
{
|
|
565
573
|
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_z1vlyufu'}],
|
|
566
574
|
model: '14158704L',
|
package/devices/philips.js
CHANGED
|
@@ -1325,7 +1325,7 @@ module.exports = [
|
|
|
1325
1325
|
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1326
1326
|
},
|
|
1327
1327
|
{
|
|
1328
|
-
zigbeeModel: ['LTP002'],
|
|
1328
|
+
zigbeeModel: ['LTP002', '929003054901'],
|
|
1329
1329
|
model: '4023330P7',
|
|
1330
1330
|
vendor: 'Philips',
|
|
1331
1331
|
description: 'Hue white ambiance suspension Amaze',
|
package/devices/skydance.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 extend = require('../lib/extend');
|
|
4
5
|
const ea = exposes.access;
|
|
5
6
|
|
|
6
7
|
module.exports = [
|
|
@@ -49,6 +50,14 @@ module.exports = [
|
|
|
49
50
|
ea.STATE_SET).withColor(['hs']),
|
|
50
51
|
],
|
|
51
52
|
},
|
|
53
|
+
{
|
|
54
|
+
fingerprint: [{modelID: 'TS0503B', manufacturerName: '_TZB210_zdvrsts8'}],
|
|
55
|
+
model: 'WZ5_rgb_1',
|
|
56
|
+
vendor: 'TuYa',
|
|
57
|
+
description: 'Zigbee & RF 5 in 1 LED controller (RGB mode)',
|
|
58
|
+
extend: extend.light_onoff_brightness_color({supportsHS: true, preferHS: true, disableEffect: true}),
|
|
59
|
+
meta: {applyRedFix: true, enhancedHue: false},
|
|
60
|
+
},
|
|
52
61
|
{
|
|
53
62
|
fingerprint: [
|
|
54
63
|
{modelID: 'TS0601', manufacturerName: '_TZE200_3thxjahu'},
|
package/devices/tuya.js
CHANGED
|
@@ -19,7 +19,8 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
|
|
|
19
19
|
'_TZ3000_jvzvulen', '_TZ3000_mraovvmm', '_TZ3000_nfnmi125', '_TZ3000_ps3dmato', '_TZ3000_w0qqde0g', '_TZ3000_u5u4cakc',
|
|
20
20
|
'_TZ3000_rdtixbnu', '_TZ3000_typdpbpg', '_TZ3000_kx0pris5', '_TZ3000_amdymr7l', '_TZ3000_z1pnpsdo', '_TZ3000_ksw8qtmt',
|
|
21
21
|
'_TZ3000_1h2x4akh', '_TZ3000_9vo5icau', '_TZ3000_cehuw1lw', '_TZ3000_ko6v90pg', '_TZ3000_f1bapcit', '_TZ3000_cjrngdr3',
|
|
22
|
-
'_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx'
|
|
22
|
+
'_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
|
|
23
|
+
'_TZ3000_ss98ec5d', '_TZ3000_gznh2xla'];
|
|
23
24
|
|
|
24
25
|
const tzLocal = {
|
|
25
26
|
TS0504B_color: {
|
|
@@ -796,7 +797,8 @@ module.exports = [
|
|
|
796
797
|
{modelID: 'TS0503B', manufacturerName: '_TZ3210_trm3l2aw'},
|
|
797
798
|
{modelID: 'TS0503B', manufacturerName: '_TZ3210_95txyzbx'},
|
|
798
799
|
{modelID: 'TS0503B', manufacturerName: '_TZ3210_odlghna1'},
|
|
799
|
-
{modelID: 'TS0503B', manufacturerName: '_TZ3220_wp1k8xws'}
|
|
800
|
+
{modelID: 'TS0503B', manufacturerName: '_TZ3220_wp1k8xws'},
|
|
801
|
+
{modelID: 'TS0503B', manufacturerName: '_TZ3210_wp1k8xws'}],
|
|
800
802
|
model: 'TS0503B',
|
|
801
803
|
vendor: 'TuYa',
|
|
802
804
|
description: 'Zigbee RGB light',
|
|
@@ -840,14 +842,15 @@ module.exports = [
|
|
|
840
842
|
extend: extend.light_onoff_brightness(),
|
|
841
843
|
},
|
|
842
844
|
{
|
|
843
|
-
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'}
|
|
845
|
+
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'},
|
|
846
|
+
{modelID: 'TS0202', manufacturerName: '_TZ3000_lltemgsf'}],
|
|
844
847
|
model: 'TS0202_1',
|
|
845
848
|
vendor: 'TuYa',
|
|
846
849
|
description: 'Motion sensor',
|
|
847
850
|
// Requires alarm_1_with_timeout https://github.com/Koenkk/zigbee2mqtt/issues/2818#issuecomment-776119586
|
|
848
851
|
fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report],
|
|
849
852
|
toZigbee: [],
|
|
850
|
-
exposes: [e.occupancy(), e.battery_low(), e.
|
|
853
|
+
exposes: [e.occupancy(), e.battery_low(), e.linkquality()],
|
|
851
854
|
},
|
|
852
855
|
{
|
|
853
856
|
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_dr6sduka'},
|
|
@@ -2477,7 +2480,12 @@ module.exports = [
|
|
|
2477
2480
|
.withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET)
|
|
2478
2481
|
.withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat'], ea.STATE)
|
|
2479
2482
|
.withPreset(['manual', 'program']).withSensor(['internal', 'external', 'both'], ea.STATE_SET),
|
|
2480
|
-
exposes.text('schedule', ea.STATE_SET)
|
|
2483
|
+
exposes.text('schedule', ea.STATE_SET).withDescription('There are 8 periods in the schedule in total. ' +
|
|
2484
|
+
'6 for workdays and 2 for holidays. It should be set in the following format for each of the periods: ' +
|
|
2485
|
+
'`hours:minutes/temperature`. All periods should be set at once and delimited by the space symbol. ' +
|
|
2486
|
+
'For example: `06:00/20.5 08:00/15 11:30/15 13:30/15 17:00/22 22:00/15 06:00/20 22:00/15`. ' +
|
|
2487
|
+
'The thermostat doesn\'t report the schedule by itself even if you change it manually from device'),
|
|
2488
|
+
e.child_lock(), e.week(),
|
|
2481
2489
|
exposes.enum('brightness_state', ea.STATE_SET, ['off', 'low', 'medium', 'high'])
|
|
2482
2490
|
.withDescription('Screen brightness'),
|
|
2483
2491
|
exposes.binary('sound', ea.STATE_SET, 'ON', 'OFF')
|
|
@@ -2802,7 +2810,7 @@ module.exports = [
|
|
|
2802
2810
|
.withFeature(exposes.binary('over_leakage_current_trip', ea.STATE_SET, 'ON', 'OFF'))
|
|
2803
2811
|
.withFeature(exposes.binary('over_leakage_current_alarm', ea.STATE_SET, 'ON', 'OFF'))
|
|
2804
2812
|
.withFeature(exposes.binary('self_test', ea.STATE_SET, 'test', 'clear')),*/
|
|
2805
|
-
exposes.enum('clear_device_data', ea.SET, ['
|
|
2813
|
+
exposes.enum('clear_device_data', ea.SET, ['']),
|
|
2806
2814
|
],
|
|
2807
2815
|
},
|
|
2808
2816
|
{
|
|
@@ -3019,7 +3027,7 @@ module.exports = [
|
|
|
3019
3027
|
.withDescription('Favorite position of this cover'),
|
|
3020
3028
|
exposes.binary(`reverse_direction`, ea.STATE_SET, true, false).withDescription(`Inverts the cover direction`),
|
|
3021
3029
|
exposes.text('motor_type', ea.STATE),
|
|
3022
|
-
exposes.enum('report', ea.SET, ['
|
|
3030
|
+
exposes.enum('report', ea.SET, ['']),
|
|
3023
3031
|
],
|
|
3024
3032
|
},
|
|
3025
3033
|
{
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
const reporting = require('../lib/reporting');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['Z111PL0H-1JX'],
|
|
7
|
+
model: 'SA-029',
|
|
8
|
+
vendor: 'Woolley',
|
|
9
|
+
description: 'Smart Plug',
|
|
10
|
+
extend: extend.switch(),
|
|
11
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
12
|
+
const endpoint = device.getEndpoint(1);
|
|
13
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
14
|
+
await reporting.onOff(endpoint);
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
];
|
package/devices/xiaomi.js
CHANGED
|
@@ -1007,6 +1007,26 @@ module.exports = [
|
|
|
1007
1007
|
},
|
|
1008
1008
|
ota: ota.zigbeeOTA,
|
|
1009
1009
|
},
|
|
1010
|
+
{
|
|
1011
|
+
zigbeeModel: ['lumi.motion.acn001'],
|
|
1012
|
+
model: 'RTCGQ15LM',
|
|
1013
|
+
vendor: 'Xiaomi',
|
|
1014
|
+
description: 'Aqara E1 human body movement and illuminance sensor',
|
|
1015
|
+
fromZigbee: [fz.aqara_occupancy_illuminance, fz.aqara_opple, fz.battery],
|
|
1016
|
+
toZigbee: [tz.aqara_detection_interval],
|
|
1017
|
+
exposes: [e.occupancy(), e.illuminance_lux().withProperty('illuminance'),
|
|
1018
|
+
e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
|
|
1019
|
+
exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
|
|
1020
|
+
.withDescription('Time interval for detecting actions'),
|
|
1021
|
+
e.device_temperature(), e.battery(), e.battery_voltage(), e.power_outage_count(false)],
|
|
1022
|
+
meta: {battery: {voltageToPercentage: '3V_2850_3200'}},
|
|
1023
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1024
|
+
const endpoint = device.getEndpoint(1);
|
|
1025
|
+
await endpoint.read('genPowerCfg', ['batteryVoltage']);
|
|
1026
|
+
await endpoint.read('aqaraOpple', [0x0102], {manufacturerCode: 0x115f});
|
|
1027
|
+
},
|
|
1028
|
+
ota: ota.zigbeeOTA,
|
|
1029
|
+
},
|
|
1010
1030
|
{
|
|
1011
1031
|
zigbeeModel: ['lumi.motion.ac01'],
|
|
1012
1032
|
model: 'RTCZCGQ11LM',
|
|
@@ -1025,7 +1045,7 @@ module.exports = [
|
|
|
1025
1045
|
'sensor detects approaching'),
|
|
1026
1046
|
exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('Different sensitivities ' +
|
|
1027
1047
|
'means different static human body recognition rate and response speed of occupied'),
|
|
1028
|
-
exposes.enum('reset_nopresence_status', ea.SET, ['
|
|
1048
|
+
exposes.enum('reset_nopresence_status', ea.SET, ['']).withDescription('Reset the status of no presence'),
|
|
1029
1049
|
e.device_temperature(), e.power_outage_count()],
|
|
1030
1050
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1031
1051
|
const endpoint = device.getEndpoint(1);
|
|
@@ -1284,10 +1304,10 @@ module.exports = [
|
|
|
1284
1304
|
exposes.numeric('gas_density', ea.STATE_GET).withUnit('%LEL').withDescription('Value of gas concentration'),
|
|
1285
1305
|
exposes.enum('gas_sensitivity', ea.ALL, ['10%LEL', '15%LEL']).withDescription('Gas concentration value at which ' +
|
|
1286
1306
|
'an alarm is triggered ("10%LEL" is more sensitive than "15%LEL")'),
|
|
1287
|
-
exposes.enum('selftest', ea.SET, ['
|
|
1307
|
+
exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
|
|
1288
1308
|
'light and buzzer work properly)'),
|
|
1289
1309
|
exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
|
|
1290
|
-
exposes.enum('mute_buzzer', ea.SET, ['
|
|
1310
|
+
exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 10 minutes (buzzer cannot be ' +
|
|
1291
1311
|
'pre-muted, because this function only works when the alarm is triggered)'),
|
|
1292
1312
|
exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
|
|
1293
1313
|
exposes.binary('linkage_alarm', ea.ALL, true, false).withDescription('When this option is enabled and a gas leak ' +
|
|
@@ -1318,10 +1338,10 @@ module.exports = [
|
|
|
1318
1338
|
exposes: [e.smoke().withAccess(ea.STATE_GET),
|
|
1319
1339
|
exposes.numeric('smoke_density', ea.STATE_GET).withDescription('Value of smoke concentration'),
|
|
1320
1340
|
exposes.numeric('smoke_density_dbm', ea.STATE).withUnit('dB/m').withDescription('Value of smoke concentration in dB/m'),
|
|
1321
|
-
exposes.enum('selftest', ea.SET, ['
|
|
1341
|
+
exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
|
|
1322
1342
|
'light and buzzer work properly)'),
|
|
1323
1343
|
exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
|
|
1324
|
-
exposes.enum('mute_buzzer', ea.SET, ['
|
|
1344
|
+
exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 80 seconds (buzzer cannot be ' +
|
|
1325
1345
|
'pre-muted, because this function only works when the alarm is triggered)'),
|
|
1326
1346
|
exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
|
|
1327
1347
|
exposes.binary('heartbeat_indicator', ea.ALL, true, false).withDescription('When this option is enabled then in ' +
|
|
@@ -1751,37 +1771,37 @@ module.exports = [
|
|
|
1751
1771
|
},
|
|
1752
1772
|
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('center'),
|
|
1753
1773
|
e.switch().withEndpoint('right'),
|
|
1754
|
-
exposes.binary('standby_enabled', ea.
|
|
1755
|
-
exposes.enum('theme', ea.
|
|
1756
|
-
exposes.enum('beep_volume', ea.
|
|
1757
|
-
exposes.numeric('lcd_brightness', ea.
|
|
1774
|
+
exposes.binary('standby_enabled', ea.STATE_SET, true, false).withDescription('Enable standby'),
|
|
1775
|
+
exposes.enum('theme', ea.STATE_SET, ['classic', 'concise']).withDescription('Display theme'),
|
|
1776
|
+
exposes.enum('beep_volume', ea.STATE_SET, ['mute', 'low', 'medium', 'high']).withDescription('Beep volume'),
|
|
1777
|
+
exposes.numeric('lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
|
|
1758
1778
|
.withDescription('LCD brightness (will not persist if auto-brightness is enabled)'),
|
|
1759
|
-
exposes.enum('language', ea.
|
|
1760
|
-
exposes.enum('screen_saver_style', ea.
|
|
1761
|
-
exposes.numeric('standby_time', ea.
|
|
1779
|
+
exposes.enum('language', ea.STATE_SET, ['chinese', 'english']).withDescription('Interface language'),
|
|
1780
|
+
exposes.enum('screen_saver_style', ea.STATE_SET, ['classic', 'analog clock']).withDescription('Screen saver style'),
|
|
1781
|
+
exposes.numeric('standby_time', ea.STATE_SET).withValueMin(0).withValueMax(65534).withUnit('s')
|
|
1762
1782
|
.withDescription('Display standby time'),
|
|
1763
|
-
exposes.enum('font_size', ea.
|
|
1764
|
-
exposes.binary('lcd_auto_brightness_enabled', ea.
|
|
1765
|
-
exposes.enum('homepage', ea.
|
|
1766
|
-
exposes.binary('screen_saver_enabled', ea.
|
|
1767
|
-
exposes.numeric('standby_lcd_brightness', ea.
|
|
1783
|
+
exposes.enum('font_size', ea.STATE_SET, ['small', 'medium', 'large']).withDescription('Display font size'),
|
|
1784
|
+
exposes.binary('lcd_auto_brightness_enabled', ea.STATE_SET, true, false).withDescription('Enable LCD auto brightness'),
|
|
1785
|
+
exposes.enum('homepage', ea.STATE_SET, ['scene', 'feel', 'thermostat', 'switch']).withDescription('Default display homepage'),
|
|
1786
|
+
exposes.binary('screen_saver_enabled', ea.STATE_SET, true, false).withDescription('Enable screen saver'),
|
|
1787
|
+
exposes.numeric('standby_lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
|
|
1768
1788
|
.withDescription('Standby LCD brightness'),
|
|
1769
|
-
exposes.enum('available_switches', ea.
|
|
1789
|
+
exposes.enum('available_switches', ea.STATE_SET, ['none', '1', '2', '3', '1 and 2', '1 and 3', '2 and 3', 'all'])
|
|
1770
1790
|
.withDescription('Control which switches are available in the switches screen (none disables switches screen)'),
|
|
1771
1791
|
exposes.composite('switch_1_text_icon', 'switch_1_text_icon').withDescription('Switch 1 text and icon')
|
|
1772
|
-
.withFeature(exposes.enum('switch_1_icon', ea.
|
|
1792
|
+
.withFeature(exposes.enum('switch_1_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1773
1793
|
.withDescription('Icon'))
|
|
1774
|
-
.withFeature(exposes.text('switch_1_text', ea.
|
|
1794
|
+
.withFeature(exposes.text('switch_1_text', ea.STATE_SET)
|
|
1775
1795
|
.withDescription('Text')),
|
|
1776
1796
|
exposes.composite('switch_2_text_icon', 'switch_2_text_icon').withDescription('Switch 2 text and icon')
|
|
1777
|
-
.withFeature(exposes.enum('switch_2_icon', ea.
|
|
1797
|
+
.withFeature(exposes.enum('switch_2_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1778
1798
|
.withDescription('Icon'))
|
|
1779
|
-
.withFeature(exposes.text('switch_2_text', ea.
|
|
1799
|
+
.withFeature(exposes.text('switch_2_text', ea.STATE_SET)
|
|
1780
1800
|
.withDescription('Text')),
|
|
1781
1801
|
exposes.composite('switch_3_text_icon', 'switch_3_text_icon').withDescription('Switch 3 text and icon')
|
|
1782
|
-
.withFeature(exposes.enum('switch_3_icon', ea.
|
|
1802
|
+
.withFeature(exposes.enum('switch_3_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1783
1803
|
.withDescription('Icon'))
|
|
1784
|
-
.withFeature(exposes.text('switch_3_text', ea.
|
|
1804
|
+
.withFeature(exposes.text('switch_3_text', ea.STATE_SET)
|
|
1785
1805
|
.withDescription('Text'))],
|
|
1786
1806
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1787
1807
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
package/lib/utils.js
CHANGED
|
@@ -114,7 +114,10 @@ function addActionGroup(payload, msg, definition) {
|
|
|
114
114
|
|
|
115
115
|
function postfixWithEndpointName(value, msg, definition, meta) {
|
|
116
116
|
// Prevent breaking change https://github.com/Koenkk/zigbee2mqtt/issues/13451
|
|
117
|
-
if (!meta)
|
|
117
|
+
if (!meta) {
|
|
118
|
+
meta.logger.warn(`No meta passed to postfixWithEndpointName, update your external converter!`);
|
|
119
|
+
meta = {device: null};
|
|
120
|
+
}
|
|
118
121
|
if (definition.meta && definition.meta.multiEndpoint) {
|
|
119
122
|
const endpointName = definition.hasOwnProperty('endpoint') ?
|
|
120
123
|
getKey(definition.endpoint(meta.device), msg.endpoint.ID) : msg.endpoint.ID;
|
package/lib/xiaomi.js
CHANGED
|
@@ -219,7 +219,8 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
|
|
|
219
219
|
payload[`state_${mapping}`] = value === 1 ? 'ON' : 'OFF';
|
|
220
220
|
} else if (['WXKG14LM', 'WXKG16LM', 'WXKG17LM'].includes(model.model)) {
|
|
221
221
|
payload.click_mode = {1: 'fast', 2: 'multi'}[value];
|
|
222
|
-
} else if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM', 'ZNMS12LM', '
|
|
222
|
+
} else if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM', 'ZNMS12LM', 'ZNCLBL01LM', 'RTCGQ12LM', 'RTCGQ13LM', 'RTCGQ14LM',
|
|
223
|
+
'RTCGQ15LM'].includes(model.model)) {
|
|
223
224
|
// We don't know what the value means for these devices.
|
|
224
225
|
// https://github.com/Koenkk/zigbee2mqtt/issues/11126
|
|
225
226
|
// https://github.com/Koenkk/zigbee2mqtt/issues/12279
|
|
@@ -268,7 +269,7 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
|
|
|
268
269
|
mapping = 'right';
|
|
269
270
|
}
|
|
270
271
|
payload[`state_${mapping}`] = value === 1 ? 'ON' : 'OFF';
|
|
271
|
-
} else if (['RTCGQ12LM', 'RTCGQ14LM'].includes(model.model)) {
|
|
272
|
+
} else if (['RTCGQ12LM', 'RTCGQ14LM', 'RTCGQ15LM'].includes(model.model)) {
|
|
272
273
|
// Sometimes RTCGQ14LM reports high illuminance values in the dark
|
|
273
274
|
// https://github.com/Koenkk/zigbee2mqtt/issues/12596
|
|
274
275
|
const illuminance = value > 65000 ? 0 : value;
|