zigbee-herdsman-converters 14.0.649 → 14.0.651
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 +2 -2
- package/converters/toZigbee.js +24 -0
- package/devices/custom_devices_diy.js +9 -0
- package/devices/inovelli.js +27 -0
- package/devices/osram.js +19 -11
- package/devices/sinope.js +52 -21
- package/devices/siterwell.js +4 -2
- package/devices/tuya.js +7 -4
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -1961,10 +1961,10 @@ const converters = {
|
|
|
1961
1961
|
result.min_humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
|
|
1962
1962
|
break;
|
|
1963
1963
|
case tuya.dataPoints.nousTempAlarm:
|
|
1964
|
-
result.temperature_alarm = {0x00: '
|
|
1964
|
+
result.temperature_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
|
|
1965
1965
|
break;
|
|
1966
1966
|
case tuya.dataPoints.nousHumiAlarm:
|
|
1967
|
-
result.humidity_alarm = {0x00: '
|
|
1967
|
+
result.humidity_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
|
|
1968
1968
|
break;
|
|
1969
1969
|
case tuya.dataPoints.nousTempSensitivity:
|
|
1970
1970
|
result.temperature_sensitivity = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
package/converters/toZigbee.js
CHANGED
|
@@ -4405,6 +4405,30 @@ const converters = {
|
|
|
4405
4405
|
}
|
|
4406
4406
|
},
|
|
4407
4407
|
},
|
|
4408
|
+
sinope_led_color_on: {
|
|
4409
|
+
// DM2500ZB and SW2500ZB
|
|
4410
|
+
key: ['led_color_on'],
|
|
4411
|
+
convertSet: async (entity, key, value, meta) => {
|
|
4412
|
+
const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
|
|
4413
|
+
const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
|
|
4414
|
+
const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
|
|
4415
|
+
|
|
4416
|
+
const valueHex = r + g * 256 + (b * 256 ** 2);
|
|
4417
|
+
await entity.write('manuSpecificSinope', {ledColorOn: valueHex});
|
|
4418
|
+
},
|
|
4419
|
+
},
|
|
4420
|
+
sinope_led_color_off: {
|
|
4421
|
+
// DM2500ZB and SW2500ZB
|
|
4422
|
+
key: ['led_color_off'],
|
|
4423
|
+
convertSet: async (entity, key, value, meta) => {
|
|
4424
|
+
const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
|
|
4425
|
+
const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
|
|
4426
|
+
const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
|
|
4427
|
+
|
|
4428
|
+
const valueHex = r + g * 256 + b * 256 ** 2;
|
|
4429
|
+
await entity.write('manuSpecificSinope', {ledColorOff: valueHex});
|
|
4430
|
+
},
|
|
4431
|
+
},
|
|
4408
4432
|
sinope_minimum_brightness: {
|
|
4409
4433
|
// DM2500ZB
|
|
4410
4434
|
key: ['minimum_brightness'],
|
|
@@ -816,4 +816,13 @@ module.exports = [
|
|
|
816
816
|
exposes.numeric('low_humidity', ea.STATE_SET).withUnit('C').withDescription('Setting Low Humidity Border')
|
|
817
817
|
.withValueMin(0).withValueMax(99)],
|
|
818
818
|
},
|
|
819
|
+
{
|
|
820
|
+
zigbeeModel: ['UT-02'],
|
|
821
|
+
model: 'EFR32MG21.Router',
|
|
822
|
+
vendor: 'Custom devices (DiY)',
|
|
823
|
+
description: 'EFR32MG21 router',
|
|
824
|
+
fromZigbee: [],
|
|
825
|
+
toZigbee: [],
|
|
826
|
+
exposes: [],
|
|
827
|
+
},
|
|
819
828
|
];
|
package/devices/inovelli.js
CHANGED
|
@@ -1196,6 +1196,33 @@ Object.keys(ATTRIBUTES).forEach((key) => {
|
|
|
1196
1196
|
}
|
|
1197
1197
|
});
|
|
1198
1198
|
|
|
1199
|
+
// Put actions at the bottom of ui
|
|
1200
|
+
exposesList.push(
|
|
1201
|
+
e.action([
|
|
1202
|
+
'down_single',
|
|
1203
|
+
'up_single',
|
|
1204
|
+
'config_single',
|
|
1205
|
+
'down_release',
|
|
1206
|
+
'up_release',
|
|
1207
|
+
'config_release',
|
|
1208
|
+
'down_held',
|
|
1209
|
+
'up_held',
|
|
1210
|
+
'config_held',
|
|
1211
|
+
'down_double',
|
|
1212
|
+
'up_double',
|
|
1213
|
+
'config_double',
|
|
1214
|
+
'down_triple',
|
|
1215
|
+
'up_triple',
|
|
1216
|
+
'config_triple',
|
|
1217
|
+
'down_quadruple',
|
|
1218
|
+
'up_quadruple',
|
|
1219
|
+
'config_quadruple',
|
|
1220
|
+
'down_quintuple',
|
|
1221
|
+
'up_quintuple',
|
|
1222
|
+
'config_quintuple',
|
|
1223
|
+
]),
|
|
1224
|
+
);
|
|
1225
|
+
|
|
1199
1226
|
module.exports = [
|
|
1200
1227
|
{
|
|
1201
1228
|
zigbeeModel: ['VZM31-SN'],
|
package/devices/osram.js
CHANGED
|
@@ -395,6 +395,7 @@ module.exports = [
|
|
|
395
395
|
vendor: 'OSRAM',
|
|
396
396
|
description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (only one device)',
|
|
397
397
|
extend: extend.ledvance.light_onoff_brightness(),
|
|
398
|
+
ota: ota.zigbeeOTA,
|
|
398
399
|
},
|
|
399
400
|
{
|
|
400
401
|
fingerprint: [{modelID: 'Zigbee 3.0 DALI CONV LI', endpoints: [{ID: 10}, {ID: 25}, {ID: 242}]},
|
|
@@ -402,7 +403,16 @@ module.exports = [
|
|
|
402
403
|
model: '4062172044776_2',
|
|
403
404
|
vendor: 'OSRAM',
|
|
404
405
|
description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (one device and pushbutton)',
|
|
405
|
-
|
|
406
|
+
fromZigbee: [...extend.ledvance.light_onoff_brightness({noConfigure: true}).fromZigbee,
|
|
407
|
+
fz.command_toggle, fz.command_move, fz.command_stop],
|
|
408
|
+
extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
|
|
409
|
+
exposes: [e.action(['toggle', 'brightness_move_up', 'brightness_move_down', 'brightness_stop']),
|
|
410
|
+
...extend.ledvance.light_onoff_brightness({noConfigure: true}).exposes],
|
|
411
|
+
ota: ota.zigbeeOTA,
|
|
412
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
413
|
+
await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
414
|
+
await reporting.bind(device.getEndpoint(25), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
415
|
+
},
|
|
406
416
|
onEvent: async (type, data, device) => {
|
|
407
417
|
if (type === 'deviceInterview') {
|
|
408
418
|
device.getEndpoint(25).addBinding('genOnOff', device.getEndpoint(10));
|
|
@@ -418,6 +428,7 @@ module.exports = [
|
|
|
418
428
|
description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices)',
|
|
419
429
|
extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
|
|
420
430
|
exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
|
|
431
|
+
ota: ota.zigbeeOTA,
|
|
421
432
|
endpoint: (device) => {
|
|
422
433
|
return {'l1': 10, 'l2': 11};
|
|
423
434
|
},
|
|
@@ -425,10 +436,6 @@ module.exports = [
|
|
|
425
436
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
426
437
|
await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
427
438
|
await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
428
|
-
await reporting.onOff(device.getEndpoint(10));
|
|
429
|
-
await reporting.brightness(device.getEndpoint(10));
|
|
430
|
-
await reporting.onOff(device.getEndpoint(11));
|
|
431
|
-
await reporting.brightness(device.getEndpoint(11));
|
|
432
439
|
},
|
|
433
440
|
},
|
|
434
441
|
{
|
|
@@ -437,19 +444,20 @@ module.exports = [
|
|
|
437
444
|
model: '4062172044776_4',
|
|
438
445
|
vendor: 'OSRAM',
|
|
439
446
|
description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices and pushbutton)',
|
|
447
|
+
fromZigbee: [...extend.ledvance.light_onoff_brightness({noConfigure: true}).fromZigbee,
|
|
448
|
+
fz.command_toggle, fz.command_move, fz.command_stop],
|
|
440
449
|
extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
|
|
441
|
-
exposes: [e.
|
|
450
|
+
exposes: [e.action(['toggle_s1', 'brightness_move_up_s1', 'brightness_move_down_s1', 'brightness_stop_s1']),
|
|
451
|
+
e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
|
|
452
|
+
ota: ota.zigbeeOTA,
|
|
442
453
|
endpoint: (device) => {
|
|
443
|
-
return {'l1': 10, 'l2': 11};
|
|
454
|
+
return {'l1': 10, 'l2': 11, 's1': 25};
|
|
444
455
|
},
|
|
445
456
|
meta: {multiEndpoint: true},
|
|
446
457
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
447
458
|
await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
448
459
|
await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
449
|
-
await reporting.
|
|
450
|
-
await reporting.brightness(device.getEndpoint(10));
|
|
451
|
-
await reporting.onOff(device.getEndpoint(11));
|
|
452
|
-
await reporting.brightness(device.getEndpoint(11));
|
|
460
|
+
await reporting.bind(device.getEndpoint(25), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
|
|
453
461
|
},
|
|
454
462
|
onEvent: async (type, data, device) => {
|
|
455
463
|
if (type === 'deviceInterview') {
|
package/devices/sinope.js
CHANGED
|
@@ -240,13 +240,64 @@ module.exports = [
|
|
|
240
240
|
model: 'SW2500ZB',
|
|
241
241
|
vendor: 'Sinopé',
|
|
242
242
|
description: 'Zigbee smart light switch',
|
|
243
|
-
|
|
243
|
+
exposes: [e.switch(),
|
|
244
|
+
exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
|
|
245
|
+
.withDescription('Control status LED intensity when load ON'),
|
|
246
|
+
exposes.numeric('led_intensity_off', ea.SET).withValueMin(0).withValueMax(100)
|
|
247
|
+
.withDescription('Control status LED intensity when load OFF'),
|
|
248
|
+
exposes.composite('led_color_on', 'led_color_on')
|
|
249
|
+
.withFeature(exposes.numeric('r', ea.ALL))
|
|
250
|
+
.withFeature(exposes.numeric('g', ea.ALL))
|
|
251
|
+
.withFeature(exposes.numeric('b', ea.ALL))
|
|
252
|
+
.withDescription('Control status LED intensity when load ON'),
|
|
253
|
+
exposes.composite('led_color_off', 'led_color_off')
|
|
254
|
+
.withFeature(exposes.numeric('r', ea.ALL))
|
|
255
|
+
.withFeature(exposes.numeric('g', ea.ALL))
|
|
256
|
+
.withFeature(exposes.numeric('b', ea.ALL))
|
|
257
|
+
.withDescription('Control status LED color when load OFF'),
|
|
258
|
+
],
|
|
259
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement],
|
|
260
|
+
toZigbee: [tz.on_off, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off, tz.sinope_led_color_on, tz.sinope_led_color_off],
|
|
244
261
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
245
262
|
const endpoint = device.getEndpoint(1);
|
|
246
263
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
247
264
|
await reporting.onOff(endpoint);
|
|
248
265
|
},
|
|
249
266
|
},
|
|
267
|
+
{
|
|
268
|
+
zigbeeModel: ['DM2500ZB'],
|
|
269
|
+
model: 'DM2500ZB',
|
|
270
|
+
vendor: 'Sinopé',
|
|
271
|
+
description: 'Zigbee smart dimmer',
|
|
272
|
+
exposes: [e.light_brightness(),
|
|
273
|
+
exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
|
|
274
|
+
.withDescription('Control status LED when load ON'),
|
|
275
|
+
exposes.numeric('led_intensity_off', ea.SET).withValueMin(0).withValueMax(100)
|
|
276
|
+
.withDescription('Control status LED when load OFF'),
|
|
277
|
+
exposes.numeric('minimum_brightness', ea.SET).withValueMin(0).withValueMax(3000)
|
|
278
|
+
.withDescription('Control minimum dimmer brightness'),
|
|
279
|
+
exposes.composite('led_color_on', 'led_color_on')
|
|
280
|
+
.withFeature(exposes.numeric('r', ea.ALL))
|
|
281
|
+
.withFeature(exposes.numeric('g', ea.ALL))
|
|
282
|
+
.withFeature(exposes.numeric('b', ea.ALL))
|
|
283
|
+
.withDescription('Control status LED intensity when load ON'),
|
|
284
|
+
exposes.composite('led_color_off', 'led_color_off')
|
|
285
|
+
.withFeature(exposes.numeric('r', ea.ALL))
|
|
286
|
+
.withFeature(exposes.numeric('g', ea.ALL))
|
|
287
|
+
.withFeature(exposes.numeric('b', ea.ALL))
|
|
288
|
+
.withDescription('Control status LED color when load OFF'),
|
|
289
|
+
],
|
|
290
|
+
fromZigbee: [fz.on_off, fz.brightness, fz.electrical_measurement],
|
|
291
|
+
toZigbee: [tz.light_onoff_brightness, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off,
|
|
292
|
+
tz.sinope_minimum_brightness, tz.sinope_led_color_on, tz.sinope_led_color_off],
|
|
293
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
294
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
295
|
+
const endpoint = device.getEndpoint(1);
|
|
296
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
297
|
+
await reporting.onOff(endpoint);
|
|
298
|
+
await reporting.brightness(endpoint);
|
|
299
|
+
},
|
|
300
|
+
},
|
|
250
301
|
{
|
|
251
302
|
zigbeeModel: ['SP2600ZB'],
|
|
252
303
|
model: 'SP2600ZB',
|
|
@@ -279,26 +330,6 @@ module.exports = [
|
|
|
279
330
|
await reporting.activePower(endpoint, {min: 10, change: 1});
|
|
280
331
|
},
|
|
281
332
|
},
|
|
282
|
-
{
|
|
283
|
-
zigbeeModel: ['DM2500ZB'],
|
|
284
|
-
model: 'DM2500ZB',
|
|
285
|
-
vendor: 'Sinopé',
|
|
286
|
-
description: 'Zigbee smart dimmer',
|
|
287
|
-
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
288
|
-
exposes: [e.light_brightness(), e.effect(), exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
|
|
289
|
-
.withDescription('Control status LED when load ON'), exposes.numeric('led_intensity_off', ea.SET).withValueMin(0)
|
|
290
|
-
.withValueMax(100).withDescription('Control status LED when load OFF'), exposes.numeric('minimum_brightness', ea.SET)
|
|
291
|
-
.withValueMin(0).withValueMax(3000).withDescription('Control minimum dimmer brightness')],
|
|
292
|
-
toZigbee: [tz.light_onoff_brightness, tz.effect, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off,
|
|
293
|
-
tz.sinope_minimum_brightness],
|
|
294
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
295
|
-
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
296
|
-
const endpoint = device.getEndpoint(1);
|
|
297
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
298
|
-
await reporting.onOff(endpoint);
|
|
299
|
-
await reporting.brightness(endpoint);
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
333
|
{
|
|
303
334
|
zigbeeModel: ['RM3250ZB'],
|
|
304
335
|
model: 'RM3250ZB',
|
package/devices/siterwell.js
CHANGED
|
@@ -14,7 +14,8 @@ module.exports = [
|
|
|
14
14
|
{modelId: 'TS0601', manufacturerName: '_TZE200_hhrtiq0x'},
|
|
15
15
|
{modelId: 'TS0601', manufacturerName: '_TZE200_ps5v5jor'},
|
|
16
16
|
{modelId: 'TS0601', manufacturerName: '_TZE200_jeaxp72v'},
|
|
17
|
-
{modelId: 'TS0601', manufacturerName: '_TZE200_owwdxjbx'}
|
|
17
|
+
{modelId: 'TS0601', manufacturerName: '_TZE200_owwdxjbx'},
|
|
18
|
+
{modelId: 'TS0601', manufacturerName: '_TZE200_2cs6g9i7'}],
|
|
18
19
|
model: 'GS361A-H04',
|
|
19
20
|
vendor: 'Siterwell',
|
|
20
21
|
description: 'Radiator valve with thermostat',
|
|
@@ -31,7 +32,8 @@ module.exports = [
|
|
|
31
32
|
{vendor: 'Unitec', description: 'Thermostatic Radiator Valve Controller', model: '30946'},
|
|
32
33
|
{vendor: 'Tesla', description: 'Thermostatic Radiator Valve Controller', model: 'TSL-TRV-GS361A'},
|
|
33
34
|
{vendor: 'Nedis', description: 'Thermostatic Radiator Valve Controller', model: 'ZBHTR10WT'},
|
|
34
|
-
{vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'}
|
|
35
|
+
{vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'},
|
|
36
|
+
{vendor: 'Brennenstuhl', description: 'Radiator Thermostat', model: 'HT CZ 01'}],
|
|
35
37
|
exposes: [e.child_lock(), e.window_detection(), e.battery(), e.valve_detection(), e.position(), exposes.climate()
|
|
36
38
|
.withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET).withLocalTemperature(ea.STATE)
|
|
37
39
|
.withSystemMode(['off', 'auto', 'heat'], ea.STATE_SET)
|
package/devices/tuya.js
CHANGED
|
@@ -1047,7 +1047,7 @@ module.exports = [
|
|
|
1047
1047
|
},
|
|
1048
1048
|
},
|
|
1049
1049
|
{
|
|
1050
|
-
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
|
|
1050
|
+
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}, {modelID: 'TS0202', manufacturerName: '_TZ3040_fwxuzcf4'}],
|
|
1051
1051
|
model: 'ZM-35H-Q',
|
|
1052
1052
|
vendor: 'TuYa',
|
|
1053
1053
|
description: 'Motion sensor',
|
|
@@ -1757,7 +1757,7 @@ module.exports = [
|
|
|
1757
1757
|
exposes: [e.battery(), e.water_leak()],
|
|
1758
1758
|
},
|
|
1759
1759
|
{
|
|
1760
|
-
fingerprint:
|
|
1760
|
+
fingerprint: tuya.fingerprint('TS0001', ['_TZ3000_xkap8wtb', '_TZ3000_qnejhcsu', '_TZ3000_x3ewpzyr']),
|
|
1761
1761
|
model: 'TS0001_power',
|
|
1762
1762
|
description: 'Switch with power monitoring',
|
|
1763
1763
|
vendor: 'TuYa',
|
|
@@ -2084,7 +2084,7 @@ module.exports = [
|
|
|
2084
2084
|
onEvent: tuya.onEventSetLocalTime,
|
|
2085
2085
|
configure: tuya.configureMagicPacket,
|
|
2086
2086
|
exposes: [
|
|
2087
|
-
e.
|
|
2087
|
+
e.battery_low(), e.child_lock(), e.open_window(), e.open_window_temperature().withValueMin(5).withValueMax(30),
|
|
2088
2088
|
e.comfort_temperature().withValueMin(5).withValueMax(30), e.eco_temperature().withValueMin(5).withValueMax(30),
|
|
2089
2089
|
exposes.climate().withSystemMode(['off', 'heat'], ea.STATE_SET, 'When switched to the "off" mode, the device will display ' +
|
|
2090
2090
|
'"HS" and the valve will be fully closed. Press the pair button to cancel or switch back to "heat" mode. Battery life ' +
|
|
@@ -2217,7 +2217,10 @@ module.exports = [
|
|
|
2217
2217
|
],
|
|
2218
2218
|
},
|
|
2219
2219
|
{
|
|
2220
|
-
fingerprint: [
|
|
2220
|
+
fingerprint: [
|
|
2221
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_a4bpgplm'},
|
|
2222
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_dv8abrrz'},
|
|
2223
|
+
],
|
|
2221
2224
|
model: 'TS0601_thermostat_1',
|
|
2222
2225
|
vendor: 'TuYa',
|
|
2223
2226
|
description: 'Thermostatic radiator valve',
|