zigbee-herdsman-converters 14.0.649 → 14.0.651

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.
@@ -1961,10 +1961,10 @@ const converters = {
1961
1961
  result.min_humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
1962
1962
  break;
1963
1963
  case tuya.dataPoints.nousTempAlarm:
1964
- result.temperature_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
1964
+ result.temperature_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
1965
1965
  break;
1966
1966
  case tuya.dataPoints.nousHumiAlarm:
1967
- result.humidity_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
1967
+ result.humidity_alarm = {0x00: 'lower_alarm', 0x01: 'upper_alarm', 0x02: 'canceled'}[value];
1968
1968
  break;
1969
1969
  case tuya.dataPoints.nousTempSensitivity:
1970
1970
  result.temperature_sensitivity = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
@@ -4405,6 +4405,30 @@ const converters = {
4405
4405
  }
4406
4406
  },
4407
4407
  },
4408
+ sinope_led_color_on: {
4409
+ // DM2500ZB and SW2500ZB
4410
+ key: ['led_color_on'],
4411
+ convertSet: async (entity, key, value, meta) => {
4412
+ const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
4413
+ const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
4414
+ const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
4415
+
4416
+ const valueHex = r + g * 256 + (b * 256 ** 2);
4417
+ await entity.write('manuSpecificSinope', {ledColorOn: valueHex});
4418
+ },
4419
+ },
4420
+ sinope_led_color_off: {
4421
+ // DM2500ZB and SW2500ZB
4422
+ key: ['led_color_off'],
4423
+ convertSet: async (entity, key, value, meta) => {
4424
+ const r = (value.r >= 0 && value.r <= 255) ? value.r : 0;
4425
+ const g = (value.g >= 0 && value.g <= 255) ? value.g : 0;
4426
+ const b = (value.b >= 0 && value.b <= 255) ? value.b : 0;
4427
+
4428
+ const valueHex = r + g * 256 + b * 256 ** 2;
4429
+ await entity.write('manuSpecificSinope', {ledColorOff: valueHex});
4430
+ },
4431
+ },
4408
4432
  sinope_minimum_brightness: {
4409
4433
  // DM2500ZB
4410
4434
  key: ['minimum_brightness'],
@@ -816,4 +816,13 @@ module.exports = [
816
816
  exposes.numeric('low_humidity', ea.STATE_SET).withUnit('C').withDescription('Setting Low Humidity Border')
817
817
  .withValueMin(0).withValueMax(99)],
818
818
  },
819
+ {
820
+ zigbeeModel: ['UT-02'],
821
+ model: 'EFR32MG21.Router',
822
+ vendor: 'Custom devices (DiY)',
823
+ description: 'EFR32MG21 router',
824
+ fromZigbee: [],
825
+ toZigbee: [],
826
+ exposes: [],
827
+ },
819
828
  ];
@@ -1196,6 +1196,33 @@ Object.keys(ATTRIBUTES).forEach((key) => {
1196
1196
  }
1197
1197
  });
1198
1198
 
