diff --git a/homeassistant/components/bluesound/__init__.py b/homeassistant/components/bluesound/__init__.py
index da74ed042bef7195d4cad3a7d3667b8312dd652a..82fe9b00d57043c22a9e3994b5be6218a0b9018e 100644
--- a/homeassistant/components/bluesound/__init__.py
+++ b/homeassistant/components/bluesound/__init__.py
@@ -14,7 +14,7 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
 from homeassistant.helpers.typing import ConfigType
 
 from .const import DOMAIN
-from .media_player import setup_services
+from .services import setup_services
 
 CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
 
diff --git a/homeassistant/components/bluesound/const.py b/homeassistant/components/bluesound/const.py
index b7da4e31702128850bbc2f1c47af60d73d6aa968..b1be33f6770a7df1dac7c0869af8ed10bd9a8c0b 100644
--- a/homeassistant/components/bluesound/const.py
+++ b/homeassistant/components/bluesound/const.py
@@ -2,9 +2,5 @@
 
 DOMAIN = "bluesound"
 INTEGRATION_TITLE = "Bluesound"
-SERVICE_CLEAR_TIMER = "clear_sleep_timer"
-SERVICE_JOIN = "join"
-SERVICE_SET_TIMER = "set_sleep_timer"
-SERVICE_UNJOIN = "unjoin"
 ATTR_BLUESOUND_GROUP = "bluesound_group"
 ATTR_MASTER = "master"
diff --git a/homeassistant/components/bluesound/media_player.py b/homeassistant/components/bluesound/media_player.py
index 200ef65569727c5f72f3e89fc83cfadcc10548dc..20cf51ff2f90b5f6d908c7ba94cfd3e93c68cecc 100644
--- a/homeassistant/components/bluesound/media_player.py
+++ b/homeassistant/components/bluesound/media_player.py
@@ -7,7 +7,7 @@ from asyncio import CancelledError, Task
 from contextlib import suppress
 from datetime import datetime, timedelta
 import logging
-from typing import TYPE_CHECKING, Any, NamedTuple
+from typing import TYPE_CHECKING, Any
 
 from pyblu import Input, Player, Preset, Status, SyncStatus
 from pyblu.errors import PlayerUnreachableError
@@ -24,18 +24,8 @@ from homeassistant.components.media_player import (
     async_process_play_media_url,
 )
 from homeassistant.config_entries import SOURCE_IMPORT
-from homeassistant.const import (
-    ATTR_ENTITY_ID,
-    CONF_HOST,
-    CONF_HOSTS,
-    CONF_NAME,
-    CONF_PORT,
-)
-from homeassistant.core import (
-    DOMAIN as HOMEASSISTANT_DOMAIN,
-    HomeAssistant,
-    ServiceCall,
-)
+from homeassistant.const import CONF_HOST, CONF_HOSTS, CONF_NAME, CONF_PORT
+from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
 from homeassistant.data_entry_flow import FlowResultType
 from homeassistant.exceptions import ServiceValidationError
 from homeassistant.helpers import config_validation as cv, issue_registry as ir
@@ -48,16 +38,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
 import homeassistant.util.dt as dt_util
 
-from .const import (
-    ATTR_BLUESOUND_GROUP,
-    ATTR_MASTER,
-    DOMAIN,
-    INTEGRATION_TITLE,
-    SERVICE_CLEAR_TIMER,
-    SERVICE_JOIN,
-    SERVICE_SET_TIMER,
-    SERVICE_UNJOIN,
-)
+from .const import ATTR_BLUESOUND_GROUP, ATTR_MASTER, DOMAIN, INTEGRATION_TITLE
 from .utils import format_unique_id
 
 if TYPE_CHECKING:
@@ -92,29 +73,6 @@ PLATFORM_SCHEMA = MEDIA_PLAYER_PLATFORM_SCHEMA.extend(
     }
 )
 
-BS_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.entity_ids})
-
-BS_JOIN_SCHEMA = BS_SCHEMA.extend({vol.Required(ATTR_MASTER): cv.entity_id})
-
-
-class ServiceMethodDetails(NamedTuple):
-    """Details for SERVICE_TO_METHOD mapping."""
-
-    method: str
-    schema: vol.Schema
-
-
-SERVICE_TO_METHOD = {
-    SERVICE_JOIN: ServiceMethodDetails(method="async_join", schema=BS_JOIN_SCHEMA),
-    SERVICE_UNJOIN: ServiceMethodDetails(method="async_unjoin", schema=BS_SCHEMA),
-    SERVICE_SET_TIMER: ServiceMethodDetails(
-        method="async_increase_timer", schema=BS_SCHEMA
-    ),
-    SERVICE_CLEAR_TIMER: ServiceMethodDetails(
-        method="async_clear_timer", schema=BS_SCHEMA
-    ),
-}
-
 
 async def _async_import(hass: HomeAssistant, config: ConfigType) -> None:
     """Import config entry from configuration.yaml."""
