zigbee-herdsman-converters 14.0.498 → 14.0.499

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.
@@ -5872,19 +5872,9 @@ const converters = {
5872
5872
  return result;
5873
5873
  },
5874
5874
  },
5875
- xiaomi_curtain_acn002_position: {
5876
- cluster: 'genAnalogOutput',
5877
- type: ['attributeReport', 'readResponse'],
5878
- options: [exposes.options.invert_cover()],
5879
- convert: (model, msg, publish, options, meta) => {
5880
- let position = precisionRound(msg.data['presentValue'], 2);
5881
- position = options.invert_cover ? 100 - position : position;
5882
- return {position: position};
5883
- },
5884
- },
5885
5875
  xiaomi_curtain_acn002_status: {
5886
5876
  cluster: 'genMultistateOutput',
5887
- type: ['attributeReport', 'readResponse'],
5877
+ type: ['attributeReport'],
5888
5878
  convert: (model, msg, publish, options, meta) => {
5889
5879
  let running = false;
5890
5880
  const data = msg.data;
@@ -792,7 +792,7 @@ const converters = {
792
792
  },
793
793
  },
794
794
  light_onoff_brightness: {
795
- key: ['state', 'brightness', 'brightness_percent'],
795
+ key: ['state', 'brightness', 'brightness_percent', 'on_time'],
796
796
  options: [exposes.options.transition()],
797
797
  convertSet: async (entity, key, value, meta) => {
798
798
  const {message} = meta;
@@ -2439,6 +2439,20 @@ const converters = {
2439
2439
  } else {
2440
2440
  await entity.command('closuresWindowCovering', 'stop', {}, utils.getOptions(meta.mapped, entity));
2441
2441
  }
2442
+
2443
+ if (!['ZNCLDJ11LM', 'ZNJLBL01LM'].includes(meta.mapped.model)) {
2444
+ // The code below is originally added for ZNCLDJ11LM (Koenkk/zigbee2mqtt#4585).
2445
+ // However, in Koenkk/zigbee-herdsman-converters#4039 it was replaced by reading
2446
+ // directly from currentPositionLiftPercentage, so that device is excluded.
2447
+ // For ZNJLBL01LM, in Koenkk/zigbee-herdsman-converters#4163 the position is read
2448
+ // through onEvent each time the motor stops, so it becomes redundant, and the
2449
+ // device is excluded.
2450
+ // The code is left here to avoid breaking compatibility, ideally all devices using
2451
+ // this converter should be tested so the code can be adjusted/deleted.
2452
+
2453
+ // Xiaomi curtain does not send position update on stop, request this.
2454
+ await entity.read('genAnalogOutput', [0x0055]);
2455
+ }
2442
2456
  } else {
2443
2457
  const lookup = {'open': 100, 'close': 0, 'on': 100, 'off': 0};
2444
2458
 
package/devices/awox.js CHANGED
@@ -224,11 +224,30 @@ module.exports = [
224
224
  },
225
225
  ],
226
226
  },
227
+ {
228
+ type: 'Router', manufacturerName: 'AwoX', modelID: 'TLSR82xx', endpoints: [
229
+ {
230
+ ID: 1,
231
+ profileID: 260,
232
+ deviceID: 268,
233
+ inputClusters: [0, 3, 4, 5, 6, 8, 768, 4096, 64599, 10],
234
+ outputClusters: [6],
235
+ },
236
+ {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
237
+ {
238
+ ID: 3,
239
+ profileID: 4751,
240
+ deviceID: 268,
241
+ inputClusters: [65360, 65361],
242
+ outputClusters: [65360, 65361],
243
+ },
244
+ ],
245
+ },
227
246
  ],
228
247
  model: '33957',
229
248
  vendor: 'AwoX',
230
249
  description: 'LED light with color temperature',
231
- extend: extend.light_onoff_brightness_colortemp(),
250
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
232
251
  },
