zigbee-herdsman-converters 14.0.683 → 14.0.684

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/devices/ecodim.js CHANGED
@@ -3,6 +3,7 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
3
3
  const e = exposes.presets;
4
4
  const reporting = require('../lib/reporting');
5
5
  const extend = require('../lib/extend');
6
+ const ota = require('../lib/ota');
6
7
 
7
8
  module.exports = [
8
9
  {
@@ -48,6 +49,7 @@ module.exports = [
48
49
  model: 'Eco-Dim.07/Eco-Dim.10',
49
50
  vendor: 'EcoDim',
50
51
  description: 'Zigbee & Z-wave dimmer',
52
+ ota: ota.zigbeeOTA,
51
53
  extend: extend.light_onoff_brightness({noConfigure: true, disableEffect: true}),
52
54
  configure: async (device, coordinatorEndpoint, logger) => {
53
55
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
package/devices/immax.js CHANGED
@@ -182,4 +182,22 @@ module.exports = [
182
182
  // eslint-disable-next-line
183
183
  exposes.enum('keep_time', ea.STATE_SET, ['0', '30', '60', '120', '240']).withDescription('PIR keep time in seconds')],
184
184
  },
185
+ {
186
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_n9clpsht']),
187
+ model: '07505L',
188
+ vendor: 'Immax',
189
+ description: 'Neo smart keypad',
190
+ fromZigbee: [tuya.fz.datapoints],
191
+ toZigbee: [],
192
+ exposes: [e.action(['disarm', 'arm_home', 'arm_away', 'sos']), e.tamper()],
193
+ meta: {
194
+ tuyaDatapoints: [
195
+ [24, 'tamper', tuya.valueConverter.trueFalse],
196
+ [26, 'action', tuya.valueConverter.static('disarm')],
197
+ [27, 'action', tuya.valueConverter.static('arm_away')],
198
+ [28, 'action', tuya.valueConverter.static('arm_home')],
199
+ [29, 'action', tuya.valueConverter.static('sos')],
200
+ ],
201
+ },
202
+ },
185
203
  ];
@@ -662,9 +662,16 @@ module.exports = [
662
662
  zigbeeModel: ['1740193P0'],
663
663
  model: '1740193P0',
664
664
  vendor: 'Philips',
665
- description: 'Hue Lucca wall light',
665
+ description: 'Hue White Lucca wall light',
666
666
  extend: hueExtend.light_onoff_brightness(),
667
667
  },
668
+ {
669
+ zigbeeModel: ['929003089301'],
670
+ model: '929003089301',
671
+ vendor: 'Philips',
672
+ description: 'Hue White and Color Ambiance Lucca wall light',
673
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
674
+ },
668
675
  {
669
676
  zigbeeModel: ['1740293P0'],
670
677
  model: '1740293P0',
@@ -2372,7 +2379,7 @@ module.exports = [
2372
2379
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2373
2380
  },
2374
2381
  {
2375
- zigbeeModel: ['5041131P9', '5041148P9'],
2382
+ zigbeeModel: ['5041131P9', '5041148P9', '929003047301'],
2376
2383
  model: '5041131P9',
2377
2384
  vendor: 'Philips',
2378
2385
  description: 'Hue White ambiance Milliskin',
@@ -2955,4 +2962,18 @@ module.exports = [
2955
2962
  ...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).exposes],
2956
2963
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2957
2964
  },
2965
+ {
2966
+ zigbeeModel: ['929003526301'],
2967
+ model: '929003526301',
2968
+ vendor: 'Philips',
2969
+ description: 'Hue White & Color Ambiance Xamento M',
2970
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
2971
+ },
2972
+ {
2973
+ zigbeeModel: ['LWE008'],
2974
+ model: '929003021301',
2975
+ vendor: 'Philips',
2976
+ description: 'Hue White E17 470 lumen',
2977
+ extend: hueExtend.light_onoff_brightness(),
2978
+ },
2958
2979
  ];
@@ -15,6 +15,7 @@ module.exports = [
15
15
  {modelID: 'w7cahqs', manufacturerName: '_TYST11_yw7cahqs'},
16
16
  {modelID: 'TS0601', manufacturerName: '_TZE200_c88teujp'},
17
17
  {modelID: 'TS0601', manufacturerName: '_TZE200_yw7cahqs'},
18
+ {modelID: 'aj4jz0i\u0000', manufacturerName: '_TYST11_caj4jz0i'},
18
19
  {modelID: 'TS0601', manufacturerName: '_TZE200_azqp6ssj'},
19
20
  {modelID: 'TS0601', manufacturerName: '_TZE200_zuhszj9s'},
20
21
  {modelID: 'TS0601', manufacturerName: '_TZE200_9gvruqf5'},
@@ -22,12 +23,13 @@ module.exports = [
22
23
  {modelID: 'TS0601', manufacturerName: '_TZE200_0dvm9mva'},
23
24
  {modelID: 'TS0601', manufacturerName: '_TZE200_h4cgnbzg'},
24
25
  {modelID: 'TS0601', manufacturerName: '_TZE200_exfrnlow'},
26
+ {modelID: 'TS0601', manufacturerName: '_TZE200_9m4kmbfu'},
25
27
  ],
26
28
  model: 'SEA801-Zigbee/SEA802-Zigbee',
27
29
  vendor: 'Saswell',
28
30
  description: 'Thermostatic radiator valve',
29
31
  whiteLabel: [{vendor: 'HiHome', model: 'WZB-TRVL'}, {vendor: 'Hama', model: '00176592'},
30
- {vendor: 'RTX', model: 'ZB-RT1'}],
32
+ {vendor: 'RTX', model: 'ZB-RT1'}, {vendor: 'SETTI+', model: 'TRV001'}],
31
33
  fromZigbee: [fz.saswell_thermostat, fz.ignore_tuya_set_time, fz.ignore_basic_report, fz.legacy.tuya_thermostat_weekly_schedule],
32
34
  toZigbee: [tz.saswell_thermostat_current_heating_setpoint, tz.saswell_thermostat_mode, tz.saswell_thermostat_away,
33
35
  tz.saswell_thermostat_child_lock, tz.saswell_thermostat_window_detection, tz.saswell_thermostat_frost_detection,
package/devices/sinope.js CHANGED
@@ -580,8 +580,8 @@ module.exports = [
580
580
  tzLocal.sinope_temperature_sensor],
581
581
  exposes: [
582
582
  exposes.climate()
583
- .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
584
- .withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
583
+ .withSetpoint('occupied_heating_setpoint', 5, 36, 0.5)
584
+ .withSetpoint('unoccupied_heating_setpoint', 5, 36, 0.5)
585
585
  .withLocalTemperature()
586
586
  .withSystemMode(['off', 'heat'], ea.ALL, 'Mode of the thermostat')
587
587
  .withPiHeatingDemand(ea.STATE_GET)
@@ -653,7 +653,7 @@ module.exports = [
653
653
  tzLocal.sinope_thermostat_main_cycle_output, tzLocal.sinope_thermostat_aux_cycle_output, tzLocal.sinope_pump_protection],
654
654
  exposes: [
655
655
  exposes.climate()
656
- .withSetpoint('occupied_heating_setpoint', 5, 36, 1)
656
+ .withSetpoint('occupied_heating_setpoint', 5, 36, 0.5)
657
657
  .withLocalTemperature()
658
658
  .withSystemMode(['off', 'heat'])
659
659
  .withRunningState(['idle', 'heat'])
@@ -34,9 +34,11 @@ module.exports = [
34
34
  {vendor: 'Nedis', description: 'Thermostatic Radiator Valve Controller', model: 'ZBHTR10WT'},
35
35
  {vendor: 'TCP Smart', description: 'Smart Thermostatic Radiator Valve', model: 'TBUWTRV'},
36
36
  {vendor: 'Brennenstuhl', description: 'Radiator Thermostat', model: 'HT CZ 01'}],
37
- exposes: [e.child_lock(), e.window_detection(), e.battery(), e.valve_detection(), e.position(), exposes.climate()
38
- .withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET).withLocalTemperature(ea.STATE)
39
- .withSystemMode(['off', 'auto', 'heat'], ea.STATE_SET)
40
- .withRunningState(['idle', 'heat'], ea.STATE)],
37
+ exposes: [e.child_lock(), e.window_detection(), e.battery(), e.valve_detection(),
38
+ e.position().withDescription('TRV valve position in %.'),
39
+ exposes.climate()
40
+ .withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET).withLocalTemperature(ea.STATE)
41
+ .withSystemMode(['off', 'auto', 'heat'], ea.STATE_SET)
42
+ .withRunningState(['idle', 'heat'], ea.STATE)],
41
43
  },
42
44
  ];
