Add sound mode support (#14910)

* Add sound mode support

* continuation line indent

* indentation

* indentation

* Remove option to configure sound_mode_dict

* Sound mode support

- removed the sound_mode_raw propertie because it was not used, (still available through self._sound_mode_raw (as device attribute for automations and diagnostics)

* Detect sound mode support from device

Removed the config option to indicate if sound mode is supported.
Added detection if sound mode is supported from the receiver itself.
Pushed denonavr library to V.0.7.4

* Pushed denonavr to v.0.7.4
This commit is contained in:
starkillerOG 2018-07-09 11:39:41 +02:00 committed by Paulus Schoutsen
parent 287b1bce15
commit b9eb0081cd
2 changed files with 50 additions and 8 deletions

View File

@ -12,19 +12,19 @@ import voluptuous as vol
from homeassistant.components.media_player import ( from homeassistant.components.media_player import (
SUPPORT_PAUSE, SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK, SUPPORT_PAUSE, SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK,
SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP,
SUPPORT_SELECT_SOURCE, SUPPORT_PLAY_MEDIA, MEDIA_TYPE_CHANNEL, SUPPORT_SELECT_SOURCE, SUPPORT_SELECT_SOUND_MODE,
MediaPlayerDevice, PLATFORM_SCHEMA, SUPPORT_TURN_ON, SUPPORT_PLAY_MEDIA, MEDIA_TYPE_CHANNEL, MediaPlayerDevice,
MEDIA_TYPE_MUSIC, SUPPORT_VOLUME_SET, SUPPORT_PLAY) PLATFORM_SCHEMA, SUPPORT_TURN_ON, MEDIA_TYPE_MUSIC,
SUPPORT_VOLUME_SET, SUPPORT_PLAY)
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, STATE_OFF, STATE_PLAYING, STATE_PAUSED, CONF_HOST, STATE_OFF, STATE_PLAYING, STATE_PAUSED,
CONF_NAME, STATE_ON, CONF_ZONE, CONF_TIMEOUT) CONF_NAME, STATE_ON, CONF_ZONE, CONF_TIMEOUT)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
REQUIREMENTS = ['denonavr==0.7.3'] REQUIREMENTS = ['denonavr==0.7.4']
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DEFAULT_NAME = None
DEFAULT_SHOW_SOURCES = False DEFAULT_SHOW_SOURCES = False
DEFAULT_TIMEOUT = 2 DEFAULT_TIMEOUT = 2
CONF_SHOW_ALL_SOURCES = 'show_all_sources' CONF_SHOW_ALL_SOURCES = 'show_all_sources'
@ -33,6 +33,8 @@ CONF_VALID_ZONES = ['Zone2', 'Zone3']
CONF_INVALID_ZONES_ERR = 'Invalid Zone (expected Zone2 or Zone3)' CONF_INVALID_ZONES_ERR = 'Invalid Zone (expected Zone2 or Zone3)'
KEY_DENON_CACHE = 'denonavr_hosts' KEY_DENON_CACHE = 'denonavr_hosts'
ATTR_SOUND_MODE_RAW = 'sound_mode_raw'
SUPPORT_DENON = SUPPORT_VOLUME_STEP | SUPPORT_VOLUME_MUTE | \ SUPPORT_DENON = SUPPORT_VOLUME_STEP | SUPPORT_VOLUME_MUTE | \
SUPPORT_TURN_ON | SUPPORT_TURN_OFF | \ SUPPORT_TURN_ON | SUPPORT_TURN_OFF | \
SUPPORT_SELECT_SOURCE | SUPPORT_VOLUME_SET SUPPORT_SELECT_SOURCE | SUPPORT_VOLUME_SET
@ -146,6 +148,20 @@ class DenonDevice(MediaPlayerDevice):
self._frequency = self._receiver.frequency self._frequency = self._receiver.frequency
self._station = self._receiver.station self._station = self._receiver.station
self._sound_mode_support = self._receiver.support_sound_mode
if self._sound_mode_support:
self._sound_mode = self._receiver.sound_mode
self._sound_mode_raw = self._receiver.sound_mode_raw
self._sound_mode_list = self._receiver.sound_mode_list
else:
self._sound_mode = None
self._sound_mode_raw = None
self._sound_mode_list = None
self._supported_features_base = SUPPORT_DENON
self._supported_features_base |= (self._sound_mode_support and
SUPPORT_SELECT_SOUND_MODE)
def update(self): def update(self):
"""Get the latest status information from device.""" """Get the latest status information from device."""
self._receiver.update() self._receiver.update()
@ -163,6 +179,9 @@ class DenonDevice(MediaPlayerDevice):
self._band = self._receiver.band self._band = self._receiver.band
self._frequency = self._receiver.frequency self._frequency = self._receiver.frequency
self._station = self._receiver.station self._station = self._receiver.station
if self._sound_mode_support:
self._sound_mode = self._receiver.sound_mode
self._sound_mode_raw = self._receiver.sound_mode_raw
@property @property
def name(self): def name(self):
@ -196,12 +215,22 @@ class DenonDevice(MediaPlayerDevice):
"""Return a list of available input sources.""" """Return a list of available input sources."""
return self._source_list return self._source_list
@property
def sound_mode(self):
"""Return the current matched sound mode."""
return self._sound_mode
@property
def sound_mode_list(self):
"""Return a list of available sound modes."""
return self._sound_mode_list
@property @property
def supported_features(self): def supported_features(self):
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
if self._current_source in self._receiver.netaudio_func_list: if self._current_source in self._receiver.netaudio_func_list:
return SUPPORT_DENON | SUPPORT_MEDIA_MODES return self._supported_features_base | SUPPORT_MEDIA_MODES
return SUPPORT_DENON return self._supported_features_base
@property @property
def media_content_id(self): def media_content_id(self):
@ -275,6 +304,15 @@ class DenonDevice(MediaPlayerDevice):
"""Episode of current playing media, TV show only.""" """Episode of current playing media, TV show only."""
return None return None
@property
def device_state_attributes(self):
"""Return device specific state attributes."""
attributes = {}
if (self._sound_mode_raw is not None and self._sound_mode_support and
self._power == 'ON'):
attributes[ATTR_SOUND_MODE_RAW] = self._sound_mode_raw
return attributes
def media_play_pause(self): def media_play_pause(self):
"""Simulate play pause media player.""" """Simulate play pause media player."""
return self._receiver.toggle_play_pause() return self._receiver.toggle_play_pause()
@ -291,6 +329,10 @@ class DenonDevice(MediaPlayerDevice):
"""Select input source.""" """Select input source."""
return self._receiver.set_input_func(source) return self._receiver.set_input_func(source)
def select_sound_mode(self, sound_mode):
"""Select sound mode."""
return self._receiver.set_sound_mode(sound_mode)
def turn_on(self): def turn_on(self):
"""Turn on media player.""" """Turn on media player."""
if self._receiver.power_on(): if self._receiver.power_on():

View File

@ -260,7 +260,7 @@ defusedxml==0.5.0
deluge-client==1.4.0 deluge-client==1.4.0
# homeassistant.components.media_player.denonavr # homeassistant.components.media_player.denonavr
denonavr==0.7.3 denonavr==0.7.4
# homeassistant.components.media_player.directv # homeassistant.components.media_player.directv
directpy==0.5 directpy==0.5