Skip to content

Commit

Permalink
Map Alexa StepVolume responses to volume_up/down (#12467)
Browse files Browse the repository at this point in the history
It turns out I misunderstood which media_player services are available
when a media player supports StepVolume. This PR maps the Alexa
StepSpeaker messages to the volume_up and volume_down services.

Currently Alexa allows you to specify the number of steps but the media
player volume_up and volume_down services don't support this. For now I
just look to see if the steps are +/- and call up/down accordingly.
  • Loading branch information
lucasweb78 authored and bitglue committed Feb 17, 2018
1 parent 3fd61d8 commit fab991b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 13 deletions.
22 changes: 13 additions & 9 deletions homeassistant/components/alexa/smart_home.py
Original file line number Diff line number Diff line change
Expand Up @@ -1178,20 +1178,24 @@ def async_api_adjust_volume(hass, config, request, entity):
@asyncio.coroutine
def async_api_adjust_volume_step(hass, config, request, entity):
"""Process an adjust volume step request."""
volume_step = round(float(request[API_PAYLOAD]['volumeSteps'] / 100), 2)

current_level = entity.attributes.get(media_player.ATTR_MEDIA_VOLUME_LEVEL)

volume = current_level + volume_step
# media_player volume up/down service does not support specifying steps
# each component handles it differently e.g. via config.
# For now we use the volumeSteps returned to figure out if we
# should step up/down
volume_step = request[API_PAYLOAD]['volumeSteps']

data = {
ATTR_ENTITY_ID: entity.entity_id,
media_player.ATTR_MEDIA_VOLUME_LEVEL: volume,
}

yield from hass.services.async_call(
entity.domain, media_player.SERVICE_VOLUME_SET,
data, blocking=False)
if volume_step > 0:
yield from hass.services.async_call(
entity.domain, media_player.SERVICE_VOLUME_UP,
data, blocking=False)
elif volume_step < 0:
yield from hass.services.async_call(
entity.domain, media_player.SERVICE_VOLUME_DOWN,
data, blocking=False)

return api_message(request)

Expand Down
6 changes: 2 additions & 4 deletions tests/components/alexa/test_smart_home.py
Original file line number Diff line number Diff line change
Expand Up @@ -515,17 +515,15 @@ def test_media_player(hass):

call, _ = yield from assert_request_calls_service(
'Alexa.StepSpeaker', 'AdjustVolume', 'media_player#test',
'media_player.volume_set',
'media_player.volume_up',
hass,
payload={'volumeSteps': 20})
assert call.data['volume_level'] == 0.95

call, _ = yield from assert_request_calls_service(
'Alexa.StepSpeaker', 'AdjustVolume', 'media_player#test',
'media_player.volume_set',
'media_player.volume_down',
hass,
payload={'volumeSteps': -20})
assert call.data['volume_level'] == 0.55


@asyncio.coroutine
Expand Down

0 comments on commit fab991b

Please sign in to comment.