zigbee-herdsman-converters 14.0.616 → 14.0.619

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.
@@ -79,6 +79,13 @@ const batteryRotaryDimmer = (...endpointsIds) => ({
79
79
  });
80
80
 
81
81
  module.exports = [
82
+ {
83
+ zigbeeModel: ['RGBCXStrip50AU'],
84
+ model: 'AU-A1ZBSCRGBCX',
85
+ vendor: 'Aurora',
86
+ description: 'RGBW LED strip controller',
87
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [166, 400]}),
88
+ },
82
89
  {
83
90
  zigbeeModel: ['TWGU10Bulb50AU'],
84
91
  model: 'AU-A1GUZBCX5',
package/devices/ikea.js CHANGED
@@ -924,6 +924,7 @@ module.exports = [
924
924
 
925
925
  await endpoint.read('manuSpecificIkeaAirPurifier', ['controlPanelLight', 'childLock', 'filterRunTime']);
926
926
  },
927
+ ota: ota.tradfri,
927
928
  },
928
929
  {
929
930
  zigbeeModel: ['TRADFRIbulbE14WScandleopal470lm', 'TRADFRIbulbE12WScandleopal450lm'],
@@ -77,7 +77,7 @@ module.exports = [
77
77
  description: 'Dual curtain/blind module',
78
78
  fromZigbee: [fz.cover_position_tilt, fz.tuya_cover_options],
79
79
  toZigbee: [tz.cover_state, tz.cover_position_tilt, tz.tuya_cover_calibration, tz.tuya_cover_reversal],
80
- meta: {multiEndpoint: true},
80
+ meta: {multiEndpoint: true, coverInverted: true},
81
81
  endpoint: (device) => {
82
82
  return {'left': 1, 'right': 2};
83
83
  },
@@ -984,7 +984,14 @@ module.exports = [
984
984
  zigbeeModel: ['929003053001'],
985
985
  model: '929003053001',
986
986
  vendor: 'Philips',
987
- description: 'Hue Sana wall light',
987
+ description: 'Hue Sana wall light (white)',
988
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
989
+ },
990
+ {
991
+ zigbeeModel: ['929003052901'],
992
+ model: '929003052901',
993
+ vendor: 'Philips',
994
+ description: 'Hue Sana wall light (black)',
988
995
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
989
996
  },
990
997
  {
@@ -61,8 +61,22 @@ module.exports = [
61
61
  model: 'E12-N1E',
62
62
  vendor: 'Sengled',
63
63
  description: 'Smart LED multicolor (BR30)',
64
- extend: sengledExtend.light_onoff_brightness_colortemp_color(),
64
+ fromZigbee: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).fromZigbee.concat([fz.metering]),
65
+ toZigbee: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).toZigbee,
66
+ exposes: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).exposes.concat([e.power(), e.energy()]),
65
67
  ota: ota.zigbeeOTA,
68
+ configure: async (device, coordinatorEndpoint, logger) => {
69
+ await sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]})
70
+ .configure(device, coordinatorEndpoint, logger);
71
+ device.powerSource = 'Mains (single phase)';
72
+ device.save();
73
+
74
+ const endpoint = device.getEndpoint(1);
75
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
76
+ await reporting.readMeteringMultiplierDivisor(endpoint);
77
+ await reporting.currentSummDelivered(endpoint);
78
+ await reporting.instantaneousDemand(endpoint);
79
+ },
66
80
  },
67
81
  {
68
82
  zigbeeModel: ['E1G-G8E'],
@@ -221,10 +235,16 @@ module.exports = [
221
235
  model: 'E1D-G73WNA',
222
236
  vendor: 'Sengled',
223
237
  description: 'Smart window and door sensor',
224
- fromZigbee: [fz.ias_contact_alarm_1],
238
+ fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
225
239
  toZigbee: [],
226
240
  ota: ota.zigbeeOTA,
227
- exposes: [e.contact(), e.battery_low(), e.tamper()],
241
+ exposes: [e.contact(), e.battery_low(), e.battery(), e.battery_voltage(), e.tamper()],
242
+ configure: async (device, coordinatorEndpoint, logger) => {
243
+ const endpoint = device.getEndpoint(1);
244
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
245
+ await reporting.batteryVoltage(endpoint);
246
+ await reporting.batteryPercentageRemaining(endpoint);
247
+ },
228
248
  },
229
249
  {
230
250
  zigbeeModel: ['E1C-NB6'],
package/devices/siglis.js CHANGED
@@ -184,7 +184,7 @@ module.exports = [
184
184
  tz.cover_position_tilt,
185
185
  coverAndLightToZigbee,
186
186
  ],
187
- meta: {multiEndpoint: true, coverInverted: true},
187
+ meta: {multiEndpoint: true},
188
188
  endpoint: (device) => {
189
189
  return {
190
190
  'l1': zigfredEndpoint,
package/devices/sonoff.js CHANGED
@@ -5,6 +5,7 @@ const constants = require('../lib/constants');
5
5
  const reporting = require('../lib/reporting');
6
6
  const extend = require('../lib/extend');
7
7
  const e = exposes.presets;
8
+ const ea = exposes.access;
8
9
  const ota = require('../lib/ota');
9
10
 
10
11
  const fzLocal = {
@@ -18,6 +19,16 @@ const fzLocal = {
18
19
  }
19
20
  },
20
21
  },
22
+ router_config: {
23
+ cluster: 'genLevelCtrl',
24
+ type: ['attributeReport', 'readResponse'],
25
+ convert: (model, msg, publish, options, meta) => {
26
+ const result = {};
27
+ if (msg.data.hasOwnProperty('currentLevel')) {
28
+ result.light_indicator_level = msg.data['currentLevel'];
29
+ }
30
+ },
31
+ },
21
32
  };
22
33
 
23
34
  module.exports = [
@@ -189,4 +200,17 @@ module.exports = [
189
200
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
190
201
  },
191
202
  },
203
+ {
204
+ zigbeeModel: ['DONGLE-E_R'],
205
+ model: 'ZBDongle-E',
206
+ vendor: 'SONOFF',
207
+ description: 'Sonoff Zigbee 3.0 USB Dongle Plus (EFR32MG21) with router firmware',
208
+ fromZigbee: [fz.linkquality_from_basic, fzLocal.router_config],
209
+ toZigbee: [],
210
+ exposes: [exposes.numeric('light_indicator_level').withDescription('Brightness of the indicator light').withAccess(ea.STATE)],
211
+ configure: async (device, coordinatorEndpoint, logger) => {
212
+ device.powerSource = 'Mains (single phase)';
213
+ device.save();
214
+ },
215
+ },
192
216
  ];
package/devices/tuya.js CHANGED
@@ -23,6 +23,18 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
23
23
  '_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx'];
24
24
 
