Home Assistant Unofficial Reference 2024.12.1
media_player.py
Go to the documentation of this file.
1 """Support for Anthem Network Receivers and Processors."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from anthemav.protocol import AVR
8 
10  MediaPlayerDeviceClass,
11  MediaPlayerEntity,
12  MediaPlayerEntityFeature,
13  MediaPlayerState,
14 )
15 from homeassistant.const import CONF_MAC, CONF_MODEL
16 from homeassistant.core import HomeAssistant, callback
17 from homeassistant.helpers.device_registry import DeviceInfo
18 from homeassistant.helpers.dispatcher import async_dispatcher_connect
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from . import AnthemavConfigEntry
22 from .const import ANTHEMAV_UPDATE_SIGNAL, DOMAIN, MANUFACTURER
23 
24 _LOGGER = logging.getLogger(__name__)
25 
26 
28  hass: HomeAssistant,
29  config_entry: AnthemavConfigEntry,
30  async_add_entities: AddEntitiesCallback,
31 ) -> None:
32  """Set up entry."""
33  name = config_entry.title
34  mac_address = config_entry.data[CONF_MAC]
35  model = config_entry.data[CONF_MODEL]
36 
37  avr = config_entry.runtime_data
38 
39  _LOGGER.debug("Connection data dump: %s", avr.dump_conndata)
40 
42  AnthemAVR(
43  avr.protocol, name, mac_address, model, zone_number, config_entry.entry_id
44  )
45  for zone_number in avr.protocol.zones
46  )
47 
48 
50  """Entity reading values from Anthem AVR protocol."""
51 
52  _attr_has_entity_name = True
53  _attr_name = None
54  _attr_should_poll = False
55  _attr_device_class = MediaPlayerDeviceClass.RECEIVER
56  _attr_supported_features = (
57  MediaPlayerEntityFeature.VOLUME_SET
58  | MediaPlayerEntityFeature.VOLUME_MUTE
59  | MediaPlayerEntityFeature.TURN_ON
60  | MediaPlayerEntityFeature.TURN_OFF
61  | MediaPlayerEntityFeature.SELECT_SOURCE
62  )
63 
64  def __init__(
65  self,
66  avr: AVR,
67  name: str,
68  mac_address: str,
69  model: str,
70  zone_number: int,
71  entry_id: str,
72  ) -> None:
73  """Initialize entity with transport."""
74  super().__init__()
75  self.avravr = avr
76  self._entry_id_entry_id = entry_id
77  self._zone_number_zone_number = zone_number
78  self._zone_zone = avr.zones[zone_number]
79  if zone_number > 1:
80  unique_id = f"{mac_address}_{zone_number}"
81  self._attr_unique_id_attr_unique_id = unique_id
82  self._attr_device_info_attr_device_info = DeviceInfo(
83  identifiers={(DOMAIN, unique_id)},
84  name=f"Zone {zone_number}",
85  manufacturer=MANUFACTURER,
86  model=model,
87  via_device=(DOMAIN, mac_address),
88  )
89  else:
90  self._attr_unique_id_attr_unique_id = mac_address
91  self._attr_device_info_attr_device_info = DeviceInfo(
92  identifiers={(DOMAIN, mac_address)},
93  name=name,
94  manufacturer=MANUFACTURER,
95  model=model,
96  )
97  self.set_statesset_states()
98 
99  async def async_added_to_hass(self) -> None:
100  """When entity is added to hass."""
101  self.async_on_removeasync_on_remove(
103  self.hasshass,
104  f"{ANTHEMAV_UPDATE_SIGNAL}_{self._entry_id}",
105  self.update_statesupdate_states,
106  )
107  )
108 
109  @callback
110  def update_states(self) -> None:
111  """Update states for the current zone."""
112  self.set_statesset_states()
113  self.async_write_ha_stateasync_write_ha_state()
114 
115  def set_states(self) -> None:
116  """Set all the states from the device to the entity."""
117  self._attr_state_attr_state = (
118  MediaPlayerState.ON if self._zone_zone.power else MediaPlayerState.OFF
119  )
120  self._attr_is_volume_muted_attr_is_volume_muted = self._zone_zone.mute
121  self._attr_volume_level_attr_volume_level = self._zone_zone.volume_as_percentage
122  self._attr_media_title_attr_media_title = self._zone_zone.input_name
123  self._attr_app_name_attr_app_name = self._zone_zone.input_format
124  self._attr_source_attr_source = self._zone_zone.input_name
125  self._attr_source_list_attr_source_list = self.avravr.input_list
126 
127  async def async_select_source(self, source: str) -> None:
128  """Change AVR to the designated source (by name)."""
129  self._zone_zone.input_name = source
130 
131  async def async_turn_off(self) -> None:
132  """Turn AVR power off."""
133  self._zone_zone.power = False
134 
135  async def async_turn_on(self) -> None:
136  """Turn AVR power on."""
137  self._zone_zone.power = True
138 
139  async def async_set_volume_level(self, volume: float) -> None:
140  """Set AVR volume (0 to 1)."""
141  self._zone_zone.volume_as_percentage = volume
142 
143  async def async_mute_volume(self, mute: bool) -> None:
144  """Engage AVR mute."""
145  self._zone_zone.mute = mute
None __init__(self, AVR avr, str name, str mac_address, str model, int zone_number, str entry_id)
Definition: media_player.py:72
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
None async_setup_entry(HomeAssistant hass, AnthemavConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: media_player.py:31
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103