From 5c8278c607b31adb2af29d9a6aeec721a43ae613 Mon Sep 17 00:00:00 2001 From: Miha Lunar Date: Sat, 29 Apr 2017 21:51:14 +0200 Subject: [PATCH 1/3] Configurable fade-out behavior Adds a per-group "fade" option with values of "out" (default) or "none". By default, the lights are faded out when turned off, but this can cause usability issues when manually switching wall switches, since the bulbs turn back on at minimum brightness. --- .../components/light/limitlessled.py | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/light/limitlessled.py b/homeassistant/components/light/limitlessled.py index 4e44351b7dd203..41cdc191f6b653 100644 --- a/homeassistant/components/light/limitlessled.py +++ b/homeassistant/components/light/limitlessled.py @@ -24,13 +24,18 @@ CONF_GROUPS = 'groups' CONF_NUMBER = 'number' CONF_VERSION = 'version' +CONF_FADE = 'fade' DEFAULT_LED_TYPE = 'rgbw' DEFAULT_PORT = 5987 DEFAULT_TRANSITION = 0 DEFAULT_VERSION = 6 +DEFAULT_FADE = 'out' LED_TYPE = ['rgbw', 'rgbww', 'white', 'bridge-led'] +FADE_NONE = 'none' +FADE_OUT = 'out' +FADE = [FADE_NONE, FADE_OUT] RGB_BOUNDARY = 40 @@ -58,6 +63,8 @@ vol.Optional(CONF_TYPE, default=DEFAULT_LED_TYPE): vol.In(LED_TYPE), vol.Required(CONF_NUMBER): cv.positive_int, + vol.Optional(CONF_FADE, default=DEFAULT_FADE): + vol.In(FADE), } ]), }, @@ -112,7 +119,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): group_conf.get(CONF_NUMBER), group_conf.get(CONF_NAME), group_conf.get(CONF_TYPE, DEFAULT_LED_TYPE)) - lights.append(LimitlessLEDGroup.factory(group)) + lights.append(LimitlessLEDGroup.factory(group, { + 'fade': group_conf.get(CONF_FADE, DEFAULT_FADE) + })) add_devices(lights) @@ -152,25 +161,26 @@ def wrapper(self, **kwargs): class LimitlessLEDGroup(Light): """Representation of a LimitessLED group.""" - def __init__(self, group): + def __init__(self, group, config): """Initialize a group.""" self.group = group self.repeating = False self._is_on = False self._brightness = None + self.config = config @staticmethod - def factory(group): + def factory(group, config): """Produce LimitlessLEDGroup objects.""" from limitlessled.group.rgbw import RgbwGroup from limitlessled.group.white import WhiteGroup from limitlessled.group.rgbww import RgbwwGroup if isinstance(group, WhiteGroup): - return LimitlessLEDWhiteGroup(group) + return LimitlessLEDWhiteGroup(group, config) elif isinstance(group, RgbwGroup): - return LimitlessLEDRGBWGroup(group) + return LimitlessLEDRGBWGroup(group, config) elif isinstance(group, RgbwwGroup): - return LimitlessLEDRGBWWGroup(group) + return LimitlessLEDRGBWWGroup(group, config) @property def should_poll(self): @@ -196,15 +206,17 @@ def brightness(self): def turn_off(self, transition_time, pipeline, **kwargs): """Turn off a group.""" if self.is_on: - pipeline.transition(transition_time, brightness=0.0).off() + if self.config[CONF_FADE] == FADE_OUT: + pipeline.transition(transition_time, brightness=0.0) + pipeline.off() class LimitlessLEDWhiteGroup(LimitlessLEDGroup): """Representation of a LimitlessLED White group.""" - def __init__(self, group): + def __init__(self, group, config): """Initialize White group.""" - super().__init__(group) + super().__init__(group, config) # Initialize group with known values. self.group.on = True self.group.temperature = 1.0 @@ -242,9 +254,9 @@ def turn_on(self, transition_time, pipeline, **kwargs): class LimitlessLEDRGBWGroup(LimitlessLEDGroup): """Representation of a LimitlessLED RGBW group.""" - def __init__(self, group): + def __init__(self, group, config): """Initialize RGBW group.""" - super().__init__(group) + super().__init__(group, config) # Initialize group with known values. self.group.on = True self.group.white() @@ -301,9 +313,9 @@ def turn_on(self, transition_time, pipeline, **kwargs): class LimitlessLEDRGBWWGroup(LimitlessLEDGroup): """Representation of a LimitlessLED RGBWW group.""" - def __init__(self, group): + def __init__(self, group, config): """Initialize RGBWW group.""" - super().__init__(group) + super().__init__(group, config) # Initialize group with known values. self.group.on = True self.group.white() From 2a0f0cc1751770e04a4cd45bd47c54330e5ad347 Mon Sep 17 00:00:00 2001 From: Miha Lunar Date: Thu, 22 Jun 2017 00:33:03 +0200 Subject: [PATCH 2/3] Changed fade value from enum to boolean --- homeassistant/components/light/limitlessled.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/light/limitlessled.py b/homeassistant/components/light/limitlessled.py index 41cdc191f6b653..734756c1357cf6 100644 --- a/homeassistant/components/light/limitlessled.py +++ b/homeassistant/components/light/limitlessled.py @@ -30,12 +30,9 @@ DEFAULT_PORT = 5987 DEFAULT_TRANSITION = 0 DEFAULT_VERSION = 6 -DEFAULT_FADE = 'out' +DEFAULT_FADE = False LED_TYPE = ['rgbw', 'rgbww', 'white', 'bridge-led'] -FADE_NONE = 'none' -FADE_OUT = 'out' -FADE = [FADE_NONE, FADE_OUT] RGB_BOUNDARY = 40 @@ -63,8 +60,7 @@ vol.Optional(CONF_TYPE, default=DEFAULT_LED_TYPE): vol.In(LED_TYPE), vol.Required(CONF_NUMBER): cv.positive_int, - vol.Optional(CONF_FADE, default=DEFAULT_FADE): - vol.In(FADE), + vol.Optional(CONF_FADE, default=DEFAULT_FADE): cv.boolean, } ]), }, @@ -206,7 +202,7 @@ def brightness(self): def turn_off(self, transition_time, pipeline, **kwargs): """Turn off a group.""" if self.is_on: - if self.config[CONF_FADE] == FADE_OUT: + if self.config[CONF_FADE]: pipeline.transition(transition_time, brightness=0.0) pipeline.off() From a099959eddfa27b897e508cc1068b7cc722ce7d5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 21 Jun 2017 22:22:10 -0700 Subject: [PATCH 3/3] No need to fall back to default since voluptuous takes care of that. --- homeassistant/components/light/limitlessled.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/light/limitlessled.py b/homeassistant/components/light/limitlessled.py index 734756c1357cf6..aad2abdd183dc1 100644 --- a/homeassistant/components/light/limitlessled.py +++ b/homeassistant/components/light/limitlessled.py @@ -116,7 +116,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): group_conf.get(CONF_NAME), group_conf.get(CONF_TYPE, DEFAULT_LED_TYPE)) lights.append(LimitlessLEDGroup.factory(group, { - 'fade': group_conf.get(CONF_FADE, DEFAULT_FADE) + 'fade': group_conf[CONF_FADE] })) add_devices(lights)