Fix brightness_step and brightness_step_pct via lifx.set_state (#149217)

Signed-off-by: Avi Miller <me@dje.li>
This commit is contained in:
Avi Miller 2025-07-24 00:55:44 +10:00 committed by GitHub
parent 391b144033
commit ccd22ce0d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 0 deletions

View File

@ -10,6 +10,9 @@ import aiolifx_effects as aiolifx_effects_module
import voluptuous as vol
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
ATTR_BRIGHTNESS_STEP,
ATTR_BRIGHTNESS_STEP_PCT,
ATTR_EFFECT,
ATTR_TRANSITION,
LIGHT_TURN_ON_SCHEMA,
@ -234,6 +237,20 @@ class LIFXLight(LIFXEntity, LightEntity):
else:
fade = 0
if ATTR_BRIGHTNESS_STEP in kwargs or ATTR_BRIGHTNESS_STEP_PCT in kwargs:
brightness = self.brightness if self.is_on and self.brightness else 0
if ATTR_BRIGHTNESS_STEP in kwargs:
brightness += kwargs.pop(ATTR_BRIGHTNESS_STEP)
else:
brightness_pct = round(brightness / 255 * 100)
brightness = round(
(brightness_pct + kwargs.pop(ATTR_BRIGHTNESS_STEP_PCT)) / 100 * 255
)
kwargs[ATTR_BRIGHTNESS] = max(0, min(255, brightness))
# These are both False if ATTR_POWER is not set
power_on = kwargs.get(ATTR_POWER, False)
power_off = not kwargs.get(ATTR_POWER, True)

View File

@ -30,6 +30,8 @@ from homeassistant.components.lifx.manager import (
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
ATTR_BRIGHTNESS_PCT,
ATTR_BRIGHTNESS_STEP,
ATTR_BRIGHTNESS_STEP_PCT,
ATTR_COLOR_MODE,
ATTR_COLOR_NAME,
ATTR_COLOR_TEMP_KELVIN,
@ -1735,6 +1737,48 @@ async def test_transitions_color_bulb(hass: HomeAssistant) -> None:
bulb.set_color.reset_mock()
async def test_lifx_set_state_brightness(hass: HomeAssistant) -> None:
"""Test lifx.set_state works with brightness, brightness_pct and brightness_step."""
config_entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "127.0.0.1"}, unique_id=SERIAL
)
config_entry.add_to_hass(hass)
bulb = _mocked_bulb_new_firmware()
bulb.power_level = 65535
bulb.color = [0, 0, 32768, 3500]
with (
_patch_discovery(device=bulb),
_patch_config_flow_try_connect(device=bulb),
_patch_device(device=bulb),
):
await async_setup_component(hass, lifx.DOMAIN, {lifx.DOMAIN: {}})
await hass.async_block_till_done()
entity_id = "light.my_bulb"
# brightness_step should convert from 8 bit to 16 bit
await hass.services.async_call(
DOMAIN,
"set_state",
{ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_STEP: 128},
blocking=True,
)
assert bulb.set_color.calls[0][0][0] == [0, 0, 65535, 3500]
bulb.set_color.reset_mock()
# brightness_step_pct should convert from percentage to 16 bit
await hass.services.async_call(
DOMAIN,
"set_state",
{ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_STEP_PCT: 50},
blocking=True,
)
assert bulb.set_color.calls[0][0][0] == [0, 0, 65535, 3500]
bulb.set_color.reset_mock()
async def test_lifx_set_state_color(hass: HomeAssistant) -> None:
"""Test lifx.set_state works with color names and RGB."""
config_entry = MockConfigEntry(