@@ -159,33 +117,6 @@ async def _async_import(hass: HomeAssistant, config: ConfigType) -> None:
     )
 
 
-def setup_services(hass: HomeAssistant) -> None:
-    """Set up services for Bluesound component."""
-
-    async def async_service_handler(service: ServiceCall) -> None:
-        """Map services to method of Bluesound devices."""
-        if not (method := SERVICE_TO_METHOD.get(service.service)):
-            return
-
-        params = {
-            key: value for key, value in service.data.items() if key != ATTR_ENTITY_ID
-        }
-        if entity_ids := service.data.get(ATTR_ENTITY_ID):
-            target_players = [
-                player for player in hass.data[DOMAIN] if player.entity_id in entity_ids
-            ]
-        else:
-            target_players = hass.data[DOMAIN]
-
-        for player in target_players:
-            await getattr(player, method.method)(**params)
-
-    for service, method in SERVICE_TO_METHOD.items():
-        hass.services.async_register(
-            DOMAIN, service, async_service_handler, schema=method.schema
-        )
-
-
 async def async_setup_entry(
     hass: HomeAssistant,
     config_entry: BluesoundConfigEntry,
diff --git a/homeassistant/components/bluesound/services.py b/homeassistant/components/bluesound/services.py
new file mode 100644
index 0000000000000000000000000000000000000000..06a507420f871bd5ee5f124199a35d85d4a104d3
--- /dev/null
+++ b/homeassistant/components/bluesound/services.py
@@ -0,0 +1,68 @@
+"""Support for Bluesound devices."""
+
+from __future__ import annotations
+
+from typing import NamedTuple
+
+import voluptuous as vol
+
+from homeassistant.const import ATTR_ENTITY_ID
+from homeassistant.core import HomeAssistant, ServiceCall
+from homeassistant.helpers import config_validation as cv
+
+from .const import ATTR_MASTER, DOMAIN
+
+SERVICE_CLEAR_TIMER = "clear_sleep_timer"
+SERVICE_JOIN = "join"
+SERVICE_SET_TIMER = "set_sleep_timer"
+SERVICE_UNJOIN = "unjoin"
+
+BS_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.entity_ids})
+
+BS_JOIN_SCHEMA = BS_SCHEMA.extend({vol.Required(ATTR_MASTER): cv.entity_id})
+
+
+class ServiceMethodDetails(NamedTuple):
+    """Details for SERVICE_TO_METHOD mapping."""
+
+    method: str
+    schema: vol.Schema
+
+
+SERVICE_TO_METHOD = {
+    SERVICE_JOIN: ServiceMethodDetails(method="async_join", schema=BS_JOIN_SCHEMA),
+    SERVICE_UNJOIN: ServiceMethodDetails(method="async_unjoin", schema=BS_SCHEMA),
+    SERVICE_SET_TIMER: ServiceMethodDetails(
+        method="async_increase_timer", schema=BS_SCHEMA
+    ),
+    SERVICE_CLEAR_TIMER: ServiceMethodDetails(
+        method="async_clear_timer", schema=BS_SCHEMA
+    ),
+}
+
+
+def setup_services(hass: HomeAssistant) -> None:
+    """Set up services for Bluesound component."""
+
+    async def async_service_handler(service: ServiceCall) -> None:
+        """Map services to method of Bluesound devices."""
+        if not (method := SERVICE_TO_METHOD.get(service.service)):
+            return
+
+        params = {
+            key: value for key, value in service.data.items() if key != ATTR_ENTITY_ID
+        }
+        if entity_ids := service.data.get(ATTR_ENTITY_ID):
+            target_players = [
+                player for player in hass.data[DOMAIN] if player.entity_id in entity_ids
+            ]
+        else:
+            target_players = hass.data[DOMAIN]
+
+        for player in target_players:
+            await getattr(player, method.method)(**params)
+
+    for service, method in SERVICE_TO_METHOD.items():
+        hass.services.async_register(
+            DOMAIN, service, async_service_handler, schema=method.schema
+        )
diff --git a/tests/components/bluesound/test_media_player.py b/tests/components/bluesound/test_media_player.py
index 99165915bf215349d12b4547088012e7c50206a8..966f311765036b04c7bb28b3d6569b1dd3ff2685 100644
--- a/tests/components/bluesound/test_media_player.py
+++ b/tests/components/bluesound/test_media_player.py
@@ -10,8 +10,8 @@ from syrupy.assertion import SnapshotAssertion
 from syrupy.filters import props
 
 from homeassistant.components.bluesound import DOMAIN as BLUESOUND_DOMAIN
-from homeassistant.components.bluesound.const import (
-    ATTR_MASTER,
+from homeassistant.components.bluesound.const import ATTR_MASTER
+from homeassistant.components.bluesound.services import (
     SERVICE_CLEAR_TIMER,
     SERVICE_JOIN,
     SERVICE_SET_TIMER,