zigbee-herdsman-converters 14.0.345 → 14.0.349

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.
@@ -652,6 +652,18 @@ const converters = {
652
652
  return payload;
653
653
  },
654
654
  },
655
+ EKO09738_metering: {
656
+ /**
657
+ * Elko EKO09738 and EKO09716 reports power in mW, scale to W
658
+ */
659
+ cluster: 'seMetering',
660
+ type: ['attributeReport', 'readResponse'],
661
+ convert: (model, msg, publish, options, meta) => {
662
+ const result = converters.metering.convert(model, msg, publish, options, meta);
663
+ result.power /= 1000;
664
+ return result;
665
+ },
666
+ },
655
667
  develco_metering: {
656
668
  cluster: 'seMetering',
657
669
  type: ['attributeReport', 'readResponse'],
@@ -3104,6 +3116,9 @@ const converters = {
3104
3116
  result[postfixWithEndpointName('external_measured_room_sensor', msg, model)] =
3105
3117
  msg.data['danfossExternalMeasuredRoomSensor'];
3106
3118
  }
3119
+ if (msg.data.hasOwnProperty('danfossRadiatorCovered')) {
3120
+ result[postfixWithEndpointName('radiator_covered', msg, model)] = (msg.data['danfossRadiatorCovered'] === 1);
3121
+ }
3107
3122
  if (msg.data.hasOwnProperty('danfossViewingDirection')) {
3108
3123
  result[postfixWithEndpointName('viewing_direction', msg, model)] = (msg.data['danfossViewingDirection'] === 1);
3109
3124
  }
@@ -7297,9 +7312,9 @@ const converters = {
7297
7312
  const value = tuya.getDataValue(msg.data.datatype, msg.data.data);
7298
7313
  switch (dp) {
7299
7314
  case tuya.dataPoints.trsPresenceState:
7300
- return {presence: {0: 'false', 1: 'true'}[value]};
7315
+ return {presence: {0: false, 1: true}[value]};
7301
7316
  case tuya.dataPoints.trsMotionState:
7302
- return {motion: {1: 'false', 2: 'true'}[value]};
7317
+ return {motion: {1: false, 2: true}[value]};
7303
7318
  case tuya.dataPoints.trsMotionSpeed:
7304
7319
  return {motion_speed: value};
7305
7320
  case tuya.dataPoints.trsMotionDirection:
@@ -2467,6 +2467,16 @@ const converters = {
2467
2467
  await entity.read('hvacThermostat', ['danfossExternalMeasuredRoomSensor'], manufacturerOptions.danfoss);
2468
2468
  },
2469
2469
  },
2470
+ danfoss_radiator_covered: {
2471
+ key: ['radiator_covered'],
2472
+ convertSet: async (entity, key, value, meta) => {
2473
+ await entity.write('hvacThermostat', {'danfossRadiatorCovered': value}, manufacturerOptions.danfoss);
2474
+ return {readAfterWriteTime: 200, state: {'radiator_covered': value}};
2475
+ },
2476
+ convertGet: async (entity, key, meta) => {
2477
+ await entity.read('hvacThermostat', ['danfossRadiatorCovered'], manufacturerOptions.danfoss);
2478
+ },
2479
+ },
2470
2480
  danfoss_viewing_direction: {
2471
2481
  key: ['viewing_direction'],
2472
2482
  convertSet: async (entity, key, value, meta) => {
@@ -311,4 +311,25 @@ module.exports = [
311
311
  },
312
312
  exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure()],
313
313
  },
314
+ {
315
+ zigbeeModel: ['EFEKTA_PWS_Max'],
316
+ model: 'EFEKTA_PWS_Max',
317
+ vendor: 'Custom devices (DiY)',
318
+ description: '[Plant watering sensor EFEKTA PWS max](http://efektalab.com/PWS_Max)',
319
+ fromZigbee: [fz.temperature, fz.humidity, fz.illuminance, fz.soil_moisture, fz.battery],
320
+ toZigbee: [tz.factory_reset],
321
+ configure: async (device, coordinatorEndpoint, logger) => {
322
+ const firstEndpoint = device.getEndpoint(1);
323
+ await reporting.bind(firstEndpoint, coordinatorEndpoint, [
324
+ 'genPowerCfg', 'msTemperatureMeasurement', 'msRelativeHumidity', 'msIlluminanceMeasurement', 'msSoilMoisture']);
325
+ const overides = {min: 0, max: 21600, change: 0};
326
+ await reporting.batteryVoltage(firstEndpoint, overides);
327
+ await reporting.batteryPercentageRemaining(firstEndpoint, overides);
328
+ await reporting.temperature(firstEndpoint, overides);
329
+ await reporting.humidity(firstEndpoint, overides);
330
+ await reporting.illuminance(firstEndpoint, overides);
331
+ await reporting.soil_moisture(firstEndpoint, overides);
332
+ },
333
+ exposes: [e.soil_moisture(), e.battery(), e.illuminance(), e.temperature(), e.humidity()],
334
+ },
314
335
  ];
@@ -20,8 +20,8 @@ module.exports = [
20
20
  tz.danfoss_mounted_mode_control, tz.danfoss_thermostat_vertical_orientation, tz.danfoss_algorithm_scale_factor,
21
21
  tz.danfoss_heat_available, tz.danfoss_heat_required, tz.danfoss_day_of_week, tz.danfoss_trigger_time,
22
22
  tz.danfoss_window_open_internal, tz.danfoss_window_open_external, tz.danfoss_load_estimate,
23
- tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.thermostat_keypad_lockout,
24
- tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
23
+ tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.danfoss_radiator_covered,
24
+ tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
25
25
  exposes: [e.battery(), e.keypad_lockout(),
26
26
  exposes.binary('mounted_mode_active', ea.STATE_GET, true, false)
27
27
  .withDescription('Is the unit in mounting mode. This is set to `false` for mounted (already on ' +
@@ -44,9 +44,14 @@ module.exports = [
44
44
  exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature().withPiHeatingDemand()
45
45
  .withSystemMode(['heat']).withRunningState(['idle', 'heat'], ea.STATE),
46
46
  exposes.numeric('external_measured_room_sensor', ea.ALL)
47
- .withDescription('Set at maximum 3 hours interval but not more often than every 30 minutes and 0.1 ' +
48
- 'degrees difference. Resets every 3hours to standard. e.g. 21C = 2100 (-8000=undefined).')
47
+ .withDescription('If `radiator_covered` is `true`: Set at maximum 30 minutes interval but not more often than every ' +
48
+ '5 minutes and 0.1 degrees difference. Resets every 35 minutes to standard. If `radiator_covered` is `false`: ' +
49
+ 'Set at maximum 3 hours interval but not more often than every 30 minutes and 0.1 degrees difference. ' +
50
+ 'Resets every 3 hours to standard. Value 21C = 2100 (-8000=undefined).')
49
51
  .withValueMin(-8000).withValueMax(3500),
52
+ exposes.binary('radiator_covered', ea.ALL, true, false)
53
+ .withDescription('Set if the TRV should solely rely on external_measured_room_sensor or operate in offset mode. ' +
54
+ '`false` = Auto Offset Mode or `true` = Room Sensor Mode'),
50
55
  exposes.numeric('window_open_internal', ea.STATE_GET).withValueMin(0).withValueMax(4)
51
56
  .withDescription('0=Quarantine, 1=Windows are closed, 2=Hold - Windows are maybe about to open, ' +
52
57
  '3=Open window detected, 4=In window open state from external but detected closed locally'),
@@ -116,6 +121,7 @@ module.exports = [
116
121
  'danfossMountedModeControl',
117
122
  'danfossMountedModeActive',
118
123
  'danfossExternalMeasuredRoomSensor',
124
+ 'danfossRadiatorCovered',
119
125
  'danfossLoadBalancingEnable',
120
126
  'danfossLoadRoomMean',
121
127
  ], options);
@@ -6,8 +6,7 @@ module.exports = [
6
6
  zigbeeModel: ['Lamp_01'],
7
7
  model: 'KS-SM001',
8
8
  vendor: 'Ksentry Electronics',
9
- description: '[Zigbee OnOff Controller](http://ksentry.manufacturer.globalsources.com/si/6008837134660'+
10
- '/pdtl/ZigBee-module/1162731630/zigbee-on-off-controller-modules.htm)',
9
+ description: 'Zigbee on/off controller',
11
10
  extend: extend.switch(),
12
11
  configure: async (device, coordinatorEndpoint, logger) => {
13
12
  const endpoint = device.getEndpoint(11);
@@ -98,4 +98,12 @@ module.exports = [
98
98
  extend: extend.ledvance.light_onoff_brightness_colortemp_color({colorTempRange: [153, 526]}),
99
99
  ota: ota.ledvance,
100
100
  },
101
+ {
102
+ zigbeeModel: ['Tibea TW Z3'],
103
+ model: '4058075168572',
104
+ vendor: 'LEDVANCE',
105
+ description: 'SMART+ lamp E27 turntable white',
106
+ extend: extend.ledvance.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
107
+ ota: ota.ledvance,
108
+ },
101
109
  ];
package/devices/osram.js CHANGED
@@ -391,14 +391,68 @@ module.exports = [
391
391
  },
392
392
  {
393
393
  zigbeeModel: ['Zigbee 3.0 DALI CONV LI'],
394
- model: '4062172044776',
394
+ model: '4062172044776_1',
395
395
  vendor: 'OSRAM',
396
- description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires',
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
+ },
399
+ {
400
+ fingerprint: [{modelID: 'Zigbee 3.0 DALI CONV LI', endpoints: [{ID: 10}, {ID: 25}, {ID: 242}]}],
401
+ model: '4062172044776_2',
402
+ vendor: 'OSRAM',
403
+ description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (one device and pushbutton)',
404
+ extend: extend.ledvance.light_onoff_brightness(),
405
+ onEvent: async (type, data, device) => {
406
+ if (type === 'deviceInterview') {
407
+ device.getEndpoint(25).addBinding('genOnOff', device.getEndpoint(10));
408
+ device.getEndpoint(25).addBinding('genLevelCtrl', device.getEndpoint(10));
409
+ }
410
+ },
411
+ },
412
+ {
413
+ fingerprint: [{modelID: 'Zigbee 3.0 DALI CONV LI', endpoints: [{ID: 10}, {ID: 11}, {ID: 242}]}],
414
+ model: '4062172044776_3',
415
+ vendor: 'OSRAM',
416
+ description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices)',
417
+ extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
398
418
  exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
399
419
  endpoint: (device) => {
400
420
  return {'l1': 10, 'l2': 11};
401
421
  },
402
422
  meta: {multiEndpoint: true},
423
+ configure: async (device, coordinatorEndpoint, logger) => {
424
+ await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
425
+ await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
426
+ await reporting.onOff(device.getEndpoint(10));
427
+ await reporting.brightness(device.getEndpoint(10));
428
+ await reporting.onOff(device.getEndpoint(11));
429
+ await reporting.brightness(device.getEndpoint(11));
430
+ },
431
+ },
432
+ {
433
+ fingerprint: [{modelID: 'Zigbee 3.0 DALI CONV LI', endpoints: [{ID: 10}, {ID: 11}, {ID: 25}, {ID: 242}]}],
434
+ model: '4062172044776_4',
435
+ vendor: 'OSRAM',
436
+ description: 'Zigbee 3.0 DALI CONV LI dimmer for DALI-based luminaires (with two devices and pushbutton)',
437
+ extend: extend.ledvance.light_onoff_brightness({noConfigure: true}),
438
+ exposes: [e.light_brightness().withEndpoint('l1'), e.light_brightness().withEndpoint('l2')],
439
+ endpoint: (device) => {
440
+ return {'l1': 10, 'l2': 11};
441
+ },
442
+ meta: {multiEndpoint: true},
443
+ configure: async (device, coordinatorEndpoint, logger) => {
444
+ await reporting.bind(device.getEndpoint(10), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
445
+ await reporting.bind(device.getEndpoint(11), coordinatorEndpoint, ['genLevelCtrl', 'genOnOff']);
446
+ await reporting.onOff(device.getEndpoint(10));
447
+ await reporting.brightness(device.getEndpoint(10));
448
+ await reporting.onOff(device.getEndpoint(11));
449
+ await reporting.brightness(device.getEndpoint(11));
450
+ },
451
+ onEvent: async (type, data, device) => {
452
+ if (type === 'deviceInterview') {
453
+ device.getEndpoint(25).addBinding('genOnOff', device.getEndpoint(10));
454
+ device.getEndpoint(25).addBinding('genLevelCtrl', device.getEndpoint(10));
455
+ }
456
+ },
403
457
  },
404
458
  ];
package/devices/robb.js CHANGED
@@ -162,4 +162,26 @@ module.exports = [
162
162
  },
163
163
  exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy()],
164
164
  },
165
+ {
166
+ zigbeeModel: ['ROB_200-017-1'],
167
+ model: 'ROB_200-017-1',
168
+ vendor: 'ROBB',
169
+ description: 'Zigbee smart plug',
170
+ fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering, fz.temperature],
171
+ toZigbee: [tz.on_off],
172
+ configure: async (device, coordinatorEndpoint, logger) => {
173
+ const endpoint = device.getEndpoint(1);
174
+ await reporting.bind(endpoint, coordinatorEndpoint,
175
+ ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'msTemperatureMeasurement']);
176
+ await reporting.onOff(endpoint);
177
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
178
+ await reporting.readMeteringMultiplierDivisor(endpoint);
179
+ await reporting.rmsVoltage(endpoint);
180
+ await reporting.rmsCurrent(endpoint);
181
+ await reporting.activePower(endpoint);
182
+ await reporting.temperature(endpoint);
183
+ await reporting.currentSummDelivered(endpoint);
184
+ },
185
+ exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy(), e.temperature()],
186
+ },
165
187
  ];
