M5Stack Atom Echo Voice Assistant Installation is a PITA

I’ve been trying to install the latest Voice Assistant on my Atom Echo without much luck. Below are the steps I’ve followed so I’m hoping someone can point out an obvious mistake that I’m not seeing please. :slight_smile:

My HA is running 2024.7.3 in a docker container.
ESPHome is another docker container running 2024.7.1
I’m flashing the Atom Echo via USB on MacOS using Chrome connected via https to the ESPHome web interface.

  • Install Voice Assistant onto M5Stack Atom Echo from Ready-Made Projects — ESPHome
  • Installed via USB on MacOS via Chrome
  • Asks if I want to install Voice Assistant 24.7.4.1
  • Configured wifi
  • Skip Add to home assistant because this option tries to install ESP Home Integration again which I already have
  • Close popup
  • Within ESPHome web GUI, Adopt new device (having removed the previous device card)
  • Gave it a name
  • Configuration Created. Presents encryption key and the Install button
  • Clicked Install (no option to install via USB so presuming it automatically installs wirelessly) results in the following error:
INFO Successfully compiled program.
INFO Connecting to 192.168.199.160
INFO Uploading /config/.esphome/build/m5stack-atom-echo-889484/.pioenvs/m5stack-atom-echo-889484/firmware.bin (1835616 bytes)
ERROR Error binary size: Error: The OTA partition on the ESP is too small. ESPHome needs to resize this partition, please flash over USB.
  • So I click Close
  • I proceed to install via USB by clicking on the 3-dots on the M5Stack Atom Echo card and select Install
  • Choose “Plug into this computer”
  • Select the M5Stack cu-usbserial Paired device and then Connect
  • Circular animation while it Prepares installation, then Installing
  • When finished, I look at the device logs via USB and find it in a boot loop:
[20:10:05]ets Jun  8 2016 00:22:57
[20:10:05]
[20:10:05]rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[20:10:05]configsip: 188777542, SPIWP:0xee
[20:10:05]clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
[20:10:05]mode:DIO, clock div:2
[20:10:05]load:0x3fff0030,len:6652
[20:10:05]ho 0 tail 12 room 4
[20:10:05]load:0x40078000,len:15052
[20:10:05]load:0x40080400,len:3836
[20:10:05]entry 0x4008069c
[20:10:05]I (57) boot: ESP-IDF 4.4.7 2nd stage bootloader
[20:10:05]I (57) boot: compile time 18:39:07
[20:10:05]I (58) boot: Multicore bootloader
[20:10:05]I (61) boot: chip revision: v1.1
[20:10:05]I (65) boot.esp32: SPI Speed      : 40MHz
[20:10:05]I (70) boot.esp32: SPI Mode       : DIO
[20:10:05]I (74) boot.esp32: SPI Flash Size : 4MB
[20:10:05]I (79) boot: Enabling RNG early entropy source...
[20:10:05]I (84) boot: Partition Table:
[20:10:05]I (88) boot: ## Label            Usage          Type ST Offset   Length
[20:10:05]I (95) boot:  0 otadata          OTA data         01 00 00009000 00002000
[20:10:05]I (103) boot:  1 phy_init         RF data          01 01 0000b000 00001000
[20:10:05]I (110) boot:  2 app0             OTA app          00 10 00010000 001c0000
[20:10:05]I (118) boot:  3 app1             OTA app          00 11 001d0000 001c0000
[20:10:06]I (125) boot:  4 nvs              WiFi data        01 02 00390000 0006d000
[20:10:06]I (133) boot: End of partition table
[20:10:06]I (137) boot: No factory image, trying OTA 0
[20:10:06]I (142) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=65898h (415896) map
[20:10:06]I (301) esp_image: segment 1: paddr=000758c0 vaddr=3ffbdb60 size=051bch ( 20924) load
[20:10:06]I (310) esp_image: segment 2: paddr=0007aa84 vaddr=40080000 size=05594h ( 21908) load
[20:10:06]I (319) esp_image: segment 3: paddr=00080020 vaddr=400d0020 size=136820h (1271840) map
[20:10:06]I (779) esp_image: segment 4: paddr=001b6848 vaddr=40085594 size=199f0h (104944) load
[20:10:06]E (823) esp_image: Image length 1835616 doesn't fit in partition length 1835008
[20:10:06]E (823) boot: OTA app partition slot 0 is not bootable
[20:10:06]E (825) esp_image: image at 0x1d0000 has invalid magic byte (nothing flashed here?)
[20:10:06]E (833) boot: OTA app partition slot 1 is not bootable
[20:10:06]E (839) boot: No bootable app partitions in the partition table
[20:10:06]ets Jun  8 2016 00:22:57
[20:10:06]
[20:10:06]rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
  • The yaml config file for this device in ESPHome is as follows:
