Home Assistant Unofficial Reference 2024.12.1
media_player.py
Go to the documentation of this file.
1 """Support for interface with an Harman/Kardon or JBL AVR."""
2 
3 from __future__ import annotations
4 
5 import hkavr
6 import voluptuous as vol
7 
9  PLATFORM_SCHEMA as MEDIA_PLAYER_PLATFORM_SCHEMA,
10  MediaPlayerEntity,
11  MediaPlayerEntityFeature,
12  MediaPlayerState,
13 )
14 from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
15 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 DEFAULT_NAME = "Harman Kardon AVR"
21 DEFAULT_PORT = 10025
22 
23 PLATFORM_SCHEMA = MEDIA_PLAYER_PLATFORM_SCHEMA.extend(
24  {
25  vol.Required(CONF_HOST): cv.string,
26  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
27  vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
28  }
29 )
30 
31 
33  hass: HomeAssistant,
34  config: ConfigType,
35  add_entities: AddEntitiesCallback,
36  discover_info: DiscoveryInfoType | None = None,
37 ) -> None:
38  """Set up the AVR platform."""
39  name = config[CONF_NAME]
40  host = config[CONF_HOST]
41  port = config[CONF_PORT]
42 
43  avr = hkavr.HkAVR(host, port, name)
44  avr_device = HkAvrDevice(avr)
45 
46  add_entities([avr_device], True)
47 
48 
50  """Representation of a Harman Kardon AVR / JBL AVR TV."""
51 
52  _attr_supported_features = (
53  MediaPlayerEntityFeature.VOLUME_STEP
54  | MediaPlayerEntityFeature.VOLUME_MUTE
55  | MediaPlayerEntityFeature.TURN_OFF
56  | MediaPlayerEntityFeature.TURN_ON
57  | MediaPlayerEntityFeature.SELECT_SOURCE
58  )
59 
60  def __init__(self, avr):
61  """Initialize a new HarmanKardonAVR."""
62  self._avr_avr = avr
63 
64  self._name_name = avr.name
65  self._host_host = avr.host
66  self._port_port = avr.port
67 
68  self._source_list_source_list = avr.sources
69 
70  self._muted_muted = avr.muted
71  self._current_source_current_source = avr.current_source
72 
73  def update(self) -> None:
74  """Update the state of this media_player."""
75  if self._avr_avr.is_on():
76  self._attr_state_attr_state = MediaPlayerState.ON
77  elif self._avr_avr.is_off():
78  self._attr_state_attr_state = MediaPlayerState.OFF
79  else:
80  self._attr_state_attr_state = None
81 
82  self._muted_muted = self._avr_avr.muted
83  self._current_source_current_source = self._avr_avr.current_source
84 
85  @property
86  def name(self):
87  """Return the name of the device."""
88  return self._name_name
89 
90  @property
91  def is_volume_muted(self):
92  """Muted status not available."""
93  return self._muted_muted
94 
95  @property
96  def source(self):
97  """Return the current input source."""
98  return self._current_source_current_source
99 
100  @property
101  def source_list(self):
102  """Available sources."""
103  return self._source_list_source_list
104 
105  def turn_on(self) -> None:
106  """Turn the AVR on."""
107  self._avr_avr.power_on()
108 
109  def turn_off(self) -> None:
110  """Turn off the AVR."""
111  self._avr_avr.power_off()
112 
113  def select_source(self, source: str) -> None:
114  """Select input source."""
115  return self._avr_avr.select_source(source)
116 
117  def volume_up(self) -> None:
118  """Volume up the AVR."""
119  return self._avr_avr.volume_up()
120 
121  def volume_down(self) -> None:
122  """Volume down AVR."""
123  return self._avr_avr.volume_down()
124 
125  def mute_volume(self, mute: bool) -> None:
126  """Send mute command."""
127  return self._avr_avr.mute(mute)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
bool is_on(HomeAssistant hass, str entity_id)
Definition: __init__.py:155
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discover_info=None)
Definition: media_player.py:37