zigbee-herdsman-converters 14.0.615 → 14.0.618

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
  },
package/devices/owon.js CHANGED
@@ -240,10 +240,11 @@ module.exports = [
240
240
  tz.thermostat_min_cool_setpoint_limit, tz.thermostat_max_cool_setpoint_limit,
241
241
  tz.thermostat_local_temperature, tz.thermostat_running_state,
242
242
  tz.thermostat_keypad_lockout],
243
- exposes: [e.local_temperature(), e.humidity(), e.occupancy(),
243
+ exposes: [e.humidity(), e.occupancy(),
244
244
  exposes.climate().withSystemMode(['off', 'heat', 'cool', 'fan_only']).withRunningState(['idle', 'heat', 'cool', 'fan_only'])
245
245
  .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
246
- .withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5),
246
+ .withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5)
247
+ .withLocalTemperature(),
247
248
  e.fan().withModes(['low', 'medium', 'high', 'on', 'auto']), e.keypad_lockout(),
248
249
  e.max_heat_setpoint_limit(5, 30, 0.5), e.min_heat_setpoint_limit(5, 30, 0.5),
249
250
  e.max_cool_setpoint_limit(7, 35, 0.5), e.min_cool_setpoint_limit(7, 35, 0.5)],
@@ -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'],
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'],
@@ -918,7 +983,12 @@ module.exports = [
918
983
  // Requires alarm_1_with_timeout https://github.com/Koenkk/zigbee2mqtt/issues/2818#issuecomment-776119586
919
984
  fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report],
920
985
  toZigbee: [],
921
- exposes: [e.occupancy(), e.battery_low(), e.linkquality()],
986
+ exposes: [e.occupancy(), e.battery_low(), e.linkquality(), e.battery(), e.battery_voltage()],
987
+ configure: async (device, coordinatorEndpoint, logger) => {
988
+ const endpoint = device.getEndpoint(1);
989
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
990
+ await reporting.batteryPercentageRemaining(endpoint);
991
+ },
922
992
  },
923
993
  {
924
994
  fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_dr6sduka'},
@@ -987,6 +1057,7 @@ module.exports = [
987
1057
  fingerprint: [{modelID: 'TS0207', manufacturerName: '_TZ3000_m0vaazab'},
988
1058
  {modelID: 'TS0207', manufacturerName: '_TZ3000_ufttklsz'},
989
1059
  {modelID: 'TS0207', manufacturerName: '_TZ3000_nkkl7uzv'},
1060
+ {modelID: 'TS0207', manufacturerName: '_TZ3000_gszjt2xx'},
990
1061
  {modelID: 'TS0207', manufacturerName: '_TZ3000_5k5vh43t'}],
991
1062
  model: 'TS0207_repeater',
992
1063
  vendor: 'TuYa',
@@ -1530,6 +1601,27 @@ module.exports = [
1530
1601
  },
1531
1602
  exposes: [e.battery(), e.water_leak()],
1532
1603
  },
1604
+ {
1605
+ fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_xkap8wtb'}],
1606
+ model: 'TS0001_power',
1607
+ description: 'Switch with power monitoring',
1608
+ vendor: 'TuYa',
1609
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report],
1610
+ toZigbee: [tz.on_off],
1611
+ configure: async (device, coordinatorEndpoint, logger) => {
1612
+ const endpoint = device.getEndpoint(1);
1613
+ await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1614
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
1615
+ await reporting.rmsVoltage(endpoint, {change: 5});
1616
+ await reporting.rmsCurrent(endpoint, {change: 50});
1617
+ await reporting.activePower(endpoint, {change: 10});
1618
+ await reporting.currentSummDelivered(endpoint);
1619
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
1620
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
1621
+ device.save();
1622
+ },
1623
+ exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE)],
1624
+ },
1533
1625
  {
1534
1626
  zigbeeModel: ['TS0001'],
1535
1627
  model: 'TS0001',
@@ -2089,6 +2181,21 @@ module.exports = [
2089
2181
  toZigbee: [],
2090
2182
  exposes: [e.smoke(), e.battery()],
2091
2183
  },
2184
+ {
2185
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}],
2186
+ model: 'SA12IZL',
2187
+ vendor: 'TuYa',
2188
+ description: 'Smart smoke alarm',
2189
+ meta: {timeout: 30000, disableDefaultResponse: true},
2190
+ fromZigbee: [fzLocal.SA12IZL],
2191
+ toZigbee: [tzLocal.SA12IZL_silence_siren, tzLocal.SA12IZL_alarm],
2192
+ exposes: [e.battery(),
2193
+ exposes.binary('smoke', ea.STATE, true, false).withDescription('Smoke alarm status'),
2194
+ exposes.enum('battery_level', ea.STATE, ['low', 'middle', 'high']).withDescription('Battery level state'),
2195
+ exposes.binary('alarm', ea.STATE_SET, true, false).withDescription('Enable the alarm'),
2196
+ exposes.binary('silence_siren', ea.STATE_SET, true, false).withDescription('Silence the siren')],
2197
+ onEvent: tuya.onEventsetTime,
2198
+ },
2092
2199
  {
2093
2200
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_byzdayie'},
2094
2201
  {modelID: 'TS0601', manufacturerName: '_TZE200_fsb6zw01'},
@@ -2104,6 +2211,19 @@ module.exports = [
2104
2211
  },
2105
2212
  exposes: [e.switch().setAccess('state', ea.STATE_SET), e.voltage(), e.power(), e.current(), e.energy()],
2106
2213
  },
2214
+ {
2215
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bkkmqmyo'}],
2216
+ model: 'DDS238-2',
2217
+ vendor: 'TuYa',
2218
+ description: 'Zigbee smart energy meter',
2219
+ fromZigbee: [fzLocal.tuya_dinrail_switch2],
2220
+ toZigbee: [tz.tuya_switch_state],
2221
+ configure: async (device, coordinatorEndpoint, logger) => {
2222
+ const endpoint = device.getEndpoint(1);
2223
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
2224
+ },
2225
+ exposes: [e.switch().setAccess('state', ea.STATE_SET), e.energy(), e.power()],
2226
+ },
2107
2227
  {
2108
2228
  fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_xfs39dbf'}],
2109
2229
  model: 'TS1101_dimmer_module_1ch',
@@ -3028,7 +3148,8 @@ module.exports = [
3028
3148
  ],
3029
3149
  },
3030
3150
  {
3031
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'}],
3151
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'},
3152
+ {modelID: 'TS0601', manufacturerName: '_TZE200_znbl8dj5'}],
3032
3153
  model: 'CX-0726',
3033
3154
  vendor: 'TuYa',
3034
3155
  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, tz.tuya_data_point_test],
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.615",
3
+ "version": "14.0.618",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [