zigbee-herdsman-converters 14.0.577 → 14.0.580

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.
@@ -7338,7 +7338,7 @@ const converters = {
7338
7338
  const dpValue = tuya.firstDpValue(msg, meta, 'SLUXZB');
7339
7339
  const dp = dpValue.dp;
7340
7340
  const value = tuya.getDataValue(dpValue);
7341
- const brightnesStateLookup = {'0': 'LOW', '1': 'MEDIUM', '2': 'HIGH'};
7341
+ const brightnesStateLookup = {'0': 'low', '1': 'middle', '2': 'high'};
7342
7342
  switch (dp) {
7343
7343
  case 2:
7344
7344
  return {illuminance_lux: value};
package/devices/adeo.js CHANGED
@@ -57,6 +57,13 @@ module.exports = [
57
57
  description: 'ENKI LEXMAN E27 LED white',
58
58
  extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
59
59
  },
60
+ {
61
+ zigbeeModel: ['ZBEK-14'],
62
+ model: 'IC-CDZFB2AC005HA-MZN',
63
+ vendor: 'ADEO',
64
+ description: 'ENKI LEXMAN E14 LED white',
65
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
66
+ },
60
67
  {
61
68
  zigbeeModel: ['ZBEK-5'],
62
69
  model: 'IST-CDZFB2AS007NA-MZN-01',
@@ -30,4 +30,12 @@ module.exports = [
30
30
  description: 'Smart Zigbee pro 12W A60 RGBCW bulb',
31
31
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
32
32
  },
33
+ {
34
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_hzy4rjz3'}],
35
+ model: 'AJ_RGBCCT_CTRL',
36
+ vendor: 'Ajax Online',
37
+ description: 'Smart Zigbee LED strip RGB+CCT',
38
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500], disableColorTempStartup: true}),
39
+ meta: {applyRedFix: true, enhancedHue: false},
40
+ },
33
41
  ];
package/devices/bitron.js CHANGED
@@ -136,7 +136,11 @@ module.exports = [
136
136
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
137
137
  await reporting.instantaneousDemand(endpoint);
138
138
  await reporting.currentSummDelivered(endpoint);
139
- await reporting.currentSummReceived(endpoint);
139
+ try {
140
+ await reporting.currentSummReceived(endpoint);
141
+ } catch (error) {
142
+ /* fails for some: https://github.com/Koenkk/zigbee2mqtt/issues/13258 */
143
+ }
140
144
  endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 10000, multiplier: 1});
141
145
  },
142
146
  },
@@ -0,0 +1,11 @@
1
+ const extend = require('../lib/extend');
2
+
3
+ module.exports = [
4
+ {
5
+ zigbeeModel: ['HA-ZM12/24-1K'],
6
+ model: 'HA-ZM12/24-1K',
7
+ vendor: 'Halemeier',
8
+ description: '1-channel smart receiver',
9
+ extend: extend.light_onoff_brightness(),
10
+ },
11
+ ];
@@ -266,6 +266,24 @@ module.exports = [
266
266
  // Read configuration values that are not sent periodically as well as current power (activePower).
267
267
  await endpoint.read('haElectricalMeasurement', ['activePower', 0xf000, 0xf001, 0xf002]);
268
268
  },
269
+ onEvent: async (type, data, device, options, state) => {
270
+ /**
271
+ * The DIN power consumption module loses the configure reporting
272
+ * after device restart/powerloss.
273
+ *
274
+ * We reconfigure the reporting at deviceAnnounce.
275
+ */
276
+ if (type === 'deviceAnnounce') {
277
+ for (const endpoint of device.endpoints) {
278
+ for (const c of endpoint.configuredReportings) {
279
+ await endpoint.configureReporting(c.cluster.name, [{
280
+ attribute: c.attribute.name, minimumReportInterval: c.minimumReportInterval,
281
+ maximumReportInterval: c.maximumReportInterval, reportableChange: c.reportableChange,
282
+ }]);
283
+ }
284
+ }
285
+ }
286
+ },
269
287
  },
270
288
  {
271
289
  zigbeeModel: ['Remote switch Wake up / Sleep'],
@@ -6,6 +6,30 @@ const e = exposes.presets;
6
6
  const ea = exposes.access;
7
7
 
8
8
  module.exports = [
9
+ {
10
+ fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3210_yvxjawlt'}],
11
+ model: 'SPP04G',
12
+ vendor: 'Mercator',
13
+ description: 'Ikuü Quad Power Point',
14
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory],
15
+ toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
16
+ exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
17
+ e.power().withEndpoint('left'), e.current().withEndpoint('left'),
18
+ e.voltage().withEndpoint('left').withAccess(ea.STATE), e.energy(),
19
+ exposes.enum('power_outage_memory', ea.ALL, ['on', 'off', 'restore'])
20
+ .withDescription('Recover state after power outage')],
21
+ endpoint: (device) => {
22
+ return {left: 1, right: 2};
23
+ },
24
+ meta: {multiEndpoint: true},
25
+ configure: async (device, coordinatorEndpoint, logger) => {
26
+ const endpoint = device.getEndpoint(1);
27
+ await endpoint.read('genBasic', ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
28
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
29
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
30
+ device.save();
31
+ },
32
+ },
9
33
  {
10
34
  fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3210_7jnk7l3k'}],
11
35
  model: 'SPP02GIP',
@@ -7,6 +7,22 @@ const extend = require('../lib/extend');
7
7
  const tuya = require('../lib/tuya');
8
8
 
9
9
  module.exports = [
10
+ {
11
+ fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_zrvxvydd'}],
12
+ model: 'FUT066Z',
13
+ vendor: 'MiBoxer',
14
+ description: 'RGB+CCT LED Downlight',
15
+ toZigbee: extend.light_onoff_brightness_colortemp_color().toZigbee.concat([
16
+ tz.tuya_do_not_disturb, tz.tuya_color_power_on_behavior]),
17
+ meta: {applyRedFix: true, enhancedHue: false},
18
+ fromZigbee: extend.light_onoff_brightness_colortemp_color().fromZigbee,
19
+ exposes: [e.light_brightness_colortemp_colorhs([153, 500]).removeFeature('color_temp_startup'),
20
+ exposes.binary('do_not_disturb', ea.STATE_SET, true, false)
21
+ .withDescription('Do not disturb mode'),
22
+ exposes.enum('color_power_on_behavior', ea.STATE_SET, ['initial', 'previous', 'cutomized'])
23
+ .withDescription('Power on behavior state'),
24
+ ],
25
+ },
10
26
  {
11
27
  fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3210_jicmoite'}],
12
28
  model: 'FUT039Z',
@@ -406,7 +406,7 @@ module.exports = [
406
406
  extend: hueExtend.light_onoff_brightness(),
407
407
  },
408
408
  {
409
- zigbeeModel: ['LCT026', '7602031P7', '7602031U7'],
409
+ zigbeeModel: ['LCT026', '7602031P7', '7602031U7', '7602031PU'],
410
410
  model: '7602031P7',
411
411
  vendor: 'Philips',
412
412
  description: 'Hue Go with Bluetooth',
@@ -1469,6 +1469,13 @@ module.exports = [
1469
1469
  description: 'Hue White and color ambiance Gradient Signe table lamp (white)',
1470
1470
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1471
1471
  },
1472
+ {
1473
+ zigbeeModel: ['915005987001'],
1474
+ model: '915005987001',
1475
+ vendor: 'Philips',
1476
+ description: 'Hue White and color ambiance Gradient Signe table lamp (black)',
1477
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1478
+ },
1472
1479
  {
1473
1480
  zigbeeModel: ['5060730P7_01', '5060730P7_02', '5060730P7_03', '5060730P7_04', '5060730P7_05'],
1474
1481
  model: '5060730P7',
@@ -2139,7 +2146,7 @@ module.exports = [
2139
2146
  extend: hueExtend.light_onoff_brightness_colortemp(),
2140
2147
  },
2141
2148
  {
2142
- zigbeeModel: ['929003047101', '929003045101_03'],
2149
+ zigbeeModel: ['929003047101', '929003045101_03', '929003045101_01', '929003045101_02'],
2143
2150
  model: '929003047101',
2144
2151
  vendor: 'Philips',
2145
2152
  description: 'Hue White ambiance Milliskin (round)',
@@ -149,4 +149,27 @@ module.exports = [
149
149
  .withDescription('Calibrates valve on next wakeup'),
150
150
  ],
151
151
  },
152
+ {
153
+ zigbeeModel: ['158-01'],
154
+ model: '158-01',
155
+ vendor: 'Plugwise',
156
+ description: 'Lisa zone thermostat',
157
+ fromZigbee: [fz.thermostat, fz.temperature, fz.battery],
158
+ toZigbee: [
159
+ tz.thermostat_system_mode,
160
+ tz.thermostat_occupied_heating_setpoint,
161
+ ],
162
+ configure: async (device, coordinatorEndpoint, logger) => {
163
+ const endpoint = device.getEndpoint(1);
164
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic', 'genPowerCfg', 'hvacThermostat']);
165
+ await reporting.batteryPercentageRemaining(endpoint);
166
+ await reporting.thermostatTemperature(endpoint);
167
+ },
168
+ exposes: [e.battery(),
169
+ exposes.climate()
170
+ .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5, ea.ALL)
171
+ .withLocalTemperature(ea.STATE)
172
+ .withSystemMode(['off', 'auto'], ea.ALL),
173
+ ],
174
+ },
152
175
  ];
@@ -17,6 +17,7 @@ module.exports = [
17
17
  exposes: [],
18
18
  },
19
19
  {
20
+ zigbeeModel: ['MOT-C1Z06C\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'],
20
21
  fingerprint: [{manufId: 4368, endpoints: [{ID: 1, profileID: 260, deviceID: 512,
21
22
  inputClusters: [0, 3, 4, 5, 6, 8, 10, 21, 256, 64544, 64545], outputClusters: [3, 64544]}]}],
22
23
  model: 'NSAV061',
@@ -8,4 +8,11 @@ module.exports = [
8
8
  description: 'addZ white + colour',
9
9
  extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
10
10
  },
11
+ {
12
+ zigbeeModel: ['RDM-35144001'],
13
+ model: '35144001',
14
+ vendor: 'Rademacher',
15
+ description: 'addZ white + colour',
16
+ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555]}),
17
+ },
11
18
  ];
@@ -137,13 +137,21 @@ module.exports = [
137
137
  model: 'E11-N1EA',
138
138
  vendor: 'Sengled',
139
139
  description: 'Element plus color (A19)',
140
- extend: extend.light_onoff_brightness_colortemp_color({noConfigure: true}),
140
+ fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([fz.metering]),
141
+ toZigbee: extend.light_onoff_brightness().toZigbee,
141
142
  ota: ota.zigbeeOTA,
142
143
  configure: async (device, coordinatorEndpoint, logger) => {
143
144
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
144
145
  device.powerSource = 'Mains (single phase)';
145
146
  device.save();
147
+
148
+ const endpoint = device.getEndpoint(1);
149
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
150
+ await reporting.readMeteringMultiplierDivisor(endpoint);
151
+ await reporting.currentSummDelivered(endpoint);
152
+ await reporting.instantaneousDemand(endpoint);
146
153
  },
154
+ exposes: extend.light_onoff_brightness().exposes.concat([e.power(), e.energy()]),
147
155
  },
148
156
  {
149
157
  zigbeeModel: ['E11-U2E'],
package/devices/tuya.js CHANGED
@@ -594,7 +594,8 @@ module.exports = [
594
594
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_grnwgegn'},
595
595
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_nehayyhx'},
596
596
  {modelID: 'TS0501B', manufacturerName: '_TZ3210_wuheofsg'},
597
- {modelID: 'TS0501B', manufacturerName: '_TZ3210_e5t9bfdv'}],
597
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_e5t9bfdv'},
598
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_19qb27da'}],
598
599
  model: 'TS0501B',
599
600
  description: 'Zigbee light',
600
601
  vendor: 'TuYa',
@@ -981,6 +982,7 @@ module.exports = [
981
982
  {modelID: 'TS0502B', manufacturerName: '_TZ3210_2p6wbry3'},
982
983
  {modelID: 'TS0502B', manufacturerName: '_TZ3210_qamcypen'},
983
984
  {modelID: 'TS0502B', manufacturerName: '_TZ3210_zdrhqmo0'},
985
+ {modelID: 'TS0502B', manufacturerName: '_TZ3210_2cjfbpy0'},
984
986
  ],
985
987
  model: 'TS0502B',
986
988
  vendor: 'TuYa',
@@ -2520,7 +2522,7 @@ module.exports = [
2520
2522
  },
2521
2523
  {
2522
2524
  fingerprint: [{modelID: 'TS004F', manufacturerName: '_TZ3000_4fjiwweb'}, {modelID: 'TS004F', manufacturerName: '_TZ3000_uri7ongn'},
2523
- {modelID: 'TS004F', manufacturerName: '_TZ3000_ixla93vd'}],
2525
+ {modelID: 'TS004F', manufacturerName: '_TZ3000_ixla93vd'}, {modelID: 'TS004F', manufacturerName: '_TZ3000_qja6nq5z'}],
2524
2526
  model: 'ERS-10TZBVK-AA',
2525
2527
  vendor: 'TuYa',
2526
2528
  description: 'Smart knob',
package/devices/xiaomi.js CHANGED
@@ -40,6 +40,21 @@ const preventReset = async (type, data, device) => {
40
40
  };
41
41
 
42
42
  module.exports = [
43
+ {
44
+ zigbeeModel: ['lumi.flood.acn001'],
45
+ model: 'SJCGQ13LM',
46
+ vendor: 'Xiaomi',
47
+ description: 'Aqara E1 water leak sensor',
48
+ fromZigbee: [fz.ias_water_leak_alarm_1, fz.aqara_opple, fz.battery],
49
+ toZigbee: [],
50
+ exposes: [e.water_leak(), e.battery(), e.battery_low(), e.battery_voltage(), e.device_temperature(), e.power_outage_count(false)],
51
+ meta: {battery: {voltageToPercentage: '3V_2850_3200'}},
52
+ configure: async (device, coordinatorEndpoint, logger) => {
53
+ const endpoint = device.getEndpoint(1);
54
+ await endpoint.read('genPowerCfg', ['batteryVoltage']);
55
+ },
56
+ ota: ota.zigbeeOTA,
57
+ },
43
58
  {
44
59
  zigbeeModel: ['lumi.magnet.acn001'],
45
60
  model: 'MCCGQ14LM',
package/lib/ota/ubisys.js CHANGED
@@ -21,22 +21,25 @@ async function getImageMeta(current, logger, device) {
21
21
 
22
22
  imageRegex.lastIndex = 0; // reset (global) regex for next exec to match from the beginning again
23
23
  let imageMatch = imageRegex.exec(firmwarePageHtml);
24
+ let highestMatch = null;
24
25
  while (imageMatch != null) {
25
26
  logger.debug(`OTA ubisys: image found: ${imageMatch[0]}`);
26
27
  if (parseInt(imageMatch[1], 16) === imageType &&
27
28
  parseInt(imageMatch[2], 16) <= hardwareVersion && hardwareVersion <= parseInt(imageMatch[3], 16)) {
28
- break;
29
+ if (highestMatch === null || parseInt(highestMatch[4], 16) < parseInt(imageMatch[4], 16)) {
30
+ highestMatch = imageMatch;
31
+ }
29
32
  }
30
33
  imageMatch = imageRegex.exec(firmwarePageHtml);
31
34
  }
32
- assert(imageMatch !== null,
35
+ assert(highestMatch !== null,
33
36
  `No image available for imageType '0x${imageType.toString(16)}' with hardware version ${hardwareVersion}`);
34
37
 
35
38
  return {
36
- hardwareVersionMin: parseInt(imageMatch[2], 16),
37
- hardwareVersionMax: parseInt(imageMatch[3], 16),
38
- fileVersion: parseInt(imageMatch[4], 16),
39
- url: url.resolve(firmwareHtmlPageUrl, imageMatch[0]),
39
+ hardwareVersionMin: parseInt(highestMatch[2], 16),
40
+ hardwareVersionMax: parseInt(highestMatch[3], 16),
41
+ fileVersion: parseInt(highestMatch[4], 16),
42
+ url: url.resolve(firmwareHtmlPageUrl, highestMatch[0]),
40
43
  };
41
44
  }
42
45
 
package/lib/xiaomi.js CHANGED
@@ -191,10 +191,7 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
191
191
  }
192
192
  break;
193
193
  case '11':
194
- if (['JT-BZ-01AQ/A', 'QBKG25LM', 'ZNLDP13LM'].includes(model.model)) {
195
- // We don't know what the value means for these devices.
196
- // https://github.com/Koenkk/zigbee2mqtt/issues/12451
197
- } else {
194
+ if (['RTCGQ11LM'].includes(model.model)) {
198
195
  payload.illuminance = calibrateAndPrecisionRoundOptions(value, options, 'illuminance');
199
196
  // DEPRECATED: remove illuminance_lux here.
200
197
  payload.illuminance_lux = calibrateAndPrecisionRoundOptions(value, options, 'illuminance_lux');
@@ -241,6 +238,8 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
241
238
  } else if (['SJCGQ11LM'].includes(model.model)) {
242
239
  // Ignore the message. It seems not reliable. See discussion here https://github.com/Koenkk/zigbee2mqtt/issues/12018
243
240
  // payload.water_leak = value === 1;
241
+ } else if (['SJCGQ13LM'].includes(model.model)) {
242
+ payload.water_leak = value === 1;
244
243
  } else if (['JTYJ-GD-01LM/BW'].includes(model.model)) {
245
244
  payload.smoke_density = value;
246
245
  } else if (['GZCGQ01LM'].includes(model.model)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.577",
3
+ "version": "14.0.580",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -38,7 +38,7 @@
38
38
  "buffer-crc32": "^0.2.13",
39
39
  "https-proxy-agent": "^5.0.1",
40
40
  "tar-stream": "^2.2.0",
41
- "zigbee-herdsman": "^0.14.45"
41
+ "zigbee-herdsman": "^0.14.46"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",