zigbee-herdsman-converters 15.0.32 → 15.0.33
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 +1 -0
- package/devices/bitron.js +2 -2
- package/devices/ecozy.js +1 -1
- package/devices/elko.js +1 -1
- package/devices/enbrighten.js +12 -0
- package/devices/eurotronic.js +1 -1
- package/devices/leviton.js +1 -1
- package/devices/lonsonho.js +1 -1
- package/devices/paulmann.js +1 -1
- package/devices/schneider_electric.js +1 -1
- package/devices/sonoff.js +10 -0
- package/devices/tuya.js +23 -1
- package/devices/xiaomi.js +1 -1
- package/devices/zen.js +1 -1
- package/lib/exposes.js +2 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -6111,6 +6111,7 @@ const converters = {
|
|
|
6111
6111
|
let result = null;
|
|
6112
6112
|
|
|
6113
6113
|
if (value === 0) result = {action: 'shake'};
|
|
6114
|
+
else if (value === 1) result = {action: 'throw'};
|
|
6114
6115
|
else if (value === 2) result = {action: 'wakeup'};
|
|
6115
6116
|
else if (value === 3) result = {action: 'fall'};
|
|
6116
6117
|
else if (value >= 512) result = {action: 'tap', side: value-512};
|
package/devices/bitron.js
CHANGED
|
@@ -194,8 +194,8 @@ module.exports = [
|
|
|
194
194
|
tz.thermostat_occupied_cooling_setpoint, tz.thermostat_local_temperature_calibration, tz.thermostat_local_temperature,
|
|
195
195
|
tz.thermostat_running_state, tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode],
|
|
196
196
|
exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 0.5).withLocalTemperature()
|
|
197
|
-
.withSystemMode(['off', 'heat']).withRunningState(['idle', 'heat'
|
|
198
|
-
.withLocalTemperatureCalibration(
|
|
197
|
+
.withSystemMode(['off', 'heat']).withRunningState(['idle', 'heat'])
|
|
198
|
+
.withLocalTemperatureCalibration(), e.keypad_lockout()],
|
|
199
199
|
meta: {battery: {voltageToPercentage: '3V_2500_3200'}},
|
|
200
200
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
201
201
|
const endpoint = device.getEndpoint(1);
|
package/devices/ecozy.js
CHANGED
|
@@ -19,7 +19,7 @@ module.exports = [
|
|
|
19
19
|
tz.thermostat_pi_heating_demand, tz.thermostat_running_state],
|
|
20
20
|
exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
|
|
21
21
|
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])
|
|
22
|
-
.withLocalTemperatureCalibration(
|
|
22
|
+
.withLocalTemperatureCalibration()
|
|
23
23
|
.withPiHeatingDemand(ea.STATE_GET)],
|
|
24
24
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
25
25
|
const endpoint = device.getEndpoint(3);
|
package/devices/elko.js
CHANGED
|
@@ -60,7 +60,7 @@ module.exports = [
|
|
|
60
60
|
'(quick) wooden floors.'),
|
|
61
61
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 50, 1)
|
|
62
62
|
.withLocalTemperature(ea.STATE)
|
|
63
|
-
.withLocalTemperatureCalibration(
|
|
63
|
+
.withLocalTemperatureCalibration()
|
|
64
64
|
.withSystemMode(['off', 'heat']).withRunningState(['idle', 'heat']),
|
|
65
65
|
e.temperature_sensor_select(['air', 'floor', 'supervisor_floor']),
|
|
66
66
|
exposes.numeric('floor_temp', ea.STATE_GET).withUnit('°C')
|
package/devices/enbrighten.js
CHANGED
|
@@ -148,4 +148,16 @@ module.exports = [
|
|
|
148
148
|
await reporting.onOff(endpoint);
|
|
149
149
|
},
|
|
150
150
|
},
|
|
151
|
+
{
|
|
152
|
+
zigbeeModel: ['43109'],
|
|
153
|
+
model: '43109',
|
|
154
|
+
vendor: 'Enbrighten',
|
|
155
|
+
description: 'Zigbee in-wall smart switch',
|
|
156
|
+
extend: extend.switch(),
|
|
157
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
158
|
+
const endpoint = device.getEndpoint(1);
|
|
159
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
160
|
+
await reporting.onOff(endpoint);
|
|
161
|
+
},
|
|
162
|
+
},
|
|
151
163
|
];
|
package/devices/eurotronic.js
CHANGED
|
@@ -20,7 +20,7 @@ module.exports = [
|
|
|
20
20
|
tz.eurotronic_current_heating_setpoint, tz.eurotronic_trv_mode, tz.eurotronic_valve_position],
|
|
21
21
|
exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withLocalTemperature()
|
|
22
22
|
.withSystemMode(['off', 'auto', 'heat']).withRunningState(['idle', 'heat'])
|
|
23
|
-
.withLocalTemperatureCalibration(
|
|
23
|
+
.withLocalTemperatureCalibration()
|
|
24
24
|
.withPiHeatingDemand(),
|
|
25
25
|
exposes.enum('trv_mode', exposes.access.ALL, [1, 2])
|
|
26
26
|
.withDescription('Select between direct control of the valve via the `valve_position` or automatic control of the '+
|
package/devices/leviton.js
CHANGED
|
@@ -111,7 +111,7 @@ module.exports = [
|
|
|
111
111
|
exposes.climate().withSetpoint('occupied_heating_setpoint', 10, 30, 1).withLocalTemperature()
|
|
112
112
|
.withSystemMode(['off', 'auto', 'heat', 'cool']).withFanMode(['auto', 'on', 'smart'])
|
|
113
113
|
.withSetpoint('occupied_cooling_setpoint', 10, 30, 1)
|
|
114
|
-
.withLocalTemperatureCalibration(
|
|
114
|
+
.withLocalTemperatureCalibration().withPiHeatingDemand()],
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
// Reference from a similar switch: https://gist.github.com/nebhead/dc5a0a827ec14eef6196ded4be6e2dd0
|
package/devices/lonsonho.js
CHANGED
|
@@ -119,7 +119,7 @@ module.exports = [
|
|
|
119
119
|
exposes: [e.light_brightness().withMinBrightness()],
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
|
-
fingerprint: [{modelID: 'TS110F', manufacturerName: '_TYZB01_v8gtiaed'}
|
|
122
|
+
fingerprint: [{modelID: 'TS110F', manufacturerName: '_TYZB01_v8gtiaed'}],
|
|
123
123
|
model: 'QS-Zigbee-D02-TRIAC-2C-LN',
|
|
124
124
|
vendor: 'Lonsonho',
|
|
125
125
|
description: '2 gang smart dimmer switch module with neutral',
|
package/devices/paulmann.js
CHANGED
|
@@ -9,7 +9,7 @@ module.exports = [
|
|
|
9
9
|
model: '501.34',
|
|
10
10
|
vendor: 'Paulmann',
|
|
11
11
|
description: 'Smart switch 4 buttons white',
|
|
12
|
-
fromZigbee: [fz.command_on, fz.command_off, fz.battery],
|
|
12
|
+
fromZigbee: [fz.command_on, fz.command_off, fz.battery, fz.command_move, fz.command_stop],
|
|
13
13
|
toZigbee: [],
|
|
14
14
|
exposes: [e.battery(), e.action(['on_1', 'off_1', 'on_2', 'off_2', 'brightness_move_up_1', 'brightness_move_down_1',
|
|
15
15
|
'brightness_move_stop_1', 'brightness_move_up_2', 'brightness_move_down_2', 'brightness_move_stop_2'])],
|
|
@@ -704,7 +704,7 @@ module.exports = [
|
|
|
704
704
|
exposes.climate()
|
|
705
705
|
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5, ea.STATE_SET)
|
|
706
706
|
.withLocalTemperature(ea.STATE)
|
|
707
|
-
.withLocalTemperatureCalibration(-
|
|
707
|
+
.withLocalTemperatureCalibration(-12.8, 12.7, 0.1, ea.STATE_SET)
|
|
708
708
|
.withPiHeatingDemand()],
|
|
709
709
|
meta: {battery: {voltageToPercentage: '3V_2500'}},
|
|
710
710
|
configure: async (device, coordinatorEndpoint, logger) => {
|
package/devices/sonoff.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const exposes = require('../lib/exposes');
|
|
2
2
|
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const tz = require('../converters/toZigbee');
|
|
3
4
|
const constants = require('../lib/constants');
|
|
4
5
|
const reporting = require('../lib/reporting');
|
|
5
6
|
const extend = require('../lib/extend');
|
|
@@ -246,4 +247,13 @@ module.exports = [
|
|
|
246
247
|
device.save();
|
|
247
248
|
},
|
|
248
249
|
},
|
|
250
|
+
{
|
|
251
|
+
zigbeeModel: ['ZBCurtain'],
|
|
252
|
+
model: 'ZBCurtain',
|
|
253
|
+
vendor: 'SONOFF',
|
|
254
|
+
description: 'Zigbee smart curtain motor',
|
|
255
|
+
fromZigbee: [fz.cover_position_tilt, fz.battery],
|
|
256
|
+
toZigbee: [tz.cover_state, tz.cover_position_tilt],
|
|
257
|
+
exposes: [e.cover_position(), e.battery()],
|
|
258
|
+
},
|
|
249
259
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -3886,7 +3886,7 @@ module.exports = [
|
|
|
3886
3886
|
},
|
|
3887
3887
|
{
|
|
3888
3888
|
fingerprint: [{modelID: 'TS110E', manufacturerName: '_TZ3210_wdexaypg'}, {modelID: 'TS110E', manufacturerName: '_TZ3210_3mpwqzuu'}],
|
|
3889
|
-
model: '
|
|
3889
|
+
model: 'TS110E_2gang_1',
|
|
3890
3890
|
vendor: 'TuYa',
|
|
3891
3891
|
description: '2 channel dimmer',
|
|
3892
3892
|
fromZigbee: extend.light_onoff_brightness({disablePowerOnBehavior: true, disableMoveStep: true, disableTransition: true})
|
|
@@ -3911,6 +3911,28 @@ module.exports = [
|
|
|
3911
3911
|
return {l1: 1, l2: 2};
|
|
3912
3912
|
},
|
|
3913
3913
|
},
|
|
3914
|
+
{
|
|
3915
|
+
fingerprint: tuya.fingerprint('TS110E', ['_TZ3210_pagajpog']),
|
|
3916
|
+
model: 'TS110E_2gang_2',
|
|
3917
|
+
vendor: 'TuYa',
|
|
3918
|
+
description: '2 channel dimmer',
|
|
3919
|
+
fromZigbee: [fzLocal.TS110E, fzLocal.TS110E_light_type, tuya.fz.power_on_behavior, fz.on_off],
|
|
3920
|
+
toZigbee: [tzLocal.TS110E_onoff_brightness, tzLocal.TS110E_options, tuya.tz.power_on_behavior, tz.light_brightness_move],
|
|
3921
|
+
meta: {multiEndpoint: true},
|
|
3922
|
+
exposes: [
|
|
3923
|
+
e.light_brightness().withMinBrightness().withMaxBrightness().withEndpoint('l1'),
|
|
3924
|
+
e.light_brightness().withMinBrightness().withMaxBrightness().withEndpoint('l2'),
|
|
3925
|
+
e.power_on_behavior().withAccess(ea.ALL)],
|
|
3926
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
3927
|
+
await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
|
|
3928
|
+
const endpoint = device.getEndpoint(1);
|
|
3929
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
|
|
3930
|
+
await reporting.onOff(endpoint);
|
|
3931
|
+
},
|
|
3932
|
+
endpoint: (device) => {
|
|
3933
|
+
return {l1: 1, l2: 2};
|
|
3934
|
+
},
|
|
3935
|
+
},
|
|
3914
3936
|
{
|
|
3915
3937
|
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_nslr42tt']),
|
|
3916
3938
|
model: 'TS0601_3_phase_clamp_meter',
|
package/devices/xiaomi.js
CHANGED
|
@@ -1782,7 +1782,7 @@ module.exports = [
|
|
|
1782
1782
|
fromZigbee: [fz.xiaomi_basic, fz.MFKZQ01LM_action_multistate, fz.MFKZQ01LM_action_analog],
|
|
1783
1783
|
exposes: [e.battery(), e.battery_voltage(), e.angle('action_angle'), e.device_temperature(), e.power_outage_count(false),
|
|
1784
1784
|
e.cube_side('action_from_side'), e.cube_side('action_side'), e.cube_side('action_to_side'), e.cube_side('side'),
|
|
1785
|
-
e.action(['shake', 'wakeup', 'fall', 'tap', 'slide', 'flip180', 'flip90', 'rotate_left', 'rotate_right'])],
|
|
1785
|
+
e.action(['shake', 'throw', 'wakeup', 'fall', 'tap', 'slide', 'flip180', 'flip90', 'rotate_left', 'rotate_right'])],
|
|
1786
1786
|
toZigbee: [],
|
|
1787
1787
|
},
|
|
1788
1788
|
{
|
package/devices/zen.js
CHANGED
|
@@ -18,7 +18,7 @@ module.exports = [
|
|
|
18
18
|
exposes: [exposes.climate().withSetpoint('occupied_heating_setpoint', 10, 30, 0.5)
|
|
19
19
|
.withSetpoint('occupied_cooling_setpoint', 10, 31, 0.5).withLocalTemperature()
|
|
20
20
|
.withSystemMode(['off', 'auto', 'heat', 'cool']).withRunningState(['idle', 'heat', 'cool'])
|
|
21
|
-
.withLocalTemperatureCalibration(
|
|
21
|
+
.withLocalTemperatureCalibration().withPiHeatingDemand()],
|
|
22
22
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
23
23
|
const endpoint = device.getEndpoint(3) || device.getEndpoint(1);
|
|
24
24
|
const binds = ['genBasic', 'genIdentify', 'genPowerCfg', 'genTime', 'hvacThermostat', 'hvacUserInterfaceCfg'];
|
package/lib/exposes.js
CHANGED
|
@@ -391,7 +391,8 @@ class Climate extends Base {
|
|
|
391
391
|
return this;
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
-
withLocalTemperatureCalibration(min, max, step, access=a.ALL) {
|
|
394
|
+
withLocalTemperatureCalibration(min=-12.8, max=12.7, step=0.1, access=a.ALL) {
|
|
395
|
+
// For devices following the ZCL local_temperature_calibration is an int8, so min = -12.8 and max 12.7
|
|
395
396
|
assert(!this.endpoint, 'Cannot add feature after adding endpoint');
|
|
396
397
|
this.features.push(new Numeric('local_temperature_calibration', access)
|
|
397
398
|
.withValueMin(min).withValueMax(max).withValueStep(step).withUnit('°C').withDescription('Offset to be used in the local_temperature'));
|