zigbee-herdsman-converters 14.0.610 → 14.0.611

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.
@@ -4633,22 +4633,22 @@ const converters = {
4633
4633
  }
4634
4634
  },
4635
4635
  },
4636
- legrand_settingAlwaysEnableLed: {
4636
+ legrand_settingEnableLedInDark: {
4637
4637
  // connected power outlet is on attribute 2 and not 1
4638
- key: ['led_when_off'],
4638
+ key: ['led_in_dark'],
4639
4639
  convertSet: async (entity, key, value, meta) => {
4640
4640
  // enable or disable the LED (blue) when permitJoin=false (LED off)
4641
4641
  const enableLedIfOn = value === 'ON' || (value === 'OFF' ? false : !!value);
4642
4642
  const payload = {1: {value: enableLedIfOn, type: 16}};
4643
4643
  await entity.write('manuSpecificLegrandDevices', payload, manufacturerOptions.legrand);
4644
- return {state: {'led_when_off': value}};
4644
+ return {state: {'led_in_dark': value}};
4645
4645
  },
4646
4646
  convertGet: async (entity, key, meta) => {
4647
4647
  await entity.read('manuSpecificLegrandDevices', [0x0001], manufacturerOptions.legrand);
4648
4648
  },
4649
4649
  },
4650
4650
  legrand_settingEnableLedIfOn: {
4651
- key: ['led_when_on'],
4651
+ key: ['led_if_on'],
4652
4652
  convertSet: async (entity, key, value, meta) => {
4653
4653
  // enable the LED when the light object is "doing something"
4654
4654
  // on the light switch, the LED is on when the light is on,
@@ -4656,7 +4656,7 @@ const converters = {
4656
4656
  const enableLedIfOn = value === 'ON' || (value === 'OFF' ? false : !!value);
4657
4657
  const payload = {2: {value: enableLedIfOn, type: 16}};
4658
4658
  await entity.write('manuSpecificLegrandDevices', payload, manufacturerOptions.legrand);
4659
- return {state: {'led_when_on': value}};
4659
+ return {state: {'led_if_on': value}};
4660
4660
  },
4661
4661
  convertGet: async (entity, key, meta) => {
4662
4662
  await entity.read('manuSpecificLegrandDevices', [0x0002], manufacturerOptions.legrand);
@@ -13,11 +13,12 @@ module.exports = [
13
13
  vendor: 'BTicino',
14
14
  description: 'Light switch with neutral',
15
15
  fromZigbee: [fz.identify, fz.on_off, fz.K4003C_binary_input, fz.legrand_cluster_fc01],
16
- toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn, tz.legrand_identify],
16
+ toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_settingEnableLedIfOn, tz.legrand_identify],
17
17
  exposes: [
18
18
  e.switch(), e.action(['identify', 'on', 'off']),
19
- exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
20
- exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on'),
19
+ exposes.binary('led_in_dark', ea.ALL, 'ON', 'OFF').withDescription(`Enables the LED when the light is turned off, allowing to
20
+ see the switch in the dark`),
21
+ exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is turned on'),
21
22
  ],
22
23
  configure: async (device, coordinatorEndpoint, logger) => {
23
24
  const endpoint = device.getEndpoint(1);
@@ -31,7 +32,7 @@ module.exports = [
31
32
  description: 'Dimmer switch with neutral',
32
33
  extend: extend.light_onoff_brightness({noConfigure: true}),
33
34
  fromZigbee: [fz.brightness, fz.identify, fz.on_off, fz.lighting_ballast_configuration, fz.legrand_cluster_fc01],
34
- toZigbee: [tz.light_onoff_brightness, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn,
35
+ toZigbee: [tz.light_onoff_brightness, tz.legrand_settingEnableLedInDark, tz.legrand_settingEnableLedIfOn,
35
36
  tz.legrand_deviceMode, tz.legrand_identify, tz.ballast_config],
36
37
  exposes: [e.light_brightness(),
37
38
  exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
@@ -39,8 +40,9 @@ module.exports = [
39
40
  exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
40
41
  .withDescription('Specifies the maximum brightness value'),
41
42
  exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
42
- exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
43
- exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
43
+ exposes.binary('led_in_dark', ea.ALL, 'ON', 'OFF').withDescription(`Enables the LED when the light is turned off, allowing to
44
+ see the switch in the dark`),
45
+ exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is turned on')],
44
46
  configure: async (device, coordinatorEndpoint, logger) => {
45
47
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
46
48
  const endpoint = device.getEndpoint(1);
@@ -62,7 +64,7 @@ module.exports = [
62
64
  fromZigbee: [fz.identify, fz.ignore_basic_report, fz.ignore_zclversion_read, fz.bticino_4027C_binary_input_moving,
63
65
  fz.cover_position_tilt],
64
66
  toZigbee: [tz.bticino_4027C_cover_state, tz.bticino_4027C_cover_position, tz.legrand_identify,
65
- tz.legrand_settingAlwaysEnableLed],
67
+ tz.legrand_settingEnableLedInDark],
66
68
  exposes: [e.cover_position()],
67
69
  meta: {coverInverted: true},
68
70
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -95,7 +97,7 @@ module.exports = [
95
97
  vendor: 'BTicino',
96
98
  description: 'Power socket with power consumption monitoring',
97
99
  fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement],
98
- toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_identify],
100
+ toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_identify],
99
101
  exposes: [e.switch(), e.action(['identify']), e.power(), e.voltage(), e.current()],
100
102
  configure: async (device, coordinatorEndpoint, logger) => {
101
103
  const endpoint = device.getEndpoint(1);
@@ -106,7 +106,7 @@ module.exports = [
106
106
  fz.identify, fz.ignore_basic_report,
107
107
  // support binary report on moving state (supposed)
108
108
  fz.legrand_binary_input_moving, fz.cover_position_tilt],
109
- toZigbee: [tz.cover_state, tz.cover_position_tilt, tz.legrand_identify, tz.legrand_settingAlwaysEnableLed],
109
+ toZigbee: [tz.cover_state, tz.cover_position_tilt, tz.legrand_identify, tz.legrand_settingEnableLedInDark],
110
110
  configure: async (device, coordinatorEndpoint, logger) => {
111
111
  const endpoint = device.getEndpoint(1);
112
112
  await reporting.bind(endpoint, coordinatorEndpoint, ['genBinaryInput', 'closuresWindowCovering', 'genIdentify']);
@@ -175,7 +175,7 @@ module.exports = [
175
175
  description: 'Wired switch without neutral',
176
176
  extend: extend.light_onoff_brightness({noConfigure: true}),
177
177
  fromZigbee: [fz.brightness, fz.identify, fz.on_off, fz.lighting_ballast_configuration, fz.legrand_cluster_fc01],
178
- toZigbee: [tz.light_onoff_brightness, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn,
178
+ toZigbee: [tz.light_onoff_brightness, tz.legrand_settingEnableLedInDark, tz.legrand_settingEnableLedIfOn,
179
179
  tz.legrand_deviceMode, tz.legrand_identify, tz.ballast_config],
180
180
  exposes: [e.light_brightness(),
181
181
  exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
@@ -183,8 +183,9 @@ module.exports = [
183
183
  exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
184
184
  .withDescription('Specifies the maximum brightness value'),
185
185
  exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
186
- exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
187
- exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
186
+ exposes.binary('led_in_dark', ea.ALL, 'ON', 'OFF').withDescription(`Enables the LED when the light is turned off, allowing to
187
+ see the switch in the dark`),
188
+ exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is turned on')],
188
189
  configure: async (device, coordinatorEndpoint, logger) => {
189
190
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
190
191
  const endpoint = device.getEndpoint(1);
@@ -201,8 +202,9 @@ module.exports = [
201
202
  ota: ota.zigbeeOTA,
202
203
  description: 'Power socket with power consumption monitoring',
203
204
  fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement],
204
- toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_identify],
205
- exposes: [e.switch(), e.action(['identify']), e.power()],
205
+ toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_identify, tz.legrand_settingEnableLedIfOn],
206
+ exposes: [e.switch(), e.action(['identify']), e.power(),
207
+ exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the device is turned on')],
206
208
  configure: async (device, coordinatorEndpoint, logger) => {
207
209
  const endpoint = device.getEndpoint(1);
208
210
  await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff', 'haElectricalMeasurement']);
@@ -256,7 +258,7 @@ module.exports = [
256
258
  vendor: 'Legrand',
257
259
  description: 'DIN power consumption module',
258
260
  fromZigbee: [fz.identify, fz.metering, fz.electrical_measurement, fz.ignore_basic_report, fz.ignore_genOta, fz.legrand_power_alarm],
259
- toZigbee: [tz.legrand_settingAlwaysEnableLed, tz.legrand_identify, tz.electrical_measurement_power, tz.legrand_powerAlarm],
261
+ toZigbee: [tz.legrand_settingEnableLedInDark, tz.legrand_identify, tz.electrical_measurement_power, tz.legrand_powerAlarm],
260
262
  exposes: [e.power().withAccess(ea.STATE_GET), exposes.binary('power_alarm_active', ea.STATE, true, false),
261
263
  exposes.binary('power_alarm', ea.ALL, true, false).withDescription('Enable/disable the power alarm')],
262
264
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -344,11 +346,12 @@ module.exports = [
344
346
  vendor: 'Legrand',
345
347
  description: 'Double wired switch with neutral',
346
348
  fromZigbee: [fz.on_off, fz.legrand_binary_input_on_off, fz.legrand_cluster_fc01],
347
- toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn],
349
+ toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_settingEnableLedIfOn],
348
350
  exposes: [e.switch().withEndpoint('left'),
349
351
  e.switch().withEndpoint('right'),
350
- exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
351
- exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
352
+ exposes.binary('led_in_dark', ea.ALL, 'ON', 'OFF').withDescription(`Enables the LED when the light is turned off, allowing to
353
+ see the switch in the dark`),
354
+ exposes.binary('led_if_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is turned on')],
352
355
  meta: {multiEndpoint: true},
353
356
  configure: async (device, coordinatorEndpoint, logger) => {
354
357
  const endpointLeft = device.getEndpoint(2);
@@ -368,7 +371,7 @@ module.exports = [
368
371
  ota: ota.zigbeeOTA,
369
372
  description: 'Outlet with power consumption monitoring',
370
373
  fromZigbee: [fz.identify, fz.on_off, fz.electrical_measurement],
371
- toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_identify],
374
+ toZigbee: [tz.on_off, tz.legrand_settingEnableLedInDark, tz.legrand_identify],
372
375
  exposes: [e.switch(), e.action(['identify']), e.power()],
373
376
  configure: async (device, coordinatorEndpoint, logger) => {
374
377
  const endpoint = device.getEndpoint(1);
package/devices/lidl.js CHANGED
@@ -366,7 +366,6 @@ module.exports = [
366
366
  {modelID: 'TS011F', manufacturerName: '_TZ3000_wamqdr3f'}, // FR
367
367
  {modelID: 'TS011F', manufacturerName: '_TZ3000_00mk2xzy'}, // BS
368
368
  {modelID: 'TS011F', manufacturerName: '_TZ3000_upjrsxh1'}, // DK
369
- {modelID: 'TS011F', manufacturerName: '_TZ3000_ynmowqk2'}, // FR
370
369
  {manufacturerName: '_TZ3000_00mk2xzy'}, // BS
371
370
  ],
372
371
  model: 'HG06337',
@@ -379,6 +378,28 @@ module.exports = [
379
378
  await reporting.onOff(endpoint);
380
379
  },
381
380
  },
381
+ {
382
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_ynmowqk2'}],
383
+ model: 'HG08673-FR',
384
+ vendor: 'Lidl',
385
+ description: 'Silvercrest smart plug FR with power monitoring',
386
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
387
+ toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
388
+ exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE),
389
+ e.energy(), exposes.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore'])
390
+ .withDescription('Recover state after power outage')],
391
+ configure: async (device, coordinatorEndpoint, logger) => {
392
+ const endpoint = device.getEndpoint(1);
393
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
394
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
395
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {
396
+ acVoltageMultiplier: 1, acVoltageDivisor: 1, acCurrentMultiplier: 1, acCurrentDivisor: 1000, acPowerMultiplier: 1,
397
+ acPowerDivisor: 1,
398
+ });
399
+ },
400
+ options: [exposes.options.measurement_poll_interval()],
401
+ onEvent: tuya.onEventMeasurementPoll,
402
+ },
382
403
  {
383
404
  fingerprint: [{modelID: 'TS004F', manufacturerName: '_TZ3000_rco1yzb1'}],
384
405
  model: 'HG08164',
@@ -62,4 +62,21 @@ module.exports = [
62
62
  device.save();
63
63
  },
64
64
  },
65
+ {
66
+ fingerprint: [{modelID: 'TS0501', manufacturerName: '_TZ3210_lzqq3u4r'},
67
+ {modelID: 'TS0501', manufacturerName: '_TZ3210_4whigl8i'}],
68
+ model: 'SSWF01G',
69
+ description: 'AC fan controller',
70
+ vendor: 'Mercator',
71
+ fromZigbee: [fz.on_off, fz.fan],
72
+ toZigbee: [tz.fan_mode, tz.on_off],
73
+ exposes: [e.switch(), e.fan().withModes(['off', 'low', 'medium', 'high', 'on'])],
74
+ configure: async (device, coordinatorEndpoint, logger) => {
75
+ const endpoint = device.getEndpoint(1);
76
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genOta', 'genTime', 'genGroups', 'genScenes']);
77
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genIdentify', 'manuSpecificTuya', 'hvacFanCtrl']);
78
+ await reporting.onOff(endpoint);
79
+ await reporting.fanMode(endpoint);
80
+ },
81
+ },
65
82
  ];
@@ -41,7 +41,7 @@ module.exports = [
41
41
  },
42
42
  },
43
43
  {
44
- zigbeeModel: ['LIGHTIFY RT Tunable White'],
44
+ zigbeeModel: ['LIGHTIFY RT Tunable White', 'RT TW'],
45
45
  model: '73742',
46
46
  vendor: 'Sylvania',
47
47
  description: 'LIGHTIFY LED adjustable white RT 5/6',
package/devices/tuya.js CHANGED
@@ -20,7 +20,7 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
20
20
  '_TZ3000_rdtixbnu', '_TZ3000_typdpbpg', '_TZ3000_kx0pris5', '_TZ3000_amdymr7l', '_TZ3000_z1pnpsdo', '_TZ3000_ksw8qtmt',
21
21
  '_TZ3000_1h2x4akh', '_TZ3000_9vo5icau', '_TZ3000_cehuw1lw', '_TZ3000_ko6v90pg', '_TZ3000_f1bapcit', '_TZ3000_cjrngdr3',
22
22
  '_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
23
- '_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6'];
23
+ '_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx'];
24
24
 
25
25
  const tzLocal = {
26
26
  hpsz: {
@@ -819,6 +819,7 @@ module.exports = [
819
819
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_mzdax7ha'},
820
820
  {modelID: 'TS0505B', manufacturerName: '_TZB210_tmi0rihb'},
821
821
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_a4s41wm4'},
822
+ {modelID: 'TS0505B', manufacturerName: '_TZ3210_ijczzg9h'},
822
823
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_qxenlrin'},
823
824
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_iwbaamgh'},
824
825
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_klv2wul0'},
@@ -889,7 +890,8 @@ module.exports = [
889
890
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_wuheofsg'},
890
891
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_e5t9bfdv'},
891
892
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_19qb27da'},
892
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_4zinq6io'}],
893
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_4zinq6io'},
894
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_93gnbdgz'}],
893
895
  model: 'TS0501B',
894
896
  description: 'Zigbee light',
895
897
  vendor: 'TuYa',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.610",
3
+ "version": "14.0.611",
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.51"
41
+ "zigbee-herdsman": "^0.14.53"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",