25
25
  const tzLocal = {
26
+ SA12IZL_silence_siren: {
27
+ key: ['silence_siren'],
28
+ convertSet: async (entity, key, value, meta) => {
29
+ await tuya.sendDataPointBool(entity, 16, value);
30
+ },
31
+ },
32
+ SA12IZL_alarm: {
33
+ key: ['alarm'],
34
+ convertSet: async (entity, key, value, meta) => {
35
+ await tuya.sendDataPointEnum(entity, 20, {true: 0, false: 1}[value]);
36
+ },
37
+ },
26
38
  hpsz: {
27
39
  key: ['led_state'],
28
40
  convertSet: async (entity, key, value, meta) => {
@@ -277,6 +289,59 @@ const tzLocal = {
277
289
  };
278
290
 
279
291
  const fzLocal = {
292
+ SA12IZL: {
293
+ cluster: 'manuSpecificTuya',
294
+ type: ['commandDataResponse', 'commandDataReport'],
295
+ convert: (model, msg, publish, options, meta) => {
296
+ const result = {};
297
+ for (const dpValue of msg.data.dpValues) {
298
+ const dp = dpValue.dp;
299
+ const value = tuya.getDataValue(dpValue);
300
+ switch (dp) {
301
+ case tuya.dataPoints.state:
302
+ result.smoke = value === 0;
303
+ break;
304
+ case 15:
305
+ result.battery = value;
306
+ break;
307
+ case 16:
308
+ result.silence_siren = value;
309
+ break;
310
+ case 20: {
311
+ const alarm = {0: true, 1: false};
312
+ result.alarm = alarm[value];
313
+ break;
314
+ }
315
+ default:
316
+ meta.logger.warn(`zigbee-herdsman-converters:SA12IZL: NOT RECOGNIZED DP #${
317
+ dp} with data ${JSON.stringify(dpValue)}`);
318
+ }
319
+ }
320
+ return result;
321
+ },
322
+ },
323
+ tuya_dinrail_switch2: {
324
+ cluster: 'manuSpecificTuya',
325
+ type: ['commandDataReport', 'commandDataResponse', 'commandActiveStatusReport'],
326
+ convert: (model, msg, publish, options, meta) => {
327
+ const dpValue = tuya.firstDpValue(msg, meta, 'tuya_dinrail_switch2');
328
+ const dp = dpValue.dp;
329
+ const value = tuya.getDataValue(dpValue);
330
+ const state = value ? 'ON' : 'OFF';
331
+
332
+ switch (dp) {
333
+ case tuya.dataPoints.state: // DPID that we added to common
334
+ return {state: state};
335
+ case tuya.dataPoints.dinrailPowerMeterTotalEnergy2:
336
+ return {energy: value/100};
337
+ case tuya.dataPoints.dinrailPowerMeterPower2:
338
+ return {power: value};
339
+ default:
340
+ meta.logger.warn(`zigbee-herdsman-converters:TuyaDinRailSwitch: NOT RECOGNIZED DP ` +
341
+ `#${dp} with data ${JSON.stringify(dpValue)}`);
342
+ }
343
+ },
344
+ },
280
345
  hpsz: {
281
346
  cluster: 'manuSpecificTuya',
282
347
  type: ['commandDataResponse', 'commandDataReport'],
@@ -911,14 +976,20 @@ module.exports = [
911
976
  },
912
977
  {
913
978
  fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'},
914
- {modelID: 'TS0202', manufacturerName: '_TZ3000_lltemgsf'}],
979
+ {modelID: 'TS0202', manufacturerName: '_TZ3000_lltemgsf'},
980
+ {modelID: 'TS0202', manufacturerName: '_TZ3000_mg4dy6z6'}],
915
981
  model: 'TS0202_1',
916
982
  vendor: 'TuYa',
917
983
  description: 'Motion sensor',
918
984
  // Requires alarm_1_with_timeout https://github.com/Koenkk/zigbee2mqtt/issues/2818#issuecomment-776119586
919
985
  fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report],
920
986
  toZigbee: [],
921
- exposes: [e.occupancy(), e.battery_low(), e.linkquality()],
987
+ exposes: [e.occupancy(), e.battery_low(), e.linkquality(), e.battery(), e.battery_voltage()],
988
+ configure: async (device, coordinatorEndpoint, logger) => {
989
+ const endpoint = device.getEndpoint(1);
990
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
991
+ await reporting.batteryPercentageRemaining(endpoint);
992
+ },
922
993
  },
923
994
  {
924
995
  fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_dr6sduka'},
@@ -987,6 +1058,7 @@ module.exports = [
987
1058
  fingerprint: [{modelID: 'TS0207', manufacturerName: '_TZ3000_m0vaazab'},
988
1059
  {modelID: 'TS0207', manufacturerName: '_TZ3000_ufttklsz'},
989
1060
  {modelID: 'TS0207', manufacturerName: '_TZ3000_nkkl7uzv'},
1061
+ {modelID: 'TS0207', manufacturerName: '_TZ3000_gszjt2xx'},
990
1062
  {modelID: 'TS0207', manufacturerName: '_TZ3000_5k5vh43t'}],
991
1063
  model: 'TS0207_repeater',
992
1064
  vendor: 'TuYa',
@@ -1530,6 +1602,27 @@ module.exports = [
1530
1602
  },
1531
1603
  exposes: [e.battery(), e.water_leak()],
1532
1604
  },
1605
+ {
1606
+ fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_xkap8wtb'}],
1607
+ model: 'TS0001_power',
1608
+ description: 'Switch with power monitoring',
1609
+ vendor: 'TuYa',
1610
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report],
1611
+ toZigbee: [tz.on_off],
1612
+ configure: async (device, coordinatorEndpoint, logger) => {
1613
+ const endpoint = device.getEndpoint(1);
1614
+ await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1615
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
1616
+ await reporting.rmsVoltage(endpoint, {change: 5});
1617
+ await reporting.rmsCurrent(endpoint, {change: 50});
1618
+ await reporting.activePower(endpoint, {change: 10});
1619
+ await reporting.currentSummDelivered(endpoint);
1620
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
1621
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
1622
+ device.save();
1623
+ },
1624
+ exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE)],
1625
+ },
1533
1626
  {
1534
1627
  zigbeeModel: ['TS0001'],
1535
1628
  model: 'TS0001',
@@ -1582,7 +1675,8 @@ module.exports = [
1582
1675
  },
1583
1676
  },
1584
1677
  {
1585
- fingerprint: [{modelID: 'TS0002', manufacturerName: '_TZ3000_01gpyda5'}, {modelID: 'TS0002', manufacturerName: '_TZ3000_bvrlqyj7'}],
1678
+ fingerprint: [{modelID: 'TS0002', manufacturerName: '_TZ3000_01gpyda5'}, {modelID: 'TS0002', manufacturerName: '_TZ3000_bvrlqyj7'},
1679
+ {modelID: 'TS0002', manufacturerName: '_TZ3000_7ed9cqgi'}],
1586
1680
  model: 'TS0002_switch_module',
1587
1681
  vendor: 'TuYa',
1588
1682
  description: '2 gang switch module',
@@ -1600,6 +1694,8 @@ module.exports = [
1600
1694
  },
1601
1695
  meta: {multiEndpoint: true},
1602
1696
  configure: async (device, coordinatorEndpoint, logger) => {
1697
+ await device.getEndpoint(1).read('genBasic',
1698
+ ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1603
1699
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
1604
1700
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
1605
1701
  },
@@ -1709,6 +1805,7 @@ module.exports = [
1709
1805
  {modelID: 'TS0601', manufacturerName: '_TZE200_fctwhugx'},
1710
1806
  {modelID: 'TS0601', manufacturerName: '_TZE200_zah67ekd'},
1711
1807
  {modelID: 'TS0601', manufacturerName: '_TZE200_hsgrhjpf'},
1808
+ {modelID: 'TS0601', manufacturerName: '_TZE200_pw7mji0l'},
1712
1809
  // Window pushers:
1713
1810
  {modelID: 'TS0601', manufacturerName: '_TZE200_g5wdnuow'},
1714
1811
  // Tubular motors:
@@ -1725,6 +1822,7 @@ module.exports = [
1725
1822
  {vendor: 'Binthen', model: 'BCM100D'},
1726
1823
  {vendor: 'Binthen', model: 'CV01A'},
1727
1824
  {vendor: 'Zemismart', model: 'M515EGB'},
1825
+ {vendor: 'OZ Smart Things', model: 'ZM85EL-1Z'},
1728
1826
  {vendor: 'TuYa', model: 'M515EGZT'},
1729
1827
  {vendor: 'TuYa', model: 'DT82LEMA-1.2N'},
1730
1828
  {vendor: 'TuYa', model: 'ZD82TN', description: 'Curtain motor'},
@@ -2089,6 +2187,21 @@ module.exports = [
2089
2187
  toZigbee: [],
2090
2188
  exposes: [e.smoke(), e.battery()],
2091
2189
  },
2190
+ {
2191
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}, {modelID: 'TS0601', manufacturerName: '_TZE200_ntcy3xu1'}],
2192
+ model: 'SA12IZL',
2193
+ vendor: 'TuYa',
2194
+ description: 'Smart smoke alarm',
2195
+ meta: {timeout: 30000, disableDefaultResponse: true},
2196
+ fromZigbee: [fzLocal.SA12IZL],
2197
+ toZigbee: [tzLocal.SA12IZL_silence_siren, tzLocal.SA12IZL_alarm],
2198
+ exposes: [e.battery(),
2199
+ exposes.binary('smoke', ea.STATE, true, false).withDescription('Smoke alarm status'),
2200
+ exposes.enum('battery_level', ea.STATE, ['low', 'middle', 'high']).withDescription('Battery level state'),
2201
+ exposes.binary('alarm', ea.STATE_SET, true, false).withDescription('Enable the alarm'),
2202
+ exposes.binary('silence_siren', ea.STATE_SET, true, false).withDescription('Silence the siren')],
2203
+ onEvent: tuya.onEventsetTime,
2204
+ },
2092
2205
  {
2093
2206
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_byzdayie'},
2094
2207
  {modelID: 'TS0601', manufacturerName: '_TZE200_fsb6zw01'},
@@ -2104,6 +2217,19 @@ module.exports = [
2104
2217
  },
2105
2218
  exposes: [e.switch().setAccess('state', ea.STATE_SET), e.voltage(), e.power(), e.current(), e.energy()],
2106
2219
  },
2220
+ {
2221
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bkkmqmyo'}],
2222
+ model: 'DDS238-2',
2223
+ vendor: 'TuYa',
2224
+ description: 'Zigbee smart energy meter',
2225
+ fromZigbee: [fzLocal.tuya_dinrail_switch2],
2226
+ toZigbee: [tz.tuya_switch_state],
2227
+ configure: async (device, coordinatorEndpoint, logger) => {
2228
+ const endpoint = device.getEndpoint(1);
2229
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
2230
+ },
2231
+ exposes: [e.switch().setAccess('state', ea.STATE_SET), e.energy(), e.power()],
2232
+ },
2107
2233
  {
2108
2234
  fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_xfs39dbf'}],
2109
2235
  model: 'TS1101_dimmer_module_1ch',
@@ -3028,7 +3154,8 @@ module.exports = [
3028
3154
  ],
3029
3155
  },
3030
3156
  {
3031
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'}],
3157
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'},
3158
+ {modelID: 'TS0601', manufacturerName: '_TZE200_znbl8dj5'}],
3032
3159
  model: 'CX-0726',
3033
3160
  vendor: 'TuYa',
3034
3161
  description: 'Temperature & humidity LCD sensor',
@@ -201,6 +201,15 @@ module.exports = [
201
201
  toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options, tz.tuya_data_point_test],
202
202
  exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
203
203
  },
204
+ {
205
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_7eue9vhc'}],
206
+ model: 'ZM25RX-08/30',
207
+ vendor: 'Zemismart',
208
+ description: 'Tubular motor',
209
+ fromZigbee: [fz.tuya_cover, fz.ignore_basic_report],
210
+ toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options],
211
+ exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
212
+ },
204
213
  {
205
214
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}],
206
215
  model: 'TB26-4',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.616",
3
+ "version": "14.0.619",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -38,7 +38,7 @@
38
38
  "buffer-crc32": "^0.2.13",
39
39
  "https-proxy-agent": "^5.0.1",
40
40
  "tar-stream": "^2.2.0",
41
- "zigbee-herdsman": "^0.14.53"
41
+ "zigbee-herdsman": "^0.14.54"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",