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.
@@ -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
@@ -26,7 +26,7 @@ module.exports = [
26
26
  },
27
27
  },
28
28
  {
29
- zigbeeModel: ['LXEK-5'],
29
+ zigbeeModel: ['LXEK-5', 'ZBEK-26'],
30
30
  model: 'HR-C99C-Z-C045',
31
31
  vendor: 'ADEO',
32
32
  description: 'RGB CTT LEXMAN ENKI remote control',
@@ -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: [
@@ -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',
@@ -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);