Home Assistant Unofficial Reference 2024.12.1
services.py
Go to the documentation of this file.
1 """Onkyo services."""
2 
3 from __future__ import annotations
4 
5 from typing import TYPE_CHECKING
6 
7 import voluptuous as vol
8 
9 from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN
10 from homeassistant.const import ATTR_ENTITY_ID
11 from homeassistant.core import HomeAssistant, ServiceCall
12 from homeassistant.helpers import config_validation as cv
13 from homeassistant.util.hass_dict import HassKey
14 
15 from .const import DOMAIN
16 
17 if TYPE_CHECKING:
18  from .media_player import OnkyoMediaPlayer
19 
20 DATA_MP_ENTITIES: HassKey[dict[str, dict[str, OnkyoMediaPlayer]]] = HassKey(DOMAIN)
21 
22 ATTR_HDMI_OUTPUT = "hdmi_output"
23 ACCEPTED_VALUES = [
24  "no",
25  "analog",
26  "yes",
27  "out",
28  "out-sub",
29  "sub",
30  "hdbaset",
31  "both",
32  "up",
33 ]
34 ONKYO_SELECT_OUTPUT_SCHEMA = vol.Schema(
35  {
36  vol.Required(ATTR_ENTITY_ID): cv.entity_ids,
37  vol.Required(ATTR_HDMI_OUTPUT): vol.In(ACCEPTED_VALUES),
38  }
39 )
40 SERVICE_SELECT_HDMI_OUTPUT = "onkyo_select_hdmi_output"
41 
42 
43 async def async_register_services(hass: HomeAssistant) -> None:
44  """Register Onkyo services."""
45 
46  hass.data.setdefault(DATA_MP_ENTITIES, {})
47 
48  async def async_service_handle(service: ServiceCall) -> None:
49  """Handle for services."""
50  entity_ids = service.data[ATTR_ENTITY_ID]
51 
52  targets: list[OnkyoMediaPlayer] = []
53  for receiver_entities in hass.data[DATA_MP_ENTITIES].values():
54  targets.extend(
55  entity
56  for entity in receiver_entities.values()
57  if entity.entity_id in entity_ids
58  )
59 
60  for target in targets:
61  if service.service == SERVICE_SELECT_HDMI_OUTPUT:
62  await target.async_select_output(service.data[ATTR_HDMI_OUTPUT])
63 
64  hass.services.async_register(
65  MEDIA_PLAYER_DOMAIN,
66  SERVICE_SELECT_HDMI_OUTPUT,
67  async_service_handle,
68  schema=ONKYO_SELECT_OUTPUT_SCHEMA,
69  )
None async_register_services(HomeAssistant hass)
Definition: services.py:43