Add zone_ignore option for yamaha. (#4091)

* Add zone_ignore option for yamaha.

We attempt to discover all zones for yamaha receivers. There are times
when users may want to suppress some zones from showing up. When a
Zone isn't actually connected to speakers, or on some newer receivers
where Zone_4 is an HDMI only zone, that doesn't support even basic
media_player UI.

This provide a mechanism for users to do that.

Fixes #4088

* Update yamaha.py
This commit is contained in:
Sean Dague 2016-10-28 22:18:31 -04:00 committed by Paulus Schoutsen
parent bf92aedd38
commit 9d836a115a

View File

@ -26,6 +26,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_IGNORE = 'zone_ignore'
DEFAULT_NAME = 'Yamaha Receiver' DEFAULT_NAME = 'Yamaha Receiver'
@ -34,10 +35,13 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_HOST): cv.string, vol.Optional(CONF_HOST): cv.string,
vol.Optional(CONF_SOURCE_IGNORE, default=[]): vol.Optional(CONF_SOURCE_IGNORE, default=[]):
vol.All(cv.ensure_list, [cv.string]), vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_ZONE_IGNORE, default=[]):
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},
}) })
# pylint: disable=too-many-locals
def setup_platform(hass, config, add_devices, discovery_info=None): def setup_platform(hass, config, add_devices, discovery_info=None):
"""Setup the Yamaha platform.""" """Setup the Yamaha platform."""
import rxv import rxv
@ -46,6 +50,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
host = config.get(CONF_HOST) host = config.get(CONF_HOST)
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)
if discovery_info is not None: if discovery_info is not None:
name = discovery_info[0] name = discovery_info[0]
@ -66,9 +71,10 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
ctrl_url = "http://{}:80/YamahaRemoteControl/ctrl".format(host) ctrl_url = "http://{}:80/YamahaRemoteControl/ctrl".format(host)
receivers = rxv.RXV(ctrl_url, name).zone_controllers() receivers = rxv.RXV(ctrl_url, name).zone_controllers()
add_devices( for receiver in receivers:
YamahaDevice(name, receiver, source_ignore, source_names) if receiver.zone not in zone_ignore:
for receiver in receivers) add_devices([
YamahaDevice(name, receiver, source_ignore, source_names)])
class YamahaDevice(MediaPlayerDevice): class YamahaDevice(MediaPlayerDevice):