diff --git a/homeassistant/components/homekit_controller/alarm_control_panel.py b/homeassistant/components/homekit_controller/alarm_control_panel.py index 0194036db4e..c7e499b6e89 100644 --- a/homeassistant/components/homekit_controller/alarm_control_panel.py +++ b/homeassistant/components/homekit_controller/alarm_control_panel.py @@ -6,11 +6,9 @@ from typing import Any from aiohomekit.model.characteristics import CharacteristicsTypes from aiohomekit.model.services import Service, ServicesTypes -from homeassistant.components.alarm_control_panel import AlarmControlPanelEntity -from homeassistant.components.alarm_control_panel.const import ( - SUPPORT_ALARM_ARM_AWAY, - SUPPORT_ALARM_ARM_HOME, - SUPPORT_ALARM_ARM_NIGHT, +from homeassistant.components.alarm_control_panel import ( + AlarmControlPanelEntity, + AlarmControlPanelEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -67,6 +65,12 @@ async def async_setup_entry( class HomeKitAlarmControlPanelEntity(HomeKitEntity, AlarmControlPanelEntity): """Representation of a Homekit Alarm Control Panel.""" + _attr_supported_features = ( + AlarmControlPanelEntityFeature.ARM_HOME + | AlarmControlPanelEntityFeature.ARM_AWAY + | AlarmControlPanelEntityFeature.ARM_NIGHT + ) + def get_characteristic_types(self) -> list[str]: """Define the homekit characteristics the entity cares about.""" return [ @@ -87,11 +91,6 @@ class HomeKitAlarmControlPanelEntity(HomeKitEntity, AlarmControlPanelEntity): self.service.value(CharacteristicsTypes.SECURITY_SYSTEM_STATE_CURRENT) ] - @property - def supported_features(self) -> int: - """Return the list of supported features.""" - return SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_NIGHT - async def async_alarm_disarm(self, code: str | None = None) -> None: """Send disarm command.""" await self.set_alarm_state(STATE_ALARM_DISARMED, code) diff --git a/homeassistant/components/homekit_controller/climate.py b/homeassistant/components/homekit_controller/climate.py index 53aee8561e4..9c8e15b1002 100644 --- a/homeassistant/components/homekit_controller/climate.py +++ b/homeassistant/components/homekit_controller/climate.py @@ -20,6 +20,7 @@ from homeassistant.components.climate import ( DEFAULT_MAX_TEMP, DEFAULT_MIN_TEMP, ClimateEntity, + ClimateEntityFeature, ) from homeassistant.components.climate.const import ( ATTR_HVAC_MODE, @@ -33,10 +34,6 @@ from homeassistant.components.climate.const import ( HVAC_MODE_HEAT, HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, - SUPPORT_SWING_MODE, - SUPPORT_TARGET_HUMIDITY, - SUPPORT_TARGET_TEMPERATURE, - SUPPORT_TARGET_TEMPERATURE_RANGE, SWING_OFF, SWING_VERTICAL, ) @@ -304,7 +301,7 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity): def swing_mode(self) -> str: """Return the swing setting. - Requires SUPPORT_SWING_MODE. + Requires ClimateEntityFeature.SWING_MODE. """ value = self.service.value(CharacteristicsTypes.SWING_MODE) return SWING_MODE_HOMEKIT_TO_HASS[value] @@ -313,7 +310,7 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity): def swing_modes(self) -> list[str]: """Return the list of available swing modes. - Requires SUPPORT_SWING_MODE. + Requires ClimateEntityFeature.SWING_MODE. """ valid_values = clamp_enum_to_char( SwingModeValues, @@ -333,13 +330,13 @@ class HomeKitHeaterCoolerEntity(HomeKitEntity, ClimateEntity): features = 0 if self.service.has(CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD): - features |= SUPPORT_TARGET_TEMPERATURE + features |= ClimateEntityFeature.TARGET_TEMPERATURE if self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD): - features |= SUPPORT_TARGET_TEMPERATURE + features |= ClimateEntityFeature.TARGET_TEMPERATURE if self.service.has(CharacteristicsTypes.SWING_MODE): - features |= SUPPORT_SWING_MODE + features |= ClimateEntityFeature.SWING_MODE return features @@ -384,7 +381,9 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): if ( (mode == HVAC_MODE_HEAT_COOL) - and (SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features) + and ( + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features + ) and heat_temp and cool_temp ): @@ -429,7 +428,9 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET) if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT, HVAC_MODE_COOL}) or ( (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) - and not (SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features) + and not ( + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features + ) ): return self.service.value(CharacteristicsTypes.TEMPERATURE_TARGET) return None @@ -439,7 +440,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): """Return the highbound target temperature we try to reach.""" value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET) if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and ( - SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features ): return self.service.value( CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD @@ -451,7 +452,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): """Return the lowbound target temperature we try to reach.""" value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET) if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and ( - SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features ): return self.service.value( CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD @@ -463,7 +464,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): """Return the minimum target temp.""" value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET) if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and ( - SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features ): min_temp = self.service[ CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD @@ -485,7 +486,7 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): """Return the maximum target temp.""" value = self.service.value(CharacteristicsTypes.HEATING_COOLING_TARGET) if (MODE_HOMEKIT_TO_HASS.get(value) in {HVAC_MODE_HEAT_COOL}) and ( - SUPPORT_TARGET_TEMPERATURE_RANGE & self.supported_features + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE & self.supported_features ): max_temp = self.service[ CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD @@ -566,15 +567,15 @@ class HomeKitClimateEntity(HomeKitEntity, ClimateEntity): features = 0 if self.service.has(CharacteristicsTypes.TEMPERATURE_TARGET): - features |= SUPPORT_TARGET_TEMPERATURE + features |= ClimateEntityFeature.TARGET_TEMPERATURE if self.service.has( CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD ) and self.service.has(CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD): - features |= SUPPORT_TARGET_TEMPERATURE_RANGE + features |= ClimateEntityFeature.TARGET_TEMPERATURE_RANGE if self.service.has(CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET): - features |= SUPPORT_TARGET_HUMIDITY + features |= ClimateEntityFeature.TARGET_HUMIDITY return features diff --git a/homeassistant/components/homekit_controller/cover.py b/homeassistant/components/homekit_controller/cover.py index 627203f683e..4e8af03bba0 100644 --- a/homeassistant/components/homekit_controller/cover.py +++ b/homeassistant/components/homekit_controller/cover.py @@ -9,15 +9,9 @@ from aiohomekit.model.services import Service, ServicesTypes from homeassistant.components.cover import ( ATTR_POSITION, ATTR_TILT_POSITION, - SUPPORT_CLOSE, - SUPPORT_CLOSE_TILT, - SUPPORT_OPEN, - SUPPORT_OPEN_TILT, - SUPPORT_SET_POSITION, - SUPPORT_SET_TILT_POSITION, - SUPPORT_STOP, CoverDeviceClass, CoverEntity, + CoverEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import STATE_CLOSED, STATE_CLOSING, STATE_OPEN, STATE_OPENING @@ -65,6 +59,7 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverEntity): """Representation of a HomeKit Garage Door.""" _attr_device_class = CoverDeviceClass.GARAGE + _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE def get_characteristic_types(self) -> list[str]: """Define the homekit characteristics the entity cares about.""" @@ -74,11 +69,6 @@ class HomeKitGarageDoorCover(HomeKitEntity, CoverEntity): CharacteristicsTypes.OBSTRUCTION_DETECTED, ] - @property - def supported_features(self) -> int: - """Flag supported features.""" - return SUPPORT_OPEN | SUPPORT_CLOSE - @property def _state(self) -> str: """Return the current state of the garage door.""" @@ -143,10 +133,14 @@ class HomeKitWindowCover(HomeKitEntity, CoverEntity): @property def supported_features(self) -> int: """Flag supported features.""" - features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_SET_POSITION + features = ( + CoverEntityFeature.OPEN + | CoverEntityFeature.CLOSE + | CoverEntityFeature.SET_POSITION + ) if self.service.has(CharacteristicsTypes.POSITION_HOLD): - features |= SUPPORT_STOP + features |= CoverEntityFeature.STOP supports_tilt = any( ( @@ -157,7 +151,9 @@ class HomeKitWindowCover(HomeKitEntity, CoverEntity): if supports_tilt: features |= ( - SUPPORT_OPEN_TILT | SUPPORT_CLOSE_TILT | SUPPORT_SET_TILT_POSITION + CoverEntityFeature.OPEN_TILT + | CoverEntityFeature.CLOSE_TILT + | CoverEntityFeature.SET_TILT_POSITION ) return features diff --git a/homeassistant/components/homekit_controller/fan.py b/homeassistant/components/homekit_controller/fan.py index 3f48d34559b..80c2f9870c1 100644 --- a/homeassistant/components/homekit_controller/fan.py +++ b/homeassistant/components/homekit_controller/fan.py @@ -9,10 +9,8 @@ from aiohomekit.model.services import Service, ServicesTypes from homeassistant.components.fan import ( DIRECTION_FORWARD, DIRECTION_REVERSE, - SUPPORT_DIRECTION, - SUPPORT_OSCILLATE, - SUPPORT_SET_SPEED, FanEntity, + FanEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback @@ -76,13 +74,13 @@ class BaseHomeKitFan(HomeKitEntity, FanEntity): features = 0 if self.service.has(CharacteristicsTypes.ROTATION_DIRECTION): - features |= SUPPORT_DIRECTION + features |= FanEntityFeature.DIRECTION if self.service.has(CharacteristicsTypes.ROTATION_SPEED): - features |= SUPPORT_SET_SPEED + features |= FanEntityFeature.SET_SPEED if self.service.has(CharacteristicsTypes.SWING_MODE): - features |= SUPPORT_OSCILLATE + features |= FanEntityFeature.OSCILLATE return features @@ -127,7 +125,10 @@ class BaseHomeKitFan(HomeKitEntity, FanEntity): if not self.is_on: characteristics[self.on_characteristic] = True - if percentage is not None and self.supported_features & SUPPORT_SET_SPEED: + if ( + percentage is not None + and self.supported_features & FanEntityFeature.SET_SPEED + ): characteristics[CharacteristicsTypes.ROTATION_SPEED] = percentage if characteristics: diff --git a/homeassistant/components/homekit_controller/humidifier.py b/homeassistant/components/homekit_controller/humidifier.py index fcca3e54725..1676999ad78 100644 --- a/homeassistant/components/homekit_controller/humidifier.py +++ b/homeassistant/components/homekit_controller/humidifier.py @@ -6,13 +6,16 @@ from typing import Any from aiohomekit.model.characteristics import CharacteristicsTypes from aiohomekit.model.services import Service, ServicesTypes -from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity +from homeassistant.components.humidifier import ( + HumidifierDeviceClass, + HumidifierEntity, + HumidifierEntityFeature, +) from homeassistant.components.humidifier.const import ( DEFAULT_MAX_HUMIDITY, DEFAULT_MIN_HUMIDITY, MODE_AUTO, MODE_NORMAL, - SUPPORT_MODES, ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback @@ -20,8 +23,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import KNOWN_DEVICES, HomeKitEntity -SUPPORT_FLAGS = 0 - HK_MODE_TO_HA = { 0: "off", 1: MODE_AUTO, @@ -40,6 +41,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity): """Representation of a HomeKit Controller Humidifier.""" _attr_device_class = HumidifierDeviceClass.HUMIDIFIER + _attr_supported_features = HumidifierEntityFeature.MODES def get_characteristic_types(self) -> list[str]: """Define the homekit characteristics the entity cares about.""" @@ -50,11 +52,6 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity): CharacteristicsTypes.RELATIVE_HUMIDITY_HUMIDIFIER_THRESHOLD, ] - @property - def supported_features(self) -> int: - """Return the list of supported features.""" - return SUPPORT_FLAGS | SUPPORT_MODES - @property def is_on(self) -> bool: """Return true if device is on.""" @@ -79,7 +76,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity): def mode(self) -> str | None: """Return the current mode, e.g., home, auto, baby. - Requires SUPPORT_MODES. + Requires HumidifierEntityFeature.MODES. """ mode = self.service.value( CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE @@ -90,7 +87,7 @@ class HomeKitHumidifier(HomeKitEntity, HumidifierEntity): def available_modes(self) -> list[str] | None: """Return a list of available modes. - Requires SUPPORT_MODES. + Requires HumidifierEntityFeature.MODES. """ available_modes = [ MODE_NORMAL, @@ -147,6 +144,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity): """Representation of a HomeKit Controller Humidifier.""" _attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER + _attr_supported_features = HumidifierEntityFeature.MODES def get_characteristic_types(self) -> list[str]: """Define the homekit characteristics the entity cares about.""" @@ -158,11 +156,6 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity): CharacteristicsTypes.RELATIVE_HUMIDITY_DEHUMIDIFIER_THRESHOLD, ] - @property - def supported_features(self) -> int: - """Return the list of supported features.""" - return SUPPORT_FLAGS | SUPPORT_MODES - @property def is_on(self) -> bool: """Return true if device is on.""" @@ -187,7 +180,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity): def mode(self) -> str | None: """Return the current mode, e.g., home, auto, baby. - Requires SUPPORT_MODES. + Requires HumidifierEntityFeature.MODES. """ mode = self.service.value( CharacteristicsTypes.CURRENT_HUMIDIFIER_DEHUMIDIFIER_STATE @@ -198,7 +191,7 @@ class HomeKitDehumidifier(HomeKitEntity, HumidifierEntity): def available_modes(self) -> list[str] | None: """Return a list of available modes. - Requires SUPPORT_MODES. + Requires HumidifierEntityFeature.MODES. """ available_modes = [ MODE_NORMAL, diff --git a/homeassistant/components/homekit_controller/media_player.py b/homeassistant/components/homekit_controller/media_player.py index 6314efe9dc4..fbdf800edf8 100644 --- a/homeassistant/components/homekit_controller/media_player.py +++ b/homeassistant/components/homekit_controller/media_player.py @@ -15,12 +15,7 @@ from aiohomekit.utils import clamp_enum_to_char from homeassistant.components.media_player import ( MediaPlayerDeviceClass, MediaPlayerEntity, -) -from homeassistant.components.media_player.const import ( - SUPPORT_PAUSE, - SUPPORT_PLAY, - SUPPORT_SELECT_SOURCE, - SUPPORT_STOP, + MediaPlayerEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -89,23 +84,23 @@ class HomeKitTelevision(HomeKitEntity, MediaPlayerEntity): features = 0 if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER): - features |= SUPPORT_SELECT_SOURCE + features |= MediaPlayerEntityFeature.SELECT_SOURCE if self.service.has(CharacteristicsTypes.TARGET_MEDIA_STATE): if TargetMediaStateValues.PAUSE in self.supported_media_states: - features |= SUPPORT_PAUSE + features |= MediaPlayerEntityFeature.PAUSE if TargetMediaStateValues.PLAY in self.supported_media_states: - features |= SUPPORT_PLAY + features |= MediaPlayerEntityFeature.PLAY if TargetMediaStateValues.STOP in self.supported_media_states: - features |= SUPPORT_STOP + features |= MediaPlayerEntityFeature.STOP if ( self.service.has(CharacteristicsTypes.REMOTE_KEY) and RemoteKeyValues.PLAY_PAUSE in self.supported_remote_keys ): - features |= SUPPORT_PAUSE | SUPPORT_PLAY + features |= MediaPlayerEntityFeature.PAUSE | MediaPlayerEntityFeature.PLAY return features