1 """Support for Bluesound devices."""
3 from __future__
import annotations
5 from typing
import NamedTuple
7 import voluptuous
as vol
13 from .const
import ATTR_MASTER, DOMAIN
15 SERVICE_CLEAR_TIMER =
"clear_sleep_timer"
17 SERVICE_SET_TIMER =
"set_sleep_timer"
18 SERVICE_UNJOIN =
"unjoin"
20 BS_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.entity_ids})
22 BS_JOIN_SCHEMA = BS_SCHEMA.extend({vol.Required(ATTR_MASTER): cv.entity_id})
26 """Details for SERVICE_TO_METHOD mapping."""
36 method=
"async_increase_timer", schema=BS_SCHEMA
39 method=
"async_clear_timer", schema=BS_SCHEMA
45 """Set up services for Bluesound component."""
47 async
def async_service_handler(service: ServiceCall) ->
None:
48 """Map services to method of Bluesound devices."""
49 if not (method := SERVICE_TO_METHOD.get(service.service)):
53 key: value
for key, value
in service.data.items()
if key != ATTR_ENTITY_ID
55 if entity_ids := service.data.get(ATTR_ENTITY_ID):
57 player
for player
in hass.data[DOMAIN]
if player.entity_id
in entity_ids
60 target_players = hass.data[DOMAIN]
62 for player
in target_players:
63 await getattr(player, method.method)(**params)
65 for service, method
in SERVICE_TO_METHOD.items():
66 hass.services.async_register(
67 DOMAIN, service, async_service_handler, schema=method.schema
None setup_services(HomeAssistant hass)