mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +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,
|
alert,
|
||||||
automation,
|
automation,
|
||||||
binary_sensor,
|
binary_sensor,
|
||||||
|
button,
|
||||||
camera,
|
camera,
|
||||||
cover,
|
cover,
|
||||||
fan,
|
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)
|
@ENTITY_ADAPTERS.register(climate.DOMAIN)
|
||||||
class ClimateCapabilities(AlexaEntity):
|
class ClimateCapabilities(AlexaEntity):
|
||||||
"""Class to represent Climate capabilities."""
|
"""Class to represent Climate capabilities."""
|
||||||
|
@ -4,6 +4,7 @@ import math
|
|||||||
|
|
||||||
from homeassistant import core as ha
|
from homeassistant import core as ha
|
||||||
from homeassistant.components import (
|
from homeassistant.components import (
|
||||||
|
button,
|
||||||
camera,
|
camera,
|
||||||
cover,
|
cover,
|
||||||
fan,
|
fan,
|
||||||
@ -313,9 +314,13 @@ async def async_api_activate(hass, config, directive, context):
|
|||||||
entity = directive.entity
|
entity = directive.entity
|
||||||
domain = entity.domain
|
domain = entity.domain
|
||||||
|
|
||||||
|
service = SERVICE_TURN_ON
|
||||||
|
if domain == button.DOMAIN:
|
||||||
|
service = button.SERVICE_PRESS
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
domain,
|
domain,
|
||||||
SERVICE_TURN_ON,
|
service,
|
||||||
{ATTR_ENTITY_ID: entity.entity_id},
|
{ATTR_ENTITY_ID: entity.entity_id},
|
||||||
blocking=False,
|
blocking=False,
|
||||||
context=context,
|
context=context,
|
||||||
|
@ -25,7 +25,7 @@ from homeassistant.components.media_player.const import (
|
|||||||
)
|
)
|
||||||
import homeassistant.components.vacuum as vacuum
|
import homeassistant.components.vacuum as vacuum
|
||||||
from homeassistant.config import async_process_ha_core_config
|
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.core import Context
|
||||||
from homeassistant.helpers import entityfilter
|
from homeassistant.helpers import entityfilter
|
||||||
from homeassistant.setup import async_setup_component
|
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="
|
"https://mycamerastream.test/api/camera_proxy/camera.demo_camera?token="
|
||||||
in response["payload"]["imageUri"]
|
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