mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 22:27:07 +00:00
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:
parent
391b144033
commit
ccd22ce0d5
@ -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)
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user