zigbee-herdsman-converters 14.0.506 → 14.0.509
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/README.md +1 -1
- package/converters/fromZigbee.js +50 -27
- package/converters/toZigbee.js +4 -4
- package/devices/bticino.js +2 -2
- package/devices/keen_home.js +2 -1
- package/devices/kwikset.js +15 -0
- package/devices/legrand.js +3 -3
- package/devices/lidl.js +11 -0
- package/devices/miboxer.js +1 -1
- package/devices/m/303/274ller_licht.js +1 -1
- package/devices/namron.js +6 -6
- package/devices/nous.js +1 -1
- package/devices/nue_3a.js +1 -0
- package/devices/philips.js +14 -0
- package/devices/tuya.js +25 -7
- package/devices/xiaomi.js +3 -2
- package/devices/zemismart.js +24 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Collection of device converters to be used with zigbee-herdsman.
|
|
5
5
|
|
|
6
6
|
## Contributing
|
|
7
|
-
See [Zigbee2MQTT how to support new devices](
|
|
7
|
+
See [Zigbee2MQTT how to support new devices](https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html).
|
|
8
8
|
|
|
9
9
|
## Submitting a pull request
|
|
10
10
|
If you'd like to submit a pull request, you should run the following commands to ensure your changes will pass the tests:
|
package/converters/fromZigbee.js
CHANGED
|
@@ -1693,10 +1693,10 @@ const converters = {
|
|
|
1693
1693
|
result.temperature_display = lookup[data[0x1008]];
|
|
1694
1694
|
}
|
|
1695
1695
|
if (data.hasOwnProperty(0x1009)) { // WindowOpenCheck
|
|
1696
|
-
result.window_open_check = data[0x1009];
|
|
1696
|
+
result.window_open_check = data[0x1009] / 2;
|
|
1697
1697
|
}
|
|
1698
1698
|
if (data.hasOwnProperty(0x100A)) { // Hysterersis
|
|
1699
|
-
result.hysterersis = data[0x100A];
|
|
1699
|
+
result.hysterersis = precisionRound(data[0x100A], 2) / 10;
|
|
1700
1700
|
}
|
|
1701
1701
|
if (data.hasOwnProperty(0x100B)) { // DisplayAutoOffEnable
|
|
1702
1702
|
const lookup = {0: 'enable', 1: 'disable'};
|
|
@@ -1909,34 +1909,57 @@ const converters = {
|
|
|
1909
1909
|
},
|
|
1910
1910
|
nous_lcd_temperature_humidity_sensor: {
|
|
1911
1911
|
cluster: 'manuSpecificTuya',
|
|
1912
|
-
type: ['commandDataResponse'],
|
|
1912
|
+
type: ['commandDataResponse', 'commandDataReport'],
|
|
1913
1913
|
options: [exposes.options.precision('temperature'), exposes.options.calibration('temperature'),
|
|
1914
1914
|
exposes.options.precision('humidity'), exposes.options.calibration('humidity')],
|
|
1915
1915
|
convert: (model, msg, publish, options, meta) => {
|
|
1916
|
-
const
|
|
1917
|
-
const
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1916
|
+
const result = {};
|
|
1917
|
+
for (const dpValue of msg.data.dpValues) {
|
|
1918
|
+
const dp = dpValue.dp;
|
|
1919
|
+
const value = tuya.getDataValue(dpValue);
|
|
1920
|
+
switch (dp) {
|
|
1921
|
+
case tuya.dataPoints.nousTemperature:
|
|
1922
|
+
result.temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1923
|
+
break;
|
|
1924
|
+
case tuya.dataPoints.nousHumidity:
|
|
1925
|
+
result.humidity = calibrateAndPrecisionRoundOptions(value, options, 'humidity');
|
|
1926
|
+
break;
|
|
1927
|
+
case tuya.dataPoints.nousBattery:
|
|
1928
|
+
result.battery = value;
|
|
1929
|
+
break;
|
|
1930
|
+
case tuya.dataPoints.nousTempUnitConvert:
|
|
1931
|
+
result.temperature_unit_convert = {0x00: 'celsius', 0x01: 'fahrenheit'}[value];
|
|
1932
|
+
break;
|
|
1933
|
+
case tuya.dataPoints.nousMaxTemp:
|
|
1934
|
+
result.max_temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1935
|
+
break;
|
|
1936
|
+
case tuya.dataPoints.nousMinTemp:
|
|
1937
|
+
result.min_temperature = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1938
|
+
break;
|
|
1939
|
+
case tuya.dataPoints.nousMaxHumi:
|
|
1940
|
+
result.max_humidity = calibrateAndPrecisionRoundOptions(value / 10, options, 'humidity');
|
|
1941
|
+
break;
|
|
1942
|
+
case tuya.dataPoints.nousMinHumi:
|
|
1943
|
+
result.min_humidity = calibrateAndPrecisionRoundOptions(value / 10, options, 'humidity');
|
|
1944
|
+
break;
|
|
1945
|
+
case tuya.dataPoints.nousTempAlarm:
|
|
1946
|
+
result.temperature_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
|
|
1947
|
+
break;
|
|
1948
|
+
case tuya.dataPoints.nousHumiAlarm:
|
|
1949
|
+
result.humidity_alarm = {0x00: 'canceled', 0x01: 'lower_alarm', 0x02: 'upper_alarm'}[value];
|
|
1950
|
+
break;
|
|
1951
|
+
case tuya.dataPoints.nousTempSensitivity:
|
|
1952
|
+
result.temperature_sensitivity = calibrateAndPrecisionRoundOptions(value / 10, options, 'temperature');
|
|
1953
|
+
break;
|
|
1954
|
+
case tuya.dataPoints.nousReportInterval:
|
|
1955
|
+
result.report_interval = value;
|
|
1956
|
+
break;
|
|
1957
|
+
default:
|
|
1958
|
+
meta.logger.warn(`zigbee-herdsman-converters:nous_lcd_temperature_humidity_sensor: NOT RECOGNIZED ` +
|
|
1959
|
+
`DP #${dp} with data ${JSON.stringify(dpValue)}`);
|
|
1960
|
+
}
|
|
1939
1961
|
}
|
|
1962
|
+
return result;
|
|
1940
1963
|
},
|
|
1941
1964
|
},
|
|
1942
1965
|
tuya_illuminance_temperature_humidity_sensor: {
|
|
@@ -5385,7 +5408,7 @@ const converters = {
|
|
|
5385
5408
|
payload.device_mode = 'unknown';
|
|
5386
5409
|
}
|
|
5387
5410
|
}
|
|
5388
|
-
if (msg.data.hasOwnProperty('1')) payload.
|
|
5411
|
+
if (msg.data.hasOwnProperty('1')) payload.led_when_off = msg.data['1'] === 0x00 ? 'OFF' : 'ON';
|
|
5389
5412
|
if (msg.data.hasOwnProperty('2')) payload.led_when_on = msg.data['2'] === 0x00 ? 'OFF' : 'ON';
|
|
5390
5413
|
return payload;
|
|
5391
5414
|
},
|
package/converters/toZigbee.js
CHANGED
|
@@ -3062,10 +3062,10 @@ const converters = {
|
|
|
3062
3062
|
const payload = {0x1008: {value: lookup[value], type: herdsman.Zcl.DataType.enum8}};
|
|
3063
3063
|
await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
|
|
3064
3064
|
} else if (key==='window_open_check') {
|
|
3065
|
-
const payload = {0x1009: {value:
|
|
3065
|
+
const payload = {0x1009: {value: value * 2, type: 0x20}};
|
|
3066
3066
|
await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
|
|
3067
3067
|
} else if (key==='hysterersis') {
|
|
3068
|
-
const payload = {0x100A: {value:
|
|
3068
|
+
const payload = {0x100A: {value: value* 10, type: 0x20}};
|
|
3069
3069
|
await entity.write('hvacThermostat', payload, manufacturerOptions.sunricher);
|
|
3070
3070
|
} else if (key==='display_auto_off_enabled') {
|
|
3071
3071
|
const lookup = {'enable': 0, 'disabled': 1};
|
|
@@ -4839,13 +4839,13 @@ const converters = {
|
|
|
4839
4839
|
},
|
|
4840
4840
|
legrand_settingAlwaysEnableLed: {
|
|
4841
4841
|
// connected power outlet is on attribute 2 and not 1
|
|
4842
|
-
key: ['
|
|
4842
|
+
key: ['led_when_off'],
|
|
4843
4843
|
convertSet: async (entity, key, value, meta) => {
|
|
4844
4844
|
// enable or disable the LED (blue) when permitJoin=false (LED off)
|
|
4845
4845
|
const enableLedIfOn = value === 'ON' || (value === 'OFF' ? false : !!value);
|
|
4846
4846
|
const payload = {1: {value: enableLedIfOn, type: 16}};
|
|
4847
4847
|
await entity.write('manuSpecificLegrandDevices', payload, manufacturerOptions.legrand);
|
|
4848
|
-
return {state: {'
|
|
4848
|
+
return {state: {'led_when_off': value}};
|
|
4849
4849
|
},
|
|
4850
4850
|
convertGet: async (entity, key, meta) => {
|
|
4851
4851
|
await entity.read('manuSpecificLegrandDevices', [0x0001], manufacturerOptions.legrand);
|
package/devices/bticino.js
CHANGED
|
@@ -16,7 +16,7 @@ module.exports = [
|
|
|
16
16
|
toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn, tz.legrand_identify],
|
|
17
17
|
exposes: [
|
|
18
18
|
e.switch(), e.action(['identify', 'on', 'off']),
|
|
19
|
-
exposes.binary('
|
|
19
|
+
exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
|
|
20
20
|
exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on'),
|
|
21
21
|
],
|
|
22
22
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -39,7 +39,7 @@ module.exports = [
|
|
|
39
39
|
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
40
40
|
.withDescription('Specifies the maximum brightness value'),
|
|
41
41
|
exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
|
|
42
|
-
exposes.binary('
|
|
42
|
+
exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is off'),
|
|
43
43
|
exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
|
|
44
44
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
45
45
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
package/devices/keen_home.js
CHANGED
|
@@ -41,7 +41,8 @@ module.exports = [
|
|
|
41
41
|
exposes: [e.cover_position().setAccess('state', ea.ALL), e.temperature(), e.battery(), e.pressure()],
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
zigbeeModel: ['SV02-410-MP-1.3', 'SV02-412-MP-1.3', 'SV02-610-MP-1.3', 'SV02-612-MP-1.
|
|
44
|
+
zigbeeModel: ['SV02-410-MP-1.3', 'SV02-412-MP-1.3', 'SV02-610-MP-1.3', 'SV02-612-MP-1.2', 'SV02-612-MP-1.3', 'SV02-410-MP-1.0',
|
|
45
|
+
'SV02-410-MP-1.2'],
|
|
45
46
|
model: 'SV02',
|
|
46
47
|
vendor: 'Keen Home',
|
|
47
48
|
description: 'Smart vent',
|
package/devices/kwikset.js
CHANGED
|
@@ -20,6 +20,21 @@ module.exports = [
|
|
|
20
20
|
},
|
|
21
21
|
exposes: [e.lock(), e.battery(), e.lock_action(), e.lock_action_source_name(), e.lock_action_source_user()],
|
|
22
22
|
},
|
|
23
|
+
{
|
|
24
|
+
zigbeeModel: ['SMARTCODE_CONVERT_GEN1_W3'],
|
|
25
|
+
model: '99140-139',
|
|
26
|
+
vendor: 'Kwikset',
|
|
27
|
+
description: 'Home connect smart lock conversion kit',
|
|
28
|
+
fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery],
|
|
29
|
+
toZigbee: [tz.lock],
|
|
30
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
31
|
+
const endpoint = device.getEndpoint(2);
|
|
32
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
33
|
+
await reporting.lockState(endpoint);
|
|
34
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
35
|
+
},
|
|
36
|
+
exposes: [e.lock(), e.battery(), e.lock_action(), e.lock_action_source_name(), e.lock_action_source_user()],
|
|
37
|
+
},
|
|
23
38
|
{
|
|
24
39
|
zigbeeModel: ['SMARTCODE_DEADBOLT_10_L'],
|
|
25
40
|
model: '99140-002',
|
package/devices/legrand.js
CHANGED
|
@@ -146,7 +146,7 @@ module.exports = [
|
|
|
146
146
|
const endpoint = device.getEndpoint(1);
|
|
147
147
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'genOnOff', 'genLevelCtrl']);
|
|
148
148
|
const endpoint2 = device.getEndpoint(2);
|
|
149
|
-
await reporting.bind(endpoint2, coordinatorEndpoint, ['
|
|
149
|
+
await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
150
150
|
},
|
|
151
151
|
endpoint: (device) => {
|
|
152
152
|
return {left: 1, right: 2};
|
|
@@ -182,7 +182,7 @@ module.exports = [
|
|
|
182
182
|
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
183
183
|
.withDescription('Specifies the maximum brightness value'),
|
|
184
184
|
exposes.binary('device_mode', ea.ALL, 'dimmer_on', 'dimmer_off').withDescription('Allow the device to change brightness'),
|
|
185
|
-
exposes.binary('
|
|
185
|
+
exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
|
|
186
186
|
exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
|
|
187
187
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
188
188
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
@@ -328,7 +328,7 @@ module.exports = [
|
|
|
328
328
|
toZigbee: [tz.on_off, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn],
|
|
329
329
|
exposes: [e.switch().withEndpoint('left'),
|
|
330
330
|
e.switch().withEndpoint('right'),
|
|
331
|
-
exposes.binary('
|
|
331
|
+
exposes.binary('led_when_off', ea.ALL, 'ON', 'OFF').withDescription('Enable the LED when the light is off'),
|
|
332
332
|
exposes.binary('led_when_on', ea.ALL, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
|
|
333
333
|
meta: {multiEndpoint: true},
|
|
334
334
|
configure: async (device, coordinatorEndpoint, logger) => {
|
package/devices/lidl.js
CHANGED
|
@@ -550,6 +550,17 @@ module.exports = [
|
|
|
550
550
|
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
551
551
|
},
|
|
552
552
|
},
|
|
553
|
+
{
|
|
554
|
+
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_hxtfthp5'}],
|
|
555
|
+
model: '14158804L',
|
|
556
|
+
vendor: 'Lidl',
|
|
557
|
+
description: 'Livarno Home LED desk lamp RGBW',
|
|
558
|
+
...extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
|
|
559
|
+
meta: {applyRedFix: true, enhancedHue: false},
|
|
560
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
561
|
+
device.getEndpoint(1).saveClusterAttributeKeyValue('lightingColorCtrl', {colorCapabilities: 29});
|
|
562
|
+
},
|
|
563
|
+
},
|
|
553
564
|
{
|
|
554
565
|
fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_quqaeew6'}],
|
|
555
566
|
model: 'HG07834A',
|
package/devices/miboxer.js
CHANGED
|
@@ -49,7 +49,7 @@ module.exports = [
|
|
|
49
49
|
extend: extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
|
-
fingerprint: [{manufacturerName: '_TZ3000_xwh1e22x'}],
|
|
52
|
+
fingerprint: [{modelID: 'TS1002', manufacturerName: '_TZ3000_xwh1e22x'}],
|
|
53
53
|
model: 'FUT089Z',
|
|
54
54
|
vendor: 'MiBoxer',
|
|
55
55
|
description: 'RGB+CCT Remote',
|
|
@@ -110,7 +110,7 @@ module.exports = [
|
|
|
110
110
|
{
|
|
111
111
|
fingerprint: [{manufacturerName: '_TZ3000_bdbb0fon'}],
|
|
112
112
|
zigbeeModel: ['ZBT-Remote-ALL-RGBW', 'TS1001'],
|
|
113
|
-
model: 'MLI-404011',
|
|
113
|
+
model: 'MLI-404011/MLI-404049',
|
|
114
114
|
description: 'Tint remote control',
|
|
115
115
|
vendor: 'Müller Licht',
|
|
116
116
|
fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.legacy.tint404011_brightness_updown_click,
|
package/devices/namron.js
CHANGED
|
@@ -276,7 +276,7 @@ module.exports = [
|
|
|
276
276
|
exposes.climate()
|
|
277
277
|
.withSetpoint('occupied_heating_setpoint', 0, 40, 0.1)
|
|
278
278
|
.withLocalTemperature()
|
|
279
|
-
.withLocalTemperatureCalibration(-
|
|
279
|
+
.withLocalTemperatureCalibration(-3, 3, 0.1)
|
|
280
280
|
.withSystemMode(['off', 'auto', 'heat'])
|
|
281
281
|
.withRunningState(['idle', 'heat']),
|
|
282
282
|
exposes.binary('away_mode', ea.ALL, 'ON', 'OFF')
|
|
@@ -308,16 +308,16 @@ module.exports = [
|
|
|
308
308
|
.withDescription('The temperature on the display. Default: Room Temperature.'),
|
|
309
309
|
exposes.numeric('window_open_check', ea.ALL)
|
|
310
310
|
.withUnit('°C')
|
|
311
|
-
.withValueMin(
|
|
312
|
-
.withDescription('The threshold to detect window open, between
|
|
311
|
+
.withValueMin(1.5).withValueMax(4).withValueStep(0.5)
|
|
312
|
+
.withDescription('The threshold to detect window open, between 1.5 and 4 in 0.5 °C. Default: 0 (disabled).'),
|
|
313
313
|
exposes.numeric('hysterersis', ea.ALL)
|
|
314
314
|
.withUnit('°C')
|
|
315
|
-
.withValueMin(5).withValueMax(
|
|
316
|
-
.withDescription('Hysteresis setting, between 5 and
|
|
315
|
+
.withValueMin(0.5).withValueMax(2).withValueStep(0.1)
|
|
316
|
+
.withDescription('Hysteresis setting, between 0.5 and 2 in 0.1 °C. Default: 0.5.'),
|
|
317
317
|
exposes.enum('display_auto_off_enabled', ea.ALL, ['enable', 'disabled']),
|
|
318
318
|
exposes.numeric('alarm_airtemp_overvalue', ea.ALL)
|
|
319
319
|
.withUnit('°C')
|
|
320
|
-
.withValueMin(20).withValueMax(60)
|
|
320
|
+
.withValueMin(20).withValueMax(60)
|
|
321
321
|
.withDescription('Room temperature alarm threshold, between 20 and 60 in °C. 0 means disabled. Default: 45.'),
|
|
322
322
|
],
|
|
323
323
|
configure: async (device, coordinatorEndpoint, logger) => {
|
package/devices/nous.js
CHANGED
|
@@ -17,7 +17,7 @@ module.exports = [
|
|
|
17
17
|
exposes: [e.temperature(), e.humidity(), e.battery()],
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}],
|
|
20
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_lve3dvpy'}, {modelID: 'TS0601', manufacturerName: '_TZE200_c7emyjom'}],
|
|
21
21
|
model: 'SZ-T04',
|
|
22
22
|
vendor: 'Nous',
|
|
23
23
|
description: 'Temperature and humidity sensor with clock',
|
package/devices/nue_3a.js
CHANGED
|
@@ -142,6 +142,7 @@ module.exports = [
|
|
|
142
142
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
143
143
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
144
144
|
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
145
|
+
await reporting.brightness(device.getEndpoint(1));
|
|
145
146
|
},
|
|
146
147
|
},
|
|
147
148
|
{
|
package/devices/philips.js
CHANGED
|
@@ -2258,6 +2258,20 @@ module.exports = [
|
|
|
2258
2258
|
},
|
|
2259
2259
|
ota: ota.zigbeeOTA,
|
|
2260
2260
|
},
|
|
2261
|
+
{
|
|
2262
|
+
zigbeeModel: ['LOM011'],
|
|
2263
|
+
model: '8719514342361',
|
|
2264
|
+
vendor: 'Philips',
|
|
2265
|
+
description: 'Hue smart plug - AU',
|
|
2266
|
+
extend: extend.switch(),
|
|
2267
|
+
toZigbee: [tz.on_off].concat([tz.hue_power_on_behavior, tz.hue_power_on_error]),
|
|
2268
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
2269
|
+
const endpoint = device.getEndpoint(11);
|
|
2270
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
2271
|
+
await reporting.onOff(endpoint);
|
|
2272
|
+
},
|
|
2273
|
+
ota: ota.zigbeeOTA,
|
|
2274
|
+
},
|
|
2261
2275
|
{
|
|
2262
2276
|
zigbeeModel: ['LOM006'],
|
|
2263
2277
|
model: '9290024426',
|
package/devices/tuya.js
CHANGED
|
@@ -211,6 +211,7 @@ module.exports = [
|
|
|
211
211
|
{manufacturerName: '_TZ3000_q6a3tepg'}, {modelID: 'TS000F', manufacturerName: '_TZ3000_m9af2l6g'},
|
|
212
212
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_npzfdcof'},
|
|
213
213
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_5ng23zjs'},
|
|
214
|
+
{modelID: 'TS0001', manufacturerName: '_TZ3000_rmjr4ufz'},
|
|
214
215
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_v7gnj3ad'},
|
|
215
216
|
{modelID: 'TS0001', manufacturerName: '_TZ3000_mx3vgyea'}],
|
|
216
217
|
model: 'WHD02',
|
|
@@ -370,7 +371,6 @@ module.exports = [
|
|
|
370
371
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
|
|
371
372
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_hqbdru35'},
|
|
372
373
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_otvn3lne'},
|
|
373
|
-
{modelID: 'TS0202', manufacturerName: '_TZ3000_rmjr4ufz'},
|
|
374
374
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_tiwq83wk'},
|
|
375
375
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_ykwcwxmz'},
|
|
376
376
|
{modelID: 'WHD02', manufacturerName: '_TZ3000_hktqahrq'}],
|
|
@@ -1417,11 +1417,12 @@ module.exports = [
|
|
|
1417
1417
|
.withDescription('Plug LED indicator mode'), e.child_lock()],
|
|
1418
1418
|
},
|
|
1419
1419
|
{
|
|
1420
|
-
fingerprint: [
|
|
1421
|
-
|
|
1422
|
-
return
|
|
1423
|
-
|
|
1424
|
-
|
|
1420
|
+
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_gjnozsaz', applicationVersion: 74}]
|
|
1421
|
+
.concat(...TS011Fplugs.map((manufacturerName) => {
|
|
1422
|
+
return [69, 68, 65, 64].map((applicationVersion) => {
|
|
1423
|
+
return {modelID: 'TS011F', manufacturerName, applicationVersion};
|
|
1424
|
+
});
|
|
1425
|
+
})),
|
|
1425
1426
|
model: 'TS011F_plug_3',
|
|
1426
1427
|
description: 'Smart plug (with power monitoring by polling)',
|
|
1427
1428
|
vendor: 'TuYa',
|
|
@@ -1946,6 +1947,22 @@ module.exports = [
|
|
|
1946
1947
|
e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
|
|
1947
1948
|
.withDescription('Recover state after power outage')],
|
|
1948
1949
|
},
|
|
1950
|
+
{
|
|
1951
|
+
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_7issjl2q'}],
|
|
1952
|
+
model: 'ATMS1601Z',
|
|
1953
|
+
description: 'Din smart relay (without power monitoring)',
|
|
1954
|
+
vendor: 'TuYa',
|
|
1955
|
+
fromZigbee: [fz.on_off, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
|
|
1956
|
+
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
|
|
1957
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1958
|
+
const endpoint = device.getEndpoint(1);
|
|
1959
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
1960
|
+
device.save();
|
|
1961
|
+
},
|
|
1962
|
+
exposes: [e.switch(),
|
|
1963
|
+
exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
|
|
1964
|
+
.withDescription('Recover state after power outage')],
|
|
1965
|
+
},
|
|
1949
1966
|
{
|
|
1950
1967
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nklqjk62'}],
|
|
1951
1968
|
model: 'PJ-ZGD01',
|
|
@@ -2262,7 +2279,8 @@ module.exports = [
|
|
|
2262
2279
|
},
|
|
2263
2280
|
{
|
|
2264
2281
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
|
|
2265
|
-
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'}
|
|
2282
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
|
|
2283
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
|
|
2266
2284
|
model: 'TS0601_smart_human_presense_sensor',
|
|
2267
2285
|
vendor: 'TuYa',
|
|
2268
2286
|
description: 'Smart Human presence sensor',
|
package/devices/xiaomi.js
CHANGED
|
@@ -922,7 +922,8 @@ module.exports = [
|
|
|
922
922
|
description: 'Aqara P1 human body movement and illuminance sensor',
|
|
923
923
|
fromZigbee: [fz.aqara_occupancy_illuminance, fz.aqara_opple, fz.battery],
|
|
924
924
|
toZigbee: [tz.aqara_detection_interval, tz.aqara_motion_sensitivity],
|
|
925
|
-
exposes: [e.occupancy(), e.
|
|
925
|
+
exposes: [e.occupancy(), e.illuminance_lux().withProperty('illuminance'),
|
|
926
|
+
e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
|
|
926
927
|
exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
|
|
927
928
|
exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
|
|
928
929
|
.withDescription('Time interval for detecting actions'), e.temperature(), e.battery()],
|
|
@@ -1360,7 +1361,7 @@ module.exports = [
|
|
|
1360
1361
|
await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
|
|
1361
1362
|
}
|
|
1362
1363
|
},
|
|
1363
|
-
exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET),
|
|
1364
|
+
exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.temperature(),
|
|
1364
1365
|
exposes.binary('charging_status', ea.STATE_GET, true, false)
|
|
1365
1366
|
.withDescription('The current charging status.'),
|
|
1366
1367
|
exposes.enum('motor_state', ea.STATE, ['declining', 'rising', 'pause', 'blocked'])
|
package/devices/zemismart.js
CHANGED
|
@@ -75,6 +75,30 @@ module.exports = [
|
|
|
75
75
|
await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
|
|
76
76
|
},
|
|
77
77
|
},
|
|
78
|
+
{
|
|
79
|
+
fingerprint: [{modelID: 'TS0003', manufacturerName: '_TZ3000_vjhcenzo'}],
|
|
80
|
+
model: 'TB25',
|
|
81
|
+
vendor: 'Zemismart',
|
|
82
|
+
description: 'Smart light switch and socket - 2 gang with neutral wire',
|
|
83
|
+
toZigbee: extend.switch().toZigbee.concat([tz.moes_power_on_behavior]),
|
|
84
|
+
fromZigbee: extend.switch().fromZigbee.concat([fz.moes_power_on_behavior]),
|
|
85
|
+
exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('center'), e.switch().withEndpoint('right'),
|
|
86
|
+
exposes.enum('power_on_behavior', ea.ALL, ['on', 'off', 'previous']),
|
|
87
|
+
],
|
|
88
|
+
endpoint: () => {
|
|
89
|
+
return {'left': 1, 'center': 2, 'right': 3};
|
|
90
|
+
},
|
|
91
|
+
meta: {multiEndpoint: true},
|
|
92
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
93
|
+
await device.getEndpoint(1).read('genBasic',
|
|
94
|
+
['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
95
|
+
for (const endpointID of [1, 2, 3]) {
|
|
96
|
+
const endpoint = device.getEndpoint(endpointID);
|
|
97
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
98
|
+
await reporting.onOff(endpoint);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
},
|
|
78
102
|
{
|
|
79
103
|
zigbeeModel: ['LXN56-SS27LX1.1'],
|
|
80
104
|
model: 'LXN56-SS27LX1.1',
|