zigbee-herdsman-converters 14.0.592 → 14.0.595
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/climax.js +1 -1
- package/devices/develco.js +30 -1
- package/devices/ecodim.js +3 -3
- package/devices/giex.js +4 -1
- package/devices/iluminize.js +9 -1
- package/devices/istar.js +8 -0
- package/devices/lidl.js +8 -0
- package/devices/philips.js +9 -2
- package/devices/robb.js +20 -0
- package/devices/skydance.js +24 -0
- package/devices/tuya.js +15 -7
- package/devices/woolley.js +17 -0
- package/devices/xiaomi.js +34 -24
- package/lib/utils.js +4 -1
- package/lib/xiaomi.js +3 -2
- package/package.json +1 -1
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/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/iluminize.js
CHANGED
|
@@ -5,6 +5,7 @@ const extend = require('../lib/extend');
|
|
|
5
5
|
const tz = require('../converters/toZigbee');
|
|
6
6
|
const ota = require('../lib/ota');
|
|
7
7
|
const e = exposes.presets;
|
|
8
|
+
const ea = exposes.access;
|
|
8
9
|
|
|
9
10
|
module.exports = [
|
|
10
11
|
{
|
|
@@ -160,7 +161,14 @@ module.exports = [
|
|
|
160
161
|
fz.command_step, fz.command_recall, fz.command_on, fz.command_off],
|
|
161
162
|
exposes: [e.battery(), e.action([
|
|
162
163
|
'color_move', 'color_temperature_move', 'hue_move', 'hue_stop', 'brightness_step_up', 'brightness_step_down',
|
|
163
|
-
'recall_*', 'on', 'off'])
|
|
164
|
+
'recall_*', 'on', 'off']),
|
|
165
|
+
// exposes.composite('action_color', 'action_color') * At the moment not shown in Frontend correctly
|
|
166
|
+
// .withFeature(exposes.numeric('x', ea.STATE)) see: https://github.com/nurikk/zigbee2mqtt-frontend/issues/1535
|
|
167
|
+
// .withFeature(exposes.numeric('y', ea.STATE)),
|
|
168
|
+
exposes.numeric('action_color_temperature', ea.STATE).withUnit('mired'),
|
|
169
|
+
exposes.numeric('action_group', ea.STATE),
|
|
170
|
+
exposes.numeric('action_transition_time', ea.STATE),
|
|
171
|
+
exposes.text('action_color', ea.STATE)],
|
|
164
172
|
toZigbee: [],
|
|
165
173
|
meta: {multiEndpoint: true},
|
|
166
174
|
endpoint: (device) => {
|
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
|
@@ -134,6 +134,13 @@ module.exports = [
|
|
|
134
134
|
description: 'Hue gradient lightstrip',
|
|
135
135
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
136
136
|
},
|
|
137
|
+
{
|
|
138
|
+
zigbeeModel: ['929003045401'],
|
|
139
|
+
model: '929003045401',
|
|
140
|
+
vendor: 'Philips',
|
|
141
|
+
description: 'Hue Centura recessed spotlight white and color ambiance GU10 (black)',
|
|
142
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
143
|
+
},
|
|
137
144
|
{
|
|
138
145
|
zigbeeModel: ['929003045501_01', '929003045501_02', '929003045501_03'],
|
|
139
146
|
model: '929003045501',
|
|
@@ -1325,7 +1332,7 @@ module.exports = [
|
|
|
1325
1332
|
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
1326
1333
|
},
|
|
1327
1334
|
{
|
|
1328
|
-
zigbeeModel: ['LTP002'],
|
|
1335
|
+
zigbeeModel: ['LTP002', '929003054901'],
|
|
1329
1336
|
model: '4023330P7',
|
|
1330
1337
|
vendor: 'Philips',
|
|
1331
1338
|
description: 'Hue white ambiance suspension Amaze',
|
|
@@ -2071,7 +2078,7 @@ module.exports = [
|
|
|
2071
2078
|
extend: hueExtend.light_onoff_brightness_colortemp_color(),
|
|
2072
2079
|
},
|
|
2073
2080
|
{
|
|
2074
|
-
zigbeeModel: ['LCS001'],
|
|
2081
|
+
zigbeeModel: ['LCS001', '1741830P7'],
|
|
2075
2082
|
model: '1741830P7',
|
|
2076
2083
|
vendor: 'Philips',
|
|
2077
2084
|
description: 'Hue Lily outdoor spot light',
|
package/devices/robb.js
CHANGED
|
@@ -274,4 +274,24 @@ module.exports = [
|
|
|
274
274
|
await reporting.currentSummDelivered(endpoint1, {min: 60, change: 1});
|
|
275
275
|
},
|
|
276
276
|
},
|
|
277
|
+
{
|
|
278
|
+
zigbeeModel: ['ROB_200-035-0'],
|
|
279
|
+
model: 'ROB_200-035-0',
|
|
280
|
+
vendor: 'ROBB',
|
|
281
|
+
description: '1 channel switch with power monitoring',
|
|
282
|
+
fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering],
|
|
283
|
+
toZigbee: [tz.on_off],
|
|
284
|
+
exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()],
|
|
285
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
286
|
+
const endpoint = device.getEndpoint(1);
|
|
287
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
|
|
288
|
+
await reporting.onOff(endpoint);
|
|
289
|
+
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
290
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
291
|
+
await reporting.rmsCurrent(endpoint);
|
|
292
|
+
await reporting.activePower(endpoint);
|
|
293
|
+
await reporting.rmsVoltage(endpoint);
|
|
294
|
+
await reporting.currentSummDelivered(endpoint);
|
|
295
|
+
},
|
|
296
|
+
},
|
|
277
297
|
];
|
package/devices/skydance.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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');
|
|
5
|
+
const reporting = require('../lib/reporting');
|
|
4
6
|
const ea = exposes.access;
|
|
5
7
|
|
|
6
8
|
module.exports = [
|
|
@@ -49,6 +51,14 @@ module.exports = [
|
|
|
49
51
|
ea.STATE_SET).withColor(['hs']),
|
|
50
52
|
],
|
|
51
53
|
},
|
|
54
|
+
{
|
|
55
|
+
fingerprint: [{modelID: 'TS0503B', manufacturerName: '_TZB210_zdvrsts8'}],
|
|
56
|
+
model: 'WZ5_rgb_1',
|
|
57
|
+
vendor: 'TuYa',
|
|
58
|
+
description: 'Zigbee & RF 5 in 1 LED controller (RGB mode)',
|
|
59
|
+
extend: extend.light_onoff_brightness_color({supportsHS: true, preferHS: true, disableEffect: true}),
|
|
60
|
+
meta: {applyRedFix: true, enhancedHue: false},
|
|
61
|
+
},
|
|
52
62
|
{
|
|
53
63
|
fingerprint: [
|
|
54
64
|
{modelID: 'TS0601', manufacturerName: '_TZE200_3thxjahu'},
|
|
@@ -86,4 +96,18 @@ module.exports = [
|
|
|
86
96
|
],
|
|
87
97
|
meta: {separateWhite: true},
|
|
88
98
|
},
|
|
99
|
+
{
|
|
100
|
+
fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZB210_rkgngb5o'}],
|
|
101
|
+
model: 'WZ1',
|
|
102
|
+
vendor: 'Skydance',
|
|
103
|
+
description: 'Zigbee & RF 2 channel LED controller',
|
|
104
|
+
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
105
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
106
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
107
|
+
const endpoint = device.getEndpoint(1);
|
|
108
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
109
|
+
await reporting.onOff(endpoint);
|
|
110
|
+
await reporting.brightness(endpoint);
|
|
111
|
+
},
|
|
112
|
+
},
|
|
89
113
|
];
|
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
|
@@ -312,6 +312,7 @@ module.exports = [
|
|
|
312
312
|
// set "event" mode
|
|
313
313
|
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
314
314
|
},
|
|
315
|
+
ota: ota.zigbeeOTA,
|
|
315
316
|
},
|
|
316
317
|
{
|
|
317
318
|
zigbeeModel: ['lumi.switch.b2laus01'],
|
|
@@ -332,6 +333,7 @@ module.exports = [
|
|
|
332
333
|
await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
|
|
333
334
|
await reporting.onOff(endpoint2);
|
|
334
335
|
},
|
|
336
|
+
ota: ota.zigbeeOTA,
|
|
335
337
|
},
|
|
336
338
|
{
|
|
337
339
|
zigbeeModel: ['lumi.switch.b1naus01'],
|
|
@@ -344,6 +346,7 @@ module.exports = [
|
|
|
344
346
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
345
347
|
await reporting.onOff(endpoint);
|
|
346
348
|
},
|
|
349
|
+
ota: ota.zigbeeOTA,
|
|
347
350
|
},
|
|
348
351
|
{
|
|
349
352
|
zigbeeModel: ['lumi.switch.b2naus01'],
|
|
@@ -364,6 +367,7 @@ module.exports = [
|
|
|
364
367
|
await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
|
|
365
368
|
await reporting.onOff(endpoint2);
|
|
366
369
|
},
|
|
370
|
+
ota: ota.zigbeeOTA,
|
|
367
371
|
},
|
|
368
372
|
{
|
|
369
373
|
zigbeeModel: ['lumi.switch.n2acn1'],
|
|
@@ -737,6 +741,7 @@ module.exports = [
|
|
|
737
741
|
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
738
742
|
},
|
|
739
743
|
onEvent: preventReset,
|
|
744
|
+
ota: ota.zigbeeOTA,
|
|
740
745
|
},
|
|
741
746
|
{
|
|
742
747
|
zigbeeModel: ['lumi.switch.b1nacn02'],
|
|
@@ -761,6 +766,7 @@ module.exports = [
|
|
|
761
766
|
device.powerSource = 'Mains (single phase)';
|
|
762
767
|
device.save();
|
|
763
768
|
},
|
|
769
|
+
ota: ota.zigbeeOTA,
|
|
764
770
|
},
|
|
765
771
|
{
|
|
766
772
|
zigbeeModel: ['lumi.switch.b2nacn02'],
|
|
@@ -1045,7 +1051,7 @@ module.exports = [
|
|
|
1045
1051
|
'sensor detects approaching'),
|
|
1046
1052
|
exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('Different sensitivities ' +
|
|
1047
1053
|
'means different static human body recognition rate and response speed of occupied'),
|
|
1048
|
-
exposes.enum('reset_nopresence_status', ea.SET, ['
|
|
1054
|
+
exposes.enum('reset_nopresence_status', ea.SET, ['']).withDescription('Reset the status of no presence'),
|
|
1049
1055
|
e.device_temperature(), e.power_outage_count()],
|
|
1050
1056
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1051
1057
|
const endpoint = device.getEndpoint(1);
|
|
@@ -1304,10 +1310,10 @@ module.exports = [
|
|
|
1304
1310
|
exposes.numeric('gas_density', ea.STATE_GET).withUnit('%LEL').withDescription('Value of gas concentration'),
|
|
1305
1311
|
exposes.enum('gas_sensitivity', ea.ALL, ['10%LEL', '15%LEL']).withDescription('Gas concentration value at which ' +
|
|
1306
1312
|
'an alarm is triggered ("10%LEL" is more sensitive than "15%LEL")'),
|
|
1307
|
-
exposes.enum('selftest', ea.SET, ['
|
|
1313
|
+
exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
|
|
1308
1314
|
'light and buzzer work properly)'),
|
|
1309
1315
|
exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
|
|
1310
|
-
exposes.enum('mute_buzzer', ea.SET, ['
|
|
1316
|
+
exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 10 minutes (buzzer cannot be ' +
|
|
1311
1317
|
'pre-muted, because this function only works when the alarm is triggered)'),
|
|
1312
1318
|
exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
|
|
1313
1319
|
exposes.binary('linkage_alarm', ea.ALL, true, false).withDescription('When this option is enabled and a gas leak ' +
|
|
@@ -1338,10 +1344,10 @@ module.exports = [
|
|
|
1338
1344
|
exposes: [e.smoke().withAccess(ea.STATE_GET),
|
|
1339
1345
|
exposes.numeric('smoke_density', ea.STATE_GET).withDescription('Value of smoke concentration'),
|
|
1340
1346
|
exposes.numeric('smoke_density_dbm', ea.STATE).withUnit('dB/m').withDescription('Value of smoke concentration in dB/m'),
|
|
1341
|
-
exposes.enum('selftest', ea.SET, ['
|
|
1347
|
+
exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
|
|
1342
1348
|
'light and buzzer work properly)'),
|
|
1343
1349
|
exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
|
|
1344
|
-
exposes.enum('mute_buzzer', ea.SET, ['
|
|
1350
|
+
exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 80 seconds (buzzer cannot be ' +
|
|
1345
1351
|
'pre-muted, because this function only works when the alarm is triggered)'),
|
|
1346
1352
|
exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
|
|
1347
1353
|
exposes.binary('heartbeat_indicator', ea.ALL, true, false).withDescription('When this option is enabled then in ' +
|
|
@@ -1392,6 +1398,7 @@ module.exports = [
|
|
|
1392
1398
|
fromZigbee: [fz.DJT12LM_vibration],
|
|
1393
1399
|
exposes: [e.action(['vibration'])],
|
|
1394
1400
|
toZigbee: [],
|
|
1401
|
+
ota: ota.zigbeeOTA,
|
|
1395
1402
|
},
|
|
1396
1403
|
{
|
|
1397
1404
|
zigbeeModel: ['lumi.curtain'],
|
|
@@ -1681,6 +1688,7 @@ module.exports = [
|
|
|
1681
1688
|
vendor: 'Xiaomi',
|
|
1682
1689
|
description: 'Aqara smart RGBW light controller',
|
|
1683
1690
|
extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}),
|
|
1691
|
+
ota: ota.zigbeeOTA,
|
|
1684
1692
|
},
|
|
1685
1693
|
{
|
|
1686
1694
|
zigbeeModel: ['lumi.light.cbacn1'],
|
|
@@ -1688,6 +1696,7 @@ module.exports = [
|
|
|
1688
1696
|
vendor: 'Xiaomi',
|
|
1689
1697
|
description: 'Aqara zigbee LED-controller ',
|
|
1690
1698
|
extend: extend.light_onoff_brightness(),
|
|
1699
|
+
ota: ota.zigbeeOTA,
|
|
1691
1700
|
},
|
|
1692
1701
|
{
|
|
1693
1702
|
zigbeeModel: ['lumi.switch.n0agl1'],
|
|
@@ -1771,37 +1780,37 @@ module.exports = [
|
|
|
1771
1780
|
},
|
|
1772
1781
|
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('center'),
|
|
1773
1782
|
e.switch().withEndpoint('right'),
|
|
1774
|
-
exposes.binary('standby_enabled', ea.
|
|
1775
|
-
exposes.enum('theme', ea.
|
|
1776
|
-
exposes.enum('beep_volume', ea.
|
|
1777
|
-
exposes.numeric('lcd_brightness', ea.
|
|
1783
|
+
exposes.binary('standby_enabled', ea.STATE_SET, true, false).withDescription('Enable standby'),
|
|
1784
|
+
exposes.enum('theme', ea.STATE_SET, ['classic', 'concise']).withDescription('Display theme'),
|
|
1785
|
+
exposes.enum('beep_volume', ea.STATE_SET, ['mute', 'low', 'medium', 'high']).withDescription('Beep volume'),
|
|
1786
|
+
exposes.numeric('lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
|
|
1778
1787
|
.withDescription('LCD brightness (will not persist if auto-brightness is enabled)'),
|
|
1779
|
-
exposes.enum('language', ea.
|
|
1780
|
-
exposes.enum('screen_saver_style', ea.
|
|
1781
|
-
exposes.numeric('standby_time', ea.
|
|
1788
|
+
exposes.enum('language', ea.STATE_SET, ['chinese', 'english']).withDescription('Interface language'),
|
|
1789
|
+
exposes.enum('screen_saver_style', ea.STATE_SET, ['classic', 'analog clock']).withDescription('Screen saver style'),
|
|
1790
|
+
exposes.numeric('standby_time', ea.STATE_SET).withValueMin(0).withValueMax(65534).withUnit('s')
|
|
1782
1791
|
.withDescription('Display standby time'),
|
|
1783
|
-
exposes.enum('font_size', ea.
|
|
1784
|
-
exposes.binary('lcd_auto_brightness_enabled', ea.
|
|
1785
|
-
exposes.enum('homepage', ea.
|
|
1786
|
-
exposes.binary('screen_saver_enabled', ea.
|
|
1787
|
-
exposes.numeric('standby_lcd_brightness', ea.
|
|
1792
|
+
exposes.enum('font_size', ea.STATE_SET, ['small', 'medium', 'large']).withDescription('Display font size'),
|
|
1793
|
+
exposes.binary('lcd_auto_brightness_enabled', ea.STATE_SET, true, false).withDescription('Enable LCD auto brightness'),
|
|
1794
|
+
exposes.enum('homepage', ea.STATE_SET, ['scene', 'feel', 'thermostat', 'switch']).withDescription('Default display homepage'),
|
|
1795
|
+
exposes.binary('screen_saver_enabled', ea.STATE_SET, true, false).withDescription('Enable screen saver'),
|
|
1796
|
+
exposes.numeric('standby_lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
|
|
1788
1797
|
.withDescription('Standby LCD brightness'),
|
|
1789
|
-
exposes.enum('available_switches', ea.
|
|
1798
|
+
exposes.enum('available_switches', ea.STATE_SET, ['none', '1', '2', '3', '1 and 2', '1 and 3', '2 and 3', 'all'])
|
|
1790
1799
|
.withDescription('Control which switches are available in the switches screen (none disables switches screen)'),
|
|
1791
1800
|
exposes.composite('switch_1_text_icon', 'switch_1_text_icon').withDescription('Switch 1 text and icon')
|
|
1792
|
-
.withFeature(exposes.enum('switch_1_icon', ea.
|
|
1801
|
+
.withFeature(exposes.enum('switch_1_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1793
1802
|
.withDescription('Icon'))
|
|
1794
|
-
.withFeature(exposes.text('switch_1_text', ea.
|
|
1803
|
+
.withFeature(exposes.text('switch_1_text', ea.STATE_SET)
|
|
1795
1804
|
.withDescription('Text')),
|
|
1796
1805
|
exposes.composite('switch_2_text_icon', 'switch_2_text_icon').withDescription('Switch 2 text and icon')
|
|
1797
|
-
.withFeature(exposes.enum('switch_2_icon', ea.
|
|
1806
|
+
.withFeature(exposes.enum('switch_2_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1798
1807
|
.withDescription('Icon'))
|
|
1799
|
-
.withFeature(exposes.text('switch_2_text', ea.
|
|
1808
|
+
.withFeature(exposes.text('switch_2_text', ea.STATE_SET)
|
|
1800
1809
|
.withDescription('Text')),
|
|
1801
1810
|
exposes.composite('switch_3_text_icon', 'switch_3_text_icon').withDescription('Switch 3 text and icon')
|
|
1802
|
-
.withFeature(exposes.enum('switch_3_icon', ea.
|
|
1811
|
+
.withFeature(exposes.enum('switch_3_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
|
|
1803
1812
|
.withDescription('Icon'))
|
|
1804
|
-
.withFeature(exposes.text('switch_3_text', ea.
|
|
1813
|
+
.withFeature(exposes.text('switch_3_text', ea.STATE_SET)
|
|
1805
1814
|
.withDescription('Text'))],
|
|
1806
1815
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1807
1816
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
@@ -1811,6 +1820,7 @@ module.exports = [
|
|
|
1811
1820
|
// await reporting.onOff(device.getEndpoint(2)); ToDo: Currently fails
|
|
1812
1821
|
// await reporting.onOff(device.getEndpoint(3)); ToDo: Currently fails
|
|
1813
1822
|
},
|
|
1823
|
+
ota: ota.zigbeeOTA,
|
|
1814
1824
|
},
|
|
1815
1825
|
{
|
|
1816
1826
|
zigbeeModel: ['lumi.remote.b28ac1'],
|
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;
|