diff --git a/homeassistant/components/media_player/russound_rnet.py b/homeassistant/components/media_player/russound_rnet.py index 64042f4633d..7ae16adcce3 100644 --- a/homeassistant/components/media_player/russound_rnet.py +++ b/homeassistant/components/media_player/russound_rnet.py @@ -4,20 +4,20 @@ Support for interfacing with Russound via RNET Protocol. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/media_player.russound_rnet/ """ -import logging +import logging import voluptuous as vol from homeassistant.components.media_player import ( - SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, - SUPPORT_SELECT_SOURCE, SUPPORT_PLAY, MediaPlayerDevice, PLATFORM_SCHEMA) + SUPPORT_TURN_ON, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, + SUPPORT_SELECT_SOURCE, MediaPlayerDevice, PLATFORM_SCHEMA) from homeassistant.const import ( CONF_HOST, CONF_PORT, STATE_OFF, STATE_ON, CONF_NAME) import homeassistant.helpers.config_validation as cv REQUIREMENTS = [ - 'https://github.com/laf/russound/archive/0.1.6.zip' - '#russound==0.1.6'] + 'https://github.com/laf/russound/archive/0.1.7.zip' + '#russound==0.1.7'] _LOGGER = logging.getLogger(__name__) @@ -25,7 +25,7 @@ CONF_ZONES = 'zones' CONF_SOURCES = 'sources' SUPPORT_RUSSOUND = SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET | \ - SUPPORT_TURN_OFF | SUPPORT_SELECT_SOURCE | SUPPORT_PLAY + SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_SELECT_SOURCE ZONE_SCHEMA = vol.Schema({ vol.Required(CONF_NAME): cv.string, @@ -48,7 +48,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Russound RNET platform.""" host = config.get(CONF_HOST) port = config.get(CONF_PORT) - keypad = config.get('keypad', '70') if host is None or port is None: _LOGGER.error("Invalid config. Expected %s and %s", @@ -58,7 +57,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): from russound import russound russ = russound.Russound(host, port) - russ.connect(keypad) + russ.connect() sources = [] for source in config[CONF_SOURCES]: @@ -67,7 +66,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if russ.is_connected(): for zone_id, extra in config[CONF_ZONES].items(): add_devices([RussoundRNETDevice( - hass, russ, sources, zone_id, extra)]) + hass, russ, sources, zone_id, extra)], True) else: _LOGGER.error('Not connected to %s:%s', host, port) @@ -79,10 +78,32 @@ class RussoundRNETDevice(MediaPlayerDevice): """Initialise the Russound RNET device.""" self._name = extra['name'] self._russ = russ - self._state = STATE_OFF self._sources = sources self._zone_id = zone_id - self._volume = 0 + + self._state = None + self._volume = None + self._source = None + + def update(self): + """Retrieve latest state.""" + if self._russ.get_power('1', self._zone_id) == 0: + self._state = STATE_OFF + else: + self._state = STATE_ON + + self._volume = self._russ.get_volume('1', self._zone_id) / 100.0 + + # Returns 0 based index for source. + index = self._russ.get_source('1', self._zone_id) + # Possibility exists that user has defined list of all sources. + # If a source is set externally that is beyond the defined list then + # an exception will be thrown. + # In this case return and unknown source (None) + try: + self._source = self._sources[index] + except IndexError: + self._source = None @property def name(self): @@ -99,25 +120,35 @@ class RussoundRNETDevice(MediaPlayerDevice): """Flag media player features that are supported.""" return SUPPORT_RUSSOUND + @property + def source(self): + """Get the currently selected source.""" + return self._source + @property def volume_level(self): - """Volume level of the media player (0..1).""" + """Volume level of the media player (0..1). + + Value is returned based on a range (0..100). + Therefore float divide by 100 to get to the required range. + """ return self._volume def set_volume_level(self, volume): - """Set volume level, range 0..1.""" - self._volume = volume * 100 - self._russ.set_volume('1', self._zone_id, self._volume) + """Set volume level. Volume has a range (0..1). + + Translate this to a range of (0..100) as expected expected + by _russ.set_volume() + """ + self._russ.set_volume('1', self._zone_id, volume * 100) def turn_on(self): """Turn the media player on.""" self._russ.set_power('1', self._zone_id, '1') - self._state = STATE_ON def turn_off(self): """Turn off media player.""" self._russ.set_power('1', self._zone_id, '0') - self._state = STATE_OFF def mute_volume(self, mute): """Send mute command.""" @@ -126,7 +157,8 @@ class RussoundRNETDevice(MediaPlayerDevice): def select_source(self, source): """Set the input source.""" if source in self._sources: - index = self._sources.index(source)+1 + index = self._sources.index(source) + # 0 based value for source self._russ.set_source('1', self._zone_id, index) @property diff --git a/requirements_all.txt b/requirements_all.txt index e93a4565ae3..3f267095551 100755 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -236,7 +236,7 @@ https://github.com/jamespcole/home-assistant-nzb-clients/archive/616cad591540925 https://github.com/joopert/nad_receiver/archive/0.0.3.zip#nad_receiver==0.0.3 # homeassistant.components.media_player.russound_rnet -https://github.com/laf/russound/archive/0.1.6.zip#russound==0.1.6 +https://github.com/laf/russound/archive/0.1.7.zip#russound==0.1.7 # homeassistant.components.switch.anel_pwrctrl https://github.com/mweinelt/anel-pwrctrl/archive/ed26e8830e28a2bfa4260a9002db23ce3e7e63d7.zip#anel_pwrctrl==0.0.1