mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 01:08:12 +00:00
Map Alexa StepVolume responses to volume_up/down (#12467)
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.
This commit is contained in:
parent
3fd61d8f45
commit
fab991bbf6
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user