Change Assist satellite state names (#126926)
* Change state names * Update homeassistant/components/assist_satellite/strings.json --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>pull/126933/head
parent
6373347d65
commit
bd4f3b0553
|
@ -41,10 +41,10 @@ _LOGGER = logging.getLogger(__name__)
|
|||
class AssistSatelliteState(StrEnum):
|
||||
"""Valid states of an Assist satellite entity."""
|
||||
|
||||
LISTENING_WAKE_WORD = "listening_wake_word"
|
||||
"""Device is streaming audio for wake word detection to Home Assistant."""
|
||||
IDLE = "idle"
|
||||
"""Device is waiting for user input, such as a wake word or a button press."""
|
||||
|
||||
LISTENING_COMMAND = "listening_command"
|
||||
LISTENING = "listening"
|
||||
"""Device is streaming audio with the voice command to Home Assistant."""
|
||||
|
||||
PROCESSING = "processing"
|
||||
|
@ -117,7 +117,7 @@ class AssistSatelliteEntity(entity.Entity):
|
|||
_attr_tts_options: dict[str, Any] | None = None
|
||||
_pipeline_task: asyncio.Task | None = None
|
||||
|
||||
__assist_satellite_state = AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
__assist_satellite_state = AssistSatelliteState.IDLE
|
||||
|
||||
@final
|
||||
@property
|
||||
|
@ -242,7 +242,7 @@ class AssistSatelliteEntity(entity.Entity):
|
|||
)
|
||||
finally:
|
||||
self._is_announcing = False
|
||||
self._set_state(AssistSatelliteState.LISTENING_WAKE_WORD)
|
||||
self._set_state(AssistSatelliteState.IDLE)
|
||||
|
||||
async def async_announce(self, announcement: AssistSatelliteAnnouncement) -> None:
|
||||
"""Announce media on the satellite.
|
||||
|
@ -363,9 +363,9 @@ class AssistSatelliteEntity(entity.Entity):
|
|||
def _internal_on_pipeline_event(self, event: PipelineEvent) -> None:
|
||||
"""Set state based on pipeline stage."""
|
||||
if event.type is PipelineEventType.WAKE_WORD_START:
|
||||
self._set_state(AssistSatelliteState.LISTENING_WAKE_WORD)
|
||||
self._set_state(AssistSatelliteState.IDLE)
|
||||
elif event.type is PipelineEventType.STT_START:
|
||||
self._set_state(AssistSatelliteState.LISTENING_COMMAND)
|
||||
self._set_state(AssistSatelliteState.LISTENING)
|
||||
elif event.type is PipelineEventType.INTENT_START:
|
||||
self._set_state(AssistSatelliteState.PROCESSING)
|
||||
elif event.type is PipelineEventType.INTENT_END:
|
||||
|
@ -379,7 +379,7 @@ class AssistSatelliteEntity(entity.Entity):
|
|||
self._set_state(AssistSatelliteState.RESPONDING)
|
||||
elif event.type is PipelineEventType.RUN_END:
|
||||
if not self._run_has_tts:
|
||||
self._set_state(AssistSatelliteState.LISTENING_WAKE_WORD)
|
||||
self._set_state(AssistSatelliteState.IDLE)
|
||||
|
||||
self.on_pipeline_event(event)
|
||||
|
||||
|
@ -392,7 +392,7 @@ class AssistSatelliteEntity(entity.Entity):
|
|||
@callback
|
||||
def tts_response_finished(self) -> None:
|
||||
"""Tell entity that the text-to-speech response has finished playing."""
|
||||
self._set_state(AssistSatelliteState.LISTENING_WAKE_WORD)
|
||||
self._set_state(AssistSatelliteState.IDLE)
|
||||
|
||||
@callback
|
||||
def _resolve_pipeline(self) -> str | None:
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
"_": {
|
||||
"name": "Assist satellite",
|
||||
"state": {
|
||||
"listening_wake_word": "Wake word",
|
||||
"listening_command": "Voice command",
|
||||
"idle": "[%key:common::state::idle%]",
|
||||
"listening": "Listening",
|
||||
"responding": "Responding",
|
||||
"processing": "Processing"
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ async def test_entity_state(
|
|||
|
||||
state = hass.states.get(ENTITY_ID)
|
||||
assert state is not None
|
||||
assert state.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert state.state == AssistSatelliteState.IDLE
|
||||
|
||||
context = Context()
|
||||
audio_stream = object()
|
||||
|
@ -73,18 +73,18 @@ async def test_entity_state(
|
|||
assert kwargs["end_stage"] == PipelineStage.TTS
|
||||
|
||||
for event_type, event_data, expected_state in (
|
||||
(PipelineEventType.RUN_START, {}, AssistSatelliteState.LISTENING_WAKE_WORD),
|
||||
(PipelineEventType.RUN_END, {}, AssistSatelliteState.LISTENING_WAKE_WORD),
|
||||
(PipelineEventType.RUN_START, {}, AssistSatelliteState.IDLE),
|
||||
(PipelineEventType.RUN_END, {}, AssistSatelliteState.IDLE),
|
||||
(
|
||||
PipelineEventType.WAKE_WORD_START,
|
||||
{},
|
||||
AssistSatelliteState.LISTENING_WAKE_WORD,
|
||||
AssistSatelliteState.IDLE,
|
||||
),
|
||||
(PipelineEventType.WAKE_WORD_END, {}, AssistSatelliteState.LISTENING_WAKE_WORD),
|
||||
(PipelineEventType.STT_START, {}, AssistSatelliteState.LISTENING_COMMAND),
|
||||
(PipelineEventType.STT_VAD_START, {}, AssistSatelliteState.LISTENING_COMMAND),
|
||||
(PipelineEventType.STT_VAD_END, {}, AssistSatelliteState.LISTENING_COMMAND),
|
||||
(PipelineEventType.STT_END, {}, AssistSatelliteState.LISTENING_COMMAND),
|
||||
(PipelineEventType.WAKE_WORD_END, {}, AssistSatelliteState.IDLE),
|
||||
(PipelineEventType.STT_START, {}, AssistSatelliteState.LISTENING),
|
||||
(PipelineEventType.STT_VAD_START, {}, AssistSatelliteState.LISTENING),
|
||||
(PipelineEventType.STT_VAD_END, {}, AssistSatelliteState.LISTENING),
|
||||
(PipelineEventType.STT_END, {}, AssistSatelliteState.LISTENING),
|
||||
(PipelineEventType.INTENT_START, {}, AssistSatelliteState.PROCESSING),
|
||||
(
|
||||
PipelineEventType.INTENT_END,
|
||||
|
@ -105,7 +105,7 @@ async def test_entity_state(
|
|||
|
||||
entity.tts_response_finished()
|
||||
state = hass.states.get(ENTITY_ID)
|
||||
assert state.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert state.state == AssistSatelliteState.IDLE
|
||||
|
||||
|
||||
async def test_new_pipeline_cancels_pipeline(
|
||||
|
@ -241,7 +241,7 @@ async def test_announce(
|
|||
target={"entity_id": "assist_satellite.test_entity"},
|
||||
blocking=True,
|
||||
)
|
||||
assert entity.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert entity.state == AssistSatelliteState.IDLE
|
||||
|
||||
assert entity.announcements[0] == expected_params
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ async def test_pipeline_api_audio(
|
|||
)
|
||||
|
||||
# Wake word
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
event_callback(
|
||||
PipelineEvent(
|
||||
|
@ -242,7 +242,7 @@ async def test_pipeline_api_audio(
|
|||
VoiceAssistantEventType.VOICE_ASSISTANT_STT_START,
|
||||
{},
|
||||
)
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_COMMAND
|
||||
assert satellite.state == AssistSatelliteState.LISTENING
|
||||
|
||||
event_callback(
|
||||
PipelineEvent(
|
||||
|
@ -761,7 +761,7 @@ async def test_pipeline_media_player(
|
|||
)
|
||||
await tts_finished.wait()
|
||||
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
|
||||
async def test_timer_events(
|
||||
|
@ -1214,7 +1214,7 @@ async def test_announce_message(
|
|||
blocking=True,
|
||||
)
|
||||
await done.wait()
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
|
||||
async def test_announce_media_id(
|
||||
|
@ -1297,7 +1297,7 @@ async def test_announce_media_id(
|
|||
blocking=True,
|
||||
)
|
||||
await done.wait()
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
mock_async_create_proxy_url.assert_called_once_with(
|
||||
hass,
|
||||
|
|
|
@ -199,7 +199,7 @@ async def test_pipeline(
|
|||
assert voip_user_id
|
||||
|
||||
# Satellite is muted until a call begins
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
done = asyncio.Event()
|
||||
|
||||
|
@ -251,7 +251,7 @@ async def test_pipeline(
|
|||
)
|
||||
)
|
||||
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_COMMAND
|
||||
assert satellite.state == AssistSatelliteState.LISTENING
|
||||
|
||||
# Fake STT result
|
||||
event_callback(
|
||||
|
@ -345,7 +345,7 @@ async def test_pipeline(
|
|||
satellite.transport = Mock()
|
||||
|
||||
satellite.connection_made(satellite.transport)
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
# Ensure audio queue is cleared before pipeline starts
|
||||
satellite._audio_queue.put_nowait(bad_chunk)
|
||||
|
@ -370,7 +370,7 @@ async def test_pipeline(
|
|||
await done.wait()
|
||||
|
||||
# Finished speaking
|
||||
assert satellite.state == AssistSatelliteState.LISTENING_WAKE_WORD
|
||||
assert satellite.state == AssistSatelliteState.IDLE
|
||||
|
||||
|
||||
async def test_stt_stream_timeout(
|
||||
|
|
Loading…
Reference in New Issue