diff --git a/homeassistant/components/knx/climate.py b/homeassistant/components/knx/climate.py index aeef4a35c29..c2e2a269b27 100644 --- a/homeassistant/components/knx/climate.py +++ b/homeassistant/components/knx/climate.py @@ -172,12 +172,14 @@ class KNXClimate(KnxEntity, ClimateEntity): """Representation of a KNX climate device.""" _device: XknxClimate - _attr_supported_features = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE _attr_temperature_unit = TEMP_CELSIUS def __init__(self, xknx: XKNX, config: ConfigType) -> None: """Initialize of a KNX climate device.""" super().__init__(_create_climate(xknx, config)) + self._attr_supported_features = SUPPORT_TARGET_TEMPERATURE + if self.preset_modes: + self._attr_supported_features |= SUPPORT_PRESET_MODE self._attr_target_temperature_step = self._device.temperature_step self._attr_unique_id = ( f"{self._device.temperature.group_address_state}_" diff --git a/homeassistant/components/knx/cover.py b/homeassistant/components/knx/cover.py index 92edf804bc6..5d32726474c 100644 --- a/homeassistant/components/knx/cover.py +++ b/homeassistant/components/knx/cover.py @@ -112,6 +112,17 @@ class KNXCover(KnxEntity, CoverEntity): self._attr_device_class = config.get(CONF_DEVICE_CLASS) or ( DEVICE_CLASS_BLIND if self._device.supports_angle else None ) + self._attr_supported_features = ( + SUPPORT_CLOSE | SUPPORT_OPEN | SUPPORT_SET_POSITION + ) + if self._device.supports_stop: + self._attr_supported_features |= SUPPORT_STOP | SUPPORT_STOP_TILT + if self._device.supports_angle: + self._attr_supported_features |= SUPPORT_SET_TILT_POSITION + if self._device.step.writable: + self._attr_supported_features |= ( + SUPPORT_CLOSE_TILT | SUPPORT_OPEN_TILT | SUPPORT_STOP_TILT + ) self._attr_unique_id = ( f"{self._device.updown.group_address}_" f"{self._device.position_target.group_address}" @@ -124,21 +135,6 @@ class KNXCover(KnxEntity, CoverEntity): if self._device.is_traveling(): self.start_auto_updater() - @property - def supported_features(self) -> int: - """Flag supported features.""" - supported_features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_SET_POSITION - if self._device.supports_stop: - supported_features |= SUPPORT_STOP - if self._device.supports_angle: - supported_features |= ( - SUPPORT_SET_TILT_POSITION - | SUPPORT_OPEN_TILT - | SUPPORT_CLOSE_TILT - | SUPPORT_STOP_TILT - ) - return supported_features - @property def current_cover_position(self) -> int | None: """Return the current position of the cover. diff --git a/homeassistant/components/knx/fan.py b/homeassistant/components/knx/fan.py index 5d66eb1ceb6..f787795e1e8 100644 --- a/homeassistant/components/knx/fan.py +++ b/homeassistant/components/knx/fan.py @@ -66,11 +66,9 @@ class KNXFan(KnxEntity, FanEntity): # FanSpeedMode.STEP if max_step is set self._step_range: tuple[int, int] | None = (1, max_step) if max_step else None - self._attr_supported_features = ( - SUPPORT_SET_SPEED | SUPPORT_OSCILLATE - if self._device.supports_oscillation - else SUPPORT_SET_SPEED - ) + self._attr_supported_features = SUPPORT_SET_SPEED + if self._device.supports_oscillation: + self._attr_supported_features |= SUPPORT_OSCILLATE self._attr_unique_id = str(self._device.speed.group_address) async def async_set_percentage(self, percentage: int) -> None: