zigbee-herdsman-converters 14.0.505 → 14.0.508
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 +47 -24
- package/converters/toZigbee.js +1 -1
- package/devices/kwikset.js +15 -0
- package/devices/legrand.js +1 -1
- package/devices/lidl.js +11 -0
- package/devices/miboxer.js +1 -1
- package/devices/m/303/274ller_licht.js +1 -1
- package/devices/neo.js +1 -1
- package/devices/nous.js +1 -1
- package/devices/nue_3a.js +1 -0
- package/devices/philips.js +7 -0
- package/devices/rtx.js +1 -1
- package/devices/tuya.js +40 -10
- 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
|
@@ -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: {
|
package/converters/toZigbee.js
CHANGED
|
@@ -6558,7 +6558,7 @@ const converters = {
|
|
|
6558
6558
|
{sendWhen: 'active'});
|
|
6559
6559
|
break;
|
|
6560
6560
|
case 'keep_time':
|
|
6561
|
-
await entity.write('ssIasZone', {61441: {value: {
|
|
6561
|
+
await entity.write('ssIasZone', {61441: {value: {30: 0, 60: 1, 120: 2}[value], type: 0x20}}, {sendWhen: 'active'});
|
|
6562
6562
|
break;
|
|
6563
6563
|
default: // Unknown key
|
|
6564
6564
|
throw new Error(`Unhandled key ${key}`);
|
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};
|
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/neo.js
CHANGED
|
@@ -35,7 +35,7 @@ module.exports = [
|
|
|
35
35
|
},
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t1blo2bj'}],
|
|
38
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t1blo2bj'}, {modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'}],
|
|
39
39
|
zigbeeModel: ['1blo2bj'],
|
|
40
40
|
model: 'NAS-AB02B2',
|
|
41
41
|
vendor: 'Neo',
|
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
|
@@ -1397,6 +1397,13 @@ module.exports = [
|
|
|
1397
1397
|
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1398
1398
|
ota: ota.zigbeeOTA,
|
|
1399
1399
|
},
|
|
1400
|
+
{
|
|
1401
|
+
zigbeeModel: ['929003054101'],
|
|
1402
|
+
model: '929003054101',
|
|
1403
|
+
vendor: 'Philips',
|
|
1404
|
+
description: 'Hue Wellner white ambiance E27 806lm with Bluetooth',
|
|
1405
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
1406
|
+
},
|
|
1400
1407
|
{
|
|
1401
1408
|
zigbeeModel: ['3261330P6'],
|
|
1402
1409
|
model: '3261330P6',
|
package/devices/rtx.js
CHANGED
|
@@ -6,7 +6,7 @@ const ea = exposes.access;
|
|
|
6
6
|
|
|
7
7
|
module.exports = [
|
|
8
8
|
{
|
|
9
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_akjefhj5'}],
|
|
9
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_akjefhj5'}, {modelID: 'TS0601', manufacturerName: '_TZE200_2wg5qrjy'}],
|
|
10
10
|
model: 'ZVG1',
|
|
11
11
|
vendor: 'RTX',
|
|
12
12
|
description: 'Zigbee smart water valve',
|
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',
|
|
@@ -365,7 +366,6 @@ module.exports = [
|
|
|
365
366
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_dl7cejts'},
|
|
366
367
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_qjqgmqxr'},
|
|
367
368
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_mmtwjmaq'},
|
|
368
|
-
{modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'},
|
|
369
369
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_zwvaj5wy'},
|
|
370
370
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_bsvqrxru'},
|
|
371
371
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
|
|
@@ -390,8 +390,7 @@ module.exports = [
|
|
|
390
390
|
},
|
|
391
391
|
},
|
|
392
392
|
{
|
|
393
|
-
fingerprint: [{modelID: 'TS0202', manufacturerName: '
|
|
394
|
-
{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
|
|
393
|
+
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'}],
|
|
395
394
|
model: 'ZM-35H-Q',
|
|
396
395
|
vendor: 'TuYa',
|
|
397
396
|
description: 'Motion Sensor',
|
|
@@ -399,7 +398,19 @@ module.exports = [
|
|
|
399
398
|
toZigbee: [tz.ZM35HQ_attr],
|
|
400
399
|
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery(),
|
|
401
400
|
exposes.enum('sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('PIR sensor sensitivity'),
|
|
402
|
-
exposes.enum('keep_time', ea.ALL, [
|
|
401
|
+
exposes.enum('keep_time', ea.ALL, [30, 60, 120]).withDescription('PIR keep time in seconds'),
|
|
402
|
+
],
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'}],
|
|
406
|
+
model: 'IH012-RT01',
|
|
407
|
+
vendor: 'TuYa',
|
|
408
|
+
description: 'Motion sensor',
|
|
409
|
+
fromZigbee: [fz.ias_occupancy_alarm_1, fz.ignore_basic_report, fz.ZM35HQ_attr],
|
|
410
|
+
toZigbee: [tz.ZM35HQ_attr],
|
|
411
|
+
exposes: [e.occupancy(), e.battery_low(), e.tamper(),
|
|
412
|
+
exposes.enum('sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('PIR sensor sensitivity'),
|
|
413
|
+
exposes.enum('keep_time', ea.ALL, [30, 60, 120]).withDescription('PIR keep time in seconds'),
|
|
403
414
|
],
|
|
404
415
|
},
|
|
405
416
|
{
|
|
@@ -1406,11 +1417,12 @@ module.exports = [
|
|
|
1406
1417
|
.withDescription('Plug LED indicator mode'), e.child_lock()],
|
|
1407
1418
|
},
|
|
1408
1419
|
{
|
|
1409
|
-
fingerprint: [
|
|
1410
|
-
|
|
1411
|
-
return
|
|
1412
|
-
|
|
1413
|
-
|
|
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
|
+
})),
|
|
1414
1426
|
model: 'TS011F_plug_3',
|
|
1415
1427
|
description: 'Smart plug (with power monitoring by polling)',
|
|
1416
1428
|
vendor: 'TuYa',
|
|
@@ -1935,6 +1947,22 @@ module.exports = [
|
|
|
1935
1947
|
e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
|
|
1936
1948
|
.withDescription('Recover state after power outage')],
|
|
1937
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
|
+
},
|
|
1938
1966
|
{
|
|
1939
1967
|
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nklqjk62'}],
|
|
1940
1968
|
model: 'PJ-ZGD01',
|
|
@@ -2250,7 +2278,9 @@ module.exports = [
|
|
|
2250
2278
|
toZigbee: [],
|
|
2251
2279
|
},
|
|
2252
2280
|
{
|
|
2253
|
-
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'}
|
|
2281
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
|
|
2282
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
|
|
2283
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
|
|
2254
2284
|
model: 'TS0601_smart_human_presense_sensor',
|
|
2255
2285
|
vendor: 'TuYa',
|
|
2256
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',
|