diff --git a/esphome/components/voice_assistant/__init__.py b/esphome/components/voice_assistant/__init__.py index 2f193ebb4e..14c036de8e 100644 --- a/esphome/components/voice_assistant/__init__.py +++ b/esphome/components/voice_assistant/__init__.py @@ -59,12 +59,6 @@ MAX_MICROPHONE_SOURCES = 2 voice_assistant_ns = cg.esphome_ns.namespace("voice_assistant") VoiceAssistant = voice_assistant_ns.class_("VoiceAssistant", cg.Component) -IsRunningCondition = voice_assistant_ns.class_( - "IsRunningCondition", automation.Condition, cg.Parented.template(VoiceAssistant) -) -ConnectedCondition = voice_assistant_ns.class_( - "ConnectedCondition", automation.Condition, cg.Parented.template(VoiceAssistant) -) Timer = voice_assistant_ns.struct("Timer") @@ -421,15 +415,14 @@ automation.register_apply_action( ) -automation.register_parented_condition( +automation.register_apply_condition( "voice_assistant.is_running", - IsRunningCondition, VOICE_ASSISTANT_ACTION_SCHEMA, + "is_running_or_continuous()", ) - -automation.register_parented_condition( +automation.register_apply_condition( "voice_assistant.connected", - ConnectedCondition, VOICE_ASSISTANT_ACTION_SCHEMA, + "get_api_connection() != nullptr", ) diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index 88ddb2066a..e99ee07099 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -182,6 +182,8 @@ class VoiceAssistant final : public Component { bool is_running() const { return this->state_ != State::IDLE; } void set_continuous(bool continuous) { this->continuous_ = continuous; } bool is_continuous() const { return this->continuous_; } + /// The voice_assistant.is_running condition: a pipeline is running or continuous mode keeps one coming. + bool is_running_or_continuous() const { return this->is_running() || this->is_continuous(); } void set_use_wake_word(bool use_wake_word) { this->use_wake_word_ = use_wake_word; } @@ -347,16 +349,6 @@ class VoiceAssistant final : public Component { #endif }; -template class IsRunningCondition final : public Condition, public Parented { - public: - bool check(const Ts &...x) override { return this->parent_->is_running() || this->parent_->is_continuous(); } -}; - -template class ConnectedCondition final : public Condition, public Parented { - public: - bool check(const Ts &...x) override { return this->parent_->get_api_connection() != nullptr; } -}; - extern VoiceAssistant *global_voice_assistant; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) } // namespace esphome::voice_assistant diff --git a/tests/components/voice_assistant/common-actions.yaml b/tests/components/voice_assistant/common-actions.yaml new file mode 100644 index 0000000000..e529b62ca7 --- /dev/null +++ b/tests/components/voice_assistant/common-actions.yaml @@ -0,0 +1,14 @@ +button: + - platform: template + name: Voice assistant state + on_press: + - if: + condition: + voice_assistant.is_running: + then: + - logger.log: Running + - if: + condition: + voice_assistant.connected: + then: + - logger.log: Connected diff --git a/tests/components/voice_assistant/test-actions.esp32-idf.yaml b/tests/components/voice_assistant/test-actions.esp32-idf.yaml new file mode 100644 index 0000000000..7cd9a5c355 --- /dev/null +++ b/tests/components/voice_assistant/test-actions.esp32-idf.yaml @@ -0,0 +1,9 @@ +substitutions: + i2s_din_pin: GPIO34 + i2s_din_pin2: GPIO35 + i2s_dout_pin: GPIO32 + +packages: + i2s_audio: !include ../../test_build_components/common/i2s_audio/esp32-idf.yaml + voice_assistant: !include common-idf.yaml + actions: !include common-actions.yaml