zigbee-herdsman-converters 14.0.668 → 14.0.670

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.
@@ -1370,6 +1370,7 @@ const converters = {
1370
1370
  }
1371
1371
  const unoccupiedHeatingSetpoint = result;
1372
1372
  await entity.write('hvacThermostat', {unoccupiedHeatingSetpoint});
1373
+ return {state: {unoccupied_heating_setpoint: value}};
1373
1374
  },
1374
1375
  convertGet: async (entity, key, meta) => {
1375
1376
  await entity.read('hvacThermostat', ['unoccupiedHeatingSetpoint']);
@@ -1405,7 +1406,7 @@ const converters = {
1405
1406
  }
1406
1407
  const unoccupiedCoolingSetpoint = result;
1407
1408
  await entity.write('hvacThermostat', {unoccupiedCoolingSetpoint});
1408
- return {state: {unoccupied_heating_setpoint: value}};
1409
+ return {state: {unoccupied_cooling_setpoint: value}};
1409
1410
  },
1410
1411
  convertGet: async (entity, key, meta) => {
1411
1412
  await entity.read('hvacThermostat', ['unoccupiedCoolingSetpoint']);
package/devices/acova.js CHANGED
@@ -5,7 +5,7 @@ const reporting = require('../lib/reporting');
5
5
 
6
6
  module.exports = [
7
7
  {
8
- zigbeeModel: ['PERCALE2 D1.00P1.01Z1.00', 'PERCALE2 D1.00P1.02Z1.00'],
8
+ zigbeeModel: ['PERCALE2 D1.00P1.01Z1.00', 'PERCALE2 D1.00P1.02Z1.00', 'PERCALE2 D1.00P1.03Z1.00'],
9
9
  model: 'PERCALE2',
10
10
  vendor: 'Acova',
11
11
  description: 'Percale 2 heater',
@@ -21,6 +21,7 @@ module.exports = [
21
21
  exposes: [
22
22
  exposes.climate()
23
23
  .withSetpoint('occupied_heating_setpoint', 7, 28, 0.5)
24
+ .withSetpoint('unoccupied_heating_setpoint', 7, 28, 0.5)
24
25
  .withLocalTemperature()
25
26
  .withSystemMode(['off', 'heat', 'auto'])
26
27
  .withRunningState(['idle', 'heat']),
@@ -50,6 +51,7 @@ module.exports = [
50
51
  exposes: [
51
52
  exposes.climate()
52
53
  .withSetpoint('occupied_heating_setpoint', 7, 28, 0.5)
54
+ .withSetpoint('unoccupied_heating_setpoint', 7, 28, 0.5)
53
55
  .withLocalTemperature()
54
56
  .withSystemMode(['off', 'heat', 'auto'])
55
57
  .withRunningState(['idle', 'heat']),
@@ -81,6 +83,7 @@ module.exports = [
81
83
  exposes: [
82
84
  exposes.climate()
83
85
  .withSetpoint('occupied_heating_setpoint', 7, 28, 0.5)
86
+ .withSetpoint('unoccupied_heating_setpoint', 7, 28, 0.5)
84
87
  .withLocalTemperature()
85
88
  .withSystemMode(['off', 'heat', 'auto'])
86
89
  .withRunningState(['idle', 'heat']),
package/devices/bosch.js CHANGED
@@ -1,5 +1,6 @@
1
1
  const exposes = require('../lib/exposes');
2
- const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
2
+ const fz = require('../converters/fromZigbee');
3
+ const tz = require('../converters/toZigbee');
3
4
  const reporting = require('../lib/reporting');
4
5
  const e = exposes.presets;
5
6
 
@@ -38,4 +39,26 @@ module.exports = [
38
39
  },
39
40
  exposes: [e.temperature(), e.battery(), e.occupancy(), e.battery_low(), e.tamper()],
40
41
  },
42
+ {
43
+ zigbeeModel: ['RBSH-TRV0-ZB-EU'],
44
+ model: 'BTH-RA',
45
+ vendor: 'Bosch',
46
+ description: 'Radiator thermostat II',
47
+ fromZigbee: [fz.thermostat, fz.battery],
48
+ toZigbee: [tz.thermostat_occupied_heating_setpoint, tz.thermostat_local_temperature_calibration, tz.thermostat_local_temperature],
49
+ exposes: [
50
+ e.battery(),
51
+ exposes.climate()
52
+ .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
53
+ .withLocalTemperature()
54
+ .withLocalTemperatureCalibration(-30, 30, 0.1),
55
+ ],
56
+ configure: async (device, coordinatorEndpoint, logger) => {
57
+ const endpoint = device.getEndpoint(1);
58
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
59
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
60
+ await reporting.thermostatTemperature(endpoint);
61
+ await reporting.batteryPercentageRemaining(endpoint);
62
+ },
63
+ },
41
64
  ];
@@ -14,11 +14,7 @@ module.exports = [
14
14
  fromZigbee: [fz.connecte_thermostat],
15
15
  toZigbee: [tz.connecte_thermostat],
16
16
  onEvent: tuya.onEventSetTime,
17
- configure: async (device, coordinatorEndpoint, logger) => {
18
- const endpoint = device.getEndpoint(1);
19
- // Do a "magic" read on the basic cluster to trigger the thermostat start reporting.
20
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
21
- },
17
+ configure: tuya.configureMagicPacket,
22
18
  exposes: [
23
19
  exposes.binary('state', ea.STATE_SET, 'ON', 'OFF')
24
20
  .withDescription('On/off state of the switch'),
package/devices/datek.js CHANGED
@@ -84,6 +84,15 @@ module.exports = [
84
84
  exposes: [e.power(), e.energy(), e.current(), e.voltage(), e.current_phase_b(), e.voltage_phase_b(), e.current_phase_c(),
85
85
  e.voltage_phase_c(), e.temperature()],
86
86
  },
87
+ {
88
+ fingerprint: [{modelID: 'Motion Sensor', manufacturerName: 'Eva'}],
89
+ model: 'HSE2927E',
90
+ vendor: 'Datek',
91
+ description: 'Eva Zigbee motion sensor',
92
+ fromZigbee: [fz.ias_occupancy_alarm_1, fz.ias_occupancy_alarm_1_with_timeout, fz.illuminance, fz.temperature],
93
+ toZigbee: [],
94
+ exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.illuminance(), e.illuminance_lux(), e.temperature()],
95
+ },
87
96
  {
88
97
  zigbeeModel: ['ID Lock 150'],
89
98
  model: '0402946',
@@ -49,7 +49,7 @@ const develco = {
49
49
  },
50
50
  },
51
51
  fz: {
52
- // SPLZB-134 and SPLZB-131 reports strange values sometimes
52
+ // Some Develco devices report strange values sometimes
53
53
  // https://github.com/Koenkk/zigbee2mqtt/issues/13329
54
54
  electrical_measurement: {
55
55
  ...fz.electrical_measurement,
@@ -67,6 +67,14 @@ const develco = {
67
67
  }
68
68
  },
69
69
  },
70
+ temperature: {
71
+ ...fz.temperature,
72
+ convert: (model, msg, publish, options, meta) => {
73
+ if (msg.data.measuredValue !== -0x8000 && msg.data.measuredValue !== 0xFFFF) {
74
+ return fz.temperature.convert(model, msg, publish, options, meta);
75
+ }
76
+ },
77
+ },
70
78
  metering: {
71
79
  ...fz.metering,
72
80
  convert: (model, msg, publish, options, meta) => {
@@ -299,7 +307,7 @@ module.exports = [
299
307
  model: 'SPLZB-132',
300
308
  vendor: 'Develco',
301
309
  description: 'Power plug',
302
- fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.device_temperature],
310
+ fromZigbee: [fz.on_off, develco.fz.electrical_measurement, develco.fz.metering, develco.fz.device_temperature],
303
311
  toZigbee: [tz.on_off],
304
312
  exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy(), e.device_temperature(), e.ac_frequency()],
305
313
  options: [exposes.options.precision(`ac_frequency`)],
@@ -352,7 +360,7 @@ module.exports = [
352
360
  model: 'SMRZB-143',
353
361
  vendor: 'Develco',
354
362
  description: 'Smart cable',
355
- fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.device_temperature],
363
+ fromZigbee: [fz.on_off, develco.fz.electrical_measurement, develco.fz.metering, develco.fz.device_temperature],
356
364
  toZigbee: [tz.on_off],
357
365
  exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy(), e.device_temperature()],
358
366
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -417,7 +425,7 @@ module.exports = [
417
425
  model: 'SMSZB-120',
418
426
  vendor: 'Develco',
419
427
  description: 'Smoke detector with siren',
420
- fromZigbee: [fz.temperature, fz.battery, fz.ias_smoke_alarm_1_develco, fz.ignore_basic_report,
428
+ fromZigbee: [develco.fz.temperature, fz.battery, fz.ias_smoke_alarm_1_develco, fz.ignore_basic_report,
421
429
  fz.ias_enroll, fz.ias_wd, develco.fz.fault_status],
422
430
  toZigbee: [tz.warning, tz.ias_max_duration, tz.warning_simple],
423
431
  ota: ota.zigbeeOTA,
@@ -452,7 +460,7 @@ module.exports = [
452
460
  model: 'HESZB-120',
453
461
  vendor: 'Develco',
454
462
  description: 'Fire detector with siren',
455
- fromZigbee: [fz.temperature, fz.battery, fz.ias_smoke_alarm_1_develco, fz.ignore_basic_report,
463
+ fromZigbee: [develco.fz.temperature, fz.battery, fz.ias_smoke_alarm_1_develco, fz.ignore_basic_report,
456
464
  fz.ias_enroll, fz.ias_wd, develco.fz.fault_status],
457
465
  toZigbee: [tz.warning, tz.ias_max_duration, tz.warning_simple],
458
466
  meta: {battery: {voltageToPercentage: '3V_2500'}},
@@ -486,7 +494,7 @@ module.exports = [
486
494
  model: 'WISZB-120',
487
495
  vendor: 'Develco',
488
496
  description: 'Window sensor',
489
- fromZigbee: [fz.ias_contact_alarm_1, fz.battery, fz.temperature],
497
+ fromZigbee: [fz.ias_contact_alarm_1, fz.battery, develco.fz.temperature],
490
498
  toZigbee: [],
491
499
  exposes: [e.contact(), e.battery(), e.battery_low(), e.tamper(), e.temperature()],
492
500
  meta: {battery: {voltageToPercentage: '3V_2500'}},
@@ -525,7 +533,7 @@ module.exports = [
525
533
  vendor: 'Develco',
526
534
  description: 'Motion sensor',
527
535
  fromZigbee: [
528
- fz.temperature, fz.illuminance, fz.ias_occupancy_alarm_1, fz.battery,
536
+ develco.fz.temperature, fz.illuminance, fz.ias_occupancy_alarm_1, fz.battery,
529
537
  develco.fz.led_control, develco.fz.ias_occupancy_timeout,
530
538
  ],
531
539
  toZigbee: [develco.tz.led_control, develco.tz.ias_occupancy_timeout],
@@ -591,7 +599,7 @@ module.exports = [
591
599
  model: 'HMSZB-110',
592
600
  vendor: 'Develco',
593
601
  description: 'Temperature & humidity sensor',
594
- fromZigbee: [fz.battery, fz.temperature, fz.humidity],
602
+ fromZigbee: [fz.battery, develco.fz.temperature, fz.humidity],
595
603
  toZigbee: [],
596
604
  exposes: [e.battery(), e.battery_low(), e.temperature(), e.humidity()],
597
605
  meta: {battery: {voltageToPercentage: '3V_2500_3200'}},
@@ -609,7 +617,7 @@ module.exports = [
609
617
  model: 'ZHEMI101',
610
618
  vendor: 'Develco',
611
619
  description: 'Energy meter',
612
- fromZigbee: [fz.metering, develco.fz.pulse_configuration, develco.fz.interface_mode],
620
+ fromZigbee: [develco.fz.metering, develco.fz.pulse_configuration, develco.fz.interface_mode],
613
621
  toZigbee: [develco.tz.pulse_configuration, develco.tz.interface_mode, develco.tz.current_summation],
614
622
  endpoint: (device) => {
615
623
  return {'default': 2};
@@ -640,7 +648,7 @@ module.exports = [
640
648
  model: 'SMRZB-332',
641
649
  vendor: 'Develco',
642
650
  description: 'Smart relay DIN',
643
- fromZigbee: [fz.on_off, fz.metering],
651
+ fromZigbee: [fz.on_off, develco.fz.metering],
644
652
  toZigbee: [tz.on_off],
645
653
  exposes: [e.power(), e.energy(), e.switch()],
646
654
  endpoint: (device) => {
@@ -658,7 +666,7 @@ module.exports = [
658
666
  model: 'FLSZB-110',
659
667
  vendor: 'Develco',
660
668
  description: 'Flood alarm device ',
661
- fromZigbee: [fz.ias_water_leak_alarm_1, fz.temperature, fz.battery],
669
+ fromZigbee: [fz.ias_water_leak_alarm_1, develco.fz.temperature, fz.battery],
662
670
  toZigbee: [],
663
671
  exposes: [e.battery_low(), e.tamper(), e.water_leak(), e.temperature(), e.battery_voltage()],
664
672
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -673,7 +681,7 @@ module.exports = [
673
681
  model: 'AQSZB-110',
674
682
  vendor: 'Develco',
675
683
  description: 'Air quality sensor',
676
- fromZigbee: [develco.fz.voc, develco.fz.voc_battery, fz.temperature, fz.humidity],
684
+ fromZigbee: [develco.fz.voc, develco.fz.voc_battery, develco.fz.temperature, fz.humidity],
677
685
  toZigbee: [],
678
686
  ota: ota.zigbeeOTA,
679
687
  exposes: [
@@ -703,7 +711,7 @@ module.exports = [
703
711
  model: 'SIRZB-110',
704
712
  vendor: 'Develco',
705
713
  description: 'Customizable siren',
706
- fromZigbee: [fz.temperature, fz.battery, fz.ias_enroll, fz.ias_wd, fz.ias_siren],
714
+ fromZigbee: [develco.fz.temperature, fz.battery, fz.ias_enroll, fz.ias_wd, fz.ias_siren],
707
715
  toZigbee: [tz.warning, tz.warning_simple, tz.ias_max_duration, tz.squawk],
708
716
  meta: {battery: {voltageToPercentage: '3V_2500'}},
709
717
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -47,7 +47,7 @@ module.exports = [
47
47
  },
48
48
  {
49
49
  // eslint-disable-next-line
50
- zigbeeModel: ['\u0000\u0002\u0000\u0004\u0000\f]�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\"�T\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\u0000\f^�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0011�\"�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004� �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0000\f^\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
50
+ zigbeeModel: ['\u0000\u0002\u0000\u0004T\u0002\u000eZ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\u0000\f]�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\"�T\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e', '\u0000\u0002\u0000\u0004\u0000\f^�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0011�\"�\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004� �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004\u0000\f^\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
51
51
  model: 'D1533',
52
52
  vendor: 'EcoSmart',
53
53
  description: 'PAR20/A19 bright white bulb',
package/devices/fantem.js CHANGED
@@ -42,7 +42,7 @@ module.exports = [
42
42
  const endpoint = device.getEndpoint(1);
43
43
  // Enables reporting of physical state changes
44
44
  // https://github.com/Koenkk/zigbee2mqtt/issues/9057#issuecomment-1007742130
45
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
45
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
46
46
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
47
47
  },
48
48
  },
package/devices/ge.js CHANGED
@@ -61,11 +61,16 @@ module.exports = [
61
61
  model: '45856GE',
62
62
  vendor: 'GE',
63
63
  description: 'In-wall smart switch',
64
- extend: extend.switch(),
64
+ fromZigbee: [fz.on_off, fz.metering],
65
+ toZigbee: [tz.on_off],
66
+ exposes: [e.switch(), e.energy(), e.power()],
65
67
  configure: async (device, coordinatorEndpoint, logger) => {
66
68
  const endpoint = device.getEndpoint(1);
67
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
69
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
68
70
  await reporting.onOff(endpoint);
71
+ await reporting.instantaneousDemand(endpoint);
72
+ await reporting.currentSummDelivered(endpoint);
73
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 10000, multiplier: 1});
69
74
  },
70
75
  },
71
76
  {
package/devices/innr.js CHANGED
@@ -572,6 +572,7 @@ module.exports = [
572
572
  vendor: 'Innr',
573
573
  description: 'Smart plug',
574
574
  extend: extend.switch(),
575
+ ota: ota.zigbeeOTA,
575
576
  configure: async (device, coordinatorEndpoint, logger) => {
576
577
  const endpoint = device.getEndpoint(1);
577
578
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
@@ -15,6 +15,18 @@ const readInitialBatteryState = async (type, data, device) => {
15
15
  }
16
16
  };
17
17
 
18
+ const tzLocal = {
19
+ auto_mode: {
20
+ key: ['auto_mode'],
21
+ convertSet: async (entity, key, value, meta) => {
22
+ const mode = {'off': 0x00, 'auto': 0x02, 'on_override': 0x03};
23
+ const payload = {data: Buffer.from([mode[value]])};
24
+ await entity.command('manuSpecificLegrandDevices3', 'command0', payload);
25
+ return {state: {'auto_mode': value}};
26
+ },
27
+ },
28
+ };
29
+
18
30
  module.exports = [
19
31
  {
20
32
  zigbeeModel: [' Dry contact\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'+
@@ -46,16 +58,20 @@ module.exports = [
46
58
  vendor: 'Legrand',
47
59
  extend: extend.switch(),
48
60
  fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement, fz.legrand_cluster_fc01, fz.ignore_basic_report, fz.ignore_genOta],
49
- toZigbee: [tz.legrand_deviceMode, tz.on_off, tz.legrand_identify, tz.electrical_measurement_power],
61
+ toZigbee: [tz.legrand_deviceMode, tz.on_off, tz.legrand_identify, tz.electrical_measurement_power, tzLocal.auto_mode],
50
62
  exposes: [exposes.switch().withState('state', true, 'On/off (works only if device is in "switch" mode)'),
51
- e.power().withAccess(ea.STATE_GET), exposes.enum('device_mode', ea.ALL, ['switch', 'auto'])
52
- .withDescription('switch: allow on/off, auto will use wired action via C1/C2 on contactor for example with HC/HP')],
63
+ e.power().withAccess(ea.STATE_GET),
64
+ exposes.enum('device_mode', ea.ALL, ['switch', 'auto'])
65
+ .withDescription('Switch: allow manual on/off, auto uses contact\'s C1/C2 wired actions for Peak/Off-Peak ' +
66
+ 'electricity rates'),
67
+ exposes.enum('auto_mode', ea.STATE_SET, ['off', 'auto', 'on_override'])
68
+ .withDescription('Off/auto/on (override) (works only if device is set to "auto" mode)')],
53
69
  configure: async (device, coordinatorEndpoint, logger) => {
54
70
  const endpoint = device.getEndpoint(1);
55
71
  await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff', 'haElectricalMeasurement']);
56
72
  await reporting.onOff(endpoint);
57
- await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
58
73
  await reporting.activePower(endpoint);
74
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
59
75
  },
60
76
  },
61
77
  {
@@ -238,6 +254,7 @@ module.exports = [
238
254
  ota: ota.zigbeeOTA,
239
255
  fromZigbee: [fz.identify, fz.on_off],
240
256
  toZigbee: [tz.on_off, tz.legrand_identify],
257
+ whiteLabel: [{vendor: 'Bticino', model: '3584C'}],
241
258
  configure: async (device, coordinatorEndpoint, logger) => {
242
259
  const endpoint = device.getEndpoint(1);
243
260
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genBinaryInput']);
package/devices/lellki.js CHANGED
@@ -23,9 +23,7 @@ module.exports = [
23
23
  return {l1: 1, l2: 2, l3: 3, l4: 4, l5: 5};
24
24
  },
25
25
  configure: async (device, coordinatorEndpoint, logger) => {
26
- await device.getEndpoint(1).read('genBasic', [
27
- 'manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
28
-
26
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
29
27
  for (const ID of [1, 2, 3, 4, 5]) {
30
28
  await reporting.bind(device.getEndpoint(ID), coordinatorEndpoint, ['genOnOff']);
31
29
  }
@@ -115,7 +113,7 @@ module.exports = [
115
113
  toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
116
114
  configure: async (device, coordinatorEndpoint, logger) => {
117
115
  const endpoint = device.getEndpoint(1);
118
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
116
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
119
117
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
120
118
  endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
121
119
  endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
@@ -138,7 +136,7 @@ module.exports = [
138
136
  toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
139
137
  configure: async (device, coordinatorEndpoint, logger) => {
140
138
  const endpoint = device.getEndpoint(1);
141
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
139
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
142
140
  for (const ep of [1, 2, 3]) {
143
141
  await reporting.bind(device.getEndpoint(ep), coordinatorEndpoint, ['genOnOff']);
144
142
  await reporting.onOff(device.getEndpoint(ep));
package/devices/lidl.js CHANGED
@@ -515,8 +515,7 @@ module.exports = [
515
515
  extend: extend.switch(),
516
516
  meta: {multiEndpoint: true},
517
517
  configure: async (device, coordinatorEndpoint, logger) => {
518
- const endpoint = device.getEndpoint(1);
519
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
518
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
520
519
  for (const ID of [1, 2, 3]) {
521
520
  await reporting.bind(device.getEndpoint(ID), coordinatorEndpoint, ['genOnOff']);
522
521
  }
@@ -2,6 +2,7 @@ const exposes = require('../lib/exposes');
2
2
  const fz = require('../converters/fromZigbee');
3
3
  const tz = require('../converters/toZigbee');
4
4
  const reporting = require('../lib/reporting');
5
+ const tuya = require('../lib/tuya');
5
6
  const utils = require('../lib/utils');
6
7
  const e = exposes.presets;
7
8
  const ea = exposes.access;
@@ -36,7 +37,7 @@ module.exports = [
36
37
  },
37
38
  configure: async (device, coordinatorEndpoint, logger) => {
38
39
  const endpoint = device.getEndpoint(1);
39
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
40
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
40
41
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
41
42
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
42
43
  await reporting.rmsVoltage(endpoint, {change: 5});
@@ -2,6 +2,7 @@ const exposes = require('../lib/exposes');
2
2
  const fz = require('../converters/fromZigbee');
3
3
  const tz = require('../converters/toZigbee');
4
4
  const reporting = require('../lib/reporting');
5
+ const tuya = require('../lib/tuya');
5
6
  const e = exposes.presets;
6
7
  const ea = exposes.access;
7
8
 
@@ -24,7 +25,7 @@ module.exports = [
24
25
  meta: {multiEndpoint: true},
25
26
  configure: async (device, coordinatorEndpoint, logger) => {
26
27
  const endpoint = device.getEndpoint(1);
27
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
28
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
28
29
  endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
29
30
  endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
30
31
  device.save();
@@ -77,7 +77,7 @@ module.exports = [
77
77
  exposes: [e.battery(), e.battery_voltage()],
78
78
  configure: async (device, coordinatorEndpoint, logger) => {
79
79
  const endpoint = device.getEndpoint(1);
80
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
80
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
81
81
  await endpoint.command('genGroups', 'miboxerSetZones', {zones: [
82
82
  {zoneNum: 1, groupId: 101},
83
83
  {zoneNum: 2, groupId: 102},
package/devices/moes.js CHANGED
@@ -38,8 +38,7 @@ module.exports = [
38
38
  },
39
39
  meta: {multiEndpoint: true},
40
40
  configure: async (device, coordinatorEndpoint, logger) => {
41
- await device.getEndpoint(1).read('genBasic',
42
- ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
41
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
43
42
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
44
43
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
45
44
  await reporting.onOff(device.getEndpoint(1));
package/devices/neo.js CHANGED
@@ -79,7 +79,7 @@ module.exports = [
79
79
  ],
80
80
  configure: async (device, coordinatorEndpoint, logger) => {
81
81
  const endpoint = device.getEndpoint(1);
82
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
82
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
83
83
  await endpoint.command('manuSpecificTuya', 'mcuVersionRequest', {'seq': 0x0002});
84
84
  },
85
85
  },
@@ -211,7 +211,7 @@ module.exports = [
211
211
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
212
212
  },
213
213
  {
214
- zigbeeModel: ['LWA018'],
214
+ zigbeeModel: ['LWA018', 'LWA028'],
215
215
  model: '9290024693',
216
216
  vendor: 'Philips',
217
217
  description: 'Hue white A60 bulb B22 1055lm with Bluetooth',
@@ -561,7 +561,7 @@ module.exports = [
561
561
  extend: hueExtend.light_onoff_brightness(),
562
562
  },
563
563
  {
564
- zigbeeModel: ['LCT026', '7602031P7', '7602031U7', '7602031PU'],
564
+ zigbeeModel: ['LCT026', '7602031P7', '7602031U7', '7602031PU', '7602031J6'],
565
565
  model: '7602031P7',
566
566
  vendor: 'Philips',
567
567
  description: 'Hue Go with Bluetooth',
@@ -2914,4 +2914,11 @@ module.exports = [
2914
2914
  description: 'Hue White ambiance BR30 E26',
2915
2915
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
2916
2916
  },
2917
+ {
2918
+ zigbeeModel: ['LCX012'],
2919
+ model: '929003535301',
2920
+ vendor: 'Philips',
2921
+ description: 'Hue Festivia gradient light string 250',
2922
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2923
+ },
2917
2924
  ];
@@ -30,7 +30,7 @@ module.exports = [
30
30
  {vendor: 'TuYa', description: 'Głowica termostatyczna', model: 'GTZ02'},
31
31
  {vendor: 'Revolt', description: 'Thermostatic Radiator Valve Controller', model: 'NX-4911'},
32
32
  {vendor: 'Unitec', description: 'Thermostatic Radiator Valve Controller', model: '30946'},
33
- {vendor: 'Tesla', description: 'Thermostatic Radiator Valve Controller', model: 'TSL-TRV-GS361A'},
33
+ {vendor: 'Tesla Smart', description: 'Thermostatic Radiator Valve Controller', model: 'TSL-TRV-GS361A'},
34
34
  {vendor: 'Nedis', description: 'Thermostatic Radiator Valve Controller', model: 'ZBHTR10WT'},
35
35
  {vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'},
36
36
  {vendor: 'Brennenstuhl', description: 'Radiator Thermostat', model: 'HT CZ 01'}],
package/devices/tuya.js CHANGED
@@ -22,7 +22,7 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
22
22
  '_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
23
23
  '_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx',
24
24
  '_TZ3000_aim0ztek', '_TZ3000_mlswgkc3', '_TZ3000_7dndcnnb', '_TZ3000_waho4jtj', '_TZ3000_nmsciidq', '_TZ3000_jtgxgmks',
25
- '_TZ3000_rdfh8cfs', '_TZ3000_yujkchbz', '_TZ3000_fgwhjm9j', '_TZ3000_qeuvnohg'];
25
+ '_TZ3000_rdfh8cfs', '_TZ3000_yujkchbz', '_TZ3000_fgwhjm9j', '_TZ3000_qeuvnohg', '_TZ3000_rul9yxcc'];
26
26
 
27
27
  const tzLocal = {
28
28
  SA12IZL_silence_siren: {
@@ -665,6 +665,7 @@ module.exports = [
665
665
  model: 'TS0204',
666
666
  vendor: 'TuYa',
667
667
  description: 'Gas sensor',
668
+ whiteLabel: [{vendor: 'Tesla Smart', model: 'TSL-SEN-GAS'}],
668
669
  fromZigbee: [fz.ias_gas_alarm_1, fz.ignore_basic_report],
669
670
  toZigbee: [],
670
671
  exposes: [e.gas(), e.tamper()],
@@ -674,6 +675,7 @@ module.exports = [
674
675
  model: 'TS0205',
675
676
  vendor: 'TuYa',
676
677
  description: 'Smoke sensor',
678
+ whiteLabel: [{vendor: 'Tesla Smart', model: 'TSL-SEN-SMOKE'}],
677
679
  fromZigbee: [fz.ias_smoke_alarm_1, fz.battery, fz.ignore_basic_report],
678
680
  toZigbee: [],
679
681
  exposes: [e.smoke(), e.battery_low(), e.tamper(), e.battery()],
@@ -702,7 +704,11 @@ module.exports = [
702
704
  fromZigbee: [fz.ias_contact_alarm_1, fz.battery, fz.ignore_basic_report, fz.ias_contact_alarm_1_report],
703
705
  toZigbee: [],
704
706
  exposes: [e.contact(), e.battery_low(), e.tamper(), e.battery(), e.battery_voltage()],
705
- whiteLabel: [{vendor: 'CR Smart Home', model: 'TS0203'}, {vendor: 'TuYa', model: 'iH-F001'}],
707
+ whiteLabel: [
708
+ {vendor: 'CR Smart Home', model: 'TS0203'},
709
+ {vendor: 'TuYa', model: 'iH-F001'},
710
+ {vendor: 'Tesla Smart', model: 'TSL-SEN-DOOR'},
711
+ ],
706
712
  configure: async (device, coordinatorEndpoint, logger) => {
707
713
  try {
708
714
  const endpoint = device.getEndpoint(1);
@@ -807,13 +813,14 @@ module.exports = [
807
813
  {modelID: 'TS0001', manufacturerName: '_TZ3000_5ng23zjs'},
808
814
  {modelID: 'TS0001', manufacturerName: '_TZ3000_rmjr4ufz'},
809
815
  {modelID: 'TS0001', manufacturerName: '_TZ3000_v7gnj3ad'},
816
+ {modelID: 'TS0001', manufacturerName: '_TZ3000_3a9beq8a'},
810
817
  {modelID: 'TS0001', manufacturerName: '_TZ3000_ark8nv4y'},
811
818
  {modelID: 'TS0001', manufacturerName: '_TZ3000_mx3vgyea'},
812
819
  {modelID: 'TS0001', manufacturerName: '_TZ3000_qsp2pwtf'},
813
820
  {modelID: 'TS0001', manufacturerName: '_TZ3000_46t1rvdu'}],
814
821
  model: 'WHD02',
815
822
  vendor: 'TuYa',
816
- whiteLabel: [{vendor: 'TuYa', model: 'iHSW02'}],
823
+ whiteLabel: [{vendor: 'TuYa', model: 'iHSW02'}, {vendor: 'Aubess', model: 'TMZ02'}],
817
824
  description: 'Wall switch module',
818
825
  toZigbee: extend.switch().toZigbee.concat([tz.moes_power_on_behavior, tz.tuya_switch_type]),
819
826
  fromZigbee: extend.switch().fromZigbee.concat([fz.moes_power_on_behavior, fz.tuya_switch_type]),
@@ -875,54 +882,7 @@ module.exports = [
875
882
  whiteLabel: [{vendor: 'KTNNKG', model: 'ZB1248-10A'}],
876
883
  },
877
884
  {
878
- fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_qqjaziws'},
879
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_jtmhndw2'},
880
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_ezlg0pht'},
881
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_3lbtuxgp'},
882
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_5snkkrxw'},
883
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_12sxjap4'},
884
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_x2fqbdun'},
885
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_589kq4ul'},
886
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_1mtktxdk'},
887
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_remypqqm'},
888
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_kohbva1f'},
889
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_luit1t00'},
890
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_r5afgmkl'},
891
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_wslkvrau'},
892
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_0rn9qhnu'},
893
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_ejctepku'},
894
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_bicjqpg4'},
895
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_jmiuubkz'},
896
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_cmaky9gq'},
897
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_tza2vjxx'},
898
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_it1u8ahz'},
899
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_k1pe6ibm'},
900
- {modelID: 'TS0505B', manufacturerName: '_TZB210_1ecortg6'},
901
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_e020aaaj'},
902
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_bfwvfyx1'},
903
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_leyz4rju'},
904
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_jd3z4yig'},
905
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_dgdjiw1c'},
906
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_mzdax7ha'},
907
- {modelID: 'TS0505B', manufacturerName: '_TZB210_tmi0rihb'},
908
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_a4s41wm4'},
909
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_awrucboq'},
910
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_ijczzg9h'},
911
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_qxenlrin'},
912
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_vaiyrvd1'},
913
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_iwbaamgh'},
914
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_klv2wul0'},
915
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_s6zec0of'},
916
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_y5fjkn7x'},
917
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_cuqkfz2q'},
918
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_6amjviba'},
919
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_xr5m6kfg'},
920
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_xr5m6kfg'},
921
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_bf175wi4'},
922
- {modelID: 'TS0505B', manufacturerName: '_TZB210_3zfp8mki'},
923
- {modelID: 'TS0505B', manufacturerName: '_TZ3000_y1vbo44x'},
924
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_mny0zvkm'},
925
- {modelID: 'TS0505B', manufacturerName: '_TZ3210_pfupy2pg'}],
885
+ zigbeeModel: ['TS0505B'],
926
886
  model: 'TS0505B',
927
887
  vendor: 'TuYa',
928
888
  description: 'Zigbee RGB+CCT light',
@@ -937,31 +897,17 @@ module.exports = [
937
897
  meta: {applyRedFix: true, enhancedHue: false},
938
898
  },
939
899
  {
940
- fingerprint: [{modelID: 'TS0503B', manufacturerName: '_TZ3000_i8l0nqdu'},
941
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_a5fxguxr'},
942
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_778drfdt'},
943
- {modelID: 'TS0503B', manufacturerName: '_TZ3000_g5xawfcq'},
944
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_trm3l2aw'},
945
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_95txyzbx'},
946
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_odlghna1'},
947
- {modelID: 'TS0503B', manufacturerName: '_TZB210_nfzrlz29'},
948
- {modelID: 'TS0503B', manufacturerName: '_TZ3220_wp1k8xws'},
949
- {modelID: 'TS0503B', manufacturerName: '_TZ3210_wp1k8xws'}],
900
+ zigbeeModel: ['TS0503B'],
950
901
  model: 'TS0503B',
951
902
  vendor: 'TuYa',
952
903
  description: 'Zigbee RGB light',
904
+ whiteLabel: [{vendor: 'BTF-Lighting', model: 'C03Z'}],
953
905
  extend: extend.light_onoff_brightness_color(),
954
906
  // Requires red fix: https://github.com/Koenkk/zigbee2mqtt/issues/5962#issue-796462106
955
907
  meta: {applyRedFix: true, enhancedHue: false},
956
908
  },
957
909
  {
958
- fingerprint: [{modelID: 'TS0504B', manufacturerName: '_TZ3000_ukuvyhaa'},
959
- {modelID: 'TS0504B', manufacturerName: '_TZ3210_bfvybixd'},
960
- {modelID: 'TS0504B', manufacturerName: '_TZ3210_i2i0bsnv'},
961
- {modelID: 'TS0504B', manufacturerName: '_TZ3210_elzv6aia'},
962
- {modelID: 'TS0504B', manufacturerName: '_TZ3210_1elppmba'},
963
- {modelID: 'TS0504B', manufacturerName: '_TZB210_5jn6an2y'},
964
- {modelID: 'TS0504B', manufacturerName: '_TZ3210_onejz0gt'}],
910
+ zigbeeModel: ['TS0504B'],
965
911
  model: 'TS0504B',
966
912
  vendor: 'TuYa',
967
913
  description: 'Zigbee RGBW light',
@@ -970,25 +916,14 @@ module.exports = [
970
916
  meta: {applyRedFix: true},
971
917
  },
972
918
  {
973
- fingerprint: [{modelID: 'TS0501A', manufacturerName: '_TZ3000_yeg1e5eh'}],
919
+ zigbeeModel: ['TS0501A'],
974
920
  model: 'TS0501A',
975
921
  description: 'Zigbee light',
976
922
  vendor: 'TuYa',
977
923
  extend: extend.light_onoff_brightness(),
978
924
  },
979
925
  {
980
- fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3000_4whigl8i'},
981
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_4whigl8i'},
982
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_9q49basr'},
983
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_i680rtja'},
984
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_grnwgegn'},
985
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_nehayyhx'},
986
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_wuheofsg'},
987
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_e5t9bfdv'},
988
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_19qb27da'},
989
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_aurnbfv4'},
990
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_4zinq6io'},
991
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_93gnbdgz'}],
926
+ zigbeeModel: ['TS0501B'],
992
927
  model: 'TS0501B',
993
928
  description: 'Zigbee light',
994
929
  vendor: 'TuYa',
@@ -1139,11 +1074,11 @@ module.exports = [
1139
1074
  exposes: [e.water_leak(), e.battery_low(), e.battery()],
1140
1075
  },
1141
1076
  {
1142
- fingerprint: [{modelID: 'TS0101', manufacturerName: '_TYZB01_ijihzffk'}],
1077
+ fingerprint: tuya.fingerprint('TS0101', ['_TYZB01_ijihzffk', '_TZ3210_tfxwxklq']),
1143
1078
  model: 'TS0101',
1144
1079
  vendor: 'TuYa',
1145
1080
  description: 'Zigbee Socket',
1146
- whiteLabel: [{vendor: 'Larkkey', model: 'PS080'}],
1081
+ whiteLabel: [{vendor: 'Larkkey', model: 'PS080'}, {vendor: 'Mercator', model: 'SPBS01G'}],
1147
1082
  extend: extend.switch(),
1148
1083
  meta: {disableDefaultResponse: true},
1149
1084
  },
@@ -1518,31 +1453,7 @@ module.exports = [
1518
1453
  extend: extend.light_onoff_brightness_colortemp(),
1519
1454
  },
1520
1455
  {
1521
- fingerprint: [
1522
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_s1x7gcq0'},
1523
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_hi1ym4bl'},
1524
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_muqovqv0'},
1525
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_qjdimezy'},
1526
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_psgq7ysz'},
1527
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_zw7wr5uo'},
1528
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_ok08rifa'},
1529
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_pz9zmxjj'},
1530
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_fzwhym79'},
1531
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_ogceypug'},
1532
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_rm0hthdo'},
1533
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_zwqnazkb'},
1534
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_ijsj2evj'},
1535
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_pgq2qvyv'},
1536
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_nvaik6gk'},
1537
- {modelID: 'TS0502B', manufacturerName: '_TZB210_rkgngb5o'},
1538
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_armwcncd'},
1539
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_2p6wbry3'},
1540
- {modelID: 'TS0502B', manufacturerName: '_TZB210_nfzrlz29'},
1541
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_qamcypen'},
1542
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_zdrhqmo0'},
1543
- {modelID: 'TS0502B', manufacturerName: '_TZ3210_2cjfbpy0'},
1544
- {modelID: 'TS0502B', manufacturerName: '_TZ3000_bujv0r9b'},
1545
- ],
1456
+ zigbeeModel: ['TS0502B'],
1546
1457
  model: 'TS0502B',
1547
1458
  vendor: 'TuYa',
1548
1459
  description: 'Light controller',
@@ -1553,7 +1464,7 @@ module.exports = [
1553
1464
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 500]}),
1554
1465
  },
1555
1466
  {
1556
- fingerprint: [{modelID: 'TS0504A', manufacturerName: '_TZ3000_nzbm4ad4'}],
1467
+ zigbeeModel: ['TS0504A'],
1557
1468
  model: 'TS0504A',
1558
1469
  vendor: 'TuYa',
1559
1470
  description: 'RGBW LED controller',
@@ -1801,14 +1712,13 @@ module.exports = [
1801
1712
  configure: async (device, coordinatorEndpoint, logger) => {
1802
1713
  const endpoint = device.getEndpoint(1);
1803
1714
  await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
1804
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
1715
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
1805
1716
  await reporting.rmsVoltage(endpoint, {change: 5});
1806
- await reporting.activePower(endpoint, {change: 10});
1717
+ await reporting.rmsCurrent(endpoint, {change: 50});
1718
+ await reporting.currentSummDelivered(endpoint);
1807
1719
  endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
1808
1720
  device.save();
1809
1721
  },
1810
- options: [exposes.options.measurement_poll_interval().withDescription('Only the energy value is polled for this device.')],
1811
- onEvent: (type, data, device, options) => tuya.onEventMeasurementPoll(type, data, device, options, false, true),
1812
1722
  whiteLabel: [{vendor: 'Aubess', model: 'WDH02'}],
1813
1723
  exposes: [e.switch(), e.power(), e.voltage().withAccess(ea.STATE), e.energy(), e.power_on_behavior(), e.switch_type_2()],
1814
1724
  },
@@ -1837,12 +1747,7 @@ module.exports = [
1837
1747
  },
1838
1748
  meta: {multiEndpoint: true},
1839
1749
  configure: async (device, coordinatorEndpoint, logger) => {
1840
- const ep1 = device.getEndpoint(1);
1841
- try {
1842
- await ep1.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
1843
- } catch (e) {
1844
- // Fails for some: https://github.com/Koenkk/zigbee2mqtt/discussions/13368
1845
- }
1750
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
1846
1751
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
1847
1752
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
1848
1753
  },
@@ -2393,7 +2298,8 @@ module.exports = [
2393
2298
  vendor: 'TuYa',
2394
2299
  whiteLabel: [{vendor: 'LELLKI', model: 'TS011F_plug'}, {vendor: 'NEO', model: 'NAS-WR01B'},
2395
2300
  {vendor: 'BlitzWolf', model: 'BW-SHP15'}, {vendor: 'Nous', model: 'A1Z'}, {vendor: 'BlitzWolf', model: 'BW-SHP13'},
2396
- {vendor: 'MatSee Plus', model: 'PJ-ZSW01'}, {vendor: 'MODEMIX', model: 'MOD037'}, {vendor: 'MODEMIX', model: 'MOD048'}],
2301
+ {vendor: 'MatSee Plus', model: 'PJ-ZSW01'}, {vendor: 'MODEMIX', model: 'MOD037'}, {vendor: 'MODEMIX', model: 'MOD048'},
2302
+ {vendor: 'Coswall', model: 'CS-AJ-DE2U-ZG-11'}],
2397
2303
  ota: ota.zigbeeOTA,
2398
2304
  fromZigbee: [fz.on_off, fzLocal.electrical_measurement_skip_duplicate, fzLocal.metering_skip_duplicate, fz.ignore_basic_report,
2399
2305
  fz.tuya_switch_power_outage_memory, fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
@@ -2465,7 +2371,8 @@ module.exports = [
2465
2371
  .withDescription('Recover state after power outage'),
2466
2372
  exposes.enum('indicator_mode', ea.ALL, ['off', 'off/on', 'on/off', 'on'])
2467
2373
  .withDescription('Plug LED indicator mode'), e.child_lock()],
2468
- onEvent: tuya.onEventMeasurementPoll,
2374
+ onEvent: (type, data, device, options) =>
2375
+ tuya.onEventMeasurementPoll(type, data, device, options, true, device.applicationVersion === 160),
2469
2376
  },
2470
2377
  {
2471
2378
  fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ntcy3xu1']),
@@ -1,6 +1,7 @@
1
1
  const exposes = require('../lib/exposes');
2
2
  const reporting = require('../lib/reporting');
3
3
  const extend = require('../lib/extend');
4
+ const tuya = require('../lib/tuya');
4
5
  const e = exposes.presets;
5
6
 
6
7
  module.exports = [
@@ -32,8 +33,7 @@ module.exports = [
32
33
  extend: extend.switch(),
33
34
  meta: {multiEndpoint: true},
34
35
  configure: async (device, coordinatorEndpoint, logger) => {
35
- await device.getEndpoint(1).read('genBasic',
36
- ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
36
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
37
37
  for (const ID of [1, 2, 3, 4, 5]) {
38
38
  await reporting.bind(device.getEndpoint(ID), coordinatorEndpoint, ['genOnOff']);
39
39
  }
package/devices/woox.js CHANGED
@@ -107,10 +107,7 @@ module.exports = [
107
107
  onEvent: tuya.onEventSetTime,
108
108
  exposes: [e.switch(), e.battery()],
109
109
  meta: {disableDefaultResponse: true},
110
- configure: async (device, coordinatorEndpoint, logger) => {
111
- const endpoint = device.getEndpoint(1);
112
- await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
113
- },
110
+ configure: tuya.configureMagicPacket,
114
111
  },
115
112
  {
116
113
  fingerprint: [{modelID: 'TS0505A', manufacturerName: '_TZ3000_keabpigv'}],
@@ -70,8 +70,7 @@ module.exports = [
70
70
  whiteLabel: [{vendor: 'BSEED', model: 'TS0003', description: 'Zigbee switch'}],
71
71
  meta: {multiEndpoint: true, disableDefaultResponse: true},
72
72
  configure: async (device, coordinatorEndpoint, logger) => {
73
- await device.getEndpoint(1).read('genBasic',
74
- ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
73
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
75
74
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
76
75
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
77
76
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
@@ -91,9 +90,8 @@ module.exports = [
91
90
  return {'left': 1, 'center': 2, 'right': 3};
92
91
  },
93
92
  meta: {multiEndpoint: true},
94
- configure: async (device, coordinatorEndpoint) => {
95
- await device.getEndpoint(1).read('genBasic',
96
- ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
93
+ configure: async (device, coordinatorEndpoint, logger) => {
94
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
97
95
  for (const endpointID of [1, 2, 3]) {
98
96
  const endpoint = device.getEndpoint(endpointID);
99
97
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
@@ -144,9 +142,7 @@ module.exports = [
144
142
  },
145
143
  meta: {multiEndpoint: true},
146
144
  configure: async (device, coordinatorEndpoint, logger) => {
147
- await device.getEndpoint(1).read('genBasic', [
148
- 'manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
149
-
145
+ await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
150
146
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
151
147
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
152
148
  await reporting.onOff(device.getEndpoint(1));
package/lib/tuya.js CHANGED
@@ -1517,7 +1517,7 @@ const fzDataPoints = {
1517
1517
  result = {...result, ...dpEntry[2].from(value, meta)};
1518
1518
  }
1519
1519
  } else {
1520
- meta.logger.warn(`Datapoint ${dpId} not defined for '${meta.device.manufacturerName}' ` +
1520
+ meta.logger.debug(`Datapoint ${dpId} not defined for '${meta.device.manufacturerName}' ` +
1521
1521
  `with data ${JSON.stringify(dpValue)}`);
1522
1522
  }
1523
1523
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.668",
3
+ "version": "14.0.670",
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.71"
41
+ "zigbee-herdsman": "^0.14.73"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",