mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 09:47:52 +00:00
Update flux_led to use async_set_brightness in the lib (#60315)
This commit is contained in:
parent
a78f0eae39
commit
213be1f15e
@ -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:
|
||||
|
@ -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",
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user