eamonn
(Eamonn Sullivan)
December 18, 2023, 9:27pm
1
My experiment with Voice Assistant has come to an impass. After a restart, it works great for a command or two, recognising my custom wake word (“Hey, Casper”) and doing what I ask (e.g., running my sentence-triggered automations), but stops after awhile (an hour or so). No amount of yelling gets it to turn blue until I restart again. The kids and spouse are starting to make fun of me and my attempts to get that @£$%@ white box to turn blue…
What do you all suggest I try to narrow down the issue, so I can regain my dignity and stop yelling cartoon characters at the living room wall?
Background: I use a container-based install. The relevant section of my docker-compose.yml looks like the following, and it’s composed with Home Assistant and Node Red. I just recently added --debug, which does not appear to do much.
openwakeword:
container_name: openwakeword
image: rhasspy/wyoming-openwakeword
network_mode: host
volumes:
- /media/homeassistant/home_assistant/openwakeword/custom:/custom
- /media/homeassistant/home_assistant/openwakeword/config:/config
- /media/homeassistant/home_assistant/openwakeword/data:/data
environment:
TZ: "Europe/London"
depends_on:
- homeassistant
ports:
- 10400:10400
- 10400:10400/udp
command: --debug --preload-model 'ok_nabu' --custom-model-dir /custom
restart: unless-stopped
1 Like
yalexau
(alex)
April 13, 2024, 2:34am
2
I have this issue intermittently as well, is there a way to automate waking it up periodically?
Merc
July 12, 2024, 6:33am
3
Same here, overall the little Atom Echos are doing a great job, sometimes recognising the wake word across large rooms.
However, they seem to always hang up after some time and a reset is necessary to make them work again.
What would we have to include in the config file to restart them periodically?
I tried including a switch or button in the config, to restart via an automation in Home Assistant but that led to an error.
Thanks
Merc
Just build a Wyoming satellite. They work. Youll be up and running in less than an hour.
Merc
July 12, 2024, 6:59pm
5
Thanks for the suggestion.
Since the Atom Echos are not doing a bad job, in general, I would still be interested in a solution to the issue of them “crashing” frequently. I am sure there must be a way to stop/circumvene or mitigate this.
Merc
July 13, 2024, 5:34pm
6
I have now found a way that seems to improve the stability of the Atom Echos in my setup.
Every 15 minutes I am switching the “detect wake work” off and back on 2 seconds later. Through this it seems, that the Echos do not freeze.
Ideally, I would like to trigger a restart but I cannot figure out how to make a switch or button work that would trigger the restart through an automation.
I still have to run this for a longer time to see for how long it works but so far it looks promising and is relatively easy to realize.
You can set up an automation to turn off wake word detection if there is noone in the room. Thats what I did when I had ESP32 voice assistants.
Assuming you have room presence sensors anyway…
1 Like
Merc
July 14, 2024, 1:57pm
8
Hi Rich,
Not enterily sure how or if this solves the problem but then I do not have room presence detection.
The approach I mentioned above seems to work.
Combined with a sound response to wake word detection this has improved my voice assistant setup a lot.
Cheers
Merc
yalexau
(alex)
July 20, 2024, 9:03am
9
Merc:
Every 15 minutes I am switching the “detect wake work” off and back on 2 seconds later. Through this it seems, that the Echos do not freeze.
Ideally, I would like to trigger a restart but I cannot figure out how to make a switch or button work that would trigger the restart through an automation.
You can add:
button:
- platform: restart
name: "${friendly_name} Restart"
to the YAML of the echo to create a restart button, I use this to force restarts evewry 30 minutes which helps with the voice recognition.
Merc
July 20, 2024, 11:56am
10
Ah, thanks @yalexau ,
will give that a try.
The toggling of a switch has already improved things a lot.
But this was my main goal.
Cheers
Merc
EDIT:
Hm…ok I still keep getting the error I got before when I tried to implement the start button:
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- framework-espidf @ 3.40407.0 (4.4.7)
- tool-cmake @ 3.16.4
- tool-ninja @ 1.7.1
- toolchain-esp32ulp @ 2.35.0-20220830
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.4
|-- ESPMicroSpeechFeatures @ 1.0.0
Linking .pioenvs/m5stack-atom-echo/firmware.elf
/data/cache/platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: missing --end-group; added as last command line option
/data/cache/platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pioenvs/m5stack-atom-echo/src/main.o:(.literal._Z5setupv+0xa0): undefined reference to `vtable for esphome::restart::RestartButton'
/data/cache/platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pioenvs/m5stack-atom-echo/src/main.o:(.literal._Z5setupv+0xa4): undefined reference to `vtable for esphome::restart::RestartButton'
collect2: error: ld returned 1 exit status
*** [.pioenvs/m5stack-atom-echo/firmware.elf] Error 1
========================= [FAILED] Took 28.53 seconds =========================
Any idea what I need to change to get rid of this?
EDIT:
Finally I found the answer to the issue in this thread.
I was not aware of the “clean build” option but that did the job.
I installed and setup my m5 atom echo voice assistant in HA yesterday and with the latest versions of all software, the m5 would still cease to detect the wake word after one successful attempt. Wasted hours on this but I figured out a hacky work around.
I created an automation that detects if any of my echos become idle, then I set the “Wake word engine location” to the setting it’s on already (HA), and this has resulted in a solid experience.
2 Likes
Snowball
(Joschka Rick)
March 12, 2025, 8:11am
12
This solution works perfect for me. Works all the time now .
e-raser
August 22, 2025, 10:50am
13
Indeed a good workaround as it works without the need to fully restart the ESP.
offen 09:13AM - 19 Jun 25 UTC
### The problem
Since the last two ESPHome updates, 2025.6.0 and 2025,5,2, my A… tom Echo only responds to one voice command after which it never responds again until the device is rebooted. I know it's not hung because I can press the button on the device and the log responds telling me that it's already listening
### Which device are you using?
m5stack-atom-echo
### Firmware Version
Firmware: 2025.6.0 (Jun 18 2025, 19:36:18)
### Logs
```txt
INFO ESPHome 2025.6.0
INFO Reading configuration /config/esphome/m5ae-31b338.yaml...
INFO Generating C++ source...
INFO Updating https://github.com/espressif/[email protected]
INFO Updating https://github.com/espressif/[email protected]
INFO Compiling app...
Processing m5ae-31b338 (board: m5stack-atom; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/53.03.13/platform-espressif32.zip)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- framework-espidf @ 3.50302.0 (5.3.2)
- tool-cmake @ 3.30.2
- tool-esptoolpy @ 4.8.6
- tool-mklittlefs @ 3.2.0
- tool-ninja @ 1.7.1
- tool-riscv32-esp-elf-gdb @ 14.2.0+20240403
- tool-xtensa-esp-elf-gdb @ 14.2.0+20240403
- toolchain-esp32ulp @ 2.35.0-20220830
- toolchain-xtensa-esp-elf @ 13.2.0+20240530
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.6
|-- ArduinoJson @ 6.18.5
|-- ESPMicroSpeechFeatures @ 1.1.0
|-- esp-audio-libs @ 1.1.4
Compiling .pioenvs/m5ae-31b338/src/main.cpp.o
Linking .pioenvs/m5ae-31b338/firmware.elf
RAM: [= ] 11.5% (used 37640 bytes from 327680 bytes)
Flash: [========= ] 88.5% (used 1624120 bytes from 1835008 bytes)
Building .pioenvs/m5ae-31b338/firmware.bin
Creating esp32 image...
Successfully created esp32 image.
esp32_create_combined_bin([".pioenvs/m5ae-31b338/firmware.bin"], [".pioenvs/m5ae-31b338/firmware.elf"])
SHA digest in image updated
Wrote 0x19c9a0 bytes to file /data/build/m5ae-31b338/.pioenvs/m5ae-31b338/firmware.factory.bin, ready to flash to offset 0x0
esp32_copy_ota_bin([".pioenvs/m5ae-31b338/firmware.bin"], [".pioenvs/m5ae-31b338/firmware.elf"])
========================= [SUCCESS] Took 16.98 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.1.39 port 3232...
INFO Connected to 192.168.1.39
INFO Uploading /data/build/m5ae-31b338/.pioenvs/m5ae-31b338/firmware.bin (1624480 bytes)
Uploading: [============================================================] 100% Done...
INFO Upload took 6.35 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.1.39 using esphome API
INFO Successfully resolved m5ae-31b338 @ 192.168.1.39 in 0.000s
INFO Successfully connected to m5ae-31b338 @ 192.168.1.39 in 5.142s
INFO Successful handshake with m5ae-31b338 @ 192.168.1.39 in 0.112s
[11:15:25][I][app:137]: ESPHome version 2025.6.0 compiled on Jun 19 2025, 11:14:54
[11:15:25][C][wifi:613]: WiFi:
[11:15:25][C][wifi:434]: Local MAC: [redacted]
[11:15:25][C][wifi:439]: SSID: [redacted]
[11:15:25][C][wifi:442]: IP Address: 192.168.1.39
[11:15:25][C][wifi:446]: BSSID: [redacted]
[11:15:25][C][wifi:446]: Hostname: 'm5ae-31b338'
[11:15:25][C][wifi:446]: Signal strength: -44 dB ▂▄▆█
[11:15:25][C][wifi:455]: Channel: 1
[11:15:25][C][wifi:455]: Subnet: 255.255.255.0
[11:15:25][C][wifi:455]: Gateway: 192.168.1.1
[11:15:25][C][wifi:455]: DNS1: 192.168.1.11
[11:15:25][C][wifi:455]: DNS2: 192.168.1.71
[11:15:25][D][api.connection:1570]: Home Assistant 2025.6.1 (192.168.1.18) connected
[11:15:25][C][logger:211]: Logger:
[11:15:25][C][logger:211]: Max Level: DEBUG
[11:15:25][C][logger:211]: Initial Level: DEBUG
[11:15:25][C][logger:217]: Log Baud Rate: 115200
[11:15:25][C][logger:217]: Hardware UART: UART0
[11:15:25][C][logger:224]: Task Log Buffer Size: 768
[11:15:25][C][esp32_rmt_led_strip:250]: ESP32 RMT LED Strip:
[11:15:25][C][esp32_rmt_led_strip:250]: Pin: 27
[11:15:25][C][esp32_rmt_led_strip:255]: RMT Symbols: 192
[11:15:25][C][esp32_rmt_led_strip:283]: RGB Order: GRB
[11:15:25][C][esp32_rmt_led_strip:283]: Max refresh rate: 0
[11:15:25][C][esp32_rmt_led_strip:283]: Number of LEDs: 1
[11:15:25][C][template.select:065]: Template Select 'Wake word engine location'
[11:15:25][C][template.select:066]: Update Interval: 60.0s
[11:15:25][C][template.select:069]: Optimistic: YES
[11:15:25][C][template.select:069]: Initial Option: On device
[11:15:25][C][template.select:069]: Restore Value: YES
[11:15:25][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Button'
[11:15:25][C][gpio.binary_sensor:016]: Pin: GPIO39
[11:15:25][C][light:092]: Light 'M5Stack Atom Echo 31b338'
[11:15:25][C][light:094]: Default Transition Length: 0.0s
[11:15:25][C][light:094]: Gamma Correct: 2.80
[11:15:25][C][template.switch:079]: Template Switch 'Use listen light'
[11:15:25][C][template.switch:079]: Restore Mode: restore defaults to ON
[11:15:25][C][template.switch:057]: Optimistic: YES
[11:15:25][C][template.switch:079]: Template Switch 'timer_ringing'
[11:15:25][C][template.switch:079]: Restore Mode: always OFF
[11:15:25][C][template.switch:057]: Optimistic: YES
[11:15:25][C][factory_reset.button:011]: Factory Reset Button 'Factory reset'
[11:15:25][C][factory_reset.button:011]: Icon: 'mdi:restart-alert'
[11:15:25][C][i2s_audio.microphone:083]: Microphone:
[11:15:25][C][i2s_audio.microphone:083]: Pin: 23
[11:15:25][C][i2s_audio.microphone:083]: PDM: YES
[11:15:25][C][i2s_audio.microphone:083]: DC offset correction: YES
[11:15:25][C][psram:018]: PSRAM:
[11:15:25][C][psram:022]: Available: NO
[11:15:26][C][i2s_audio.speaker:114]: Speaker:
[11:15:26][C][i2s_audio.speaker:114]: Pin: 22
[11:15:26][C][i2s_audio.speaker:114]: Buffer duration: 60
[11:15:26][C][i2s_audio.speaker:120]: Timeout: 500 ms
[11:15:26][C][i2s_audio.speaker:128]: Communication format: std
[11:15:26][C][captive_portal:089]: Captive Portal:
[11:15:26][C][esphome.ota:073]: Over-The-Air updates:
[11:15:26][C][esphome.ota:073]: Address: 192.168.1.39:3232
[11:15:26][C][esphome.ota:073]: Version: 2
[11:15:26][C][safe_mode:018]: Safe Mode:
[11:15:26][C][safe_mode:019]: Boot considered successful after 60 seconds
[11:15:26][C][safe_mode:019]: Invoke after 10 boot attempts
[11:15:26][C][safe_mode:019]: Remain for 300 seconds
[11:15:26][D][esp32.preferences:142]: Writing 2 items: 2 cached, 0 written, 0 failed
[11:15:26][C][api:182]: API Server:
[11:15:26][C][api:182]: Address: 192.168.1.39:6053
[11:15:26][C][api:187]: Using noise encryption: YES
[11:15:26][C][http_request:013]: HTTP Request:
[11:15:26][C][http_request:013]: Timeout: 4500ms
[11:15:26][C][http_request:013]: User-Agent: ESPHome/2025.6.0 (https://esphome.io)
[11:15:26][C][http_request:013]: Follow redirects: YES
[11:15:26][C][http_request:013]: Redirect limit: 3
[11:15:26][C][http_request.idf:029]: Buffer Size RX: 512
[11:15:26][C][http_request.idf:029]: Buffer Size TX: 512
[11:15:26][C][mdns:122]: mDNS:
[11:15:26][C][mdns:122]: Hostname: m5ae-31b338
[11:15:26][C][micro_wake_word:064]: microWakeWord:
[11:15:26][C][micro_wake_word:065]: models:
[11:15:26][C][micro_wake_word:014]: - Wake Word: Okay Nabu
[11:15:26][C][micro_wake_word:014]: Probability cutoff: 0.97
[11:15:26][C][micro_wake_word:014]: Sliding window size: 5
[11:15:26][C][micro_wake_word:014]: - Wake Word: Hey Mycroft
[11:15:26][C][micro_wake_word:014]: Probability cutoff: 0.95
[11:15:26][C][micro_wake_word:014]: Sliding window size: 5
[11:15:26][C][micro_wake_word:014]: - Wake Word: Hey Jarvis
[11:15:26][C][micro_wake_word:014]: Probability cutoff: 0.97
[11:15:26][C][micro_wake_word:014]: Sliding window size: 5
[11:15:26][C][micro_wake_word:022]: - VAD Model
[11:15:26][C][micro_wake_word:022]: Probability cutoff: 0.50
[11:15:26][C][micro_wake_word:022]: Sliding window size: 5
[11:15:28][D][micro_wake_word:360]: Starting wake word detection
[11:15:28][D][micro_wake_word:378]: State changed from STOPPED to STARTING
[11:15:28][D][ring_buffer:034][mww]: Created ring buffer with size 3840
[11:15:28][D][micro_wake_word:261]: Inference task has started, attempting to allocate memory for buffers
[11:15:28][D][micro_wake_word:266]: Inference task is running
[11:15:28][D][micro_wake_word:378]: State changed from STARTING to DETECTING_WAKE_WORD
[11:16:20][I][safe_mode:042]: Boot seems successful; resetting boot loop counter
[11:16:20][D][esp32.preferences:142]: Writing 1 items: 0 cached, 1 written, 0 failed
```
### Additional information
```
substitutions:
name: "m5ae-31b338"
friendly_name: M5Stack Atom Echo 31b338
packages:
base: github://esphome/wake-word-voice-assistants/m5stack-atom-echo/m5stack-atom-echo.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
api:
encryption:
key: !secret m5ae_key
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.39
subnet: 255.255.255.0
gateway: 192.168.1.1
dns1: 192.168.1.11
dns2: 192.168.1.71
domain: !secret dns_suffix
on_connect:
- delay: 5s # Gives time for improv results to be transmitted
http_request:
verify_ssl: false
micro_wake_word:
on_wake_word_detected:
then:
- media_player.speaker.play_on_device_media_file:
media_file: timer_finished_wave_file
announcement: true
- delay: 10ms
- wait_until:
- media_player.is_idle:
- speaker.is_stopped:
- voice_assistant.start:
wake_word: !lambda return wake_word;
media_player:
- id: !extend echo_media_player
on_idle:
then:
- delay: 1ms
```
I have tried removing some of the "additions" in my yaml e.g. the whole micro_wake_word section, the on_connect parameter, media_player section, but nothing helps and sometimes makes it worse and it doesn't respond at all.
does not seem to have a final solution yet so this workaround is the best option currently.