ESPHome wake word unavailable and duplicate Assist/Wake Word entities in Home Assistant

Hi everyone,

I am troubleshooting a very specific issue with ESPHome Voice Assistant + Home Assistant, and I would like to understand whether this is a known bug, a configuration conflict, or some limitation in the current integration.

Setup

  • Board: ESP32-S3 N16R8
  • Framework: esp-idf
  • Audio hardware: I2S microphone + I2S amplifier / speaker
  • Home Assistant: running in Docker
  • Pipeline: Wyoming (faster-whisper) + DeepSeek + Edge TTS

What works perfectly

If I disable wake word and start the assistant manually from a physical button using voice_assistant.start, everything works correctly:

  • microphone audio is clean
  • speech-to-text works
  • the LLM responds
  • TTS plays back correctly through the speaker

So the hardware, network, audio path, and the general HA pipeline all seem to be fine.

The problem

As soon as I enable wake word mode, I get very strange behavior.

Minimal relevant config:

Yaml

micro_wake_word:

models:

- model: okay_nabu

voice_assistant:

microphone: board_mic

speaker: board_speaker

use_wake_word: true

Symptoms

  1. The Wake Word entity in Home Assistant is always unavailable
    In the UI it permanently shows as unavailable with a red warning icon.
  2. Home Assistant always creates exactly two copies of the assistant-related entities:
  • Assist
  • Assist 2
  • Wake word
  • Wake word 2
  1. The number of duplicates does not keep growing endlessly.
    I do not get 3, 4, 5 copies. It is always exactly two pairs.
  2. The device does not react to the wake word at all.
    Since the wake word entity is unavailable, I cannot tell whether background listening is actually considered active internally or not.

What I already tried

  • fully removed the device and ESPHome integration from HA
  • changed the device name in the firmware
  • changed the static IP
  • tried both server-side wake word and local micro_wake_word
  • verified that the okay_nabu model downloads and loads successfully into PSRAM according to ESPHome logs
  • set the Assist pipeline as default in Home Assistant

Important observation

If use_wake_word: false, the entire system works correctly.

The issue only appears when wake word is enabled.

Question

Has anyone seen this specific behavior before?

In particular, I am trying to understand:

  1. Why would the wake word entity stay permanently unavailable even though the rest of the voice assistant pipeline works?
  2. Why does Home Assistant create exactly two assistant / wake word entities instead of one?
  3. Is this a known issue in ESPHome / Home Assistant when using voice_assistant together with micro_wake_word?
  4. Could this be related to Home Assistant running in Docker, entity registry state, or some conflict between local wake word and the Assist pipeline?

I am especially interested in cases where:

  • manual button start works perfectly
  • wake word does not
  • and the entities are duplicated in exactly this way

Any technical insight would be appreciated.

You will need to post the whole yaml file as you will need quite a lot more code than that to make it work, and I have no idea if you have that or not.

answers:

1 probably not set up correctly????
2 this is normal so you can set up more than one wake word
3 no
4 no

Anyhow here is a working example you can take the relevant bits from.