From 6cce29f0e9fd3deb07596eb5e13432eaef4f6c71 Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 09:14:18 +0200 Subject: [PATCH 1/6] fix: rename option supportsHS to supportsHueAndSaturation This brings it inline with the naming for meta, are used to indicate support for Hue/Saturation for a device. The meta is used by the converters and the option by the exposes data. --- src/devices/adurosmart.js | 4 +-- src/devices/awox.js | 2 +- src/devices/evn.js | 2 +- src/devices/gidealed.js | 2 +- src/devices/giderwel.js | 2 +- src/devices/gledopto.js | 4 +-- src/devices/innr.js | 40 +++++++++++++++------------- src/devices/lidl.js | 2 +- "src/devices/m\303\274ller_licht.js" | 4 +-- src/devices/osram.js | 4 +-- src/devices/skydance.js | 2 +- src/devices/xiaomi.js | 2 +- src/devices/ynoa.js | 2 +- src/lib/extend.js | 16 +++++------ src/lib/philips.js | 6 ++--- 15 files changed, 48 insertions(+), 46 deletions(-) diff --git a/src/devices/adurosmart.js b/src/devices/adurosmart.js index b563bc396aabe..e961b09bde3c1 100644 --- a/src/devices/adurosmart.js +++ b/src/devices/adurosmart.js @@ -49,7 +49,7 @@ module.exports = [ model: '81809FBA', vendor: 'AduroSmart', description: 'ERIA colors and white shades smart light bulb A19/BR30', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153, 500]}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, colorTempRange: [153, 500]}), meta: {applyRedFix: true}, }, { @@ -124,7 +124,7 @@ module.exports = [ model: '81863', vendor: 'AduroSmart', description: 'Eria color LED strip', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153, 500]}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, colorTempRange: [153, 500]}), meta: {applyRedFix: true}, }, ]; diff --git a/src/devices/awox.js b/src/devices/awox.js index 0e00bcc053a12..f117c51014d32 100644 --- a/src/devices/awox.js +++ b/src/devices/awox.js @@ -128,7 +128,7 @@ module.exports = [ model: '33943/33944/33946', vendor: 'AwoX', description: 'LED RGB & brightness', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 370], supportsHueAndSaturation: true}), }, { fingerprint: [ diff --git a/src/devices/evn.js b/src/devices/evn.js index 84d143a3e365f..b2d2c2137440c 100644 --- a/src/devices/evn.js +++ b/src/devices/evn.js @@ -26,6 +26,6 @@ module.exports = [ model: 'ZB24100VS', vendor: 'EVN', description: 'Zigbee multicolor controller with power supply', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [160, 450]}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, colorTempRange: [160, 450]}), }, ]; diff --git a/src/devices/gidealed.js b/src/devices/gidealed.js index 90d2c60ffd4ec..90143746003ab 100644 --- a/src/devices/gidealed.js +++ b/src/devices/gidealed.js @@ -6,6 +6,6 @@ module.exports = [ model: 'ZC05M', vendor: 'GIDEALED', description: 'Smart Zigbee RGB LED strip controller', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true, colorTempRange: [153, 370]}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, colorTempRange: [153, 370]}), }, ]; diff --git a/src/devices/giderwel.js b/src/devices/giderwel.js index 7c94e7196b2a0..3ecabd05d1f52 100644 --- a/src/devices/giderwel.js +++ b/src/devices/giderwel.js @@ -6,6 +6,6 @@ module.exports = [ model: 'GD-ZCRGB012', vendor: 'GIDERWEL', description: 'Smart Zigbee RGB LED strip controller', - extend: extend.light_onoff_brightness_color({supportsHS: false}), + extend: extend.light_onoff_brightness_color({supportsHueAndSaturation: false}), }, ]; diff --git a/src/devices/gledopto.js b/src/devices/gledopto.js index d70bf966da7d8..b31cf240be1ea 100644 --- a/src/devices/gledopto.js +++ b/src/devices/gledopto.js @@ -25,7 +25,7 @@ const gledoptoExtend = { ), }), light_onoff_brightness_color: (options={}) => ({ - ...extend.light_onoff_brightness_color({disablePowerOnBehavior: true, supportsHS: true, ...options}), + ...extend.light_onoff_brightness_color({disablePowerOnBehavior: true, supportsHueAndSaturation: true, ...options}), toZigbee: utils.replaceInArray( extend.light_onoff_brightness_color(options).toZigbee, [tz.light_onoff_brightness, tz.light_color], @@ -33,7 +33,7 @@ const gledoptoExtend = { ), }), light_onoff_brightness_colortemp_color: (options={}) => ({ - ...extend.light_onoff_brightness_colortemp_color({disablePowerOnBehavior: true, supportsHS: true, ...options}), + ...extend.light_onoff_brightness_colortemp_color({disablePowerOnBehavior: true, supportsHueAndSaturation: true, ...options}), toZigbee: utils.replaceInArray( extend.light_onoff_brightness_colortemp_color(options).toZigbee, [tz.light_onoff_brightness, tz.light_color_colortemp], diff --git a/src/devices/innr.js b/src/devices/innr.js index 9ce27277ddec5..8fa7e01109288 100644 --- a/src/devices/innr.js +++ b/src/devices/innr.js @@ -51,7 +51,7 @@ module.exports = [ model: 'FL 140 C', vendor: 'Innr', description: 'Color Flex LED strip 4m 1200lm', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -59,7 +59,7 @@ module.exports = [ model: 'FL 130 C', vendor: 'Innr', description: 'Color Flex LED strip', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -67,7 +67,9 @@ module.exports = [ model: 'FL 120 C', vendor: 'Innr', description: 'Color Flex LED strip', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true, disablePowerOnBehavior: true}), + extend: extend.light_onoff_brightness_colortemp_color({ + colorTempRange: [153, 555], supportsHueAndSaturation: true, disablePowerOnBehavior: true}, + ), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -84,7 +86,7 @@ module.exports = [ model: 'OGL 130 C', vendor: 'Innr', description: 'Outdoor smart globe lights', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [100, 1000], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [100, 1000], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -93,7 +95,7 @@ module.exports = [ vendor: 'Innr', description: 'Outdoor smart pedestal light colour', extend: extend.light_onoff_brightness_colortemp_color( - {colorTempRange: [153, 555], supportsHS: true, disableColorTempStartup: true}), + {colorTempRange: [153, 555], supportsHueAndSaturation: true, disableColorTempStartup: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -101,7 +103,7 @@ module.exports = [ model: 'RB 185 C', vendor: 'Innr', description: 'E27 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -109,7 +111,7 @@ module.exports = [ model: 'BY 185 C', vendor: 'Innr', description: 'B22 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -117,7 +119,7 @@ module.exports = [ model: 'RB 250 C', vendor: 'Innr', description: 'E14 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -125,7 +127,7 @@ module.exports = [ model: 'RB 251 C', vendor: 'Innr', description: 'E14 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, @@ -195,7 +197,7 @@ module.exports = [ model: 'RB 285 C', vendor: 'Innr', description: 'E27 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -203,7 +205,7 @@ module.exports = [ model: 'RB 286 C', vendor: 'Innr', description: 'E27 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, @@ -212,7 +214,7 @@ module.exports = [ model: 'BY 285 C', vendor: 'Innr', description: 'B22 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -220,7 +222,7 @@ module.exports = [ model: 'BY 286 C', vendor: 'Innr', description: 'B22 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, @@ -344,7 +346,7 @@ module.exports = [ model: 'RS 230 C', vendor: 'Innr', description: 'GU10 spot 350 lm, dimmable, RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), exposes: [e.light_brightness_colortemp_color()], meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, @@ -536,7 +538,7 @@ module.exports = [ model: 'AE 280 C', vendor: 'Innr', description: 'E26 bulb RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, @@ -646,7 +648,7 @@ module.exports = [ model: 'OFL 120 C', vendor: 'Innr', description: 'Outdoor flex light colour LED strip 2m, 550lm, RGBW', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -654,7 +656,7 @@ module.exports = [ model: 'OFL 140 C', vendor: 'Innr', description: 'Outdoor flex light colour LED strip 4m, 1000lm, RGBW', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -662,7 +664,7 @@ module.exports = [ model: 'OFL 142 C', vendor: 'Innr', description: 'Outdoor flex light colour LED strip 4m, 1440lm, RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [100, 350], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [100, 350], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { @@ -670,7 +672,7 @@ module.exports = [ model: 'OSL 130 C', vendor: 'Innr', description: 'Outdoor smart spot colour, 230lm/spot, RGBW', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), meta: {applyRedFix: true, turnsOffAtBrightness1: true}, }, { diff --git a/src/devices/lidl.js b/src/devices/lidl.js index 0e3722e32f961..844825bc441c5 100644 --- a/src/devices/lidl.js +++ b/src/devices/lidl.js @@ -833,7 +833,7 @@ module.exports = [ model: 'HG08633', vendor: 'Lidl', description: 'Livarno gardenspot RGB', - extend: tuya.extend.light_onoff_brightness_colortemp_color({supportsHS: true, preferHS: true, colorTempRange: [153, 500]}), + extend: tuya.extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, preferHS: true, colorTempRange: [153, 500]}), }, { fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_chyvmhay'}], diff --git "a/src/devices/m\303\274ller_licht.js" "b/src/devices/m\303\274ller_licht.js" index f81bfc44a610b..7325badb38c7b 100644 --- "a/src/devices/m\303\274ller_licht.js" +++ "b/src/devices/m\303\274ller_licht.js" @@ -69,8 +69,8 @@ module.exports = [ model: '404000/404005/404012/404019', vendor: 'Müller Licht', description: 'Tint LED bulb GU10/E14/E27 350/470/806 lumen, dimmable, color, opal white', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHS: true}), - toZigbee: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHS: true}).toZigbee + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHueAndSaturation: true}), + toZigbee: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHueAndSaturation: true}).toZigbee .concat([tz.tint_scene]), // GU10 bulb does not support enhancedHue, // we can identify these based on the presense of haDiagnostic input cluster diff --git a/src/devices/osram.js b/src/devices/osram.js index dc300fc0b962f..a7bc89dff4287 100644 --- a/src/devices/osram.js +++ b/src/devices/osram.js @@ -243,7 +243,7 @@ module.exports = [ model: '4052899926110', vendor: 'OSRAM', description: 'Flex RGBW', - extend: extend.ledvance.light_onoff_brightness_colortemp_color({colorTempRange: [125, 666], supportsHS: true}), + extend: extend.ledvance.light_onoff_brightness_colortemp_color({colorTempRange: [125, 666], supportsHueAndSaturation: true}), ota: ota.ledvance, }, { @@ -267,7 +267,7 @@ module.exports = [ model: '4058075047853', vendor: 'OSRAM', description: 'Smart+ gardenpole 4W RGBW', - extend: extend.ledvance.light_onoff_brightness_colortemp_color({supportsHS: true, preferHS: true}), + extend: extend.ledvance.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, preferHS: true}), meta: {disableDefaultResponse: true}, ota: ota.ledvance, }, diff --git a/src/devices/skydance.js b/src/devices/skydance.js index 2faf70f9ea593..55b86617b2a95 100644 --- a/src/devices/skydance.js +++ b/src/devices/skydance.js @@ -56,7 +56,7 @@ module.exports = [ model: 'WZ5_rgb_1', vendor: 'TuYa', description: 'Zigbee & RF 5 in 1 LED controller (RGB mode)', - extend: tuya.extend.light_onoff_brightness_color({supportsHS: true, preferHS: true, disableEffect: true}), + extend: tuya.extend.light_onoff_brightness_color({supportsHueAndSaturation: true, preferHS: true, disableEffect: true}), }, { fingerprint: [ diff --git a/src/devices/xiaomi.js b/src/devices/xiaomi.js index 4d49ec0684cb9..69276aba5d9ee 100644 --- a/src/devices/xiaomi.js +++ b/src/devices/xiaomi.js @@ -2581,7 +2581,7 @@ module.exports = [ model: 'ZNTGMK11LM', vendor: 'Xiaomi', description: 'Aqara smart RGBW light controller', - extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true}), ota: ota.zigbeeOTA, }, { diff --git a/src/devices/ynoa.js b/src/devices/ynoa.js index bbecbe1d8243b..90efa437dedba 100644 --- a/src/devices/ynoa.js +++ b/src/devices/ynoa.js @@ -39,7 +39,7 @@ module.exports = [ model: 'LA-GU10-RGBW', vendor: 'Ynoa', description: 'Smart LED GU10 RGB CCT', - extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 526], supportsHS: true}), + extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 526], supportsHueAndSaturation: true}), }, { zigbeeModel: ['ZBT-RGBWSwitch-D0800'], diff --git a/src/lib/extend.js b/src/lib/extend.js index 7e0e930448ac1..4b0f25c1fe4a5 100644 --- a/src/lib/extend.js +++ b/src/lib/extend.js @@ -79,10 +79,10 @@ const extend = { }, light_onoff_brightness_color: (options={}) => { options = { - disableEffect: false, supportsHS: false, preferHS: false, disablePowerOnBehavior: false, + disableEffect: false, supportsHueAndSaturation: false, preferHS: false, disablePowerOnBehavior: false, toZigbee: [], fromZigbee: [], exposes: [], ...options, }; - const exposes = [(options.supportsHS ? e.light_brightness_color(options.preferHS) : e.light_brightness_colorxy()), + const exposes = [(options.supportsHueAndSaturation ? e.light_brightness_color(options.preferHS) : e.light_brightness_colorxy()), ...(!options.disableEffect ? [e.effect()] : []), ...options.exposes]; const fromZigbee = [fz.color_colortemp, fz.on_off, fz.brightness, fz.level_config, fz.ignore_basic_report, ...options.fromZigbee]; const toZigbee = [tz.light_onoff_brightness, tz.light_color, tz.ignore_transition, tz.ignore_rate, tz.light_brightness_move, @@ -106,11 +106,11 @@ const extend = { }, light_onoff_brightness_colortemp_color: (options={}) => { options = { - disableEffect: false, supportsHS: false, disableColorTempStartup: false, preferHS: false, disablePowerOnBehavior: false, + disableEffect: false, supportsHueAndSaturation: false, disableColorTempStartup: false, preferHS: false, disablePowerOnBehavior: false, toZigbee: [], fromZigbee: [], exposes: [], ...options, }; const exposes = [ - (options.supportsHS ? e.light_brightness_colortemp_color(options.colorTempRange, options.preferHS) : + (options.supportsHueAndSaturation ? e.light_brightness_colortemp_color(options.colorTempRange, options.preferHS) : e.light_brightness_colortemp_colorxy(options.colorTempRange)), ...(!options.disableEffect ? [e.effect()] : []), ...options.exposes, ]; @@ -162,15 +162,15 @@ const extend = { light_onoff_brightness_color: (options={}) => { options = {disablePowerOnBehavior: true, ...options}; return { - ...extend.light_onoff_brightness_color({supportsHS: true, ...options}), - toZigbee: extend.light_onoff_brightness_color({supportsHS: true, ...options}).toZigbee.concat([tz.ledvance_commands]), + ...extend.light_onoff_brightness_color({supportsHueAndSaturation: true, ...options}), + toZigbee: extend.light_onoff_brightness_color({supportsHueAndSaturation: true, ...options}).toZigbee.concat([tz.ledvance_commands]), }; }, light_onoff_brightness_colortemp_color: (options={}) => { options = {disablePowerOnBehavior: true, ...options}; return { - ...extend.light_onoff_brightness_colortemp_color({supportsHS: true, disableColorTempStartup: true, ...options}), - toZigbee: extend.light_onoff_brightness_colortemp_color({supportsHS: true, disableColorTempStartup: true, ...options}) + ...extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, disableColorTempStartup: true, ...options}), + toZigbee: extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, disableColorTempStartup: true, ...options}) .toZigbee.concat([tz.ledvance_commands]), }; }, diff --git a/src/lib/philips.js b/src/lib/philips.js index 144094398e5db..d606c27339b7e 100644 --- a/src/lib/philips.js +++ b/src/lib/philips.js @@ -82,7 +82,7 @@ const extend = { light_onoff_brightness_color: (options={}) => { options = {disableHueEffects: false, ...options}; if (!options.disableHueEffects) options.disableEffect = true; - const result = extendDontUse.light_onoff_brightness_color({supportsHS: true, ...options}); + const result = extendDontUse.light_onoff_brightness_color({supportsHueAndSaturation: true, ...options}); result['ota'] = ota.zigbeeOTA; result['meta'] = {turnsOffAtBrightness1: true}; result['toZigbee'] = result['toZigbee'].concat([philipsTz.hue_power_on_behavior, philipsTz.hue_power_on_error]); @@ -99,7 +99,7 @@ const extend = { light_onoff_brightness_colortemp_color: (options={}) => { options = {disableHueEffects: false, ...options}; if (!options.disableHueEffects) options.disableEffect = true; - const result = extendDontUse.light_onoff_brightness_colortemp_color({supportsHS: true, ...options}); + const result = extendDontUse.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, ...options}); result['ota'] = ota.zigbeeOTA; result['meta'] = {turnsOffAtBrightness1: true}; result['toZigbee'] = result['toZigbee'].concat([philipsTz.hue_power_on_behavior, philipsTz.hue_power_on_error]); @@ -114,7 +114,7 @@ const extend = { return result; }, light_onoff_brightness_colortemp_color_gradient: (options={}) => { - options = {supportsHS: true, disableEffect: true, extraEffects: [], ...options}; + options = {supportsHueAndSaturation: true, disableEffect: true, extraEffects: [], ...options}; const result = extendDontUse.light_onoff_brightness_colortemp_color({noConfigure: true, ...options}); result['ota'] = ota.zigbeeOTA; result['meta'] = {turnsOffAtBrightness1: true}; From e36ed1f2db674bbb34e60facfa5464a1242635d7 Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 09:38:32 +0200 Subject: [PATCH 2/6] fix: renamed enhancedHue to supportsEnhancedHue This brings the naming more inline with the nameing of the other meta's --- README.md | 2 +- src/converters/toZigbee.js | 10 +++++----- src/devices/ajax_online.js | 2 +- src/devices/innr.js | 8 ++++---- src/devices/kurvia.js | 2 +- "src/devices/m\303\274ller_licht.js" | 4 ++-- src/lib/light.js | 4 ++-- src/lib/tuya.js | 4 ++-- test/index.test.js | 2 +- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 949be7f1de02d..cb584aa3703e8 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ If any of those commands finish with an error your PR won't pass the tests and w - `multiEndpointEnforce`: enforce a certain endpoint for an attribute, e.g. {"power": 4} see utils.enforceEndpoint() - `disableDefaultResponse`: used by toZigbee converters to disable the default response of some devices as they don't provide one. (default: false) - `applyRedFix`: see toZigbee.light_color (default: false) -- `enhancedHue`: see toZigbee.light_color (default: true) +- `supportsEnhancedHue`: see toZigbee.light_color (default: true) - `supportsHueAndSaturation`: see toZigbee.light_color (default: false) - `timeout`: timeout for commands to this device used in toZigbee. (default: 10000) - `coverInverted`: Set to true for cover controls that report position=100 as open (default: false) diff --git a/src/converters/toZigbee.js b/src/converters/toZigbee.js index 82a7b7356b2c4..7c8d5928bf39e 100644 --- a/src/converters/toZigbee.js +++ b/src/converters/toZigbee.js @@ -1096,14 +1096,14 @@ const converters = { zclData.colory = utils.mapNumberRange(xy.y, 0, 1, 0, 65535); command = 'moveToColor'; } else if (newColor.isHSV()) { - const enhancedHue = utils.getMetaValue(entity, meta.mapped, 'enhancedHue', 'allEqual', true); + const supportsEnhancedHue = utils.getMetaValue(entity, meta.mapped, 'supportsEnhancedHue', 'allEqual', true); const hsv = newColor.hsv; const hsvCorrected = hsv.colorCorrected(meta); newState.color_mode = constants.colorModeLookup[0]; newState.color = hsv.toObject(false); if (hsv.hue !== null) { - if (enhancedHue) { + if (supportsEnhancedHue) { zclData.enhancehue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535); } else { zclData.hue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 254); @@ -1121,13 +1121,13 @@ const converters = { } if (hsv.hue !== null && hsv.saturation !== null) { - if (enhancedHue) { + if (supportsEnhancedHue) { command = 'enhancedMoveToHueAndSaturation'; } else { command = 'moveToHueAndSaturation'; } } else if (hsv.hue !== null) { - if (enhancedHue) { + if (supportsEnhancedHue) { command = 'enhancedMoveToHue'; } else { command = 'moveToHue'; @@ -4413,7 +4413,7 @@ const converters = { state['color'] = newColor.xy.toObject(); } else if (newColor.isHSV()) { const hsvCorrected = newColor.hsv.colorCorrected(meta); - if (utils.getMetaValue(entity, meta.mapped, 'enhancedHue', 'allEqual', true)) { + if (utils.getMetaValue(entity, meta.mapped, 'supportsEnhancedHue', 'allEqual', true)) { const hScaled = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 65535); const sScaled = utils.mapNumberRange(hsvCorrected.saturation, 0, 100, 0, 254); extensionfieldsets.push( diff --git a/src/devices/ajax_online.js b/src/devices/ajax_online.js index c0035d2922a48..9337e4696832b 100644 --- a/src/devices/ajax_online.js +++ b/src/devices/ajax_online.js @@ -37,7 +37,7 @@ module.exports = [ vendor: 'Ajax Online', description: 'Smart Zigbee LED strip RGB+CCT', extend: tuya.extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}), - meta: {applyRedFix: true, enhancedHue: false}, + meta: {applyRedFix: true, supportsEnhancedHue: false}, }, { fingerprint: [{modelID: 'CCT Light', manufacturerName: 'ZB/Ajax Online', manufacturerID: 4137}], diff --git a/src/devices/innr.js b/src/devices/innr.js index 8fa7e01109288..80c451267ad87 100644 --- a/src/devices/innr.js +++ b/src/devices/innr.js @@ -120,7 +120,7 @@ module.exports = [ vendor: 'Innr', description: 'E14 bulb RGBW', extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), - meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, + meta: {supportsEnhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, }, { zigbeeModel: ['RB 251 C'], @@ -128,7 +128,7 @@ module.exports = [ vendor: 'Innr', description: 'E14 bulb RGBW', extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), - meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, + meta: {supportsEnhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, { @@ -198,7 +198,7 @@ module.exports = [ vendor: 'Innr', description: 'E27 bulb RGBW', extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), - meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, + meta: {supportsEnhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, }, { zigbeeModel: ['RB 286 C'], @@ -348,7 +348,7 @@ module.exports = [ description: 'GU10 spot 350 lm, dimmable, RGBW', extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHueAndSaturation: true}), exposes: [e.light_brightness_colortemp_color()], - meta: {enhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, + meta: {supportsEnhancedHue: false, applyRedFix: true, turnsOffAtBrightness1: true}, ota: ota.zigbeeOTA, }, { diff --git a/src/devices/kurvia.js b/src/devices/kurvia.js index cdc47b71b97f4..88fe1f79a6355 100644 --- a/src/devices/kurvia.js +++ b/src/devices/kurvia.js @@ -11,7 +11,7 @@ module.exports = [ description: 'GU10 GRBWC built from AliExpress', extend: extendData, toZigbee: [tz.on_off].concat(extendData.toZigbee), - meta: {applyRedFix: true, enhancedHue: false}, + meta: {applyRedFix: true, supportsEnhancedHue: false}, }, ]; diff --git "a/src/devices/m\303\274ller_licht.js" "b/src/devices/m\303\274ller_licht.js" index 7325badb38c7b..7cfc578b8db52 100644 --- "a/src/devices/m\303\274ller_licht.js" +++ "b/src/devices/m\303\274ller_licht.js" @@ -72,9 +72,9 @@ module.exports = [ extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHueAndSaturation: true}), toZigbee: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 556], supportsHueAndSaturation: true}).toZigbee .concat([tz.tint_scene]), - // GU10 bulb does not support enhancedHue, + // GU10 bulb does not support supportsEnhancedHue, // we can identify these based on the presense of haDiagnostic input cluster - meta: {enhancedHue: (entity) => !entity.getDevice().getEndpoint(1).inputClusters.includes(2821)}, + meta: {supportsEnhancedHue: (entity) => !entity.getDevice().getEndpoint(1).inputClusters.includes(2821)}, }, { zigbeeModel: ['ZBT-ColorTemperature'], diff --git a/src/lib/light.js b/src/lib/light.js index 72a7afae02a4c..380303cd8372a 100644 --- a/src/lib/light.js +++ b/src/lib/light.js @@ -12,7 +12,7 @@ function readColorAttributes(entity, meta, additionalAttributes=[]) { /** * Not all bulbs support the same features, we need to take care we read what is supported. * `supportsHueAndSaturation` indicates support for currentHue and currentSaturation - * `enhancedHue` indicates support for enhancedCurrentHue + * `supportsEnhancedHue` indicates support for enhancedCurrentHue * * e.g. IKEA Tådfri LED1624G9 only supports XY (https://github.com/Koenkk/zigbee-herdsman-converters/issues/1340) * @@ -29,7 +29,7 @@ function readColorAttributes(entity, meta, additionalAttributes=[]) { if (utils.getMetaValue(entity, meta.mapped, 'supportsHueAndSaturation', 'allEqual', true)) { if (!meta.message.color || (typeof meta.message.color === 'object' && meta.message.color.hasOwnProperty('hue'))) { - if (utils.getMetaValue(entity, meta.mapped, 'enhancedHue', 'allEqual', true)) { + if (utils.getMetaValue(entity, meta.mapped, 'supportsEnhancedHue', 'allEqual', true)) { attributes.push('enhancedCurrentHue'); } else { attributes.push('currentHue'); diff --git a/src/lib/tuya.js b/src/lib/tuya.js index 221e1c24077ba..a2bfd17875456 100644 --- a/src/lib/tuya.js +++ b/src/lib/tuya.js @@ -1716,7 +1716,7 @@ const tuyaExtend = { disableColorTempStartup: true, disablePowerOnBehavior: true, toZigbee: [tuyaTz.do_not_disturb, tuyaTz.color_power_on_behavior], exposes: [tuyaExposes.doNotDisturb(), tuyaExposes.colorPowerOnBehavior()], ...options, }; - const meta = {applyRedFix: true, enhancedHue: false}; + const meta = {applyRedFix: true, supportsEnhancedHue: false}; return {...extend.light_onoff_brightness_colortemp_color(options), meta}; }, light_onoff_brightness_colortemp: (options={}) => { @@ -1733,7 +1733,7 @@ const tuyaExtend = { disablePowerOnBehavior: true, toZigbee: [tuyaTz.do_not_disturb, tuyaTz.color_power_on_behavior], exposes: [tuyaExposes.doNotDisturb(), tuyaExposes.colorPowerOnBehavior()], ...options, }; - const meta = {applyRedFix: true, enhancedHue: false}; + const meta = {applyRedFix: true, supportsEnhancedHue: false}; return {...extend.light_onoff_brightness_color(options), meta}; }, light_onoff_brightness: (options={}) => { diff --git a/test/index.test.js b/test/index.test.js index e0306d30b2724..726d67929a376 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -303,7 +303,7 @@ describe('index.js', () => { if (device.meta) { - containsOnly(['disableActionGroup', 'multiEndpoint', 'multiEndpointSkip', 'multiEndpointEnforce', 'applyRedFix', 'disableDefaultResponse', 'enhancedHue', 'timeout', 'supportsHueAndSaturation', 'battery', 'coverInverted', 'turnsOffAtBrightness1', 'coverStateFromTilt', 'pinCodeCount', 'tuyaThermostatSystemMode', 'tuyaThermostatPreset', 'tuyaDatapoints', 'tuyaThermostatPresetToSystemMode', 'thermostat', 'fanStateOn', 'separateWhite', 'publishDuplicateTransaction', 'tuyaSendCommand'], Object.keys(device.meta)); + containsOnly(['disableActionGroup', 'multiEndpoint', 'multiEndpointSkip', 'multiEndpointEnforce', 'applyRedFix', 'disableDefaultResponse', 'supportsEnhancedHue', 'timeout', 'supportsHueAndSaturation', 'battery', 'coverInverted', 'turnsOffAtBrightness1', 'coverStateFromTilt', 'pinCodeCount', 'tuyaThermostatSystemMode', 'tuyaThermostatPreset', 'tuyaDatapoints', 'tuyaThermostatPresetToSystemMode', 'thermostat', 'fanStateOn', 'separateWhite', 'publishDuplicateTransaction', 'tuyaSendCommand'], Object.keys(device.meta)); } if (device.zigbeeModel) { From 3a240f57a732858dbae8ab3c5b793af72389502f Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 14:34:55 +0200 Subject: [PATCH 3/6] fix: rename options.preferHS to options.preferHueAndSaturation --- src/devices/lidl.js | 4 +++- src/devices/osram.js | 2 +- src/devices/skydance.js | 2 +- src/lib/exposes.ts | 4 ++-- src/lib/extend.js | 10 +++++----- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/devices/lidl.js b/src/devices/lidl.js index 844825bc441c5..95516eb05b8f8 100644 --- a/src/devices/lidl.js +++ b/src/devices/lidl.js @@ -833,7 +833,9 @@ module.exports = [ model: 'HG08633', vendor: 'Lidl', description: 'Livarno gardenspot RGB', - extend: tuya.extend.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, preferHS: true, colorTempRange: [153, 500]}), + extend: tuya.extend.light_onoff_brightness_colortemp_color({ + supportsHueAndSaturation: true, preferHueAndSaturation: true, colorTempRange: [153, 500], + }), }, { fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_chyvmhay'}], diff --git a/src/devices/osram.js b/src/devices/osram.js index a7bc89dff4287..5538c20047158 100644 --- a/src/devices/osram.js +++ b/src/devices/osram.js @@ -267,7 +267,7 @@ module.exports = [ model: '4058075047853', vendor: 'OSRAM', description: 'Smart+ gardenpole 4W RGBW', - extend: extend.ledvance.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, preferHS: true}), + extend: extend.ledvance.light_onoff_brightness_colortemp_color({supportsHueAndSaturation: true, preferHueAndSaturation: true}), meta: {disableDefaultResponse: true}, ota: ota.ledvance, }, diff --git a/src/devices/skydance.js b/src/devices/skydance.js index 55b86617b2a95..d595f7cf48095 100644 --- a/src/devices/skydance.js +++ b/src/devices/skydance.js @@ -56,7 +56,7 @@ module.exports = [ model: 'WZ5_rgb_1', vendor: 'TuYa', description: 'Zigbee & RF 5 in 1 LED controller (RGB mode)', - extend: tuya.extend.light_onoff_brightness_color({supportsHueAndSaturation: true, preferHS: true, disableEffect: true}), + extend: tuya.extend.light_onoff_brightness_color({supportsHueAndSaturation: true, preferHueAndSaturation: true, disableEffect: true}), }, { fingerprint: [ diff --git a/src/lib/exposes.ts b/src/lib/exposes.ts index 4b7be6ac28979..fe84fbd12b83a 100644 --- a/src/lib/exposes.ts +++ b/src/lib/exposes.ts @@ -647,10 +647,10 @@ export const presets = { keypad_lockout: () => new Enum('keypad_lockout', access.ALL, ['unlock', 'lock1', 'lock2']).withDescription('Enables/disables physical input on the device'), led_disabled_night: () => new Binary('led_disabled_night', access.ALL, true, false).withDescription('Enable/disable the LED at night'), light_brightness: () => new Light().withBrightness(), - light_brightness_color: (preferHS: boolean) => new Light().withBrightness().withColor((preferHS ? ['hs', 'xy'] : ['xy', 'hs'])), + light_brightness_color: (preferHueAndSaturation: boolean) => new Light().withBrightness().withColor((preferHueAndSaturation ? ['hs', 'xy'] : ['xy', 'hs'])), light_brightness_colorhs: () => new Light().withBrightness().withColor(['hs']), light_brightness_colortemp: (colorTempRange: Range) => new Light().withBrightness().withColorTemp(colorTempRange).withColorTempStartup(colorTempRange), - light_brightness_colortemp_color: (colorTempRange: Range, preferHS: boolean) => new Light().withBrightness().withColorTemp(colorTempRange).withColorTempStartup(colorTempRange).withColor(preferHS ? ['hs', 'xy'] : ['xy', 'hs']), + light_brightness_colortemp_color: (colorTempRange: Range, preferHueAndSaturation: boolean) => new Light().withBrightness().withColorTemp(colorTempRange).withColorTempStartup(colorTempRange).withColor(preferHueAndSaturation ? ['hs', 'xy'] : ['xy', 'hs']), light_brightness_colortemp_colorhs: (colorTempRange: Range) => new Light().withBrightness().withColorTemp(colorTempRange).withColorTempStartup(colorTempRange).withColor(['hs']), light_brightness_colortemp_colorxy: (colorTempRange: Range) => new Light().withBrightness().withColorTemp(colorTempRange).withColorTempStartup(colorTempRange).withColor(['xy']), light_brightness_colorxy: () => new Light().withBrightness().withColor((['xy'])), diff --git a/src/lib/extend.js b/src/lib/extend.js index 4b0f25c1fe4a5..93fcb78f74819 100644 --- a/src/lib/extend.js +++ b/src/lib/extend.js @@ -79,10 +79,10 @@ const extend = { }, light_onoff_brightness_color: (options={}) => { options = { - disableEffect: false, supportsHueAndSaturation: false, preferHS: false, disablePowerOnBehavior: false, + disableEffect: false, supportsHueAndSaturation: false, preferHueAndSaturation: false, disablePowerOnBehavior: false, toZigbee: [], fromZigbee: [], exposes: [], ...options, }; - const exposes = [(options.supportsHueAndSaturation ? e.light_brightness_color(options.preferHS) : e.light_brightness_colorxy()), + const exposes = [(options.supportsHueAndSaturation ? e.light_brightness_color(options.preferHueAndSaturation) : e.light_brightness_colorxy()), ...(!options.disableEffect ? [e.effect()] : []), ...options.exposes]; const fromZigbee = [fz.color_colortemp, fz.on_off, fz.brightness, fz.level_config, fz.ignore_basic_report, ...options.fromZigbee]; const toZigbee = [tz.light_onoff_brightness, tz.light_color, tz.ignore_transition, tz.ignore_rate, tz.light_brightness_move, @@ -106,11 +106,11 @@ const extend = { }, light_onoff_brightness_colortemp_color: (options={}) => { options = { - disableEffect: false, supportsHueAndSaturation: false, disableColorTempStartup: false, preferHS: false, disablePowerOnBehavior: false, - toZigbee: [], fromZigbee: [], exposes: [], ...options, + disableEffect: false, supportsHueAndSaturation: false, disableColorTempStartup: false, preferHueAndSaturation: false, + disablePowerOnBehavior: false, toZigbee: [], fromZigbee: [], exposes: [], ...options, }; const exposes = [ - (options.supportsHueAndSaturation ? e.light_brightness_colortemp_color(options.colorTempRange, options.preferHS) : + (options.supportsHueAndSaturation ? e.light_brightness_colortemp_color(options.colorTempRange, options.preferHueAndSaturation) : e.light_brightness_colortemp_colorxy(options.colorTempRange)), ...(!options.disableEffect ? [e.effect()] : []), ...options.exposes, ]; From b9ea3febc321d84bdd9da913553eb753944aa543 Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 09:16:37 +0200 Subject: [PATCH 4/6] fix: align default for meta.supportsHueAndSaturation in README.md with light.readColorAttributes According to the readme `supportsHueAndSaturation` has a default of false, however in `light.readColorAttributes()` we used a default of true. This change corrects it to the default mentioned in readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cb584aa3703e8..d4e13f22e592a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ If any of those commands finish with an error your PR won't pass the tests and w - `disableDefaultResponse`: used by toZigbee converters to disable the default response of some devices as they don't provide one. (default: false) - `applyRedFix`: see toZigbee.light_color (default: false) - `supportsEnhancedHue`: see toZigbee.light_color (default: true) -- `supportsHueAndSaturation`: see toZigbee.light_color (default: false) +- `supportsHueAndSaturation`: see toZigbee.light_color (default: true), usually set by light_* extends via options. - `timeout`: timeout for commands to this device used in toZigbee. (default: 10000) - `coverInverted`: Set to true for cover controls that report position=100 as open (default: false) - `coverStateFromTilt`: Set cover state based on tilt From d88d33b12bde190a4d467208b22d92bf70606b24 Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 13:31:40 +0200 Subject: [PATCH 5/6] fix: converter should throw error when Hue/Saturation not supported Bulbs like **TRADFRI bulb E27 CWS opal 600lm** do not support HS, we already skip reading those attributes, however the toZigbee converter does still try to call the moveHue and friends commands which do not work when specifying a `{"color": {"hue": 128, "saturation": 100}` payload. Now we throw an error making it clean this is not supported. --- src/converters/toZigbee.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/converters/toZigbee.js b/src/converters/toZigbee.js index 7c8d5928bf39e..b7e9c5a0f09e2 100644 --- a/src/converters/toZigbee.js +++ b/src/converters/toZigbee.js @@ -1077,7 +1077,13 @@ const converters = { const zclData = {transtime: utils.getTransition(entity, key, meta).time}; - if (newColor.isRGB() || newColor.isXY()) { + const supportsHueAndSaturation = utils.getMetaValue(entity, meta.mapped, 'supportsHueAndSaturation', 'allEqual', true); + const supportsEnhancedHue = utils.getMetaValue(entity, meta.mapped, 'supportsEnhancedHue', 'allEqual', true); + + if (newColor.isHSV() && !supportsHueAndSaturation) { + // The color we got is HSV but the bulb does not support Hue/Saturation mode + throw new Error('This light does not support Hue/Saturation, please use X/Y instead.'); + } else if (newColor.isRGB() || newColor.isXY()) { // Convert RGB to XY color mode because Zigbee doesn't support RGB (only x/y and hue/saturation) const xy = newColor.isRGB() ? newColor.rgb.gammaCorrected().toXY().rounded(4) : newColor.xy; @@ -1096,7 +1102,6 @@ const converters = { zclData.colory = utils.mapNumberRange(xy.y, 0, 1, 0, 65535); command = 'moveToColor'; } else if (newColor.isHSV()) { - const supportsEnhancedHue = utils.getMetaValue(entity, meta.mapped, 'supportsEnhancedHue', 'allEqual', true); const hsv = newColor.hsv; const hsvCorrected = hsv.colorCorrected(meta); newState.color_mode = constants.colorModeLookup[0]; From 275562a5d3dd310a09586d52cbe585b22d00bbd1 Mon Sep 17 00:00:00 2001 From: Jorge Schrauwen Date: Mon, 29 May 2023 14:08:33 +0200 Subject: [PATCH 6/6] fix: extend should pass options.supportsHueSaturation to meta.supportsHueSaturation --- src/lib/extend.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/extend.js b/src/lib/extend.js index 93fcb78f74819..335119457df09 100644 --- a/src/lib/extend.js +++ b/src/lib/extend.js @@ -88,6 +88,7 @@ const extend = { const toZigbee = [tz.light_onoff_brightness, tz.light_color, tz.ignore_transition, tz.ignore_rate, tz.light_brightness_move, tz.light_brightness_step, tz.level_config, tz.light_hue_saturation_move, ...options.toZigbee, tz.light_hue_saturation_step, tz.light_color_options, tz.light_color_mode, ...(!options.disableEffect ? [tz.effect] : [])]; + const meta = {supportsHueAndSaturation: options.supportsHueAndSaturation}; if (!options.disablePowerOnBehavior) { exposes.push(e.power_on_behavior(['off', 'on', 'toggle', 'previous'])); @@ -95,7 +96,7 @@ const extend = { toZigbee.push(tz.power_on_behavior); } - const result = {exposes, fromZigbee, toZigbee}; + const result = {exposes, fromZigbee, toZigbee, meta}; if (!options.noConfigure) { result.configure = async (device, coordinatorEndpoint, logger) => { await light.configure(device, coordinatorEndpoint, logger, false); @@ -120,6 +121,7 @@ const extend = { tz.light_colortemp_move, tz.light_brightness_step, tz.light_colortemp_step, tz.light_hue_saturation_move, tz.light_hue_saturation_step, tz.light_colortemp_startup, tz.level_config, tz.light_color_options, tz.light_color_mode, ...(!options.disableEffect ? [tz.effect] : []), ...options.toZigbee]; + const meta = {supportsHueAndSaturation: options.supportsHueAndSaturation}; if (options.disableColorTempStartup) { exposes[0].removeFeature('color_temp_startup'); @@ -132,7 +134,7 @@ const extend = { toZigbee.push(tz.power_on_behavior); } - const result = {exposes, fromZigbee, toZigbee}; + const result = {exposes, fromZigbee, toZigbee, meta}; if (!options.noConfigure) { result.configure = async (device, coordinatorEndpoint, logger) => { await light.configure(device, coordinatorEndpoint, logger, true);