zigbee-herdsman-converters 14.0.417 → 14.0.421
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/toZigbee.js +4 -0
- package/devices/adeo.js +1 -1
- package/devices/alchemy.js +11 -0
- package/devices/awox.js +77 -0
- package/devices/kwikset.js +18 -0
- package/devices/nous.js +25 -0
- package/devices/philips.js +9 -1
- package/devices/profalux.js +34 -0
- package/devices/schneider_electric.js +1 -0
- package/devices/tuya.js +4 -1
- package/devices/xiaomi.js +9 -2
- package/npm-shrinkwrap.json +963 -896
- package/package.json +2 -2
package/converters/toZigbee.js
CHANGED
|
@@ -299,6 +299,10 @@ const converters = {
|
|
|
299
299
|
convertSet: async (entity, key, value, meta) => {
|
|
300
300
|
if (typeof value !== 'number') {
|
|
301
301
|
value = value.toLowerCase();
|
|
302
|
+
if (value === 'stop') {
|
|
303
|
+
await entity.command('genLevelCtrl', 'stop', {}, utils.getOptions(meta.mapped, entity));
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
302
306
|
const lookup = {'open': 100, 'close': 0};
|
|
303
307
|
utils.validateValue(value, Object.keys(lookup));
|
|
304
308
|
value = lookup[value];
|
package/devices/adeo.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const extend = require('../lib/extend');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
{
|
|
5
|
+
zigbeeModel: ['AL8TC13W-AP'],
|
|
6
|
+
model: 'AL8TC13W-AP',
|
|
7
|
+
vendor: 'Alchemy',
|
|
8
|
+
description: 'Downlight with tuneable white',
|
|
9
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
|
|
10
|
+
},
|
|
11
|
+
];
|
package/devices/awox.js
CHANGED
|
@@ -1,4 +1,64 @@
|
|
|
1
1
|
const extend = require('../lib/extend');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const exposes = require('../lib/exposes');
|
|
4
|
+
const e = exposes.presets;
|
|
5
|
+
|
|
6
|
+
const awoxRemoteHelper = {
|
|
7
|
+
convertToColorName: (buffer) => {
|
|
8
|
+
const commonForColors = buffer[0] === 17 && buffer[2] === 48 && buffer[3] === 0 && buffer[5] === 8 && buffer[6] === 0;
|
|
9
|
+
|
|
10
|
+
if (commonForColors && buffer[4] === 255) {
|
|
11
|
+
return 'red';
|
|
12
|
+
} else if (commonForColors && buffer[4] === 42) {
|
|
13
|
+
return 'yellow';
|
|
14
|
+
} else if (commonForColors && buffer[4] === 85) {
|
|
15
|
+
return 'green';
|
|
16
|
+
} else if (commonForColors && buffer[4] === 170) {
|
|
17
|
+
return 'blue';
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
},
|
|
21
|
+
isRefresh: (buffer) => {
|
|
22
|
+
return buffer[0] === 17 && buffer[2] === 16 && buffer[3] === 1 && buffer[4] === 1;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const fzLocal = {
|
|
27
|
+
colors: {
|
|
28
|
+
cluster: 'lightingColorCtrl',
|
|
29
|
+
type: ['raw'],
|
|
30
|
+
convert: (model, msg, publish, options, meta) => {
|
|
31
|
+
const color = awoxRemoteHelper.convertToColorName(msg.data);
|
|
32
|
+
if (color != null) {
|
|
33
|
+
return {
|
|
34
|
+
action: color,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
refreshColored: {
|
|
40
|
+
cluster: 'lightingColorCtrl',
|
|
41
|
+
type: ['commandMoveHue'],
|
|
42
|
+
convert: (model, msg, publish, options, meta) => {
|
|
43
|
+
if (msg.data.movemode === 1 && msg.data.rate === 12) {
|
|
44
|
+
return {
|
|
45
|
+
action: 'refresh_colored',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
refresh: {
|
|
51
|
+
cluster: 'genLevelCtrl',
|
|
52
|
+
type: ['raw'],
|
|
53
|
+
convert: (model, msg, publish, options, meta) => {
|
|
54
|
+
if (awoxRemoteHelper.isRefresh(msg.data)) {
|
|
55
|
+
return {
|
|
56
|
+
action: 'refresh',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
2
62
|
|
|
3
63
|
module.exports = [
|
|
4
64
|
{
|
|
@@ -8,6 +68,23 @@ module.exports = [
|
|
|
8
68
|
description: 'LED white',
|
|
9
69
|
extend: extend.light_onoff_brightness(),
|
|
10
70
|
},
|
|
71
|
+
{
|
|
72
|
+
fingerprint: [
|
|
73
|
+
{type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
|
|
74
|
+
{ID: 1, profileID: 260, deviceID: 2028, inputClusters: [0, 3, 4, 4096], outputClusters: [0, 3, 4, 5, 6, 8, 768, 4096]},
|
|
75
|
+
{ID: 3, profileID: 4751, deviceID: 2048, inputClusters: [65360, 65361], outputClusters: [65360, 65361]},
|
|
76
|
+
]},
|
|
77
|
+
],
|
|
78
|
+
model: '33952',
|
|
79
|
+
vendor: 'AwoX',
|
|
80
|
+
description: 'Remote controller',
|
|
81
|
+
fromZigbee: [fz.command_on, fzLocal.colors, fzLocal.refresh, fzLocal.refreshColored, fz.command_off,
|
|
82
|
+
fz.command_step, fz.command_move, fz.command_stop, fz.command_recall, fz.command_step_color_temperature],
|
|
83
|
+
toZigbee: [],
|
|
84
|
+
exposes: [e.action(['on', 'off', 'red', 'refresh', 'refresh_colored', 'blue', 'yellow',
|
|
85
|
+
'green', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up', 'brightness_move_down', 'brightness_stop',
|
|
86
|
+
'recall_1', 'color_temperature_step_up', 'color_temperature_step_down'])],
|
|
87
|
+
},
|
|
11
88
|
{
|
|
12
89
|
fingerprint: [
|
|
13
90
|
{type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
|
package/devices/kwikset.js
CHANGED
|
@@ -83,4 +83,22 @@ module.exports = [
|
|
|
83
83
|
},
|
|
84
84
|
exposes: [e.lock(), e.battery()],
|
|
85
85
|
},
|
|
86
|
+
{
|
|
87
|
+
zigbeeModel: ['SMARTCODE_LEVER_5'],
|
|
88
|
+
model: '99120-021',
|
|
89
|
+
vendor: 'Kwikset',
|
|
90
|
+
description: '912 SmartCode traditional electronic lever',
|
|
91
|
+
fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery, fz.lock_programming_event, fz.lock_pin_code_response],
|
|
92
|
+
toZigbee: [tz.lock, tz.pincode_lock],
|
|
93
|
+
meta: {pinCodeCount: 30},
|
|
94
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
95
|
+
const endpoint = device.getEndpoint(2);
|
|
96
|
+
console.log(device);
|
|
97
|
+
console.log(endpoint.clusters);
|
|
98
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
99
|
+
await reporting.lockState(endpoint);
|
|
100
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
101
|
+
},
|
|
102
|
+
exposes: [e.lock(), e.battery(), e.pincode()],
|
|
103
|
+
},
|
|
86
104
|
];
|
package/devices/nous.js
CHANGED
|
@@ -16,6 +16,31 @@ module.exports = [
|
|
|
16
16
|
toZigbee: [],
|
|
17
17
|
exposes: [e.temperature(), e.humidity(), e.battery()],
|
|
18
18
|
},
|
|
19
|
+
{
|
|
20
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}],
|
|
21
|
+
model: 'SZ-T04',
|
|
22
|
+
vendor: 'Nous',
|
|
23
|
+
description: 'Temperature and humidity sensor with clock',
|
|
24
|
+
fromZigbee: [fz.nous_lcd_temperature_humidity_sensor, fz.ignore_tuya_set_time],
|
|
25
|
+
toZigbee: [tz.nous_lcd_temperature_humidity_sensor],
|
|
26
|
+
onEvent: tuya.onEventSetLocalTime,
|
|
27
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
28
|
+
const endpoint = device.getEndpoint(1);
|
|
29
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
|
|
30
|
+
},
|
|
31
|
+
exposes: [
|
|
32
|
+
e.temperature(), e.humidity(), e.battery(),
|
|
33
|
+
exposes.enum('temperature_unit_convert', ea.STATE_SET, ['celsius', 'fahrenheit']).withDescription('Current display unit'),
|
|
34
|
+
exposes.enum('temperature_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
|
|
35
|
+
.withDescription('Temperature alarm status'),
|
|
36
|
+
exposes.numeric('max_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
|
|
37
|
+
.withDescription('Alarm temperature max'),
|
|
38
|
+
exposes.numeric('min_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
|
|
39
|
+
.withDescription('Alarm temperature min'),
|
|
40
|
+
exposes.numeric('temperature_sensitivity', ea.STATE_SET).withUnit('°C').withValueMin(0.1).withValueMax(50).withValueStep(0.1)
|
|
41
|
+
.withDescription('Temperature sensitivity'),
|
|
42
|
+
],
|
|
43
|
+
},
|
|
19
44
|
{
|
|
20
45
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nnrfa68v'}],
|
|
21
46
|
model: 'E6',
|
package/devices/philips.js
CHANGED
|
@@ -661,7 +661,7 @@ module.exports = [
|
|
|
661
661
|
ota: ota.zigbeeOTA,
|
|
662
662
|
},
|
|
663
663
|
{
|
|
664
|
-
zigbeeModel: ['LWW003'],
|
|
664
|
+
zigbeeModel: ['LWW003', 'LWF003'],
|
|
665
665
|
model: '9290018216',
|
|
666
666
|
vendor: 'Philips',
|
|
667
667
|
description: 'Hue white A60 bulb E27 bluetooth',
|
|
@@ -2706,6 +2706,14 @@ module.exports = [
|
|
|
2706
2706
|
extend: hueExtend.light_onoff_brightness(),
|
|
2707
2707
|
ota: ota.zigbeeOTA,
|
|
2708
2708
|
},
|
|
2709
|
+
{
|
|
2710
|
+
zigbeeModel: ['915005997301'],
|
|
2711
|
+
model: '915005997301',
|
|
2712
|
+
vendor: 'Philips',
|
|
2713
|
+
description: 'Hue Bluetooth white & color ambiance ceiling lamp Infuse medium',
|
|
2714
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2715
|
+
ota: ota.zigbeeOTA,
|
|
2716
|
+
},
|
|
2709
2717
|
{
|
|
2710
2718
|
zigbeeModel: ['915005997501'],
|
|
2711
2719
|
model: '915005997501',
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
|
|
2
|
+
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
|
|
3
|
+
const exposes = require('zigbee-herdsman-converters/lib/exposes');
|
|
4
|
+
const reporting = require('zigbee-herdsman-converters/lib/reporting');
|
|
5
|
+
const e = exposes.presets;
|
|
6
|
+
const ea = exposes.access;
|
|
7
|
+
|
|
8
|
+
module.exports = [
|
|
9
|
+
{
|
|
10
|
+
fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 513, inputClusters: [0, 3, 21],
|
|
11
|
+
outputClusters: [3, 4, 5, 6, 8, 256, 64544, 64545]}]}],
|
|
12
|
+
model: 'NB102',
|
|
13
|
+
vendor: 'Profalux',
|
|
14
|
+
description: 'Cover remote',
|
|
15
|
+
fromZigbee: [],
|
|
16
|
+
toZigbee: [],
|
|
17
|
+
exposes: [],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 512,
|
|
21
|
+
inputClusters: [0, 3, 4, 5, 6, 8, 10, 21, 256, 64544, 64545], outputClusters: [3, 64544]}]}],
|
|
22
|
+
model: 'NSAV061',
|
|
23
|
+
vendor: 'Profalux',
|
|
24
|
+
description: 'Cover',
|
|
25
|
+
fromZigbee: [fz.cover_position_via_brightness, fz.cover_state_via_onoff],
|
|
26
|
+
toZigbee: [tz.cover_via_brightness],
|
|
27
|
+
exposes: [e.cover_position().setAccess('state', ea.ALL)],
|
|
28
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
29
|
+
const endpoint = device.getEndpoint(1);
|
|
30
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genLevelCtrl']);
|
|
31
|
+
await reporting.brightness(endpoint);
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
];
|
|
@@ -379,6 +379,7 @@ module.exports = [
|
|
|
379
379
|
endpoint: (device) => {
|
|
380
380
|
return {'top': 21, 'bottom': 22};
|
|
381
381
|
},
|
|
382
|
+
whiteLabel: [{vendor: 'Elko', model: 'EKO07117'}],
|
|
382
383
|
meta: {multiEndpoint: true},
|
|
383
384
|
exposes: [e.action(['on_top', 'off_top', 'on_bottom', 'off_bottom', 'brightness_move_up_top', 'brightness_stop_top',
|
|
384
385
|
'brightness_move_down_top', 'brightness_stop_top', 'brightness_move_up_bottom', 'brightness_stop_bottom',
|
package/devices/tuya.js
CHANGED
|
@@ -331,6 +331,7 @@ module.exports = [
|
|
|
331
331
|
{modelID: 'TS0601', manufacturerName: '_TZE200_dfxkcots'},
|
|
332
332
|
{modelID: 'TS0601', manufacturerName: '_TZE200_ojzhk75b'},
|
|
333
333
|
{modelID: 'TS0601', manufacturerName: '_TZE200_swaamsoy'},
|
|
334
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_3p5ydos3'},
|
|
334
335
|
],
|
|
335
336
|
model: 'TS0601_dimmer',
|
|
336
337
|
vendor: 'TuYa',
|
|
@@ -1158,6 +1159,7 @@ module.exports = [
|
|
|
1158
1159
|
vendor: 'TuYa',
|
|
1159
1160
|
whiteLabel: [{vendor: 'LELLKI', model: 'TS011F_plug'}, {vendor: 'NEO', model: 'NAS-WR01B'},
|
|
1160
1161
|
{vendor: 'BlitzWolf', model: 'BW-SHP15'}],
|
|
1162
|
+
ota: ota.zigbeeOTA,
|
|
1161
1163
|
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory,
|
|
1162
1164
|
fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
|
|
1163
1165
|
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory, tz.ts011f_plug_indicator_mode, tz.ts011f_plug_child_mode],
|
|
@@ -1207,6 +1209,7 @@ module.exports = [
|
|
|
1207
1209
|
description: 'Smart plug (with power monitoring by polling)',
|
|
1208
1210
|
vendor: 'TuYa',
|
|
1209
1211
|
whiteLabel: [{vendor: 'VIKEFON', model: 'TS011F'}, {vendor: 'BlitzWolf', model: 'BW-SHP15'}],
|
|
1212
|
+
ota: ota.zigbeeOTA,
|
|
1210
1213
|
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory,
|
|
1211
1214
|
fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
|
|
1212
1215
|
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory, tz.ts011f_plug_indicator_mode, tz.ts011f_plug_child_mode],
|
|
@@ -1306,7 +1309,7 @@ module.exports = [
|
|
|
1306
1309
|
description: 'PIR sensor',
|
|
1307
1310
|
fromZigbee: [fz.battery, fz.ignore_basic_report, fz.ias_occupancy_alarm_1],
|
|
1308
1311
|
toZigbee: [],
|
|
1309
|
-
whiteLabel: [{vendor: 'Samotech', model: 'SM301Z'}],
|
|
1312
|
+
whiteLabel: [{vendor: 'Samotech', model: 'SM301Z'}, {vendor: 'Nedis', model: 'ZBSM10WT'}],
|
|
1310
1313
|
exposes: [e.battery(), e.occupancy(), e.battery_low(), e.tamper()],
|
|
1311
1314
|
},
|
|
1312
1315
|
{
|
package/devices/xiaomi.js
CHANGED
|
@@ -54,9 +54,15 @@ module.exports = [
|
|
|
54
54
|
model: 'MCCGQ13LM',
|
|
55
55
|
vendor: 'Xiaomi',
|
|
56
56
|
description: 'Aqara P1 door & window contact sensor',
|
|
57
|
-
fromZigbee: [fz.ias_contact_alarm_1, fz.aqara_opple],
|
|
57
|
+
fromZigbee: [fz. xiaomi_contact, fz.ias_contact_alarm_1, fz.aqara_opple, fz.battery],
|
|
58
58
|
toZigbee: [],
|
|
59
|
+
meta: {battery: {voltageToPercentage: '3V_2850_3200'}},
|
|
59
60
|
exposes: [e.contact(), e.battery(), e.battery_voltage()],
|
|
61
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
62
|
+
const endpoint = device.getEndpoint(1);
|
|
63
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
64
|
+
await reporting.batteryVoltage(endpoint);
|
|
65
|
+
},
|
|
60
66
|
},
|
|
61
67
|
{
|
|
62
68
|
zigbeeModel: ['lumi.dimmer.rcbac1'],
|
|
@@ -1472,7 +1478,8 @@ module.exports = [
|
|
|
1472
1478
|
// Ignore energy metering reports, rely on aqara_opple: https://github.com/Koenkk/zigbee2mqtt/issues/10709
|
|
1473
1479
|
fromZigbee: [fz.on_off, fz.device_temperature, fz.aqara_opple, fz.ignore_metering, fz.ignore_electrical_measurement,
|
|
1474
1480
|
fz.xiaomi_power],
|
|
1475
|
-
exposes: [e.switch(), e.energy(), e.power(), e.device_temperature(), e.power_outage_memory(), e.switch_type()
|
|
1481
|
+
exposes: [e.switch(), e.energy(), e.power(), e.device_temperature(), e.power_outage_memory(), e.switch_type(),
|
|
1482
|
+
e.voltage(), e.temperature(), e.current()],
|
|
1476
1483
|
toZigbee: [tz.xiaomi_switch_type, tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night],
|
|
1477
1484
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1478
1485
|
const endpoint = device.getEndpoint(1);
|