zigbee-herdsman-converters 14.0.506 → 14.0.509

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:
@@ -1693,10 +1693,10 @@ const converters = {
1693
1693
  result.temperature_display = lookup[data[0x1008]];
1694
1694
  }
1695
1695
  if (data.hasOwnProperty(0x1009)) { // WindowOpenCheck
1696
- result.window_open_check = data[0x1009];
1696
+ result.window_open_check = data[0x1009] / 2;
1697
1697
  }
1698
1698
  if (data.hasOwnProperty(0x100A)) { // Hysterersis
1699
- result.hysterersis = data[0x100A];
1699
+ result.hysterersis = precisionRound(data[0x100A], 2) / 10;
1700
1700
  }
1701
1701
  if (data.hasOwnProperty(0x100B)) { // DisplayAutoOffEnable
1702
1702
  const lookup = {0: 'enable', 1: 'disable'};
@@ -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: {
@@ -5385,7 +5408,7 @@ const converters = {
5385
5408
  payload.device_mode = 'unknown';
5386
5409
  }
5387
5410
  }
5388
- if (msg.data.hasOwnProperty('1')) payload.permanent_led = msg.data['1'] === 0x00 ? 'OFF' : 'ON';
5411
+ if (msg.data.hasOwnProperty('1')) payload.led_when_off = msg.data['1'] === 0x00 ? 'OFF' : 'ON';
5389
5412
  if (msg.data.hasOwnProperty('2')) payload.led_when_on = msg.data['2'] === 0x00 ? 'OFF' : 'ON';
5390
5413
  return payload;
5391
5414
  },
