zigbee-herdsman-converters 14.0.507 → 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: {
@@ -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',
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/tuya.js CHANGED
@@ -1417,11 +1417,12 @@ module.exports = [
1417
1417
  .withDescription('Plug LED indicator mode'), e.child_lock()],
1418
1418
  },
1419
1419
  {
1420
- fingerprint: [].concat(...TS011Fplugs.map((manufacturerName) => {
1421
- return [69, 68, 65, 64, 74].map((applicationVersion) => {
1422
- return {modelID: 'TS011F', manufacturerName, applicationVersion};
1423
- });
1424
- })),
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
+ })),
1425
1426
  model: 'TS011F_plug_3',
1426
1427
  description: 'Smart plug (with power monitoring by polling)',
1427
1428
  vendor: 'TuYa',
@@ -1946,6 +1947,22 @@ module.exports = [
1946
1947
  e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
1947
1948
  .withDescription('Recover state after power outage')],
1948
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
+ },
1949
1966
  {
1950
1967
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nklqjk62'}],
1951
1968
  model: 'PJ-ZGD01',
@@ -2262,7 +2279,8 @@ module.exports = [
2262
2279
  },
2263
2280
  {
2264
2281
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
2265
- {modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'}],
2282
+ {modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
2283
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
2266
2284
  model: 'TS0601_smart_human_presense_sensor',
2267
2285
  vendor: 'TuYa',
2268
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.507",
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": [