1199
+ // Put actions at the bottom of ui
1200
+ exposesList.push(
1201
+ e.action([
1202
+ 'down_single',
1203
+ 'up_single',
1204
+ 'config_single',
1205
+ 'down_release',
1206
+ 'up_release',
1207
+ 'config_release',
1208
+ 'down_held',
1209
+ 'up_held',
1210
+ 'config_held',
1211
+ 'down_double',
1212
+ 'up_double',
1213
+ 'config_double',
1214
+ 'down_triple',
1215
+ 'up_triple',
1216
+ 'config_triple',
1217
+ 'down_quadruple',
1218
+ 'up_quadruple',
1219
+ 'config_quadruple',
1220
+ 'down_quintuple',
1221
+ 'up_quintuple',
1222
+ 'config_quintuple',
1223
+ ]),
1224
+ );
1225
+
1199
1226
  module.exports = [
1200
1227
  {
1201
1228
  zigbeeModel: ['VZM31-SN'],
package/devices/osram.js CHANGED
@@ -395,6 +395,7 @@ module.exports = [
395
395
  vendor: 'OSRAM',
396
396
  description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (only one device)',
397
397
  extend: extend.ledvance.light_onoff_brightness(),
398
+ ota: ota.zigbeeOTA,
398
399
  },
399
400
  {
400
401
  fingerprint: [{modelID: 'Zigbee 3.0 DALI CONV LI', endpoints: [{ID: 10}, {ID: 25}, {ID: 242}]},
@@ -402,7 +403,16 @@ module.exports = [
402
403
  model: '4062172044776_2',
403
404
  vendor: 'OSRAM',
404
405
  description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (one device and pushbutton)',
405
- extend: extend.ledvance.light_onoff_brightness(),
406
+ fromZigbee: [...extend.ledvance.light_onoff_brightness({noConfigure: true}).fromZigbee,
407
+ fz.command_toggle, fz.command_move, fz.command_stop],
408
+ extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
409
+ exposes: [e.action(['toggle', 'brightness_move_up', 'brightness_move_down', 'brightness_stop']),
410
+ ...extend.ledvance.light_onoff_brightness({noConfigure: true}).exposes],
411
+ ota: ota.zigbeeOTA,
412
+ configure: async (device, coordinatorEndpoint, logger) => {
413
+ await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
414
+ await reporting.bind(device.getEndpoint(25), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
415
+ },
406
416
  onEvent: async (type, data, device) => {
407
417
  if (type === 'deviceInterview') {
408
418
  device.getEndpoint(25).addBinding('genOnOff', device.getEndpoint(10));
@@ -418,6 +428,7 @@ module.exports = [
418
428
  description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices)',
419
429
  extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
420
430
  exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
431
+ ota: ota.zigbeeOTA,
421
432
  endpoint: (device) => {
422
433
  return {'l1': 10, 'l2': 11};
423
434
  },
@@ -425,10 +436,6 @@ module.exports = [
425
436
  configure: async (device, coordinatorEndpoint, logger) => {
426
437
  await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
427
438
  await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
428
- await reporting.onOff(device.getEndpoint(10));
429
- await reporting.brightness(device.getEndpoint(10));
430
- await reporting.onOff(device.getEndpoint(11));
431
- await reporting.brightness(device.getEndpoint(11));
432
439
  },
433
440
  },
434
441
  {
@@ -437,19 +444,20 @@ module.exports = [
437
444
  model: '4062172044776_4',
438
445
  vendor: 'OSRAM',
439
446
  description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices and pushbutton)',
447
+ fromZigbee: [...extend.ledvance.light_onoff_brightness({noConfigure: true}).fromZigbee,
448
+ fz.command_toggle, fz.command_move, fz.command_stop],
440
449
  extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
441
- exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
450
+ exposes: [e.action(['toggle_s1', 'brightness_move_up_s1', 'brightness_move_down_s1', 'brightness_stop_s1']),
451
+ e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
452
+ ota: ota.zigbeeOTA,
442
453
  endpoint: (device) => {
443
- return {'l1': 10, 'l2': 11};
454
+ return {'l1': 10, 'l2': 11, 's1': 25};
444
455
  },
445
456
  meta: {multiEndpoint: true},
446
457
  configure: async (device, coordinatorEndpoint, logger) => {
447
458
  await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
448
459
  await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
449
- await reporting.onOff(device.getEndpoint(10));
450
- await reporting.brightness(device.getEndpoint(10));
451
- await reporting.onOff(device.getEndpoint(11));
452
- await reporting.brightness(device.getEndpoint(11));
460
+ await reporting.bind(device.getEndpoint(25), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
453
461
  },
454
462
  onEvent: async (type, data, device) => {
455
463
  if (type === 'deviceInterview') {
package/devices/sinope.js CHANGED
@@ -240,13 +240,64 @@ module.exports = [
240
240
  model: 'SW2500ZB',
241
241
  vendor: 'Sinopé',
242
242
  description: 'Zigbee smart light switch',
243
- extend: extend.switch(),
243
+ exposes: [e.switch(),
244
+ exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
245
+ .withDescription('Control status LED intensity when load ON'),
246
+ exposes.numeric('led_intensity_off', ea.SET).withValueMin(0).withValueMax(100)
247
+ .withDescription('Control status LED intensity when load OFF'),
248
+ exposes.composite('led_color_on', 'led_color_on')
249
+ .withFeature(exposes.numeric('r', ea.ALL))
250
+ .withFeature(exposes.numeric('g', ea.ALL))
251
+ .withFeature(exposes.numeric('b', ea.ALL))
252
+ .withDescription('Control status LED intensity when load ON'),
253
+ exposes.composite('led_color_off', 'led_color_off')
254
+ .withFeature(exposes.numeric('r', ea.ALL))
255
+ .withFeature(exposes.numeric('g', ea.ALL))
256
+ .withFeature(exposes.numeric('b', ea.ALL))
257
+ .withDescription('Control status LED color when load OFF'),
258
+ ],
259
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
260
+ toZigbee: [tz.on_off, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off, tz.sinope_led_color_on, tz.sinope_led_color_off],
244
261
  configure: async (device, coordinatorEndpoint, logger) => {
245
262
  const endpoint = device.getEndpoint(1);
246
263
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
247
264
  await reporting.onOff(endpoint);
248
265
  },
249
266
  },
267
+ {
268
+ zigbeeModel: ['DM2500ZB'],
269
+ model: 'DM2500ZB',
270
+ vendor: 'Sinopé',
271
+ description: 'Zigbee smart dimmer',
272
+ exposes: [e.light_brightness(),
273
+ exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
274
+ .withDescription('Control status LED when load ON'),
275
+ exposes.numeric('led_intensity_off', ea.SET).withValueMin(0).withValueMax(100)
276
+ .withDescription('Control status LED when load OFF'),
277
+ exposes.numeric('minimum_brightness', ea.SET).withValueMin(0).withValueMax(3000)
278
+ .withDescription('Control minimum dimmer brightness'),
279
+ exposes.composite('led_color_on', 'led_color_on')
280
+ .withFeature(exposes.numeric('r', ea.ALL))
281
+ .withFeature(exposes.numeric('g', ea.ALL))
282
+ .withFeature(exposes.numeric('b', ea.ALL))
283
+ .withDescription('Control status LED intensity when load ON'),
284
+ exposes.composite('led_color_off', 'led_color_off')
285
+ .withFeature(exposes.numeric('r', ea.ALL))
286
+ .withFeature(exposes.numeric('g', ea.ALL))
287
+ .withFeature(exposes.numeric('b', ea.ALL))
288
+ .withDescription('Control status LED color when load OFF'),
289
+ ],
290
+ fromZigbee: [fz.on_off, fz.brightness, fz.electrical_measurement],
291
+ toZigbee: [tz.light_onoff_brightness, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off,
292
+ tz.sinope_minimum_brightness, tz.sinope_led_color_on, tz.sinope_led_color_off],
293
+ configure: async (device, coordinatorEndpoint, logger) => {
294
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
295
+ const endpoint = device.getEndpoint(1);
296
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
297
+ await reporting.onOff(endpoint);
298
+ await reporting.brightness(endpoint);
299
+ },
300
+ },
250
301
  {
251
302
  zigbeeModel: ['SP2600ZB'],
252
303
  model: 'SP2600ZB',
@@ -279,26 +330,6 @@ module.exports = [
279
330
  await reporting.activePower(endpoint, {min: 10, change: 1});
280
331
  },
281
332
  },
282
- {
283
- zigbeeModel: ['DM2500ZB'],
284
- model: 'DM2500ZB',
285
- vendor: 'Sinopé',
286
- description: 'Zigbee smart dimmer',
287
- extend: extend.light_onoff_brightness({noConfigure: true}),
288
- exposes: [e.light_brightness(), e.effect(), exposes.numeric('led_intensity_on', ea.SET).withValueMin(0).withValueMax(100)
289
- .withDescription('Control status LED when load ON'), exposes.numeric('led_intensity_off', ea.SET).withValueMin(0)
290
- .withValueMax(100).withDescription('Control status LED when load OFF'), exposes.numeric('minimum_brightness', ea.SET)
291
- .withValueMin(0).withValueMax(3000).withDescription('Control minimum dimmer brightness')],
292
- toZigbee: [tz.light_onoff_brightness, tz.effect, tz.sinope_led_intensity_on, tz.sinope_led_intensity_off,
293
- tz.sinope_minimum_brightness],
294
- configure: async (device, coordinatorEndpoint, logger) => {
295
- await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
296
- const endpoint = device.getEndpoint(1);
297
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
298
- await reporting.onOff(endpoint);
299
- await reporting.brightness(endpoint);
300
- },
301
- },
302
333
  {
303
334
  zigbeeModel: ['RM3250ZB'],
304
335
  model: 'RM3250ZB',
@@ -14,7 +14,8 @@ module.exports = [
14
14
  {modelId: 'TS0601', manufacturerName: '_TZE200_hhrtiq0x'},
15
15
  {modelId: 'TS0601', manufacturerName: '_TZE200_ps5v5jor'},
16
16
  {modelId: 'TS0601', manufacturerName: '_TZE200_jeaxp72v'},
17
- {modelId: 'TS0601', manufacturerName: '_TZE200_owwdxjbx'}],
17
+ {modelId: 'TS0601', manufacturerName: '_TZE200_owwdxjbx'},
18
+ {modelId: 'TS0601', manufacturerName: '_TZE200_2cs6g9i7'}],
18
19
  model: 'GS361A-H04',
19
20
  vendor: 'Siterwell',
20
21
  description: 'Radiator valve with thermostat',
@@ -31,7 +32,8 @@ module.exports = [
31
32
  {vendor: 'Unitec', description: 'Thermostatic Radiator Valve Controller', model: '30946'},
32
33
  {vendor: 'Tesla', description: 'Thermostatic Radiator Valve Controller', model: 'TSL-TRV-GS361A'},
33
34
  {vendor: 'Nedis', description: 'Thermostatic Radiator Valve Controller', model: 'ZBHTR10WT'},
34
- {vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'}],
35
+ {vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'},
36
+ {vendor: 'Brennenstuhl', description: 'Radiator Thermostat', model: 'HT CZ 01'}],
35
37
  exposes: [e.child_lock(), e.window_detection(), e.battery(), e.valve_detection(), e.position(), exposes.climate()
36
38
  .withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET).withLocalTemperature(ea.STATE)
37
39
  .withSystemMode(['off', 'auto', 'heat'], ea.STATE_SET)
package/devices/tuya.js CHANGED
@@ -1047,7 +1047,7 @@ module.exports = [
1047
1047
  },
1048
1048
  },
1049
1049
  {
1050
- fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
1050
+ fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}, {modelID: 'TS0202', manufacturerName: '_TZ3040_fwxuzcf4'}],
1051
1051
  model: 'ZM-35H-Q',
1052
1052
  vendor: 'TuYa',
1053
1053
  description: 'Motion sensor',
@@ -1757,7 +1757,7 @@ module.exports = [
1757
1757
  exposes: [e.battery(), e.water_leak()],
1758
1758
  },
1759
1759
  {
1760
- fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_xkap8wtb'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_qnejhcsu'}],
1760
+ fingerprint: tuya.fingerprint('TS0001', ['_TZ3000_xkap8wtb', '_TZ3000_qnejhcsu', '_TZ3000_x3ewpzyr']),
1761
1761
  model: 'TS0001_power',
1762
1762
  description: 'Switch with power monitoring',
1763
1763
  vendor: 'TuYa',
@@ -2084,7 +2084,7 @@ module.exports = [
2084
2084
  onEvent: tuya.onEventSetLocalTime,
2085
2085
  configure: tuya.configureMagicPacket,
2086
2086
  exposes: [
2087
- e.battery(), e.child_lock(), e.open_window(), e.open_window_temperature().withValueMin(5).withValueMax(30),
2087
+ e.battery_low(), e.child_lock(), e.open_window(), e.open_window_temperature().withValueMin(5).withValueMax(30),
2088
2088
  e.comfort_temperature().withValueMin(5).withValueMax(30), e.eco_temperature().withValueMin(5).withValueMax(30),
2089
2089
  exposes.climate().withSystemMode(['off', 'heat'], ea.STATE_SET, 'When switched to the "off" mode, the device will display ' +
2090
2090
  '"HS" and the valve will be fully closed. Press the pair button to cancel or switch back to "heat" mode. Battery life ' +
@@ -2217,7 +2217,10 @@ module.exports = [
2217
2217
  ],
2218
2218
  },
2219
2219
  {
2220
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_a4bpgplm'}],
2220
+ fingerprint: [
2221
+ {modelID: 'TS0601', manufacturerName: '_TZE200_a4bpgplm'},
2222
+ {modelID: 'TS0601', manufacturerName: '_TZE200_dv8abrrz'},
2223
+ ],
2221
2224
  model: 'TS0601_thermostat_1',
2222
2225
  vendor: 'TuYa',
2223
2226
  description: 'Thermostatic radiator valve',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.649",
3
+ "version": "14.0.651",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [