mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-03 08:31:47 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
			2024.9.0b3
			...
			2024.9.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6fde5e0fed | ||
| 
						 | 
					34229af38a | ||
| 
						 | 
					3744c7876b | ||
| 
						 | 
					a930b377b0 | ||
| 
						 | 
					571c0eb827 | ||
| 
						 | 
					749f664330 | ||
| 
						 | 
					f87d9be60d | 
@@ -62,6 +62,8 @@ service APIConnection {
 | 
			
		||||
  rpc unsubscribe_bluetooth_le_advertisements(UnsubscribeBluetoothLEAdvertisementsRequest) returns (void) {}
 | 
			
		||||
 | 
			
		||||
  rpc subscribe_voice_assistant(SubscribeVoiceAssistantRequest) returns (void) {}
 | 
			
		||||
  rpc voice_assistant_get_configuration(VoiceAssistantConfigurationRequest) returns (VoiceAssistantConfigurationResponse) {}
 | 
			
		||||
  rpc voice_assistant_set_configuration(VoiceAssistantSetConfiguration) returns (void) {}
 | 
			
		||||
 | 
			
		||||
  rpc alarm_control_panel_command (AlarmControlPanelCommandRequest) returns (void) {}
 | 
			
		||||
}
 | 
			
		||||
@@ -1571,6 +1573,36 @@ message VoiceAssistantAnnounceFinished {
 | 
			
		||||
  bool success = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message VoiceAssistantWakeWord {
 | 
			
		||||
  string id = 1;
 | 
			
		||||
  string wake_word = 2;
 | 
			
		||||
  repeated string trained_languages = 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message VoiceAssistantConfigurationRequest {
 | 
			
		||||
  option (id) = 121;
 | 
			
		||||
  option (source) = SOURCE_CLIENT;
 | 
			
		||||
  option (ifdef) = "USE_VOICE_ASSISTANT";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message VoiceAssistantConfigurationResponse {
 | 
			
		||||
  option (id) = 122;
 | 
			
		||||
  option (source) = SOURCE_SERVER;
 | 
			
		||||
  option (ifdef) = "USE_VOICE_ASSISTANT";
 | 
			
		||||
 | 
			
		||||
  repeated VoiceAssistantWakeWord available_wake_words = 1;
 | 
			
		||||
  repeated string active_wake_words = 2;
 | 
			
		||||
  uint32 max_active_wake_words = 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message VoiceAssistantSetConfiguration {
 | 
			
		||||
  option (id) = 123;
 | 
			
		||||
  option (source) = SOURCE_CLIENT;
 | 
			
		||||
  option (ifdef) = "USE_VOICE_ASSISTANT";
 | 
			
		||||
 | 
			
		||||
  repeated string active_wake_words = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ==================== ALARM CONTROL PANEL ====================
 | 
			
		||||
enum AlarmControlPanelState {
 | 
			
		||||
  ALARM_STATE_DISARMED = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -1224,6 +1224,39 @@ void APIConnection::on_voice_assistant_announce_request(const VoiceAssistantAnno
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VoiceAssistantConfigurationResponse APIConnection::voice_assistant_get_configuration(
 | 
			
		||||
    const VoiceAssistantConfigurationRequest &msg) {
 | 
			
		||||
  VoiceAssistantConfigurationResponse resp;
 | 
			
		||||
  if (voice_assistant::global_voice_assistant != nullptr) {
 | 
			
		||||
    if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
 | 
			
		||||
      return resp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto &config = voice_assistant::global_voice_assistant->get_configuration();
 | 
			
		||||
    for (auto &wake_word : config.available_wake_words) {
 | 
			
		||||
      VoiceAssistantWakeWord resp_wake_word;
 | 
			
		||||
      resp_wake_word.id = wake_word.id;
 | 
			
		||||
      resp_wake_word.wake_word = wake_word.wake_word;
 | 
			
		||||
      for (const auto &lang : wake_word.trained_languages) {
 | 
			
		||||
        resp_wake_word.trained_languages.push_back(lang);
 | 
			
		||||
      }
 | 
			
		||||
      resp.available_wake_words.push_back(std::move(resp_wake_word));
 | 
			
		||||
    }
 | 
			
		||||
    resp.max_active_wake_words = config.max_active_wake_words;
 | 
			
		||||
  }
 | 
			
		||||
  return resp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void APIConnection::voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
 | 
			
		||||
  if (voice_assistant::global_voice_assistant != nullptr) {
 | 
			
		||||
    if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    voice_assistant::global_voice_assistant->on_set_configuration(msg.active_wake_words);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
 
 | 
			
		||||
@@ -152,6 +152,9 @@ class APIConnection : public APIServerConnection {
 | 
			
		||||
  void on_voice_assistant_audio(const VoiceAssistantAudio &msg) override;
 | 
			
		||||
  void on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) override;
 | 
			
		||||
  void on_voice_assistant_announce_request(const VoiceAssistantAnnounceRequest &msg) override;
 | 
			
		||||
  VoiceAssistantConfigurationResponse voice_assistant_get_configuration(
 | 
			
		||||
      const VoiceAssistantConfigurationRequest &msg) override;
 | 
			
		||||
  void voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) override;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
 
 | 
			
		||||
@@ -7124,6 +7124,140 @@ void VoiceAssistantAnnounceFinished::dump_to(std::string &out) const {
 | 
			
		||||
  out.append("}");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
bool VoiceAssistantWakeWord::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
 | 
			
		||||
  switch (field_id) {
 | 
			
		||||
    case 1: {
 | 
			
		||||
      this->id = value.as_string();
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    case 2: {
 | 
			
		||||
      this->wake_word = value.as_string();
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    case 3: {
 | 
			
		||||
      this->trained_languages.push_back(value.as_string());
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
void VoiceAssistantWakeWord::encode(ProtoWriteBuffer buffer) const {
 | 
			
		||||
  buffer.encode_string(1, this->id);
 | 
			
		||||
  buffer.encode_string(2, this->wake_word);
 | 
			
		||||
  for (auto &it : this->trained_languages) {
 | 
			
		||||
    buffer.encode_string(3, it, true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
void VoiceAssistantWakeWord::dump_to(std::string &out) const {
 | 
			
		||||
  __attribute__((unused)) char buffer[64];
 | 
			
		||||
  out.append("VoiceAssistantWakeWord {\n");
 | 
			
		||||
  out.append("  id: ");
 | 
			
		||||
  out.append("'").append(this->id).append("'");
 | 
			
		||||
  out.append("\n");
 | 
			
		||||
 | 
			
		||||
  out.append("  wake_word: ");
 | 
			
		||||
  out.append("'").append(this->wake_word).append("'");
 | 
			
		||||
  out.append("\n");
 | 
			
		||||
 | 
			
		||||
  for (const auto &it : this->trained_languages) {
 | 
			
		||||
    out.append("  trained_languages: ");
 | 
			
		||||
    out.append("'").append(it).append("'");
 | 
			
		||||
    out.append("\n");
 | 
			
		||||
  }
 | 
			
		||||
  out.append("}");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
void VoiceAssistantConfigurationRequest::encode(ProtoWriteBuffer buffer) const {}
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
void VoiceAssistantConfigurationRequest::dump_to(std::string &out) const {
 | 
			
		||||
  out.append("VoiceAssistantConfigurationRequest {}");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
bool VoiceAssistantConfigurationResponse::decode_varint(uint32_t field_id, ProtoVarInt value) {
 | 
			
		||||
  switch (field_id) {
 | 
			
		||||
    case 3: {
 | 
			
		||||
      this->max_active_wake_words = value.as_uint32();
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
bool VoiceAssistantConfigurationResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
 | 
			
		||||
  switch (field_id) {
 | 
			
		||||
    case 1: {
 | 
			
		||||
      this->available_wake_words.push_back(value.as_message<VoiceAssistantWakeWord>());
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    case 2: {
 | 
			
		||||
      this->active_wake_words.push_back(value.as_string());
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
void VoiceAssistantConfigurationResponse::encode(ProtoWriteBuffer buffer) const {
 | 
			
		||||
  for (auto &it : this->available_wake_words) {
 | 
			
		||||
    buffer.encode_message<VoiceAssistantWakeWord>(1, it, true);
 | 
			
		||||
  }
 | 
			
		||||
  for (auto &it : this->active_wake_words) {
 | 
			
		||||
    buffer.encode_string(2, it, true);
 | 
			
		||||
  }
 | 
			
		||||
  buffer.encode_uint32(3, this->max_active_wake_words);
 | 
			
		||||
}
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
void VoiceAssistantConfigurationResponse::dump_to(std::string &out) const {
 | 
			
		||||
  __attribute__((unused)) char buffer[64];
 | 
			
		||||
  out.append("VoiceAssistantConfigurationResponse {\n");
 | 
			
		||||
  for (const auto &it : this->available_wake_words) {
 | 
			
		||||
    out.append("  available_wake_words: ");
 | 
			
		||||
    it.dump_to(out);
 | 
			
		||||
    out.append("\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (const auto &it : this->active_wake_words) {
 | 
			
		||||
    out.append("  active_wake_words: ");
 | 
			
		||||
    out.append("'").append(it).append("'");
 | 
			
		||||
    out.append("\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  out.append("  max_active_wake_words: ");
 | 
			
		||||
  sprintf(buffer, "%" PRIu32, this->max_active_wake_words);
 | 
			
		||||
  out.append(buffer);
 | 
			
		||||
  out.append("\n");
 | 
			
		||||
  out.append("}");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
bool VoiceAssistantSetConfiguration::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
 | 
			
		||||
  switch (field_id) {
 | 
			
		||||
    case 1: {
 | 
			
		||||
      this->active_wake_words.push_back(value.as_string());
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
void VoiceAssistantSetConfiguration::encode(ProtoWriteBuffer buffer) const {
 | 
			
		||||
  for (auto &it : this->active_wake_words) {
 | 
			
		||||
    buffer.encode_string(1, it, true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
void VoiceAssistantSetConfiguration::dump_to(std::string &out) const {
 | 
			
		||||
  __attribute__((unused)) char buffer[64];
 | 
			
		||||
  out.append("VoiceAssistantSetConfiguration {\n");
 | 
			
		||||
  for (const auto &it : this->active_wake_words) {
 | 
			
		||||
    out.append("  active_wake_words: ");
 | 
			
		||||
    out.append("'").append(it).append("'");
 | 
			
		||||
    out.append("\n");
 | 
			
		||||
  }
 | 
			
		||||
  out.append("}");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
bool ListEntitiesAlarmControlPanelResponse::decode_varint(uint32_t field_id, ProtoVarInt value) {
 | 
			
		||||
  switch (field_id) {
 | 
			
		||||
    case 6: {
 | 
			
		||||
 
 | 
			
		||||
@@ -1849,6 +1849,53 @@ class VoiceAssistantAnnounceFinished : public ProtoMessage {
 | 
			
		||||
 protected:
 | 
			
		||||
  bool decode_varint(uint32_t field_id, ProtoVarInt value) override;
 | 
			
		||||
};
 | 
			
		||||
class VoiceAssistantWakeWord : public ProtoMessage {
 | 
			
		||||
 public:
 | 
			
		||||
  std::string id{};
 | 
			
		||||
  std::string wake_word{};
 | 
			
		||||
  std::vector<std::string> trained_languages{};
 | 
			
		||||
  void encode(ProtoWriteBuffer buffer) const override;
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
  void dump_to(std::string &out) const override;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
 | 
			
		||||
};
 | 
			
		||||
class VoiceAssistantConfigurationRequest : public ProtoMessage {
 | 
			
		||||
 public:
 | 
			
		||||
  void encode(ProtoWriteBuffer buffer) const override;
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
  void dump_to(std::string &out) const override;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
};
 | 
			
		||||
class VoiceAssistantConfigurationResponse : public ProtoMessage {
 | 
			
		||||
 public:
 | 
			
		||||
  std::vector<VoiceAssistantWakeWord> available_wake_words{};
 | 
			
		||||
  std::vector<std::string> active_wake_words{};
 | 
			
		||||
  uint32_t max_active_wake_words{0};
 | 
			
		||||
  void encode(ProtoWriteBuffer buffer) const override;
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
  void dump_to(std::string &out) const override;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
 | 
			
		||||
  bool decode_varint(uint32_t field_id, ProtoVarInt value) override;
 | 
			
		||||
};
 | 
			
		||||
class VoiceAssistantSetConfiguration : public ProtoMessage {
 | 
			
		||||
 public:
 | 
			
		||||
  std::vector<std::string> active_wake_words{};
 | 
			
		||||
  void encode(ProtoWriteBuffer buffer) const override;
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
  void dump_to(std::string &out) const override;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override;
 | 
			
		||||
};
 | 
			
		||||
class ListEntitiesAlarmControlPanelResponse : public ProtoMessage {
 | 
			
		||||
 public:
 | 
			
		||||
  std::string object_id{};
 | 
			
		||||
 
 | 
			
		||||
@@ -496,6 +496,19 @@ bool APIServerConnectionBase::send_voice_assistant_announce_finished(const Voice
 | 
			
		||||
  return this->send_message_<VoiceAssistantAnnounceFinished>(msg, 120);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
bool APIServerConnectionBase::send_voice_assistant_configuration_response(
 | 
			
		||||
    const VoiceAssistantConfigurationResponse &msg) {
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
  ESP_LOGVV(TAG, "send_voice_assistant_configuration_response: %s", msg.dump().c_str());
 | 
			
		||||
#endif
 | 
			
		||||
  return this->send_message_<VoiceAssistantConfigurationResponse>(msg, 122);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
bool APIServerConnectionBase::send_list_entities_alarm_control_panel_response(
 | 
			
		||||
    const ListEntitiesAlarmControlPanelResponse &msg) {
 | 
			
		||||
@@ -1156,6 +1169,28 @@ bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type,
 | 
			
		||||
      ESP_LOGVV(TAG, "on_voice_assistant_announce_request: %s", msg.dump().c_str());
 | 
			
		||||
#endif
 | 
			
		||||
      this->on_voice_assistant_announce_request(msg);
 | 
			
		||||
#endif
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case 121: {
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
      VoiceAssistantConfigurationRequest msg;
 | 
			
		||||
      msg.decode(msg_data, msg_size);
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
      ESP_LOGVV(TAG, "on_voice_assistant_configuration_request: %s", msg.dump().c_str());
 | 
			
		||||
#endif
 | 
			
		||||
      this->on_voice_assistant_configuration_request(msg);
 | 
			
		||||
#endif
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case 123: {
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
      VoiceAssistantSetConfiguration msg;
 | 
			
		||||
      msg.decode(msg_data, msg_size);
 | 
			
		||||
#ifdef HAS_PROTO_MESSAGE_DUMP
 | 
			
		||||
      ESP_LOGVV(TAG, "on_voice_assistant_set_configuration: %s", msg.dump().c_str());
 | 
			
		||||
#endif
 | 
			
		||||
      this->on_voice_assistant_set_configuration(msg);
 | 
			
		||||
#endif
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1646,6 +1681,35 @@ void APIServerConnection::on_subscribe_voice_assistant_request(const SubscribeVo
 | 
			
		||||
  this->subscribe_voice_assistant(msg);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
void APIServerConnection::on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &msg) {
 | 
			
		||||
  if (!this->is_connection_setup()) {
 | 
			
		||||
    this->on_no_setup_connection();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  if (!this->is_authenticated()) {
 | 
			
		||||
    this->on_unauthenticated_access();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  VoiceAssistantConfigurationResponse ret = this->voice_assistant_get_configuration(msg);
 | 
			
		||||
  if (!this->send_voice_assistant_configuration_response(ret)) {
 | 
			
		||||
    this->on_fatal_error();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
void APIServerConnection::on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
 | 
			
		||||
  if (!this->is_connection_setup()) {
 | 
			
		||||
    this->on_no_setup_connection();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  if (!this->is_authenticated()) {
 | 
			
		||||
    this->on_unauthenticated_access();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  this->voice_assistant_set_configuration(msg);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
void APIServerConnection::on_alarm_control_panel_command_request(const AlarmControlPanelCommandRequest &msg) {
 | 
			
		||||
  if (!this->is_connection_setup()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,15 @@ class APIServerConnectionBase : public ProtoService {
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  bool send_voice_assistant_announce_finished(const VoiceAssistantAnnounceFinished &msg);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  virtual void on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &value){};
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  bool send_voice_assistant_configuration_response(const VoiceAssistantConfigurationResponse &msg);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  virtual void on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &value){};
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
  bool send_list_entities_alarm_control_panel_response(const ListEntitiesAlarmControlPanelResponse &msg);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -425,6 +434,13 @@ class APIServerConnection : public APIServerConnectionBase {
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  virtual void subscribe_voice_assistant(const SubscribeVoiceAssistantRequest &msg) = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  virtual VoiceAssistantConfigurationResponse voice_assistant_get_configuration(
 | 
			
		||||
      const VoiceAssistantConfigurationRequest &msg) = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  virtual void voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
  virtual void alarm_control_panel_command(const AlarmControlPanelCommandRequest &msg) = 0;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -526,6 +542,12 @@ class APIServerConnection : public APIServerConnectionBase {
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  void on_subscribe_voice_assistant_request(const SubscribeVoiceAssistantRequest &msg) override;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  void on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &msg) override;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
  void on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) override;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef USE_ALARM_CONTROL_PANEL
 | 
			
		||||
  void on_alarm_control_panel_command_request(const AlarmControlPanelCommandRequest &msg) override;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,18 @@ struct Timer {
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct WakeWord {
 | 
			
		||||
  std::string id;
 | 
			
		||||
  std::string wake_word;
 | 
			
		||||
  std::vector<std::string> trained_languages;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct Configuration {
 | 
			
		||||
  std::vector<WakeWord> available_wake_words;
 | 
			
		||||
  std::vector<std::string> active_wake_words;
 | 
			
		||||
  uint32_t max_active_wake_words;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class VoiceAssistant : public Component {
 | 
			
		||||
 public:
 | 
			
		||||
  void setup() override;
 | 
			
		||||
@@ -133,6 +145,8 @@ class VoiceAssistant : public Component {
 | 
			
		||||
  void on_audio(const api::VoiceAssistantAudio &msg);
 | 
			
		||||
  void on_timer_event(const api::VoiceAssistantTimerEventResponse &msg);
 | 
			
		||||
  void on_announce(const api::VoiceAssistantAnnounceRequest &msg);
 | 
			
		||||
  void on_set_configuration(const std::vector<std::string> &active_wake_words){};
 | 
			
		||||
  const Configuration &get_configuration() { return this->config_; };
 | 
			
		||||
 | 
			
		||||
  bool is_running() const { return this->state_ != State::IDLE; }
 | 
			
		||||
  void set_continuous(bool continuous) { this->continuous_ = continuous; }
 | 
			
		||||
@@ -279,6 +293,8 @@ class VoiceAssistant : public Component {
 | 
			
		||||
  AudioMode audio_mode_{AUDIO_MODE_UDP};
 | 
			
		||||
  bool udp_socket_running_{false};
 | 
			
		||||
  bool start_udp_socket_();
 | 
			
		||||
 | 
			
		||||
  Configuration config_{};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename... Ts> class StartAction : public Action<Ts...>, public Parented<VoiceAssistant> {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
"""Constants used by esphome."""
 | 
			
		||||
 | 
			
		||||
__version__ = "2024.9.0b3"
 | 
			
		||||
__version__ = "2024.9.0"
 | 
			
		||||
 | 
			
		||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
 | 
			
		||||
VALID_SUBSTITUTIONS_CHARACTERS = (
 | 
			
		||||
 
 | 
			
		||||
@@ -100,9 +100,6 @@ def valid_include(value):
 | 
			
		||||
def valid_project_name(value: str):
 | 
			
		||||
    if value.count(".") != 1:
 | 
			
		||||
        raise cv.Invalid("project name needs to have a namespace")
 | 
			
		||||
 | 
			
		||||
    value = value.replace(" ", "_")
 | 
			
		||||
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user