@@ -3062,10 +3062,10 @@ const converters = {
3062
3062
  const payload = {0x1008: {value: lookup[value], type: herdsman.Zcl.DataType.enum8}};
3063
3063
  await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
3064
3064
  } else if (key==='window_open_check') {
3065
- const payload = {0x1009: {value: Math.round(value * 10), type: 0x20}};
3065
+ const payload = {0x1009: {value: value * 2, type: 0x20}};
3066
3066
  await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
3067
3067
  } else if (key==='hysterersis') {
3068
- const payload = {0x100A: {value: Math.round(value * 10), type: 0x20}};
3068
+ const payload = {0x100A: {value: value* 10, type: 0x20}};
3069
3069
  await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
3070
3070
  } else if (key==='display_auto_off_enabled') {
3071
3071
  const lookup = {'enable': 0, 'disabled': 1};
@@ -4839,13 +4839,13 @@ const converters = {
4839
4839
  },
4840
4840
  legrand_settingAlwaysEnableLed: {
4841
4841
  // connected power outlet is on attribute 2 and not 1
4842
- key: ['permanent_led'],
4842
+ key: ['led_when_off'],
4843
4843
  convertSet: async (entity, key, value, meta) => {
4844
4844
  // enable or disable the LED (blue) when permitJoin=false (LED off)
4845
4845
  const enableLedIfOn = value === 'ON' || (value === 'OFF' ? false : !!value);
4846
4846
  const payload = {1: {value: enableLedIfOn, type: 16}};
4847
4847
  await entity.write('manuSpecificLegrandDevices', payload, manufacturerOptions.legrand);
4848
- return {state: {'permanent_led': value}};
4848
+ return {state: {'led_when_off': value}};
4849
4849
  },
4850
4850
  convertGet: async (entity, key, meta) => {
4851
4851
  await entity.read('manuSpecificLegrandDevices', [0x0001], manufacturerOptions.legrand);
@@ -16,7 +16,7 @@ module.exports = [
16
16
  toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn, tz.legrand_identify],
17
17
  exposes: [
18
18
  e.switch(), e.action(['identify', 'on', 'off']),
19
- exposes.binary('permanent_led', ea.ALL, 'ON', 'OFF').withDescription('Enable or disable the permanent blue LED'),
19
+ exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
20
20
  exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on'),
21
21
  ],
22
22
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -39,7 +39,7 @@ module.exports = [
39
39
  exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
40
40
  .withDescription('Specifies the maximum brightness value'),
41
41
  exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
42
- exposes.binary('permanent_led', ea.ALL, 'ON', 'OFF').withDescription('Enable or disable the permanent blue LED'),
42
+ exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
43
43
  exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
44
44
  configure: async (device, coordinatorEndpoint, logger) => {
45
45
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
@@ -41,7 +41,8 @@ module.exports = [
41
41
  exposes: [e.cover_position().setAccess('state', ea.ALL), e.temperature(), e.battery(), e.pressure()],
42
42
  },
43
43
  {
44
- zigbeeModel: ['SV02-410-MP-1.3', 'SV02-412-MP-1.3', 'SV02-610-MP-1.3', 'SV02-612-MP-1.3', 'SV02-410-MP-1.0', 'SV02-410-MP-1.2'],
44
+ zigbeeModel: ['SV02-410-MP-1.3', 'SV02-412-MP-1.3', 'SV02-610-MP-1.3', 'SV02-612-MP-1.2', 'SV02-612-MP-1.3', 'SV02-410-MP-1.0',
45
+ 'SV02-410-MP-1.2'],
45
46
  model: 'SV02',
46
47
  vendor: 'Keen Home',
47
48
  description: 'Smart vent',
@@ -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};
@@ -182,7 +182,7 @@ module.exports = [
182
182
  exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
183
183
  .withDescription('Specifies the maximum brightness value'),
184
184
  exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
185
- exposes.binary('permanent_led', ea.ALL, 'ON', 'OFF').withDescription('Enable or disable the permanent blue LED'),
185
+ exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
186
186
  exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
187
187
  configure: async (device, coordinatorEndpoint, logger) => {
188
188
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
@@ -328,7 +328,7 @@ module.exports = [
328
328
  toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn],
329
329
  exposes: [e.switch().withEndpoint('left'),
330
330
  e.switch().withEndpoint('right'),
331
- exposes.binary('permanent_led', ea.ALL, 'ON', 'OFF').withDescription('Enable or disable the permanent blue LED'),
331
+ exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
332
332
  exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
333
333
  meta: {multiEndpoint: true},
334
334
  configure: async (device, coordinatorEndpoint, logger) => {
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/namron.js CHANGED
@@ -276,7 +276,7 @@ module.exports = [
276
276
  exposes.climate()
277
277
  .withSetpoint('occupied_heating_setpoint', 0, 40, 0.1)
278
278
  .withLocalTemperature()
279
- .withLocalTemperatureCalibration(-30, 30, 0.1)
279
+ .withLocalTemperatureCalibration(-3, 3, 0.1)
280
280
  .withSystemMode(['off', 'auto', 'heat'])
281
281
  .withRunningState(['idle', 'heat']),
282
282
  exposes.binary('away_mode', ea.ALL, 'ON', 'OFF')
@@ -308,16 +308,16 @@ module.exports = [
308
308
  .withDescription('The temperature on the display. Default: Room Temperature.'),
309
309
  exposes.numeric('window_open_check', ea.ALL)
310
310
  .withUnit('°C')
311
- .withValueMin(3).withValueMax(8).withValueStep(0.5)
312
- .withDescription('The threshold to detect window open, between 3 and 8 in 0.5 °C. Default: 0 (disabled).'),
311
+ .withValueMin(1.5).withValueMax(4).withValueStep(0.5)
312
+ .withDescription('The threshold to detect window open, between 1.5 and 4 in 0.5 °C. Default: 0 (disabled).'),
313
313
  exposes.numeric('hysterersis', ea.ALL)
314
314
  .withUnit('°C')
315
- .withValueMin(5).withValueMax(20).withValueStep(0.1)
316
- .withDescription('Hysteresis setting, between 5 and 20 in 0.1 °C. Default: 5.'),
315
+ .withValueMin(0.5).withValueMax(2).withValueStep(0.1)
316
+ .withDescription('Hysteresis setting, between 0.5 and 2 in 0.1 °C. Default: 0.5.'),
317
317
  exposes.enum('display_auto_off_enabled', ea.ALL, ['enable', 'disabled']),
318
318
  exposes.numeric('alarm_airtemp_overvalue', ea.ALL)
319
319
  .withUnit('°C')
320
- .withValueMin(20).withValueMax(60).withValueStep(1)
320
+ .withValueMin(20).withValueMax(60)
321
321
  .withDescription('Room temperature alarm threshold, between 20 and 60 in °C. 0 means disabled. Default: 45.'),
322
322
  ],
323
323
  configure: async (device, coordinatorEndpoint, logger) => {
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
  {
@@ -2258,6 +2258,20 @@ module.exports = [
2258
2258
  },
2259
2259
  ota: ota.zigbeeOTA,
2260
2260
  },
2261
+ {
2262
+ zigbeeModel: ['LOM011'],
2263
+ model: '8719514342361',
2264
+ vendor: 'Philips',
2265
+ description: 'Hue smart plug - AU',
2266
+ extend: extend.switch(),
2267
+ toZigbee: [tz.on_off].concat([tz.hue_power_on_behavior, tz.hue_power_on_error]),
2268
+ configure: async (device, coordinatorEndpoint, logger) => {
2269
+ const endpoint = device.getEndpoint(11);
2270
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
2271
+ await reporting.onOff(endpoint);
2272
+ },
2273
+ ota: ota.zigbeeOTA,
2274
+ },
2261
2275
  {
2262
2276
  zigbeeModel: ['LOM006'],
2263
2277
  model: '9290024426',
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',
@@ -370,7 +371,6 @@ module.exports = [
370
371
  {modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
371
372
  {modelID: 'TS0202', manufacturerName: '_TYZB01_hqbdru35'},
372
373
  {modelID: 'TS0202', manufacturerName: '_TZ3000_otvn3lne'},
373
- {modelID: 'TS0202', manufacturerName: '_TZ3000_rmjr4ufz'},
374
374
  {modelID: 'TS0202', manufacturerName: '_TZ3000_tiwq83wk'},
375
375
  {modelID: 'TS0202', manufacturerName: '_TZ3000_ykwcwxmz'},
376
376
  {modelID: 'WHD02', manufacturerName: '_TZ3000_hktqahrq'}],
@@ -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.506",
3
+ "version": "14.0.509",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [