Fix Avea color state refresh (#171003)

This commit is contained in:
Sören
2026-05-18 13:54:08 +02:00
committed by GitHub
parent bbb31f2910
commit ad04aeced9
2 changed files with 58 additions and 2 deletions
+11 -1
View File
@@ -195,6 +195,16 @@ class AveaLight(LightEntity):
def update(self) -> None:
"""Fetch new state data for this light."""
if (brightness := self._light.get_brightness()) is not None:
connected = self._light.connect()
try:
brightness = self._light.get_brightness()
rgb_color = self._light.get_rgb()
finally:
if connected:
self._light.disconnect()
if brightness is not None:
self._attr_is_on = brightness != 0
self._attr_brightness = round(255 * (brightness / 4095))
self._attr_hs_color = color_util.color_RGB_to_hs(*rgb_color)
+47 -1
View File
@@ -2,7 +2,7 @@
from collections.abc import AsyncGenerator
from datetime import timedelta
from unittest.mock import MagicMock, patch
from unittest.mock import MagicMock, call, patch
from freezegun.api import FrozenDateTimeFactory
import pytest
@@ -27,7 +27,9 @@ def mock_bulb() -> MagicMock:
bulb = MagicMock()
bulb.name = "Unknown"
bulb.brightness = 0
bulb.connect.return_value = True
bulb.get_brightness.return_value = 0
bulb.get_rgb.return_value = (0, 0, 0)
return bulb
@@ -116,13 +118,57 @@ async def test_update_state(
assert state.attributes[ATTR_BRIGHTNESS] is None
bulb = setup_integration
bulb.reset_mock()
bulb.connect.return_value = True
bulb.get_brightness.return_value = 2048
bulb.get_rgb.return_value = (0, 255, 0)
freezer.tick(timedelta(seconds=30))
async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True)
bulb.connect.assert_called_once()
bulb.get_brightness.assert_called_once()
bulb.get_rgb.assert_called_once()
bulb.disconnect.assert_called_once()
bulb.assert_has_calls(
[
call.connect(),
call.get_brightness(),
call.get_rgb(),
call.disconnect(),
]
)
state = hass.states.get("light.bedroom")
assert state is not None
assert state.state == STATE_ON
assert state.attributes[ATTR_BRIGHTNESS] == 128
assert state.attributes[ATTR_HS_COLOR] == (120.0, 100.0)
async def test_update_state_uses_cached_values_when_connect_fails(
hass: HomeAssistant, setup_integration: MagicMock, freezer: FrozenDateTimeFactory
) -> None:
"""Test updating the entity state when the shared connection fails."""
bulb = setup_integration
bulb.reset_mock()
bulb.connect.return_value = False
bulb.get_brightness.return_value = 2048
bulb.get_rgb.return_value = (0, 255, 0)
freezer.tick(timedelta(seconds=30))
async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True)
bulb.connect.assert_called_once()
bulb.get_brightness.assert_called_once()
bulb.get_rgb.assert_called_once()
bulb.disconnect.assert_not_called()
state = hass.states.get("light.bedroom")
assert state is not None
assert state.state == STATE_ON
assert state.attributes[ATTR_BRIGHTNESS] == 128
assert state.attributes[ATTR_HS_COLOR] == (120.0, 100.0)