This
Mdns doesn’t give IP maybe?
What IP is used for voice command responses?
This
Mdns doesn’t give IP maybe?
What IP is used for voice command responses?
Where is the IP for Mdns given?
IP adess is the local adess from HA.
It’s not sending an IP.
Is is sending that url in the error message.
Voice assistant send the Ip or url from HA >> settings >> system >> network >> local network
Announcements use the same. I am not sure how you sent the media but likely it may be using same. It should resolve on your network but maybe not.
Devices send mdns IP as broadcast on network.
Thank you for your work on this!
It seems like there are some breaking changes with more recent version of ESPHome that are causing issues (I’m on 2026.03.01)
For example, others reported the deprecated “seconds” in timers from an earlier 2026 release, but more recently API updates that cause compiling errors related to the API call to send_message seem to be preventing me from compiling.
I’d really love to get this device working as a voice satellite in ESP home.
Wondering if anyone has had success with getting this to work after the 2026.03.01 release?
Here’s the error I’m getting when attempting to compile:
Compiling .pioenvs/esp32-audio-s3/src/esphome/components/voice_assistant/voice_assistant.cpp.o
src/esphome/components/voice_assistant/voice_assistant.cpp: In member function 'virtual void esphome::voice_assistant::VoiceAssistant::loop()':
src/esphome/components/voice_assistant/voice_assistant.cpp:255:43: error: no matching function for call to 'esphome::api::APIConnection::send_message(esphome::api::VoiceAssistantRequest&, const uint8_t&)'
255 | !this->api_client_->send_message(msg, api::VoiceAssistantRequest::MESSAGE_TYPE)) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/esphome/components/voice_assistant/voice_assistant.h:12,
from src/esphome/components/voice_assistant/voice_assistant.cpp:1:
src/esphome/components/api/api_connection.h:295:29: note: candidate: 'template<class T> bool esphome::api::APIConnection::send_message(const T&)'
295 | template<typename T> bool send_message(const T &msg) {
| ^~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate expects 1 argument, 2 provided
src/esphome/components/voice_assistant/voice_assistant.cpp:278:42: error: no matching function for call to 'esphome::api::APIConnection::send_message(esphome::api::VoiceAssistantAudio&, const uint8_t&)'
278 | this->api_client_->send_message(msg, api::VoiceAssistantAudio::MESSAGE_TYPE);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate: 'template<class T> bool esphome::api::APIConnection::send_message(const T&)'
295 | template<typename T> bool send_message(const T &msg) {
| ^~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate expects 1 argument, 2 provided
src/esphome/components/voice_assistant/voice_assistant.cpp:357:42: error: no matching function for call to 'esphome::api::APIConnection::send_message(esphome::api::VoiceAssistantAnnounceFinished&, const uint8_t&)'
357 | this->api_client_->send_message(msg, api::VoiceAssistantAnnounceFinished::MESSAGE_TYPE);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate: 'template<class T> bool esphome::api::APIConnection::send_message(const T&)'
295 | template<typename T> bool send_message(const T &msg) {
| ^~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate expects 1 argument, 2 provided
In file included from src/esphome/core/component.h:10,
from src/esphome/core/automation.h:3,
from src/esphome/components/voice_assistant/voice_assistant.h:7:
src/esphome/components/voice_assistant/voice_assistant.cpp: In member function 'void esphome::voice_assistant::VoiceAssistant::client_subscription(esphome::api::APIConnection*, bool)':
src/esphome/components/voice_assistant/voice_assistant.cpp:437:64: error: 'class esphome::api::APIConnection' has no member named 'get_peername'; did you mean 'get_peername_to'?
437 | this->api_client_->get_name(), this->api_client_->get_peername(), client->get_name(),
| ^~~~~~~~~~~~
src/esphome/core/log.h:137:100: note: in definition of macro 'esph_log_e'
137 | ::esphome::esp_log_printf_(ESPHOME_LOG_LEVEL_ERROR, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
| ^~~~~~~~~~~
src/esphome/components/voice_assistant/voice_assistant.cpp:433:5: note: in expansion of macro 'ESP_LOGE'
433 | ESP_LOGE(TAG,
| ^~~~~~~~
src/esphome/components/voice_assistant/voice_assistant.cpp:438:22: error: 'class esphome::api::APIConnection' has no member named 'get_peername'; did you mean 'get_peername_to'?
438 | client->get_peername());
| ^~~~~~~~~~~~
src/esphome/core/log.h:137:100: note: in definition of macro 'esph_log_e'
137 | ::esphome::esp_log_printf_(ESPHOME_LOG_LEVEL_ERROR, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
| ^~~~~~~~~~~
src/esphome/components/voice_assistant/voice_assistant.cpp:433:5: note: in expansion of macro 'ESP_LOGE'
433 | ESP_LOGE(TAG,
| ^~~~~~~~
src/esphome/components/voice_assistant/voice_assistant.cpp: In member function 'void esphome::voice_assistant::VoiceAssistant::signal_stop_()':
src/esphome/components/voice_assistant/voice_assistant.cpp:613:34: error: no matching function for call to 'esphome::api::APIConnection::send_message(esphome::api::VoiceAssistantRequest&, const uint8_t&)'
613 | this->api_client_->send_message(msg, api::VoiceAssistantRequest::MESSAGE_TYPE);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate: 'template<class T> bool esphome::api::APIConnection::send_message(const T&)'
295 | template<typename T> bool send_message(const T &msg) {
| ^~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate expects 1 argument, 2 provided
src/esphome/components/voice_assistant/voice_assistant.cpp: In lambda function:
src/esphome/components/voice_assistant/voice_assistant.cpp:623:36: error: no matching function for call to 'esphome::api::APIConnection::send_message(esphome::api::VoiceAssistantAnnounceFinished&, const uint8_t&)'
623 | this->api_client_->send_message(msg, api::VoiceAssistantAnnounceFinished::MESSAGE_TYPE);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate: 'template<class T> bool esphome::api::APIConnection::send_message(const T&)'
295 | template<typename T> bool send_message(const T &msg) {
| ^~~~~~~~~~~~
src/esphome/components/api/api_connection.h:295:29: note: candidate expects 1 argument, 2 provided
*** [.pioenvs/esp32-audio-s3/src/esphome/components/voice_assistant/voice_assistant.cpp.o] Error 1
try clean build.
I use the external component but a different yaml. mine built without issue with 2026.3.1
Text
it will compile but I for the life of me can not get the mic to work i tried asking AI and Claude admitted it had no idea either, the writing was a bear with new 6.3.3 syntax change tried to use the native drivers a. Any have any luck or tips and tricks? I know they feed from the same bus but the new symtax is not allowing in ESP home to write a double path, if you look at the above we tried the “repo” that in but lost working sound timing
substitutions:
device_name: ai-voice
friendly_name: AI Voice
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
on_boot:
- priority: 600.0
then:
- switch.turn_on: main_power_rail
- delay: 100ms
- switch.turn_on: mic_power_enable
- switch.turn_on: speaker_amp_enable
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
framework:
type: esp-idf
psram:
mode: octal
speed: 80MHz
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_esp32-audio-s3
ota:
- platform: esphome
password: !secret ota_password
logger:
level: DEBUG
i2c:
- id: bus_a
sda: GPIO11
scl: GPIO10
scan: true
tca9555:
- id: ioexp
address: 0x20
# --- AUDIO BUS ---
# Removed external_components as ES7210 is now built-in
i2s_audio:
- id: i2s_bus
i2s_lrclk_pin: 14
i2s_bclk_pin: 13
i2s_mclk_pin: 12
audio_adc:
- platform: es7210
id: es7210_adc
i2c_id: bus_a
address: 0x40
# The toddler/lab tech asked for [mic_gain], and ES7210 uses 'DB'
mic_gain: 30db
audio_dac:
- platform: es8311
id: dac_speaker
i2c_id: bus_a
address: 0x18
use_mclk: true
# --- MICROPHONE ---
microphone:
- platform: i2s_audio
id: board_mic
i2s_audio_id: i2s_bus
i2s_din_pin: 15
adc_type: external
pdm: false
sample_rate: 16000
# --- SPEAKER ---
speaker:
- platform: i2s_audio
id: board_speaker
i2s_audio_id: i2s_bus
i2s_dout_pin: 16
dac_type: external
sample_rate: 16000
# --- MEDIA PLAYER ---
media_player:
- platform: speaker
id: external_media_player
name: "JARVIS Speaker"
# The 'speaker' id goes INSIDE this block
announcement_pipeline:
speaker: board_speaker
volume_min: 0.1
volume_max: 1.0
# --- VOICE ASSISTANT ---
voice_assistant:
id: va
microphone: board_mic
speaker: board_speaker
use_wake_word: true
noise_suppression_level: 2
auto_gain: 31dBFS
# This is the "Megaphone" for the AI - it replaces the filter we tried
volume_multiplier: 12.0
on_listening:
- light.turn_on:
id: led_ring
brightness: 100%
red: 0%
green: 0%
blue: 100%
on_stt_end:
- light.turn_on:
id: led_ring
brightness: 100%
red: 100%
green: 100%
blue: 0%
on_tts_start:
- light.turn_on:
id: led_ring
brightness: 100%
red: 0%
green: 100%
blue: 0%
on_end:
- light.turn_off: led_ring
# --- HARDWARE CONTROLS ---
switch:
- platform: gpio
name: "Speaker Amp Enable"
pin: {tca9555: ioexp, number: 8, mode: OUTPUT}
id: speaker_amp_enable
restore_mode: ALWAYS_ON
- platform: gpio
name: "Mic Power Enable"
pin: {tca9555: ioexp, number: 3, mode: OUTPUT}
id: mic_power_enable
restore_mode: ALWAYS_ON
- platform: gpio
name: "Main Audio Power Rail"
pin: {tca9555: ioexp, number: 4, mode: OUTPUT}
id: main_power_rail
restore_mode: ALWAYS_ON
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: true
name: "JARVIS Button"
id: jarvis_button
on_press:
- logger.log: "Button Pressed! Starting Voice Assistant..."
- voice_assistant.start:
on_release:
- logger.log: "Button Released!"
light:
- platform: esp32_rmt_led_strip
name: "JARVIS LED Ring"
id: led_ring
pin: GPIO38
num_leds: 7
chipset: WS2812
rgb_order: GRB
same problem here. been struggling to figure out how to fix it. I also get the same errors with GitHub - MarcoFre/ESP32-S3-AI-Smart-Speaker: Home Assistant - Voice Assistant for Waveshare ESP32-S3 AI Smart Speaker · GitHub
![]()
[16:34:16.861][D][micro_wake_word:378]: State changed from STARTING to DETECTING_WAKE_WORD
[16:34:16.862][D][ring_buffer:034][mww]: Created ring buffer with size 3840
[16:34:16.881]Failed to resize buffer. Requested: 33488, available 20472, missing: 13016
[16:34:16.884][E][micro_wake_word:061][mww]: Failed to allocate tensors for the streaming model
[16:34:16.886]Failed to resize buffer. Requested: 17088, available 9380, missing: 7708
[16:34:16.888][E][micro_wake_word:252]: Encountered an error while performing an inference
[16:34:16.888][D][micro_wake_word:274]: Inference task is stopping, deallocating buffers
[16:34:16.890][E][micro_wake_word:061][mww]: Failed to allocate tensors for the streaming model
[16:34:16.902][D][micro_wake_word:279]: Inference task is finished, freeing task resources
[16:34:16.903][D][micro_wake_word:378]: State changed from DETECTING_WAKE_WORD to STOPPED
I had the same mic issue and found the solution here:
basically, just add this part to your yaml:
external_components:
- source: github://pr#15628
components: [micro_wake_word]
refresh: 1h
this will pin esp-nn version to 1.2.1, since newer versions require a larger tensor arena on an ESP32-S3, causing micro_wake_word to fail to start.