zigbee-herdsman-converters 14.0.306 → 14.0.310
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 -0
- package/converters/fromZigbee.js +7 -12
- package/converters/toZigbee.js +13 -2
- package/devices/bitron.js +1 -2
- package/devices/candeo.js +1 -1
- package/devices/danfoss.js +4 -4
- package/devices/envilar.js +18 -0
- package/devices/eurotronic.js +5 -5
- package/devices/girier.js +20 -0
- package/devices/heiman.js +13 -13
- package/devices/hive.js +38 -38
- package/devices/ikea.js +4 -3
- package/devices/moes.js +3 -1
- package/devices/philips.js +27 -0
- package/devices/popp.js +4 -4
- package/devices/schneider_electric.js +8 -9
- package/devices/sengled.js +7 -0
- package/devices/sinope.js +15 -15
- package/devices/stelpro.js +43 -28
- package/devices/tuya.js +16 -7
- package/devices/viessmann.js +4 -4
- package/devices/xiaomi.js +27 -16
- package/lib/exposes.js +2 -2
- package/lib/legacy.js +2 -2
- package/npm-shrinkwrap.json +1065 -1163
- package/package.json +2 -2
package/devices/sengled.js
CHANGED
|
@@ -216,4 +216,11 @@ module.exports = [
|
|
|
216
216
|
description: 'Vintage LED edison bulb (ST19)',
|
|
217
217
|
extend: extend.light_onoff_brightness(),
|
|
218
218
|
},
|
|
219
|
+
{
|
|
220
|
+
zigbeeModel: ['E1F-N9G'],
|
|
221
|
+
model: 'E1F-N9G',
|
|
222
|
+
vendor: 'Sengled',
|
|
223
|
+
description: 'Smart LED filament candle (E12)',
|
|
224
|
+
extend: extend.light_onoff_brightness(),
|
|
225
|
+
},
|
|
219
226
|
];
|
package/devices/sinope.js
CHANGED
|
@@ -29,12 +29,12 @@ module.exports = [
|
|
|
29
29
|
'haElectricalMeasurement', 'seMetering', 'manuSpecificSinope'];
|
|
30
30
|
|
|
31
31
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
32
|
-
await reporting.thermostatTemperature(endpoint
|
|
33
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
34
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
32
|
+
await reporting.thermostatTemperature(endpoint);
|
|
33
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
34
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
35
35
|
|
|
36
36
|
try {
|
|
37
|
-
await reporting.thermostatSystemMode(endpoint
|
|
37
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
38
38
|
await reporting.thermostatRunningState(endpoint);
|
|
39
39
|
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
40
40
|
await reporting.currentSummDelivered(endpoint, {min: 10, max: 303, change: [1, 1]});
|
|
@@ -71,9 +71,9 @@ module.exports = [
|
|
|
71
71
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'msTemperatureMeasurement',
|
|
72
72
|
'haElectricalMeasurement', 'seMetering', 'manuSpecificSinope'];
|
|
73
73
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
74
|
-
await reporting.thermostatTemperature(endpoint
|
|
75
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
76
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
74
|
+
await reporting.thermostatTemperature(endpoint);
|
|
75
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
76
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
77
77
|
|
|
78
78
|
try {
|
|
79
79
|
await reporting.thermostatRunningState(endpoint);
|
|
@@ -97,7 +97,7 @@ module.exports = [
|
|
|
97
97
|
} catch (error) {/* Do nothing*/}
|
|
98
98
|
|
|
99
99
|
try {
|
|
100
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
100
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
101
101
|
} catch (error) {
|
|
102
102
|
// Not all support this: https://github.com/Koenkk/zigbee2mqtt/issues/3760
|
|
103
103
|
}
|
|
@@ -130,16 +130,16 @@ module.exports = [
|
|
|
130
130
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg',
|
|
131
131
|
'msTemperatureMeasurement', 'manuSpecificSinope'];
|
|
132
132
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
133
|
-
await reporting.thermostatTemperature(endpoint
|
|
134
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
135
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
133
|
+
await reporting.thermostatTemperature(endpoint);
|
|
134
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
135
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
136
136
|
|
|
137
137
|
try {
|
|
138
138
|
await reporting.thermostatRunningState(endpoint);
|
|
139
139
|
} catch (error) {/* Not all support this */}
|
|
140
140
|
|
|
141
141
|
try {
|
|
142
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
142
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
143
143
|
} catch (error) {
|
|
144
144
|
// Not all support this: https://github.com/Koenkk/zigbee2mqtt/issues/3760
|
|
145
145
|
}
|
|
@@ -156,14 +156,14 @@ module.exports = [
|
|
|
156
156
|
model: 'TH1400ZB',
|
|
157
157
|
vendor: 'Sinopé',
|
|
158
158
|
description: 'Zigbee low volt thermostat',
|
|
159
|
-
fromZigbee: [fz.legacy.sinope_thermostat_att_report],
|
|
159
|
+
fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.sinope_thermostat_state],
|
|
160
160
|
toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_temperature_display_mode,
|
|
161
161
|
tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
|
|
162
162
|
tz.sinope_thermostat_backlight_autodim_param, tz.sinope_thermostat_time, tz.sinope_thermostat_enable_outdoor_temperature,
|
|
163
163
|
tz.sinope_thermostat_outdoor_temperature],
|
|
164
164
|
exposes: [exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
|
|
165
|
-
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']), exposes.enum(
|
|
166
|
-
ea.SET, ['on demand', 'sensing']).withDescription('Control backlight dimming behavior')],
|
|
165
|
+
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat']).withPiHeatingDemand(), exposes.enum(
|
|
166
|
+
'backlight_auto_dim', ea.SET, ['on demand', 'sensing']).withDescription('Control backlight dimming behavior')],
|
|
167
167
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
168
168
|
const endpoint = device.getEndpoint(1);
|
|
169
169
|
const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'msTemperatureMeasurement'];
|
package/devices/stelpro.js
CHANGED
|
@@ -3,6 +3,7 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
|
|
|
3
3
|
const tz = require('../converters/toZigbee');
|
|
4
4
|
const reporting = require('../lib/reporting');
|
|
5
5
|
const e = exposes.presets;
|
|
6
|
+
const constants = require('../lib/constants');
|
|
6
7
|
|
|
7
8
|
module.exports = [
|
|
8
9
|
{
|
|
@@ -23,14 +24,18 @@ module.exports = [
|
|
|
23
24
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
24
25
|
|
|
25
26
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Ki
|
|
26
|
-
await reporting.thermostatTemperature(endpoint
|
|
27
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
28
|
-
await reporting.thermostatSystemMode(endpoint
|
|
29
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
30
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
27
|
+
await reporting.thermostatTemperature(endpoint);
|
|
28
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
29
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
30
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
31
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
31
32
|
// cluster 0x0201 attribute 0x401c
|
|
32
|
-
await endpoint.configureReporting('hvacThermostat', [{
|
|
33
|
-
|
|
33
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
34
|
+
attribute: 'StelproSystemMode',
|
|
35
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
36
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
37
|
+
reportableChange: 1,
|
|
38
|
+
}]);
|
|
34
39
|
},
|
|
35
40
|
},
|
|
36
41
|
{
|
|
@@ -51,14 +56,18 @@ module.exports = [
|
|
|
51
56
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
52
57
|
|
|
53
58
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Ki
|
|
54
|
-
await reporting.thermostatTemperature(endpoint
|
|
55
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
56
|
-
await reporting.thermostatSystemMode(endpoint
|
|
57
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
58
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
59
|
+
await reporting.thermostatTemperature(endpoint);
|
|
60
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
61
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
62
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
63
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
59
64
|
// cluster 0x0201 attribute 0x401c
|
|
60
|
-
await endpoint.configureReporting('hvacThermostat', [{
|
|
61
|
-
|
|
65
|
+
await endpoint.configureReporting('hvacThermostat', [{
|
|
66
|
+
attribute: 'StelproSystemMode',
|
|
67
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
68
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
69
|
+
reportableChange: 1,
|
|
70
|
+
}]);
|
|
62
71
|
},
|
|
63
72
|
},
|
|
64
73
|
{
|
|
@@ -80,15 +89,18 @@ module.exports = [
|
|
|
80
89
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
81
90
|
|
|
82
91
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Maestro
|
|
83
|
-
await reporting.thermostatTemperature(endpoint
|
|
84
|
-
await reporting.humidity(endpoint
|
|
85
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
86
|
-
await reporting.thermostatSystemMode(endpoint
|
|
87
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
88
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
92
|
+
await reporting.thermostatTemperature(endpoint);
|
|
93
|
+
await reporting.humidity(endpoint);
|
|
94
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
95
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
96
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
97
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
89
98
|
// cluster 0x0201 attribute 0x401c
|
|
90
99
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
91
|
-
attribute: 'StelproSystemMode',
|
|
100
|
+
attribute: 'StelproSystemMode',
|
|
101
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
102
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
103
|
+
reportableChange: 1}]);
|
|
92
104
|
},
|
|
93
105
|
},
|
|
94
106
|
{
|
|
@@ -110,15 +122,18 @@ module.exports = [
|
|
|
110
122
|
await reporting.bind(endpoint, coordinatorEndpoint, binds);
|
|
111
123
|
|
|
112
124
|
// Those exact parameters (min/max/change) are required for reporting to work with Stelpro Maestro
|
|
113
|
-
await reporting.thermostatTemperature(endpoint
|
|
114
|
-
await reporting.humidity(endpoint
|
|
115
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
116
|
-
await reporting.thermostatSystemMode(endpoint
|
|
117
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
118
|
-
await reporting.thermostatKeypadLockMode(endpoint
|
|
125
|
+
await reporting.thermostatTemperature(endpoint);
|
|
126
|
+
await reporting.humidity(endpoint);
|
|
127
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
128
|
+
await reporting.thermostatSystemMode(endpoint);
|
|
129
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
130
|
+
await reporting.thermostatKeypadLockMode(endpoint);
|
|
119
131
|
// cluster 0x0201 attribute 0x401c
|
|
120
132
|
await endpoint.configureReporting('hvacThermostat', [{
|
|
121
|
-
attribute: 'StelproSystemMode',
|
|
133
|
+
attribute: 'StelproSystemMode',
|
|
134
|
+
minimumReportInterval: constants.repInterval.MINUTE,
|
|
135
|
+
maximumReportInterval: constants.repInterval.HOUR,
|
|
136
|
+
reportableChange: 1}]);
|
|
122
137
|
},
|
|
123
138
|
},
|
|
124
139
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -749,14 +749,23 @@ module.exports = [
|
|
|
749
749
|
},
|
|
750
750
|
{
|
|
751
751
|
zigbeeModel: ['kud7u2l'],
|
|
752
|
-
fingerprint: [
|
|
753
|
-
{modelID: 'TS0601', manufacturerName: '
|
|
754
|
-
{modelID: 'TS0601', manufacturerName: '
|
|
752
|
+
fingerprint: [
|
|
753
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_ckud7u2l'},
|
|
754
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_ywdxldoj'},
|
|
755
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_cwnjrr72'},
|
|
756
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_chyvmhay'},
|
|
757
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_pvvbommb'},
|
|
758
|
+
{modelID: 'TS0601', manufacturerName: '_TZE200_2atgpdho'}, // HY367
|
|
759
|
+
],
|
|
755
760
|
model: 'TS0601_thermostat',
|
|
756
761
|
vendor: 'TuYa',
|
|
757
762
|
description: 'Radiator valve with thermostat',
|
|
758
|
-
whiteLabel: [
|
|
759
|
-
{vendor: '
|
|
763
|
+
whiteLabel: [
|
|
764
|
+
{vendor: 'Moes', model: 'HY368'},
|
|
765
|
+
{vendor: 'Moes', model: 'HY369RT'},
|
|
766
|
+
{vendor: 'SHOJZJ', model: '378RT'},
|
|
767
|
+
{vendor: 'Silvercrest', model: 'TVR01'},
|
|
768
|
+
],
|
|
760
769
|
meta: {tuyaThermostatPreset: tuya.thermostatPresets, tuyaThermostatSystemMode: tuya.thermostatSystemModes3},
|
|
761
770
|
ota: ota.zigbeeOTA,
|
|
762
771
|
onEvent: tuya.onEventSetLocalTime,
|
|
@@ -1503,8 +1512,8 @@ module.exports = [
|
|
|
1503
1512
|
exposes.numeric('countdown_timer', ea.STATE_SET).withValueMin(0).withValueMax(86400).withUnit('s'),
|
|
1504
1513
|
exposes.numeric('voltage', ea.STATE).withUnit('V'),
|
|
1505
1514
|
exposes.numeric('voltage_rms', ea.STATE).withUnit('V'),
|
|
1506
|
-
exposes.numeric('current', ea.STATE).withUnit('
|
|
1507
|
-
exposes.numeric('current_average', ea.STATE).withUnit('
|
|
1515
|
+
exposes.numeric('current', ea.STATE).withUnit('A'),
|
|
1516
|
+
exposes.numeric('current_average', ea.STATE).withUnit('A'),
|
|
1508
1517
|
exposes.numeric('power', ea.STATE).withUnit('W'),
|
|
1509
1518
|
exposes.numeric('energy_consumed', ea.STATE).withUnit('kWh'),
|
|
1510
1519
|
exposes.numeric('temperature', ea.STATE).withUnit('°C'),
|
package/devices/viessmann.js
CHANGED
|
@@ -31,10 +31,10 @@ module.exports = [
|
|
|
31
31
|
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg', 'genIdentify', 'genTime', 'hvacThermostat']);
|
|
32
32
|
|
|
33
33
|
// standard ZCL attributes
|
|
34
|
-
await reporting.batteryPercentageRemaining(endpoint
|
|
35
|
-
await reporting.thermostatTemperature(endpoint
|
|
36
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint
|
|
37
|
-
await reporting.thermostatPIHeatingDemand(endpoint
|
|
34
|
+
await reporting.batteryPercentageRemaining(endpoint);
|
|
35
|
+
await reporting.thermostatTemperature(endpoint);
|
|
36
|
+
await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
|
|
37
|
+
await reporting.thermostatPIHeatingDemand(endpoint);
|
|
38
38
|
|
|
39
39
|
// manufacturer attributes
|
|
40
40
|
await endpoint.configureReporting('hvacThermostat', [{attribute: 'viessmannWindowOpenInternal', minimumReportInterval: 60,
|
package/devices/xiaomi.js
CHANGED
|
@@ -801,7 +801,7 @@ module.exports = [
|
|
|
801
801
|
vendor: 'Xiaomi',
|
|
802
802
|
description: 'Aqara temperature, humidity and pressure sensor',
|
|
803
803
|
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
804
|
-
fromZigbee: [fz.xiaomi_battery, fz.xiaomi_temperature, fz.humidity, fz.
|
|
804
|
+
fromZigbee: [fz.xiaomi_battery, fz.xiaomi_temperature, fz.humidity, fz.pressure, fz.WSDCGQ01LM_WSDCGQ11LM_interval],
|
|
805
805
|
toZigbee: [],
|
|
806
806
|
exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure(), e.battery_voltage()],
|
|
807
807
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
@@ -1401,23 +1401,14 @@ module.exports = [
|
|
|
1401
1401
|
model: 'DLKZMK11LM',
|
|
1402
1402
|
vendor: 'Xiaomi',
|
|
1403
1403
|
description: 'Aqara single switch module T1 (with neutral)',
|
|
1404
|
-
fromZigbee: [fz.on_off, fz.
|
|
1405
|
-
|
|
1406
|
-
exposes: [e.switch(), e.
|
|
1407
|
-
|
|
1404
|
+
fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_switch_type, fz.xiaomi_switch_opple_basic],
|
|
1405
|
+
toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_type, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night],
|
|
1406
|
+
exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
|
|
1407
|
+
e.voltage().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(), e.switch_type()],
|
|
1408
1408
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1409
|
-
|
|
1410
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'genDeviceTempCfg']);
|
|
1411
|
-
await reporting.onOff(endpoint);
|
|
1412
|
-
// Gives UNSUPPORTED_ATTRIBUTE on reporting.readEletricalMeasurementMultiplierDivisors.
|
|
1413
|
-
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
1414
|
-
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
1415
|
-
await reporting.currentSummDelivered(endpoint);
|
|
1416
|
-
await reporting.activePower(endpoint, {min: 5, max: 600, change: 10});
|
|
1417
|
-
await reporting.deviceTemperature(endpoint);
|
|
1418
|
-
device.powerSource = 'Mains (single phase)';
|
|
1419
|
-
device.save();
|
|
1409
|
+
await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
1420
1410
|
},
|
|
1411
|
+
ota: ota.zigbeeOTA,
|
|
1421
1412
|
},
|
|
1422
1413
|
{
|
|
1423
1414
|
zigbeeModel: ['lumi.switch.l0agl1'],
|
|
@@ -1769,4 +1760,24 @@ module.exports = [
|
|
|
1769
1760
|
await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
|
|
1770
1761
|
},
|
|
1771
1762
|
},
|
|
1763
|
+
{
|
|
1764
|
+
zigbeeModel: ['lumi.remote.acn004'],
|
|
1765
|
+
model: 'WXKG17LM',
|
|
1766
|
+
vendor: 'Xiaomi',
|
|
1767
|
+
description: 'Aqara E1 double key wireless switch',
|
|
1768
|
+
meta: {battery: {voltageToPercentage: '3V_2100'}},
|
|
1769
|
+
exposes: [e.battery(), e.battery_voltage(),
|
|
1770
|
+
e.action(['single_left', 'single_right', 'single_both', 'double_left', 'double_right', 'hold_left', 'hold_right']),
|
|
1771
|
+
// eslint-disable-next-line max-len
|
|
1772
|
+
exposes.enum('click_mode', ea.SET, ['fast', 'multi']).withDescription('Click mode, fast: only supports single click which will be send immediately after clicking, multi: supports more events like double and hold'),
|
|
1773
|
+
],
|
|
1774
|
+
fromZigbee: [fz.xiaomi_multistate_action, fz.aqara_opple_report],
|
|
1775
|
+
toZigbee: [tz.xiaomi_switch_click_mode],
|
|
1776
|
+
onEvent: preventReset,
|
|
1777
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1778
|
+
const endpoint1 = device.getEndpoint(1);
|
|
1779
|
+
// set multiclick mode
|
|
1780
|
+
await endpoint1.write('aqaraOpple', {0x0125: {value: 0x02, type: 0x20}}, {manufacturerCode: 0x115f});
|
|
1781
|
+
},
|
|
1782
|
+
},
|
|
1772
1783
|
];
|
package/lib/exposes.js
CHANGED
|
@@ -477,8 +477,8 @@ module.exports = {
|
|
|
477
477
|
expose_pin: () => new Binary(`expose_pin`, access.SET, true, false).withDescription(`Expose pin of this lock in the published payload (default false).`),
|
|
478
478
|
occupancy_timeout: () => new Numeric(`occupancy_timeout`, access.SET).withValueMin(0).withDescription('Time in seconds after which occupancy is cleared after detecting it (default 90 seconds).'),
|
|
479
479
|
vibration_timeout: () => new Numeric(`vibration_timeout`, access.SET).withValueMin(0).withDescription('Time in seconds after which vibration is cleared after detecting it (default 90 seconds).'),
|
|
480
|
-
simulated_brightness: () => new Composite('simulated_brightness', 'simulated_brightness')
|
|
481
|
-
.withDescription(
|
|
480
|
+
simulated_brightness: (extraNote='') => new Composite('simulated_brightness', 'simulated_brightness')
|
|
481
|
+
.withDescription(`Simulate a brightness value. If this device provides a brightness_move_up or brightness_move_down action it is possible to specify the update interval and delta.${extraNote}`)
|
|
482
482
|
.withFeature(new Numeric('delta', access.SET).withValueMin(0).withDescription('Delta per interval, 20 by default'))
|
|
483
483
|
.withFeature(new Numeric('interval', access.SET).withValueMin(0).withUnit('ms').withDescription('Interval duration')),
|
|
484
484
|
no_occupancy_since: () => new List(`no_occupancy_since`, access.SET).withDescription('Sends a message the last time occupancy was detected. When setting this for example to [10, 60] a `{"no_occupancy_since": 10}` will be send after 10 seconds and a `{"no_occupancy_since": 60}` after 60 seconds.'),
|
package/lib/legacy.js
CHANGED
|
@@ -885,7 +885,7 @@ const fromZigbee = {
|
|
|
885
885
|
cmd_move: {
|
|
886
886
|
cluster: 'genLevelCtrl',
|
|
887
887
|
type: 'commandMove',
|
|
888
|
-
options: [exposes.options.legacy()],
|
|
888
|
+
options: [exposes.options.legacy(), exposes.options.simulated_brightness(' Note: will only work when legacy: false is set.')],
|
|
889
889
|
convert: (model, msg, publish, options, meta) => {
|
|
890
890
|
if (hasAlreadyProcessedMessage(msg)) return;
|
|
891
891
|
if (isLegacyEnabled(options)) {
|
|
@@ -900,7 +900,7 @@ const fromZigbee = {
|
|
|
900
900
|
cmd_move_with_onoff: {
|
|
901
901
|
cluster: 'genLevelCtrl',
|
|
902
902
|
type: 'commandMoveWithOnOff',
|
|
903
|
-
options: [exposes.options.legacy()],
|
|
903
|
+
options: [exposes.options.legacy(), exposes.options.simulated_brightness(' Note: will only work when legacy: false is set.')],
|
|
904
904
|
convert: (model, msg, publish, options, meta) => {
|
|
905
905
|
if (isLegacyEnabled(options)) {
|
|
906
906
|
ictcg1(model, msg, publish, options, 'move');
|