2023-04-12 01:53:24 +02:00
Voice Assistant
===============
.. seo ::
:description: Instructions for setting up a Voice Assistant in ESPHome.
:image: voice-assistant.svg
2023-06-02 17:59:10 +02:00
ESPHome devices with a microphone are able to stream the audio to Home Assistant and be processed there by `assist <https://www.home-assistant.io/voice_control/> `__ .
2023-04-12 01:53:24 +02:00
.. note ::
Voice Assistant requires Home Assistant 2023.5 or later.
2023-10-27 00:29:59 +02:00
.. warning ::
Audio and voice components consume a significant amount of resources (RAM, CPU) on the device.
2023-11-27 21:57:51 +01:00
2023-10-27 00:29:59 +02:00
**Crashes are likely to occur** if you include too many additional components in your device's
configuration. In particular, Bluetooth/BLE components are known to cause issues when used in
combination with Voice Assistant and/or other audio components.
2023-04-12 01:53:24 +02:00
Configuration:
--------------
.. code-block :: yaml
microphone:
- platform: ...
id: mic_id
voice_assistant:
microphone: mic_id
2023-05-08 01:02:19 +02:00
- **microphone** (**Required** , :ref: `config-id` ): The :doc: `microphone </components/microphone/index>` to use for input.
- **speaker** (*Optional* , :ref: `config-id` ): The :doc: `speaker </components/speaker/index>` to use to output the response.
2023-05-31 06:30:56 +02:00
Cannot be used with `` media_player `` below.
- **media_player** (*Optional* , :ref: `config-id` ): The :doc: `media_player </components/media_player/index>` to use
to output the response. Cannot be used with `` speaker `` above.
2023-10-10 08:52:46 +02:00
- **use_wake_word** (*Optional* , boolean): Enable wake word on the assist pipeline. Defaults to `` false `` .
2023-11-16 04:29:58 +01:00
- **on_intent_start** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when intent processing starts.
- **on_intent_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when intent processing ends.
2023-05-31 06:30:56 +02:00
- **on_listening** (*Optional* , :ref: `Automation <automation>` ): An automation to
2023-10-10 08:52:46 +02:00
perform when the voice assistant microphone starts listening.
2023-04-17 04:57:41 +02:00
- **on_start** (*Optional* , :ref: `Automation <automation>` ): An automation to
2023-10-10 08:52:46 +02:00
perform when the assist pipeline is started.
- **on_wake_word_detected** (*Optional* , :ref: `Automation <automation>` ): An automation
to perform when the assist pipeline has detected a wake word.
2023-04-17 04:57:41 +02:00
- **on_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant is finished all tasks.
- **on_stt_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant has finished speech-to-text. The resulting text is
available to automations as the variable `` x `` .
2023-11-16 04:29:58 +01:00
- **on_stt_vad_start** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when voice activity
detection starts speech-to-text processing.
- **on_stt_vad_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when voice activity
detection ends speech-to-text processing.
2023-04-17 04:57:41 +02:00
- **on_tts_start** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant has started text-to-speech. The text to be spoken is
available to automations as the variable `` x `` .
- **on_tts_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant has finished text-to-speech. A URL containing the audio response
is available to automations as the variable `` x `` .
2023-11-21 22:09:18 +01:00
- **on_tts_stream_start** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when audio stream
(voice response) playback starts. Requires `` speaker `` to be configured.
- **on_tts_stream_end** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when audio stream
(voice response) playback ends. Requires `` speaker `` to be configured.
2024-02-20 22:38:28 +01:00
- **on_idle** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant is idle (no other actions/states are in progress).
2023-04-17 04:57:41 +02:00
- **on_error** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when the voice assistant has encountered an error. The error code and message are available to
automations as the variables `` code `` and `` message `` .
2023-04-12 01:53:24 +02:00
2023-10-30 23:16:48 +01:00
- **on_client_connected** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when Home Assistant has connected and is waiting for Voice Assistant commands.
- **on_client_disconnected** (*Optional* , :ref: `Automation <automation>` ): An automation to perform
when Home Assistant disconnects from the Voice Assistant.
2023-10-10 08:52:46 +02:00
- **noise_suppression_level** (*Optional* , integer): The noise suppression level to apply to the assist pipeline.
Between 0 and 4 inclusive. Defaults to 0 (disabled).
- **auto_gain** (*Optional* , dBFS): Auto gain level to apply to the assist pipeline.
Between 0dBFS and 31dBFS inclusive. Defaults to 0 (disabled).
- **volume_multiplier** (*Optional* , float): Volume multiplier to apply to the assist pipeline.
Must be larger than 0. Defaults to 1 (disabled).
2024-05-30 03:09:23 +02:00
- **on_timer_started** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when a voice assistant
timer has started. The timer is available as `` timer `` of type :apistruct: `voice_assistant::Timer` .
- **on_timer_finished** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when a voice assistant
timer has finished. The timer is available as `` timer `` of type :apistruct: `voice_assistant::Timer` .
- **on_timer_cancelled** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when a voice assistant
timer has been cancelled. The timer is available as `` timer `` of type :apistruct: `voice_assistant::Timer` .
- **on_timer_updated** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when a voice assistant
timer has been updated (paused/resumed/duration changed). The timer is available as `` timer `` of type :apistruct: `voice_assistant::Timer` .
- **on_timer_tick** (*Optional* , :ref: `Automation <automation>` ): An automation to perform when the voice assistant timers
tick is triggered.
This is called every **1 second** while there are timers on this device.
The timers are available as `` timers `` which is a `` std::vector `` (array) of type :apistruct: `voice_assistant::Timer` .
2023-04-12 01:53:24 +02:00
.. _voice_assistant-actions:
Voice Assistant Actions
-----------------------
The following actions are available for use in automations:
2023-10-10 08:52:46 +02:00
`` voice_assistant.start ``
^^^^^^^^^^^^^^^^^^^^^^^^^
Listens for one voice command then stops.
Configuration variables:
- **silence_detection** (*Optional* , boolean): Enable silence detection. Defaults to `` true `` .
2024-03-05 19:41:24 +01:00
- **wake_word** (*Optional* , string): The wake word that was used to trigger the voice assistant
when using on-device wake word such as :doc: `/components/micro_wake_word` .
2023-10-10 08:52:46 +02:00
Call `` voice_assistant.stop `` to signal the end of the voice command if `` silence_detection `` is set to `` false `` .
`` voice_assistant.start_continuous ``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Start listening for voice commands. This will start listening again after
the response audio has finished playing. Some errors will stop the cycle.
Call `` voice_assistant.stop `` to stop the cycle.
`` voice_assistant.stop ``
^^^^^^^^^^^^^^^^^^^^^^^^
Stop listening for voice commands.
2023-04-12 01:53:24 +02:00
2023-05-31 06:30:56 +02:00
Voice Assistant Conditions
--------------------------
The following conditions are available for use in automations:
- `` voice_assistant.is_running `` - Returns true if the voice assistant is currently running.
2023-11-27 21:57:51 +01:00
- `` voice_assistant.connected `` - Returns true if the voice assistant is currently connected to Home Assistant.
2023-04-12 01:53:24 +02:00
2023-10-10 08:52:46 +02:00
Wake word detection
-------------------
See our `example YAML files on GitHub <https://github.com/esphome/firmware/blob/main/voice-assistant/m5stack-atom-echo.yaml> `__ for continuous wake word detection.
2023-04-12 01:53:24 +02:00
Push to Talk
------------
Here is an example offering Push to Talk with a :doc: `/components/binary_sensor/index` .
.. code-block :: yaml
voice_assistant:
2023-05-31 06:30:56 +02:00
microphone: ...
speaker: ...
2023-04-12 01:53:24 +02:00
binary_sensor:
- platform: gpio
pin: ...
on_press:
- voice_assistant.start:
2023-10-10 08:52:46 +02:00
silence_detection: false
2023-04-12 01:53:24 +02:00
on_release:
- voice_assistant.stop:
2023-05-31 06:30:56 +02:00
Click to Converse
-----------------
.. code-block :: yaml
voice_assistant:
microphone: ...
speaker: ...
binary_sensor:
- platform: gpio
pin: ...
on_click:
- if:
condition: voice_assistant.is_running
then:
- voice_assistant.stop:
else:
- voice_assistant.start_continuous:
2023-04-12 01:53:24 +02:00
See Also
--------
- :doc: `microphone/index`
- :apiref: `voice_assistant/voice_assistant.h`
- :ghedit: `Edit`