From 3647d549b0c7cf481981455dad43bac6491385b8 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 26 Jan 2021 10:45:41 +0100 Subject: [PATCH] Fix Hyperion brightness setting (#45335) --- homeassistant/components/hyperion/light.py | 27 ++++++++++++---------- tests/components/hyperion/__init__.py | 1 + tests/components/hyperion/test_light.py | 17 ++++++++++++-- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/hyperion/light.py b/homeassistant/components/hyperion/light.py index e57d2916860d..b6d66c9a11aa 100644 --- a/homeassistant/components/hyperion/light.py +++ b/homeassistant/components/hyperion/light.py @@ -415,7 +415,6 @@ class HyperionLight(LightEntity): return # == Get key parameters == - brightness = kwargs.get(ATTR_BRIGHTNESS, self._brightness) if ATTR_EFFECT not in kwargs and ATTR_HS_COLOR in kwargs: effect = KEY_EFFECT_SOLID else: @@ -427,17 +426,21 @@ class HyperionLight(LightEntity): rgb_color = self._rgb_color # == Set brightness == - if self._brightness != brightness: - if not await self._client.async_send_set_adjustment( - **{ - const.KEY_ADJUSTMENT: { - const.KEY_BRIGHTNESS: int( - round((float(brightness) * 100) / 255) - ) - } - } - ): - return + if ATTR_BRIGHTNESS in kwargs: + brightness = kwargs[ATTR_BRIGHTNESS] + for item in self._client.adjustment: + if const.KEY_ID in item: + if not await self._client.async_send_set_adjustment( + **{ + const.KEY_ADJUSTMENT: { + const.KEY_BRIGHTNESS: int( + round((float(brightness) * 100) / 255) + ), + const.KEY_ID: item[const.KEY_ID], + } + } + ): + return # == Set an external source if effect and effect in const.KEY_COMPONENTID_EXTERNAL_SOURCES: diff --git a/tests/components/hyperion/__init__.py b/tests/components/hyperion/__init__.py index abf9f28a10bb..37e95baf1dde 100644 --- a/tests/components/hyperion/__init__.py +++ b/tests/components/hyperion/__init__.py @@ -20,6 +20,7 @@ TEST_HOST = "test" TEST_PORT = const.DEFAULT_PORT_JSON + 1 TEST_PORT_UI = const.DEFAULT_PORT_UI + 1 TEST_INSTANCE = 1 +TEST_ID = "default" TEST_SYSINFO_ID = "f9aab089-f85a-55cf-b7c1-222a72faebe9" TEST_SYSINFO_VERSION = "2.0.0-alpha.8" TEST_PRIORITY = 180 diff --git a/tests/components/hyperion/test_light.py b/tests/components/hyperion/test_light.py index 026cefcff690..36ec29cf2ab9 100644 --- a/tests/components/hyperion/test_light.py +++ b/tests/components/hyperion/test_light.py @@ -43,6 +43,7 @@ from . import ( TEST_ENTITY_ID_2, TEST_ENTITY_ID_3, TEST_HOST, + TEST_ID, TEST_INSTANCE_1, TEST_INSTANCE_2, TEST_INSTANCE_3, @@ -387,6 +388,7 @@ async def test_light_async_turn_on(hass: HomeAssistantType) -> None: brightness = 128 client.async_send_set_color = AsyncMock(return_value=True) client.async_send_set_adjustment = AsyncMock(return_value=True) + client.adjustment = [{const.KEY_ID: TEST_ID}] await hass.services.async_call( LIGHT_DOMAIN, SERVICE_TURN_ON, @@ -395,7 +397,7 @@ async def test_light_async_turn_on(hass: HomeAssistantType) -> None: ) assert client.async_send_set_adjustment.call_args == call( - **{const.KEY_ADJUSTMENT: {const.KEY_BRIGHTNESS: 50}} + **{const.KEY_ADJUSTMENT: {const.KEY_BRIGHTNESS: 50, const.KEY_ID: TEST_ID}} ) assert client.async_send_set_color.call_args == call( **{ @@ -405,6 +407,16 @@ async def test_light_async_turn_on(hass: HomeAssistantType) -> None: } ) + # Simulate a false return of async_send_set_adjustment + client.async_send_set_adjustment = AsyncMock(return_value=False) + client.adjustment = [{const.KEY_ID: TEST_ID}] + await hass.services.async_call( + LIGHT_DOMAIN, + SERVICE_TURN_ON, + {ATTR_ENTITY_ID: TEST_ENTITY_ID_1, ATTR_BRIGHTNESS: brightness}, + blocking=True, + ) + # Simulate a state callback from Hyperion. client.adjustment = [{const.KEY_BRIGHTNESS: 50}] _call_registered_callback(client, "adjustment-update") @@ -447,6 +459,7 @@ async def test_light_async_turn_on(hass: HomeAssistantType) -> None: brightness = 255 client.async_send_set_color = AsyncMock(return_value=True) client.async_send_set_adjustment = AsyncMock(return_value=True) + client.adjustment = [{const.KEY_ID: TEST_ID}] await hass.services.async_call( LIGHT_DOMAIN, @@ -456,7 +469,7 @@ async def test_light_async_turn_on(hass: HomeAssistantType) -> None: ) assert client.async_send_set_adjustment.call_args == call( - **{const.KEY_ADJUSTMENT: {const.KEY_BRIGHTNESS: 100}} + **{const.KEY_ADJUSTMENT: {const.KEY_BRIGHTNESS: 100, const.KEY_ID: TEST_ID}} ) assert client.async_send_set_color.call_args == call( **{