mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 07:47:08 +00:00
Add blocklist for known Matter devices with faulty transitions (#116524)
This commit is contained in:
parent
0b08ae7e44
commit
1db770ab3a
@ -43,6 +43,18 @@ COLOR_MODE_MAP = {
|
|||||||
}
|
}
|
||||||
DEFAULT_TRANSITION = 0.2
|
DEFAULT_TRANSITION = 0.2
|
||||||
|
|
||||||
|
# there's a bug in (at least) Espressif's implementation of light transitions
|
||||||
|
# on devices based on Matter 1.0. Mark potential devices with this issue.
|
||||||
|
# https://github.com/home-assistant/core/issues/113775
|
||||||
|
# vendorid (attributeKey 0/40/2)
|
||||||
|
# productid (attributeKey 0/40/4)
|
||||||
|
# hw version (attributeKey 0/40/8)
|
||||||
|
# sw version (attributeKey 0/40/10)
|
||||||
|
TRANSITION_BLOCKLIST = (
|
||||||
|
(4488, 514, "1.0", "1.0.0"),
|
||||||
|
(5010, 769, "3.0", "1.0.0"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -61,6 +73,7 @@ class MatterLight(MatterEntity, LightEntity):
|
|||||||
_supports_brightness = False
|
_supports_brightness = False
|
||||||
_supports_color = False
|
_supports_color = False
|
||||||
_supports_color_temperature = False
|
_supports_color_temperature = False
|
||||||
|
_transitions_disabled = False
|
||||||
|
|
||||||
async def _set_xy_color(
|
async def _set_xy_color(
|
||||||
self, xy_color: tuple[float, float], transition: float = 0.0
|
self, xy_color: tuple[float, float], transition: float = 0.0
|
||||||
@ -260,6 +273,8 @@ class MatterLight(MatterEntity, LightEntity):
|
|||||||
color_temp = kwargs.get(ATTR_COLOR_TEMP)
|
color_temp = kwargs.get(ATTR_COLOR_TEMP)
|
||||||
brightness = kwargs.get(ATTR_BRIGHTNESS)
|
brightness = kwargs.get(ATTR_BRIGHTNESS)
|
||||||
transition = kwargs.get(ATTR_TRANSITION, DEFAULT_TRANSITION)
|
transition = kwargs.get(ATTR_TRANSITION, DEFAULT_TRANSITION)
|
||||||
|
if self._transitions_disabled:
|
||||||
|
transition = 0
|
||||||
|
|
||||||
if self.supported_color_modes is not None:
|
if self.supported_color_modes is not None:
|
||||||
if hs_color is not None and ColorMode.HS in self.supported_color_modes:
|
if hs_color is not None and ColorMode.HS in self.supported_color_modes:
|
||||||
@ -336,8 +351,12 @@ class MatterLight(MatterEntity, LightEntity):
|
|||||||
|
|
||||||
supported_color_modes = filter_supported_color_modes(supported_color_modes)
|
supported_color_modes = filter_supported_color_modes(supported_color_modes)
|
||||||
self._attr_supported_color_modes = supported_color_modes
|
self._attr_supported_color_modes = supported_color_modes
|
||||||
|
self._check_transition_blocklist()
|
||||||
# flag support for transition as soon as we support setting brightness and/or color
|
# flag support for transition as soon as we support setting brightness and/or color
|
||||||
if supported_color_modes != {ColorMode.ONOFF}:
|
if (
|
||||||
|
supported_color_modes != {ColorMode.ONOFF}
|
||||||
|
and not self._transitions_disabled
|
||||||
|
):
|
||||||
self._attr_supported_features |= LightEntityFeature.TRANSITION
|
self._attr_supported_features |= LightEntityFeature.TRANSITION
|
||||||
|
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
@ -376,6 +395,21 @@ class MatterLight(MatterEntity, LightEntity):
|
|||||||
else:
|
else:
|
||||||
self._attr_color_mode = ColorMode.ONOFF
|
self._attr_color_mode = ColorMode.ONOFF
|
||||||
|
|
||||||
|
def _check_transition_blocklist(self) -> None:
|
||||||
|
"""Check if this device is reported to have non working transitions."""
|
||||||
|
device_info = self._endpoint.device_info
|
||||||
|
if (
|
||||||
|
device_info.vendorID,
|
||||||
|
device_info.productID,
|
||||||
|
device_info.hardwareVersionString,
|
||||||
|
device_info.softwareVersionString,
|
||||||
|
) in TRANSITION_BLOCKLIST:
|
||||||
|
self._transitions_disabled = True
|
||||||
|
LOGGER.warning(
|
||||||
|
"Detected a device that has been reported to have firmware issues "
|
||||||
|
"with light transitions. Transitions will be disabled for this light"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Discovery schema(s) to map Matter Attributes to HA entities
|
# Discovery schema(s) to map Matter Attributes to HA entities
|
||||||
DISCOVERY_SCHEMAS = [
|
DISCOVERY_SCHEMAS = [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user