mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 13:47:35 +00:00
Add support for the renaming of Yamaha Receiver Zones via configuration file. Added a test to cover the change, plus previously untested options. (#11402)
This commit is contained in:
parent
f314b6cb6c
commit
bb2191b2b0
@ -27,6 +27,7 @@ SUPPORT_YAMAHA = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \
|
|||||||
|
|
||||||
CONF_SOURCE_NAMES = 'source_names'
|
CONF_SOURCE_NAMES = 'source_names'
|
||||||
CONF_SOURCE_IGNORE = 'source_ignore'
|
CONF_SOURCE_IGNORE = 'source_ignore'
|
||||||
|
CONF_ZONE_NAMES = 'zone_names'
|
||||||
CONF_ZONE_IGNORE = 'zone_ignore'
|
CONF_ZONE_IGNORE = 'zone_ignore'
|
||||||
|
|
||||||
DEFAULT_NAME = 'Yamaha Receiver'
|
DEFAULT_NAME = 'Yamaha Receiver'
|
||||||
@ -40,6 +41,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||||||
vol.Optional(CONF_ZONE_IGNORE, default=[]):
|
vol.Optional(CONF_ZONE_IGNORE, default=[]):
|
||||||
vol.All(cv.ensure_list, [cv.string]),
|
vol.All(cv.ensure_list, [cv.string]),
|
||||||
vol.Optional(CONF_SOURCE_NAMES, default={}): {cv.string: cv.string},
|
vol.Optional(CONF_SOURCE_NAMES, default={}): {cv.string: cv.string},
|
||||||
|
vol.Optional(CONF_ZONE_NAMES, default={}): {cv.string: cv.string},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -57,6 +59,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
source_ignore = config.get(CONF_SOURCE_IGNORE)
|
source_ignore = config.get(CONF_SOURCE_IGNORE)
|
||||||
source_names = config.get(CONF_SOURCE_NAMES)
|
source_names = config.get(CONF_SOURCE_NAMES)
|
||||||
zone_ignore = config.get(CONF_ZONE_IGNORE)
|
zone_ignore = config.get(CONF_ZONE_IGNORE)
|
||||||
|
zone_names = config.get(CONF_ZONE_NAMES)
|
||||||
|
|
||||||
if discovery_info is not None:
|
if discovery_info is not None:
|
||||||
name = discovery_info.get('name')
|
name = discovery_info.get('name')
|
||||||
@ -84,14 +87,16 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
if receiver.zone not in zone_ignore:
|
if receiver.zone not in zone_ignore:
|
||||||
hass.data[KNOWN].add(receiver.ctrl_url)
|
hass.data[KNOWN].add(receiver.ctrl_url)
|
||||||
add_devices([
|
add_devices([
|
||||||
YamahaDevice(name, receiver, source_ignore, source_names)
|
YamahaDevice(name, receiver, source_ignore,
|
||||||
|
source_names, zone_names)
|
||||||
], True)
|
], True)
|
||||||
|
|
||||||
|
|
||||||
class YamahaDevice(MediaPlayerDevice):
|
class YamahaDevice(MediaPlayerDevice):
|
||||||
"""Representation of a Yamaha device."""
|
"""Representation of a Yamaha device."""
|
||||||
|
|
||||||
def __init__(self, name, receiver, source_ignore, source_names):
|
def __init__(self, name, receiver, source_ignore,
|
||||||
|
source_names, zone_names):
|
||||||
"""Initialize the Yamaha Receiver."""
|
"""Initialize the Yamaha Receiver."""
|
||||||
self._receiver = receiver
|
self._receiver = receiver
|
||||||
self._muted = False
|
self._muted = False
|
||||||
@ -101,6 +106,7 @@ class YamahaDevice(MediaPlayerDevice):
|
|||||||
self._source_list = None
|
self._source_list = None
|
||||||
self._source_ignore = source_ignore or []
|
self._source_ignore = source_ignore or []
|
||||||
self._source_names = source_names or {}
|
self._source_names = source_names or {}
|
||||||
|
self._zone_names = zone_names or {}
|
||||||
self._reverse_mapping = None
|
self._reverse_mapping = None
|
||||||
self._playback_support = None
|
self._playback_support = None
|
||||||
self._is_playback_supported = False
|
self._is_playback_supported = False
|
||||||
@ -148,9 +154,10 @@ class YamahaDevice(MediaPlayerDevice):
|
|||||||
def name(self):
|
def name(self):
|
||||||
"""Return the name of the device."""
|
"""Return the name of the device."""
|
||||||
name = self._name
|
name = self._name
|
||||||
if self._zone != "Main_Zone":
|
zone_name = self._zone_names.get(self._zone, self._zone)
|
||||||
|
if zone_name != "Main_Zone":
|
||||||
# Zone will be one of Main_Zone, Zone_2, Zone_3
|
# Zone will be one of Main_Zone, Zone_2, Zone_3
|
||||||
name += " " + self._zone.replace('_', ' ')
|
name += " " + zone_name.replace('_', ' ')
|
||||||
return name
|
return name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -4,6 +4,15 @@ import xml.etree.ElementTree as ET
|
|||||||
|
|
||||||
import rxv
|
import rxv
|
||||||
|
|
||||||
|
import homeassistant.components.media_player.yamaha as yamaha
|
||||||
|
|
||||||
|
TEST_CONFIG = {
|
||||||
|
'name': "Test Receiver",
|
||||||
|
'source_ignore': ['HDMI5'],
|
||||||
|
'source_names': {'HDMI1': 'Laserdisc'},
|
||||||
|
'zone_names': {'Main_Zone': "Laser Dome"}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def sample_content(name):
|
def sample_content(name):
|
||||||
"""Read content into a string from a file."""
|
"""Read content into a string from a file."""
|
||||||
@ -12,6 +21,14 @@ def sample_content(name):
|
|||||||
return content.read()
|
return content.read()
|
||||||
|
|
||||||
|
|
||||||
|
def yamaha_player(receiver):
|
||||||
|
"""Create a YamahaDevice from a given receiver, presumably a Mock."""
|
||||||
|
zone_controller = receiver.zone_controllers()[0]
|
||||||
|
player = yamaha.YamahaDevice(receiver=zone_controller, **TEST_CONFIG)
|
||||||
|
player.build_source_list()
|
||||||
|
return player
|
||||||
|
|
||||||
|
|
||||||
class FakeYamaha(rxv.rxv.RXV):
|
class FakeYamaha(rxv.rxv.RXV):
|
||||||
"""Fake Yamaha receiver.
|
"""Fake Yamaha receiver.
|
||||||
|
|
||||||
@ -74,6 +91,7 @@ class TestYamaha(unittest.TestCase):
|
|||||||
"""Setup things to be run when tests are started."""
|
"""Setup things to be run when tests are started."""
|
||||||
super(TestYamaha, self).setUp()
|
super(TestYamaha, self).setUp()
|
||||||
self.rec = FakeYamaha("http://10.0.0.0:80/YamahaRemoteControl/ctrl")
|
self.rec = FakeYamaha("http://10.0.0.0:80/YamahaRemoteControl/ctrl")
|
||||||
|
self.player = yamaha_player(self.rec)
|
||||||
|
|
||||||
def test_get_playback_support(self):
|
def test_get_playback_support(self):
|
||||||
"""Test the playback."""
|
"""Test the playback."""
|
||||||
@ -92,3 +110,20 @@ class TestYamaha(unittest.TestCase):
|
|||||||
self.assertTrue(support.stop)
|
self.assertTrue(support.stop)
|
||||||
self.assertFalse(support.skip_f)
|
self.assertFalse(support.skip_f)
|
||||||
self.assertFalse(support.skip_r)
|
self.assertFalse(support.skip_r)
|
||||||
|
|
||||||
|
def test_configuration_options(self):
|
||||||
|
"""Test configuration options."""
|
||||||
|
rec_name = TEST_CONFIG['name']
|
||||||
|
src_zone = 'Main_Zone'
|
||||||
|
src_zone_alt = src_zone.replace('_', ' ')
|
||||||
|
renamed_zone = TEST_CONFIG['zone_names'][src_zone]
|
||||||
|
ignored_src = TEST_CONFIG['source_ignore'][0]
|
||||||
|
renamed_src = 'HDMI1'
|
||||||
|
new_src = TEST_CONFIG['source_names'][renamed_src]
|
||||||
|
self.assertFalse(self.player.name == rec_name + ' ' + src_zone)
|
||||||
|
self.assertFalse(self.player.name == rec_name + ' ' + src_zone_alt)
|
||||||
|
self.assertTrue(self.player.name == rec_name + ' ' + renamed_zone)
|
||||||
|
|
||||||
|
self.assertFalse(ignored_src in self.player.source_list)
|
||||||
|
self.assertFalse(renamed_src in self.player.source_list)
|
||||||
|
self.assertTrue(new_src in self.player.source_list)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user