zigbee-herdsman-converters 15.0.112 → 15.0.113

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.
@@ -5264,16 +5264,20 @@ const converters = {
5264
5264
  return payload;
5265
5265
  },
5266
5266
  },
5267
- legrand_zlgp15: {
5267
+ legrand_greenpower_254: {
5268
5268
  cluster: 'greenPower',
5269
5269
  type: ['commandNotification', 'commandCommisioningNotification'],
5270
5270
  convert: (model, msg, publish, options, meta) => {
5271
5271
  const commandID = msg.data.commandID;
5272
5272
  if (hasAlreadyProcessedMessage(msg, model, msg.data.frameCounter, `${msg.device.ieeeAddr}_${commandID}`)) return;
5273
5273
  if (commandID === 224) return;
5274
- const lookup = {0x14: 'press_1', 0x15: 'press_2', 0x16: 'press_3', 0x17: 'press_4'};
5274
+ const lookup = {
5275
+ 0x10: 'home_arrival', 0x11: 'home_departure', // ZLGP14
5276
+ 0x12: 'daytime_day', 0x13: 'daytime_night', // ZLGP16, yes these commandIDs are lower than ZLGP15s'
5277
+ 0x14: 'press_1', 0x15: 'press_2', 0x16: 'press_3', 0x17: 'press_4', // ZLGP15
5278
+ };
5275
5279
  if (!lookup.hasOwnProperty(commandID)) {
5276
- meta.logger.error(`ZLGP15: missing command '${commandID}'`);
5280
+ meta.logger.error(`GreenPower_254: missing command '${commandID}'`);
5277
5281
  } else {
5278
5282
  return {action: lookup[commandID]};
5279
5283
  }
@@ -82,7 +82,7 @@ module.exports = [
82
82
  model: 'ZB-SW01',
83
83
  vendor: 'eWeLink',
84
84
  description: 'Smart light switch - 1 gang',
85
- extend: extend.switch(),
85
+ extend: extend.switch({disablePowerOnBehavior: true}),
86
86
  fromZigbee: [fz.on_off_skip_duplicate_transaction],
87
87
  onEvent: async (type, data, device) => {
88
88
  device.skipDefaultResponse = true;
package/devices/ge.js CHANGED
@@ -78,12 +78,17 @@ module.exports = [
78
78
  model: '45857GE',
79
79
  vendor: 'GE',
80
80
  description: 'ZigBee in-wall smart dimmer',
81
+ exposes: extend.light_onoff_brightness({noConfigure: true}).exposes.concat([e.energy(), e.power()]),
82
+ fromZigbee: extend.light_onoff_brightness({noConfigure: true}).fromZigbee.concat([fz.metering]),
81
83
  extend: extend.light_onoff_brightness({noConfigure: true}),
82
84
  configure: async (device, coordinatorEndpoint, logger) => {
83
85
  await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
84
86
  const endpoint = device.getEndpoint(1);
85
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
87
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
86
88
  await reporting.onOff(endpoint);
89
+ await reporting.instantaneousDemand(endpoint);
90
+ await reporting.currentSummDelivered(endpoint);
91
+ endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 10000, multiplier: 1});
87
92
  },
88
93
  },
89
94
  {
@@ -385,12 +385,16 @@ module.exports = [
385
385
  },
386
386
  {
387
387
  fingerprint: [{modelID: 'GreenPower_254', ieeeAddr: /^0x00000000005.....$/}],
388
- model: 'ZLGP15',
388
+ model: 'ZLGP14/ZLGP15/ZLGP16',
389
389
  vendor: 'Legrand',
390
- description: 'Wireless and batteryless 4 scenes control',
391
- fromZigbee: [fz.legrand_zlgp15],
390
+ description: 'Wireless and batteryless scenario switch (home arrival/departure, 1-4 switches, daytime day/night)',
391
+ fromZigbee: [fz.legrand_greenpower_254],
392
392
  toZigbee: [],
393
- exposes: [e.action(['press_1', 'press_2', 'press_3', 'press_4'])],
393
+ exposes: [e.action([
394
+ 'home_arrival', 'home_departure', // ZLGP14
395
+ 'press_1', 'press_2', 'press_3', 'press_4', // ZLGP15
396
+ 'daytime_day', 'daytime_night', // ZLGP16
397
+ ])],
394
398
  },
395
399
  {
396
400
  fingerprint: [{modelID: 'GreenPower_2', ieeeAddr: /^0x00000000005.....$/}],
package/devices/tuya.js CHANGED
@@ -901,7 +901,7 @@ const fzLocal = {
901
901
 
902
902
  // Wait 5 seconds before reporting a 0 value as this could be an invalid measurement.
903
903
  // https://github.com/Koenkk/zigbee2mqtt/issues/16709#issuecomment-1509599046
904
- if (['_TZ3000_gvn91tmx', '_TZ3000_amdymr7l', '_TZ3000_typdpbpg', '_TZ3000_hdopuwv6'].includes(meta.device.manufacturerName)) {
904
+ if (result && ['_TZ3000_gvn91tmx', '_TZ3000_amdymr7l', '_TZ3000_typdpbpg', '_TZ3000_hdopuwv6'].includes(meta.device.manufacturerName)) {
905
905
  for (const key of ['power', 'current', 'voltage']) {
906
906
  if (key in result) {
907
907
  const value = result[key];
@@ -1089,7 +1089,7 @@ module.exports = [
1089
1089
  description: 'Smart air house keeper',
1090
1090
  fromZigbee: [fz.tuya_air_quality],
1091
1091
  toZigbee: [],
1092
- exposes: [e.temperature(), e.humidity(), e.co2(), e.voc().withUnit('ppm'), e.formaldehyd().withUnit('µg/m³'),
1092
+ exposes: [e.temperature(), e.humidity(), e.co2(), e.voc().withUnit('ppm'), e.formaldehyd().withUnit('µg/m³'),
1093
1093
  e.pm25().withValueMin(0).withValueMax(999).withValueStep(1)],
1094
1094
  },
1095
1095
  {
@@ -1259,8 +1259,8 @@ module.exports = [
1259
1259
  model: 'TS0505B_1',
1260
1260
  vendor: 'TuYa',
1261
1261
  description: 'Zigbee RGB+CCT light',
1262
- whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMD4106W-RGB-ZB'},
1263
- {vendor: 'TuYa', model: 'A5C-21F7-01'}, {vendor: 'Mercator Ikuü', model: 'S9E27LED9W-RGB-Z'},
1262
+ whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMD4106W-RGB-ZB'},
1263
+ {vendor: 'TuYa', model: 'A5C-21F7-01'}, {vendor: 'Mercator Ikuü', model: 'S9E27LED9W-RGB-Z'},
1264
1264
  {vendor: 'Aldi', model: 'L122CB63H11A9.0W', description: 'LIGHTWAY smart home LED-lamp - bulb'},
1265
1265
  {vendor: 'Lidl', model: '14153706L', description: 'Livarno smart LED ceiling light'},
1266
1266
  {vendor: 'Zemismart', model: 'LXZB-ZB-09A', description: 'Zemismart LED Surface Mounted Downlight 9W RGBW'},
@@ -1443,7 +1443,7 @@ module.exports = [
1443
1443
  model: 'TS0202',
1444
1444
  vendor: 'TuYa',
1445
1445
  description: 'Motion sensor',
1446
- whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMA02P'},
1446
+ whiteLabel: [{vendor: 'Mercator Ikuü', model: 'SMA02P'},
1447
1447
  {vendor: 'TuYa', model: 'TY-ZPR06'},
1448
1448
  {vendor: 'Tesla Smart', model: 'TS0202'},
1449
1449
  tuya.whitelabel('MiBoxer', 'PIR1-ZB', 'PIR sensor', ['_TZ3040_wqmtjsyk']),
@@ -1527,13 +1527,20 @@ module.exports = [
1527
1527
  exposes: [e.water_leak(), e.battery_low(), e.battery()],
1528
1528
  },
1529
1529
  {
1530
- fingerprint: tuya.fingerprint('TS0101', ['_TYZB01_ijihzffk', '_TZ3210_tfxwxklq']),
1530
+ fingerprint: tuya.fingerprint('TS0101', ['_TYZB01_ijihzffk', '_TZ3210_tfxwxklq', '_TZ3210_2dfy6tol']),
1531
1531
  model: 'TS0101',
1532
1532
  vendor: 'TuYa',
1533
1533
  description: 'Zigbee Socket',
1534
- whiteLabel: [{vendor: 'Larkkey', model: 'PS080'}, {vendor: 'Mercator', model: 'SPBS01G'}],
1534
+ whiteLabel: [
1535
+ {vendor: 'Larkkey', model: 'PS080'}, {vendor: 'Mercator', model: 'SPBS01G'},
1536
+ tuya.whitelabel('Mercator', 'SISW01', 'Ikuü inline switch', ['_TZ3210_2dfy6tol']),
1537
+ ],
1535
1538
  extend: tuya.extend.switch(),
1536
- meta: {disableDefaultResponse: true},
1539
+ configure: async (device, coordinatorEndpoint, logger) => {
1540
+ const endpoint = device.getEndpoint(1);
1541
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
1542
+ await reporting.onOff(endpoint);
1543
+ },
1537
1544
  },
1538
1545
  {
1539
1546
  fingerprint: [{modelID: 'TS0108', manufacturerName: '_TYZB01_7yidyqxd'}],
@@ -1583,7 +1590,7 @@ module.exports = [
1583
1590
  {vendor: 'Earda', model: 'EDM-1ZAA-EU'},
1584
1591
  {vendor: 'Earda', model: 'EDM-1ZAB-EU'},
1585
1592
  {vendor: 'Earda', model: 'EDM-1ZBA-EU'},
1586
- {vendor: 'Mercator Ikuü', model: 'SSWD01'},
1593
+ {vendor: 'Mercator Ikuü', model: 'SSWD01'},
1587
1594
  {vendor: 'Moes', model: 'ZS-USD'},
1588
1595
  {vendor: 'Moes', model: 'EDM-1ZBB-EU'},
1589
1596
  ],
@@ -2020,8 +2027,8 @@ module.exports = [
2020
2027
  vendor: 'TuYa',
2021
2028
  description: 'Light controller',
2022
2029
  whiteLabel: [
2023
- {vendor: 'Mercator Ikuü', model: 'SMI7040', description: 'Ford Batten Light'},
2024
- {vendor: 'Mercator Ikuü', model: 'SMD9300', description: 'Donovan Panel Light'},
2030
+ {vendor: 'Mercator Ikuü', model: 'SMI7040', description: 'Ford Batten Light'},
2031
+ {vendor: 'Mercator Ikuü', model: 'SMD9300', description: 'Donovan Panel Light'},
2025
2032
  tuya.whitelabel('Aldi', 'F122SB62H22A4.5W', 'LIGHTWAY smart home LED-lamp - filament', ['_TZ3000_g1glzzfk']),
2026
2033
  tuya.whitelabel('Miboxer', 'FUT035Z', 'Dual white LED controller', ['_TZ3210_frm6149r', '_TZ3210_jtifm80b', '_TZ3210_xwqng7ol']),
2027
2034
  tuya.whitelabel('Lidl', '14156408L', 'Livarno Lux smart LED ceiling light', ['_TZ3210_c2iwpxf1']),
@@ -2671,7 +2678,7 @@ module.exports = [
2671
2678
  .withRunningState(['idle', 'heat'], ea.STATE),
2672
2679
  e.auto_lock(), e.away_mode(), e.away_preset_days(), e.boost_time(), e.comfort_temperature(), e.eco_temperature(), e.force(),
2673
2680
  e.max_temperature().withValueMin(16).withValueMax(70), e.min_temperature(), e.away_preset_temperature(),
2674
- exposes.composite('programming_mode', 'programming_mode', ea.STATE).withDescription('Schedule MODE - In this mode, ' +
2681
+ exposes.composite('programming_mode', 'programming_mode', ea.STATE).withDescription('Schedule MODE ⏱ - In this mode, ' +
2675
2682
  'the device executes a preset week programming temperature time and temperature.')
2676
2683
  .withFeature(e.week())
2677
2684
  .withFeature(exposes.text('workdays_schedule', ea.STATE_SET))
@@ -2784,9 +2791,9 @@ module.exports = [
2784
2791
  ' by switching the heating off. To achieve this, the valve is closed fully. To activate the '+
2785
2792
  'heating stop, the device display "HS", press the pair button to cancel.'),
2786
2793
  tuya.exposes.frostProtection('When Anti-Freezing function is activated, the temperature in the house is kept '+
2787
- 'at 8 °C, the device display "AF".press the pair button to cancel.'),
2794
+ 'at 8 °C, the device display "AF".press the pair button to cancel.'),
2788
2795
  exposes.numeric('boost_timeset_countdown', ea.STATE_SET).withUnit('second').withDescription('Setting '+
2789
- 'minimum 0 - maximum 465 seconds boost time. The boost () function is activated. The remaining '+
2796
+ 'minimum 0 - maximum 465 seconds boost time. The boost (♨) function is activated. The remaining '+
2790
2797
  'time for the function will be counted down in seconds ( 465 to 0 ).').withValueMin(0).withValueMax(465),
2791
2798
  e.holiday_temperature().withValueMin(5).withValueMax(30),
2792
2799
  exposes.text('holiday_start_stop', ea.STATE_SET).withDescription('The holiday mode will automatically start ' +
@@ -2923,7 +2930,7 @@ module.exports = [
2923
2930
  'two weeks. It will run for 30 seconds per time with the screen displaying "Ad", then return to its normal working state ' +
2924
2931
  'again.'),
2925
2932
  exposes.binary('frost_protection', ea.STATE_SET, 'ON', 'OFF').withDescription('When the room temperature is lower than ' +
2926
- '5 °C, the valve opens; when the temperature rises to 8 °C, the valve closes.'),
2933
+ '5 °C, the valve opens; when the temperature rises to 8 °C, the valve closes.'),
2927
2934
  exposes.numeric('error', ea.STATE).withDescription('If NTC is damaged, "Er" will be on the TRV display.'),
2928
2935
  ],
2929
2936
  meta: {
@@ -3013,9 +3020,9 @@ module.exports = [
3013
3020
  .withLocalTemperature(ea.STATE).withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
3014
3021
  .withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
3015
3022
  .withPreset(['auto', 'manual', 'off', 'on'],
3016
- 'MANUAL MODE - In this mode, the device executes manual temperature setting. ' +
3023
+ 'MANUAL MODE ☝ - In this mode, the device executes manual temperature setting. ' +
3017
3024
  'When the set temperature is lower than the "minimum temperature", the valve is closed (forced closed). ' +
3018
- 'AUTO MODE - In this mode, the device executes a preset week programming temperature time and temperature. ' +
3025
+ 'AUTO MODE ⏱ - In this mode, the device executes a preset week programming temperature time and temperature. ' +
3019
3026
  'ON - In this mode, the thermostat stays open ' +
3020
3027
  'OFF - In this mode, the thermostat stays closed')
3021
3028
  .withSystemMode(['auto', 'heat', 'off'], ea.STATE)
@@ -3023,7 +3030,7 @@ module.exports = [
3023
3030
  ...tuya.exposes.scheduleAllDays(ea.STATE_SET, 'HH:MM/C HH:MM/C HH:MM/C HH:MM/C'),
3024
3031
  exposes.binary('boost_heating', ea.STATE_SET, 'ON', 'OFF')
3025
3032
  .withDescription('Boost Heating: press and hold "+" for 3 seconds, ' +
3026
- 'the device will enter the boost heating mode, and the ▷╵◁ will flash. The countdown will be displayed in the APP'),
3033
+ 'the device will enter the boost heating mode, and the ▷╵◁ will flash. The countdown will be displayed in the APP'),
3027
3034
  exposes.numeric('boost_time', ea.STATE_SET).withUnit('min').withDescription('Countdown in minutes')
3028
3035
  .withValueMin(0).withValueMax(1000),
3029
3036
  ],
@@ -3605,7 +3612,7 @@ module.exports = [
3605
3612
  {vendor: 'Vrey', model: 'VR-X712U-0013'},
3606
3613
  {vendor: 'TUYATEC', model: 'GDKES-01TZXD'},
3607
3614
  {vendor: 'Lonsonho', model: 'QS-Zigbee-S05-L', description: '1 gang smart switch module without neutral wire'},
3608
- {vendor: 'Mercator Ikuü', model: 'SSW01'},
3615
+ {vendor: 'Mercator Ikuü', model: 'SSW01'},
3609
3616
  ],
3610
3617
  configure: async (device, coordinatorEndpoint, logger) => {
3611
3618
  await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
@@ -3733,7 +3740,7 @@ module.exports = [
3733
3740
  return {'l1': 1, 'l2': 2, 'l3': 3, 'l4': 4};
3734
3741
  },
3735
3742
  whiteLabel: [{vendor: 'TUYATEC', model: 'GDKES-04TZXD'}, {vendor: 'Vizo', model: 'VZ-222S'},
3736
- {vendor: 'MakeGood', model: 'MG-ZG04W/B/G'}, {vendor: 'Mercator Ikuü', model: 'SSW04'}],
3743
+ {vendor: 'MakeGood', model: 'MG-ZG04W/B/G'}, {vendor: 'Mercator Ikuü', model: 'SSW04'}],
3737
3744
  meta: {multiEndpoint: true},
3738
3745
  configure: async (device, coordinatorEndpoint, logger) => {
3739
3746
  await tuya.configureMagicPacket(device, coordinatorEndpoint, logger);
@@ -3975,13 +3982,13 @@ module.exports = [
3975
3982
  .withDescription('Antifreeze function'),
3976
3983
  exposes.binary('factory_reset', ea.STATE_SET, 'ON', 'OFF')
3977
3984
  .withDescription('Resets all settings to default. Doesn\'t unpair device.'),
3978
- exposes.numeric('heating_temp_limit', ea.STATE_SET).withUnit('°C').withValueMax(60)
3985
+ exposes.numeric('heating_temp_limit', ea.STATE_SET).withUnit('°C').withValueMax(60)
3979
3986
  .withValueMin(5).withValueStep(1).withPreset('default', 35, 'Default value')
3980
3987
  .withDescription('Heating temperature limit'),
3981
- exposes.numeric('deadzone_temperature', ea.STATE_SET).withUnit('°C').withValueMax(9.5)
3988
+ exposes.numeric('deadzone_temperature', ea.STATE_SET).withUnit('°C').withValueMax(9.5)
3982
3989
  .withValueMin(0.5).withValueStep(0.5).withPreset('default', 1, 'Default value')
3983
3990
  .withDescription('The delta between local_temperature and current_heating_setpoint to trigger Heat'),
3984
- exposes.numeric('upper_temp', ea.STATE_SET).withUnit('°C').withValueMax(95)
3991
+ exposes.numeric('upper_temp', ea.STATE_SET).withUnit('°C').withValueMax(95)
3985
3992
  .withValueMin(35).withValueStep(1).withPreset('default', 60, 'Default value'),
3986
3993
  ],
3987
3994
  onEvent: tuya.onEventSetTime,
@@ -4106,9 +4113,9 @@ module.exports = [
4106
4113
  'msTemperatureMeasurement', 'msIlluminanceMeasurement', 'msRelativeHumidity', 'manuSpecificTuya_2']);
4107
4114
  },
4108
4115
  exposes: [e.temperature(), e.humidity(), e.battery(), e.illuminance(), e.illuminance_lux(),
4109
- exposes.numeric('alarm_temperature_max', ea.STATE_SET).withUnit('°C').withDescription('Alarm temperature max')
4116
+ exposes.numeric('alarm_temperature_max', ea.STATE_SET).withUnit('°C').withDescription('Alarm temperature max')
4110
4117
  .withValueMin(-20).withValueMax(80),
4111
- exposes.numeric('alarm_temperature_min', ea.STATE_SET).withUnit('°C').withDescription('Alarm temperature min')
4118
+ exposes.numeric('alarm_temperature_min', ea.STATE_SET).withUnit('°C').withDescription('Alarm temperature min')
4112
4119
  .withValueMin(-20).withValueMax(80),
4113
4120
  exposes.numeric('alarm_humidity_max', ea.STATE_SET).withUnit('%').withDescription('Alarm humidity max')
4114
4121
  .withValueMin(0).withValueMax(100),
@@ -4145,7 +4152,7 @@ module.exports = [
4145
4152
  ],
4146
4153
  },
4147
4154
  {
4148
- fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lu01t0zl', '_TZE200_vrfecyku']),
4155
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lu01t0zl', '_TZE200_vrfecyku', '_TZE200_ypprdwsl']),
4149
4156
  model: 'MIR-HE200-TY',
4150
4157
  vendor: 'TuYa',
4151
4158
  description: 'Human presence sensor with fall function',
@@ -4444,9 +4451,9 @@ module.exports = [
4444
4451
  exposes.enum('temperature_unit_convert', ea.STATE_SET, ['celsius', 'fahrenheit']).withDescription('Current display unit'),
4445
4452
  exposes.enum('temperature_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
4446
4453
  .withDescription('Temperature alarm status'),
4447
- exposes.numeric('max_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
4454
+ exposes.numeric('max_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
4448
4455
  .withDescription('Alarm temperature max'),
4449
- exposes.numeric('min_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
4456
+ exposes.numeric('min_temperature', ea.STATE_SET).withUnit('°C').withValueMin(-20).withValueMax(60)
4450
4457
  .withDescription('Alarm temperature min'),
4451
4458
  exposes.enum('humidity_alarm', ea.STATE, ['canceled', 'lower_alarm', 'upper_alarm'])
4452
4459
  .withDescription('Humidity alarm status'),
@@ -5133,4 +5140,37 @@ module.exports = [
5133
5140
  tuya.whitelabel('Homeetec', '37022173', 'Curtain/blind switch with 2 Gang switch', ['_TZE200_5nldle7w']),
5134
5141
  ],
5135
5142
  },
5143
+ {
5144
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_bcusnqt8'}],
5145
+ model: 'SPM01',
5146
+ vendor: 'TuYa',
5147
+ description: 'Smart energy monitor for 1P+N system',
5148
+ fromZigbee: [tuya.fz.datapoints],
5149
+ toZigbee: [tuya.tz.datapoints],
5150
+ configure: tuya.configureMagicPacket,
5151
+ exposes: [e.voltage(), e.power(), e.current(),
5152
+ // Change the description according to the specifications of the device
5153
+ e.energy().withDescription('Total forward active energy'),
5154
+ e.produced_energy().withDescription('Total reverse active energy'),
5155
+ ],
5156
+ meta: {
5157
+ tuyaDatapoints: [
5158
+ [1, 'energy', tuya.valueConverter.divideBy100],
5159
+ [2, 'produced_energy', tuya.valueConverter.divideBy100],
5160
+ [6, null, {
5161
+ from: (v) => {
5162
+ return {
5163
+ voltage: v.readUint16BE(0)/10,
5164
+ current: ((v.readUint8(2)<<16)+(v.readUint8(3)<<8)+v.readUint8(4))/1000,
5165
+ power: ((v.readUint8(5)<<16)+(v.readUint8(6)<<8)+v.readUint8(7)),
5166
+ };
5167
+ },
5168
+ }],
5169
+ [6, 'voltage', tuya.valueConverter.raw],
5170
+ [6, 'current', tuya.valueConverter.raw],
5171
+ [6, 'power', tuya.valueConverter.raw],
5172
+ // [9,'',tuya.valueConverter.raw] // Unknown / datatype=5 (bitmap)
5173
+ ],
5174
+ },
5175
+ },
5136
5176
  ];
package/devices/xiaomi.js CHANGED
@@ -1759,6 +1759,8 @@ module.exports = [
1759
1759
  await endpoint.read('genPowerCfg', ['batteryVoltage']);
1760
1760
  await endpoint.read('aqaraOpple', [0x0102], {manufacturerCode: 0x115f});
1761
1761
  await endpoint.read('aqaraOpple', [0x010c], {manufacturerCode: 0x115f});
1762
+ // This cluster is not discovered automatically and needs to be explicitly attached to enable OTA
1763
+ utils.attachOutputCluster(device, 'genOta');
1762
1764
  },
1763
1765
  ota: ota.zigbeeOTA,
1764
1766
  },
package/lib/ota/common.js CHANGED
@@ -1,6 +1,6 @@
1
1
  const crypto = require('crypto');
2
2
  const upgradeFileIdentifier = Buffer.from([0x1E, 0xF1, 0xEE, 0x0B]);
3
- const HttpsProxyAgent = require('https-proxy-agent');
3
+ const {HttpsProxyAgent} = require('https-proxy-agent');
4
4
  const assert = require('assert');
5
5
  const crc32 = require('buffer-crc32');
6
6
  const maxTimeout = 2147483647; // +- 24 days
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "15.0.112",
3
+ "version": "15.0.113",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -36,9 +36,9 @@
36
36
  "dependencies": {
37
37
  "axios": "^1.4.0",
38
38
  "buffer-crc32": "^0.2.13",
39
- "https-proxy-agent": "^5.0.1",
39
+ "https-proxy-agent": "^6.1.0",
40
40
  "tar-stream": "^3.0.0",
41
- "zigbee-herdsman": "^0.14.111"
41
+ "zigbee-herdsman": "^0.14.115"
42
42
  },
43
43
  "devDependencies": {
44
44
  "eslint": "*",