@@ -393,12 +393,11 @@ module.exports = [
393
393
  description: 'Water leak sensor (2018 model)',
394
394
  fromZigbee: [fz.temperature, fz.ias_water_leak_alarm_1, fz.battery, fz.ias_water_leak_alarm_1_report],
395
395
  toZigbee: [],
396
- meta: {battery: {voltageToPercentage: '3V_2500'}},
397
396
  configure: async (device, coordinatorEndpoint, logger) => {
398
397
  const endpoint = device.getEndpoint(1);
399
398
  await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'genPowerCfg']);
400
399
  await reporting.temperature(endpoint);
401
- await reporting.batteryVoltage(endpoint);
400
+ await reporting.batteryPercentageRemaining(endpoint);
402
401
  },
403
402
  exposes: [e.temperature(), e.water_leak(), e.battery_low(), e.tamper(), e.battery()],
404
403
  },
@@ -102,12 +102,17 @@ module.exports = [
102
102
  model: '3RSP019BZ',
103
103
  vendor: 'Third Reality',
104
104
  description: 'Zigbee / BLE smart plug',
105
- extend: extend.switch(),
105
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
106
+ toZigbee: [tz.on_off],
106
107
  ota: ota.zigbeeOTA,
108
+ exposes: [e.switch(), e.power(), e.current(), e.voltage()],
107
109
  configure: async (device, coordinatorEndpoint, logger) => {
108
110
  const endpoint = device.getEndpoint(1);
109
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
111
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
110
112
  await reporting.onOff(endpoint);
113
+ await reporting.activePower(endpoint);
114
+ await reporting.rmsCurrent(endpoint);
115
+ await reporting.rmsVoltage(endpoint);
111
116
  },
112
117
  },
113
118
  {
package/devices/tuya.js CHANGED
@@ -2088,7 +2088,6 @@ module.exports = [
2088
2088
  '_TZE200_mudxchsu', /* model: 'TV05-ZG curve', vendor: 'TuYa' */
2089
2089
  '_TZE200_7yoranx2', /* model: 'TV01-ZB', vendor: 'Moes' */
2090
2090
  '_TZE200_kds0pmmv', /* model: 'TV01-ZB', vendor: 'Moes' */
2091
- '_TZE200_bvu2wnxz', /* model: 'ME167', vendor: 'Avatto' */
2092
2091
  ]),
2093
2092
  model: 'TV02-Zigbee',
2094
2093
  vendor: 'TuYa',
@@ -2157,7 +2156,7 @@ module.exports = [
2157
2156
  [10, 'frost_protection', tuya.valueConverter.onOff],
2158
2157
  [16, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
2159
2158
  [24, 'local_temperature', tuya.valueConverter.divideBy10],
2160
- [27, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration],
2159
+ [27, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration1],
2161
2160
  [31, 'working_day', tuya.valueConverterBasic.lookup({'mon_sun': tuya.enum(0), 'mon_fri+sat+sun': tuya.enum(1),
2162
2161
  'separate': tuya.enum(2)})],
2163
2162
  [32, 'holiday_temperature', tuya.valueConverter.divideBy10],
@@ -2207,7 +2206,7 @@ module.exports = [
2207
2206
  [10, 'frost_protection', tuya.valueConverter.onOff],
2208
2207
  [16, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
2209
2208
  [24, 'local_temperature', tuya.valueConverter.divideBy10],
2210
- [27, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration],
2209
+ [27, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration1],
2211
2210
  [35, 'battery_low', tuya.valueConverter.true0ElseFalse],
2212
2211
  [40, 'child_lock', tuya.valueConverter.lockUnlock],
2213
2212
  [45, 'error_status', tuya.valueConverter.raw],
@@ -2231,6 +2230,49 @@ module.exports = [
2231
2230
  ...tuya.exposes.scheduleAllDays(ea.STATE_SET, 'HH:MM/C HH:MM/C HH:MM/C HH:MM/C'),
2232
2231
  ],
2233
2232
  },
2233
+ {
2234
+ fingerprint: tuya.fingerprint('TS0601', [
2235
+ '_TZE200_bvu2wnxz', /* model: 'ME167', vendor: 'Avatto' */
2236
+ ]),
2237
+ model: 'TS0601_thermostat_3',
2238
+ vendor: 'TuYa',
2239
+ description: 'Thermostatic radiator valve',
2240
+ fromZigbee: [tuya.fzDataPoints],
2241
+ toZigbee: [tuya.tzDataPoints],
2242
+ whiteLabel: [{vendor: 'Avatto', model: 'ME167'}],
2243
+ onEvent: tuya.onEventSetTime,
2244
+ configure: tuya.configureMagicPacket,
2245
+ exposes: [
2246
+ e.child_lock(), e.battery_low(),
2247
+ exposes.climate()
2248
+ .withSetpoint('current_heating_setpoint', 5, 35, 1, ea.STATE_SET)
2249
+ .withLocalTemperature(ea.STATE)
2250
+ .withSystemMode(['auto', 'heat', 'off'], ea.STATE_SET)
2251
+ .withRunningState(['idle', 'heat'], ea.STATE)
2252
+ .withLocalTemperatureCalibration(-3, 3, 1, ea.STATE_SET),
2253
+ exposes.binary('scale_protection', ea.STATE_SET, 'ON', 'OFF').withDescription('If the heat sink is not fully opened within ' +
2254
+ 'two weeks or is not used for a long time, the valve will be blocked due to silting up and the heat sink will not be ' +
2255
+ 'able to be used. To ensure normal use of the heat sink, the controller will automatically open the valve fully every ' +
2256
+ 'two weeks. It will run for 30 seconds per time with the screen displaying "Ad", then return to its normal working state ' +
2257
+ 'again.'),
2258
+ exposes.binary('frost_protection', ea.STATE_SET, 'ON', 'OFF').withDescription('When the room temperature is lower than ' +
2259
+ '5 °C, the valve opens; when the temperature rises to 8 °C, the valve closes.'),
2260
+ exposes.numeric('error', ea.STATE).withDescription('If NTC is damaged, "Er" will be on the TRV display.'),
2261
+ ],
2262
+ meta: {
2263
+ tuyaDatapoints: [
2264
+ [2, 'system_mode', tuya.valueConverterBasic.lookup({'auto': tuya.enum(0), 'heat': tuya.enum(1), 'off': tuya.enum(2)})],
2265
+ [3, 'running_state', tuya.valueConverterBasic.lookup({'heat': tuya.enum(0), 'idle': tuya.enum(1)})],
2266
+ [4, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
2267
+ [5, 'local_temperature', tuya.valueConverter.divideBy10],
2268
+ [7, 'child_lock', tuya.valueConverter.lockUnlock],
2269
+ [35, null, tuya.valueConverter.errorOrBatteryLow],
2270
+ [36, 'frost_protection', tuya.valueConverter.onOff],
2271
+ [39, 'scale_protection', tuya.valueConverter.onOff],
2272
+ [47, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration2],
2273
+ ],
2274
+ },
2275
+ },
2234
2276
  {
2235
2277
  fingerprint: [
2236
2278
  {modelID: 'v90ladg\u0000', manufacturerName: '_TYST11_wv90ladg'},
@@ -3211,7 +3253,7 @@ module.exports = [
3211
3253
  model: 'TS0046',
3212
3254
  vendor: 'TuYa',
3213
3255
  description: 'Wireless switch with 6 buttons',
3214
- whiteLabel: [{vendor: 'LoraTap', model: 'TS0046'}],
3256
+ whiteLabel: [{vendor: 'LoraTap', model: 'SS9600ZB'}],
3215
3257
  fromZigbee: [fz.tuya_on_off_action, fz.battery],
3216
3258
  exposes: [e.battery(), e.action(['1_single', '1_double', '1_hold', '2_single', '2_double', '2_hold',
3217
3259
  '3_single', '3_double', '3_hold', '4_single', '4_double', '4_hold',
package/lib/tuya.js CHANGED
@@ -1254,6 +1254,13 @@ const valueConverter = {
1254
1254
  divideBy10: valueConverterBasic.divideBy(10),
1255
1255
  divideBy1000: valueConverterBasic.divideBy(1000),
1256
1256
  raw: valueConverterBasic.raw(),
1257
+ static: (value) => {
1258
+ return {
1259
+ from: (v) => {
1260
+ return value;
1261
+ },
1262
+ };
1263
+ },
1257
1264
  phaseVariant1: {
1258
1265
  from: (v) => {
1259
1266
  const buffer = Buffer.from(v, 'base64');
@@ -1295,7 +1302,7 @@ const valueConverter = {
1295
1302
  true0ElseFalse: {from: (v) => v === 0},
1296
1303
  selfTestResult: valueConverterBasic.lookup({'checking': 0, 'success': 1, 'failure': 2, 'others': 3}),
1297
1304
  lockUnlock: valueConverterBasic.lookup({'LOCK': true, 'UNLOCK': false}),
1298
- localTempCalibration: {
1305
+ localTempCalibration1: {
1299
1306
  from: (v) => {
1300
1307
  if (v > 55) v -= 0x100000000;
1301
1308
  return v / 10;
@@ -1306,6 +1313,13 @@ const valueConverter = {
1306
1313
  return v;
1307
1314
  },
1308
1315
  },
1316
+ localTempCalibration2: {
1317
+ from: (v) => v,
1318
+ to: (v) => {
1319
+ if (v < 0) return v + 0x100000000;
1320
+ return v;
1321
+ },
1322
+ },
1309
1323
  thermostatHolidayStartStop: {
1310
1324
  from: (v) => {
1311
1325
  const start = {
@@ -1462,6 +1476,13 @@ const valueConverter = {
1462
1476
  },
1463
1477
  inverse: {to: (v) => !v, from: (v) => !v},
1464
1478
  onOffNotStrict: {from: (v) => v ? 'ON' : 'OFF', to: (v) => v === 'ON'},
1479
+ errorOrBatteryLow: {
1480
+ from: (v) => {
1481
+ if (v === 0) return {'battery_low': false};
1482
+ if (v === 1) return {'battery_low': true};
1483
+ return {'error': v};
1484
+ },
1485
+ },
1465
1486
  };
1466
1487
 
1467
1488
  const tuyaTz = {
@@ -1521,6 +1542,7 @@ const tuyaTz = {
1521
1542
  'holiday_start_stop', 'holiday_temperature', 'comfort_temperature', 'eco_temperature', 'working_day',
1522
1543
  'week_schedule_programming', 'online', 'holiday_mode_date', 'schedule', 'schedule_monday', 'schedule_tuesday',
1523
1544
  'schedule_wednesday', 'schedule_thursday', 'schedule_friday', 'schedule_saturday', 'schedule_sunday', 'clear_fault',
1545
+ 'scale_protection', 'error',
1524
1546
  ],
1525
1547
  convertSet: async (entity, key, value, meta) => {
1526
1548
  // A set converter is only called once; therefore we need to loop
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.683",
3
+ "version": "14.0.684",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [