zigbee-herdsman-converters 15.0.84 → 15.0.86
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 +45 -5
- package/devices/moes.js +0 -18
- package/devices/namron.js +10 -1
- package/devices/philips.js +7 -0
- package/devices/schneider_electric.js +46 -5
- package/devices/shenzhen_homa.js +1 -1
- package/devices/tuya.js +15 -5
- package/devices/xiaomi.js +8 -0
- package/package.json +3 -3
package/devices/bosch.js
CHANGED
|
@@ -46,6 +46,12 @@ const displayOrientation = {
|
|
|
46
46
|
'flipped': 1,
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
+
// Radiator Thermostat II
|
|
50
|
+
const displayedTemperature = {
|
|
51
|
+
'target': 0,
|
|
52
|
+
'measured': 1,
|
|
53
|
+
};
|
|
54
|
+
|
|
49
55
|
// Radiator Thermostat II
|
|
50
56
|
const tzLocal = {
|
|
51
57
|
bwa1: {
|
|
@@ -69,7 +75,7 @@ const tzLocal = {
|
|
|
69
75
|
},
|
|
70
76
|
},
|
|
71
77
|
bosch_thermostat: {
|
|
72
|
-
key: ['window_open', 'boost', 'system_mode', 'pi_heating_demand'],
|
|
78
|
+
key: ['window_open', 'boost', 'system_mode', 'pi_heating_demand', 'remote_temperature'],
|
|
73
79
|
convertSet: async (entity, key, value, meta) => {
|
|
74
80
|
if (key === 'window_open') {
|
|
75
81
|
value = value.toUpperCase();
|
|
@@ -105,6 +111,12 @@ const tzLocal = {
|
|
|
105
111
|
boschManufacturer);
|
|
106
112
|
return {state: {pi_heating_demand: value}};
|
|
107
113
|
}
|
|
114
|
+
if (key === 'remote_temperature') {
|
|
115
|
+
const remoteTemperature = (Math.round((value * 2).toFixed(1)) / 2).toFixed(1) * 100;
|
|
116
|
+
await entity.write('hvacThermostat',
|
|
117
|
+
{0x4040: {value: remoteTemperature, type: herdsman.Zcl.DataType.int16}}, boschManufacturer);
|
|
118
|
+
return {state: {remote_temperature: value}};
|
|
119
|
+
}
|
|
108
120
|
},
|
|
109
121
|
convertGet: async (entity, key, meta) => {
|
|
110
122
|
switch (key) {
|
|
@@ -120,6 +132,9 @@ const tzLocal = {
|
|
|
120
132
|
case 'pi_heating_demand':
|
|
121
133
|
await entity.read('hvacThermostat', [0x4020], boschManufacturer);
|
|
122
134
|
break;
|
|
135
|
+
case 'remote_temperature':
|
|
136
|
+
await entity.read('hvacThermostat', [0x4040], boschManufacturer);
|
|
137
|
+
break;
|
|
123
138
|
|
|
124
139
|
default: // Unknown key
|
|
125
140
|
throw new Error(`Unhandled key toZigbee.bosch_thermostat.convertGet ${key}`);
|
|
@@ -127,7 +142,7 @@ const tzLocal = {
|
|
|
127
142
|
},
|
|
128
143
|
},
|
|
129
144
|
bosch_userInterface: {
|
|
130
|
-
key: ['display_orientation', 'display_ontime', 'display_brightness', 'child_lock'],
|
|
145
|
+
key: ['display_orientation', 'display_ontime', 'display_brightness', 'child_lock', 'displayed_temperature'],
|
|
131
146
|
convertSet: async (entity, key, value, meta) => {
|
|
132
147
|
if (key === 'display_orientation') {
|
|
133
148
|
const index = displayOrientation[value];
|
|
@@ -147,6 +162,11 @@ const tzLocal = {
|
|
|
147
162
|
await entity.write('hvacUserInterfaceCfg', {keypadLockout});
|
|
148
163
|
return {state: {child_lock: value}};
|
|
149
164
|
}
|
|
165
|
+
if (key === 'displayed_temperature') {
|
|
166
|
+
const index = displayedTemperature[value];
|
|
167
|
+
await entity.write('hvacUserInterfaceCfg', {0x4039: {value: index, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
168
|
+
return {state: {displayed_temperature: value}};
|
|
169
|
+
}
|
|
150
170
|
},
|
|
151
171
|
convertGet: async (entity, key, meta) => {
|
|
152
172
|
switch (key) {
|
|
@@ -162,6 +182,9 @@ const tzLocal = {
|
|
|
162
182
|
case 'child_lock':
|
|
163
183
|
await entity.read('hvacUserInterfaceCfg', ['keypadLockout']);
|
|
164
184
|
break;
|
|
185
|
+
case 'displayed_temperature':
|
|
186
|
+
await entity.read('hvacUserInterfaceCfg', [0x4039], boschManufacturer);
|
|
187
|
+
break;
|
|
165
188
|
default: // Unknown key
|
|
166
189
|
throw new Error(`Unhandled key toZigbee.bosch_userInterface.convertGet ${key}`);
|
|
167
190
|
}
|
|
@@ -281,6 +304,9 @@ const fzLocal = {
|
|
|
281
304
|
convert: (model, msg, publish, options, meta) => {
|
|
282
305
|
const result = {};
|
|
283
306
|
const data = msg.data;
|
|
307
|
+
if (data.hasOwnProperty(0x4040)) {
|
|
308
|
+
result.remote_temperature = utils.precisionRound(data[0x4040], 2) / 100;
|
|
309
|
+
}
|
|
284
310
|
if (data.hasOwnProperty(0x4042)) {
|
|
285
311
|
result.window_open = (Object.keys(stateOffOn)[data[0x4042]]);
|
|
286
312
|
}
|
|
@@ -293,6 +319,7 @@ const fzLocal = {
|
|
|
293
319
|
}
|
|
294
320
|
if (data.hasOwnProperty(0x4020)) {
|
|
295
321
|
result.pi_heating_demand = data[0x4020];
|
|
322
|
+
result.running_state = result.pi_heating_demand >= 10 ? 'heat' : 'idle';
|
|
296
323
|
}
|
|
297
324
|
|
|
298
325
|
return result;
|
|
@@ -307,6 +334,9 @@ const fzLocal = {
|
|
|
307
334
|
if (data.hasOwnProperty(0x400b)) {
|
|
308
335
|
result.display_orientation = (Object.keys(displayOrientation)[data[0x400b]]);
|
|
309
336
|
}
|
|
337
|
+
if (data.hasOwnProperty(0x4039)) {
|
|
338
|
+
result.displayed_temperature = (Object.keys(displayedTemperature)[data[0x4039]]);
|
|
339
|
+
}
|
|
310
340
|
if (data.hasOwnProperty(0x403a)) {
|
|
311
341
|
result.display_ontime = data[0x403a];
|
|
312
342
|
}
|
|
@@ -529,13 +559,21 @@ const definition = [
|
|
|
529
559
|
.withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
|
|
530
560
|
.withLocalTemperatureCalibration(-5, 5, 0.1)
|
|
531
561
|
.withSystemMode(['off', 'heat', 'auto'])
|
|
532
|
-
.withPiHeatingDemand(ea.ALL)
|
|
562
|
+
.withPiHeatingDemand(ea.ALL)
|
|
563
|
+
.withRunningState(['idle', 'heat'], ea.STATE),
|
|
533
564
|
exposes.binary('boost', ea.ALL, 'ON', 'OFF')
|
|
534
565
|
.withDescription('Activate Boost heating'),
|
|
535
566
|
exposes.binary('window_open', ea.ALL, 'ON', 'OFF')
|
|
536
567
|
.withDescription('Window open'),
|
|
537
568
|
exposes.enum('display_orientation', ea.ALL, Object.keys(displayOrientation))
|
|
538
569
|
.withDescription('Display orientation'),
|
|
570
|
+
exposes.numeric('remote_temperature', ea.ALL)
|
|
571
|
+
.withValueMin(0)
|
|
572
|
+
.withValueMax(30)
|
|
573
|
+
.withValueStep(0.1)
|
|
574
|
+
.withUnit('°C')
|
|
575
|
+
.withDescription('Input for remote temperature sensor. ' +
|
|
576
|
+
'Setting this will disable the internal temperature sensor until batteries are removed!'),
|
|
539
577
|
exposes.numeric('display_ontime', ea.ALL)
|
|
540
578
|
.withValueMin(5)
|
|
541
579
|
.withValueMax(30)
|
|
@@ -544,6 +582,8 @@ const definition = [
|
|
|
544
582
|
.withValueMin(0)
|
|
545
583
|
.withValueMax(10)
|
|
546
584
|
.withDescription('Specifies the brightness value of the display'),
|
|
585
|
+
exposes.enum('displayed_temperature', ea.ALL, Object.keys(displayedTemperature))
|
|
586
|
+
.withDescription('Temperature displayed on the thermostat'),
|
|
547
587
|
e.child_lock().setAccess('state', ea.ALL),
|
|
548
588
|
e.battery(),
|
|
549
589
|
],
|
|
@@ -585,10 +625,10 @@ const definition = [
|
|
|
585
625
|
}], boschManufacturer);
|
|
586
626
|
|
|
587
627
|
await endpoint.read('hvacThermostat', ['localTemperatureCalibration']);
|
|
588
|
-
await endpoint.read('hvacThermostat', [0x4007, 0x4020, 0x4042, 0x4043], boschManufacturer);
|
|
628
|
+
await endpoint.read('hvacThermostat', [0x4007, 0x4020, 0x4040, 0x4042, 0x4043], boschManufacturer);
|
|
589
629
|
|
|
590
630
|
await endpoint.read('hvacUserInterfaceCfg', ['keypadLockout']);
|
|
591
|
-
await endpoint.read('hvacUserInterfaceCfg', [0x400b, 0x403a, 0x403b], boschManufacturer);
|
|
631
|
+
await endpoint.read('hvacUserInterfaceCfg', [0x400b, 0x4039, 0x403a, 0x403b], boschManufacturer);
|
|
592
632
|
},
|
|
593
633
|
},
|
|
594
634
|
{
|
package/devices/moes.js
CHANGED
|
@@ -314,24 +314,6 @@ module.exports = [
|
|
|
314
314
|
.withDescription('Boost Time Setting 100 sec - 900 sec, (default = 300 sec)').withValueMin(100)
|
|
315
315
|
.withValueMax(900).withValueStep(100)],
|
|
316
316
|
},
|
|
317
|
-
{
|
|
318
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e3oitdyu'}],
|
|
319
|
-
model: 'MS-105B',
|
|
320
|
-
vendor: 'Moes',
|
|
321
|
-
description: 'Smart dimmer module (2 gang)',
|
|
322
|
-
fromZigbee: [fz.moes_105_dimmer, fz.ignore_basic_report],
|
|
323
|
-
toZigbee: [tz.moes_105_dimmer],
|
|
324
|
-
meta: {turnsOffAtBrightness1: true, multiEndpoint: true},
|
|
325
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
326
|
-
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
327
|
-
if (device.getEndpoint(2)) await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
328
|
-
},
|
|
329
|
-
exposes: [e.light_brightness().withEndpoint('l1').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET),
|
|
330
|
-
e.light_brightness().withEndpoint('l2').setAccess('state', ea.STATE_SET).setAccess('brightness', ea.STATE_SET)],
|
|
331
|
-
endpoint: (device) => {
|
|
332
|
-
return {'l1': 1, 'l2': 1};
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
317
|
{
|
|
336
318
|
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_7hcgjxpc'},
|
|
337
319
|
{modelID: 'TS0505B', manufacturerName: '_TZ3210_rcggc0ys'}],
|
package/devices/namron.js
CHANGED
|
@@ -217,7 +217,16 @@ module.exports = [
|
|
|
217
217
|
zigbeeModel: ['4512701'],
|
|
218
218
|
model: '4512701',
|
|
219
219
|
vendor: 'Namron',
|
|
220
|
-
description: 'Zigbee 1 channel switch K2',
|
|
220
|
+
description: 'Zigbee 1 channel switch K2 (White)',
|
|
221
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.battery, fz.command_move, fz.command_stop],
|
|
222
|
+
exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_up', 'brightness_move_down', 'brightness_stop'])],
|
|
223
|
+
toZigbee: [],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
zigbeeModel: ['4512728'],
|
|
227
|
+
model: '4512728',
|
|
228
|
+
vendor: 'Namron',
|
|
229
|
+
description: 'Zigbee 1 channel switch K2 (Black)',
|
|
221
230
|
fromZigbee: [fz.command_on, fz.command_off, fz.battery, fz.command_move, fz.command_stop],
|
|
222
231
|
exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_up', 'brightness_move_down', 'brightness_stop'])],
|
|
223
232
|
toZigbee: [],
|
package/devices/philips.js
CHANGED
|
@@ -24,6 +24,13 @@ module.exports = [
|
|
|
24
24
|
description: 'Hue white ambiance bathroom ceiling light Adore with Bluetooth',
|
|
25
25
|
extend: philips.extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
zigbeeModel: ['929003056701'],
|
|
29
|
+
model: '929003056701',
|
|
30
|
+
vendor: 'Philips',
|
|
31
|
+
description: 'Hue white ambiance Adore ceiling light',
|
|
32
|
+
extend: philips.extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
33
|
+
},
|
|
27
34
|
{
|
|
28
35
|
zigbeeModel: ['929003045301_01', '929003045301_02', '929003045301_03'],
|
|
29
36
|
model: '929003045301',
|
|
@@ -9,6 +9,11 @@ const ota = require('../lib/ota');
|
|
|
9
9
|
const e = exposes.presets;
|
|
10
10
|
const ea = exposes.access;
|
|
11
11
|
|
|
12
|
+
const exposesLocal = {
|
|
13
|
+
indicator_mode: exposes.enum('indicator_mode', ea.ALL, ['consistent_with_load', 'reverse_with_load', 'always_off', 'always_on'])
|
|
14
|
+
.withDescription('Led Indicator Mode'),
|
|
15
|
+
};
|
|
16
|
+
|
|
12
17
|
const tzLocal = {
|
|
13
18
|
lift_duration: {
|
|
14
19
|
key: ['lift_duration'],
|
|
@@ -17,6 +22,20 @@ const tzLocal = {
|
|
|
17
22
|
return {state: {lift_duration: value}};
|
|
18
23
|
},
|
|
19
24
|
},
|
|
25
|
+
indicator_mode: {
|
|
26
|
+
key: ['indicator_mode'],
|
|
27
|
+
convertSet: async (entity, key, value, meta) => {
|
|
28
|
+
const endpoint = entity.getDevice().getEndpoint(21);
|
|
29
|
+
const lookup = {'reverse_with_load': 2, 'consistent_with_load': 0, 'always_off': 3, 'always_on': 1};
|
|
30
|
+
utils.validateValue(value, Object.keys(lookup));
|
|
31
|
+
await endpoint.write(0xFF17, {0x0000: {value: lookup[value], type: 0x30}}, {manufacturerCode: 0x105e});
|
|
32
|
+
return {state: {indicator_mode: value}};
|
|
33
|
+
},
|
|
34
|
+
convertGet: async (entity, key, meta) => {
|
|
35
|
+
const endpoint = entity.getDevice().getEndpoint(21);
|
|
36
|
+
await endpoint.read(0xFF17, [0x0000], {manufacturerCode: 0x105e});
|
|
37
|
+
},
|
|
38
|
+
},
|
|
20
39
|
};
|
|
21
40
|
|
|
22
41
|
const fzLocal = {
|
|
@@ -170,6 +189,18 @@ const fzLocal = {
|
|
|
170
189
|
return ret;
|
|
171
190
|
},
|
|
172
191
|
},
|
|
192
|
+
indicator_mode: {
|
|
193
|
+
cluster: 'clipsalWiserSwitchConfigurationClusterServer',
|
|
194
|
+
type: ['attributeReport', 'readResponse'],
|
|
195
|
+
convert: (model, msg, publish, options, meta) => {
|
|
196
|
+
const result = {};
|
|
197
|
+
const lookup = {0: 'consistent_with_load', 1: 'always_on', 2: 'reverse_with_load', 3: 'always_off'};
|
|
198
|
+
if ('indicator_mode' in msg.data) {
|
|
199
|
+
result.indicator_mode = lookup[msg.data['indicator_mode']];
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
},
|
|
203
|
+
},
|
|
173
204
|
};
|
|
174
205
|
|
|
175
206
|
module.exports = [
|
|
@@ -353,13 +384,14 @@ module.exports = [
|
|
|
353
384
|
model: '41EPBDWCLMZ/354PBDMBTZ',
|
|
354
385
|
vendor: 'Schneider Electric',
|
|
355
386
|
description: 'Wiser 40/300-Series Module Dimmer',
|
|
356
|
-
fromZigbee: [fz.on_off, fz.brightness, fz.level_config, fz.lighting_ballast_configuration],
|
|
357
|
-
toZigbee: [tz.light_onoff_brightness, tz.level_config, tz.ballast_config],
|
|
387
|
+
fromZigbee: [fz.on_off, fz.brightness, fz.level_config, fz.lighting_ballast_configuration, fzLocal.indicator_mode],
|
|
388
|
+
toZigbee: [tz.light_onoff_brightness, tz.level_config, tz.ballast_config, tzLocal.indicator_mode],
|
|
358
389
|
exposes: [e.light_brightness(),
|
|
359
390
|
exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
360
391
|
.withDescription('Specifies the minimum light output of the ballast'),
|
|
361
392
|
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
362
|
-
.withDescription('Specifies the maximum light output of the ballast')
|
|
393
|
+
.withDescription('Specifies the maximum light output of the ballast'),
|
|
394
|
+
exposesLocal.indicator_mode],
|
|
363
395
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
364
396
|
const endpoint = device.getEndpoint(3);
|
|
365
397
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'lightingBallastCfg']);
|
|
@@ -372,7 +404,12 @@ module.exports = [
|
|
|
372
404
|
model: '41E2PBSWMZ/356PB2MBTZ',
|
|
373
405
|
vendor: 'Schneider Electric',
|
|
374
406
|
description: 'Wiser 40/300-Series module switch 2A',
|
|
375
|
-
|
|
407
|
+
ota: ota.zigbeeOTA,
|
|
408
|
+
extend: extend.switch( {
|
|
409
|
+
exposes: [exposesLocal.indicator_mode],
|
|
410
|
+
fromZigbee: [fzLocal.indicator_mode],
|
|
411
|
+
toZigbee: [tzLocal.indicator_mode],
|
|
412
|
+
}),
|
|
376
413
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
377
414
|
const endpoint = device.getEndpoint(1);
|
|
378
415
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
@@ -384,7 +421,11 @@ module.exports = [
|
|
|
384
421
|
model: '41E10PBSWMZ-VW',
|
|
385
422
|
vendor: 'Schneider Electric',
|
|
386
423
|
description: 'Wiser 40/300-Series module switch 10A with ControlLink',
|
|
387
|
-
extend: extend.switch(
|
|
424
|
+
extend: extend.switch({
|
|
425
|
+
exposes: [exposesLocal.indicator_mode],
|
|
426
|
+
fromZigbee: [fzLocal.indicator_mode],
|
|
427
|
+
toZigbee: [tzLocal.indicator_mode],
|
|
428
|
+
}),
|
|
388
429
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
389
430
|
const endpoint = device.getEndpoint(1);
|
|
390
431
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
package/devices/shenzhen_homa.js
CHANGED
|
@@ -18,7 +18,7 @@ module.exports = [
|
|
|
18
18
|
extend: extend.light_onoff_brightness_colortemp(),
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
|
-
zigbeeModel: ['HOMA1002', 'HOMA0019', 'HOMA0006', 'HOMA000F', '019'],
|
|
21
|
+
zigbeeModel: ['HOMA1002', 'HOMA0019', 'HOMA0006', 'HOMA000F', '019', 'HOMA1004'],
|
|
22
22
|
model: 'HLC610-Z',
|
|
23
23
|
vendor: 'Shenzhen Homa',
|
|
24
24
|
description: 'Wireless dimmable controller',
|
package/devices/tuya.js
CHANGED
|
@@ -854,7 +854,7 @@ module.exports = [
|
|
|
854
854
|
exposes: [e.carbon_monoxide(), e.co()],
|
|
855
855
|
},
|
|
856
856
|
{
|
|
857
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ggev5fsl', '_TZE200_u319yc66']),
|
|
857
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ggev5fsl', '_TZE200_u319yc66', '_TZE204_yojqa8xn']),
|
|
858
858
|
model: 'TS0601_gas_sensor_1',
|
|
859
859
|
vendor: 'TuYa',
|
|
860
860
|
description: 'Gas sensor',
|
|
@@ -1310,7 +1310,7 @@ module.exports = [
|
|
|
1310
1310
|
],
|
|
1311
1311
|
},
|
|
1312
1312
|
{
|
|
1313
|
-
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_fjjbhx9d']),
|
|
1313
|
+
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_fjjbhx9d', '_TZE200_e3oitdyu']),
|
|
1314
1314
|
model: 'TS0601_dimmer_2',
|
|
1315
1315
|
vendor: 'TuYa',
|
|
1316
1316
|
description: '2 gang smart dimmer',
|
|
@@ -1343,6 +1343,7 @@ module.exports = [
|
|
|
1343
1343
|
},
|
|
1344
1344
|
whiteLabel: [
|
|
1345
1345
|
{vendor: 'Moes', model: 'ZS-EUD_2gang'},
|
|
1346
|
+
{vendor: 'Moes', model: 'MS-105B'}, // _TZE200_e3oitdyu
|
|
1346
1347
|
],
|
|
1347
1348
|
},
|
|
1348
1349
|
{
|
|
@@ -1450,7 +1451,7 @@ module.exports = [
|
|
|
1450
1451
|
whiteLabel: [{vendor: 'LoraTap', model: 'SC400'}],
|
|
1451
1452
|
exposes: [e.cover_position(), exposes.enum('moving', ea.STATE, ['UP', 'STOP', 'DOWN']),
|
|
1452
1453
|
exposes.binary('calibration', ea.ALL, 'ON', 'OFF'), exposes.binary('motor_reversal', ea.ALL, 'ON', 'OFF'),
|
|
1453
|
-
exposes.enum('backlight_mode', ea.ALL, ['
|
|
1454
|
+
exposes.enum('backlight_mode', ea.ALL, ['low', 'medium', 'high']),
|
|
1454
1455
|
exposes.numeric('calibration_time', ea.STATE).withUnit('S').withDescription('Calibration time')],
|
|
1455
1456
|
},
|
|
1456
1457
|
{
|
|
@@ -1999,11 +2000,12 @@ module.exports = [
|
|
|
1999
2000
|
},
|
|
2000
2001
|
},
|
|
2001
2002
|
{
|
|
2002
|
-
fingerprint: tuya.fingerprint('TS0002', ['_TZ3000_01gpyda5', '_TZ3000_bvrlqyj7', '_TZ3000_7ed9cqgi',
|
|
2003
|
+
fingerprint: tuya.fingerprint('TS0002', ['_TZ3000_01gpyda5', '_TZ3000_bvrlqyj7', '_TZ3000_7ed9cqgi',
|
|
2004
|
+
'_TZ3000_zmy4lslw', '_TZ3000_ruxexjfz']),
|
|
2003
2005
|
model: 'TS0002_switch_module',
|
|
2004
2006
|
vendor: 'TuYa',
|
|
2005
2007
|
description: '2 gang switch module',
|
|
2006
|
-
whiteLabel: [{vendor: 'OXT', model: 'SWTZ22'}],
|
|
2008
|
+
whiteLabel: [{vendor: 'OXT', model: 'SWTZ22'}, {vendor: 'Nous', model: 'L13Z'}],
|
|
2007
2009
|
extend: tuya.extend.switch({switchType: true, endpoints: ['l1', 'l2']}),
|
|
2008
2010
|
endpoint: (device) => {
|
|
2009
2011
|
return {'l1': 1, 'l2': 2};
|
|
@@ -3770,11 +3772,19 @@ module.exports = [
|
|
|
3770
3772
|
fromZigbee: [fz.tuya_remote],
|
|
3771
3773
|
toZigbee: [],
|
|
3772
3774
|
},
|
|
3775
|
+
{
|
|
3776
|
+
zigbeeModel: ['TS0052'],
|
|
3777
|
+
model: 'TS0052',
|
|
3778
|
+
vendor: 'TuYa',
|
|
3779
|
+
description: 'Zigbee dimmer module 1 channel',
|
|
3780
|
+
extend: tuya.extend.light_onoff_brightness(),
|
|
3781
|
+
},
|
|
3773
3782
|
{
|
|
3774
3783
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
|
|
3775
3784
|
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
|
|
3776
3785
|
{modelID: 'TS0601', manufacturerName: '_TZE200_jva8ink8'},
|
|
3777
3786
|
{modelID: 'TS0601', manufacturerName: '_TZE200_holel4dk'},
|
|
3787
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_xpq2rzhq'},
|
|
3778
3788
|
{modelID: 'TS0601', manufacturerName: '_TZE200_wukb7rhc'},
|
|
3779
3789
|
{modelID: 'TS0601', manufacturerName: '_TZE204_ztc6ggyl'},
|
|
3780
3790
|
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
|
package/devices/xiaomi.js
CHANGED
|
@@ -2239,6 +2239,14 @@ module.exports = [
|
|
|
2239
2239
|
vendor: 'Xiaomi',
|
|
2240
2240
|
fromZigbee: [fz.xiaomi_basic, fz.xiaomi_curtain_position, fz.xiaomi_curtain_position_tilt],
|
|
2241
2241
|
toZigbee: [tz.xiaomi_curtain_position_state, tz.xiaomi_curtain_options],
|
|
2242
|
+
onEvent: async (type, data, device) => {
|
|
2243
|
+
if (type === 'message' && data.type === 'attributeReport' && data.cluster === 'genBasic' &&
|
|
2244
|
+
data.data.hasOwnProperty('1028') && data.data['1028'] == 0) {
|
|
2245
|
+
// Try to read the position after the motor stops, the device occasionally report wrong data right after stopping
|
|
2246
|
+
// Might need to add delay, seems to be working without one but needs more tests.
|
|
2247
|
+
await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
|
|
2248
|
+
}
|
|
2249
|
+
},
|
|
2242
2250
|
exposes: [e.cover_position().setAccess('state', ea.ALL),
|
|
2243
2251
|
exposes.binary('running', ea.STATE, true, false)
|
|
2244
2252
|
.withDescription('Whether the motor is moving or not'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zigbee-herdsman-converters",
|
|
3
|
-
"version": "15.0.
|
|
3
|
+
"version": "15.0.86",
|
|
4
4
|
"description": "Collection of device converters to be used with zigbee-herdsman",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"files": [
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://github.com/Koenkk/zigbee-herdsman-converters",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"axios": "^1.3.
|
|
37
|
+
"axios": "^1.3.5",
|
|
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.105"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"eslint": "*",
|