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.
- package/converters/toZigbee.js +5 -5
- package/devices/bticino.js +10 -8
- package/devices/legrand.js +14 -11
- package/devices/lidl.js +22 -1
- package/devices/mecrator.js +17 -0
- package/devices/sylvania.js +1 -1
- package/devices/tuya.js +4 -2
- package/package.json +2 -2
package/converters/toZigbee.js
CHANGED
|
@@ -4633,22 +4633,22 @@ const converters = {
|
|
|
4633
4633
|
}
|
|
4634
4634
|
},
|
|
4635
4635
|
},
|
|
4636
|
-
|
|
4636
|
+
legrand_settingEnableLedInDark: {
|
|
4637
4637
|
// connected power outlet is on attribute 2 and not 1
|
|
4638
|
-
key: ['
|
|
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: {'
|
|
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: ['
|
|
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: {'
|
|
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);
|
package/devices/bticino.js
CHANGED
|
@@ -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.
|
|
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('
|
|
20
|
-
|
|
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.
|
|
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('
|
|
43
|
-
|
|
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.
|
|
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.
|
|
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);
|
package/devices/legrand.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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('
|
|
187
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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('
|
|
351
|
-
|
|
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.
|
|
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',
|
package/devices/mecrator.js
CHANGED
|
@@ -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
|
];
|
package/devices/sylvania.js
CHANGED
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.
|
|
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.
|
|
41
|
+
"zigbee-herdsman": "^0.14.53"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"eslint": "*",
|