substitutions:
  name: m5stack-atom-echo-889484
  friendly_name: M5Stack Atom Echo v2
packages:
  m5stack.atom-echo-voice-assistant: github://esphome/firmware/voice-assistant/m5stack-atom-echo.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: e/rP9OwLQhN7IDpTpsYszpxd7jmgk3qf0L5pSxGbQCA=

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  • As a test I attempted install via ESPHome and USB again
  • Installation finished, clicked close, look at USB logs and find it in a boot loop again.
  • Removed device from USB, plug back in, still boot loop
  • Tried installing via Ready-Made Projects — ESPHome again
  • Skip adding to home assistant
  • On ESPHome (I didn’t remove the device before reinstalling this time), I can view the logs via USB, but if I view wirelessly it shows the following error on repeat:
INFO Successfully connected to m5stack-atom-echo-889484 @ 192.168.199.160 in 0.104s
WARNING m5stack-atom-echo-889484 @ 192.168.199.160: Connection error occurred: m5stack-atom-echo-889484 @ 192.168.199.160: The connection dropped immediately after encrypted hello; Try enabling encryption on the device or turning off encryption on the client (ESPHome Logs 2024.7.1).
INFO Successfully connected to m5stack-atom-echo-889484 @ 192.168.199.160 in 0.068s
WARNING m5stack-atom-echo-889484 @ 192.168.199.160: Connection error occurred: m5stack-atom-echo-889484 @ 192.168.199.160: The connection dropped immediately after encrypted hello; Try enabling encryption on the device or turning off encryption on the client (ESPHome Logs 2024.7.1).
INFO Successfully connected to m5stack-atom-echo-889484 @ 192.168.199.160 in 0.113s
WARNING m5stack-atom-echo-889484 @ 192.168.199.160: Connection error occurred: m5stack-atom-echo-889484 @ 192.168.199.160: The connection dropped immediately after encrypted hello; Try enabling encryption on the device or turning off encryption on the client (ESPHome Logs 2024.7.1).

Just before posting this I noticed that a new commit was added 9 hours ago (Add new adopted config for atom echo VA by jesserockz · Pull Request #244 · esphome/firmware · GitHub) which says “With the recent additions to the firmware, it got too large to OTA update”. I therefore tried a new adoption via ESPHome as I assumed it would pull the latest yaml file from GitHub via the following line, but it made no difference.

packages:
  m5stack.atom-echo-voice-assistant: github://esphome/firmware/voice-assistant/m5stack-atom-echo.yaml@main

Was my assumption correct or do I need to manually copy the yaml file contents to my own yaml file?
Ultimately, what am I doing wrong?

Hi @jarrah

I don’t think you’ve done anything wrong. It just doesn’t work.

I used the instructions here and got it working.

Thank you for your help, it was certainly worth a try but I still ended up in a boot loop (tried a couple of times with the suggested yaml)

Found the following issue that has the same boot loop problem: M5 Stack Atom Echo VA firmware does not install locally since a79c9fa - image too big. · Issue #227 · esphome/firmware · GitHub

The OP (HarvsG) created the PR that Asher in your link refers to.

Unfortunately I suspect a problem with my Atom Echo because even their yaml config results in a boot loop for me: (M5 Stack Atom Echo VA firmware does not install locally since a79c9fa - image too big. · Issue #227 · esphome/firmware · GitHub)

Plug the esp device into the computer running esphome.

I’ve managed to solve my problem by ensuring I “Clean build files” (found within the 3-dot menu for the device card) before attempting to install new changes to the yaml file.

I used the configuration found in the following post (same link as above), which hopefully will only be temporary until the fix is pushed to the main GitHub package file for Atom Echos.

What I didn’t originally realise is that there are two versions of the firmware for Atom Echos. I was wanting to try the new on-device wake word but all the Voice Assistant guides (here and here) use the standard package defined here:

packages:
  m5stack.atom-echo-voice-assistant: github://esphome/firmware/voice-assistant/m5stack-atom-echo.yaml@main

(source: firmware/voice-assistant/m5stack-atom-echo.yaml at 023267c64a6fad0bc7f7bbde5ae111cef0aba91a · esphome/firmware · GitHub)

If you want to use the new wake-word method announced a couple of weeks ago, you temporarily need this package (until this PR is merged):

packages:
  m5stack.atom-echo-wake-word-voice-assistant: github://HarvsG/firmware/wake-word-voice-assistant/m5stack-atom-echo.yaml@patch-3

(As noted in this issue, don’t Adopt the device until the above mentioned PR is merged)

Ignore everything below! I tried the installation via $13 voice assistant for Home Assistant - Home Assistant and it just worked. No encryption key prompt, it smoothly added to HA without issue. :slight_smile:


Eight months on and the installation process is still no easier.

All I would like to do is install the latest voice Assist via Ready-Made Projects — ESPHome onto my M5Stack Atom Echo and easily import it into Home Assistant, but as you’ll see below I end up having to re-compile the firmware via ESPHome just to add it into HA.

As before I have a separate ESPHome Docker instance that is connected to Home Assistant. I have deleted all references to M5Stack on HA and ESP.

I am able to install 25.2.1 from the page linked above via a USB cable connected between my computer and the Atom. After installing it asks for my wifi password and then I’m prompted to Add to Home Assistant:

After pressing Add to Home Assistant, it asks to open the page in HA:

It then asks if I want to set up ESPHome:

Pressing Ok now gives me the choice of adding a discovered device, which is better than my earlier post where it always wanted to install a new ESPHome add-on.

Pressing the discovered Atom, it then asks me for an Encryption key…

Where am I meant to get this from? It says you can find it in the ESPHome Dashboard or device configuration. Ok, I don’t know how to find device configuration so I go to my ESPHome web GUI.

Along the top it says “Discovered 1 device” and “Show”.

Pressing Show results in this:

Ok, I still need the encryption key, so I press “Take Control”.

It now tells me a new configuration needs to be installed on the device, but I thought this had already been done during the install via Ready-Made Projects — ESPHome

I try copying this encryption key into the earlier prompt asking for a key, but as expected it doesn’t work because this is a new key for a new firmware install.

I click Install and it proceeds to compile and build a new image. Why? I’ve already installed the firmware, I just want to adopt the device so that I can find the Encryption key to add it to Home Assistant…

I suspect this is installing firmware over the air because even though the Atom is still connected via USB, my ESPHome web GUI didn’t bring up any device connection window.

At this point the logs look promising, but it’s failing to connect to my HA instance.

Linking .pioenvs/home-assistant-voice-09e114/firmware.elf
RAM:   [=         ]  11.9% (used 39132 bytes from 327680 bytes)
Flash: [===       ]  32.9% (used 2674721 bytes from 8126464 bytes)
Building .pioenvs/home-assistant-voice-09e114/firmware.bin
Creating esp32s3 image...
Successfully created esp32s3 image.
esp32_create_combined_bin([".pioenvs/home-assistant-voice-09e114/firmware.bin"], [".pioenvs/home-assistant-voice-09e114/firmware.elf"])
Wrote 0x29d190 bytes to file /config/.esphome/build/home-assistant-voice-09e114/.pioenvs/home-assistant-voice-09e114/firmware.factory.bin, ready to flash to offset 0x0
esp32_copy_ota_bin([".pioenvs/home-assistant-voice-09e114/firmware.bin"], [".pioenvs/home-assistant-voice-09e114/firmware.elf"])
======================== [SUCCESS] Took 466.31 seconds ========================
INFO Successfully compiled program.
INFO Connecting to 192.168.199.155 port 3232...
INFO Connected to 192.168.199.155
INFO Uploading /config/.esphome/build/home-assistant-voice-09e114/.pioenvs/home-assistant-voice-09e114/firmware.bin (2675088 bytes)
Uploading: [============================================================] 100% Done...

INFO Upload took 8.24 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.199.155 using esphome API
INFO Successfully connected to home-assistant-voice-09e114 @ 192.168.199.155 in 15.798s
INFO Successful handshake with home-assistant-voice-09e114 @ 192.168.199.155 in 0.072s
[19:14:14][I][app:100]: ESPHome version 2025.2.2 compiled on Mar 14 2025, 19:08:25
[19:14:14][C][wifi:600]: WiFi:
[19:14:14][C][wifi:428]:   Local MAC: 20:F8:3B:09:E1:14
[19:14:14][C][wifi:433]:   SSID: [redacted]
[19:14:14][C][wifi:436]:   IP Address: 192.168.199.155
[19:14:14][C][wifi:439]:   BSSID: [redacted]
[19:14:14][C][wifi:441]:   Hostname: 'home-assistant-voice-09e114'
[19:14:14][C][wifi:443]:   Signal strength: -49 dB ▂▄▆█
[19:14:14][C][wifi:447]:   Channel: 6
[19:14:14][C][wifi:448]:   Subnet: 255.255.255.0
[19:14:14][C][wifi:449]:   Gateway: 192.168.199.246
[19:14:14][C][wifi:450]:   DNS1: 192.168.199.35
[19:14:14][C][wifi:451]:   DNS2: 192.168.199.35
[19:14:14][C][logger:177]: Logger:
[19:14:14][C][logger:178]:   Max Level: DEBUG
[19:14:14][C][logger:179]:   Initial Level: DEBUG
[19:14:14][C][logger:181]:   Log Baud Rate: 115200
[19:14:14][C][logger:182]:   Hardware UART: USB_SERIAL_JTAG
[19:14:14][C][logger:186]:   Level for 'sensor': WARN
[19:14:14][C][i2c.idf:079]: I2C Bus:
[19:14:14][C][i2c.idf:080]:   SDA Pin: GPIO5
[19:14:14][C][i2c.idf:081]:   SCL Pin: GPIO6
[19:14:14][C][i2c.idf:082]:   Frequency: 400000 Hz
[19:14:14][C][i2c.idf:088]:   Recovery: bus successfully recovered
[19:14:14][I][i2c.idf:098]: Results from i2c bus scan:
[19:14:14][I][i2c.idf:104]: Found i2c device at address 0x18
[19:14:14][I][i2c.idf:104]: Found i2c device at address 0x42
[19:14:14][C][power_supply:018]: Power Supply:
[19:14:14][C][power_supply:019]:   Pin: GPIO45
[19:14:14][C][power_supply:020]:   Time to enable: 20 ms
[19:14:14][C][power_supply:021]:   Keep on time: 10.0 s
[19:14:14][C][switch.gpio:068]: GPIO Switch 'Internal speaker amp'
[19:14:14][C][switch.gpio:090]:   Restore Mode: always OFF
[19:14:14][C][switch.gpio:031]:   Pin: GPIO47
[19:14:14][C][esp32_rmt_led_strip:250]: ESP32 RMT LED Strip:
[19:14:14][C][esp32_rmt_led_strip:251]:   Pin: 21
[19:14:14][C][esp32_rmt_led_strip:253]:   RMT Symbols: 192
[19:14:14][C][esp32_rmt_led_strip:281]:   RGB Order: GRB
[19:14:14][C][esp32_rmt_led_strip:282]:   Max refresh rate: 15000
[19:14:14][C][esp32_rmt_led_strip:283]:   Number of LEDs: 12
[19:14:14][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'hardware_mute_switch'
[19:14:14][C][gpio.binary_sensor:016]:   Pin: GPIO3
[19:14:14][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'center_button'
[19:14:14][C][gpio.binary_sensor:016]:   Pin: GPIO0
[19:14:14][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'jack_plugged'
[19:14:14][C][gpio.binary_sensor:016]:   Pin: GPIO17
[19:14:14][C][light:092]: Light 'leds_internal'
[19:14:14][C][light:094]:   Default Transition Length: 0.0s
[19:14:14][C][light:095]:   Gamma Correct: 2.80
[19:14:14][C][light:092]: Light 'voice_assistant_leds'
[19:14:14][C][light:094]:   Default Transition Length: 0.0s
[19:14:14][C][light:095]:   Gamma Correct: 2.80
[19:14:14][C][light:092]: Light 'LED Ring'
[19:14:14][C][light:094]:   Default Transition Length: 0.0s
[19:14:14][C][light:095]:   Gamma Correct: 2.80
[19:14:14][C][voice_kit:040]: Voice Kit:
[19:14:14][C][voice_kit:041]:   Address: 0x42
[19:14:14][C][voice_kit:042]:   Reset Pin: GPIO4
[19:14:14][C][voice_kit:044]:   XMOS firmware version: 1.3.1
[19:14:14][C][template.switch:068]: Template Switch 'Wake sound'
[19:14:14][C][template.switch:070]:   Icon: 'mdi:bullhorn'
[19:14:14][C][template.switch:090]:   Restore Mode: restore defaults to ON
[19:14:14][C][template.switch:057]:   Optimistic: YES
[19:14:14][C][template.switch:068]: Template Switch 'Mute'
[19:14:14][C][template.switch:070]:   Icon: 'mdi:microphone-off'
[19:14:14][C][template.switch:090]:   Restore Mode: restore defaults to OFF
[19:14:14][C][template.switch:057]:   Optimistic: NO
[19:14:14][C][template.switch:068]: Template Switch 'timer_ringing'
[19:14:14][C][template.switch:090]:   Restore Mode: always OFF
[19:14:14][C][template.switch:057]:   Optimistic: YES
[19:14:14][C][psram:020]: PSRAM:
[19:14:14][C][psram:021]:   Available: YES
[19:14:14][C][psram:028]:   Size: 8192 KB
[19:14:14][C][rotary_encoder:164]: Rotary Encoder 'dial'
[19:14:14][C][rotary_encoder:164]:   State Class: ''
[19:14:14][C][rotary_encoder:164]:   Unit of Measurement: 'steps'
[19:14:14][C][rotary_encoder:164]:   Accuracy Decimals: 0
[19:14:14][C][rotary_encoder:164]:   Icon: 'mdi:rotate-right'
[19:14:14][C][rotary_encoder:165]:   Pin A: GPIO16
[19:14:14][C][rotary_encoder:166]:   Pin B: GPIO18
[19:14:14][C][rotary_encoder:180]:   Restore Mode: Restore (Defaults to zero)
[19:14:14][C][rotary_encoder:187]:   Resolution: 2 Pulses Per Cycle
[19:14:14][C][speaker_mixer:288]: Speaker Mixer:
[19:14:14][C][speaker_mixer:289]:   Number of output channels: 2
[19:14:14][C][speaker_mixer:046]: Mixer Source Speaker
[19:14:14][C][speaker_mixer:047]:   Buffer Duration: 100 ms
[19:14:14][C][speaker_mixer:051]:   Timeout: never
[19:14:14][C][speaker_mixer:046]: Mixer Source Speaker
[19:14:14][C][speaker_mixer:047]:   Buffer Duration: 100 ms
[19:14:14][C][speaker_mixer:051]:   Timeout: never
[19:14:14][C][aic3204:112]: AIC3204:
[19:14:14][C][aic3204:113]:   Address: 0x18
[19:14:14][C][factory_reset.button:011]: Factory Reset Button 'Factory Reset'
[19:14:14][C][factory_reset.button:011]:   Icon: 'mdi:restart-alert'
[19:14:14][C][restart.button:017]: Restart Button 'Restart'
[19:14:14][C][restart.button:017]:   Icon: 'mdi:restart'
[19:14:15][C][mdns:116]: mDNS:
[19:14:15][C][mdns:117]:   Hostname: home-assistant-voice-09e114
[19:14:15][C][esphome.ota:073]: Over-The-Air updates:
[19:14:15][C][esphome.ota:074]:   Address: home-assistant-voice-09e114.local:3232
[19:14:15][C][esphome.ota:075]:   Version: 2
[19:14:15][C][safe_mode:018]: Safe Mode:
[19:14:15][C][safe_mode:019]:   Boot considered successful after 60 seconds
[19:14:15][C][safe_mode:021]:   Invoke after 10 boot attempts
[19:14:15][C][safe_mode:022]:   Remain in safe mode for 300 seconds
[19:14:15][C][api:140]: API Server:
[19:14:15][C][api:141]:   Address: home-assistant-voice-09e114.local:6053
[19:14:15][C][api:143]:   Using noise encryption: YES
[19:14:15][C][micro_wake_word:072]: microWakeWord:
[19:14:15][C][micro_wake_word:073]:   models:
[19:14:15][C][micro_wake_word:015]:     - Wake Word: Okay Nabu
[19:14:15][C][micro_wake_word:016]:       Probability cutoff: 0.85
[19:14:15][C][micro_wake_word:017]:       Sliding window size: 5
[19:14:15][C][micro_wake_word:015]:     - Wake Word: Hey Jarvis
[19:14:15][C][micro_wake_word:016]:       Probability cutoff: 0.97
[19:14:15][C][micro_wake_word:017]:       Sliding window size: 5
[19:14:15][C][micro_wake_word:015]:     - Wake Word: Hey Mycroft
[19:14:15][C][micro_wake_word:016]:       Probability cutoff: 0.95
[19:14:15][C][micro_wake_word:017]:       Sliding window size: 5
[19:14:15][C][micro_wake_word:015]:     - Wake Word: Stop
[19:14:15][C][micro_wake_word:016]:       Probability cutoff: 0.50
[19:14:15][C][micro_wake_word:017]:       Sliding window size: 5
[19:14:15][C][micro_wake_word:021]:     - VAD Model
[19:14:15][C][micro_wake_word:022]:       Probability cutoff: 0.50
[19:14:15][C][micro_wake_word:023]:       Sliding window size: 5
[19:14:15][C][debug:021]: Debug component:
[19:14:15][D][debug:035]: ESPHome version 2025.2.2
[19:14:15][D][debug:039]: Free Heap Size: 133332 bytes
[19:14:15][D][debug:284]: Chip: Model=ESP32-S3, Features=WIFI_BGN,BLE, Cores=2, Revision=2
[19:14:15][D][debug:299]: Framework: ESP-IDF
[19:14:15][D][debug:306]: ESP-IDF Version: 5.1.5
[19:14:15][D][debug:311]: EFuse MAC: 20:F8:3B:09:E1:14
[19:14:15][D][debug:204]: Reset Reason: Software reset via esp_restart
[19:14:15][D][debug:359]: Wakeup Reason: Unknown
[19:14:15][C][debug:033]: Partition table:
[19:14:15][C][debug:034]:   Name         Type Subtype  Address    Size      
[19:14:15][C][debug:038]:   otadata      1    0        0x00009000 0x00002000
[19:14:15][C][debug:038]:   phy_init     1    1        0x0000B000 0x00001000
[19:14:15][C][debug:038]:   app0         0    16       0x00010000 0x007C0000
[19:14:15][C][debug:038]:   app1         0    17       0x007D0000 0x007C0000
[19:14:15][C][debug:038]:   nvs          1    2        0x00F90000 0x0006D000
[19:14:36][D][esp32.preferences:114]: Saving 3 preferences to flash...
[19:14:36][D][esp32.preferences:142]: Saving 3 preferences to flash: 2 cached, 1 written, 0 failed
[19:14:58][I][safe_mode:041]: Boot seems successful; resetting boot loop counter
[19:14:58][D][esp32.preferences:114]: Saving 1 preferences to flash...
[19:14:58][D][esp32.preferences:142]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[19:15:09][D][api:103]: Accepted 192.168.199.40
[19:15:09][W][api.connection:092]: : Socket operation failed: BAD_INDICATOR errno=11
[19:15:09][D][light:036]: 'voice_assistant_leds' Setting:
[19:15:09][D][light:051]:   Brightness: 66%
[19:15:09][D][light:058]:   Red: 10%, Green: 77%, Blue: 100%
[19:16:09][D][api:103]: Accepted 192.168.199.40
[19:16:09][W][api.connection:092]: : Socket operation failed: BAD_INDICATOR errno=11
[19:16:09][D][light:036]: 'voice_assistant_leds' Setting:
[19:16:09][D][light:051]:   Brightness: 66%
[19:16:09][D][light:058]:   Red: 10%, Green: 77%, Blue: 100%
[19:16:10][D][api:103]: Accepted 192.168.199.40
[19:16:10][W][api.connection:092]: : Socket operation failed: BAD_INDICATOR errno=11
[19:16:10][D][light:036]: 'voice_assistant_leds' Setting:
[19:16:10][D][light:051]:   Brightness: 66%
[19:16:10][D][light:058]:   Red: 10%, Green: 77%, Blue: 100%

Looking at my HA logs I see the following:

2025-03-14 19:14:06.527 WARNING (MainThread) [aioesphomeapi.connection] home-assistant-voice-09e114 @ 192.168.199.155: Connection error occurred: home-assistant-voice-09e114 @ 192.168.199.155: Connection requires encryption
2025-03-14 19:14:06.528 WARNING (MainThread) [aioesphomeapi.reconnect_logic] Can't connect to ESPHome API for home-assistant-voice-09e114 @ 192.168.199.155: home-assistant-voice-09e114 @ 192.168.199.155: Connection requires encryption (RequiresEncryptionAPIError)
2025-03-14 19:14:06.555 WARNING (MainThread) [aioesphomeapi.connection] 192.168.199.155: Connection error occurred: 192.168.199.155: Connection requires encryption
2025-03-14 19:14:07.161 WARNING (MainThread) [aioesphomeapi.connection] home-assistant-voice-09e114 @ 192.168.199.155: Connection error occurred: home-assistant-voice-09e114 @ 192.168.199.155: Connection requires encryption
2025-03-14 19:14:08.294 WARNING (MainThread) [aioesphomeapi.connection] home-assistant-voice-09e114 @ 192.168.199.155: Connection error occurred: home-assistant-voice-09e114 @ 192.168.199.155: Connection requires encryption
2025-03-14 19:14:09.335 WARNING (MainThread) [aioesphomeapi.connection] home-assistant-voice-09e114 @ 192.168.199.155: Connection error occurred: home-assistant-voice-09e114 @ 192.168.199.155: Connection requires encryption

I see that it needs an encryption key, so I look at my HA GUI and see this:


Back to ESPHome I see the device is now appearing ok

I click Edit and find the encryption key:

I copy this, go back to HA, and paste in the Window.

Finally, it works!!

Within my ESPHome Integration, I now see it has discovered the device, so I press Add.

Looking good:

Yay, I can talk to it and control lights.

So, my big question is, why does ESPHome insist on reinstalling the Assist firmware when it had already been done via the website? Is there a better way to adopt such a device? Did I do something wrong, and if so at which step above? Why can’t the installation process on Ready-Made Projects — ESPHome present the encryption key? Is there a way to find it from the Logs or Console shown below? It seems crazy that you have to go through the whole firmware re-compile process just to get an encryption key!

Anyways, hopefully my detailed installation process above at least helps someone else…