5#ifdef USE_VOICE_ASSISTANT
16#ifdef USE_MEDIA_PLAYER
19#ifdef USE_MICRO_WAKE_WORD
34static const uint32_t LEGACY_INITIAL_VERSION = 1;
35static const uint32_t LEGACY_SPEAKER_SUPPORT = 2;
78 const char *
to_str(std::span<char, TO_STR_BUFFER_SIZE> buffer)
const {
79 snprintf(buffer.data(), buffer.size(),
80 "Timer(id=%s, name=%s, total_seconds=%" PRIu32
", seconds_left=%" PRIu32
", is_active=%s)",
81 this->id.c_str(), this->name.c_str(), this->total_seconds, this->seconds_left, YESNO(this->is_active));
85 ESPDEPRECATED(
"Use to_str() instead. Removed in 2026.8.0",
"2026.2.0")
86 std::
string to_string()
const {
88 return this->
to_str(buffer);
104#ifdef USE_MEDIA_PLAYER
117 void loop()
override;
118 void setup()
override;
126#ifdef USE_MICRO_WAKE_WORD
135#ifdef USE_MEDIA_PLAYER
145 return LEGACY_SPEAKER_SUPPORT;
148 return LEGACY_INITIAL_VERSION;
168#ifdef USE_MEDIA_PLAYER
253 std::unique_ptr<socket::Socket>
socket_ =
nullptr;
302#ifdef USE_MEDIA_PLAYER
351#ifdef USE_MICRO_WAKE_WORD
357 TEMPLATABLE_VALUE(std::string, wake_word);
360 void play(
const Ts &...
x)
override {
361 this->
parent_->set_wake_word(this->wake_word_.value(
x...));
373 void play(
const Ts &...
x)
override { this->
parent_->request_start(
true,
true); }
388 bool check(
const Ts &...
x)
override {
return this->
parent_->get_api_connection() !=
nullptr; }
Base class for all automation conditions.
Helper class to easily give an object a parent of type T.
bool check(const Ts &...x) override
bool check(const Ts &...x) override
void play(const Ts &...x) override
void set_silence_detection(bool silence_detection)
void play(const Ts &...x) override
void play(const Ts &...x) override
Trigger intent_end_trigger_
std::unique_ptr< socket::Socket > socket_
Trigger< Timer > * get_timer_started_trigger()
const Configuration & get_configuration()
void set_conversation_timeout(uint32_t conversation_timeout)
size_t speaker_buffer_size_
bool started_streaming_tts_
std::string tts_response_url_
microphone::MicrophoneSource * mic_source2_
bool wait_for_stream_end_
Trigger< std::string > * get_stt_end_trigger()
size_t speaker_buffer_index_
uint32_t get_legacy_version() const
Trigger intent_start_trigger_
Trigger< std::string > * get_intent_progress_trigger()
void on_timer_event(const api::VoiceAssistantTimerEventResponse &msg)
Trigger * get_wake_word_detected_trigger()
Trigger * get_stt_vad_end_trigger()
Trigger tts_stream_start_trigger_
Trigger client_connected_trigger_
Trigger< Timer > timer_cancelled_trigger_
std::vector< Timer > timers_
void on_audio(const api::VoiceAssistantAudio &msg)
Trigger * get_client_disconnected_trigger()
Trigger< std::string > * get_tts_end_trigger()
Trigger< Timer > * get_timer_updated_trigger()
std::unique_ptr< audio::RingBufferAudioSource > audio_source_
const std::vector< Timer > & get_timers() const
std::weak_ptr< ring_buffer::RingBuffer > ring_buffer2_
Trigger * get_end_trigger()
std::weak_ptr< ring_buffer::RingBuffer > ring_buffer_
media_player::MediaPlayer * media_player_
float get_setup_priority() const override
Trigger wake_word_detected_trigger_
void set_state_(State state)
uint8_t * speaker_buffer_
Trigger stt_vad_end_trigger_
void set_media_player(media_player::MediaPlayer *media_player)
void client_subscription(api::APIConnection *client, bool subscribe)
Trigger< Timer > timer_started_trigger_
Trigger * get_client_connected_trigger()
Trigger< Timer > * get_timer_cancelled_trigger()
MediaPlayerResponseState media_player_response_state_
void deallocate_buffers_()
bool is_continuous() const
Trigger listening_trigger_
Trigger * get_stt_vad_start_trigger()
Trigger * get_tts_stream_end_trigger()
void set_continuous(bool continuous)
uint8_t noise_suppression_level_
void on_event(const api::VoiceAssistantEventResponse &msg)
Trigger< std::string, std::string > error_trigger_
Trigger * get_intent_end_trigger()
Trigger< std::string > stt_end_trigger_
uint32_t conversation_timeout_
Trigger< Timer > * get_timer_finished_trigger()
Trigger< const std::vector< Timer > & > timer_tick_trigger_
uint32_t audio_channel_stall_start_
Trigger< std::string > intent_progress_trigger_
void set_auto_gain(uint8_t auto_gain)
void set_microphone_source2(microphone::MicrophoneSource *mic_source2)
void on_announce(const api::VoiceAssistantAnnounceRequest &msg)
void request_start(bool continuous, bool silence_detection)
Trigger< std::string > tts_start_trigger_
void set_speaker(speaker::Speaker *speaker)
api::APIConnection * api_client_
Trigger< std::string > * get_tts_start_trigger()
api::APIConnection * get_api_connection() const
Trigger< std::string > tts_end_trigger_
void set_has_timers(bool has_timers)
void set_microphone_source(microphone::MicrophoneSource *mic_source)
struct sockaddr_storage dest_addr_
uint32_t get_feature_flags() const
Trigger * get_listening_trigger()
speaker::Speaker * speaker_
Trigger< Timer > timer_updated_trigger_
void handle_channel_stall_(size_t available, size_t available2)
std::unique_ptr< audio::RingBufferAudioSource > audio_source2_
Trigger * get_idle_trigger()
void set_wake_word(const std::string &wake_word)
void set_micro_wake_word(micro_wake_word::MicroWakeWord *mww)
Trigger * get_start_trigger()
Trigger tts_stream_end_trigger_
Trigger * get_intent_start_trigger()
void set_volume_multiplier(float volume_multiplier)
Trigger stt_vad_start_trigger_
void start_playback_timeout_()
void reset_conversation_id()
std::string conversation_id_
microphone::MicrophoneSource * mic_source_
micro_wake_word::MicroWakeWord * micro_wake_word_
Trigger< std::string, std::string > * get_error_trigger()
void set_noise_suppression_level(uint8_t noise_suppression_level)
void set_use_wake_word(bool use_wake_word)
size_t speaker_bytes_received_
bool continue_conversation_
void on_set_configuration(const std::vector< std::string > &active_wake_words)
Trigger< const std::vector< Timer > & > * get_timer_tick_trigger()
Trigger< Timer > timer_finished_trigger_
Trigger client_disconnected_trigger_
Trigger * get_tts_stream_start_trigger()
@ FEATURE_MULTI_CHANNEL_AUDIO
@ FEATURE_START_CONVERSATION
@ FEATURE_VOICE_ASSISTANT
VoiceAssistant * global_voice_assistant
ESPDEPRECATED("Use LightState::gamma_correct_lut() instead. Removed in 2026.9.0.", "2026.3.0") float gamma_correct(float value
Applies gamma correction of gamma to value.
std::vector< WakeWord > available_wake_words
std::vector< std::string > active_wake_words
uint32_t max_active_wake_words
static constexpr size_t TO_STR_BUFFER_SIZE
Buffer size for to_str() - sufficient for typical timer names.
const char * to_str(std::span< char, TO_STR_BUFFER_SIZE > buffer) const
Format to buffer, returns pointer to buffer (may truncate long names)
std::vector< std::string > trained_languages