mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	Add push to talk voice assistant (#4648)
* Add push to talk voice assistant * Refactor most code into voice_assistant * Make voice_assistant the component and remove push_to_talk (can be done in yaml) * Fix component setup * Always AF_INET to match serverside * Fix microphone and media player co-existence * Format * Update codeowners * Update test file * Fix endifs * nullptr not NULL * clang-tidy * Format * fixup: Add VA event data * Generate proto * Parse and log events * Add default to switch * Fix * Add mic/va to test5
This commit is contained in:
		
							
								
								
									
										50
									
								
								esphome/components/voice_assistant/voice_assistant.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								esphome/components/voice_assistant/voice_assistant.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "esphome/core/automation.h" | ||||
| #include "esphome/core/component.h" | ||||
| #include "esphome/core/helpers.h" | ||||
|  | ||||
| #include "esphome/components/api/api_pb2.h" | ||||
| #include "esphome/components/api/api_server.h" | ||||
| #include "esphome/components/microphone/microphone.h" | ||||
| #include "esphome/components/socket/socket.h" | ||||
|  | ||||
| namespace esphome { | ||||
| namespace voice_assistant { | ||||
|  | ||||
| class VoiceAssistant : public Component { | ||||
|  public: | ||||
|   void setup() override; | ||||
|   float get_setup_priority() const override; | ||||
|   void start(struct sockaddr_storage *addr, uint16_t port); | ||||
|  | ||||
|   void set_microphone(microphone::Microphone *mic) { this->mic_ = mic; } | ||||
|  | ||||
|   void request_start(); | ||||
|   void signal_stop(); | ||||
|  | ||||
|   void on_event(const api::VoiceAssistantEventResponse &msg); | ||||
|  | ||||
|  protected: | ||||
|   std::unique_ptr<socket::Socket> socket_ = nullptr; | ||||
|   struct sockaddr_storage dest_addr_; | ||||
|  | ||||
|   microphone::Microphone *mic_{nullptr}; | ||||
|  | ||||
|   bool running_{false}; | ||||
| }; | ||||
|  | ||||
| template<typename... Ts> class StartAction : public Action<Ts...>, public Parented<VoiceAssistant> { | ||||
|  public: | ||||
|   void play(Ts... x) override { this->parent_->request_start(); } | ||||
| }; | ||||
|  | ||||
| template<typename... Ts> class StopAction : public Action<Ts...>, public Parented<VoiceAssistant> { | ||||
|  public: | ||||
|   void play(Ts... x) override { this->parent_->signal_stop(); } | ||||
| }; | ||||
|  | ||||
| extern VoiceAssistant *global_voice_assistant;  // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) | ||||
|  | ||||
| }  // namespace voice_assistant | ||||
| }  // namespace esphome | ||||
		Reference in New Issue
	
	Block a user