Improve support for flux_led pixel/RBM controllers (#59325)
* Fetch flux_led effects from library - Each model can have different effects * Improve support for flux_led pixel/RBM controllers - RBM effects 1-100 are now available * empty
This commit is contained in:
parent
958c588a19
commit
977b3cbe98
7 changed files with 47 additions and 92 deletions
|
@ -38,7 +38,6 @@ from homeassistant.components.light import (
|
|||
COLOR_MODE_RGBW,
|
||||
COLOR_MODE_RGBWW,
|
||||
COLOR_MODE_WHITE,
|
||||
EFFECT_COLORLOOP,
|
||||
EFFECT_RANDOM,
|
||||
PLATFORM_SCHEMA,
|
||||
SUPPORT_EFFECT,
|
||||
|
@ -110,55 +109,8 @@ EFFECT_SUPPORT_MODES = {COLOR_MODE_RGB, COLOR_MODE_RGBW, COLOR_MODE_RGBWW}
|
|||
# Warm-white and Cool-white modes
|
||||
COLOR_TEMP_WARM_VS_COLD_WHITE_CUT_OFF: Final = 285
|
||||
|
||||
# List of supported effects which aren't already declared in LIGHT
|
||||
EFFECT_RED_FADE: Final = "red_fade"
|
||||
EFFECT_GREEN_FADE: Final = "green_fade"
|
||||
EFFECT_BLUE_FADE: Final = "blue_fade"
|
||||
EFFECT_YELLOW_FADE: Final = "yellow_fade"
|
||||
EFFECT_CYAN_FADE: Final = "cyan_fade"
|
||||
EFFECT_PURPLE_FADE: Final = "purple_fade"
|
||||
EFFECT_WHITE_FADE: Final = "white_fade"
|
||||
EFFECT_RED_GREEN_CROSS_FADE: Final = "rg_cross_fade"
|
||||
EFFECT_RED_BLUE_CROSS_FADE: Final = "rb_cross_fade"
|
||||
EFFECT_GREEN_BLUE_CROSS_FADE: Final = "gb_cross_fade"
|
||||
EFFECT_COLORSTROBE: Final = "colorstrobe"
|
||||
EFFECT_RED_STROBE: Final = "red_strobe"
|
||||
EFFECT_GREEN_STROBE: Final = "green_strobe"
|
||||
EFFECT_BLUE_STROBE: Final = "blue_strobe"
|
||||
EFFECT_YELLOW_STROBE: Final = "yellow_strobe"
|
||||
EFFECT_CYAN_STROBE: Final = "cyan_strobe"
|
||||
EFFECT_PURPLE_STROBE: Final = "purple_strobe"
|
||||
EFFECT_WHITE_STROBE: Final = "white_strobe"
|
||||
EFFECT_COLORJUMP: Final = "colorjump"
|
||||
EFFECT_CUSTOM: Final = "custom"
|
||||
|
||||
EFFECT_MAP: Final = {
|
||||
EFFECT_COLORLOOP: 0x25,
|
||||
EFFECT_RED_FADE: 0x26,
|
||||
EFFECT_GREEN_FADE: 0x27,
|
||||
EFFECT_BLUE_FADE: 0x28,
|
||||
EFFECT_YELLOW_FADE: 0x29,
|
||||
EFFECT_CYAN_FADE: 0x2A,
|
||||
EFFECT_PURPLE_FADE: 0x2B,
|
||||
EFFECT_WHITE_FADE: 0x2C,
|
||||
EFFECT_RED_GREEN_CROSS_FADE: 0x2D,
|
||||
EFFECT_RED_BLUE_CROSS_FADE: 0x2E,
|
||||
EFFECT_GREEN_BLUE_CROSS_FADE: 0x2F,
|
||||
EFFECT_COLORSTROBE: 0x30,
|
||||
EFFECT_RED_STROBE: 0x31,
|
||||
EFFECT_GREEN_STROBE: 0x32,
|
||||
EFFECT_BLUE_STROBE: 0x33,
|
||||
EFFECT_YELLOW_STROBE: 0x34,
|
||||
EFFECT_CYAN_STROBE: 0x35,
|
||||
EFFECT_PURPLE_STROBE: 0x36,
|
||||
EFFECT_WHITE_STROBE: 0x37,
|
||||
EFFECT_COLORJUMP: 0x38,
|
||||
}
|
||||
EFFECT_ID_NAME: Final = {v: k for k, v in EFFECT_MAP.items()}
|
||||
EFFECT_CUSTOM_CODE: Final = 0x60
|
||||
|
||||
FLUX_EFFECT_LIST: Final = sorted(EFFECT_MAP) + [EFFECT_RANDOM]
|
||||
|
||||
SERVICE_CUSTOM_EFFECT: Final = "set_custom_effect"
|
||||
|
||||
CUSTOM_EFFECT_DICT: Final = {
|
||||
|
@ -315,9 +267,9 @@ class FluxLight(FluxEntity, CoordinatorEntity, LightEntity):
|
|||
}
|
||||
if self._attr_supported_color_modes.intersection(EFFECT_SUPPORT_MODES):
|
||||
self._attr_supported_features |= SUPPORT_EFFECT
|
||||
self._attr_effect_list = FLUX_EFFECT_LIST
|
||||
self._attr_effect_list = [*self._device.effect_list, EFFECT_RANDOM]
|
||||
if custom_effect_colors:
|
||||
self._attr_effect_list = [*FLUX_EFFECT_LIST, EFFECT_CUSTOM]
|
||||
self._attr_effect_list.append(EFFECT_CUSTOM)
|
||||
self._custom_effect_colors = custom_effect_colors
|
||||
self._custom_effect_speed_pct = custom_effect_speed_pct
|
||||
self._custom_effect_transition = custom_effect_transition
|
||||
|
@ -369,9 +321,10 @@ class FluxLight(FluxEntity, CoordinatorEntity, LightEntity):
|
|||
@property
|
||||
def effect(self) -> str | None:
|
||||
"""Return the current effect."""
|
||||
if (current_mode := self._device.preset_pattern_num) == EFFECT_CUSTOM_CODE:
|
||||
return EFFECT_CUSTOM
|
||||
return EFFECT_ID_NAME.get(current_mode)
|
||||
effect = self._device.effect
|
||||
if effect is None:
|
||||
return None
|
||||
return cast(str, effect)
|
||||
|
||||
async def _async_turn_on(self, **kwargs: Any) -> None:
|
||||
"""Turn the specified or all lights on."""
|
||||
|
@ -444,13 +397,9 @@ class FluxLight(FluxEntity, CoordinatorEntity, LightEntity):
|
|||
self._custom_effect_transition,
|
||||
)
|
||||
return
|
||||
# Effect selection
|
||||
if effect in EFFECT_MAP:
|
||||
await self._device.async_set_preset_pattern(
|
||||
EFFECT_MAP[effect], DEFAULT_EFFECT_SPEED
|
||||
)
|
||||
return
|
||||
raise ValueError(f"Unknown effect {effect}")
|
||||
await self._device.async_set_effect(effect, DEFAULT_EFFECT_SPEED)
|
||||
return
|
||||
|
||||
# Handle brightness adjustment in CCT Color Mode
|
||||
if self.color_mode == COLOR_MODE_COLOR_TEMP:
|
||||
await self._device.async_set_white_temp(self._device.color_temp, brightness)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue