zigbee-herdsman-converters 14.0.256 → 14.0.260

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.
@@ -1681,6 +1681,35 @@ const converters = {
1681
1681
  }
1682
1682
  },
1683
1683
  },
1684
+ ts0201_temperature_humidity_alarm: {
1685
+ cluster: 'manuSpecificTuya_2',
1686
+ type: ['attributeReport', 'readResponse'],
1687
+ convert: (model, msg, publish, options, meta) => {
1688
+ const result = {};
1689
+ if (msg.data.hasOwnProperty('alarm_temperature_max')) {
1690
+ result.alarm_temperature_max = msg.data['alarm_temperature_max'];
1691
+ }
1692
+ if (msg.data.hasOwnProperty('alarm_temperature_min')) {
1693
+ result.alarm_temperature_min = msg.data['alarm_temperature_min'];
1694
+ }
1695
+ if (msg.data.hasOwnProperty('alarm_humidity_max')) {
1696
+ result.alarm_humidity_max = msg.data['alarm_humidity_max'];
1697
+ }
1698
+ if (msg.data.hasOwnProperty('alarm_humidity_min')) {
1699
+ result.alarm_humidity_min = msg.data['alarm_humidity_min'];
1700
+ }
1701
+ if (msg.data.hasOwnProperty('alarm_humidity')) {
1702
+ const sensorAlarmLookup = {'0': 'below_min_humdity', '1': 'over_humidity', '2': 'off'};
1703
+ result.alarm_humidity = sensorAlarmLookup[msg.data['alarm_humidity']];
1704
+ }
1705
+ if (msg.data.hasOwnProperty('alarm_temperature')) {
1706
+ const sensorAlarmLookup = {'0': 'below_min_temperature', '1': 'over_temperature', '2': 'off'};
1707
+ result.alarm_temperature = sensorAlarmLookup[msg.data['alarm_temperature']];
1708
+ }
1709
+ return result;
1710
+ },
1711
+
1712
+ },
1684
1713
  tuya_thermostat_weekly_schedule: {
1685
1714
  cluster: 'manuSpecificTuya',
1686
1715
  type: ['commandGetData', 'commandSetDataResponse'],
@@ -1902,7 +1902,7 @@ const converters = {
1902
1902
  xiaomi_switch_power_outage_memory: {
1903
1903
  key: ['power_outage_memory'],
1904
1904
  convertSet: async (entity, key, value, meta) => {
1905
- if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1905
+ if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1906
1906
  'WS-EUK01', 'WS-EUK02', 'WS-EUK03', 'WS-EUK04', 'QBKG31LM', 'QBCZ15LM',
1907
1907
  'QBCZ14LM'].includes(meta.mapped.model)) {
1908
1908
  await entity.write('aqaraOpple', {0x0201: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
@@ -1925,7 +1925,7 @@ const converters = {
1925
1925
  return {state: {power_outage_memory: value}};
1926
1926
  },
1927
1927
  convertGet: async (entity, key, meta) => {
1928
- if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1928
+ if (['ZNCZ04LM', 'QBKG25LM', 'SSM-U01', 'SSM-U02', 'DLKZMK11LM', 'QBKG39LM', 'QBKG41LM', 'ZNCZ15LM',
1929
1929
  'WS-EUK02', 'WS-EUK01', 'QBKG31LM', 'QBCZ15LM', 'QBCZ14LM'].includes(meta.mapped.model)) {
1930
1930
  await entity.read('aqaraOpple', [0x0201]);
1931
1931
  } else if (['ZNCZ02LM', 'QBCZ11LM', 'ZNCZ11LM'].includes(meta.mapped.model)) {
@@ -202,4 +202,42 @@ module.exports = [
202
202
  await reporting.batteryVoltage(endpoint);
203
203
  },
204
204
  },
205
+ {
206
+ zigbeeModel: ['3200-fr'],
207
+ model: '3200-fr',
208
+ vendor: 'Centralite',
209
+ description: 'Smart outlet',
210
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
211
+ toZigbee: [tz.on_off],
212
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
213
+ configure: async (device, coordinatorEndpoint, logger) => {
214
+ const endpoint = device.getEndpoint(1);
215
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
216
+ await reporting.onOff(endpoint);
217
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
218
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
219
+ await reporting.rmsVoltage(endpoint, {change: 2});
220
+ await reporting.rmsCurrent(endpoint, {change: 10});
221
+ await reporting.activePower(endpoint, {change: 2});
222
+ },
223
+ },
224
+ {
225
+ zigbeeModel: ['3200-de'],
226
+ model: '3200-de',
227
+ vendor: 'Centralite',
228
+ description: 'Smart outlet',
229
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
230
+ toZigbee: [tz.on_off],
231
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
232
+ configure: async (device, coordinatorEndpoint, logger) => {
233
+ const endpoint = device.getEndpoint(1);
234
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
235
+ await reporting.onOff(endpoint);
236
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
237
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
238
+ await reporting.rmsVoltage(endpoint, {change: 2});
239
+ await reporting.rmsCurrent(endpoint, {change: 10});
240
+ await reporting.activePower(endpoint, {change: 2});
241
+ },
242
+ },
205
243
  ];
package/devices/ikea.js CHANGED
@@ -614,7 +614,7 @@ module.exports = [
614
614
  extend: tradfriExtend.light_onoff_brightness(),
615
615
  },
616
616
  {
617
- zigbeeModel: ['TRADFRIbulbGU10WS345lm'],
617
+ zigbeeModel: ['TRADFRIbulbGU10WS345lm', 'TRADFRI bulb GU10 WW 345lm'],
618
618
  model: 'LED2005R5',
619
619
  vendor: 'IKEA',
620
620
  description: 'TRADFRI LED bulb GU10 345 lumen, dimmable, white spectrum',
@@ -622,7 +622,7 @@ module.exports = [
622
622
  },
623
623
  {
624
624
  zigbeeModel: ['STARKVIND Air purifier'],
625
- model: 'E3007',
625
+ model: 'E2007',
626
626
  vendor: 'IKEA',
627
627
  description: 'STARKVIND air purifier',
628
628
  exposes: [e.fan().withModes(['off', 'low', 'medium', 'high', 'on', 'auto'])],
@@ -18,6 +18,13 @@ module.exports = [
18
18
  description: 'SmartHome Zigbee Cephei Switch Controller',
19
19
  extend: extend.switch(),
20
20
  },
21
+ {
22
+ zigbeeModel: ['50131'],
23
+ model: '501.31',
24
+ vendor: 'Paulmann',
25
+ description: 'Smart plug for Euro- and Schuko-sockets',
26
+ extend: extend.switch(),
27
+ },
21
28
  {
22
29
  zigbeeModel: ['Dimmablelight '],
23
30
  model: '50044/50045',
@@ -2011,4 +2011,13 @@ module.exports = [
2011
2011
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2012
2012
  ota: ota.zigbeeOTA,
2013
2013
  },
2014
+ {
2015
+ zigbeeModel: ['1745430P7'],
2016
+ model: '1745430P7',
2017
+ vendor: 'Philips',
2018
+ description: 'Hue Impress outdoor Pedestal',
2019
+ meta: {turnsOffAtBrightness1: true},
2020
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2021
+ ota: ota.zigbeeOTA,
2022
+ },
2014
2023
  ];
package/devices/sonoff.js CHANGED
@@ -135,4 +135,11 @@ module.exports = [
135
135
  },
136
136
  exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
137
137
  },
138
+ {
139
+ zigbeeModel: ['S26R2ZB'],
140
+ model: 'S26R2ZB',
141
+ vendor: 'SONOFF',
142
+ description: 'Zigbee smart plug',
143
+ extend: extend.switch(),
144
+ },
138
145
  ];
package/devices/tuya.js CHANGED
@@ -1180,4 +1180,26 @@ module.exports = [
1180
1180
  e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
1181
1181
  .withDescription('Recover state after power outage')],
1182
1182
  },
1183
+ {
1184
+ fingerprint: [{modelID: 'TS0201', manufacturerName: '_TZ3000_qaaysllp'}],
1185
+ model: 'LCZ030',
1186
+ vendor: 'TuYa',
1187
+ description: 'Temperature & humidity & illuminance sensor with display',
1188
+ fromZigbee: [fz.battery, fz.illuminance, fz.temperature, fz.humidity, fz.ts0201_temperature_humidity_alarm],
1189
+ toZigbee: [],
1190
+ configure: async (device, coordinatorEndpoint, logger) => {
1191
+ const endpoint = device.getEndpoint(1);
1192
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg']);
1193
+ },
1194
+ exposes: [e.temperature(), e.humidity(), e.battery(), e.illuminance(), e.illuminance_lux(),
1195
+ exposes.numeric('alarm_temperature_max', ea.STATE).withUnit('°C').withDescription('Alarm temperature max'),
1196
+ exposes.numeric('alarm_temperature_min', ea.STATE).withUnit('°C').withDescription('Alarm temperature min'),
1197
+ exposes.numeric('alarm_humidity_max', ea.STATE).withUnit('%').withDescription('Alarm huminity max'),
1198
+ exposes.numeric('alarm_humidity_min', ea.STATE).withUnit('%').withDescription('Alarm huminity min'),
1199
+ exposes.enum('alarm_humidity', ea.STATE, ['below_min_humdity', 'over_humidity', 'off'])
1200
+ .withDescription('Alarm humidity status'),
1201
+ exposes.enum('alarm_temperature', ea.STATE, ['below_min_temperature', 'over_temperature', 'off'])
1202
+ .withDescription('Alarm temperature status'),
1203
+ ],
1204
+ },
1183
1205
  ];
package/devices/xiaomi.js CHANGED
@@ -40,6 +40,24 @@ const preventReset = async (type, data, device) => {
40
40
  };
41
41
 
42
42
  module.exports = [
43
+ {
44
+ zigbeeModel: ['lumi.dimmer.rcbac1'],
45
+ model: 'ZNDDMK11LM',
46
+ vendor: 'Xiaomi',
47
+ description: 'Aqara smart lightstrip driver',
48
+ exposes: [e.light_brightness_colortemp({colorTempRange: [153, 370], noConfigure: true}).withEndpoint('l1'),
49
+ e.light_brightness_colortemp({colorTempRange: [153, 370], noConfigure: true}).withEndpoint('l2')],
50
+ endpoint: (device) => {
51
+ return {l1: 1, l2: 2};
52
+ },
53
+ configure: async (device, coordinatorEndpoint, logger) => {
54
+ const endpoint1 = device.getEndpoint(1);
55
+ await extend.light_onoff_brightness_colortemp().configure(device, coordinatorEndpoint, logger);
56
+ await endpoint1.write('aqaraOpple', {0x0509: {value: 1, type: 0x23}}, {manufacturerCode: 0x115f, disableResponse: true});
57
+ await endpoint1.write('aqaraOpple', {0x050f: {value: 3, type: 0x23}}, {manufacturerCode: 0x115f, disableResponse: true});
58
+ },
59
+ extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}),
60
+ },
43
61
  {
44
62
  zigbeeModel: ['lumi.light.aqcn02'],
45
63
  model: 'ZNLDP12LM',
@@ -1273,16 +1291,43 @@ module.exports = [
1273
1291
  device.save();
1274
1292
  },
1275
1293
  },
1294
+ {
1295
+ zigbeeModel: ['lumi.switch.n0acn2'],
1296
+ model: 'DLKZMK11LM',
1297
+ vendor: 'Xiaomi',
1298
+ description: 'Aqara single switch module T1 (with neutral)',
1299
+ fromZigbee: [fz.on_off, fz.metering, fz.electrical_measurement, fz.device_temperature, fz.xiaomi_switch_type,
1300
+ fz.xiaomi_switch_power_outage_memory],
1301
+ exposes: [e.switch(), e.energy(), e.power(), e.device_temperature(), e.power_outage_memory(), e.switch_type()],
1302
+ toZigbee: [tz.xiaomi_switch_type, tz.on_off, tz.xiaomi_switch_power_outage_memory],
1303
+ configure: async (device, coordinatorEndpoint, logger) => {
1304
+ const endpoint = device.getEndpoint(1);
1305
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'genDeviceTempCfg']);
1306
+ await reporting.onOff(endpoint);
1307
+ // Gives UNSUPPORTED_ATTRIBUTE on reporting.readEletricalMeasurementMultiplierDivisors.
1308
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
1309
+ await reporting.readMeteringMultiplierDivisor(endpoint);
1310
+ await reporting.currentSummDelivered(endpoint);
1311
+ await reporting.activePower(endpoint, {min: 5, max: 600, change: 10});
1312
+ await reporting.deviceTemperature(endpoint);
1313
+ device.powerSource = 'Mains (single phase)';
1314
+ device.save();
1315
+ },
1316
+ },
1276
1317
  {
1277
1318
  zigbeeModel: ['lumi.switch.l0agl1'],
1278
1319
  model: 'SSM-U02',
1279
1320
  vendor: 'Xiaomi',
1280
1321
  description: 'Aqara single switch module T1 (without neutral). Doesn\'t work as a router and doesn\'t support power meter',
1281
- extend: extend.switch(),
1322
+ fromZigbee: [fz.on_off, fz.xiaomi_switch_type, fz.xiaomi_switch_power_outage_memory],
1323
+ exposes: [e.switch(), e.power_outage_memory(), e.switch_type()],
1324
+ toZigbee: [tz.xiaomi_switch_type, tz.on_off, tz.xiaomi_switch_power_outage_memory],
1282
1325
  configure: async (device, coordinatorEndpoint, logger) => {
1283
1326
  const endpoint = device.getEndpoint(1);
1284
1327
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
1285
1328
  await reporting.onOff(endpoint);
1329
+ device.powerSource = 'Mains (single phase)';
1330
+ device.save();
1286
1331
  },
1287
1332
  },
1288
1333
  {