@@ -533,4 +533,40 @@ module.exports = [
533
533
  await reporting.batteryPercentageRemaining(endpoint);
534
534
  },
535
535
  },
536
+ {
537
+ zigbeeModel: ['SOCKET/OUTLET/2'],
538
+ model: 'EKO09738',
539
+ vendor: 'Schneider Electric',
540
+ description: 'Zigbee smart socket with power meter',
541
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.EKO09738_metering, fz.power_on_behavior],
542
+ toZigbee: [tz.on_off, tz.power_on_behavior],
543
+ exposes: [e.switch(), e.power(), e.energy(), exposes.enum('power_on_behavior', ea.ALL, ['off', 'previous', 'on'])
544
+ .withDescription('Controls the behaviour when the device is powered on'), e.current(), e.voltage()],
545
+ configure: async (device, coordinatorEndpoint, logger) => {
546
+ const endpoint = device.getEndpoint(6);
547
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
548
+ await reporting.onOff(endpoint);
549
+ // Unit supports acVoltage and acCurrent, but only acCurrent divisor/multiplier can be read
550
+ await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor', 'acCurrentMultiplier']);
551
+ await reporting.readMeteringMultiplierDivisor(endpoint);
552
+ },
553
+ },
554
+ {
555
+ zigbeeModel: ['SOCKET/OUTLET/1'],
556
+ model: 'EKO09716',
557
+ vendor: 'Schneider Electric',
558
+ description: 'Zigbee smart socket with power meter',
559
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.EKO09738_metering, fz.power_on_behavior],
560
+ toZigbee: [tz.on_off, tz.power_on_behavior],
561
+ exposes: [e.switch(), e.power(), e.energy(), exposes.enum('power_on_behavior', ea.ALL, ['off', 'previous', 'on'])
562
+ .withDescription('Controls the behaviour when the device is powered on'), e.current(), e.voltage()],
563
+ configure: async (device, coordinatorEndpoint, logger) => {
564
+ const endpoint = device.getEndpoint(6);
565
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
566
+ await reporting.onOff(endpoint);
567
+ // Unit supports acVoltage and acCurrent, but only acCurrent divisor/multiplier can be read
568
+ await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor', 'acCurrentMultiplier']);
569
+ await reporting.readMeteringMultiplierDivisor(endpoint);
570
+ },
571
+ },
536
572
  ];
