zigbee-herdsman-converters 14.0.648 → 14.0.650
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 +12 -12
- package/converters/toZigbee.js +17 -15
- package/devices/immax.js +1 -1
- package/devices/leviton.js +1 -5
- package/devices/nodon.js +15 -0
- package/devices/nous.js +12 -0
- package/devices/osram.js +19 -11
- package/devices/philips.js +7 -0
- package/devices/sprut.js +2 -10
- package/devices/tuya.js +5 -4
- package/devices/ubisys.js +0 -4
- package/devices/xiaomi.js +10 -4
- package/lib/tuya.js +3 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -1588,12 +1588,6 @@ const converters = {
|
|
|
1588
1588
|
type: ['attributeReport', 'readResponse'],
|
|
1589
1589
|
convert: (model, msg, publish, options, meta) => {
|
|
1590
1590
|
const result = {};
|
|
1591
|
-
if (msg.data.hasOwnProperty('physicalMinLevel')) {
|
|
1592
|
-
result['ballast_physical_minimum_level'] = msg.data.physicalMinLevel;
|
|
1593
|
-
}
|
|
1594
|
-
if (msg.data.hasOwnProperty('physicalMaxLevel')) {
|
|
1595
|
-
result['ballast_physical_maximum_level'] = msg.data.physicalMaxLevel;
|
|
1596
|
-
}
|
|
1597
1591
|
if (msg.data.hasOwnProperty('ballastStatus')) {
|
|
1598
1592
|
const ballastStatus = msg.data.ballastStatus;
|
|
1599
1593
|
result['ballast_status_non_operational'] = ballastStatus & 1 ? true : false;
|
|
@@ -1961,22 +1955,28 @@ const converters = {
|
|
|
1961
1955
|
result.min_temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1962
1956
|
break;
|
|
1963
1957
|
case tuya.dataPoints.nousMaxHumi:
|
|
1964
|
-
result.max_humidity = calibrateAndPrecisionRoundOptions(value
|
|
1958
|
+
result.max_humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
|
|
1965
1959
|
break;
|
|
1966
1960
|
case tuya.dataPoints.nousMinHumi:
|
|
1967
|
-
result.min_humidity = calibrateAndPrecisionRoundOptions(value
|
|
1961
|
+
result.min_humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
|
|
1968
1962
|
break;
|
|
1969
1963
|
case tuya.dataPoints.nousTempAlarm:
|
|
1970
|
-
result.temperature_alarm = {0x00: '
|
|
1964
|
+
result.temperature_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
|
|
1971
1965
|
break;
|
|
1972
1966
|
case tuya.dataPoints.nousHumiAlarm:
|
|
1973
|
-
result.humidity_alarm = {0x00: '
|
|
1967
|
+
result.humidity_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
|
|
1974
1968
|
break;
|
|
1975
1969
|
case tuya.dataPoints.nousTempSensitivity:
|
|
1976
1970
|
result.temperature_sensitivity = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1977
1971
|
break;
|
|
1978
|
-
case tuya.dataPoints.
|
|
1979
|
-
result.
|
|
1972
|
+
case tuya.dataPoints.nousHumiSensitivity:
|
|
1973
|
+
result.humidity_sensitivity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
|
|
1974
|
+
break;
|
|
1975
|
+
case tuya.dataPoints.nousTempReportInterval:
|
|
1976
|
+
result.temperature_report_interval = value;
|
|
1977
|
+
break;
|
|
1978
|
+
case tuya.dataPoints.nousHumiReportInterval:
|
|
1979
|
+
result.humidity_report_interval = value;
|
|
1980
1980
|
break;
|
|
1981
1981
|
default:
|
|
1982
1982
|
meta.logger.warn(`zigbee-herdsman-converters:nous_lcd_temperature_humidity_sensor: NOT RECOGNIZED ` +
|
package/converters/toZigbee.js
CHANGED
|
@@ -578,8 +578,6 @@ const converters = {
|
|
|
578
578
|
},
|
|
579
579
|
ballast_config: {
|
|
580
580
|
key: ['ballast_config',
|
|
581
|
-
'ballast_physical_minimum_level',
|
|
582
|
-
'ballast_physical_maximum_level',
|
|
583
581
|
'ballast_minimum_level',
|
|
584
582
|
'ballast_maximum_level',
|
|
585
583
|
'ballast_power_on_level'],
|
|
@@ -607,8 +605,6 @@ const converters = {
|
|
|
607
605
|
convertGet: async (entity, key, meta) => {
|
|
608
606
|
let result = {};
|
|
609
607
|
for (const attrName of [
|
|
610
|
-
'physical_min_level',
|
|
611
|
-
'physical_max_level',
|
|
612
608
|
'ballast_status',
|
|
613
609
|
'min_level',
|
|
614
610
|
'max_level',
|
|
@@ -2211,7 +2207,7 @@ const converters = {
|
|
|
2211
2207
|
xiaomi_switch_power_outage_memory: {
|
|
2212
2208
|
key: ['power_outage_memory'],
|
|
2213
2209
|
convertSet: async (entity, key, value, meta) => {
|
|
2214
|
-
if (['SP-EUC01', 'ZNCZ04LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'DLKZMK12LM',
|
|
2210
|
+
if (['SP-EUC01', 'ZNCZ04LM', 'ZNCZ12LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'DLKZMK12LM',
|
|
2215
2211
|
'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2216
2212
|
'QBKG31LM', 'QBKG34LM', 'QBKG38LM', 'QBKG39LM', 'QBKG40LM', 'QBKG41LM', 'ZNDDMK11LM', 'ZNLDP13LM',
|
|
2217
2213
|
].includes(meta.mapped.model)) {
|
|
@@ -2235,7 +2231,7 @@ const converters = {
|
|
|
2235
2231
|
return {state: {power_outage_memory: value}};
|
|
2236
2232
|
},
|
|
2237
2233
|
convertGet: async (entity, key, meta) => {
|
|
2238
|
-
if (['SP-EUC01', 'ZNCZ04LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'DLKZMK12LM',
|
|
2234
|
+
if (['SP-EUC01', 'ZNCZ04LM', 'ZNCZ12LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'DLKZMK12LM',
|
|
2239
2235
|
'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2240
2236
|
'QBKG31LM', 'QBKG34LM', 'QBKG38LM', 'QBKG39LM', 'QBKG40LM', 'QBKG41LM', 'ZNDDMK11LM', 'ZNLDP13LM',
|
|
2241
2237
|
].includes(meta.mapped.model)) {
|
|
@@ -2264,7 +2260,7 @@ const converters = {
|
|
|
2264
2260
|
xiaomi_auto_off: {
|
|
2265
2261
|
key: ['auto_off'],
|
|
2266
2262
|
convertSet: async (entity, key, value, meta) => {
|
|
2267
|
-
if (['ZNCZ04LM'].includes(meta.mapped.model)) {
|
|
2263
|
+
if (['ZNCZ04LM', 'ZNCZ12LM'].includes(meta.mapped.model)) {
|
|
2268
2264
|
await entity.write('aqaraOpple', {0x0202: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
|
|
2269
2265
|
} else if (['ZNCZ11LM'].includes(meta.mapped.model)) {
|
|
2270
2266
|
const payload = value ?
|
|
@@ -2347,7 +2343,7 @@ const converters = {
|
|
|
2347
2343
|
xiaomi_led_disabled_night: {
|
|
2348
2344
|
key: ['led_disabled_night'],
|
|
2349
2345
|
convertSet: async (entity, key, value, meta) => {
|
|
2350
|
-
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2346
|
+
if (['ZNCZ04LM', 'ZNCZ12LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2351
2347
|
'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02',
|
|
2352
2348
|
'WS-EUK03', 'WS-EUK04'].includes(meta.mapped.model)) {
|
|
2353
2349
|
await entity.write('aqaraOpple', {0x0203: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
|
|
@@ -2363,7 +2359,7 @@ const converters = {
|
|
|
2363
2359
|
return {state: {led_disabled_night: value}};
|
|
2364
2360
|
},
|
|
2365
2361
|
convertGet: async (entity, key, meta) => {
|
|
2366
|
-
if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2362
|
+
if (['ZNCZ04LM', 'ZNCZ12LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
|
|
2367
2363
|
'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02',
|
|
2368
2364
|
'WS-EUK03', 'WS-EUK04'].includes(meta.mapped.model)) {
|
|
2369
2365
|
await entity.read('aqaraOpple', [0x0203], manufacturerOptions.xiaomi);
|
|
@@ -5449,8 +5445,8 @@ const converters = {
|
|
|
5449
5445
|
},
|
|
5450
5446
|
nous_lcd_temperature_humidity_sensor: {
|
|
5451
5447
|
key: [
|
|
5452
|
-
'min_temperature', 'max_temperature', 'temperature_sensitivity', 'temperature_unit_convert',
|
|
5453
|
-
'min_humidity', 'max_humidity', '
|
|
5448
|
+
'min_temperature', 'max_temperature', 'temperature_sensitivity', 'temperature_unit_convert', 'temperature_report_interval',
|
|
5449
|
+
'min_humidity', 'max_humidity', 'humidity_sensitivity', 'humidity_report_interval',
|
|
5454
5450
|
],
|
|
5455
5451
|
convertSet: async (entity, key, value, meta) => {
|
|
5456
5452
|
switch (key) {
|
|
@@ -5466,14 +5462,20 @@ const converters = {
|
|
|
5466
5462
|
case 'temperature_sensitivity':
|
|
5467
5463
|
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousTempSensitivity, Math.round(value * 10));
|
|
5468
5464
|
break;
|
|
5465
|
+
case 'humidity_sensitivity':
|
|
5466
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousHumiSensitivity, value);
|
|
5467
|
+
break;
|
|
5469
5468
|
case 'min_humidity':
|
|
5470
|
-
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousMinHumi, Math.round(value
|
|
5469
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousMinHumi, Math.round(value));
|
|
5471
5470
|
break;
|
|
5472
5471
|
case 'max_humidity':
|
|
5473
|
-
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousMaxHumi, Math.round(value
|
|
5472
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousMaxHumi, Math.round(value));
|
|
5473
|
+
break;
|
|
5474
|
+
case 'temperature_report_interval':
|
|
5475
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousTempReportInterval, value);
|
|
5474
5476
|
break;
|
|
5475
|
-
case '
|
|
5476
|
-
await tuya.sendDataPointValue(entity, tuya.dataPoints.
|
|
5477
|
+
case 'humidity_report_interval':
|
|
5478
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.nousHumiReportInterval, value);
|
|
5477
5479
|
break;
|
|
5478
5480
|
default: // Unknown key
|
|
5479
5481
|
meta.logger.warn(`Unhandled key ${key}`);
|
package/devices/immax.js
CHANGED
|
@@ -92,7 +92,7 @@ module.exports = [
|
|
|
92
92
|
await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
|
|
93
93
|
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
94
94
|
await reporting.currentSummDelivered(endpoint);
|
|
95
|
-
await reporting.activePower(endpoint);
|
|
95
|
+
await reporting.activePower(endpoint, {change: 5});
|
|
96
96
|
},
|
|
97
97
|
exposes: [e.switch(), e.power(), e.energy()],
|
|
98
98
|
},
|
package/devices/leviton.js
CHANGED
|
@@ -100,11 +100,7 @@ module.exports = [
|
|
|
100
100
|
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
101
101
|
.withDescription('Specifies the maximum brightness value'),
|
|
102
102
|
exposes.numeric('ballast_power_on_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
103
|
-
.withDescription('Specifies the initialisation light level. Can not be set lower than "ballast_minimum_level"'),
|
|
104
|
-
exposes.numeric('ballast_physical_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
105
|
-
.withDescription('Specifies the minimum light output the ballast can achieve.'),
|
|
106
|
-
exposes.numeric('ballast_physical_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
107
|
-
.withDescription('Specifies the maximum light output the ballast can achieve.')],
|
|
103
|
+
.withDescription('Specifies the initialisation light level. Can not be set lower than "ballast_minimum_level"')],
|
|
108
104
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
109
105
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
110
106
|
const endpoint = device.getEndpoint(1);
|
package/devices/nodon.js
CHANGED
|
@@ -21,6 +21,21 @@ module.exports = [
|
|
|
21
21
|
},
|
|
22
22
|
exposes: [e.cover_position()],
|
|
23
23
|
},
|
|
24
|
+
{
|
|
25
|
+
zigbeeModel: ['SIN-4-RS-20_PRO'],
|
|
26
|
+
model: 'SIN-4-RS-20_PRO',
|
|
27
|
+
vendor: 'NodOn',
|
|
28
|
+
description: 'Roller shutter controller',
|
|
29
|
+
fromZigbee: [fz.cover_position_tilt],
|
|
30
|
+
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
31
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
32
|
+
const endpoint = device.getEndpoint(1);
|
|
33
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
|
|
34
|
+
await reporting.currentPositionLiftPercentage(endpoint);
|
|
35
|
+
await reporting.currentPositionTiltPercentage(endpoint);
|
|
36
|
+
},
|
|
37
|
+
exposes: [e.cover_position()],
|
|
38
|
+
},
|
|
24
39
|
{
|
|
25
40
|
zigbeeModel: ['SIN-4-1-20'],
|
|
26
41
|
model: 'SIN-4-1-20',
|
package/devices/nous.js
CHANGED
|
@@ -32,6 +32,10 @@ module.exports = [
|
|
|
32
32
|
},
|
|
33
33
|
exposes: [
|
|
34
34
|
e.temperature(), e.humidity(), e.battery(),
|
|
35
|
+
exposes.numeric('temperature_report_interval', ea.STATE_SET).withUnit('min').withValueMin(5).withValueMax(120).withValueStep(5)
|
|
36
|
+
.withDescription('Temperature Report interval'),
|
|
37
|
+
exposes.numeric('humidity_report_interval', ea.STATE_SET).withUnit('min').withValueMin(5).withValueMax(120).withValueStep(5)
|
|
38
|
+
.withDescription('Humidity Report interval'),
|
|
35
39
|
exposes.enum('temperature_unit_convert', ea.STATE_SET, ['celsius', 'fahrenheit']).withDescription('Current display unit'),
|
|
36
40
|
exposes.enum('temperature_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
|
|
37
41
|
.withDescription('Temperature alarm status'),
|
|
@@ -41,6 +45,14 @@ module.exports = [
|
|
|
41
45
|
.withDescription('Alarm temperature min'),
|
|
42
46
|
exposes.numeric('temperature_sensitivity', ea.STATE_SET).withUnit('°C').withValueMin(0.1).withValueMax(50).withValueStep(0.1)
|
|
43
47
|
.withDescription('Temperature sensitivity'),
|
|
48
|
+
exposes.enum('humidity_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
|
|
49
|
+
.withDescription('Humidity alarm status'),
|
|
50
|
+
exposes.numeric('max_humidity', ea.STATE_SET).withUnit('%').withValueMin(0).withValueMax(100)
|
|
51
|
+
.withDescription('Alarm humidity max'),
|
|
52
|
+
exposes.numeric('min_humidity', ea.STATE_SET).withUnit('%').withValueMin(0).withValueMax(100)
|
|
53
|
+
.withDescription('Alarm humidity min'),
|
|
54
|
+
exposes.numeric('humidity_sensitivity', ea.STATE_SET).withUnit('%').withValueMin(1).withValueMax(100).withValueStep(1)
|
|
55
|
+
.withDescription('Humidity sensitivity'),
|
|
44
56
|
],
|
|
45
57
|
},
|
|
46
58
|
{
|
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/philips.js
CHANGED
|
@@ -2862,4 +2862,11 @@ module.exports = [
|
|
|
2862
2862
|
description: 'Hue white ambiance Buckram double spotlight with Bluetooth',
|
|
2863
2863
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
2864
2864
|
},
|
|
2865
|
+
{
|
|
2866
|
+
zigbeeModel: ['4090131P9'],
|
|
2867
|
+
model: '8718696174548',
|
|
2868
|
+
vendor: 'Philips',
|
|
2869
|
+
description: ' Hue Sana wall lamp with Bluetooth white',
|
|
2870
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2871
|
+
},
|
|
2865
2872
|
];
|
package/devices/sprut.js
CHANGED
|
@@ -273,10 +273,10 @@ module.exports = [
|
|
|
273
273
|
.withDescription('The minimum noise level at which the detector will work (default: 50)'),
|
|
274
274
|
e.enum('co2_autocalibration', ea.ALL, switchActionValues)
|
|
275
275
|
.withDescription('Automatic calibration of the CO2 sensor. If ON, the CO2 sensor will automatically calibrate '+
|
|
276
|
-
'every 7 days.'),
|
|
276
|
+
'every 7 days. (MH-Z19B sensor)'),
|
|
277
277
|
e.enum('co2_manual_calibration', ea.ALL, switchActionValues)
|
|
278
278
|
.withDescription('Ventilate the room for 20 minutes, turn on manual calibration, and turn it off after one second. '+
|
|
279
|
-
'After about 5 minutes the CO2 sensor will show 400ppm. Calibration completed'),
|
|
279
|
+
'After about 5 minutes the CO2 sensor will show 400ppm. Calibration completed. (MH-Z19B sensor)'),
|
|
280
280
|
e.enum('th_heater', ea.ALL, switchActionValues)
|
|
281
281
|
.withDescription('Turn on when working in conditions of high humidity (more than 70 %, RH) or condensation, '+
|
|
282
282
|
'if the sensor shows 0 or 100 %.'),
|
|
@@ -307,14 +307,6 @@ module.exports = [
|
|
|
307
307
|
|
|
308
308
|
// buzzer
|
|
309
309
|
await device.getEndpoint(4).read('genOnOff', ['onOff']);
|
|
310
|
-
|
|
311
|
-
// Read data at start
|
|
312
|
-
await endpoint1.read('msTemperatureMeasurement', ['measuredValue']);
|
|
313
|
-
await endpoint1.read('msIlluminanceMeasurement', ['measuredValue']);
|
|
314
|
-
await endpoint1.read('msRelativeHumidity', ['measuredValue']);
|
|
315
|
-
await endpoint1.read('msOccupancySensing', ['occupancy']);
|
|
316
|
-
await endpoint1.read('sprutNoise', ['noise']);
|
|
317
|
-
await endpoint1.read('sprutNoise', ['noiseDetected']);
|
|
318
310
|
},
|
|
319
311
|
endpoint: (device) => {
|
|
320
312
|
return {'default': 1, 'l1': 2, 'l2': 3, 'l3': 4};
|
package/devices/tuya.js
CHANGED
|
@@ -1657,7 +1657,8 @@ module.exports = [
|
|
|
1657
1657
|
model: 'TS0042',
|
|
1658
1658
|
vendor: 'TuYa',
|
|
1659
1659
|
description: 'Wireless switch with 2 buttons',
|
|
1660
|
-
whiteLabel: [{vendor: 'Smart9', model: 'S9TSZGB'}, {vendor: 'Lonsonho', model: 'TS0042'}
|
|
1660
|
+
whiteLabel: [{vendor: 'Smart9', model: 'S9TSZGB'}, {vendor: 'Lonsonho', model: 'TS0042'},
|
|
1661
|
+
{vendor: 'ClickSmart+', model: 'CSPGM2075PW'}],
|
|
1661
1662
|
exposes: [e.battery(), e.action(['1_single', '1_double', '1_hold', '2_single', '2_double', '2_hold'])],
|
|
1662
1663
|
fromZigbee: [fz.tuya_on_off_action, fz.battery],
|
|
1663
1664
|
toZigbee: [],
|
|
@@ -2083,7 +2084,7 @@ module.exports = [
|
|
|
2083
2084
|
onEvent: tuya.onEventSetLocalTime,
|
|
2084
2085
|
configure: tuya.configureMagicPacket,
|
|
2085
2086
|
exposes: [
|
|
2086
|
-
e.
|
|
2087
|
+
e.battery_low(), e.child_lock(), e.open_window(), e.open_window_temperature().withValueMin(5).withValueMax(30),
|
|
2087
2088
|
e.comfort_temperature().withValueMin(5).withValueMax(30), e.eco_temperature().withValueMin(5).withValueMax(30),
|
|
2088
2089
|
exposes.climate().withSystemMode(['off', 'heat'], ea.STATE_SET, 'When switched to the "off" mode, the device will display ' +
|
|
2089
2090
|
'"HS" and the valve will be fully closed. Press the pair button to cancel or switch back to "heat" mode. Battery life ' +
|
|
@@ -3393,8 +3394,8 @@ module.exports = [
|
|
|
3393
3394
|
},
|
|
3394
3395
|
exposes: [
|
|
3395
3396
|
e.temperature(), e.humidity(), e.battery(),
|
|
3396
|
-
exposes.numeric('
|
|
3397
|
-
.withDescription('Report interval'),
|
|
3397
|
+
exposes.numeric('temperature_report_interval', ea.STATE_SET).withUnit('min').withValueMin(5).withValueMax(60).withValueStep(5)
|
|
3398
|
+
.withDescription('Temperature Report interval'),
|
|
3398
3399
|
exposes.enum('temperature_unit_convert', ea.STATE_SET, ['celsius', 'fahrenheit']).withDescription('Current display unit'),
|
|
3399
3400
|
exposes.enum('temperature_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
|
|
3400
3401
|
.withDescription('Temperature alarm status'),
|
package/devices/ubisys.js
CHANGED
|
@@ -671,10 +671,6 @@ module.exports = [
|
|
|
671
671
|
ubisys.tz.dimmer_setup_genLevelCtrl, ubisys.tz.configure_device_setup, tz.ignore_transition, tz.light_brightness_move,
|
|
672
672
|
tz.light_brightness_step],
|
|
673
673
|
exposes: [e.light_brightness().withLevelConfig(), e.power(),
|
|
674
|
-
exposes.numeric('ballast_physical_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
675
|
-
.withDescription('Specifies the minimum light output the ballast can achieve.'),
|
|
676
|
-
exposes.numeric('ballast_physical_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
677
|
-
.withDescription('Specifies the maximum light output the ballast can achieve.'),
|
|
678
674
|
exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
679
675
|
.withDescription('Specifies the minimum light output of the ballast'),
|
|
680
676
|
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
package/devices/xiaomi.js
CHANGED
|
@@ -1371,10 +1371,16 @@ module.exports = [
|
|
|
1371
1371
|
model: 'ZNCZ12LM',
|
|
1372
1372
|
description: 'Mi power plug ZigBee US',
|
|
1373
1373
|
vendor: 'Xiaomi',
|
|
1374
|
-
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
|
|
1375
|
-
toZigbee: [tz.on_off, tz.xiaomi_power
|
|
1376
|
-
|
|
1377
|
-
|
|
1374
|
+
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
|
|
1375
|
+
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_auto_off, tz.xiaomi_led_disabled_night,
|
|
1376
|
+
tz.xiaomi_overload_protection],
|
|
1377
|
+
exposes: [
|
|
1378
|
+
e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
|
|
1379
|
+
e.voltage().withAccess(ea.STATE), e.current(), e.consumer_connected(), e.led_disabled_night(),
|
|
1380
|
+
e.power_outage_memory(), exposes.binary('auto_off', ea.STATE_SET, true, false)
|
|
1381
|
+
.withDescription('Turn the device automatically off when attached device consumes less than 2W for 20 minutes'),
|
|
1382
|
+
exposes.numeric('overload_protection', exposes.access.ALL).withValueMin(100).withValueMax(2300).withUnit('W')
|
|
1383
|
+
.withDescription('Maximum allowed load, turns off if exceeded')],
|
|
1378
1384
|
ota: ota.zigbeeOTA,
|
|
1379
1385
|
},
|
|
1380
1386
|
{
|
package/lib/tuya.js
CHANGED
|
@@ -741,8 +741,10 @@ const dataPoints = {
|
|
|
741
741
|
nousMinHumi: 13,
|
|
742
742
|
nousTempAlarm: 14,
|
|
743
743
|
nousHumiAlarm: 15,
|
|
744
|
+
nousHumiSensitivity: 20,
|
|
744
745
|
nousTempSensitivity: 19,
|
|
745
|
-
|
|
746
|
+
nousTempReportInterval: 17,
|
|
747
|
+
nousHumiReportInterval: 18,
|
|
746
748
|
// TUYA Temperature and Humidity Sensor
|
|
747
749
|
tthTemperature: 1,
|
|
748
750
|
tthHumidity: 2,
|