From 08e93224e0689c9a20a2b6b43057f60348bb7c14 Mon Sep 17 00:00:00 2001 From: autinerd Date: Wed, 20 Mar 2019 10:02:54 +0100 Subject: [PATCH 01/10] Remove explicit declaration of automatic found devices as RGBW --- homeassistant/components/flux_led/light.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 17c288da6c20d9..c080407560439c 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -151,7 +151,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if ipaddr in light_ips: continue device['name'] = '{} {}'.format(device['id'], ipaddr) - device[ATTR_MODE] = MODE_RGBW device[CONF_PROTOCOL] = None device[CONF_CUSTOM_EFFECT] = None light = FluxLight(device) From 5f9ccd28cde5a8ca477103d5ad7254919b6b6fb1 Mon Sep 17 00:00:00 2001 From: autinerd Date: Thu, 4 Apr 2019 08:23:28 +0200 Subject: [PATCH 02/10] fixes for Magic Home only-white controllers --- homeassistant/components/flux_led/light.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index c080407560439c..35bef942536a13 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -277,6 +277,11 @@ def _turn_on(self, **kwargs): effect = kwargs.get(ATTR_EFFECT) white = kwargs.get(ATTR_WHITE_VALUE) + # handle W only mode (use brightness instead of white value) + if self._mode == MODE_WHITE: + self._bulb.setWarmWhite255(brightness) + return + # Show warning if effect set with rgb, brightness, or white level if effect and (brightness or white or hs_color): _LOGGER.warning("RGB, brightness and white level are ignored when" @@ -312,12 +317,8 @@ def _turn_on(self, **kwargs): self._color = (self._color[0], self._color[1], brightness / 255 * 100) - # handle W only mode (use brightness instead of white value) - if self._mode == MODE_WHITE: - self._bulb.setRgbw(0, 0, 0, w=brightness) - # handle RGBW mode - elif self._mode == MODE_RGBW: + if self._mode == MODE_RGBW: if white is None: self._bulb.setRgbw(*color_util.color_hsv_to_RGB(*self._color)) else: @@ -337,7 +338,7 @@ def update(self): try: self._connect() self._error_reported = False - if self._bulb.getRgb() != (0, 0, 0): + if self._mode != MODE_WHITE and self._bulb.getRgb() != (0, 0, 0): color = self._bulb.getRgbw() self._color = color_util.color_RGB_to_hsv(*color[0:3]) self._white_value = color[3] @@ -349,7 +350,9 @@ def update(self): self._error_reported = True return self._bulb.update_state(retry=2) - if self._bulb.getRgb() != (0, 0, 0): + if self._mode != MODE_WHITE and self._bulb.getRgb() != (0, 0, 0): color = self._bulb.getRgbw() self._color = color_util.color_RGB_to_hsv(*color[0:3]) self._white_value = color[3] + elif self._mode == MODE_WHITE: + self._white_value = self._bulb.getRgbw()[3] From e23c36633458c8459403330659650311985bcc56 Mon Sep 17 00:00:00 2001 From: autinerd Date: Thu, 4 Apr 2019 08:33:40 +0200 Subject: [PATCH 03/10] mode is now set to None instead of removed entirely --- homeassistant/components/flux_led/light.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 35bef942536a13..c7c451d1b06d82 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -151,6 +151,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if ipaddr in light_ips: continue device['name'] = '{} {}'.format(device['id'], ipaddr) + device[ATTR_MODE] = None device[CONF_PROTOCOL] = None device[CONF_CUSTOM_EFFECT] = None light = FluxLight(device) From 52cb222a253e6758422ae9115b5a84ef1f6ebf68 Mon Sep 17 00:00:00 2001 From: autinerd Date: Thu, 4 Apr 2019 09:44:49 +0200 Subject: [PATCH 04/10] flux_led now changes no values when turned on from off state. --- homeassistant/components/flux_led/light.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index c7c451d1b06d82..afcd92bbda4865 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -271,7 +271,10 @@ async def async_turn_on(self, **kwargs): def _turn_on(self, **kwargs): """Turn the specified or all lights on.""" - self._bulb.turnOn() + if not self.is_on: + self._bulb.turnOn() + if kwargs.get(ATTR_BRIGHTNESS) is None: + return hs_color = kwargs.get(ATTR_HS_COLOR) brightness = kwargs.get(ATTR_BRIGHTNESS) @@ -294,7 +297,6 @@ def _turn_on(self, **kwargs): random.randint(0, 255), random.randint(0, 255)) return - if effect == EFFECT_CUSTOM: if self._custom_effect: self._bulb.setCustomPattern( From 05d8200788455a8d008105c62761749118239f49 Mon Sep 17 00:00:00 2001 From: autinerd Date: Wed, 10 Apr 2019 08:48:38 +0200 Subject: [PATCH 05/10] better checking for changed values in turn_on --- homeassistant/components/flux_led/light.py | 89 ++++++++++------------ 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index afcd92bbda4865..7f0120738f6415 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -258,7 +258,6 @@ def effect(self): for effect, code in EFFECT_MAP.items(): if current_mode == code: return effect - return None async def async_turn_on(self, **kwargs): @@ -273,63 +272,55 @@ def _turn_on(self, **kwargs): """Turn the specified or all lights on.""" if not self.is_on: self._bulb.turnOn() - if kwargs.get(ATTR_BRIGHTNESS) is None: - return hs_color = kwargs.get(ATTR_HS_COLOR) brightness = kwargs.get(ATTR_BRIGHTNESS) effect = kwargs.get(ATTR_EFFECT) white = kwargs.get(ATTR_WHITE_VALUE) - # handle W only mode (use brightness instead of white value) - if self._mode == MODE_WHITE: - self._bulb.setWarmWhite255(brightness) - return - - # Show warning if effect set with rgb, brightness, or white level - if effect and (brightness or white or hs_color): - _LOGGER.warning("RGB, brightness and white level are ignored when" - " an effect is specified for a flux bulb") - - # Random color effect - if effect == EFFECT_RANDOM: - self._bulb.setRgb(random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255)) - return - if effect == EFFECT_CUSTOM: - if self._custom_effect: - self._bulb.setCustomPattern( - self._custom_effect[CONF_COLORS], - self._custom_effect[CONF_SPEED_PCT], - self._custom_effect[CONF_TRANSITION]) - return - - # Effect selection - if effect in EFFECT_MAP: - self._bulb.setPresetPattern(EFFECT_MAP[effect], 50) + if all(None for item in [hs_color, brightness, effect, white]): return - # Preserve current brightness on color/white level change - if brightness is None: - brightness = self.brightness - - if hs_color: - self._color = (hs_color[0], hs_color[1], brightness / 255 * 100) - elif brightness and (hs_color is None) and self._mode != MODE_WHITE: - self._color = (self._color[0], self._color[1], - brightness / 255 * 100) - - # handle RGBW mode - if self._mode == MODE_RGBW: - if white is None: - self._bulb.setRgbw(*color_util.color_hsv_to_RGB(*self._color)) - else: - self._bulb.setRgbw(w=white) - # handle RGB mode + # handle W only mode (use brightness instead of white value) + if self._mode == MODE_WHITE: + if brightness is not None: + self._bulb.setWarmWhite255(brightness) + return else: - self._bulb.setRgb(*color_util.color_hsv_to_RGB(*self._color)) - return + if effect is not None: + # Random color effect + if effect == EFFECT_RANDOM: + self._bulb.setRgb(random.randint(0, 255), + random.randint(0, 255), + random.randint(0, 255)) + elif effect == EFFECT_CUSTOM: + if self._custom_effect: + self._bulb.setCustomPattern( + self._custom_effect[CONF_COLORS], + self._custom_effect[CONF_SPEED_PCT], + self._custom_effect[CONF_TRANSITION]) + # Effect selection + elif effect in EFFECT_MAP: + self._bulb.setPresetPattern(EFFECT_MAP[effect], 50) + return + # Preserve current brightness on color/white level change + if brightness is None: + brightness = self.brightness + + if hs_color is not None: + color = (hs_color[0], hs_color[1], brightness / 255 * 100) + elif brightness is not None and hs_color is None: + color = (self._color[0], self._color[1], + brightness / 255 * 100) + # handle RGBW mode + if self._mode == MODE_RGBW: + if white is None: + self._bulb.setRgbw(*color_util.color_hsv_to_RGB(*color)) + else: + self._bulb.setRgbw(w=white) + # handle RGB mode + else: + self._bulb.setRgb(*color_util.color_hsv_to_RGB(*color)) def turn_off(self, **kwargs): """Turn the specified or all lights off.""" From f568097980d539035c9239d90ae0e702005f5da0 Mon Sep 17 00:00:00 2001 From: Sidney Date: Wed, 10 Apr 2019 21:40:03 +0200 Subject: [PATCH 06/10] Reduce waiting time to 1 second --- homeassistant/components/flux_led/light.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index c6ba5ae253eb12..e821c075fc302b 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -259,9 +259,9 @@ async def async_turn_on(self, **kwargs): """Turn the specified or all lights on and wait for state.""" await self.hass.async_add_executor_job(partial(self._turn_on, **kwargs)) - # The bulb needs a second to tell its new values, - # so we wait 2 seconds before updating - await sleep(2) + # The bulb needs a bit to tell its new values, + # so we wait 1 second before updating + await sleep(1) def _turn_on(self, **kwargs): """Turn the specified or all lights on.""" From b46cbbe077db617afb9d55dfd317c86880e5edd3 Mon Sep 17 00:00:00 2001 From: autinerd Date: Thu, 11 Apr 2019 13:10:25 +0200 Subject: [PATCH 07/10] Correction of turn on logic --- homeassistant/components/flux_led/light.py | 71 +++++++++++----------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index c6ba5ae253eb12..b79f05f9de8e63 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -265,57 +265,54 @@ async def async_turn_on(self, **kwargs): def _turn_on(self, **kwargs): """Turn the specified or all lights on.""" - if not self.is_on: - self._bulb.turnOn() + self._bulb.turnOn() hs_color = kwargs.get(ATTR_HS_COLOR) brightness = kwargs.get(ATTR_BRIGHTNESS) effect = kwargs.get(ATTR_EFFECT) white = kwargs.get(ATTR_WHITE_VALUE) - if all(None for item in [hs_color, brightness, effect, white]): + if all(item is None for item in [hs_color, brightness, effect, white]): return # handle W only mode (use brightness instead of white value) if self._mode == MODE_WHITE: if brightness is not None: self._bulb.setWarmWhite255(brightness) - return - else: - if effect is not None: - # Random color effect - if effect == EFFECT_RANDOM: - self._bulb.setRgb(random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255)) - elif effect == EFFECT_CUSTOM: - if self._custom_effect: - self._bulb.setCustomPattern( - self._custom_effect[CONF_COLORS], - self._custom_effect[CONF_SPEED_PCT], - self._custom_effect[CONF_TRANSITION]) - # Effect selection - elif effect in EFFECT_MAP: - self._bulb.setPresetPattern(EFFECT_MAP[effect], 50) - return - # Preserve current brightness on color/white level change - if brightness is None: + return + if effect is not None: + # Random color effect + if effect == EFFECT_RANDOM: + self._bulb.setRgb(random.randint(0, 255), + random.randint(0, 255), + random.randint(0, 255)) + elif effect == EFFECT_CUSTOM: + if self._custom_effect: + self._bulb.setCustomPattern( + self._custom_effect[CONF_COLORS], + self._custom_effect[CONF_SPEED_PCT], + self._custom_effect[CONF_TRANSITION]) + # Effect selection + elif effect in EFFECT_MAP: + self._bulb.setPresetPattern(EFFECT_MAP[effect], 50) + return + # Preserve current brightness on color/white level change + if hs_color is not None: + if brightness is not None: brightness = self.brightness - - if hs_color is not None: - color = (hs_color[0], hs_color[1], brightness / 255 * 100) - elif brightness is not None and hs_color is None: - color = (self._color[0], self._color[1], - brightness / 255 * 100) - # handle RGBW mode - if self._mode == MODE_RGBW: - if white is None: - self._bulb.setRgbw(*color_util.color_hsv_to_RGB(*color)) - else: - self._bulb.setRgbw(w=white) - # handle RGB mode + color = (hs_color[0], hs_color[1], brightness / 255 * 100) + elif brightness is not None: + color = (self._color[0], self._color[1], + brightness / 255 * 100) + # handle RGBW mode + if self._mode == MODE_RGBW: + if white is None: + self._bulb.setRgbw(*color_util.color_hsv_to_RGB(*color)) else: - self._bulb.setRgb(*color_util.color_hsv_to_RGB(*color)) + self._bulb.setRgbw(w=white) + # handle RGB mode + else: + self._bulb.setRgb(*color_util.color_hsv_to_RGB(*color)) def turn_off(self, **kwargs): """Turn the specified or all lights off.""" From f780d73e842b1ef0c567e9cf833e4c0abcc5199e Mon Sep 17 00:00:00 2001 From: Sidney Date: Thu, 11 Apr 2019 17:42:37 +0200 Subject: [PATCH 08/10] Remove accidentally inserted 'not' --- homeassistant/components/flux_led/light.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 3f835c4428d051..adf049e2e6e1b3 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -298,7 +298,7 @@ def _turn_on(self, **kwargs): return # Preserve current brightness on color/white level change if hs_color is not None: - if brightness is not None: + if brightness is None: brightness = self.brightness color = (hs_color[0], hs_color[1], brightness / 255 * 100) elif brightness is not None: From f104fc05d32fb4675a6ac0fd3a6d12004279dc86 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Fri, 12 Apr 2019 00:24:02 +0200 Subject: [PATCH 09/10] Remove lint --- homeassistant/components/flux_led/light.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index adf049e2e6e1b3..f85b6cebd18e24 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -186,6 +186,11 @@ def _connect(self): else: self._mode = MODE_RGB + if self._mode != MODE_WHITE and self._bulb.getRgb() != (0, 0, 0): + color = self._bulb.getRgbw() + self._color = color_util.color_RGB_to_hsv(*color[0:3]) + self._white_value = color[3] + def _disconnect(self): """Disconnect from Flux light.""" self._bulb = None @@ -324,10 +329,6 @@ def update(self): try: self._connect() self._error_reported = False - if self._mode != MODE_WHITE and self._bulb.getRgb() != (0, 0, 0): - color = self._bulb.getRgbw() - self._color = color_util.color_RGB_to_hsv(*color[0:3]) - self._white_value = color[3] except socket.error: self._disconnect() if not self._error_reported: From b47639078eda14f1aa75947cb43b0547d8958d49 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Mon, 15 Apr 2019 22:54:54 +0200 Subject: [PATCH 10/10] Remove redundant code --- homeassistant/components/flux_led/light.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index f85b6cebd18e24..52c8a87a80e5ec 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -186,11 +186,6 @@ def _connect(self): else: self._mode = MODE_RGB - if self._mode != MODE_WHITE and self._bulb.getRgb() != (0, 0, 0): - color = self._bulb.getRgbw() - self._color = color_util.color_RGB_to_hsv(*color[0:3]) - self._white_value = color[3] - def _disconnect(self): """Disconnect from Flux light.""" self._bulb = None