@@ -38,4 +38,11 @@ module.exports = [
38
38
  description: 'LED candle bulb E14 470 lumen, dimmable, color, white 2700K',
39
39
  extend: extend.light_onoff_brightness(),
40
40
  },
41
+ {
42
+ fingerprint: [{modelID: 'ZBT-CCTLight-GU100904', manufacturerName: 'LDS'}],
43
+ model: 'HAL500',
44
+ vendor: 'Schwaiger',
45
+ description: 'LED bulb GU10 350 lumen, dimmable, color, white 2700-6500K',
46
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
47
+ },
41
48
  ];
@@ -0,0 +1,42 @@
1
+ const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
2
+ const tz = require('zigbee-herdsman-converters/converters/toZigbee');
3
+ const exposes = require('zigbee-herdsman-converters/lib/exposes');
4
+ const reporting = require('zigbee-herdsman-converters/lib/reporting');
5
+ const e = exposes.presets;
6
+
7
+
8
+ module.exports = [
9
+ {
10
+ zigbeeModel: ['zigfred uno'],
11
+ model: 'ZFU-1D-CH',
12
+ vendor: 'Siglis',
13
+ description: 'zigfred uno smart in-wall switch',
14
+ exposes: [e.light_brightness_colorxy().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.light_brightness().withEndpoint('l3')],
15
+ fromZigbee: [fz.color_colortemp, fz.on_off, fz.brightness, fz.level_config, fz.power_on_behavior, fz.ignore_basic_report],
16
+ toZigbee: [tz.light_onoff_brightness, tz.light_color, tz.ignore_transition, tz.ignore_rate, tz.light_brightness_move,
17
+ tz.light_brightness_step, tz.level_config, tz.power_on_behavior, tz.light_hue_saturation_move,
18
+ tz.light_hue_saturation_step, tz.light_color_options, tz.light_color_mode],
19
+ meta: {multiEndpoint: true},
20
+ endpoint: (device) => {
21
+ return {'l1': 5, 'l2': 6, 'l3': 7};
22
+ },
23
+ configure: async (device, coordinatorEndpoint, logger) => {
24
+ const controlEp = device.getEndpoint(5);
25
+ const relayEp = device.getEndpoint(6);
26
+ const dimmerEp = device.getEndpoint(7);
27
+ // Bind Control EP (LED)
28
+ await reporting.bind(controlEp, coordinatorEndpoint, ['genOnOff']);
29
+ await reporting.bind(controlEp, coordinatorEndpoint, ['genLevelCtrl']);
30
+ await reporting.onOff(controlEp);
31
+ await reporting.brightness(controlEp);
32
+ // Bind Relay EP
33
+ await reporting.bind(relayEp, coordinatorEndpoint, ['genOnOff']);
34
+ await reporting.onOff(relayEp);
35
+ // Bind Dimmer EP
36
+ await reporting.bind(dimmerEp, coordinatorEndpoint, ['genOnOff']);
37
+ await reporting.bind(dimmerEp, coordinatorEndpoint, ['genLevelCtrl']);
38
+ await reporting.onOff(dimmerEp);
39
+ await reporting.brightness(dimmerEp);
40
+ },
41
+ },
42
+ ];
package/devices/sinope.js CHANGED
@@ -56,7 +56,7 @@ module.exports = [
56
56
  model: 'TH1124ZB',
57
57
  vendor: 'Sinopé',
58
58
  description: 'Zigbee line volt thermostat',
59
- fromZigbee: [fz.legacy.thermostat_att_report, fz.legacy.hvac_user_interface, fz.electrical_measurement, fz.metering,
59
+ fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.hvac_user_interface, fz.electrical_measurement, fz.metering,
60
60
  fz.ignore_temperature_report, fz.legacy.sinope_thermostat_state],
61
61
  toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
62
62
  tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
@@ -113,7 +113,7 @@ module.exports = [
113
113
  model: 'TH1300ZB',
114
114
  vendor: 'Sinopé',
115
115
  description: 'Zigbee smart floor heating thermostat',
116
- fromZigbee: [fz.legacy.thermostat_att_report, fz.legacy.hvac_user_interface, fz.ignore_temperature_report,
116
+ fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.hvac_user_interface, fz.ignore_temperature_report,
117
117
  fz.legacy.sinope_thermostat_state, fz.sinope_TH1300ZB_specific],
118
118
  toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
119
119
  tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
package/devices/tuya.js CHANGED
@@ -9,6 +9,10 @@ const extend = require('../lib/extend');
9
9
  const e = exposes.presets;
10
10
  const ea = exposes.access;
11
11
 
12
+
13
+ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak', '_TZ3000_ew3ldmgx',
14
+ '_TZ3000_jvzvulen', '_TZ3000_mraovvmm', '_TZ3000_nfnmi125', '_TZ3000_ps3dmato', '_TZ3000_w0qqde0g', '_TZ3000_u5u4cakc'];
15
+
12
16
  module.exports = [
13
17
  {
14
18
  zigbeeModel: ['TS0203'],
@@ -490,6 +494,7 @@ module.exports = [
490
494
  model: 'TS0201',
491
495
  vendor: 'TuYa',
492
496
  description: 'Temperature & humidity sensor with display',
497
+ whiteLabel: [{vendor: 'BlitzWolf', model: 'BW-IS4'}],
493
498
  fromZigbee: [fz.battery, fz.temperature, fz.humidity],
494
499
  toZigbee: [],
495
500
  exposes: [e.battery(), e.temperature(), e.humidity(), e.battery_voltage()],
@@ -1015,17 +1020,9 @@ module.exports = [
1015
1020
  extend: extend.switch(),
1016
1021
  },
1017
1022
  {
1018
- fingerprint: [
1019
- {modelID: 'TS011F', manufacturerName: '_TZ3000_5f43h46b'},
1020
- {modelID: 'TS011F', manufacturerName: '_TZ3000_cphmq0q7'},
1021
- {modelID: 'TS011F', manufacturerName: '_TZ3000_dpo1ysak'},
1022
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ew3ldmgx'},
1023
- {modelID: 'TS011F', manufacturerName: '_TZ3000_jvzvulen'},
1024
- {modelID: 'TS011F', manufacturerName: '_TZ3000_mraovvmm'},
1025
- {modelID: 'TS011F', manufacturerName: '_TZ3000_nfnmi125'},
1026
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ps3dmato'},
1027
- {modelID: 'TS011F', manufacturerName: '_TZ3000_w0qqde0g'},
1028
- ],
1023
+ fingerprint: TS011Fplugs.map((manufacturerName) => {
1024
+ return {modelID: 'TS011F', manufacturerName};
1025
+ }),
1029
1026
  model: 'TS011F_plug_1',
1030
1027
  description: 'Smart plug (with power monitoring)',
1031
1028
  vendor: 'TuYa',
@@ -1065,29 +1062,15 @@ module.exports = [
1065
1062
  .withDescription('Recover state after power outage')],
1066
1063
  },
1067
1064
  {
1068
- fingerprint: [
1069
- {modelID: 'TS011F', manufacturerName: '_TZ3000_5f43h46b', applicationVersion: 68},
1070
- {modelID: 'TS011F', manufacturerName: '_TZ3000_5f43h46b', applicationVersion: 69},
1071
- {modelID: 'TS011F', manufacturerName: '_TZ3000_cphmq0q7', applicationVersion: 68},
1072
- {modelID: 'TS011F', manufacturerName: '_TZ3000_cphmq0q7', applicationVersion: 69},
1073
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ew3ldmgx', applicationVersion: 68},
1074
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ew3ldmgx', applicationVersion: 69},
1075
- {modelID: 'TS011F', manufacturerName: '_TZ3000_jvzvulen', applicationVersion: 68},
1076
- {modelID: 'TS011F', manufacturerName: '_TZ3000_jvzvulen', applicationVersion: 69},
1077
- {modelID: 'TS011F', manufacturerName: '_TZ3000_mraovvmm', applicationVersion: 68},
1078
- {modelID: 'TS011F', manufacturerName: '_TZ3000_mraovvmm', applicationVersion: 69},
1079
- {modelID: 'TS011F', manufacturerName: '_TZ3000_nfnmi125', applicationVersion: 68},
1080
- {modelID: 'TS011F', manufacturerName: '_TZ3000_nfnmi125', applicationVersion: 69},
1081
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ps3dmato', applicationVersion: 68},
1082
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ps3dmato', applicationVersion: 69},
1083
- {modelID: 'TS011F', manufacturerName: '_TZ3000_w0qqde0g', applicationVersion: 64},
1084
- {modelID: 'TS011F', manufacturerName: '_TZ3000_w0qqde0g', applicationVersion: 68},
1085
- {modelID: 'TS011F', manufacturerName: '_TZ3000_w0qqde0g', applicationVersion: 69},
1086
- ],
1065
+ fingerprint: [].concat(...TS011Fplugs.map((manufacturerName) => {
1066
+ return [69, 68, 65, 64].map((applicationVersion) => {
1067
+ return {modelID: 'TS011F', manufacturerName, applicationVersion};
1068
+ });
1069
+ })),
1087
1070
  model: 'TS011F_plug_3',
1088
1071
  description: 'Smart plug (with power monitoring by polling)',
1089
1072
  vendor: 'TuYa',
1090
- whiteLabel: [{vendor: 'VIKEFON', model: 'TS011F'}],
1073
+ whiteLabel: [{vendor: 'VIKEFON', model: 'TS011F'}, {vendor: 'BlitzWolf', model: 'BW-SHP15'}],
1091
1074
  fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
1092
1075
  toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
1093
1076
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -1666,7 +1649,7 @@ module.exports = [
1666
1649
  toZigbee: [tz.tuya_radar_sensor],
1667
1650
  exposes: [
1668
1651
  e.illuminance_lux(), e.presence(),
1669
- exposes.enum('motion', ea.STATE, ['true', 'false']).withDescription('moving inside the range of the sensor'),
1652
+ exposes.binary('motion', ea.STATE, [true, false]).withDescription('moving inside the range of the sensor'),
1670
1653
  exposes.numeric('motion_speed', ea.STATE).withDescription('Speed of movement'),
1671
1654
  exposes.enum('motion_direction', ea.STATE, ['standing still', 'moving forward', 'moving backward'])
1672
1655
  .withDescription('direction of movement from the point of view of the radar'),
package/index.js CHANGED
@@ -75,9 +75,7 @@ function addDefinition(definition) {
75
75
  };
76
76
  }
77
77
 
78
- if (definition.toZigbee.length > 0) {
79
- definition.toZigbee.push(tz.scene_store, tz.scene_recall, tz.scene_add, tz.scene_remove, tz.scene_remove_all, tz.read, tz.write);
80
- }
78
+ definition.toZigbee.push(tz.scene_store, tz.scene_recall, tz.scene_add, tz.scene_remove, tz.scene_remove_all, tz.read, tz.write);
81
79
 
82
80
  if (definition.exposes) {
83
81
  definition.exposes = definition.exposes.concat([exposes.presets.linkquality()]);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.345",
3
+ "version": "14.0.349",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.345",
3
+ "version": "14.0.349",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [