diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 5d89d878e3f..0bccc2eafb3 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -11,7 +11,6 @@ from flux_led.utils import ( rgbcw_brightness, rgbcw_to_rgbwc, rgbw_brightness, - rgbww_brightness, ) import voluptuous as vol @@ -24,12 +23,7 @@ from homeassistant.components.light import ( ATTR_RGBW_COLOR, ATTR_RGBWW_COLOR, ATTR_WHITE, - COLOR_MODE_BRIGHTNESS, - COLOR_MODE_COLOR_TEMP, - COLOR_MODE_RGB, - COLOR_MODE_RGBW, COLOR_MODE_RGBWW, - COLOR_MODE_WHITE, PLATFORM_SCHEMA, SUPPORT_EFFECT, SUPPORT_TRANSITION, @@ -51,8 +45,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.util.color import ( - color_hs_to_RGB, - color_RGB_to_hs, color_temperature_kelvin_to_mired, color_temperature_mired_to_kelvin, ) @@ -79,7 +71,7 @@ from .const import ( TRANSITION_STROBE, ) from .entity import FluxOnOffEntity -from .util import _flux_color_mode_to_hass, _hass_color_modes +from .util import _effect_brightness, _flux_color_mode_to_hass, _hass_color_modes _LOGGER = logging.getLogger(__name__) @@ -262,10 +254,7 @@ class FluxLight(FluxOnOffEntity, CoordinatorEntity, LightEntity): @property def rgb_color(self) -> tuple[int, int, int]: """Return the rgb color value.""" - # Note that we call color_RGB_to_hs and not color_RGB_to_hsv - # to get the unscaled value since this is what the frontend wants - # https://github.com/home-assistant/frontend/blob/e797c017614797bb11671496d6bd65863de22063/src/dialogs/more-info/controls/more-info-light.ts#L263 - rgb: tuple[int, int, int] = color_hs_to_RGB(*color_RGB_to_hs(*self._device.rgb)) + rgb: tuple[int, int, int] = self._device.rgb_unscaled return rgb @property @@ -280,12 +269,6 @@ class FluxLight(FluxOnOffEntity, CoordinatorEntity, LightEntity): rgbcw: tuple[int, int, int, int, int] = self._device.rgbcw return rgbcw - @property - def rgbwc_color(self) -> tuple[int, int, int, int, int]: - """Return the rgbwc color value.""" - rgbwc: tuple[int, int, int, int, int] = self._device.rgbww - return rgbwc - @property def color_mode(self) -> str: """Return the color mode of the light.""" @@ -311,7 +294,7 @@ class FluxLight(FluxOnOffEntity, CoordinatorEntity, LightEntity): if MODE_ATTRS.intersection(kwargs): await self._async_set_mode(**kwargs) return - await self._async_adjust_brightness(self._async_brightness(**kwargs)) + await self._device.async_set_brightness(self._async_brightness(**kwargs)) async def _async_set_effect(self, effect: str, brightness: int) -> None: """Set an effect.""" @@ -324,9 +307,10 @@ class FluxLight(FluxOnOffEntity, CoordinatorEntity, LightEntity): self._custom_effect_transition, ) return - effect_brightness = round(brightness / 255 * 100) await self._device.async_set_effect( - effect, self._device.speed or DEFAULT_EFFECT_SPEED, effect_brightness + effect, + self._device.speed or DEFAULT_EFFECT_SPEED, + _effect_brightness(brightness), ) @callback @@ -385,35 +369,6 @@ class FluxLight(FluxOnOffEntity, CoordinatorEntity, LightEntity): await self._device.async_set_levels(w=white) return - async def _async_adjust_brightness(self, brightness: int) -> None: - """Adjust brightness.""" - # Handle brightness adjustment in effect mode - if effect := self.effect: - await self._async_set_effect(effect, brightness) - return - if self.color_mode == COLOR_MODE_COLOR_TEMP: - await self._device.async_set_white_temp(self._device.color_temp, brightness) - return - # Handle brightness adjustment in RGB Color Mode - if self.color_mode == COLOR_MODE_RGB: - await self._device.async_set_levels(*self.rgb_color, brightness=brightness) - return - # Handle brightness adjustment in RGBW Color Mode - if self.color_mode == COLOR_MODE_RGBW: - await self._device.async_set_levels( - *rgbw_brightness(self.rgbw_color, brightness) - ) - return - # Handle brightness adjustment in RGBWW Color Mode - if self.color_mode == COLOR_MODE_RGBWW: - rgbwc = self.rgbwc_color - await self._device.async_set_levels(*rgbww_brightness(rgbwc, brightness)) - return - # Handle Brightness Only Color Mode - if self.color_mode in {COLOR_MODE_WHITE, COLOR_MODE_BRIGHTNESS}: - await self._device.async_set_levels(w=brightness) - return - async def async_set_custom_effect( self, colors: list[tuple[int, int, int]], speed_pct: int, transition: str ) -> None: diff --git a/homeassistant/components/flux_led/manifest.json b/homeassistant/components/flux_led/manifest.json index 8276cde0ff9..64a41a9ce8a 100644 --- a/homeassistant/components/flux_led/manifest.json +++ b/homeassistant/components/flux_led/manifest.json @@ -3,7 +3,7 @@ "name": "Flux LED/MagicHome", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/flux_led", - "requirements": ["flux_led==0.24.34"], + "requirements": ["flux_led==0.24.35"], "quality_scale": "platinum", "codeowners": ["@icemanch"], "iot_class": "local_push", diff --git a/homeassistant/components/flux_led/number.py b/homeassistant/components/flux_led/number.py index dcd0d816cee..39cfb2ea094 100644 --- a/homeassistant/components/flux_led/number.py +++ b/homeassistant/components/flux_led/number.py @@ -15,7 +15,7 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import FluxLedUpdateCoordinator from .const import DOMAIN, EFFECT_SPEED_SUPPORT_MODES from .entity import FluxEntity -from .util import _hass_color_modes +from .util import _effect_brightness, _hass_color_modes async def async_setup_entry( @@ -68,7 +68,6 @@ class FluxNumber(FluxEntity, CoordinatorEntity, NumberEntity): async def async_set_value(self, value: float) -> None: """Set the flux speed value.""" current_effect = self._device.effect - current_brightness = self._device.brightness new_speed = int(value) if not current_effect: raise HomeAssistantError( @@ -76,8 +75,7 @@ class FluxNumber(FluxEntity, CoordinatorEntity, NumberEntity): ) if self._device.original_addressable and not self._device.is_on: raise HomeAssistantError("Speed can only be adjusted when the light is on") - effect_brightness = round(current_brightness / 255 * 100) await self._device.async_set_effect( - current_effect, new_speed, effect_brightness + current_effect, new_speed, _effect_brightness(self._device.brightness) ) await self.coordinator.async_request_refresh() diff --git a/homeassistant/components/flux_led/util.py b/homeassistant/components/flux_led/util.py index a564cb81bd0..8a089c9ebb6 100644 --- a/homeassistant/components/flux_led/util.py +++ b/homeassistant/components/flux_led/util.py @@ -25,3 +25,8 @@ def _flux_color_mode_to_hass(flux_color_mode: str, flux_color_modes: set[str]) - return COLOR_MODE_WHITE return COLOR_MODE_BRIGHTNESS return FLUX_COLOR_MODE_TO_HASS.get(flux_color_mode, COLOR_MODE_ONOFF) + + +def _effect_brightness(brightness: int) -> int: + """Convert hass brightness to effect brightness.""" + return round(brightness / 255 * 100) diff --git a/requirements_all.txt b/requirements_all.txt index d51a8a3257e..f63190bbd6e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -658,7 +658,7 @@ fjaraskupan==1.0.2 flipr-api==1.4.1 # homeassistant.components.flux_led -flux_led==0.24.34 +flux_led==0.24.35 # homeassistant.components.homekit fnvhash==0.1.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 30e3fd0b7e7..4b7c224ec34 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -399,7 +399,7 @@ fjaraskupan==1.0.2 flipr-api==1.4.1 # homeassistant.components.flux_led -flux_led==0.24.34 +flux_led==0.24.35 # homeassistant.components.homekit fnvhash==0.1.0 diff --git a/tests/components/flux_led/__init__.py b/tests/components/flux_led/__init__.py index ea02529d83c..e3eb4a0e200 100644 --- a/tests/components/flux_led/__init__.py +++ b/tests/components/flux_led/__init__.py @@ -64,6 +64,7 @@ def _mocked_bulb() -> AIOWifiLedBulb: bulb.async_set_preset_pattern = AsyncMock() bulb.async_set_effect = AsyncMock() bulb.async_set_white_temp = AsyncMock() + bulb.async_set_brightness = AsyncMock() bulb.async_stop = AsyncMock() bulb.async_update = AsyncMock() bulb.async_turn_off = AsyncMock() @@ -76,6 +77,7 @@ def _mocked_bulb() -> AIOWifiLedBulb: bulb.getRgbww = MagicMock(return_value=[255, 0, 0, 50, 0]) bulb.getRgbcw = MagicMock(return_value=[255, 0, 0, 0, 50]) bulb.rgb = (255, 0, 0) + bulb.rgb_unscaled = (255, 0, 0) bulb.rgbw = (255, 0, 0, 50) bulb.rgbww = (255, 0, 0, 50, 0) bulb.rgbcw = (255, 0, 0, 0, 50) diff --git a/tests/components/flux_led/test_light.py b/tests/components/flux_led/test_light.py index a02224364cc..e66492d2f43 100644 --- a/tests/components/flux_led/test_light.py +++ b/tests/components/flux_led/test_light.py @@ -240,8 +240,8 @@ async def test_rgb_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(255, 0, 0, brightness=100) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() await hass.services.async_call( LIGHT_DOMAIN, @@ -331,8 +331,8 @@ async def test_rgb_cct_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(255, 0, 0, brightness=100) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() await hass.services.async_call( LIGHT_DOMAIN, @@ -391,8 +391,8 @@ async def test_rgb_cct_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 255}, blocking=True, ) - bulb.async_set_white_temp.assert_called_with(5000, 255) - bulb.async_set_white_temp.reset_mock() + bulb.async_set_brightness.assert_called_with(255) + bulb.async_set_brightness.reset_mock() await hass.services.async_call( LIGHT_DOMAIN, @@ -400,8 +400,8 @@ async def test_rgb_cct_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 128}, blocking=True, ) - bulb.async_set_white_temp.assert_called_with(5000, 128) - bulb.async_set_white_temp.reset_mock() + bulb.async_set_brightness.assert_called_with(128) + bulb.async_set_brightness.reset_mock() async def test_rgbw_light(hass: HomeAssistant) -> None: @@ -451,8 +451,8 @@ async def test_rgbw_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(168, 0, 0, 33) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() state = hass.states.get(entity_id) assert state.state == STATE_ON @@ -553,8 +553,8 @@ async def test_rgb_or_w_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(255, 0, 0, brightness=100) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() state = hass.states.get(entity_id) assert state.state == STATE_ON @@ -612,8 +612,8 @@ async def test_rgb_or_w_light(hass: HomeAssistant) -> None: }, blocking=True, ) - bulb.async_set_levels.assert_called_with(w=100) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() async def test_rgbcw_light(hass: HomeAssistant) -> None: @@ -663,8 +663,8 @@ async def test_rgbcw_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(250, 0, 0, 49, 0) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() bulb.is_on = True await hass.services.async_call( @@ -751,8 +751,8 @@ async def test_rgbcw_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 255}, blocking=True, ) - bulb.async_set_effect.assert_called_with("purple_fade", 50, 100) - bulb.async_set_effect.reset_mock() + bulb.async_set_brightness.assert_called_with(255) + bulb.async_set_brightness.reset_mock() async def test_white_light(hass: HomeAssistant) -> None: @@ -802,8 +802,8 @@ async def test_white_light(hass: HomeAssistant) -> None: {ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS: 100}, blocking=True, ) - bulb.async_set_levels.assert_called_with(w=100) - bulb.async_set_levels.reset_mock() + bulb.async_set_brightness.assert_called_with(100) + bulb.async_set_brightness.reset_mock() async def test_rgb_light_custom_effects(hass: HomeAssistant) -> None: