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.
@@ -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
- break;
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'],
@@ -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) => {
@@ -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
- exposes: [
34
- e.light_brightness(),
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', 'genBinaryInput']);
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
+ ];
@@ -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)
@@ -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
- await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg']);
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(70),
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 = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.375",
3
+ "version": "14.0.376",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.375",
3
+ "version": "14.0.376",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [