diff --git a/converters/fromZigbee.js b/converters/fromZigbee.js index e0ccecdef65f0..1cbb9821733f4 100644 --- a/converters/fromZigbee.js +++ b/converters/fromZigbee.js @@ -5168,8 +5168,16 @@ const converters = { aqara_opple: { cluster: 'aqaraOpple', type: ['attributeReport', 'readResponse'], - options: [exposes.options.precision('temperature'), exposes.options.calibration('temperature'), - exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual')], + options: (definition) => { + const result = []; + if (definition.exposes.find((e) => e.name === 'temperature')) { + result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature')); + } + if (definition.exposes.find((e) => e.name === 'illuminance')) { + result.push(exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual')); + } + return result; + }, convert: (model, msg, publish, options, meta) => { const payload = {}; if (msg.data.hasOwnProperty('247')) { diff --git a/index.js b/index.js index edb59ca11beb7..8419ce8f93691 100644 --- a/index.js +++ b/index.js @@ -89,7 +89,8 @@ function addDefinition(definition) { const optionKeys = definition.options.map((o) => o.name); for (const converter of [...definition.toZigbee, ...definition.fromZigbee]) { if (converter.options) { - for (const option of converter.options) { + const options = typeof converter.options === 'function' ? converter.options(definition) : converter.options; + for (const option of options) { if (!optionKeys.includes(option.name)) { definition.options.push(option); optionKeys.push(option.name); diff --git a/test/index.test.js b/test/index.test.js index 2a82e3d1d6022..18c0a66630b5e 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -475,4 +475,11 @@ describe('index.js', () => { } }); }); + + it('Verify options filter', () => { + const ZNJLBL01LM = index.definitions.find((d) => d.model == 'ZNJLBL01LM'); + expect(ZNJLBL01LM.options.length).toBe(1); + const ZNCZ04LM = index.definitions.find((d) => d.model == 'ZNCZ04LM'); + expect(ZNCZ04LM.options.length).toBe(2); + }); });