mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 01:08:12 +00:00
Add button support to Alexa (#60163)
This commit is contained in:
parent
e3910856ad
commit
7a0ff4e2e1
@ -9,6 +9,7 @@ from homeassistant.components import (
|
||||
alert,
|
||||
automation,
|
||||
binary_sensor,
|
||||
button,
|
||||
camera,
|
||||
cover,
|
||||
fan,
|
||||
@ -424,6 +425,22 @@ class SwitchCapabilities(AlexaEntity):
|
||||
]
|
||||
|
||||
|
||||
@ENTITY_ADAPTERS.register(button.DOMAIN)
|
||||
class ButtonCapabilities(AlexaEntity):
|
||||
"""Class to represent Button capabilities."""
|
||||
|
||||
def default_display_categories(self):
|
||||
"""Return the display categories for this entity."""
|
||||
return [DisplayCategory.ACTIVITY_TRIGGER]
|
||||
|
||||
def interfaces(self):
|
||||
"""Yield the supported interfaces."""
|
||||
return [
|
||||
AlexaSceneController(self.entity, supports_deactivation=False),
|
||||
Alexa(self.hass),
|
||||
]
|
||||
|
||||
|
||||
@ENTITY_ADAPTERS.register(climate.DOMAIN)
|
||||
class ClimateCapabilities(AlexaEntity):
|
||||
"""Class to represent Climate capabilities."""
|
||||
|
@ -4,6 +4,7 @@ import math
|
||||
|
||||
from homeassistant import core as ha
|
||||
from homeassistant.components import (
|
||||
button,
|
||||
camera,
|
||||
cover,
|
||||
fan,
|
||||
@ -313,9 +314,13 @@ async def async_api_activate(hass, config, directive, context):
|
||||
entity = directive.entity
|
||||
domain = entity.domain
|
||||
|
||||
service = SERVICE_TURN_ON
|
||||
if domain == button.DOMAIN:
|
||||
service = button.SERVICE_PRESS
|
||||
|
||||
await hass.services.async_call(
|
||||
domain,
|
||||
SERVICE_TURN_ON,
|
||||
service,
|
||||
{ATTR_ENTITY_ID: entity.entity_id},
|
||||
blocking=False,
|
||||
context=context,
|
||||
|
@ -25,7 +25,7 @@ from homeassistant.components.media_player.const import (
|
||||
)
|
||||
import homeassistant.components.vacuum as vacuum
|
||||
from homeassistant.config import async_process_ha_core_config
|
||||
from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT
|
||||
from homeassistant.const import STATE_UNKNOWN, TEMP_CELSIUS, TEMP_FAHRENHEIT
|
||||
from homeassistant.core import Context
|
||||
from homeassistant.helpers import entityfilter
|
||||
from homeassistant.setup import async_setup_component
|
||||
@ -3937,3 +3937,23 @@ async def test_initialize_camera_stream(hass, mock_camera, mock_stream):
|
||||
"https://mycamerastream.test/api/camera_proxy/camera.demo_camera?token="
|
||||
in response["payload"]["imageUri"]
|
||||
)
|
||||
|
||||
|
||||
async def test_button(hass):
|
||||
"""Test button discovery."""
|
||||
device = ("button.ring_doorbell", STATE_UNKNOWN, {"friendly_name": "Ring Doorbell"})
|
||||
appliance = await discovery_test(device, hass)
|
||||
|
||||
assert appliance["endpointId"] == "button#ring_doorbell"
|
||||
assert appliance["displayCategories"][0] == "ACTIVITY_TRIGGER"
|
||||
assert appliance["friendlyName"] == "Ring Doorbell"
|
||||
|
||||
capabilities = assert_endpoint_capabilities(
|
||||
appliance, "Alexa.SceneController", "Alexa"
|
||||
)
|
||||
scene_capability = get_capability(capabilities, "Alexa.SceneController")
|
||||
assert scene_capability["supportsDeactivation"] is False
|
||||
|
||||
await assert_scene_controller_works(
|
||||
"button#ring_doorbell", "button.press", False, hass
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user