mirror of
https://github.com/home-assistant/core.git
synced 2026-08-03 20:24:55 +02:00
Fix Avea color state refresh (#171003)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user