zigbee-herdsman-converters 14.0.652 → 14.0.654

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.
@@ -4039,7 +4039,7 @@ const converters = {
4039
4039
  const presetLookup = {0: 'programming', 1: 'manual', 2: 'temporary_manual', 3: 'holiday'};
4040
4040
  switch (dp) {
4041
4041
  case tuya.dataPoints.moesSsystemMode:
4042
- return {preset: presetLookup[value]};
4042
+ return {preset: presetLookup[value], system_mode: 'heat'};
4043
4043
  case tuya.dataPoints.moesSheatingSetpoint:
4044
4044
  return {current_heating_setpoint: value};
4045
4045
  case tuya.dataPoints.moesSlocalTemp:
@@ -4049,7 +4049,7 @@ const converters = {
4049
4049
  case tuya.dataPoints.moesSboostHeatingCountdown:
4050
4050
  return {boost_heating_countdown: value};
4051
4051
  case tuya.dataPoints.moesSreset:
4052
- return {valve_state: value ? 'CLOSED' : 'OPEN'};
4052
+ return {running_state: value ? 'idle' : 'heat', valve_state: value ? 'CLOSED' : 'OPEN'};
4053
4053
  case tuya.dataPoints.moesSwindowDetectionFunktion_A2:
4054
4054
  return {window_detection: value ? 'ON' : 'OFF'};
4055
4055
  case tuya.dataPoints.moesSwindowDetection:
@@ -3420,7 +3420,7 @@ const converters = {
3420
3420
  return tuya.sendDataPointRaw(entity, tuya.dataPoints.moesSchedule, payload);
3421
3421
  },
3422
3422
  },
3423
- moesS_thermostat_system_mode: {
3423
+ moesS_thermostat_preset: {
3424
3424
  key: ['preset'],
3425
3425
  convertSet: async (entity, key, value, meta) => {
3426
3426
  const lookup = {'programming': 0, 'manual': 1, 'temporary_manual': 2, 'holiday': 3};
package/devices/lidl.js CHANGED
@@ -7,6 +7,8 @@ const e = exposes.presets;
7
7
  const ea = exposes.access;
8
8
  const tuya = require('../lib/tuya');
9
9
  const globalStore = require('../lib/store');
10
+ const ota = require('../lib/ota');
11
+ const utils = require('../lib/utils');
10
12
 
11
13
  const tuyaLocal = {
12
14
  dataPoints: {
@@ -140,6 +142,20 @@ const fzLocal = {
140
142
  }
141
143
  },
142
144
  },
145
+ metering_skip_duplicate: {
146
+ ...fz.metering,
147
+ convert: (model, msg, publish, options, meta) => {
148
+ if (utils.hasAlreadyProcessedMessage(msg)) return;
149
+ return fz.metering.convert(model, msg, publish, options, meta);
150
+ },
151
+ },
152
+ electrical_measurement_skip_duplicate: {
153
+ ...fz.electrical_measurement,
154
+ convert: (model, msg, publish, options, meta) => {
155
+ if (utils.hasAlreadyProcessedMessage(msg)) return;
156
+ return fz.electrical_measurement.convert(model, msg, publish, options, meta);
157
+ },
158
+ },
143
159
  };
144
160
  const tzLocal = {
145
161
  zs_thermostat_child_lock: {
@@ -383,22 +399,27 @@ module.exports = [
383
399
  model: 'HG08673-FR',
384
400
  vendor: 'Lidl',
385
401
  description: 'Silvercrest smart plug FR with power monitoring',
386
- fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
387
- toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
388
- exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE),
389
- e.energy(), exposes.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore'])
390
- .withDescription('Recover state after power outage')],
402
+ ota: ota.zigbeeOTA, // Even though it's a Lidl Device it supports Tuya OTA
403
+ fromZigbee: [fz.on_off, fzLocal.electrical_measurement_skip_duplicate, fzLocal.metering_skip_duplicate, fz.ignore_basic_report,
404
+ fz.tuya_switch_power_outage_memory, fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
405
+ toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory, tz.ts011f_plug_indicator_mode, tz.ts011f_plug_child_mode],
391
406
  configure: async (device, coordinatorEndpoint, logger) => {
392
407
  const endpoint = device.getEndpoint(1);
393
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
408
+ await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
409
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
410
+ await reporting.rmsVoltage(endpoint, {change: 5});
411
+ await reporting.rmsCurrent(endpoint, {change: 50});
412
+ await reporting.activePower(endpoint, {change: 10});
413
+ await reporting.currentSummDelivered(endpoint);
414
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
394
415
  endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
395
- endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {
396
- acVoltageMultiplier: 1, acVoltageDivisor: 1, acCurrentMultiplier: 1, acCurrentDivisor: 1000, acPowerMultiplier: 1,
397
- acPowerDivisor: 1,
398
- });
416
+ device.save();
399
417
  },
400
- options: [exposes.options.measurement_poll_interval()],
401
- onEvent: tuya.onEventMeasurementPoll,
418
+ exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE),
419
+ e.energy(), exposes.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore'])
420
+ .withDescription('Recover state after power outage'),
421
+ exposes.enum('indicator_mode', ea.ALL, ['off', 'off/on', 'on/off', 'on'])
422
+ .withDescription('Plug LED indicator mode'), e.child_lock()],
402
423
  },
403
424
  {
404
425
  fingerprint: [{modelID: 'TS004F', manufacturerName: '_TZ3000_rco1yzb1'}],
package/devices/moes.js CHANGED
@@ -299,14 +299,17 @@ module.exports = [
299
299
  tz.moesS_thermostat_boost_heating, tz.moesS_thermostat_boostHeatingCountdownTimeSet,
300
300
  tz.moesS_thermostat_eco_temperature, tz.moesS_thermostat_max_temperature,
301
301
  tz.moesS_thermostat_min_temperature, tz.moesS_thermostat_moesSecoMode,
302
- tz.moesS_thermostat_system_mode, tz.moesS_thermostat_schedule_programming],
302
+ tz.moesS_thermostat_preset, tz.moesS_thermostat_schedule_programming],
303
303
  exposes: [
304
- e.battery(), e.child_lock(), e.eco_mode(), e.eco_temperature(), e.max_temperature().withValueMax(45), e.min_temperature(),
304
+ e.battery(), e.child_lock(), e.eco_mode(),
305
+ e.eco_temperature().withValueMin(5), e.max_temperature().withValueMax(45), e.min_temperature().withValueMin(5),
305
306
  e.valve_state(), e.position(), e.window_detection(),
306
307
  exposes.binary('window', ea.STATE, 'OPEN', 'CLOSED').withDescription('Window status closed or open '),
307
308
  exposes.climate()
308
- .withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
309
+ .withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 1, ea.STATE_SET)
309
310
  .withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET)
311
+ .withSystemMode(['heat'], ea.STATE)
312
+ .withRunningState(['idle', 'heat'], ea.STATE)
310
313
  .withPreset(['programming', 'manual', 'temporary_manual', 'holiday'],
311
314
  'MANUAL MODE ☝ - In this mode, the device executes manual temperature setting. '+
312
315
  'When the set temperature is lower than the "minimum temperature", the valve is closed (forced closed). ' +
@@ -125,8 +125,8 @@ module.exports = [
125
125
  fromZigbee: [fz.command_on, fz.command_off, fz.command_toggle, fz.legacy.tint404011_brightness_updown_click,
126
126
  fz.legacy.tint404011_move_to_color_temp, fz.legacy.tint404011_move_to_color, fz.tint_scene,
127
127
  fz.legacy.tint404011_brightness_updown_release, fz.legacy.tint404011_brightness_updown_hold],
128
- exposes: [e.action(['on', 'off', 'toggle', 'brightness_down_click', 'brightness_up_click', 'color_temp', 'color_wheel',
129
- 'brightness_0_release', 'brightness_1_release', 'brightness_0_hold', 'brightness_1_hold'])],
128
+ exposes: [e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down', 'brightness_move_up', 'brightness_move_down',
129
+ 'brightness_stop', 'color_temperature_move', 'color_move', 'scene_1', 'scene_2', 'scene_3', 'scene_4', 'scene_5', 'scene_6'])],
130
130
  toZigbee: [],
131
131
  },
132
132
  {
package/devices/tuya.js CHANGED
@@ -960,6 +960,7 @@ module.exports = [
960
960
  {modelID: 'TS0504B', manufacturerName: '_TZ3210_i2i0bsnv'},
961
961
  {modelID: 'TS0504B', manufacturerName: '_TZ3210_elzv6aia'},
962
962
  {modelID: 'TS0504B', manufacturerName: '_TZ3210_1elppmba'},
963
+ {modelID: 'TS0504B', manufacturerName: '_TZB210_5jn6an2y'},
963
964
  {modelID: 'TS0504B', manufacturerName: '_TZ3210_onejz0gt'}],
964
965
  model: 'TS0504B',
965
966
  vendor: 'TuYa',
@@ -993,6 +994,28 @@ module.exports = [
993
994
  vendor: 'TuYa',
994
995
  extend: extend.light_onoff_brightness(),
995
996
  },
997
+ {
998
+ fingerprint: tuya.fingerprint('TS0202', ['_TZ3210_cwamkvua']),
999
+ model: 'TS0202_2',
1000
+ vendor: 'TuYa',
1001
+ description: 'Motion sensor with scene switch',
1002
+ fromZigbee: [tuya.fzDataPoints, fz.ias_occupancy_alarm_1, fz.battery],
1003
+ toZigbee: [tuya.tzDataPoints],
1004
+ configure: async (device, coordinatorEndpoint, logger) => {
1005
+ const endpoint = device.getEndpoint(1);
1006
+ await reporting.batteryPercentageRemaining(endpoint);
1007
+ await reporting.batteryVoltage(endpoint);
1008
+ },
1009
+ whiteLabel: [{vendor: 'Linkoze', model: 'LKMSZ001'}],
1010
+ exposes: [e.battery(), e.battery_voltage(), e.occupancy(), e.action(['single', 'double', 'hold']),
1011
+ exposes.enum('light', ea.STATE, ['dark', 'bright'])],
1012
+ meta: {
1013
+ tuyaDatapoints: [
1014
+ [102, 'light', tuya.valueConverterBasic.lookup({'dark': true, 'bright': false})],
1015
+ [101, 'action', tuya.valueConverterBasic.lookup({'single': 0, 'hold': 1, 'double': 2})],
1016
+ ],
1017
+ },
1018
+ },
996
1019
  {
997
1020
  fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'},
998
1021
  {modelID: 'TS0202', manufacturerName: '_TZ3000_lltemgsf'},
@@ -3531,7 +3554,8 @@ module.exports = [
3531
3554
  },
3532
3555
  {
3533
3556
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_0u3bj3rc'},
3534
- {modelID: 'TS0601', manufacturerName: '_TZE200_v6ossqfy'}],
3557
+ {modelID: 'TS0601', manufacturerName: '_TZE200_v6ossqfy'},
3558
+ {modelID: 'TS0601', manufacturerName: '_TZE200_mx6u6l4y'}],
3535
3559
  model: 'TS0601_human_presence_sensor',
3536
3560
  vendor: 'TuYa',
3537
3561
  description: 'Human presence sensor Zigbee',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.652",
3
+ "version": "14.0.654",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [