ESPHome
Read the ESPHome guides before building a satellite.
Home Assistant Assist can understand a command, select the correct device and answer with speech. A fully local pipeline keeps audio, text and actions on your own systems. Start with your phone and add a room satellite only after the whole pipeline works.
A local interaction follows this chain:
Microphone → wake word/button → speech-to-text → Assist intent → action → Piper → speaker| Stage | Local choice | Best fit |
|---|---|---|
| Speech-to-text | Speech-to-Phrase | Fast known home-control sentences on modest hardware |
| Speech-to-text | Whisper | More flexible speech with higher CPU/GPU demand and usually more latency |
| Intent | Built-in Home Assistant conversation agent | Predictable control of exposed entities |
| Text-to-speech | Piper | Local speech generation |
| Input/output | Companion app | Best first test without extra hardware |
| Room satellite | Home Assistant Voice or ESPHome voice device | Hands-free use after pipeline validation |
An LLM conversation agent is not required for normal lighting, climate or media control. If you add a cloud agent, that stage is no longer local.
You need:
Speech-to-Phrase is usually the lightest local starting point for home control. Whisper understands freer speech, but slow hardware can make the experience unusable. Measure latency on your system.
Open the Home Assistant app store
Go to Settings → Apps. Older releases may call this Add-ons.
Install one speech-to-text engine
Start with Speech-to-Phrase for ordinary home control. Choose Whisper when you need freer language and have sufficient hardware.
Install Piper
Select a voice and language available in your installed version. Voice and language quality is not identical across every option.
Start both services and inspect logs
They must remain running without model-load errors or restart loops.
On non-OS installations, Wyoming components can run separately. Follow the official architecture and never expose Wyoming ports directly to the internet.
Open Settings → Voice assistants, create an assistant and choose:
Give it a clear name such as Local English. Keep it separate from any cloud
pipeline so you always know what you are testing.
Assist controls relevant exposed entities. Review exposure in the voice assistant settings.
Ceiling light in Kitchen, not a hardware ID.Open Assist in the Companion app and test five boundaries separately:
Fix a failing stage before moving on. A wrong light choice is not fixed by a new microphone, and missing audio is not fixed by adding aliases.
Use correct area and entity names for your selected language and test sentences supported by your current Home Assistant version. Language support evolves; the official language table is authoritative.
Start with concrete commands:
When a phrase fails, check transcription, exposure, name, area and aliases in that order. Add custom sentences only for a real gap in built-in support.
Once phone testing is stable, add dedicated hardware.
Follow its onboarding flow, select the pipeline you already verified, and test in the intended room. Confirm wake word, microphone, speaker and pipeline as separate stages.
ESPHome microphone devices can stream audio to Assist. Audio consumes significant RAM and CPU. Do not casually combine voice, Bluetooth Proxy, web server and many other components on one ESP32; official ESPHome documentation warns about resource conflicts between audio and BLE.
A standard local pipeline can process speech and responses at home. The boundary changes when you use:
Document those choices, provide a physical mute control where possible, and grant each device only the network access it needs.
Check microphone permission, selected input, physical mute, gain and satellite logs. Test without a wake word when the hardware supports push-to-talk.
Confirm where wake-word detection runs, which model is selected, and whether a manual push-to-talk test works. A downstream pipeline failure is not the same as a wake-word detection failure.
Compare Speech-to-Phrase and Whisper with the same sentence and hardware. Check CPU/RAM, background noise, language and model size. Measure time to transcription rather than only total response time.
Review exposure, area, name and aliases. Remove duplicates and test with an explicit area. Inspect intent/debug information before replacing speech-to-text.
Inspect Piper logs, selected voice, output device and volume. If response text appears, the intent stage probably already works.
ESPHome
Read the ESPHome guides before building a satellite.
Security
Review smart-home security.