diff --git a/homeassistant/components/radiotherm/climate.py b/homeassistant/components/radiotherm/climate.py index 6a4f34e6d3a..a3478576eb0 100644 --- a/homeassistant/components/radiotherm/climate.py +++ b/homeassistant/components/radiotherm/climate.py @@ -7,7 +7,11 @@ from socket import timeout import radiotherm import voluptuous as vol -from homeassistant.components.climate import PLATFORM_SCHEMA, ClimateEntity +from homeassistant.components.climate import ( + PLATFORM_SCHEMA, + ClimateEntity, + ClimateEntityFeature, +) from homeassistant.components.climate.const import ( CURRENT_HVAC_COOL, CURRENT_HVAC_HEAT, @@ -20,9 +24,6 @@ from homeassistant.components.climate.const import ( HVAC_MODE_OFF, PRESET_AWAY, PRESET_HOME, - SUPPORT_FAN_MODE, - SUPPORT_PRESET_MODE, - SUPPORT_TARGET_TEMPERATURE, ) from homeassistant.const import ( ATTR_TEMPERATURE, @@ -105,9 +106,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE | SUPPORT_PRESET_MODE - - def setup_platform( hass: HomeAssistant, config: ConfigType, @@ -141,6 +139,12 @@ def setup_platform( class RadioThermostat(ClimateEntity): """Representation of a Radio Thermostat.""" + _attr_supported_features = ( + ClimateEntityFeature.TARGET_TEMPERATURE + | ClimateEntityFeature.FAN_MODE + | ClimateEntityFeature.PRESET_MODE + ) + def __init__(self, device, hold_temp): """Initialize the thermostat.""" self.device = device @@ -163,11 +167,6 @@ class RadioThermostat(ClimateEntity): # Fan circulate mode is only supported by the CT80 models. self._is_model_ct80 = isinstance(self.device, radiotherm.thermostat.CT80) - @property - def supported_features(self): - """Return the list of supported features.""" - return SUPPORT_FLAGS - async def async_added_to_hass(self): """Register callbacks.""" # Set the time on the device. This shouldn't be in the diff --git a/homeassistant/components/rfxtrx/cover.py b/homeassistant/components/rfxtrx/cover.py index d350998e2a9..ceb34520b07 100644 --- a/homeassistant/components/rfxtrx/cover.py +++ b/homeassistant/components/rfxtrx/cover.py @@ -5,15 +5,7 @@ import logging import RFXtrx as rfxtrxmod -from homeassistant.components.cover import ( - SUPPORT_CLOSE, - SUPPORT_CLOSE_TILT, - SUPPORT_OPEN, - SUPPORT_OPEN_TILT, - SUPPORT_STOP, - SUPPORT_STOP_TILT, - CoverEntity, -) +from homeassistant.components.cover import CoverEntity, CoverEntityFeature from homeassistant.config_entries import ConfigEntry from homeassistant.const import STATE_OPEN from homeassistant.core import HomeAssistant, callback @@ -91,14 +83,18 @@ class RfxtrxCover(RfxtrxCommandEntity, CoverEntity): @property def supported_features(self): """Flag supported features.""" - supported_features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_STOP + supported_features = ( + CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE | CoverEntityFeature.STOP + ) if self._venetian_blind_mode in ( CONST_VENETIAN_BLIND_MODE_US, CONST_VENETIAN_BLIND_MODE_EU, ): supported_features |= ( - SUPPORT_OPEN_TILT | SUPPORT_CLOSE_TILT | SUPPORT_STOP_TILT + CoverEntityFeature.OPEN_TILT + | CoverEntityFeature.CLOSE_TILT + | CoverEntityFeature.STOP_TILT ) return supported_features diff --git a/homeassistant/components/risco/alarm_control_panel.py b/homeassistant/components/risco/alarm_control_panel.py index edb72f66fe1..3391770b828 100644 --- a/homeassistant/components/risco/alarm_control_panel.py +++ b/homeassistant/components/risco/alarm_control_panel.py @@ -4,12 +4,7 @@ import logging from homeassistant.components.alarm_control_panel import ( FORMAT_NUMBER, AlarmControlPanelEntity, -) -from homeassistant.components.alarm_control_panel.const import ( - SUPPORT_ALARM_ARM_AWAY, - SUPPORT_ALARM_ARM_CUSTOM_BYPASS, - SUPPORT_ALARM_ARM_HOME, - SUPPORT_ALARM_ARM_NIGHT, + AlarmControlPanelEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -42,10 +37,10 @@ from .entity import RiscoEntity _LOGGER = logging.getLogger(__name__) STATES_TO_SUPPORTED_FEATURES = { - STATE_ALARM_ARMED_AWAY: SUPPORT_ALARM_ARM_AWAY, - STATE_ALARM_ARMED_CUSTOM_BYPASS: SUPPORT_ALARM_ARM_CUSTOM_BYPASS, - STATE_ALARM_ARMED_HOME: SUPPORT_ALARM_ARM_HOME, - STATE_ALARM_ARMED_NIGHT: SUPPORT_ALARM_ARM_NIGHT, + STATE_ALARM_ARMED_AWAY: AlarmControlPanelEntityFeature.ARM_AWAY, + STATE_ALARM_ARMED_CUSTOM_BYPASS: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS, + STATE_ALARM_ARMED_HOME: AlarmControlPanelEntityFeature.ARM_HOME, + STATE_ALARM_ARMED_NIGHT: AlarmControlPanelEntityFeature.ARM_NIGHT, } diff --git a/homeassistant/components/roku/media_player.py b/homeassistant/components/roku/media_player.py index f7e88ad1ed1..e6fe0d7dcf5 100644 --- a/homeassistant/components/roku/media_player.py +++ b/homeassistant/components/roku/media_player.py @@ -15,6 +15,7 @@ from homeassistant.components.media_player import ( BrowseMedia, MediaPlayerDeviceClass, MediaPlayerEntity, + MediaPlayerEntityFeature, async_process_play_media_url, ) from homeassistant.components.media_player.const import ( @@ -24,17 +25,6 @@ from homeassistant.components.media_player.const import ( MEDIA_TYPE_MUSIC, MEDIA_TYPE_URL, MEDIA_TYPE_VIDEO, - SUPPORT_BROWSE_MEDIA, - SUPPORT_NEXT_TRACK, - SUPPORT_PAUSE, - SUPPORT_PLAY, - SUPPORT_PLAY_MEDIA, - SUPPORT_PREVIOUS_TRACK, - SUPPORT_SELECT_SOURCE, - SUPPORT_TURN_OFF, - SUPPORT_TURN_ON, - SUPPORT_VOLUME_MUTE, - SUPPORT_VOLUME_STEP, ) from homeassistant.components.stream.const import FORMAT_CONTENT_TYPE, HLS_PROVIDER from homeassistant.config_entries import ConfigEntry @@ -68,20 +58,6 @@ from .helpers import format_channel_name, roku_exception_handler _LOGGER = logging.getLogger(__name__) -SUPPORT_ROKU = ( - SUPPORT_PREVIOUS_TRACK - | SUPPORT_NEXT_TRACK - | SUPPORT_VOLUME_STEP - | SUPPORT_VOLUME_MUTE - | SUPPORT_SELECT_SOURCE - | SUPPORT_PAUSE - | SUPPORT_PLAY - | SUPPORT_PLAY_MEDIA - | SUPPORT_TURN_ON - | SUPPORT_TURN_OFF - | SUPPORT_BROWSE_MEDIA -) - STREAM_FORMAT_TO_MEDIA_TYPE = { "dash": MEDIA_TYPE_VIDEO, @@ -137,6 +113,20 @@ async def async_setup_entry( class RokuMediaPlayer(RokuEntity, MediaPlayerEntity): """Representation of a Roku media player on the network.""" + _attr_supported_features = ( + MediaPlayerEntityFeature.PREVIOUS_TRACK + | MediaPlayerEntityFeature.NEXT_TRACK + | MediaPlayerEntityFeature.VOLUME_STEP + | MediaPlayerEntityFeature.VOLUME_MUTE + | MediaPlayerEntityFeature.SELECT_SOURCE + | MediaPlayerEntityFeature.PAUSE + | MediaPlayerEntityFeature.PLAY + | MediaPlayerEntityFeature.PLAY_MEDIA + | MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + | MediaPlayerEntityFeature.BROWSE_MEDIA + ) + def __init__( self, unique_id: str | None, coordinator: RokuDataUpdateCoordinator ) -> None: @@ -148,7 +138,6 @@ class RokuMediaPlayer(RokuEntity, MediaPlayerEntity): self._attr_name = coordinator.data.info.name self._attr_unique_id = unique_id - self._attr_supported_features = SUPPORT_ROKU def _media_playback_trackable(self) -> bool: """Detect if we have enough media data to track playback.""" diff --git a/homeassistant/components/roon/media_player.py b/homeassistant/components/roon/media_player.py index 7c280727a19..3651bd9ec05 100644 --- a/homeassistant/components/roon/media_player.py +++ b/homeassistant/components/roon/media_player.py @@ -4,23 +4,9 @@ import logging from roonapi import split_media_path import voluptuous as vol -from homeassistant.components.media_player import MediaPlayerEntity -from homeassistant.components.media_player.const import ( - SUPPORT_BROWSE_MEDIA, - SUPPORT_GROUPING, - SUPPORT_NEXT_TRACK, - SUPPORT_PAUSE, - SUPPORT_PLAY, - SUPPORT_PLAY_MEDIA, - SUPPORT_PREVIOUS_TRACK, - SUPPORT_SEEK, - SUPPORT_SHUFFLE_SET, - SUPPORT_STOP, - SUPPORT_TURN_OFF, - SUPPORT_TURN_ON, - SUPPORT_VOLUME_MUTE, - SUPPORT_VOLUME_SET, - SUPPORT_VOLUME_STEP, +from homeassistant.components.media_player import ( + MediaPlayerEntity, + MediaPlayerEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -44,24 +30,6 @@ from homeassistant.util.dt import utcnow from .const import DOMAIN from .media_browser import browse_media -SUPPORT_ROON = ( - SUPPORT_BROWSE_MEDIA - | SUPPORT_GROUPING - | SUPPORT_PAUSE - | SUPPORT_VOLUME_SET - | SUPPORT_STOP - | SUPPORT_PREVIOUS_TRACK - | SUPPORT_NEXT_TRACK - | SUPPORT_SHUFFLE_SET - | SUPPORT_SEEK - | SUPPORT_TURN_ON - | SUPPORT_TURN_OFF - | SUPPORT_VOLUME_MUTE - | SUPPORT_PLAY - | SUPPORT_PLAY_MEDIA - | SUPPORT_VOLUME_STEP -) - _LOGGER = logging.getLogger(__name__) SERVICE_TRANSFER = "transfer" @@ -108,6 +76,24 @@ async def async_setup_entry( class RoonDevice(MediaPlayerEntity): """Representation of an Roon device.""" + _attr_supported_features = ( + MediaPlayerEntityFeature.BROWSE_MEDIA + | MediaPlayerEntityFeature.GROUPING + | MediaPlayerEntityFeature.PAUSE + | MediaPlayerEntityFeature.VOLUME_SET + | MediaPlayerEntityFeature.STOP + | MediaPlayerEntityFeature.PREVIOUS_TRACK + | MediaPlayerEntityFeature.NEXT_TRACK + | MediaPlayerEntityFeature.SHUFFLE_SET + | MediaPlayerEntityFeature.SEEK + | MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + | MediaPlayerEntityFeature.VOLUME_MUTE + | MediaPlayerEntityFeature.PLAY + | MediaPlayerEntityFeature.PLAY_MEDIA + | MediaPlayerEntityFeature.VOLUME_STEP + ) + def __init__(self, server, player_data): """Initialize Roon device object.""" self._remove_signal_status = None @@ -154,11 +140,6 @@ class RoonDevice(MediaPlayerEntity): """Return True if entity is available.""" return self._available - @property - def supported_features(self): - """Flag media player features that are supported.""" - return SUPPORT_ROON - @property def group_members(self): """Return the grouped players.""" diff --git a/homeassistant/components/russound_rio/media_player.py b/homeassistant/components/russound_rio/media_player.py index f8ebf39d22f..054448cd9ad 100644 --- a/homeassistant/components/russound_rio/media_player.py +++ b/homeassistant/components/russound_rio/media_player.py @@ -4,15 +4,12 @@ from __future__ import annotations from russound_rio import Russound import voluptuous as vol -from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerEntity -from homeassistant.components.media_player.const import ( - MEDIA_TYPE_MUSIC, - SUPPORT_SELECT_SOURCE, - SUPPORT_TURN_OFF, - SUPPORT_TURN_ON, - SUPPORT_VOLUME_MUTE, - SUPPORT_VOLUME_SET, +from homeassistant.components.media_player import ( + PLATFORM_SCHEMA, + MediaPlayerEntity, + MediaPlayerEntityFeature, ) +from homeassistant.components.media_player.const import MEDIA_TYPE_MUSIC from homeassistant.const import ( CONF_HOST, CONF_NAME, @@ -26,14 +23,6 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -SUPPORT_RUSSOUND = ( - SUPPORT_VOLUME_MUTE - | SUPPORT_VOLUME_SET - | SUPPORT_TURN_ON - | SUPPORT_TURN_OFF - | SUPPORT_SELECT_SOURCE -) - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_HOST): cv.string, @@ -81,6 +70,14 @@ async def async_setup_platform( class RussoundZoneDevice(MediaPlayerEntity): """Representation of a Russound Zone.""" + _attr_supported_features = ( + MediaPlayerEntityFeature.VOLUME_MUTE + | MediaPlayerEntityFeature.VOLUME_SET + | MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + | MediaPlayerEntityFeature.SELECT_SOURCE + ) + def __init__(self, russ, zone_id, name, sources): """Initialize the zone device.""" super().__init__() @@ -141,11 +138,6 @@ class RussoundZoneDevice(MediaPlayerEntity): if status == "OFF": return STATE_OFF - @property - def supported_features(self): - """Flag media player features that are supported.""" - return SUPPORT_RUSSOUND - @property def source(self): """Get the currently selected source.""" diff --git a/homeassistant/components/russound_rnet/media_player.py b/homeassistant/components/russound_rnet/media_player.py index 0376bc3a448..b97b431333f 100644 --- a/homeassistant/components/russound_rnet/media_player.py +++ b/homeassistant/components/russound_rnet/media_player.py @@ -6,13 +6,10 @@ import logging from russound import russound import voluptuous as vol -from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerEntity -from homeassistant.components.media_player.const import ( - SUPPORT_SELECT_SOURCE, - SUPPORT_TURN_OFF, - SUPPORT_TURN_ON, - SUPPORT_VOLUME_MUTE, - SUPPORT_VOLUME_SET, +from homeassistant.components.media_player import ( + PLATFORM_SCHEMA, + MediaPlayerEntity, + MediaPlayerEntityFeature, ) from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant @@ -25,13 +22,6 @@ _LOGGER = logging.getLogger(__name__) CONF_ZONES = "zones" CONF_SOURCES = "sources" -SUPPORT_RUSSOUND = ( - SUPPORT_VOLUME_MUTE - | SUPPORT_VOLUME_SET - | SUPPORT_TURN_ON - | SUPPORT_TURN_OFF - | SUPPORT_SELECT_SOURCE -) ZONE_SCHEMA = vol.Schema({vol.Required(CONF_NAME): cv.string}) @@ -81,6 +71,14 @@ def setup_platform( class RussoundRNETDevice(MediaPlayerEntity): """Representation of a Russound RNET device.""" + _attr_supported_features = ( + MediaPlayerEntityFeature.VOLUME_MUTE + | MediaPlayerEntityFeature.VOLUME_SET + | MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF + | MediaPlayerEntityFeature.SELECT_SOURCE + ) + def __init__(self, hass, russ, sources, zone_id, extra): """Initialise the Russound RNET device.""" self._name = extra["name"] @@ -129,11 +127,6 @@ class RussoundRNETDevice(MediaPlayerEntity): """Return the state of the device.""" return self._state - @property - def supported_features(self): - """Flag media player features that are supported.""" - return SUPPORT_RUSSOUND - @property def source(self): """Get the currently selected source."""