zigbee-herdsman-converters 14.0.505 → 14.0.508

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/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  Collection of device converters to be used with zigbee-herdsman.
5
5
 
6
6
  ## Contributing
7
- See [Zigbee2MQTT how to support new devices](http://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html).
7
+ See [Zigbee2MQTT how to support new devices](https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html).
8
8
 
9
9
  ## Submitting a pull request
10
10
  If you'd like to submit a pull request, you should run the following commands to ensure your changes will pass the tests:
@@ -1909,34 +1909,57 @@ const converters = {
1909
1909
  },
1910
1910
  nous_lcd_temperature_humidity_sensor: {
1911
1911
  cluster: 'manuSpecificTuya',
1912
- type: ['commandDataResponse'],
1912
+ type: ['commandDataResponse', 'commandDataReport'],
1913
1913
  options: [exposes.options.precision('temperature'), exposes.options.calibration('temperature'),
1914
1914
  exposes.options.precision('humidity'), exposes.options.calibration('humidity')],
1915
1915
  convert: (model, msg, publish, options, meta) => {
1916
- const dpValue = tuya.firstDpValue(msg, meta, 'nous_lcd_temperature_humidity_sensor');
1917
- const dp = dpValue.dp;
1918
- const value = tuya.getDataValue(dpValue);
1919
- switch (dp) {
1920
- case tuya.dataPoints.nousTemperature:
1921
- return {temperature: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
1922
- case tuya.dataPoints.nousHumidity:
1923
- return {humidity: calibrateAndPrecisionRoundOptions(value, options, 'humidity')};
1924
- case tuya.dataPoints.nousBattery:
1925
- return {battery: value};
1926
- case tuya.dataPoints.nousTempUnitConvert:
1927
- return {temperature_unit_convert: {0x00: 'celsius', 0x01: 'fahrenheit'}[value]};
1928
- case tuya.dataPoints.nousMaxTemp:
1929
- return {max_temperature: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
1930
- case tuya.dataPoints.nousMinTemp:
1931
- return {min_temperature: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
1932
- case tuya.dataPoints.nousTempAlarm:
1933
- return {temperature_alarm: {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value]};
1934
- case tuya.dataPoints.nousTempSensitivity:
1935
- return {temperature_sensitivity: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
1936
- default:
1937
- meta.logger.warn(`zigbee-herdsman-converters:nous_lcd_temperature_humidity_sensor: NOT RECOGNIZED ` +
1938
- `DP #${dp} with data ${JSON.stringify(dpValue)}`);
1916
+ const result = {};
1917
+ for (const dpValue of msg.data.dpValues) {
1918
+ const dp = dpValue.dp;
1919
+ const value = tuya.getDataValue(dpValue);
1920
+ switch (dp) {
1921
+ case tuya.dataPoints.nousTemperature:
1922
+ result.temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
1923
+ break;
1924
+ case tuya.dataPoints.nousHumidity:
1925
+ result.humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
1926
+ break;
1927
+ case tuya.dataPoints.nousBattery:
1928
+ result.battery = value;
1929
+ break;
1930
+ case tuya.dataPoints.nousTempUnitConvert:
1931
+ result.temperature_unit_convert = {0x00: 'celsius', 0x01: 'fahrenheit'}[value];
1932
+ break;
1933
+ case tuya.dataPoints.nousMaxTemp:
1934
+ result.max_temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
1935
+ break;
1936
+ case tuya.dataPoints.nousMinTemp:
1937
+ result.min_temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
1938
+ break;
1939
+ case tuya.dataPoints.nousMaxHumi:
1940
+ result.max_humidity = calibrateAndPrecisionRoundOptions(value / 10, options, 'humidity');
1941
+ break;
1942
+ case tuya.dataPoints.nousMinHumi:
1943
+ result.min_humidity = calibrateAndPrecisionRoundOptions(value / 10, options, 'humidity');
1944
+ break;
1945
+ case tuya.dataPoints.nousTempAlarm:
1946
+ result.temperature_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
1947
+ break;
1948
+ case tuya.dataPoints.nousHumiAlarm:
1949
+ result.humidity_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
1950
+ break;
1951
+ case tuya.dataPoints.nousTempSensitivity:
1952
+ result.temperature_sensitivity = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
1953
+ break;
1954
+ case tuya.dataPoints.nousReportInterval:
1955
+ result.report_interval = value;
1956
+ break;
1957
+ default:
1958
+ meta.logger.warn(`zigbee-herdsman-converters:nous_lcd_temperature_humidity_sensor: NOT RECOGNIZED ` +
1959
+ `DP #${dp} with data ${JSON.stringify(dpValue)}`);
1960
+ }
1939
1961
  }
1962
+ return result;
1940
1963
  },
1941
1964
  },
1942
1965
  tuya_illuminance_temperature_humidity_sensor: {
@@ -6558,7 +6558,7 @@ const converters = {
6558
6558
  {sendWhen: 'active'});
6559
6559
  break;
6560
6560
  case 'keep_time':
6561
- await entity.write('ssIasZone', {61441: {value: {'30': 0, '60': 1, '120': 2}[value], type: 0x20}}, {sendWhen: 'active'});
6561
+ await entity.write('ssIasZone', {61441: {value: {30: 0, 60: 1, 120: 2}[value], type: 0x20}}, {sendWhen: 'active'});
6562
6562
  break;
6563
6563
  default: // Unknown key
6564
6564
  throw new Error(`Unhandled key ${key}`);
@@ -20,6 +20,21 @@ module.exports = [
20
20
  },
21
21
  exposes: [e.lock(), e.battery(), e.lock_action(), e.lock_action_source_name(), e.lock_action_source_user()],
22
22
  },
23
+ {
24
+ zigbeeModel: ['SMARTCODE_CONVERT_GEN1_W3'],
25
+ model: '99140-139',
26
+ vendor: 'Kwikset',
27
+ description: 'Home connect smart lock conversion kit',
28
+ fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery],
29
+ toZigbee: [tz.lock],
30
+ configure: async (device, coordinatorEndpoint, logger) => {
31
+ const endpoint = device.getEndpoint(2);
32
+ await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
33
+ await reporting.lockState(endpoint);
34
+ await reporting.batteryPercentageRemaining(endpoint);
35
+ },
36
+ exposes: [e.lock(), e.battery(), e.lock_action(), e.lock_action_source_name(), e.lock_action_source_user()],
37
+ },
23
38
  {
24
39
  zigbeeModel: ['SMARTCODE_DEADBOLT_10_L'],
25
40
  model: '99140-002',
@@ -146,7 +146,7 @@ module.exports = [
146
146
  const endpoint = device.getEndpoint(1);
147
147
  await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'genOnOff', 'genLevelCtrl']);
148
148
  const endpoint2 = device.getEndpoint(2);
149
- await reporting.bind(endpoint2, coordinatorEndpoint, ['genPowerCfg', 'genOnOff', 'genLevelCtrl']);
149
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
150
150
  },
151
151
  endpoint: (device) => {
152
152
  return {left: 1, right: 2};
package/devices/lidl.js CHANGED
@@ -550,6 +550,17 @@ module.exports = [
550
550
  device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
551
551
  },
552
552
  },
553
+ {
554
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_hxtfthp5'}],
555
+ model: '14158804L',
556
+ vendor: 'Lidl',
557
+ description: 'Livarno Home LED desk lamp RGBW',
558
+ ...extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
559
+ meta: {applyRedFix: true, enhancedHue: false},
560
+ configure: async (device, coordinatorEndpoint, logger) => {
561
+ device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
562
+ },
563
+ },
553
564
  {
554
565
  fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_quqaeew6'}],
555
566
  model: 'HG07834A',
@@ -49,7 +49,7 @@ module.exports = [
49
49
  extend: extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
50
50
  },
51
51
  {
52
- fingerprint: [{manufacturerName: '_TZ3000_xwh1e22x'}],
52
+ fingerprint: [{modelID: 'TS1002', manufacturerName: '_TZ3000_xwh1e22x'}],
53
53
  model: 'FUT089Z',
54
54
  vendor: 'MiBoxer',
55
55
  description: 'RGB+CCT Remote',
@@ -110,7 +110,7 @@ module.exports = [
110
110
  {
111
111
  fingerprint: [{manufacturerName: '_TZ3000_bdbb0fon'}],
112
112
  zigbeeModel: ['ZBT-Remote-ALL-RGBW', 'TS1001'],
113
- model: 'MLI-404011',
113
+ model: 'MLI-404011/MLI-404049',
114
114
  description: 'Tint remote control',
115
115
  vendor: 'Müller Licht',
116
116
  fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.legacy.tint404011_brightness_updown_click,
package/devices/neo.js CHANGED
@@ -35,7 +35,7 @@ module.exports = [
35
35
  },
36
36
  },
37
37
  {
38
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t1blo2bj'}],
38
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t1blo2bj'}, {modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'}],
39
39
  zigbeeModel: ['1blo2bj'],
40
40
  model: 'NAS-AB02B2',
41
41
  vendor: 'Neo',
package/devices/nous.js CHANGED
@@ -17,7 +17,7 @@ module.exports = [
17
17
  exposes: [e.temperature(), e.humidity(), e.battery()],
18
18
  },
19
19
  {
20
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}],
20
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}, {modelID: 'TS0601', manufacturerName: '_TZE200_c7emyjom'}],
21
21
  model: 'SZ-T04',
22
22
  vendor: 'Nous',
23
23
  description: 'Temperature and humidity sensor with clock',
package/devices/nue_3a.js CHANGED
@@ -142,6 +142,7 @@ module.exports = [
142
142
  configure: async (device, coordinatorEndpoint, logger) => {
143
143
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
144
144
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
145
+ await reporting.brightness(device.getEndpoint(1));
145
146
  },
146
147
  },
147
148
  {
@@ -1397,6 +1397,13 @@ module.exports = [
1397
1397
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
1398
1398
  ota: ota.zigbeeOTA,
1399
1399
  },
1400
+ {
1401
+ zigbeeModel: ['929003054101'],
1402
+ model: '929003054101',
1403
+ vendor: 'Philips',
1404
+ description: 'Hue Wellner white ambiance E27 806lm with Bluetooth',
1405
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
1406
+ },
1400
1407
  {
1401
1408
  zigbeeModel: ['3261330P6'],
1402
1409
  model: '3261330P6',
package/devices/rtx.js CHANGED
@@ -6,7 +6,7 @@ const ea = exposes.access;
6
6
 
7
7
  module.exports = [
8
8
  {
9
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_akjefhj5'}],
9
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_akjefhj5'}, {modelID: 'TS0601', manufacturerName: '_TZE200_2wg5qrjy'}],
10
10
  model: 'ZVG1',
11
11
  vendor: 'RTX',
12
12
  description: 'Zigbee smart water valve',
package/devices/tuya.js CHANGED
@@ -211,6 +211,7 @@ module.exports = [
211
211
  {manufacturerName: '_TZ3000_q6a3tepg'}, {modelID: 'TS000F', manufacturerName: '_TZ3000_m9af2l6g'},
212
212
  {modelID: 'TS0001', manufacturerName: '_TZ3000_npzfdcof'},
213
213
  {modelID: 'TS0001', manufacturerName: '_TZ3000_5ng23zjs'},
214
+ {modelID: 'TS0001', manufacturerName: '_TZ3000_rmjr4ufz'},
214
215
  {modelID: 'TS0001', manufacturerName: '_TZ3000_v7gnj3ad'},
215
216
  {modelID: 'TS0001', manufacturerName: '_TZ3000_mx3vgyea'}],
216
217
  model: 'WHD02',
@@ -365,7 +366,6 @@ module.exports = [
365
366
  {modelID: 'TS0202', manufacturerName: '_TYZB01_dl7cejts'},
366
367
  {modelID: 'TS0202', manufacturerName: '_TYZB01_qjqgmqxr'},
367
368
  {modelID: 'TS0202', manufacturerName: '_TZ3000_mmtwjmaq'},
368
- {modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'},
369
369
  {modelID: 'TS0202', manufacturerName: '_TYZB01_zwvaj5wy'},
370
370
  {modelID: 'TS0202', manufacturerName: '_TZ3000_bsvqrxru'},
371
371
  {modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
@@ -390,8 +390,7 @@ module.exports = [
390
390
  },
391
391
  },
392
392
  {
393
- fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'},
394
- {modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
393
+ fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
395
394
  model: 'ZM-35H-Q',
396
395
  vendor: 'TuYa',
397
396
  description: 'Motion Sensor',
@@ -399,7 +398,19 @@ module.exports = [
399
398
  toZigbee: [tz.ZM35HQ_attr],
400
399
  exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery(),
401
400
  exposes.enum('sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('PIR sensor sensitivity'),
402
- exposes.enum('keep_time', ea.ALL, ['30', '60', '120']).withDescription('PIR keep time in seconds'),
401
+ exposes.enum('keep_time', ea.ALL, [30, 60, 120]).withDescription('PIR keep time in seconds'),
402
+ ],
403
+ },
404
+ {
405
+ fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'}],
406
+ model: 'IH012-RT01',
407
+ vendor: 'TuYa',
408
+ description: 'Motion sensor',
409
+ fromZigbee: [fz.ias_occupancy_alarm_1, fz.ignore_basic_report, fz.ZM35HQ_attr],
410
+ toZigbee: [tz.ZM35HQ_attr],
411
+ exposes: [e.occupancy(), e.battery_low(), e.tamper(),
412
+ exposes.enum('sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('PIR sensor sensitivity'),
413
+ exposes.enum('keep_time', ea.ALL, [30, 60, 120]).withDescription('PIR keep time in seconds'),
403
414
  ],
404
415
  },
405
416
  {
@@ -1406,11 +1417,12 @@ module.exports = [
1406
1417
  .withDescription('Plug LED indicator mode'), e.child_lock()],
1407
1418
  },
1408
1419
  {
1409
- fingerprint: [].concat(...TS011Fplugs.map((manufacturerName) => {
1410
- return [69, 68, 65, 64, 74].map((applicationVersion) => {
1411
- return {modelID: 'TS011F', manufacturerName, applicationVersion};
1412
- });
1413
- })),
1420
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_gjnozsaz', applicationVersion: 74}]
1421
+ .concat(...TS011Fplugs.map((manufacturerName) => {
1422
+ return [69, 68, 65, 64].map((applicationVersion) => {
1423
+ return {modelID: 'TS011F', manufacturerName, applicationVersion};
1424
+ });
1425
+ })),
1414
1426
  model: 'TS011F_plug_3',
1415
1427
  description: 'Smart plug (with power monitoring by polling)',
1416
1428
  vendor: 'TuYa',
@@ -1935,6 +1947,22 @@ module.exports = [
1935
1947
  e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
1936
1948
  .withDescription('Recover state after power outage')],
1937
1949
  },
1950
+ {
1951
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_7issjl2q'}],
1952
+ model: 'ATMS1601Z',
1953
+ description: 'Din smart relay (without power monitoring)',
1954
+ vendor: 'TuYa',
1955
+ fromZigbee: [fz.on_off, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
1956
+ toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
1957
+ configure: async (device, coordinatorEndpoint, logger) => {
1958
+ const endpoint = device.getEndpoint(1);
1959
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
1960
+ device.save();
1961
+ },
1962
+ exposes: [e.switch(),
1963
+ exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
1964
+ .withDescription('Recover state after power outage')],
1965
+ },
1938
1966
  {
1939
1967
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nklqjk62'}],
1940
1968
  model: 'PJ-ZGD01',
@@ -2250,7 +2278,9 @@ module.exports = [
2250
2278
  toZigbee: [],
2251
2279
  },
2252
2280
  {
2253
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'}],
2281
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
2282
+ {modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
2283
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
2254
2284
  model: 'TS0601_smart_human_presense_sensor',
2255
2285
  vendor: 'TuYa',
2256
2286
  description: 'Smart Human presence sensor',
package/devices/xiaomi.js CHANGED
@@ -922,7 +922,8 @@ module.exports = [
922
922
  description: 'Aqara P1 human body movement and illuminance sensor',
923
923
  fromZigbee: [fz.aqara_occupancy_illuminance, fz.aqara_opple, fz.battery],
924
924
  toZigbee: [tz.aqara_detection_interval, tz.aqara_motion_sensitivity],
925
- exposes: [e.occupancy(), e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
925
+ exposes: [e.occupancy(), e.illuminance_lux().withProperty('illuminance'),
926
+ e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
926
927
  exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
927
928
  exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
928
929
  .withDescription('Time interval for detecting actions'), e.temperature(), e.battery()],
@@ -1360,7 +1361,7 @@ module.exports = [
1360
1361
  await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
1361
1362
  }
1362
1363
  },
1363
- exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET),
1364
+ exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.temperature(),
1364
1365
  exposes.binary('charging_status', ea.STATE_GET, true, false)
1365
1366
  .withDescription('The current charging status.'),
1366
1367
  exposes.enum('motor_state', ea.STATE, ['declining', 'rising', 'pause', 'blocked'])
@@ -75,6 +75,30 @@ module.exports = [
75
75
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
76
76
  },
77
77
  },
78
+ {
79
+ fingerprint: [{modelID: 'TS0003', manufacturerName: '_TZ3000_vjhcenzo'}],
80
+ model: 'TB25',
81
+ vendor: 'Zemismart',
82
+ description: 'Smart light switch and socket - 2 gang with neutral wire',
83
+ toZigbee: extend.switch().toZigbee.concat([tz.moes_power_on_behavior]),
84
+ fromZigbee: extend.switch().fromZigbee.concat([fz.moes_power_on_behavior]),
85
+ exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('center'), e.switch().withEndpoint('right'),
86
+ exposes.enum('power_on_behavior', ea.ALL, ['on', 'off', 'previous']),
87
+ ],
88
+ endpoint: () => {
89
+ return {'left': 1, 'center': 2, 'right': 3};
90
+ },
91
+ meta: {multiEndpoint: true},
92
+ configure: async (device, coordinatorEndpoint) => {
93
+ await device.getEndpoint(1).read('genBasic',
94
+ ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
95
+ for (const endpointID of [1, 2, 3]) {
96
+ const endpoint = device.getEndpoint(endpointID);
97
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
98
+ await reporting.onOff(endpoint);
99
+ }
100
+ },
101
+ },
78
102
  {
79
103
  zigbeeModel: ['LXN56-SS27LX1.1'],
80
104
  model: 'LXN56-SS27LX1.1',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.505",
3
+ "version": "14.0.508",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [