zigbee-herdsman-converters 14.0.677 → 14.0.679
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/fromZigbee.js +13 -6
- package/devices/bosch.js +203 -7
- package/devices/eglo.js +7 -0
- package/devices/innr.js +8 -0
- package/devices/ledvance.js +13 -0
- package/devices/owon.js +16 -0
- package/devices/philips.js +4 -1
- package/devices/schneider_electric.js +14 -7
- package/devices/third_reality.js +0 -1
- package/devices/tuya.js +11 -24
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -4213,12 +4213,19 @@ const converters = {
|
|
|
4213
4213
|
tuya_air_quality: {
|
|
4214
4214
|
cluster: 'manuSpecificTuya',
|
|
4215
4215
|
type: ['commandDataReport', 'commandDataResponse'],
|
|
4216
|
-
options:
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4216
|
+
options: (definition) => {
|
|
4217
|
+
const result = [
|
|
4218
|
+
exposes.options.precision('temperature'), exposes.options.calibration('temperature'),
|
|
4219
|
+
exposes.options.precision('humidity'), exposes.options.calibration('humidity'),
|
|
4220
|
+
exposes.options.precision('co2'), exposes.options.calibration('co2'),
|
|
4221
|
+
exposes.options.precision('voc'), exposes.options.calibration('voc'),
|
|
4222
|
+
exposes.options.precision('formaldehyd'), exposes.options.calibration('formaldehyd'),
|
|
4223
|
+
];
|
|
4224
|
+
if (definition.exposes.find((e) => e.name === 'pm25')) {
|
|
4225
|
+
result.push(exposes.options.precision('pm25'), exposes.options.calibration('pm25'));
|
|
4226
|
+
}
|
|
4227
|
+
return result;
|
|
4228
|
+
},
|
|
4222
4229
|
convert: (model, msg, publish, options, meta) => {
|
|
4223
4230
|
const dpValue = tuya.firstDpValue(msg, meta, 'tuya_air_quality');
|
|
4224
4231
|
const dp = dpValue.dp;
|
package/devices/bosch.js
CHANGED
|
@@ -1,10 +1,176 @@
|
|
|
1
|
+
const herdsman = require('zigbee-herdsman');
|
|
1
2
|
const exposes = require('../lib/exposes');
|
|
2
3
|
const fz = require('../converters/fromZigbee');
|
|
3
4
|
const tz = require('../converters/toZigbee');
|
|
4
5
|
const reporting = require('../lib/reporting');
|
|
6
|
+
const utils = require('../lib/utils');
|
|
5
7
|
const e = exposes.presets;
|
|
8
|
+
const ea = exposes.access;
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
// Radiator Thermostat II
|
|
11
|
+
const boschManufacturer = {manufacturerCode: 0x1209};
|
|
12
|
+
|
|
13
|
+
// Radiator Thermostat II
|
|
14
|
+
const operatingModes = {
|
|
15
|
+
'automatic': 0,
|
|
16
|
+
'manual': 1,
|
|
17
|
+
'pause': 5,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// Radiator Thermostat II
|
|
21
|
+
const stateOffOn = {
|
|
22
|
+
'OFF': 0,
|
|
23
|
+
'ON': 1,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Radiator Thermostat II
|
|
27
|
+
const displayOrientation = {
|
|
28
|
+
'normal': 0,
|
|
29
|
+
'flipped': 1,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Radiator Thermostat II
|
|
33
|
+
const tzLocal = {
|
|
34
|
+
bosch_thermostat: {
|
|
35
|
+
key: ['window_open', 'boost', 'system_mode'],
|
|
36
|
+
convertSet: async (entity, key, value, meta) => {
|
|
37
|
+
if (key === 'window_open') {
|
|
38
|
+
value = value.toUpperCase();
|
|
39
|
+
utils.validateValue(value, Object.keys(stateOffOn));
|
|
40
|
+
const index = stateOffOn[value];
|
|
41
|
+
await entity.write('hvacThermostat', {0x4042: {value: index, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
42
|
+
return {state: {window_open: value}};
|
|
43
|
+
}
|
|
44
|
+
if (key === 'boost') {
|
|
45
|
+
value = value.toUpperCase();
|
|
46
|
+
utils.validateValue(value, Object.keys(stateOffOn));
|
|
47
|
+
const index = stateOffOn[value];
|
|
48
|
+
await entity.write('hvacThermostat', {0x4043: {value: index, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
49
|
+
return {state: {boost: value}};
|
|
50
|
+
}
|
|
51
|
+
if (key === 'system_mode') {
|
|
52
|
+
// Map system_mode (Off/Auto/Heat) to Boschg operating mode
|
|
53
|
+
value = value.toLowerCase();
|
|
54
|
+
|
|
55
|
+
let opMode = operatingModes.manual; // OperatingMode 1 = Manual (Default)
|
|
56
|
+
|
|
57
|
+
if (value=='off') {
|
|
58
|
+
opMode = operatingModes.pause; // OperatingMode 5 = Pause
|
|
59
|
+
} else if (value == 'auto') {
|
|
60
|
+
opMode = operatingModes.automatic; // OperatingMOde 1 = Automatic
|
|
61
|
+
}
|
|
62
|
+
await entity.write('hvacThermostat', {0x4007: {value: opMode, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
63
|
+
return {state: {system_mode: value}};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
convertGet: async (entity, key, meta) => {
|
|
67
|
+
switch (key) {
|
|
68
|
+
case 'window_open':
|
|
69
|
+
await entity.read('hvacThermostat', [0x4042], boschManufacturer);
|
|
70
|
+
break;
|
|
71
|
+
case 'boost':
|
|
72
|
+
await entity.read('hvacThermostat', [0x4043], boschManufacturer);
|
|
73
|
+
break;
|
|
74
|
+
case 'system_mode':
|
|
75
|
+
await entity.read('hvacThermostat', [0x4007], boschManufacturer);
|
|
76
|
+
break;
|
|
77
|
+
|
|
78
|
+
default: // Unknown key
|
|
79
|
+
throw new Error(`Unhandled key toZigbee.bosch_thermostat.convertGet ${key}`);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
bosch_userInterface: {
|
|
84
|
+
key: ['display_orientation', 'display_ontime', 'display_brightness', 'child_lock'],
|
|
85
|
+
convertSet: async (entity, key, value, meta) => {
|
|
86
|
+
if (key === 'display_orientation') {
|
|
87
|
+
const index = displayOrientation[value];
|
|
88
|
+
await entity.write('hvacUserInterfaceCfg', {0x400b: {value: index, type: herdsman.Zcl.DataType.uint8}}, boschManufacturer);
|
|
89
|
+
return {state: {display_orientation: value}};
|
|
90
|
+
}
|
|
91
|
+
if (key === 'display_ontime') {
|
|
92
|
+
await entity.write('hvacUserInterfaceCfg', {0x403a: {value: value, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
93
|
+
return {state: {display_onTime: value}};
|
|
94
|
+
}
|
|
95
|
+
if (key === 'display_brightness') {
|
|
96
|
+
await entity.write('hvacUserInterfaceCfg', {0x403b: {value: value, type: herdsman.Zcl.DataType.enum8}}, boschManufacturer);
|
|
97
|
+
return {state: {display_brightness: value}};
|
|
98
|
+
}
|
|
99
|
+
if (key === 'child_lock') {
|
|
100
|
+
const keypadLockout = Number(value === 'LOCK');
|
|
101
|
+
await entity.write('hvacUserInterfaceCfg', {keypadLockout});
|
|
102
|
+
return {state: {child_lock: value}};
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
convertGet: async (entity, key, meta) => {
|
|
106
|
+
switch (key) {
|
|
107
|
+
case 'display_orientation':
|
|
108
|
+
await entity.read('hvacUserInterfaceCfg', [0x400b], boschManufacturer);
|
|
109
|
+
break;
|
|
110
|
+
case 'display_ontime':
|
|
111
|
+
await entity.read('hvacUserInterfaceCfg', [0x403a], boschManufacturer);
|
|
112
|
+
break;
|
|
113
|
+
case 'display_brightness':
|
|
114
|
+
await entity.read('hvacUserInterfaceCfg', [0x403b], boschManufacturer);
|
|
115
|
+
break;
|
|
116
|
+
case 'child_lock':
|
|
117
|
+
await entity.read('hvacUserInterfaceCfg', ['keypadLockout']);
|
|
118
|
+
break;
|
|
119
|
+
default: // Unknown key
|
|
120
|
+
throw new Error(`Unhandled key toZigbee.bosch_userInterface.convertGet ${key}`);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
// Radiator Thermostat II
|
|
128
|
+
const fzLocal = {
|
|
129
|
+
bosch_thermostat: {
|
|
130
|
+
cluster: 'hvacThermostat',
|
|
131
|
+
type: ['attributeReport', 'readResponse'],
|
|
132
|
+
convert: (model, msg, publish, options, meta) => {
|
|
133
|
+
const result = {};
|
|
134
|
+
const data = msg.data;
|
|
135
|
+
if (data.hasOwnProperty(0x4042)) {
|
|
136
|
+
result.window_open = (Object.keys(stateOffOn)[data[0x4042]]);
|
|
137
|
+
}
|
|
138
|
+
if (data.hasOwnProperty(0x4043)) {
|
|
139
|
+
result.boost = (Object.keys(stateOffOn)[data[0x4043]]);
|
|
140
|
+
}
|
|
141
|
+
if (data.hasOwnProperty(0x4007)) {
|
|
142
|
+
const opModes = {0: 'auto', 1: 'heat', 2: 'unknowm 2', 3: 'unknonw 3', 4: 'unknown 4', 5: 'off'};
|
|
143
|
+
result.system_mode = opModes[data[0x4007]];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return result;
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
bosch_userInterface: {
|
|
150
|
+
cluster: 'hvacUserInterfaceCfg',
|
|
151
|
+
type: ['attributeReport', 'readResponse'],
|
|
152
|
+
convert: (model, msg, publish, options, meta) => {
|
|
153
|
+
const result = {};
|
|
154
|
+
const data = msg.data;
|
|
155
|
+
if (data.hasOwnProperty(0x400b)) {
|
|
156
|
+
result.display_orientation = (Object.keys(displayOrientation)[data[0x400b]]);
|
|
157
|
+
}
|
|
158
|
+
if (data.hasOwnProperty(0x403a)) {
|
|
159
|
+
result.display_ontime = data[0x403a];
|
|
160
|
+
}
|
|
161
|
+
if (data.hasOwnProperty(0x403b)) {
|
|
162
|
+
result.display_brightness = data[0x403b];
|
|
163
|
+
}
|
|
164
|
+
if (data.hasOwnProperty('keypadLockout')) {
|
|
165
|
+
result.child_lock = (data['keypadLockout'] == 1 ? 'LOCK' : 'UNLOCK');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return result;
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const definition = [
|
|
8
174
|
{
|
|
9
175
|
zigbeeModel: ['RFDL-ZB', 'RFDL-ZB-EU', 'RFDL-ZB-H', 'RFDL-ZB-K', 'RFDL-ZB-CHI', 'RFDL-ZB-MS', 'RFDL-ZB-ES', 'RFPR-ZB',
|
|
10
176
|
'RFPR-ZB-EU', 'RFPR-ZB-CHI', 'RFPR-ZB-ES', 'RFPR-ZB-MS'],
|
|
@@ -44,21 +210,51 @@ module.exports = [
|
|
|
44
210
|
model: 'BTH-RA',
|
|
45
211
|
vendor: 'Bosch',
|
|
46
212
|
description: 'Radiator thermostat II',
|
|
47
|
-
fromZigbee: [fz.thermostat, fz.battery],
|
|
48
|
-
toZigbee: [
|
|
213
|
+
fromZigbee: [fz.thermostat, fz.battery, fzLocal.bosch_thermostat, fzLocal.bosch_userInterface],
|
|
214
|
+
toZigbee: [
|
|
215
|
+
tz.thermostat_occupied_heating_setpoint,
|
|
216
|
+
tz.thermostat_local_temperature_calibration,
|
|
217
|
+
tz.thermostat_local_temperature,
|
|
218
|
+
tz.thermostat_keypad_lockout,
|
|
219
|
+
tzLocal.bosch_thermostat,
|
|
220
|
+
tzLocal.bosch_userInterface],
|
|
49
221
|
exposes: [
|
|
50
|
-
e.battery(),
|
|
51
222
|
exposes.climate()
|
|
52
|
-
.withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
|
|
53
223
|
.withLocalTemperature()
|
|
54
|
-
.
|
|
224
|
+
.withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
|
|
225
|
+
.withLocalTemperatureCalibration(-12, 12, 0.5)
|
|
226
|
+
.withSystemMode(['off', 'heat', 'auto']),
|
|
227
|
+
exposes.binary('boost', ea.ALL, 'ON', 'OFF')
|
|
228
|
+
.withDescription('Activate Boost heating'),
|
|
229
|
+
exposes.binary('window_open', ea.ALL, 'ON', 'OFF')
|
|
230
|
+
.withDescription('Window open'),
|
|
231
|
+
exposes.enum('display_orientation', ea.ALL, Object.keys(displayOrientation))
|
|
232
|
+
.withDescription('Display orientation'),
|
|
233
|
+
exposes.numeric('display_ontime', ea.ALL)
|
|
234
|
+
.withValueMin(5)
|
|
235
|
+
.withValueMax(30)
|
|
236
|
+
.withDescription('Specifies the diplay On-time'),
|
|
237
|
+
exposes.numeric('display_brightness', ea.ALL)
|
|
238
|
+
.withValueMin(0)
|
|
239
|
+
.withValueMax(10)
|
|
240
|
+
.withDescription('Specifies the brightness value of the display'),
|
|
241
|
+
e.child_lock().setAccess('state', ea.ALL),
|
|
242
|
+
e.battery(),
|
|
55
243
|
],
|
|
56
244
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
57
245
|
const endpoint = device.getEndpoint(1);
|
|
58
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat']);
|
|
246
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat', 'hvacUserInterfaceCfg']);
|
|
59
247
|
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
60
248
|
await reporting.thermostatTemperature(endpoint);
|
|
61
249
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
250
|
+
|
|
251
|
+
await endpoint.read('hvacThermostat', ['localTemperatureCalibration']);
|
|
252
|
+
await endpoint.read('hvacThermostat', [0x4007, 0x4042, 0x4043], boschManufacturer);
|
|
253
|
+
|
|
254
|
+
await endpoint.read('hvacUserInterfaceCfg', ['keypadLockout']);
|
|
255
|
+
await endpoint.read('hvacUserInterfaceCfg', [0x400b, 0x403a, 0x403b], boschManufacturer);
|
|
62
256
|
},
|
|
63
257
|
},
|
|
64
258
|
];
|
|
259
|
+
|
|
260
|
+
module.exports = definition;
|
package/devices/eglo.js
CHANGED
|
@@ -15,4 +15,11 @@ module.exports = [
|
|
|
15
15
|
description: 'ST64 adjustable white filament bulb',
|
|
16
16
|
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
zigbeeModel: ['EGLO_ZM_RGB_TW'],
|
|
20
|
+
model: '900024',
|
|
21
|
+
vendor: 'EGLO',
|
|
22
|
+
description: 'SALITERAS-Z ceiling light',
|
|
23
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370]}),
|
|
24
|
+
},
|
|
18
25
|
];
|
package/devices/innr.js
CHANGED
|
@@ -621,6 +621,14 @@ module.exports = [
|
|
|
621
621
|
extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}),
|
|
622
622
|
meta: {applyRedFix: true, turnsOffAtBrightness1: true},
|
|
623
623
|
},
|
|
624
|
+
{
|
|
625
|
+
zigbeeModel: ['OFL 142 C'],
|
|
626
|
+
model: 'OFL 142 C',
|
|
627
|
+
vendor: 'Innr',
|
|
628
|
+
description: 'Outdoor flex light colour LED strip 4m, 1440lm, RGBW',
|
|
629
|
+
extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [100, 350], supportsHS: true}),
|
|
630
|
+
meta: {applyRedFix: true, turnsOffAtBrightness1: true},
|
|
631
|
+
},
|
|
624
632
|
{
|
|
625
633
|
zigbeeModel: ['OSL 130 C'],
|
|
626
634
|
model: 'OSL 130 C',
|
package/devices/ledvance.js
CHANGED
|
@@ -285,6 +285,19 @@ module.exports = [
|
|
|
285
285
|
await reporting.onOff(endpoint);
|
|
286
286
|
},
|
|
287
287
|
},
|
|
288
|
+
{
|
|
289
|
+
zigbeeModel: ['PLUG EU T'],
|
|
290
|
+
model: '4058075729261',
|
|
291
|
+
vendor: 'LEDVANCE',
|
|
292
|
+
description: 'SMART+ Plug EU',
|
|
293
|
+
extend: extend.switch(),
|
|
294
|
+
ota: ota.ledvance,
|
|
295
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
296
|
+
const endpoint = device.getEndpoint(1);
|
|
297
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
298
|
+
await reporting.onOff(endpoint);
|
|
299
|
+
},
|
|
300
|
+
},
|
|
288
301
|
{
|
|
289
302
|
zigbeeModel: ['PLUG OUTDOOR EU T'],
|
|
290
303
|
model: '4058075729308',
|
package/devices/owon.js
CHANGED
|
@@ -87,6 +87,22 @@ const fzLocal = {
|
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
module.exports = [
|
|
90
|
+
{
|
|
91
|
+
zigbeeModel: ['WSP402'],
|
|
92
|
+
model: 'WSP402',
|
|
93
|
+
vendor: 'OWON',
|
|
94
|
+
description: 'Smart plug',
|
|
95
|
+
fromZigbee: [fz.on_off, fz.metering],
|
|
96
|
+
toZigbee: [tz.on_off],
|
|
97
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
98
|
+
const endpoint = device.getEndpoint(1);
|
|
99
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
100
|
+
await reporting.onOff(endpoint);
|
|
101
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
102
|
+
await reporting.instantaneousDemand(endpoint, {min: 5, max: constants.repInterval.MINUTES_5, change: 2});
|
|
103
|
+
},
|
|
104
|
+
exposes: [e.switch(), e.power(), e.energy()],
|
|
105
|
+
},
|
|
90
106
|
{
|
|
91
107
|
zigbeeModel: ['WSP404'],
|
|
92
108
|
model: 'WSP404',
|
package/devices/philips.js
CHANGED
|
@@ -2904,7 +2904,7 @@ module.exports = [
|
|
|
2904
2904
|
zigbeeModel: ['4090131P9'],
|
|
2905
2905
|
model: '8718696174548',
|
|
2906
2906
|
vendor: 'Philips',
|
|
2907
|
-
description: '
|
|
2907
|
+
description: 'Hue Sana wall lamp with Bluetooth white',
|
|
2908
2908
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2909
2909
|
},
|
|
2910
2910
|
{
|
|
@@ -2933,6 +2933,9 @@ module.exports = [
|
|
|
2933
2933
|
model: '929003535301',
|
|
2934
2934
|
vendor: 'Philips',
|
|
2935
2935
|
description: 'Hue Festavia gradient light string 250',
|
|
2936
|
+
toZigbee: [tzLocal.gradient_scene, ...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).toZigbee],
|
|
2937
|
+
exposes: [exposes.enum('gradient_scene', ea.SET, Object.keys(gradientScenes)),
|
|
2938
|
+
...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).exposes],
|
|
2936
2939
|
extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
|
|
2937
2940
|
},
|
|
2938
2941
|
{
|
|
@@ -759,16 +759,23 @@ module.exports = [
|
|
|
759
759
|
zigbeeModel: ['FLS/SYSTEM-M/4'],
|
|
760
760
|
model: 'WDE002906',
|
|
761
761
|
vendor: 'Schneider Electric',
|
|
762
|
-
description: 'Wiser wireless switch 1-gang',
|
|
762
|
+
description: 'Wiser wireless switch 1-gang or 2-gang',
|
|
763
763
|
fromZigbee: [fz.command_on, fz.command_off, fz.command_move, fz.command_stop, fz.battery],
|
|
764
764
|
toZigbee: [],
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
765
|
+
endpoint: (device) => {
|
|
766
|
+
return {'right': 21, 'left': 22};
|
|
767
|
+
},
|
|
768
|
+
meta: {multiEndpoint: true},
|
|
769
|
+
exposes: [e.action(['on_left', 'off_left', 'on_right', 'off_right', 'brightness_move_up_left', 'brightness_stop_left',
|
|
770
|
+
'brightness_move_down_left', 'brightness_stop_left', 'brightness_move_up_right', 'brightness_stop_right',
|
|
771
|
+
'brightness_move_down_right', 'brightness_stop_right']), e.battery()],
|
|
768
772
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
await reporting.
|
|
773
|
+
// When in 2-gang operation mode, unit operates out of endpoints 21 and 22, otherwise just 21
|
|
774
|
+
const leftButtonsEndpoint = device.getEndpoint(21);
|
|
775
|
+
await reporting.bind(leftButtonsEndpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'genPowerCfg']);
|
|
776
|
+
const rightButtonsEndpoint = device.getEndpoint(22);
|
|
777
|
+
await reporting.bind(rightButtonsEndpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
778
|
+
await reporting.batteryPercentageRemaining(leftButtonsEndpoint);
|
|
772
779
|
},
|
|
773
780
|
},
|
|
774
781
|
{
|
package/devices/third_reality.js
CHANGED
|
@@ -60,7 +60,6 @@ module.exports = [
|
|
|
60
60
|
vendor: 'Third Reality',
|
|
61
61
|
description: 'Water sensor',
|
|
62
62
|
fromZigbee: [fz.ias_water_leak_alarm_1, fz.battery],
|
|
63
|
-
meta: {battery: {dontDividePercentage: true}},
|
|
64
63
|
toZigbee: [],
|
|
65
64
|
ota: ota.zigbeeOTA,
|
|
66
65
|
exposes: [e.water_leak(), e.battery_low(), e.battery(), e.battery_voltage()],
|
package/devices/tuya.js
CHANGED
|
@@ -15,15 +15,6 @@ const tzZosung = zosung.tzZosung;
|
|
|
15
15
|
const ez = zosung.presetsZosung;
|
|
16
16
|
const globalStore = require('../lib/store');
|
|
17
17
|
|
|
18
|
-
const TS011Fplugs = ['_TZ3000_5f43h46b', '_TZ3000_cphmq0q7', '_TZ3000_dpo1ysak', '_TZ3000_ew3ldmgx', '_TZ3000_gjnozsaz',
|
|
19
|
-
'_TZ3000_jvzvulen', '_TZ3000_mraovvmm', '_TZ3000_nfnmi125', '_TZ3000_ps3dmato', '_TZ3000_w0qqde0g', '_TZ3000_u5u4cakc',
|
|
20
|
-
'_TZ3000_rdtixbnu', '_TZ3000_typdpbpg', '_TZ3000_kx0pris5', '_TZ3000_amdymr7l', '_TZ3000_z1pnpsdo', '_TZ3000_ksw8qtmt',
|
|
21
|
-
'_TZ3000_1h2x4akh', '_TZ3000_9vo5icau', '_TZ3000_cehuw1lw', '_TZ3000_ko6v90pg', '_TZ3000_f1bapcit', '_TZ3000_cjrngdr3',
|
|
22
|
-
'_TZ3000_zloso4jk', '_TZ3000_r6buo8ba', '_TZ3000_iksasdbv', '_TZ3000_idrffznf', '_TZ3000_okaz9tjs', '_TZ3210_q7oryllx',
|
|
23
|
-
'_TZ3000_ss98ec5d', '_TZ3000_gznh2xla', '_TZ3000_hdopuwv6', '_TZ3000_gvn91tmx', '_TZ3000_dksbtrzs', '_TZ3000_b28wrpvx',
|
|
24
|
-
'_TZ3000_aim0ztek', '_TZ3000_mlswgkc3', '_TZ3000_7dndcnnb', '_TZ3000_waho4jtj', '_TZ3000_nmsciidq', '_TZ3000_jtgxgmks',
|
|
25
|
-
'_TZ3000_rdfh8cfs', '_TZ3000_yujkchbz', '_TZ3000_fgwhjm9j', '_TZ3000_qeuvnohg', '_TZ3000_rul9yxcc'];
|
|
26
|
-
|
|
27
18
|
const tzLocal = {
|
|
28
19
|
TS110E_options: {
|
|
29
20
|
key: ['min_brightness', 'max_brightness', 'light_type'],
|
|
@@ -1552,6 +1543,7 @@ module.exports = [
|
|
|
1552
1543
|
{modelID: 'TS0201', manufacturerName: '_TZ3000_fllyghyj'},
|
|
1553
1544
|
{modelID: 'TS0201', manufacturerName: '_TZ3000_yd2e749y'},
|
|
1554
1545
|
{modelID: 'TS0201', manufacturerName: '_TZ3000_6uzkisv2'},
|
|
1546
|
+
{modelID: 'TS0201', manufacturerName: '_TZ3000_xr3htd96'},
|
|
1555
1547
|
{modelID: 'TS0601', manufacturerName: '_TZE200_9yapgbuv'},
|
|
1556
1548
|
],
|
|
1557
1549
|
model: 'WSD500A',
|
|
@@ -1809,7 +1801,7 @@ module.exports = [
|
|
|
1809
1801
|
},
|
|
1810
1802
|
{
|
|
1811
1803
|
fingerprint: [{modelID: 'TS0002', manufacturerName: '_TZ3000_01gpyda5'}, {modelID: 'TS0002', manufacturerName: '_TZ3000_bvrlqyj7'},
|
|
1812
|
-
{modelID: 'TS0002', manufacturerName: '_TZ3000_7ed9cqgi'}],
|
|
1804
|
+
{modelID: 'TS0002', manufacturerName: '_TZ3000_7ed9cqgi'}, {modelID: 'TS0002', manufacturerName: '_TZ3000_zmy4lslw'}],
|
|
1813
1805
|
model: 'TS0002_switch_module',
|
|
1814
1806
|
vendor: 'TuYa',
|
|
1815
1807
|
description: '2 gang switch module',
|
|
@@ -2208,6 +2200,7 @@ module.exports = [
|
|
|
2208
2200
|
fingerprint: [
|
|
2209
2201
|
{modelID: 'TS0601', manufacturerName: '_TZE200_a4bpgplm'},
|
|
2210
2202
|
{modelID: 'TS0601', manufacturerName: '_TZE200_dv8abrrz'},
|
|
2203
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_z1tyspqw'},
|
|
2211
2204
|
],
|
|
2212
2205
|
model: 'TS0601_thermostat_1',
|
|
2213
2206
|
vendor: 'TuYa',
|
|
@@ -2292,9 +2285,9 @@ module.exports = [
|
|
|
2292
2285
|
extend: tuya.extend.switch({indicatorMode: true}),
|
|
2293
2286
|
},
|
|
2294
2287
|
{
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2288
|
+
// Note: below you will find the TS011F_plug_2 and TS011F_plug_3. These are identified via a fingerprint and
|
|
2289
|
+
// thus preferred above the TS011F_plug_1 if the fingerprint matches
|
|
2290
|
+
zigbeeModel: ['TS011F'],
|
|
2298
2291
|
model: 'TS011F_plug_1',
|
|
2299
2292
|
description: 'Smart plug (with power monitoring)',
|
|
2300
2293
|
vendor: 'TuYa',
|
|
@@ -2318,12 +2311,8 @@ module.exports = [
|
|
|
2318
2311
|
},
|
|
2319
2312
|
},
|
|
2320
2313
|
{
|
|
2321
|
-
fingerprint:
|
|
2322
|
-
|
|
2323
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_v1pdxuqq'},
|
|
2324
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_8a833yls'},
|
|
2325
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_bfn1w0mm'},
|
|
2326
|
-
{modelID: 'TS011F', manufacturerName: '_TZ3000_nzkqcvvs'}],
|
|
2314
|
+
fingerprint: tuya.fingerprint('TS011F',
|
|
2315
|
+
['_TZ3000_hyfvrar3', '_TZ3000_v1pdxuqq', '_TZ3000_8a833yls', '_TZ3000_bfn1w0mm', '_TZ3000_nzkqcvvs']),
|
|
2327
2316
|
model: 'TS011F_plug_2',
|
|
2328
2317
|
description: 'Smart plug (without power monitoring)',
|
|
2329
2318
|
vendor: 'TuYa',
|
|
@@ -2334,11 +2323,9 @@ module.exports = [
|
|
|
2334
2323
|
},
|
|
2335
2324
|
},
|
|
2336
2325
|
{
|
|
2337
|
-
fingerprint: [].
|
|
2338
|
-
return
|
|
2339
|
-
|
|
2340
|
-
});
|
|
2341
|
-
})),
|
|
2326
|
+
fingerprint: [160, 69, 68, 65, 64].map((applicationVersion) => {
|
|
2327
|
+
return {modelID: 'TS011F', applicationVersion};
|
|
2328
|
+
}),
|
|
2342
2329
|
model: 'TS011F_plug_3',
|
|
2343
2330
|
description: 'Smart plug (with power monitoring by polling)',
|
|
2344
2331
|
vendor: 'TuYa',
|