zigbee-herdsman-converters 14.0.561 → 14.0.564

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.
@@ -1943,11 +1943,18 @@ const converters = {
1943
1943
  const dp = dpValue.dp;
1944
1944
  const value = tuya.getDataValue(dpValue);
1945
1945
  switch (dp) {
1946
- case 1:
1946
+ case tuya.dataPoints.tthTemperature:
1947
1947
  return {temperature: calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature')};
1948
- case 2:
1949
- return {humidity: calibrateAndPrecisionRoundOptions(value, options, 'humidity')};
1950
- case 4:
1948
+ case tuya.dataPoints.tthHumidity:
1949
+ return {humidity: calibrateAndPrecisionRoundOptions(
1950
+ (value / (meta.device.manufacturerName === '_TZE200_bjawzodf' ? 10 : 1)),
1951
+ options, 'humidity')};
1952
+ case tuya.dataPoints.tthBatteryLevel:
1953
+ return {
1954
+ battery_level: {0: 'low', 1: 'middle', 2: 'high'}[value],
1955
+ battery_low: value === 0 ? true : false,
1956
+ };
1957
+ case tuya.dataPoints.tthBattery:
1951
1958
  return {battery: value};
1952
1959
  default:
1953
1960
  meta.logger.warn(`zigbee-herdsman-converters:maa_tuya_temp_sensor: NOT RECOGNIZED ` +
@@ -2300,7 +2300,8 @@ const converters = {
2300
2300
  key: ['led_disabled_night'],
2301
2301
  convertSet: async (entity, key, value, meta) => {
2302
2302
  if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ14LM', 'QBCZ15LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
2303
- 'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02'].includes(meta.mapped.model)) {
2303
+ 'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02',
2304
+ 'WS-EUK03', 'WS-EUK04'].includes(meta.mapped.model)) {
2304
2305
  await entity.write('aqaraOpple', {0x0203: {value: value ? 1 : 0, type: 0x10}}, manufacturerOptions.xiaomi);
2305
2306
  } else if (['ZNCZ11LM'].includes(meta.mapped.model)) {
2306
2307
  const payload = value ?
@@ -2315,7 +2316,8 @@ const converters = {
2315
2316
  },
2316
2317
  convertGet: async (entity, key, meta) => {
2317
2318
  if (['ZNCZ04LM', 'ZNCZ15LM', 'QBCZ15LM', 'QBCZ14LM', 'QBKG19LM', 'QBKG20LM', 'QBKG25LM', 'QBKG26LM',
2318
- 'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02'].includes(meta.mapped.model)) {
2319
+ 'QBKG31LM', 'QBKG34LM', 'DLKZMK11LM', 'SSM-U01', 'WS-EUK01', 'WS-EUK02',
2320
+ 'WS-EUK03', 'WS-EUK04'].includes(meta.mapped.model)) {
2319
2321
  await entity.read('aqaraOpple', [0x0203], manufacturerOptions.xiaomi);
2320
2322
  } else {
2321
2323
  throw new Error('Not supported');
package/devices/acova.js CHANGED
@@ -63,4 +63,34 @@ module.exports = [
63
63
  await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
64
64
  },
65
65
  },
66
+ {
67
+ zigbeeModel: ['TAFFETAS2 D1.00P1.02Z1.00'],
68
+ model: 'TAFFETAS2',
69
+ vendor: 'Acova',
70
+ description: 'Taffetas 2 heater',
71
+ fromZigbee: [fz.thermostat, fz.hvac_user_interface],
72
+ toZigbee: [
73
+ tz.thermostat_local_temperature,
74
+ tz.thermostat_system_mode,
75
+ tz.thermostat_occupied_heating_setpoint,
76
+ tz.thermostat_unoccupied_heating_setpoint,
77
+ tz.thermostat_occupied_cooling_setpoint,
78
+ tz.thermostat_running_state,
79
+ ],
80
+ exposes: [
81
+ exposes.climate()
82
+ .withSetpoint('occupied_heating_setpoint', 7, 28, 0.5)
83
+ .withLocalTemperature()
84
+ .withSystemMode(['off', 'heat', 'auto'])
85
+ .withRunningState(['idle', 'heat']),
86
+ ],
87
+ configure: async (device, coordinatorEndpoint, logger) => {
88
+ const endpoint = device.getEndpoint(1);
89
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
90
+ await reporting.thermostatTemperature(endpoint);
91
+ await reporting.thermostatRunningState(endpoint);
92
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
93
+ await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
94
+ },
95
+ },
66
96
  ];
@@ -72,6 +72,26 @@ module.exports = [
72
72
  await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
73
73
  },
74
74
  },
75
+ {
76
+ zigbeeModel: ['4256050-RZHAC'],
77
+ model: '4256050-RZHAC',
78
+ vendor: 'Centralite',
79
+ description: '3-Series smart outlet appliance module',
80
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
81
+ toZigbee: [tz.on_off],
82
+ exposes: [e.switch(), e.power(), e.voltage(), e.current()],
83
+ configure: async (device, coordinatorEndpoint, logger) => {
84
+ const endpoint = device.getEndpoint(1);
85
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
86
+ await reporting.onOff(endpoint);
87
+ // 4256050-RZHAC doesn't support reading 'acVoltageMultiplier' or 'acVoltageDivisor'
88
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
89
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
90
+ await reporting.rmsVoltage(endpoint, {change: 2}); // Voltage reports in V
91
+ await reporting.rmsCurrent(endpoint, {change: 10}); // Current reports in mA
92
+ await reporting.activePower(endpoint, {change: 2}); // Power reports in 0.1W
93
+ },
94
+ },
75
95
  {
76
96
  zigbeeModel: ['4257050-ZHAC'],
77
97
  model: '4257050-ZHAC',
@@ -348,7 +348,7 @@ module.exports = [
348
348
  model: 'GL-S-004Z',
349
349
  vendor: 'Gledopto',
350
350
  description: 'Zigbee 4W MR16 Bulb 30deg RGB+CCT',
351
- extend: gledoptoExtend.light_onoff_brightness_colortemp_color(),
351
+ extend: gledoptoExtend.light_onoff_brightness_colortemp_color({disableColorTempStartup: false}),
352
352
  },
353
353
  {
354
354
  zigbeeModel: ['GL-S-005Z'],
@@ -537,6 +537,7 @@ module.exports = [
537
537
  zigbeeModel: ['GL-D-006P'],
538
538
  model: 'GL-D-006P',
539
539
  vendor: 'Gledopto',
540
+ ota: ota.zigbeeOTA,
540
541
  description: 'Zigbee 6W anti-glare downlight RGB+CCT (pro)',
541
542
  extend: gledoptoExtend.light_onoff_brightness_colortemp_color({colorTempRange: [158, 495]}),
542
543
  },
package/devices/hive.js CHANGED
@@ -9,6 +9,13 @@ const e = exposes.presets;
9
9
  const ea = exposes.access;
10
10
 
11
11
  module.exports = [
12
+ {
13
+ zigbeeModel: ['FWGU10Bulb02UK'],
14
+ model: 'FWGU10Bulb02UK',
15
+ vendor: 'Hive',
16
+ description: 'GU10 warm white',
17
+ extend: extend.light_onoff_brightness(),
18
+ },
12
19
  {
13
20
  zigbeeModel: ['MOT003'],
14
21
  model: 'MOT003',
package/devices/insta.js CHANGED
@@ -53,7 +53,7 @@ module.exports = [
53
53
  {ID: 242, profileID: 41440, deviceID: 97},
54
54
  ]},
55
55
  ],
56
- zigbeeModel: ['57005000'],
56
+ zigbeeModel: ['NEXENTRO Switching Actuator', '57005000'],
57
57
  model: '57005000',
58
58
  vendor: 'Insta',
59
59
  description: 'Switching Actuator Mini with input for wall switch',
@@ -139,7 +139,7 @@ module.exports = [
139
139
  zigbeeModel: ['Tibea TW Z3'],
140
140
  model: '4058075168572',
141
141
  vendor: 'LEDVANCE',
142
- description: 'SMART+ lamp E27 turntable white',
142
+ description: 'SMART+ lamp E27 tuneable white',
143
143
  extend: extend.ledvance.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
144
144
  ota: ota.ledvance,
145
145
  },
@@ -151,4 +151,12 @@ module.exports = [
151
151
  extend: extend.ledvance.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
152
152
  ota: ota.ledvance,
153
153
  },
154
+ {
155
+ zigbeeModel: ['CLA60 RGBW JP'],
156
+ model: 'SMARTZBA60RGBW',
157
+ vendor: 'LEDVANCE',
158
+ description: 'SMART+ lamp E26 RGBW',
159
+ extend: extend.ledvance.light_onoff_brightness_colortemp_color({colorTempRange: [153, 526]}),
160
+ ota: ota.ledvance,
161
+ },
154
162
  ];
package/devices/nous.js CHANGED
@@ -17,7 +17,9 @@ module.exports = [
17
17
  exposes: [e.temperature(), e.humidity(), e.battery()],
18
18
  },
19
19
  {
20
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}, {modelID: 'TS0601', manufacturerName: '_TZE200_c7emyjom'}],
20
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'},
21
+ {modelID: 'TS0601', manufacturerName: '_TZE200_c7emyjom'},
22
+ {modelID: 'TS0601', manufacturerName: '_TZE200_locansqn'}],
21
23
  model: 'SZ-T04',
22
24
  vendor: 'Nous',
23
25
  description: 'Temperature and humidity sensor with clock',
@@ -2427,6 +2427,13 @@ module.exports = [
2427
2427
  description: 'Akari downlight',
2428
2428
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2429
2429
  },
2430
+ {
2431
+ zigbeeModel: ['LCD006'],
2432
+ model: '9290031346',
2433
+ vendor: 'Philips',
2434
+ description: 'Hue white and color ambiance 5/6" retrofit recessed downlight',
2435
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2436
+ },
2430
2437
  {
2431
2438
  zigbeeModel: ['LWE004'],
2432
2439
  model: '8719514302235',
@@ -357,6 +357,18 @@ module.exports = [
357
357
  await reporting.onOff(endpoint);
358
358
  },
359
359
  },
360
+ {
361
+ zigbeeModel: ['CH10AX/SWITCH/1'],
362
+ model: '41E10PBSWMZ-VW',
363
+ vendor: 'Schneider Electric',
364
+ description: 'Wiser 40/300-Series module switch 10A with ControlLink',
365
+ extend: extend.switch(),
366
+ configure: async (device, coordinatorEndpoint, logger) => {
367
+ const endpoint = device.getEndpoint(1);
368
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
369
+ await reporting.onOff(endpoint);
370
+ },
371
+ },
360
372
  {
361
373
  zigbeeModel: ['SMARTPLUG/1'],
362
374
  model: 'CCT711119',
package/devices/tuya.js CHANGED
@@ -319,13 +319,22 @@ module.exports = [
319
319
  },
320
320
  {
321
321
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bq5c8xfe'},
322
- {modelID: 'TS0601', manufacturerName: '_TZE200_bjawzodf'}],
322
+ {modelID: 'TS0601', manufacturerName: '_TZE200_bjawzodf'},
323
+ {modelID: 'TS0601', manufacturerName: '_TZE200_qyflbnbj'}],
323
324
  model: 'TS0601_temperature_humidity_sensor',
324
325
  vendor: 'TuYa',
325
326
  description: 'Temperature & humidity sensor',
326
327
  fromZigbee: [fz.tuya_temperature_humidity_sensor],
327
328
  toZigbee: [],
328
- exposes: [e.temperature(), e.humidity(), e.battery()],
329
+ exposes: (device, options) => {
330
+ const exps = [e.temperature(), e.humidity(), e.battery()];
331
+ if (!device || device.manufacturerName === '_TZE200_qyflbnbj') {
332
+ exps.push(e.battery_low());
333
+ exps.push(exposes.enum('battery_level', ea.STATE, ['low', 'middle', 'high']).withDescription('Battery level state'));
334
+ }
335
+ exps.push(e.linkquality());
336
+ return exps;
337
+ },
329
338
  },
330
339
  {
331
340
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_vzqtvljm'}],
@@ -338,7 +347,9 @@ module.exports = [
338
347
  },
339
348
  {
340
349
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_8ygsuhe1'},
341
- {modelID: 'TS0601', manufacturerName: '_TZE200_yvx5lh6k'}, {modelID: 'TS0601', manufacturerName: '_TZE200_ryfmq5rl'}],
350
+ {modelID: 'TS0601', manufacturerName: '_TZE200_yvx5lh6k'},
351
+ {modelID: 'TS0601', manufacturerName: '_TZE200_ryfmq5rl'},
352
+ {modelID: 'TS0601', manufacturerName: '_TZE200_c2fmom5z'}],
342
353
  model: 'TS0601_air_quality_sensor',
343
354
  vendor: 'TuYa',
344
355
  description: 'Air quality sensor',
@@ -439,6 +450,14 @@ module.exports = [
439
450
  extend: extend.switch(),
440
451
  whiteLabel: [{vendor: 'Mumubiz', model: 'ZJSB9-80Z'}],
441
452
  },
453
+ {
454
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_8fdayfch'}],
455
+ model: 'TS011F_relay_switch',
456
+ vendor: 'TuYa',
457
+ description: 'Dry contact relay switch',
458
+ extend: extend.switch(),
459
+ whiteLabel: [{vendor: 'KTNNKG', model: 'ZB1248-10A'}],
460
+ },
442
461
  {
443
462
  fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_qqjaziws'},
444
463
  {modelID: 'TS0505B', manufacturerName: '_TZ3000_jtmhndw2'},
package/devices/ubisys.js CHANGED
@@ -640,7 +640,8 @@ module.exports = [
640
640
  fz.command_move, fz.command_stop, fz.lighting_ballast_configuration, fz.level_config, ubisys.fz.dimmer_setup,
641
641
  ubisys.fz.dimmer_setup_genLevelCtrl],
642
642
  toZigbee: [tz.light_onoff_brightness, tz.ballast_config, tz.level_config, ubisys.tz.dimmer_setup,
643
- ubisys.tz.dimmer_setup_genLevelCtrl, ubisys.tz.configure_device_setup, tz.ignore_transition],
643
+ ubisys.tz.dimmer_setup_genLevelCtrl, ubisys.tz.configure_device_setup, tz.ignore_transition, tz.light_brightness_move,
644
+ tz.light_brightness_step],
644
645
  exposes: [e.light_brightness().withLevelConfig(), e.power(),
645
646
  exposes.numeric('ballast_physical_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
646
647
  .withDescription('Specifies the minimum light output the ballast can achieve.'),
package/devices/xiaomi.js CHANGED
@@ -269,11 +269,19 @@ module.exports = [
269
269
  model: 'WS-USC01',
270
270
  vendor: 'Xiaomi',
271
271
  description: 'Aqara smart wall switch (no neutral, single rocker)',
272
- extend: extend.switch(),
272
+ fromZigbee: [fz.on_off, fz.xiaomi_multistate_action, fz.aqara_opple],
273
+ toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple,
274
+ tz.xiaomi_flip_indicator_light, tz.aqara_switch_mode_switch],
275
+ exposes: [e.switch(), e.action(['single', 'double']), e.flip_indicator_light(),
276
+ exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode'),
277
+ exposes.enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
278
+ .withDescription('Anti flicker mode can be used to solve blinking issues of some lights.' +
279
+ 'Quick mode makes the device respond faster.')],
280
+ onEvent: preventReset,
273
281
  configure: async (device, coordinatorEndpoint, logger) => {
274
- const endpoint = device.getEndpoint(1);
275
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
276
- await reporting.onOff(endpoint);
282
+ const endpoint1 = device.getEndpoint(1);
283
+ // set "event" mode
284
+ await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
277
285
  },
278
286
  },
279
287
  {
@@ -410,9 +418,9 @@ module.exports = [
410
418
  description: 'Aqara smart wall switch H1 EU (with neutral, single rocker)',
411
419
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_multistate_action, fz.aqara_opple],
412
420
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
413
- tz.xiaomi_flip_indicator_light],
421
+ tz.xiaomi_flip_indicator_light, tz.xiaomi_led_disabled_night],
414
422
  exposes: [e.switch(), e.action(['single', 'double']), e.power().withAccess(ea.STATE_GET), e.energy(), e.flip_indicator_light(),
415
- e.power_outage_memory(), e.device_temperature().withAccess(ea.STATE),
423
+ e.power_outage_memory(), e.device_temperature().withAccess(ea.STATE), e.led_disabled_night(), e.power_outage_count(),
416
424
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode')],
417
425
  onEvent: preventReset,
418
426
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -428,7 +436,7 @@ module.exports = [
428
436
  description: 'Aqara smart wall switch H1 EU (with neutral, double rocker)',
429
437
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_multistate_action, fz.aqara_opple],
430
438
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
431
- tz.xiaomi_flip_indicator_light],
439
+ tz.xiaomi_flip_indicator_light, tz.xiaomi_led_disabled_night],
432
440
  meta: {multiEndpoint: true},
433
441
  endpoint: (device) => {
434
442
  return {'left': 1, 'right': 2};
@@ -439,7 +447,8 @@ module.exports = [
439
447
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button')
440
448
  .withEndpoint('right'),
441
449
  e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
442
- e.device_temperature().withAccess(ea.STATE), e.power_outage_memory(), e.flip_indicator_light()],
450
+ e.device_temperature().withAccess(ea.STATE), e.power_outage_memory(), e.flip_indicator_light(),
451
+ e.led_disabled_night(), e.power_outage_count()],
443
452
  onEvent: preventReset,
444
453
  configure: async (device, coordinatorEndpoint, logger) => {
445
454
  const endpoint1 = device.getEndpoint(1);
package/lib/tuya.js CHANGED
@@ -626,6 +626,11 @@ const dataPoints = {
626
626
  nousHumiAlarm: 15,
627
627
  nousTempSensitivity: 19,
628
628
  nousReportInterval: 17,
629
+ // TUYA Temperature and Humidity Sensor
630
+ tthTemperature: 1,
631
+ tthHumidity: 2,
632
+ tthBatteryLevel: 3,
633
+ tthBattery: 4,
629
634
  // TUYA / HUMIDITY/ILLUMINANCE/TEMPERATURE SENSOR
630
635
  thitBatteryPercentage: 3,
631
636
  thitIlluminanceLux: 7,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.561",
3
+ "version": "14.0.564",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [