Skip to content

Commit 68b7d09

Browse files
Djelibeybifrenck
authored andcommitted
Fix brightness_step and brightness_step_pct via lifx.set_state (home-assistant#149217)
Signed-off-by: Avi Miller <[email protected]>
1 parent c3eb6de commit 68b7d09

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

homeassistant/components/lifx/light.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
import voluptuous as vol
1111

1212
from homeassistant.components.light import (
13+
ATTR_BRIGHTNESS,
14+
ATTR_BRIGHTNESS_STEP,
15+
ATTR_BRIGHTNESS_STEP_PCT,
1316
ATTR_EFFECT,
1417
ATTR_TRANSITION,
1518
LIGHT_TURN_ON_SCHEMA,
@@ -234,6 +237,20 @@ async def set_state(self, **kwargs: Any) -> None:
234237
else:
235238
fade = 0
236239

240+
if ATTR_BRIGHTNESS_STEP in kwargs or ATTR_BRIGHTNESS_STEP_PCT in kwargs:
241+
brightness = self.brightness if self.is_on and self.brightness else 0
242+
243+
if ATTR_BRIGHTNESS_STEP in kwargs:
244+
brightness += kwargs.pop(ATTR_BRIGHTNESS_STEP)
245+
246+
else:
247+
brightness_pct = round(brightness / 255 * 100)
248+
brightness = round(
249+
(brightness_pct + kwargs.pop(ATTR_BRIGHTNESS_STEP_PCT)) / 100 * 255
250+
)
251+
252+
kwargs[ATTR_BRIGHTNESS] = max(0, min(255, brightness))
253+
237254
# These are both False if ATTR_POWER is not set
238255
power_on = kwargs.get(ATTR_POWER, False)
239256
power_off = not kwargs.get(ATTR_POWER, True)

tests/components/lifx/test_light.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
from homeassistant.components.light import (
3131
ATTR_BRIGHTNESS,
3232
ATTR_BRIGHTNESS_PCT,
33+
ATTR_BRIGHTNESS_STEP,
34+
ATTR_BRIGHTNESS_STEP_PCT,
3335
ATTR_COLOR_MODE,
3436
ATTR_COLOR_NAME,
3537
ATTR_COLOR_TEMP_KELVIN,
@@ -1735,6 +1737,48 @@ async def test_transitions_color_bulb(hass: HomeAssistant) -> None:
17351737
bulb.set_color.reset_mock()
17361738

17371739

1740+
async def test_lifx_set_state_brightness(hass: HomeAssistant) -> None:
1741+
"""Test lifx.set_state works with brightness, brightness_pct and brightness_step."""
1742+
config_entry = MockConfigEntry(
1743+
domain=DOMAIN, data={CONF_HOST: "127.0.0.1"}, unique_id=SERIAL
1744+
)
1745+
config_entry.add_to_hass(hass)
1746+
bulb = _mocked_bulb_new_firmware()
1747+
bulb.power_level = 65535
1748+
bulb.color = [0, 0, 32768, 3500]
1749+
with (
1750+
_patch_discovery(device=bulb),
1751+
_patch_config_flow_try_connect(device=bulb),
1752+
_patch_device(device=bulb),
1753+
):
1754+
await async_setup_component(hass, lifx.DOMAIN, {lifx.DOMAIN: {}})
1755+
await hass.async_block_till_done()
1756+
1757+
entity_id = "light.my_bulb"
1758+
1759+
# brightness_step should convert from 8 bit to 16 bit
1760+
await hass.services.async_call(
1761+
DOMAIN,
1762+
"set_state",
1763+
{ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_STEP: 128},
1764+
blocking=True,
1765+
)
1766+
1767+
assert bulb.set_color.calls[0][0][0] == [0, 0, 65535, 3500]
1768+
bulb.set_color.reset_mock()
1769+
1770+
# brightness_step_pct should convert from percentage to 16 bit
1771+
await hass.services.async_call(
1772+
DOMAIN,
1773+
"set_state",
1774+
{ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_STEP_PCT: 50},
1775+
blocking=True,
1776+
)
1777+
1778+
assert bulb.set_color.calls[0][0][0] == [0, 0, 65535, 3500]
1779+
bulb.set_color.reset_mock()
1780+
1781+
17381782
async def test_lifx_set_state_color(hass: HomeAssistant) -> None:
17391783
"""Test lifx.set_state works with color names and RGB."""
17401784
config_entry = MockConfigEntry(

0 commit comments

Comments
 (0)