233
252
  {
234
253
  fingerprint: [
@@ -79,7 +79,8 @@ module.exports = [
79
79
  .withDescription('Mean radiator load for room calculated by gateway for load balancing purposes (-8000=undefined)')
80
80
  .withValueMin(-8000).withValueMax(2000),
81
81
  exposes.numeric('load_estimate', ea.STATE_GET)
82
- .withDescription('Load estimate on this radiator'),
82
+ .withDescription('Load estimate on this radiator')
83
+ .withValueMin(-8000).withValueMax(3600),
83
84
  exposes.binary('preheat_status', ea.STATE_GET, true, false)
84
85
  .withDescription('Specific for pre-heat running in Zigbee Weekly Schedule mode'),
85
86
  exposes.enum('adaptation_run_status', ea.STATE_GET, ['none', 'in_progress', 'found', 'lost'])
@@ -1,4 +1,5 @@
1
1
  const exposes = require('../lib/exposes');
2
+ const fz = require('../converters/fromZigbee');
2
3
  const tz = require('../converters/toZigbee');
3
4
  const e = exposes.presets;
4
5
  const ea = exposes.access;
@@ -47,4 +48,28 @@ module.exports = [
47
48
  vendor: 'Miboxer',
48
49
  extend: extend.light_onoff_brightness_colortemp_color({disableColorTempStartup: true, colorTempRange: [153, 500]}),
49
50
  },
51
+ {
52
+ fingerprint: [{manufacturerName: '_TZ3000_xwh1e22x'}],
53
+ model: 'FUT089Z',
54
+ vendor: 'MiBoxer',
55
+ description: 'RGB+CCT Remote',
56
+ fromZigbee: [fz.battery],
57
+ toZigbee: [],
58
+ exposes: [e.battery(), e.battery_voltage()],
59
+ configure: async (device, coordinatorEndpoint, logger) => {
60
+ const endpoint = device.getEndpoint(1);
61
+ await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
62
+ await endpoint.command('genGroups', 'miboxerSetZones', {zones: [
63
+ {zoneNum: 1, groupId: 101},
64
+ {zoneNum: 2, groupId: 102},
65
+ {zoneNum: 3, groupId: 103},
66
+ {zoneNum: 4, groupId: 104},
67
+ {zoneNum: 5, groupId: 105},
68
+ {zoneNum: 6, groupId: 106},
69
+ {zoneNum: 7, groupId: 107},
70
+ {zoneNum: 8, groupId: 108},
71
+ ]});
72
+ await endpoint.command('genBasic', 'tuyaSetup', {}, {disableDefaultResponse: true});
73
+ },
74
+ },
50
75
  ];
@@ -108,6 +108,15 @@ module.exports = [
108
108
  extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
109
109
  ota: ota.zigbeeOTA,
110
110
  },
111
+ {
112
+ zigbeeModel: ['915005996801', '915005996901'],
113
+ model: '915005996901',
114
+ vendor: 'Philips',
115
+ description: 'Hue white ambiance ceiling light Enrave L with Bluetooth',
116
+ meta: {turnsOffAtBrightness1: true},
117
+ extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
118
+ ota: ota.zigbeeOTA,
119
+ },
111
120
  {
112
121
  zigbeeModel: ['915005997001', '915005997101'],
113
122
  model: '915005997001',
package/devices/tuya.js CHANGED
@@ -167,7 +167,7 @@ module.exports = [
167
167
  description: 'Air quality sensor',
168
168
  fromZigbee: [fz.tuya_air_quality],
169
169
  toZigbee: [],
170
- exposes: [e.temperature(), e.humidity(), e.co2(), e.voc(), e.formaldehyd()],
170
+ exposes: [e.temperature(), e.humidity(), e.co2(), e.voc().withUnit('ppm'), e.formaldehyd()],
171
171
  },
172
172
  {
173
173
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_dwcarsat'}],
package/devices/xiaomi.js CHANGED
@@ -1348,9 +1348,16 @@ module.exports = [
1348
1348
  model: 'ZNJLBL01LM',
1349
1349
  description: 'Aqara roller shade companion E1',
1350
1350
  vendor: 'Xiaomi',
1351
- fromZigbee: [fz.xiaomi_curtain_acn002_position, fz.xiaomi_curtain_acn002_status, fz.xiaomi_curtain_position_tilt,
1352
- fz.ignore_basic_report, fz.aqara_opple],
1351
+ fromZigbee: [fz.xiaomi_curtain_position, fz.xiaomi_curtain_acn002_status, fz.ignore_basic_report, fz.aqara_opple],
1353
1352
  toZigbee: [tz.xiaomi_curtain_position_state, tz.xiaomi_curtain_acn002_battery, tz.xiaomi_curtain_acn002_charging_status],
1353
+ onEvent: async (type, data, device) => {
1354
+ if (type === 'message' && data.type === 'attributeReport' && data.cluster === 'genMultistateOutput' &&
1355
+ data.data.hasOwnProperty('presentValue') && data.data['presentValue'] > 1) {
1356
+ // Try to read the position after the motor stops, the device occasionally report wrong data right after stopping
1357
+ // Might need to add delay, seems to be working without one but needs more tests.
1358
+ await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
1359
+ }
1360
+ },
1354
1361
  exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET),
1355
1362
  exposes.binary('charging_status', ea.STATE_GET, true, false)
1356
1363
  .withDescription('The current charging status.'),
package/lib/exposes.js CHANGED
@@ -550,7 +550,7 @@ module.exports = {
550
550
  fan: () => new Fan(),
551
551
  flip_indicator_light: () => new Binary('flip_indicator_light', access.ALL, 'ON', 'OFF').withDescription('After turn on, the indicator light turns on while switch is off, and vice versa'),
552
552
  force: () => new Enum('force', access.STATE_SET, ['normal', 'open', 'close']).withDescription('Force the valve position'),
553
- formaldehyd: () => new Numeric('formaldehyd', access.STATE).withDescription('The measured formaldehyd value'),
553
+ formaldehyd: () => new Numeric('formaldehyd', access.STATE).withDescription('The measured formaldehyd value').withUnit('mg/m³'),
554
554
  gas: () => new Binary('gas', access.STATE, true, false).withDescription('Indicates whether the device detected gas'),
555
555
  hcho: () => new Numeric('hcho', access.STATE).withUnit('mg/m³').withDescription('Measured Hcho value'),
556
556
  holiday_temperature: () => new Numeric('holiday_temperature', access.STATE_SET).withUnit('°C').withDescription('Holiday temperature').withValueMin(0).withValueMax(30),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.498",
3
+ "version": "14.0.499",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [