diff --git a/homeassistant/components/alexa/smart_home.py b/homeassistant/components/alexa/smart_home.py index a4f0225d22d40..b2f8146bfcfb7 100644 --- a/homeassistant/components/alexa/smart_home.py +++ b/homeassistant/components/alexa/smart_home.py @@ -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) diff --git a/tests/components/alexa/test_smart_home.py b/tests/components/alexa/test_smart_home.py index 9654c667c5fde..ca49950e2a1fa 100644 --- a/tests/components/alexa/test_smart_home.py +++ b/tests/components/alexa/test_smart_home.py @@ -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