Read min and max mireds from ZHA lights ()

* implement min and max mireds

* remove unnecessary else

* additional light test

* add test to appease the codecov god

* change defaults
pull/34002/head
David F. Mulcahey 2020-04-10 23:19:17 -04:00 committed by GitHub
parent 44f8dab0b0
commit c1962a4895
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 5 deletions
homeassistant/components/zha
core/channels
tests/components/zha

View File

@ -41,6 +41,18 @@ class ColorChannel(ZigbeeChannel):
"""Initialize ColorChannel."""
super().__init__(cluster, ch_pool)
self._color_capabilities = None
self._min_mireds = 153
self._max_mireds = 500
@property
def min_mireds(self):
"""Return the coldest color_temp that this channel supports."""
return self._min_mireds
@property
def max_mireds(self):
"""Return the warmest color_temp that this channel supports."""
return self._max_mireds
def get_color_capabilities(self):
"""Return the color capabilities."""
@ -59,9 +71,15 @@ class ColorChannel(ZigbeeChannel):
async def fetch_color_capabilities(self, from_cache):
"""Get the color configuration."""
capabilities = await self.get_attribute_value(
"color_capabilities", from_cache=from_cache
)
attributes = [
"color_temp_physical_min",
"color_temp_physical_max",
"color_capabilities",
]
results = await self.get_attributes(attributes, from_cache=from_cache)
capabilities = results.get("color_capabilities")
self._min_mireds = results.get("color_temp_physical_min", 153)
self._max_mireds = results.get("color_temp_physical_max", 500)
if capabilities is None:
# ZCL Version 4 devices don't support the color_capabilities

View File

@ -108,7 +108,7 @@ class BaseLight(LogMixin, light.Light):
self._off_brightness: Optional[int] = None
self._hs_color: Optional[Tuple[float, float]] = None
self._color_temp: Optional[int] = None
self._min_mireds: Optional[int] = 154
self._min_mireds: Optional[int] = 153
self._max_mireds: Optional[int] = 500
self._white_value: Optional[int] = None
self._effect_list: Optional[List[str]] = None
@ -138,6 +138,16 @@ class BaseLight(LogMixin, light.Light):
"""Return the brightness of this light."""
return self._brightness
@property
def min_mireds(self):
"""Return the coldest color_temp that this light supports."""
return self._min_mireds
@property
def max_mireds(self):
"""Return the warmest color_temp that this light supports."""
return self._max_mireds
def set_level(self, value):
"""Set the brightness of this light between 0..254.
@ -316,6 +326,9 @@ class Light(BaseLight, ZhaEntity):
self._level_channel = self.cluster_channels.get(CHANNEL_LEVEL)
self._color_channel = self.cluster_channels.get(CHANNEL_COLOR)
self._identify_channel = self.zha_device.channels.identify_ch
if self._color_channel:
self._min_mireds: Optional[int] = self._color_channel.min_mireds
self._max_mireds: Optional[int] = self._color_channel.max_mireds
self._cancel_refresh_handle = None
effect_list = []
@ -501,7 +514,7 @@ class LightGroup(BaseLight, ZhaGroupEntity):
self._color_temp = helpers.reduce_attribute(on_states, ATTR_COLOR_TEMP)
self._min_mireds = helpers.reduce_attribute(
states, ATTR_MIN_MIREDS, default=154, reduce=min
states, ATTR_MIN_MIREDS, default=153, reduce=min
)
self._max_mireds = helpers.reduce_attribute(
states, ATTR_MAX_MIREDS, default=500, reduce=max

View File

@ -392,3 +392,12 @@ async def test_device_override(hass, zigpy_device_mock, setup_zha, override, ent
await zha_gateway.async_device_initialized(zigpy_device)
await hass.async_block_till_done()
assert hass.states.get(entity_id) is not None
async def test_group_probe_cleanup_called(hass, setup_zha, config_entry):
"""Test cleanup happens when zha is unloaded."""
await setup_zha()
disc.GROUP_PROBE.cleanup = mock.Mock(wraps=disc.GROUP_PROBE.cleanup)
await config_entry.async_unload(hass)
await hass.async_block_till_done()
disc.GROUP_PROBE.cleanup.assert_called()

View File

@ -552,6 +552,15 @@ async def async_test_zha_group_light_entity(
await dev3_cluster_on_off.on()
assert hass.states.get(entity_id).state == STATE_ON
# add a 3rd member and ensure we still have an entity and we track the new one
await dev1_cluster_on_off.off()
await dev3_cluster_on_off.off()
assert hass.states.get(entity_id).state == STATE_OFF
# this will test that _reprobe_group is used correctly
await zha_group.async_add_members([device_light_2.ieee])
await dev2_cluster_on_off.on()
assert hass.states.get(entity_id).state == STATE_ON
# remove the group and ensure that there is no entity and that the entity registry is cleaned up
assert zha_gateway.ha_entity_registry.async_get(entity_id) is not None
await zha_gateway.async_remove_zigpy_group(zha_group.group_id)