diff --git a/homeassistant/components/conversation/__init__.py b/homeassistant/components/conversation/__init__.py index 6441dcab4ca95b9881599bdf3e710cd16b2d63d3..36929ac65f09681c5cd189a9e2522cf2b3a1dc65 100644 --- a/homeassistant/components/conversation/__init__.py +++ b/homeassistant/components/conversation/__init__.py @@ -40,6 +40,7 @@ from .const import ( OLD_HOME_ASSISTANT_AGENT, SERVICE_PROCESS, SERVICE_RELOAD, + ConversationEntityFeature, ) from .default_agent import async_get_default_agent, async_setup_default_agent from .entity import ConversationEntity @@ -58,6 +59,7 @@ __all__ = [ "ConversationEntity", "ConversationInput", "ConversationResult", + "ConversationEntityFeature", ] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/conversation/const.py b/homeassistant/components/conversation/const.py index 70a598e8b562d4ea7905234b7fc253832a38ee62..14b2d1d495530664ac923cf8ed0b7182197752df 100644 --- a/homeassistant/components/conversation/const.py +++ b/homeassistant/components/conversation/const.py @@ -1,5 +1,7 @@ """Const for conversation integration.""" +from enum import IntFlag + DOMAIN = "conversation" DEFAULT_EXPOSED_ATTRIBUTES = {"device_class"} HOME_ASSISTANT_AGENT = "conversation.home_assistant" @@ -12,3 +14,9 @@ ATTR_CONVERSATION_ID = "conversation_id" SERVICE_PROCESS = "process" SERVICE_RELOAD = "reload" + + +class ConversationEntityFeature(IntFlag): + """Supported features of the conversation entity.""" + + CONTROL = 1 diff --git a/homeassistant/components/conversation/default_agent.py b/homeassistant/components/conversation/default_agent.py index 71b14f8d2994c0d6ab25eff94b671a14ddc6206a..757abd845b326cb4cc16e462d2a1441374c87676 100644 --- a/homeassistant/components/conversation/default_agent.py +++ b/homeassistant/components/conversation/default_agent.py @@ -44,7 +44,7 @@ from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.event import async_track_state_added_domain from homeassistant.util.json import JsonObjectType, json_loads_object -from .const import DEFAULT_EXPOSED_ATTRIBUTES, DOMAIN +from .const import DEFAULT_EXPOSED_ATTRIBUTES, DOMAIN, ConversationEntityFeature from .entity import ConversationEntity from .models import ConversationInput, ConversationResult @@ -147,6 +147,7 @@ class DefaultAgent(ConversationEntity): """Default agent for conversation agent.""" _attr_name = "Home Assistant" + _attr_supported_features = ConversationEntityFeature.CONTROL def __init__( self, hass: core.HomeAssistant, config_intents: dict[str, Any] diff --git a/homeassistant/components/conversation/entity.py b/homeassistant/components/conversation/entity.py index 12dbea41344919b895149834311561b1d02c7fd8..d9598dee7eb8aab8389855220726ff7c7f9a07cd 100644 --- a/homeassistant/components/conversation/entity.py +++ b/homeassistant/components/conversation/entity.py @@ -7,6 +7,7 @@ from homeassistant.const import STATE_UNAVAILABLE, STATE_UNKNOWN from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.util import dt as dt_util +from .const import ConversationEntityFeature from .models import ConversationInput, ConversationResult @@ -14,6 +15,7 @@ class ConversationEntity(RestoreEntity): """Entity that supports conversations.""" _attr_should_poll = False + _attr_supported_features = ConversationEntityFeature(0) __last_activity: str | None = None @property diff --git a/tests/components/conversation/test_default_agent.py b/tests/components/conversation/test_default_agent.py index f8a021475d5872ea23177a318aa91ded6000e7b3..1d1c7078e3df8f783f974890ebb01634111d2077 100644 --- a/tests/components/conversation/test_default_agent.py +++ b/tests/components/conversation/test_default_agent.py @@ -17,7 +17,12 @@ from homeassistant.components.intent import ( TimerInfo, async_register_timer_handler, ) -from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_FRIENDLY_NAME, STATE_CLOSED +from homeassistant.const import ( + ATTR_DEVICE_CLASS, + ATTR_FRIENDLY_NAME, + STATE_CLOSED, + STATE_UNKNOWN, +) from homeassistant.core import DOMAIN as HASS_DOMAIN, Context, HomeAssistant, callback from homeassistant.helpers import ( area_registry as ar, @@ -173,6 +178,14 @@ async def test_conversation_agent(hass: HomeAssistant) -> None: ): assert agent.supported_languages == ["dwarvish", "elvish", "entish"] + state = hass.states.get(agent.entity_id) + assert state + assert state.state == STATE_UNKNOWN + assert ( + state.attributes["supported_features"] + == conversation.ConversationEntityFeature.CONTROL + ) + async def test_expose_flag_automatically_set( hass: HomeAssistant,