diff --git a/homeassistant/components/media_player/yamaha.py b/homeassistant/components/media_player/yamaha.py index bb7942a2545..cf363458067 100644 --- a/homeassistant/components/media_player/yamaha.py +++ b/homeassistant/components/media_player/yamaha.py @@ -6,33 +6,45 @@ https://home-assistant.io/components/media_player.yamaha/ """ import logging +import requests import voluptuous as vol from homeassistant.components.media_player import ( + DOMAIN, MEDIA_PLAYER_SCHEMA, MEDIA_TYPE_MUSIC, PLATFORM_SCHEMA, + SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PLAY_MEDIA, + SUPPORT_PREVIOUS_TRACK, SUPPORT_SELECT_SOURCE, SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, - SUPPORT_SELECT_SOURCE, SUPPORT_PLAY_MEDIA, SUPPORT_PAUSE, SUPPORT_STOP, - SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK, SUPPORT_PLAY, - MEDIA_TYPE_MUSIC, MEDIA_PLAYER_SCHEMA, DOMAIN, - MediaPlayerDevice, PLATFORM_SCHEMA) -from homeassistant.const import (CONF_NAME, CONF_HOST, STATE_OFF, STATE_ON, - STATE_PLAYING, STATE_IDLE, ATTR_ENTITY_ID) + MediaPlayerDevice) +from homeassistant.const import ( + ATTR_ENTITY_ID, CONF_HOST, CONF_NAME, STATE_IDLE, STATE_OFF, STATE_ON, + STATE_PLAYING) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['rxv==0.5.1'] _LOGGER = logging.getLogger(__name__) +ATTR_ENABLED = 'enabled' +ATTR_PORT = 'port' + +CONF_SOURCE_IGNORE = 'source_ignore' +CONF_SOURCE_NAMES = 'source_names' +CONF_ZONE_IGNORE = 'zone_ignore' +CONF_ZONE_NAMES = 'zone_names' + +DATA_YAMAHA = 'yamaha_known_receivers' +DEFAULT_NAME = "Yamaha Receiver" + +ENABLE_OUTPUT_SCHEMA = MEDIA_PLAYER_SCHEMA.extend({ + vol.Required(ATTR_ENABLED): cv.boolean, + vol.Required(ATTR_PORT): cv.string, +}) + +SERVICE_ENABLE_OUTPUT = 'yamaha_enable_output' + SUPPORT_YAMAHA = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \ SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_SELECT_SOURCE | SUPPORT_PLAY -CONF_SOURCE_NAMES = 'source_names' -CONF_SOURCE_IGNORE = 'source_ignore' -CONF_ZONE_NAMES = 'zone_names' -CONF_ZONE_IGNORE = 'zone_ignore' - -DEFAULT_NAME = 'Yamaha Receiver' -DATA_YAMAHA = 'yamaha_known_receivers' - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_HOST): cv.string, @@ -44,16 +56,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_ZONE_NAMES, default={}): {cv.string: cv.string}, }) -SERVICE_ENABLE_OUTPUT = 'yamaha_enable_output' - -ATTR_PORT = 'port' -ATTR_ENABLED = 'enabled' - -ENABLE_OUTPUT_SCHEMA = MEDIA_PLAYER_SCHEMA.extend({ - vol.Required(ATTR_PORT): cv.string, - vol.Required(ATTR_ENABLED): cv.boolean -}) - def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Yamaha platform.""" @@ -80,7 +82,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): receivers = rxv.RXV( ctrl_url, model_name=model, friendly_name=name, unit_desc_url=desc_url).zone_controllers() - _LOGGER.info("Receivers: %s", receivers) + _LOGGER.debug("Receivers: %s", receivers) # when we are dynamically discovered config is empty zone_ignore = [] elif host is None: @@ -96,15 +98,15 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if receiver.zone in zone_ignore: continue - device = YamahaDevice(name, receiver, source_ignore, - source_names, zone_names) + device = YamahaDevice( + name, receiver, source_ignore, source_names, zone_names) # Only add device if it's not already added if device.zone_id not in hass.data[DATA_YAMAHA]: hass.data[DATA_YAMAHA][device.zone_id] = device devices.append(device) else: - _LOGGER.debug('Ignoring duplicate receiver %s', name) + _LOGGER.debug("Ignoring duplicate receiver: %s", name) def service_handler(service): """Handle for services.""" @@ -130,8 +132,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class YamahaDevice(MediaPlayerDevice): """Representation of a Yamaha device.""" - def __init__(self, name, receiver, source_ignore, - source_names, zone_names): + def __init__( + self, name, receiver, source_ignore, source_names, zone_names): """Initialize the Yamaha Receiver.""" self.receiver = receiver self._muted = False @@ -151,7 +153,12 @@ class YamahaDevice(MediaPlayerDevice): def update(self): """Get the latest details from the device.""" - self._play_status = self.receiver.play_status() + try: + self._play_status = self.receiver.play_status() + except requests.exceptions.ConnectionError: + _LOGGER.info("Receiver is offline: %s", self._name) + return + if self.receiver.on: if self._play_status is None: self._pwstate = STATE_ON @@ -231,11 +238,13 @@ class YamahaDevice(MediaPlayerDevice): supported_features = SUPPORT_YAMAHA supports = self._playback_support - mapping = {'play': (SUPPORT_PLAY | SUPPORT_PLAY_MEDIA), - 'pause': SUPPORT_PAUSE, - 'stop': SUPPORT_STOP, - 'skip_f': SUPPORT_NEXT_TRACK, - 'skip_r': SUPPORT_PREVIOUS_TRACK} + mapping = { + 'play': (SUPPORT_PLAY | SUPPORT_PLAY_MEDIA), + 'pause': SUPPORT_PAUSE, + 'stop': SUPPORT_STOP, + 'skip_f': SUPPORT_NEXT_TRACK, + 'skip_r': SUPPORT_PREVIOUS_TRACK, + } for attr, feature in mapping.items(): if getattr(supports, attr, False): supported_features |= feature