zigbee-herdsman-converters 14.0.615 → 14.0.618
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/devices/aurora_lighting.js +7 -0
- package/devices/ikea.js +1 -0
- package/devices/lonsonho.js +1 -1
- package/devices/owon.js +3 -2
- package/devices/philips.js +8 -1
- package/devices/sengled.js +15 -1
- package/devices/siglis.js +1 -1
- package/devices/sonoff.js +24 -0
- package/devices/tuya.js +123 -2
- package/devices/zemismart.js +9 -0
- package/package.json +1 -1
|
@@ -79,6 +79,13 @@ const batteryRotaryDimmer = (...endpointsIds) => ({
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
module.exports = [
|
|
82
|
+
{
|
|
83
|
+
zigbeeModel: ['RGBCXStrip50AU'],
|
|
84
|
+
model: 'AU-A1ZBSCRGBCX',
|
|
85
|
+
vendor: 'Aurora',
|
|
86
|
+
description: 'RGBW LED strip controller',
|
|
87
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [166, 400]}),
|
|
88
|
+
},
|
|
82
89
|
{
|
|
83
90
|
zigbeeModel: ['TWGU10Bulb50AU'],
|
|
84
91
|
model: 'AU-A1GUZBCX5',
|
package/devices/ikea.js
CHANGED
|
@@ -924,6 +924,7 @@ module.exports = [
|
|
|
924
924
|
|
|
925
925
|
await endpoint.read('manuSpecificIkeaAirPurifier', ['controlPanelLight', 'childLock', 'filterRunTime']);
|
|
926
926
|
},
|
|
927
|
+
ota: ota.tradfri,
|
|
927
928
|
},
|
|
928
929
|
{
|
|
929
930
|
zigbeeModel: ['TRADFRIbulbE14WScandleopal470lm', 'TRADFRIbulbE12WScandleopal450lm'],
|
package/devices/lonsonho.js
CHANGED
|
@@ -77,7 +77,7 @@ module.exports = [
|
|
|
77
77
|
description: 'Dual curtain/blind module',
|
|
78
78
|
fromZigbee: [fz.cover_position_tilt, fz.tuya_cover_options],
|
|
79
79
|
toZigbee: [tz.cover_state, tz.cover_position_tilt, tz.tuya_cover_calibration, tz.tuya_cover_reversal],
|
|
80
|
-
meta: {multiEndpoint: true},
|
|
80
|
+
meta: {multiEndpoint: true, coverInverted: true},
|
|
81
81
|
endpoint: (device) => {
|
|
82
82
|
return {'left': 1, 'right': 2};
|
|
83
83
|
},
|
package/devices/owon.js
CHANGED
|
@@ -240,10 +240,11 @@ module.exports = [
|
|
|
240
240
|
tz.thermostat_min_cool_setpoint_limit, tz.thermostat_max_cool_setpoint_limit,
|
|
241
241
|
tz.thermostat_local_temperature, tz.thermostat_running_state,
|
|
242
242
|
tz.thermostat_keypad_lockout],
|
|
243
|
-
exposes: [e.
|
|
243
|
+
exposes: [e.humidity(), e.occupancy(),
|
|
244
244
|
exposes.climate().withSystemMode(['off', 'heat', 'cool', 'fan_only']).withRunningState(['idle', 'heat', 'cool', 'fan_only'])
|
|
245
245
|
.withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
|
|
246
|
-
.withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5)
|
|
246
|
+
.withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5)
|
|
247
|
+
.withLocalTemperature(),
|
|
247
248
|
e.fan().withModes(['low', 'medium', 'high', 'on', 'auto']), e.keypad_lockout(),
|
|
248
249
|
e.max_heat_setpoint_limit(5, 30, 0.5), e.min_heat_setpoint_limit(5, 30, 0.5),
|
|
249
250
|
e.max_cool_setpoint_limit(7, 35, 0.5), e.min_cool_setpoint_limit(7, 35, 0.5)],
|
package/devices/philips.js
CHANGED
|
@@ -984,7 +984,14 @@ module.exports = [
|
|
|
984
984
|
zigbeeModel: ['929003053001'],
|
|
985
985
|
model: '929003053001',
|
|
986
986
|
vendor: 'Philips',
|
|
987
|
-
description: 'Hue Sana wall light',
|
|
987
|
+
description: 'Hue Sana wall light (white)',
|
|
988
|
+
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
zigbeeModel: ['929003052901'],
|
|
992
|
+
model: '929003052901',
|
|
993
|
+
vendor: 'Philips',
|
|
994
|
+
description: 'Hue Sana wall light (black)',
|
|
988
995
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
989
996
|
},
|
|
990
997
|
{
|
package/devices/sengled.js
CHANGED
|
@@ -61,8 +61,22 @@ module.exports = [
|
|
|
61
61
|
model: 'E12-N1E',
|
|
62
62
|
vendor: 'Sengled',
|
|
63
63
|
description: 'Smart LED multicolor (BR30)',
|
|
64
|
-
|
|
64
|
+
fromZigbee: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).fromZigbee.concat([fz.metering]),
|
|
65
|
+
toZigbee: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).toZigbee,
|
|
66
|
+
exposes: sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]}).exposes.concat([e.power(), e.energy()]),
|
|
65
67
|
ota: ota.zigbeeOTA,
|
|
68
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
69
|
+
await sengledExtend.light_onoff_brightness_colortemp_color({colorTempRange: [154, 500]})
|
|
70
|
+
.configure(device, coordinatorEndpoint, logger);
|
|
71
|
+
device.powerSource = 'Mains (single phase)';
|
|
72
|
+
device.save();
|
|
73
|
+
|
|
74
|
+
const endpoint = device.getEndpoint(1);
|
|
75
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
76
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
77
|
+
await reporting.currentSummDelivered(endpoint);
|
|
78
|
+
await reporting.instantaneousDemand(endpoint);
|
|
79
|
+
},
|
|
66
80
|
},
|
|
67
81
|
{
|
|
68
82
|
zigbeeModel: ['E1G-G8E'],
|
package/devices/siglis.js
CHANGED
package/devices/sonoff.js
CHANGED
|
@@ -5,6 +5,7 @@ const constants = require('../lib/constants');
|
|
|
5
5
|
const reporting = require('../lib/reporting');
|
|
6
6
|
const extend = require('../lib/extend');
|
|
7
7
|
const e = exposes.presets;
|
|
8
|
+
const ea = exposes.access;
|
|
8
9
|
const ota = require('../lib/ota');
|
|
9
10
|
|
|
10
11
|
const fzLocal = {
|
|
@@ -18,6 +19,16 @@ const fzLocal = {
|
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
21
|
},
|
|
22
|
+
router_config: {
|
|
23
|
+
cluster: 'genLevelCtrl',
|
|
24
|
+
type: ['attributeReport', 'readResponse'],
|
|
25
|
+
convert: (model, msg, publish, options, meta) => {
|
|
26
|
+
const result = {};
|
|
27
|
+
if (msg.data.hasOwnProperty('currentLevel')) {
|
|
28
|
+
result.light_indicator_level = msg.data['currentLevel'];
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
},
|
|
21
32
|
};
|
|
22
33
|
|
|
23
34
|
module.exports = [
|
|
@@ -189,4 +200,17 @@ module.exports = [
|
|
|
189
200
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
190
201
|
},
|
|
191
202
|
},
|
|
203
|
+
{
|
|
204
|
+
zigbeeModel: ['DONGLE-E_R'],
|
|
205
|
+
model: 'ZBDongle-E',
|
|
206
|
+
vendor: 'SONOFF',
|
|
207
|
+
description: 'Sonoff Zigbee 3.0 USB Dongle Plus (EFR32MG21) with router firmware',
|
|
208
|
+
fromZigbee: [fz.linkquality_from_basic, fzLocal.router_config],
|
|
209
|
+
toZigbee: [],
|
|
210
|
+
exposes: [exposes.numeric('light_indicator_level').withDescription('Brightness of the indicator light').withAccess(ea.STATE)],
|
|
211
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
212
|
+
device.powerSource = 'Mains (single phase)';
|
|
213
|
+
device.save();
|
|
214
|
+
},
|
|
215
|
+
},
|
|
192
216
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -23,6 +23,18 @@ const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak',
|
|
|
23
23
|
'_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx'];
|
|
24
24
|
|
|
25
25
|
const tzLocal = {
|
|
26
|
+
SA12IZL_silence_siren: {
|
|
27
|
+
key: ['silence_siren'],
|
|
28
|
+
convertSet: async (entity, key, value, meta) => {
|
|
29
|
+
await tuya.sendDataPointBool(entity, 16, value);
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
SA12IZL_alarm: {
|
|
33
|
+
key: ['alarm'],
|
|
34
|
+
convertSet: async (entity, key, value, meta) => {
|
|
35
|
+
await tuya.sendDataPointEnum(entity, 20, {true: 0, false: 1}[value]);
|
|
36
|
+
},
|
|
37
|
+
},
|
|
26
38
|
hpsz: {
|
|
27
39
|
key: ['led_state'],
|
|
28
40
|
convertSet: async (entity, key, value, meta) => {
|
|
@@ -277,6 +289,59 @@ const tzLocal = {
|
|
|
277
289
|
};
|
|
278
290
|
|
|
279
291
|
const fzLocal = {
|
|
292
|
+
SA12IZL: {
|
|
293
|
+
cluster: 'manuSpecificTuya',
|
|
294
|
+
type: ['commandDataResponse', 'commandDataReport'],
|
|
295
|
+
convert: (model, msg, publish, options, meta) => {
|
|
296
|
+
const result = {};
|
|
297
|
+
for (const dpValue of msg.data.dpValues) {
|
|
298
|
+
const dp = dpValue.dp;
|
|
299
|
+
const value = tuya.getDataValue(dpValue);
|
|
300
|
+
switch (dp) {
|
|
301
|
+
case tuya.dataPoints.state:
|
|
302
|
+
result.smoke = value === 0;
|
|
303
|
+
break;
|
|
304
|
+
case 15:
|
|
305
|
+
result.battery = value;
|
|
306
|
+
break;
|
|
307
|
+
case 16:
|
|
308
|
+
result.silence_siren = value;
|
|
309
|
+
break;
|
|
310
|
+
case 20: {
|
|
311
|
+
const alarm = {0: true, 1: false};
|
|
312
|
+
result.alarm = alarm[value];
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
default:
|
|
316
|
+
meta.logger.warn(`zigbee-herdsman-converters:SA12IZL: NOT RECOGNIZED DP #${
|
|
317
|
+
dp} with data ${JSON.stringify(dpValue)}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return result;
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
tuya_dinrail_switch2: {
|
|
324
|
+
cluster: 'manuSpecificTuya',
|
|
325
|
+
type: ['commandDataReport', 'commandDataResponse', 'commandActiveStatusReport'],
|
|
326
|
+
convert: (model, msg, publish, options, meta) => {
|
|
327
|
+
const dpValue = tuya.firstDpValue(msg, meta, 'tuya_dinrail_switch2');
|
|
328
|
+
const dp = dpValue.dp;
|
|
329
|
+
const value = tuya.getDataValue(dpValue);
|
|
330
|
+
const state = value ? 'ON' : 'OFF';
|
|
331
|
+
|
|
332
|
+
switch (dp) {
|
|
333
|
+
case tuya.dataPoints.state: // DPID that we added to common
|
|
334
|
+
return {state: state};
|
|
335
|
+
case tuya.dataPoints.dinrailPowerMeterTotalEnergy2:
|
|
336
|
+
return {energy: value/100};
|
|
337
|
+
case tuya.dataPoints.dinrailPowerMeterPower2:
|
|
338
|
+
return {power: value};
|
|
339
|
+
default:
|
|
340
|
+
meta.logger.warn(`zigbee-herdsman-converters:TuyaDinRailSwitch: NOT RECOGNIZED DP ` +
|
|
341
|
+
`#${dp} with data ${JSON.stringify(dpValue)}`);
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
},
|
|
280
345
|
hpsz: {
|
|
281
346
|
cluster: 'manuSpecificTuya',
|
|
282
347
|
type: ['commandDataResponse', 'commandDataReport'],
|
|
@@ -918,7 +983,12 @@ module.exports = [
|
|
|
918
983
|
// Requires alarm_1_with_timeout https://github.com/Koenkk/zigbee2mqtt/issues/2818#issuecomment-776119586
|
|
919
984
|
fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report],
|
|
920
985
|
toZigbee: [],
|
|
921
|
-
exposes: [e.occupancy(), e.battery_low(), e.linkquality()],
|
|
986
|
+
exposes: [e.occupancy(), e.battery_low(), e.linkquality(), e.battery(), e.battery_voltage()],
|
|
987
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
988
|
+
const endpoint = device.getEndpoint(1);
|
|
989
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
|
|
990
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
991
|
+
},
|
|
922
992
|
},
|
|
923
993
|
{
|
|
924
994
|
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_dr6sduka'},
|
|
@@ -987,6 +1057,7 @@ module.exports = [
|
|
|
987
1057
|
fingerprint: [{modelID: 'TS0207', manufacturerName: '_TZ3000_m0vaazab'},
|
|
988
1058
|
{modelID: 'TS0207', manufacturerName: '_TZ3000_ufttklsz'},
|
|
989
1059
|
{modelID: 'TS0207', manufacturerName: '_TZ3000_nkkl7uzv'},
|
|
1060
|
+
{modelID: 'TS0207', manufacturerName: '_TZ3000_gszjt2xx'},
|
|
990
1061
|
{modelID: 'TS0207', manufacturerName: '_TZ3000_5k5vh43t'}],
|
|
991
1062
|
model: 'TS0207_repeater',
|
|
992
1063
|
vendor: 'TuYa',
|
|
@@ -1530,6 +1601,27 @@ module.exports = [
|
|
|
1530
1601
|
},
|
|
1531
1602
|
exposes: [e.battery(), e.water_leak()],
|
|
1532
1603
|
},
|
|
1604
|
+
{
|
|
1605
|
+
fingerprint: [{modelID: 'TS0001', manufacturerName: '_TZ3000_xkap8wtb'}],
|
|
1606
|
+
model: 'TS0001_power',
|
|
1607
|
+
description: 'Switch with power monitoring',
|
|
1608
|
+
vendor: 'TuYa',
|
|
1609
|
+
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report],
|
|
1610
|
+
toZigbee: [tz.on_off],
|
|
1611
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1612
|
+
const endpoint = device.getEndpoint(1);
|
|
1613
|
+
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
1614
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
|
|
1615
|
+
await reporting.rmsVoltage(endpoint, {change: 5});
|
|
1616
|
+
await reporting.rmsCurrent(endpoint, {change: 50});
|
|
1617
|
+
await reporting.activePower(endpoint, {change: 10});
|
|
1618
|
+
await reporting.currentSummDelivered(endpoint);
|
|
1619
|
+
endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
|
|
1620
|
+
endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
|
|
1621
|
+
device.save();
|
|
1622
|
+
},
|
|
1623
|
+
exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE)],
|
|
1624
|
+
},
|
|
1533
1625
|
{
|
|
1534
1626
|
zigbeeModel: ['TS0001'],
|
|
1535
1627
|
model: 'TS0001',
|
|
@@ -2089,6 +2181,21 @@ module.exports = [
|
|
|
2089
2181
|
toZigbee: [],
|
|
2090
2182
|
exposes: [e.smoke(), e.battery()],
|
|
2091
2183
|
},
|
|
2184
|
+
{
|
|
2185
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}],
|
|
2186
|
+
model: 'SA12IZL',
|
|
2187
|
+
vendor: 'TuYa',
|
|
2188
|
+
description: 'Smart smoke alarm',
|
|
2189
|
+
meta: {timeout: 30000, disableDefaultResponse: true},
|
|
2190
|
+
fromZigbee: [fzLocal.SA12IZL],
|
|
2191
|
+
toZigbee: [tzLocal.SA12IZL_silence_siren, tzLocal.SA12IZL_alarm],
|
|
2192
|
+
exposes: [e.battery(),
|
|
2193
|
+
exposes.binary('smoke', ea.STATE, true, false).withDescription('Smoke alarm status'),
|
|
2194
|
+
exposes.enum('battery_level', ea.STATE, ['low', 'middle', 'high']).withDescription('Battery level state'),
|
|
2195
|
+
exposes.binary('alarm', ea.STATE_SET, true, false).withDescription('Enable the alarm'),
|
|
2196
|
+
exposes.binary('silence_siren', ea.STATE_SET, true, false).withDescription('Silence the siren')],
|
|
2197
|
+
onEvent: tuya.onEventsetTime,
|
|
2198
|
+
},
|
|
2092
2199
|
{
|
|
2093
2200
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_byzdayie'},
|
|
2094
2201
|
{modelID: 'TS0601', manufacturerName: '_TZE200_fsb6zw01'},
|
|
@@ -2104,6 +2211,19 @@ module.exports = [
|
|
|
2104
2211
|
},
|
|
2105
2212
|
exposes: [e.switch().setAccess('state', ea.STATE_SET), e.voltage(), e.power(), e.current(), e.energy()],
|
|
2106
2213
|
},
|
|
2214
|
+
{
|
|
2215
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bkkmqmyo'}],
|
|
2216
|
+
model: 'DDS238-2',
|
|
2217
|
+
vendor: 'TuYa',
|
|
2218
|
+
description: 'Zigbee smart energy meter',
|
|
2219
|
+
fromZigbee: [fzLocal.tuya_dinrail_switch2],
|
|
2220
|
+
toZigbee: [tz.tuya_switch_state],
|
|
2221
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
2222
|
+
const endpoint = device.getEndpoint(1);
|
|
2223
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
|
|
2224
|
+
},
|
|
2225
|
+
exposes: [e.switch().setAccess('state', ea.STATE_SET), e.energy(), e.power()],
|
|
2226
|
+
},
|
|
2107
2227
|
{
|
|
2108
2228
|
fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_xfs39dbf'}],
|
|
2109
2229
|
model: 'TS1101_dimmer_module_1ch',
|
|
@@ -3028,7 +3148,8 @@ module.exports = [
|
|
|
3028
3148
|
],
|
|
3029
3149
|
},
|
|
3030
3150
|
{
|
|
3031
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'}
|
|
3151
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_qoy0ekbd'},
|
|
3152
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_znbl8dj5'}],
|
|
3032
3153
|
model: 'CX-0726',
|
|
3033
3154
|
vendor: 'TuYa',
|
|
3034
3155
|
description: 'Temperature & humidity LCD sensor',
|
package/devices/zemismart.js
CHANGED
|
@@ -201,6 +201,15 @@ module.exports = [
|
|
|
201
201
|
toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options, tz.tuya_data_point_test],
|
|
202
202
|
exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
|
|
203
203
|
},
|
|
204
|
+
{
|
|
205
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_7eue9vhc'}],
|
|
206
|
+
model: 'ZM25RX-08/30',
|
|
207
|
+
vendor: 'Zemismart',
|
|
208
|
+
description: 'Tubular motor',
|
|
209
|
+
fromZigbee: [fz.tuya_cover, fz.ignore_basic_report],
|
|
210
|
+
toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options, tz.tuya_data_point_test],
|
|
211
|
+
exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
|
|
212
|
+
},
|
|
204
213
|
{
|
|
205
214
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_1n2kyphz'}],
|
|
206
215
|
model: 'TB26-4',
|