mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Add support for supportedOperations to Alexa.PlaybackController (#28212)
* Added support for supportedOperations to Alexa.PlaybackController * Added support for supportedOperations to Alexa.PlaybackController
This commit is contained in:
parent
f2d6cc7329
commit
da8a476142
@ -17,6 +17,7 @@ from homeassistant.const import (
|
|||||||
STATE_UNKNOWN,
|
STATE_UNKNOWN,
|
||||||
)
|
)
|
||||||
import homeassistant.components.climate.const as climate
|
import homeassistant.components.climate.const as climate
|
||||||
|
import homeassistant.components.media_player.const as media_player
|
||||||
from homeassistant.components.alarm_control_panel import ATTR_CODE_FORMAT, FORMAT_NUMBER
|
from homeassistant.components.alarm_control_panel import ATTR_CODE_FORMAT, FORMAT_NUMBER
|
||||||
from homeassistant.components import light, fan, cover
|
from homeassistant.components import light, fan, cover
|
||||||
import homeassistant.util.color as color_util
|
import homeassistant.util.color as color_util
|
||||||
@ -110,6 +111,11 @@ class AlexaCapability:
|
|||||||
"""Return the Configuration object."""
|
"""Return the Configuration object."""
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def supported_operations():
|
||||||
|
"""Return the supportedOperations object."""
|
||||||
|
return []
|
||||||
|
|
||||||
def serialize_discovery(self):
|
def serialize_discovery(self):
|
||||||
"""Serialize according to the Discovery API."""
|
"""Serialize according to the Discovery API."""
|
||||||
result = {"type": "AlexaInterface", "interface": self.name(), "version": "3"}
|
result = {"type": "AlexaInterface", "interface": self.name(), "version": "3"}
|
||||||
@ -150,6 +156,10 @@ class AlexaCapability:
|
|||||||
if instance is not None:
|
if instance is not None:
|
||||||
result["instance"] = instance
|
result["instance"] = instance
|
||||||
|
|
||||||
|
supported_operations = self.supported_operations()
|
||||||
|
if supported_operations:
|
||||||
|
result["supportedOperations"] = supported_operations
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def serialize_properties(self):
|
def serialize_properties(self):
|
||||||
@ -484,6 +494,28 @@ class AlexaPlaybackController(AlexaCapability):
|
|||||||
"""Return the Alexa API name of this interface."""
|
"""Return the Alexa API name of this interface."""
|
||||||
return "Alexa.PlaybackController"
|
return "Alexa.PlaybackController"
|
||||||
|
|
||||||
|
def supported_operations(self):
|
||||||
|
"""Return the supportedOperations object.
|
||||||
|
|
||||||
|
Supported Operations: FastForward, Next, Pause, Play, Previous, Rewind, StartOver, Stop
|
||||||
|
"""
|
||||||
|
supported_features = self.entity.attributes.get(ATTR_SUPPORTED_FEATURES, 0)
|
||||||
|
|
||||||
|
operations = {
|
||||||
|
media_player.SUPPORT_NEXT_TRACK: "Next",
|
||||||
|
media_player.SUPPORT_PAUSE: "Pause",
|
||||||
|
media_player.SUPPORT_PLAY: "Play",
|
||||||
|
media_player.SUPPORT_PREVIOUS_TRACK: "Previous",
|
||||||
|
media_player.SUPPORT_STOP: "Stop",
|
||||||
|
}
|
||||||
|
|
||||||
|
supported_operations = []
|
||||||
|
for operation in operations:
|
||||||
|
if operation & supported_features:
|
||||||
|
supported_operations.append(operations[operation])
|
||||||
|
|
||||||
|
return supported_operations
|
||||||
|
|
||||||
|
|
||||||
class AlexaInputController(AlexaCapability):
|
class AlexaInputController(AlexaCapability):
|
||||||
"""Implements Alexa.InputController.
|
"""Implements Alexa.InputController.
|
||||||
|
@ -726,7 +726,7 @@ async def test_media_player(hass):
|
|||||||
assert appliance["displayCategories"][0] == "TV"
|
assert appliance["displayCategories"][0] == "TV"
|
||||||
assert appliance["friendlyName"] == "Test media player"
|
assert appliance["friendlyName"] == "Test media player"
|
||||||
|
|
||||||
assert_endpoint_capabilities(
|
capabilities = assert_endpoint_capabilities(
|
||||||
appliance,
|
appliance,
|
||||||
"Alexa.InputController",
|
"Alexa.InputController",
|
||||||
"Alexa.PowerController",
|
"Alexa.PowerController",
|
||||||
@ -737,6 +737,13 @@ async def test_media_player(hass):
|
|||||||
"Alexa.ChannelController",
|
"Alexa.ChannelController",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
playback_capability = get_capability(capabilities, "Alexa.PlaybackController")
|
||||||
|
assert playback_capability is not None
|
||||||
|
supported_operations = playback_capability["supportedOperations"]
|
||||||
|
operations = ["Play", "Pause", "Stop", "Next", "Previous"]
|
||||||
|
for operation in operations:
|
||||||
|
assert operation in supported_operations
|
||||||
|
|
||||||
await assert_power_controller_works(
|
await assert_power_controller_works(
|
||||||
"media_player#test", "media_player.turn_on", "media_player.turn_off", hass
|
"media_player#test", "media_player.turn_on", "media_player.turn_off", hass
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user