-
-
Notifications
You must be signed in to change notification settings - Fork 38.3k
Add sound mode support #14910
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add sound mode support #14910
Changes from 5 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
8280a19
Add sound mode support
starkillerOG 5430c5f
continuation line indent
starkillerOG 81ca56b
indentation
starkillerOG 7d2d249
indentation
starkillerOG 554884c
Remove option to configure sound_mode_dict
starkillerOG 4368e31
Sound mode support
starkillerOG 6a7454c
Detect sound mode support from device
starkillerOG c93701b
Pushed denonavr to v.0.7.4
starkillerOG File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -12,9 +12,10 @@ | |
| from homeassistant.components.media_player import ( | ||
| SUPPORT_PAUSE, SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK, | ||
| SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP, | ||
| SUPPORT_SELECT_SOURCE, SUPPORT_PLAY_MEDIA, MEDIA_TYPE_CHANNEL, | ||
| MediaPlayerDevice, PLATFORM_SCHEMA, SUPPORT_TURN_ON, | ||
| MEDIA_TYPE_MUSIC, SUPPORT_VOLUME_SET, SUPPORT_PLAY) | ||
| SUPPORT_SELECT_SOURCE, SUPPORT_SELECT_SOUND_MODE, | ||
| SUPPORT_PLAY_MEDIA, MEDIA_TYPE_CHANNEL, MediaPlayerDevice, | ||
| PLATFORM_SCHEMA, SUPPORT_TURN_ON, MEDIA_TYPE_MUSIC, | ||
| SUPPORT_VOLUME_SET, SUPPORT_PLAY) | ||
| from homeassistant.const import ( | ||
| CONF_HOST, STATE_OFF, STATE_PLAYING, STATE_PAUSED, | ||
| CONF_NAME, STATE_ON, CONF_ZONE, CONF_TIMEOUT) | ||
|
|
@@ -24,15 +25,18 @@ | |
|
|
||
| _LOGGER = logging.getLogger(__name__) | ||
|
|
||
| DEFAULT_NAME = None | ||
| DEFAULT_SHOW_SOURCES = False | ||
| DEFAULT_TIMEOUT = 2 | ||
| DEFAULT_SOUND_MODE = True | ||
| CONF_SHOW_ALL_SOURCES = 'show_all_sources' | ||
| CONF_ZONES = 'zones' | ||
| CONF_SOUND_MODE = 'sound_mode' | ||
| CONF_VALID_ZONES = ['Zone2', 'Zone3'] | ||
| CONF_INVALID_ZONES_ERR = 'Invalid Zone (expected Zone2 or Zone3)' | ||
| KEY_DENON_CACHE = 'denonavr_hosts' | ||
|
|
||
| ATTR_SOUND_MODE_RAW = 'sound_mode_raw' | ||
|
|
||
| SUPPORT_DENON = SUPPORT_VOLUME_STEP | SUPPORT_VOLUME_MUTE | \ | ||
| SUPPORT_TURN_ON | SUPPORT_TURN_OFF | \ | ||
| SUPPORT_SELECT_SOURCE | SUPPORT_VOLUME_SET | ||
|
|
@@ -49,6 +53,7 @@ | |
| PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ | ||
| vol.Optional(CONF_HOST): cv.string, | ||
| vol.Optional(CONF_NAME): cv.string, | ||
| vol.Optional(CONF_SOUND_MODE, default=DEFAULT_SOUND_MODE): cv.boolean, | ||
| vol.Optional(CONF_SHOW_ALL_SOURCES, default=DEFAULT_SHOW_SOURCES): | ||
| cv.boolean, | ||
| vol.Optional(CONF_ZONES): | ||
|
|
@@ -84,6 +89,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): | |
| else: | ||
| add_zones = None | ||
|
|
||
| # Get config option for sound mode | ||
| sound_mode_support = config.get(CONF_SOUND_MODE) | ||
|
|
||
| # Start assignment of host and name | ||
| new_hosts = [] | ||
| # 1. option: manual setting | ||
|
|
@@ -117,7 +125,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): | |
| show_all_inputs=show_all_sources, timeout=timeout, | ||
| add_zones=add_zones) | ||
| for new_zone in new_device.zones.values(): | ||
| receivers.append(DenonDevice(new_zone)) | ||
| receivers.append(DenonDevice(new_zone, | ||
| sound_mode_support)) | ||
| cache.add(host) | ||
| _LOGGER.info("Denon receiver at host %s initialized", host) | ||
|
|
||
|
|
@@ -129,7 +138,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): | |
| class DenonDevice(MediaPlayerDevice): | ||
| """Representation of a Denon Media Player Device.""" | ||
|
|
||
| def __init__(self, receiver): | ||
| def __init__(self, receiver, sound_mode_support): | ||
| """Initialize the device.""" | ||
| self._receiver = receiver | ||
| self._name = self._receiver.name | ||
|
|
@@ -147,6 +156,20 @@ def __init__(self, receiver): | |
| self._frequency = self._receiver.frequency | ||
| self._station = self._receiver.station | ||
|
|
||
| self._sound_mode_support = sound_mode_support | ||
| if 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 |= (sound_mode_support and | ||
| SUPPORT_SELECT_SOUND_MODE) | ||
|
|
||
| def update(self): | ||
| """Get the latest status information from device.""" | ||
| self._receiver.update() | ||
|
|
@@ -164,6 +187,9 @@ def update(self): | |
| self._band = self._receiver.band | ||
| self._frequency = self._receiver.frequency | ||
| 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 | ||
| def name(self): | ||
|
|
@@ -197,12 +223,27 @@ def source_list(self): | |
| """Return a list of available input sources.""" | ||
| return self._source_list | ||
|
|
||
| @property | ||
| def sound_mode(self): | ||
| """Return the current matched sound mode.""" | ||
| return self._sound_mode | ||
|
|
||
| @property | ||
| def sound_mode_raw(self): | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This isn't used. |
||
| """Return the current raw sound mode.""" | ||
| return self._sound_mode_raw | ||
|
|
||
| @property | ||
| def sound_mode_list(self): | ||
| """Return a list of available sound modes.""" | ||
| return self._sound_mode_list | ||
|
|
||
| @property | ||
| def supported_features(self): | ||
| """Flag media player features that are supported.""" | ||
| if self._current_source in self._receiver.netaudio_func_list: | ||
| return SUPPORT_DENON | SUPPORT_MEDIA_MODES | ||
| return SUPPORT_DENON | ||
| return self._supported_features_base | SUPPORT_MEDIA_MODES | ||
| return self._supported_features_base | ||
|
|
||
| @property | ||
| def media_content_id(self): | ||
|
|
@@ -276,6 +317,15 @@ def media_episode(self): | |
| """Episode of current playing media, TV show only.""" | ||
| 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): | ||
| """Simulate play pause media player.""" | ||
| return self._receiver.toggle_play_pause() | ||
|
|
@@ -292,6 +342,10 @@ def select_source(self, source): | |
| """Select input 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): | ||
| """Turn on media player.""" | ||
| if self._receiver.power_on(): | ||
|
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is sound mode configurable? Can it not be detected from the device?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the option to disable sound_mode_support for old types receivers that do not have sound modes. As far as I know this can not be detected from the receiver itself. At least their is no direct bolean if sound mode is supported. It might be possible to see it from the absense of the current sound mode if you request it from the receiver.
However I always like to have the option to disable components in case they give problems for certain types/models. Of course I only have my own receiver to test with and that one does support sound_mode. So I cann't really test with a receiver that doesn't support sound mode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In Home Assistant we aim to represent devices as-is. If we go down the route to disable sound modes, we can start adding config options for everything…
Please remove the config option and base it on detecting support.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am working on it in the denonAVR library of @scarface-4711.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay. This PR can be merged when the config option has been removed and the lib has been updated.