diff --git a/homeassistant/components/denonavr/__init__.py b/homeassistant/components/denonavr/__init__.py index 8cead5f4992..cd68308e124 100644 --- a/homeassistant/components/denonavr/__init__.py +++ b/homeassistant/components/denonavr/__init__.py @@ -9,8 +9,9 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST, EVENT_HOMEASSISTANT_STOP, Platform from homeassistant.core import Event, HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady -from homeassistant.helpers import entity_registry as er +from homeassistant.helpers import config_validation as cv, entity_registry as er from homeassistant.helpers.httpx_client import get_async_client +from homeassistant.helpers.typing import ConfigType from .const import ( CONF_SHOW_ALL_SOURCES, @@ -24,9 +25,12 @@ from .const import ( DEFAULT_USE_TELNET, DEFAULT_ZONE2, DEFAULT_ZONE3, + DOMAIN, ) from .receiver import ConnectDenonAVR +from .services import async_setup_services +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) PLATFORMS = [Platform.MEDIA_PLAYER] _LOGGER = logging.getLogger(__name__) @@ -34,6 +38,12 @@ _LOGGER = logging.getLogger(__name__) type DenonavrConfigEntry = ConfigEntry[DenonAVR] +async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: + """Set up the component.""" + async_setup_services(hass) + return True + + async def async_setup_entry(hass: HomeAssistant, entry: DenonavrConfigEntry) -> bool: """Set up the denonavr components from a config entry.""" # Connect to receiver diff --git a/homeassistant/components/denonavr/const.py b/homeassistant/components/denonavr/const.py index d28044ec018..a71c14d65d4 100644 --- a/homeassistant/components/denonavr/const.py +++ b/homeassistant/components/denonavr/const.py @@ -2,6 +2,7 @@ DOMAIN = "denonavr" +ATTR_DYNAMIC_EQ = "dynamic_eq" CONF_SHOW_ALL_SOURCES = "show_all_sources" CONF_ZONE2 = "zone2" diff --git a/homeassistant/components/denonavr/media_player.py b/homeassistant/components/denonavr/media_player.py index a3d70494ae1..053bb030b1c 100644 --- a/homeassistant/components/denonavr/media_player.py +++ b/homeassistant/components/denonavr/media_player.py @@ -26,7 +26,6 @@ from denonavr.exceptions import ( AvrTimoutError, DenonAvrError, ) -import voluptuous as vol from homeassistant.components.media_player import ( MediaPlayerDeviceClass, @@ -35,14 +34,14 @@ from homeassistant.components.media_player import ( MediaPlayerState, MediaType, ) -from homeassistant.const import ATTR_COMMAND, CONF_HOST, CONF_MODEL, CONF_TYPE +from homeassistant.const import CONF_HOST, CONF_MODEL, CONF_TYPE from homeassistant.core import HomeAssistant -from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import DenonavrConfigEntry from .const import ( + ATTR_DYNAMIC_EQ, CONF_MANUFACTURER, CONF_SERIAL_NUMBER, CONF_UPDATE_AUDYSSEY, @@ -53,7 +52,6 @@ from .const import ( _LOGGER = logging.getLogger(__name__) ATTR_SOUND_MODE_RAW = "sound_mode_raw" -ATTR_DYNAMIC_EQ = "dynamic_eq" SUPPORT_DENON = ( MediaPlayerEntityFeature.VOLUME_STEP @@ -76,11 +74,6 @@ SUPPORT_MEDIA_MODES = ( SCAN_INTERVAL = timedelta(seconds=10) PARALLEL_UPDATES = 1 -# Services -SERVICE_GET_COMMAND = "get_command" -SERVICE_SET_DYNAMIC_EQ = "set_dynamic_eq" -SERVICE_UPDATE_AUDYSSEY = "update_audyssey" - # HA Telnet events TELNET_EVENTS = { "HD", @@ -134,24 +127,6 @@ async def async_setup_entry( "%s receiver at host %s initialized", receiver.manufacturer, receiver.host ) - # Register additional services - platform = entity_platform.async_get_current_platform() - platform.async_register_entity_service( - SERVICE_GET_COMMAND, - {vol.Required(ATTR_COMMAND): cv.string}, - f"async_{SERVICE_GET_COMMAND}", - ) - platform.async_register_entity_service( - SERVICE_SET_DYNAMIC_EQ, - {vol.Required(ATTR_DYNAMIC_EQ): cv.boolean}, - f"async_{SERVICE_SET_DYNAMIC_EQ}", - ) - platform.async_register_entity_service( - SERVICE_UPDATE_AUDYSSEY, - None, - f"async_{SERVICE_UPDATE_AUDYSSEY}", - ) - async_add_entities(entities, update_before_add=True) diff --git a/homeassistant/components/denonavr/services.py b/homeassistant/components/denonavr/services.py new file mode 100644 index 00000000000..0c4523fb98b --- /dev/null +++ b/homeassistant/components/denonavr/services.py @@ -0,0 +1,47 @@ +"""Support for Denon AVR receivers using their HTTP interface.""" + +from __future__ import annotations + +import voluptuous as vol + +from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN +from homeassistant.const import ATTR_COMMAND +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers import config_validation as cv, service + +from .const import ATTR_DYNAMIC_EQ, DOMAIN + +# Services +SERVICE_GET_COMMAND = "get_command" +SERVICE_SET_DYNAMIC_EQ = "set_dynamic_eq" +SERVICE_UPDATE_AUDYSSEY = "update_audyssey" + + +@callback +def async_setup_services(hass: HomeAssistant) -> None: + """Set up services.""" + + service.async_register_platform_entity_service( + hass, + DOMAIN, + SERVICE_GET_COMMAND, + entity_domain=MEDIA_PLAYER_DOMAIN, + schema={vol.Required(ATTR_COMMAND): cv.string}, + func=f"async_{SERVICE_GET_COMMAND}", + ) + service.async_register_platform_entity_service( + hass, + DOMAIN, + SERVICE_SET_DYNAMIC_EQ, + entity_domain=MEDIA_PLAYER_DOMAIN, + schema={vol.Required(ATTR_DYNAMIC_EQ): cv.boolean}, + func=f"async_{SERVICE_SET_DYNAMIC_EQ}", + ) + service.async_register_platform_entity_service( + hass, + DOMAIN, + SERVICE_UPDATE_AUDYSSEY, + entity_domain=MEDIA_PLAYER_DOMAIN, + schema=None, + func=f"async_{SERVICE_UPDATE_AUDYSSEY}", + ) diff --git a/tests/components/denonavr/test_media_player.py b/tests/components/denonavr/test_media_player.py index 6550b31b1f9..24b12c08507 100644 --- a/tests/components/denonavr/test_media_player.py +++ b/tests/components/denonavr/test_media_player.py @@ -11,9 +11,9 @@ from homeassistant.components.denonavr.config_flow import ( CONF_TYPE, DOMAIN, ) -from homeassistant.components.denonavr.media_player import ( +from homeassistant.components.denonavr.const import ATTR_DYNAMIC_EQ +from homeassistant.components.denonavr.services import ( ATTR_COMMAND, - ATTR_DYNAMIC_EQ, SERVICE_GET_COMMAND, SERVICE_SET_DYNAMIC_EQ, SERVICE_UPDATE_AUDYSSEY,