zigbee-herdsman-converters 14.0.375 → 14.0.376
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 +46 -1
- package/converters/toZigbee.js +29 -0
- package/devices/bticino.js +11 -8
- package/devices/evanell.js +29 -0
- package/devices/jasco.js +18 -0
- package/devices/moes.js +1 -1
- package/devices/philips.js +9 -0
- package/devices/tuya.js +6 -2
- package/lib/exposes.js +2 -1
- package/lib/tuya.js +6 -0
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -3672,7 +3672,7 @@ const converters = {
|
|
|
3672
3672
|
case tuya.dataPoints.moesSboostHeatingCountdown:
|
|
3673
3673
|
return {boost_heating_countdown: value};
|
|
3674
3674
|
case tuya.dataPoints.moesSreset:
|
|
3675
|
-
|
|
3675
|
+
return {valve_state: value ? 'CLOSED' : 'OPEN'};
|
|
3676
3676
|
case tuya.dataPoints.moesSwindowDetectionFunktion_A2:
|
|
3677
3677
|
return {window_detection: value ? 'ON' : 'OFF'};
|
|
3678
3678
|
case tuya.dataPoints.moesSwindowDetection:
|
|
@@ -4136,6 +4136,51 @@ const converters = {
|
|
|
4136
4136
|
}
|
|
4137
4137
|
},
|
|
4138
4138
|
},
|
|
4139
|
+
evanell_thermostat: {
|
|
4140
|
+
cluster: 'manuSpecificTuya',
|
|
4141
|
+
type: ['commandDataResponse', 'commandDataReport'],
|
|
4142
|
+
convert: (model, msg, publish, options, meta) => {
|
|
4143
|
+
const result = {};
|
|
4144
|
+
for (const dpValue of msg.data.dpValues) {
|
|
4145
|
+
const value = tuya.getDataValue(dpValue);
|
|
4146
|
+
switch (dpValue.dp) {
|
|
4147
|
+
case tuya.dataPoints.evanellChildLock:
|
|
4148
|
+
result.child_lock = value ? 'LOCK' : 'UNLOCK';
|
|
4149
|
+
break;
|
|
4150
|
+
case tuya.dataPoints.evanellBattery:
|
|
4151
|
+
result.battery = value;
|
|
4152
|
+
break;
|
|
4153
|
+
case tuya.dataPoints.evanellHeatingSetpoint:
|
|
4154
|
+
result.current_heating_setpoint = value/10;
|
|
4155
|
+
break;
|
|
4156
|
+
case tuya.dataPoints.evanellLocalTemp:
|
|
4157
|
+
result.local_temperature = value/10;
|
|
4158
|
+
break;
|
|
4159
|
+
case tuya.dataPoints.evanellMode:
|
|
4160
|
+
switch (value) {
|
|
4161
|
+
case 0: // manual
|
|
4162
|
+
result.system_mode = 'auto';
|
|
4163
|
+
break;
|
|
4164
|
+
case 2: // away
|
|
4165
|
+
result.system_mode = 'heat';
|
|
4166
|
+
break;
|
|
4167
|
+
case 3: // auto
|
|
4168
|
+
result.system_mode = 'off';
|
|
4169
|
+
break;
|
|
4170
|
+
default:
|
|
4171
|
+
meta.logger.warn('zigbee-herdsman-converters:evanell_thermostat: ' +
|
|
4172
|
+
`Mode ${value} is not recognized.`);
|
|
4173
|
+
break;
|
|
4174
|
+
}
|
|
4175
|
+
break;
|
|
4176
|
+
default:
|
|
4177
|
+
meta.logger.warn(`zigbee-herdsman-converters:evanell_thermostat: NOT RECOGNIZED ` +
|
|
4178
|
+
`DP #${dpValue.dp} with data ${JSON.stringify(dpValue)}`);
|
|
4179
|
+
}
|
|
4180
|
+
}
|
|
4181
|
+
return result;
|
|
4182
|
+
},
|
|
4183
|
+
},
|
|
4139
4184
|
etop_thermostat: {
|
|
4140
4185
|
cluster: 'manuSpecificTuya',
|
|
4141
4186
|
type: ['commandDataResponse', 'commandDataReport'],
|
package/converters/toZigbee.js
CHANGED
|
@@ -5411,6 +5411,35 @@ const converters = {
|
|
|
5411
5411
|
await tuya.sendDataPointValue(entity, tuya.dataPoints.saswellTempCalibration, value);
|
|
5412
5412
|
},
|
|
5413
5413
|
},
|
|
5414
|
+
evanell_thermostat_current_heating_setpoint: {
|
|
5415
|
+
key: ['current_heating_setpoint'],
|
|
5416
|
+
convertSet: async (entity, key, value, meta) => {
|
|
5417
|
+
const temp = Math.round(value * 10);
|
|
5418
|
+
await tuya.sendDataPointValue(entity, tuya.dataPoints.evanellHeatingSetpoint, temp);
|
|
5419
|
+
},
|
|
5420
|
+
},
|
|
5421
|
+
evanell_thermostat_system_mode: {
|
|
5422
|
+
key: ['system_mode'],
|
|
5423
|
+
convertSet: async (entity, key, value, meta) => {
|
|
5424
|
+
switch (value) {
|
|
5425
|
+
case 'off':
|
|
5426
|
+
await tuya.sendDataPointEnum(entity, tuya.dataPoints.evanellMode, 3 /* off */);
|
|
5427
|
+
break;
|
|
5428
|
+
case 'heat':
|
|
5429
|
+
await tuya.sendDataPointEnum(entity, tuya.dataPoints.evanellMode, 2 /* manual */);
|
|
5430
|
+
break;
|
|
5431
|
+
case 'auto':
|
|
5432
|
+
await tuya.sendDataPointEnum(entity, tuya.dataPoints.evanellMode, 0 /* auto */);
|
|
5433
|
+
break;
|
|
5434
|
+
}
|
|
5435
|
+
},
|
|
5436
|
+
},
|
|
5437
|
+
evanell_thermostat_child_lock: {
|
|
5438
|
+
key: ['child_lock'],
|
|
5439
|
+
convertSet: async (entity, key, value, meta) => {
|
|
5440
|
+
await tuya.sendDataPointBool(entity, tuya.dataPoints.evanellChildLock, value === 'LOCK');
|
|
5441
|
+
},
|
|
5442
|
+
},
|
|
5414
5443
|
silvercrest_smart_led_string: {
|
|
5415
5444
|
key: ['color', 'brightness', 'effect'],
|
|
5416
5445
|
convertSet: async (entity, key, value, meta) => {
|
package/devices/bticino.js
CHANGED
|
@@ -30,19 +30,22 @@ module.exports = [
|
|
|
30
30
|
vendor: 'BTicino',
|
|
31
31
|
description: 'Dimmer switch with neutral',
|
|
32
32
|
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
fromZigbee: [fz.brightness, fz.identify, fz.on_off, fz.lighting_ballast_configuration],
|
|
34
|
+
toZigbee: [tz.light_onoff_brightness, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn,
|
|
35
|
+
tz.legrand_settingEnableDimmer, tz.legrand_identify, tz.ballast_config],
|
|
36
|
+
exposes: [e.light_brightness(),
|
|
37
|
+
exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
38
|
+
.withDescription('Specifies the minimum brightness value'),
|
|
39
|
+
exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
|
|
40
|
+
.withDescription('Specifies the maximum brightness value'),
|
|
35
41
|
exposes.binary('dimmer_enabled', ea.STATE_SET, 'ON', 'OFF').withDescription('Allow the device to change brightness'),
|
|
36
42
|
exposes.binary('permanent_led', ea.STATE_SET, 'ON', 'OFF').withDescription('Enable or disable the permanent blue LED'),
|
|
37
|
-
exposes.binary('led_when_on', ea.STATE_SET, 'ON', 'OFF').withDescription('Enables the LED when the light is on'),
|
|
38
|
-
],
|
|
39
|
-
fromZigbee: [fz.brightness, fz.identify, fz.on_off],
|
|
40
|
-
toZigbee: [tz.light_onoff_brightness, tz.legrand_settingAlwaysEnableLed, tz.legrand_settingEnableLedIfOn,
|
|
41
|
-
tz.legrand_settingEnableDimmer, tz.legrand_identify],
|
|
43
|
+
exposes.binary('led_when_on', ea.STATE_SET, 'ON', 'OFF').withDescription('Enables the LED when the light is on')],
|
|
42
44
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
43
45
|
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
44
46
|
const endpoint = device.getEndpoint(1);
|
|
45
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff', 'genLevelCtrl',
|
|
47
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genIdentify', 'genOnOff', 'genLevelCtrl',
|
|
48
|
+
'genBinaryInput', 'lightingBallastCfg']);
|
|
46
49
|
await reporting.onOff(endpoint);
|
|
47
50
|
await reporting.brightness(endpoint);
|
|
48
51
|
},
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const fz = require('../converters/fromZigbee');
|
|
3
|
+
const tz = require('../converters/toZigbee');
|
|
4
|
+
const tuya = require('../lib/tuya');
|
|
5
|
+
const reporting = require('../lib/reporting');
|
|
6
|
+
const e = exposes.presets;
|
|
7
|
+
const ea = exposes.access;
|
|
8
|
+
|
|
9
|
+
module.exports = [
|
|
10
|
+
{
|
|
11
|
+
fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_dmfguuli'}],
|
|
12
|
+
model: 'EZ200',
|
|
13
|
+
vendor: 'Evanell',
|
|
14
|
+
description: 'Thermostatic radiator valve',
|
|
15
|
+
fromZigbee: [fz.evanell_thermostat],
|
|
16
|
+
toZigbee: [tz.evanell_thermostat_current_heating_setpoint, tz.evanell_thermostat_system_mode,
|
|
17
|
+
tz.evanell_thermostat_child_lock],
|
|
18
|
+
onEvent: tuya.onEventSetTime,
|
|
19
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
20
|
+
const endpoint = device.getEndpoint(1);
|
|
21
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
|
|
22
|
+
},
|
|
23
|
+
exposes: [e.child_lock(), e.battery(),
|
|
24
|
+
exposes.climate()
|
|
25
|
+
.withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET).withLocalTemperature(ea.STATE)
|
|
26
|
+
.withSystemMode(['off', 'heat', 'auto'], ea.STATE_SET),
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
];
|
package/devices/jasco.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const reporting = require('../lib/reporting');
|
|
2
|
+
const extend = require('../lib/extend');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['35938'],
|
|
7
|
+
model: 'ZB3102',
|
|
8
|
+
vendor: 'Jasco Products',
|
|
9
|
+
description: 'Zigbee plug-in smart dimmer',
|
|
10
|
+
extend: extend.light_onoff_brightness({noConfigure: true}),
|
|
11
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
12
|
+
await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
|
|
13
|
+
const endpoint = device.getEndpoint(1);
|
|
14
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
|
|
15
|
+
await reporting.onOff(endpoint);
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
];
|
package/devices/moes.js
CHANGED
|
@@ -206,7 +206,7 @@ module.exports = [
|
|
|
206
206
|
tz.moesS_thermostat_system_mode, tz.moesS_thermostat_schedule_programming],
|
|
207
207
|
exposes: [
|
|
208
208
|
e.battery(), e.child_lock(), e.eco_mode(), e.eco_temperature(), e.max_temperature(), e.min_temperature(),
|
|
209
|
-
e.position(), e.window_detection(),
|
|
209
|
+
e.valve_state(), e.position(), e.window_detection(),
|
|
210
210
|
exposes.binary('window', ea.STATE, 'CLOSED', 'OPEN').withDescription('Window status closed or open '),
|
|
211
211
|
exposes.climate()
|
|
212
212
|
.withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
|
package/devices/philips.js
CHANGED
|
@@ -2574,4 +2574,13 @@ module.exports = [
|
|
|
2574
2574
|
extend: hueExtend.light_onoff_brightness(),
|
|
2575
2575
|
ota: ota.zigbeeOTA,
|
|
2576
2576
|
},
|
|
2577
|
+
{
|
|
2578
|
+
zigbeeModel: ['LWA019'],
|
|
2579
|
+
model: '9290024691',
|
|
2580
|
+
vendor: 'Philips',
|
|
2581
|
+
description: 'Hue white single filament bulb A19 E26 with Bluetooth (1100 Lumen)',
|
|
2582
|
+
meta: {turnsOffAtBrightness1: true},
|
|
2583
|
+
extend: hueExtend.light_onoff_brightness(),
|
|
2584
|
+
ota: ota.zigbeeOTA,
|
|
2585
|
+
},
|
|
2577
2586
|
];
|
package/devices/tuya.js
CHANGED
|
@@ -209,6 +209,7 @@ module.exports = [
|
|
|
209
209
|
fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_ef5xlc9q'},
|
|
210
210
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_vwqnz1sn'},
|
|
211
211
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_2b8f6cio'},
|
|
212
|
+
{modelID: 'TS0202', manufacturerName: '_TZE200_bq5c8xfe'},
|
|
212
213
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_dl7cejts'},
|
|
213
214
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_qjqgmqxr'},
|
|
214
215
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_mmtwjmaq'},
|
|
@@ -222,7 +223,7 @@ module.exports = [
|
|
|
222
223
|
model: 'TS0202',
|
|
223
224
|
vendor: 'TuYa',
|
|
224
225
|
description: 'Motion sensor',
|
|
225
|
-
whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMA02P'}],
|
|
226
|
+
whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMA02P'}, {vendor: 'TuYa ', model: 'TY-ZPR06'}],
|
|
226
227
|
fromZigbee: [fz.ias_occupancy_alarm_1, fz.battery, fz.ignore_basic_report, fz.ias_occupancy_alarm_1_report],
|
|
227
228
|
toZigbee: [],
|
|
228
229
|
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
|
|
@@ -1660,7 +1661,10 @@ module.exports = [
|
|
|
1660
1661
|
toZigbee: [],
|
|
1661
1662
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1662
1663
|
const endpoint = device.getEndpoint(1);
|
|
1663
|
-
|
|
1664
|
+
// Enables reporting of measurement state changes
|
|
1665
|
+
await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
|
|
1666
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg',
|
|
1667
|
+
'msTemperatureMeasurement', 'msIlluminanceMeasurement', 'msRelativeHumidity', 'manuSpecificTuya_2']);
|
|
1664
1668
|
},
|
|
1665
1669
|
exposes: [e.temperature(), e.humidity(), e.battery(), e.illuminance(), e.illuminance_lux(),
|
|
1666
1670
|
exposes.numeric('alarm_temperature_max', ea.STATE).withUnit('°C').withDescription('Alarm temperature max'),
|
package/lib/exposes.js
CHANGED
|
@@ -557,7 +557,7 @@ module.exports = {
|
|
|
557
557
|
linkquality: () => new Numeric('linkquality', access.STATE).withUnit('lqi').withDescription('Link quality (signal strength)').withValueMin(0).withValueMax(255),
|
|
558
558
|
local_temperature: () => new Numeric('local_temperature', access.STATE_GET).withUnit('°C').withDescription('Current temperature measured on the device'),
|
|
559
559
|
lock: () => new Lock().withState('state', 'LOCK', 'UNLOCK', 'State of the lock').withLockState('lock_state', 'Actual state of the lock'),
|
|
560
|
-
max_temperature: () => new Numeric('max_temperature', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature').withValueMin(15).withValueMax(
|
|
560
|
+
max_temperature: () => new Numeric('max_temperature', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature').withValueMin(15).withValueMax(35),
|
|
561
561
|
max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit').withValueMin(0).withValueMax(35),
|
|
562
562
|
min_temperature: () => new Numeric('min_temperature', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature').withValueMin(1).withValueMax(15),
|
|
563
563
|
noise: () => new Numeric('noise', access.STATE).withUnit('dBA').withDescription('The measured noise value'),
|
|
@@ -585,6 +585,7 @@ module.exports = {
|
|
|
585
585
|
tamper: () => new Binary('tamper', access.STATE, true, false).withDescription('Indicates whether the device is tampered'),
|
|
586
586
|
temperature: () => new Numeric('temperature', access.STATE).withUnit('°C').withDescription('Measured temperature value'),
|
|
587
587
|
test: () => new Binary('test', access.STATE, true, false).withDescription('Indicates whether the device is being tested'),
|
|
588
|
+
valve_state: () => new Binary('valve_state', access.STATE, 'OPEN', 'CLOSED').withDescription('Valve state if open or closed'),
|
|
588
589
|
valve_detection: () => new Switch().withState('valve_detection', true).setAccess('state', access.STATE_SET),
|
|
589
590
|
vibration: () => new Binary('vibration', access.STATE, true, false).withDescription('Indicates whether the device detected vibration'),
|
|
590
591
|
voc: () => new Numeric('voc', access.STATE).withUnit('ppb').withDescription('Measured VOC value'),
|
package/lib/tuya.js
CHANGED
|
@@ -531,6 +531,12 @@ const dataPoints = {
|
|
|
531
531
|
// TUYA WLS-100z Water Leak Sensor
|
|
532
532
|
wlsWaterLeak: 1,
|
|
533
533
|
wlsBatteryPercentage: 4,
|
|
534
|
+
// Evanell
|
|
535
|
+
evanellMode: 2,
|
|
536
|
+
evanellHeatingSetpoint: 4,
|
|
537
|
+
evanellLocalTemp: 5,
|
|
538
|
+
evanellBattery: 6,
|
|
539
|
+
evanellChildLock: 8,
|
|
534
540
|
};
|
|
535
541
|
|
|
536
542
|
const thermostatWeekFormat = {
|
package/npm-shrinkwrap.json
CHANGED