Home Assistant Voice Control with Ollama: Local Assist, Whisper and Piper (Linux, Windows, Mac)
Before you start
- 20 min read
Boxes marked Run in terminal are what you type; plain text explains why. Check what you need first

What you get in one minute#
Home Assistant's Assist can run entirely on your own hardware: Whisper turns your voice into text, an Ollama model on your network decides what to do and switches your devices, and Piper speaks the answer, with no cloud account in the voice path.

Logo: the official Home Assistant project (brands repository on GitHub)
It suits a home where voice commands should stay private. The catch is the model: Home Assistant only lets Ollama models with the tools badge control devices, and small models make mistakes. This guide picks a model, wires the services together and lists what still touches the internet.
| What | Value (official docs and releases, read October 2026) |
|---|---|
| Home Assistant | 2026.10.4, released October 2026 (Apache-2.0) |
| Ollama | v0.40.13, released October 2026 (MIT) |
| Whisper and Piper images | rhasspy/wyoming-whisper:3.8.1 and rhasspy/wyoming-piper:2.5.2 (both MIT) |
| Time needed | About 45 minutes plus model downloads (our estimate, not measured) |
| Ports | Ollama 11434, Whisper 10300, Piper 10200 (all TCP, local network only); Home Assistant 8123 |
| Official docs | Ollama integration and local voice assistant |
At a glance:
- What runs where: Home Assistant on one machine; Ollama, Whisper and Piper on the same or another machine.
- Model rule: only models that support tools can control Home Assistant (the docs say so). Start small, expose few entities.
- Speech: Whisper (speech-to-text) and Piper (text-to-speech) speak the Wyoming protocol to Home Assistant.
- Platforms: Ollama runs on Linux, Windows and macOS. Home Assistant Container needs Linux; on Windows or Mac use Home Assistant OS in a virtual machine.
- Privacy: after the downloads, the voice path stays on your network.
- Related guides: Ollama in 2026, the older Home Assistant install guide and Speaches Whisper.
How it fits together#
You speak to a browser, phone or voice device. Home Assistant passes the audio to Whisper, the text to Ollama, runs the tool call the model asks for, and gives the reply to Piper.
Drawn for this guide from the official Home Assistant, Ollama and Wyoming docs. After the one-time downloads, nothing here leaves your network.
Before you start#
You need a working Home Assistant, a machine for Ollama, and one for Whisper and Piper. One computer can do all three jobs.
| Part | What it needs (official docs) |
|---|---|
| Home Assistant | Home Assistant OS (recommended by the docs), or Container on Linux with Docker Engine 23.0.0 or later. The docs say Docker Desktop will not work for the Container install, and Container has no apps. |
| Ollama | Linux; Windows 10 22H2 or newer; macOS 14 or newer (Apple M series use CPU and GPU, Intel Macs CPU only) |
| Whisper and Piper | Either the Whisper and Piper apps (Home Assistant OS) or the Docker images below (Linux amd64 or arm64) |
| Speed (Home Assistant docs) | Whisper takes about 8 seconds per command on a Raspberry Pi 4 and under 1 second on an Intel NUC |
Our older install guide installs Home Assistant on Ubuntu. On Windows or Mac the official pages offer Home Assistant OS in a virtual machine only; we do not repeat that. Check your tools:
Linux#
docker --version docker compose version curl --version
Windows (PowerShell)#
docker --version docker compose version curl.exe --version
Mac (Terminal)#
docker --version docker compose version curl --version
Checklist:
- [ ] Home Assistant runs and you are an administrator
- [ ] You know the address of the Ollama machine (
<ollama-host>below) - [ ] Ports 11434, 10300 and 10200 are free
- [ ] A backup of your Home Assistant configuration exists
- [ ] For the HTTPS section only: a DNS name for Home Assistant, and ports 80 and 443 free
Tested by DIY Lab Hub: not yet. Every command and setting comes from the official docs, READMEs and release files read in October 2026. We did not run them.
Step 1: Install Ollama and pull a model that supports tools#
We start with llama3.2: its page shows the tools badge and the default download is 2.0 GB. More install details are in our Ollama guide.
Linux#
curl -fsSL https://ollama.com/install.sh | sh ollama pull llama3.2 ollama list
Windows (PowerShell)#
irm https://ollama.com/install.ps1 | iex ollama pull llama3.2 ollama list
Ollama installs without Administrator rights and needs at least 4 GB of disk for the program itself.
Mac (Terminal)#
The download page uses the same script as Linux (the .dmg from the same page also works):
curl -fsSL https://ollama.com/install.sh | sh ollama pull llama3.2 ollama list
Check it worked. ollama list shows llama3.2, and curl http://localhost:11434 answers Ollama is running (the answer our Ollama guide shows; use curl.exe in PowerShell).
Tip: Never type a model name ending in
:cloud. Those run on Ollama's servers, so your voice text would leave your network.
Step 2: Let Home Assistant reach Ollama#
Ollama listens on 127.0.0.1:11434 only (official FAQ). If Home Assistant Container runs on the same Linux machine (host networking), http://localhost:11434 works and you can skip this step. Otherwise Home Assistant is on another machine or in a virtual machine, so Ollama must listen on the network.
Linux#
sudo systemctl edit ollama.service
In the editor add these two lines, save, then reload and restart:
[Service] Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl daemon-reload sudo systemctl restart ollama
Ollama has no login. Allow only Home Assistant's address (ufw is one example; use your own firewall):
sudo ufw allow from <home-assistant-ip> to any port 11434 proto tcp
Windows (PowerShell)#
The docs use the settings screen: quit Ollama from the tray, search "environment variables" in Settings, choose "Edit environment variables for your account", create OLLAMA_HOST with the value 0.0.0.0:11434, click OK, start Ollama again. A one-line equivalent (not from the docs):
[Environment]::SetEnvironmentVariable("OLLAMA_HOST", "0.0.0.0:11434", "User")
Restart Ollama afterwards. If Windows asks about the firewall, allow private networks only.
Mac (Terminal)#
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
Then quit and start the Ollama app again.
Check it worked. From the machine that runs Home Assistant (or any other computer on the network), replace <ollama-host> with the Ollama machine's address:
curl http://<ollama-host>:11434/api/tags
On Windows use curl.exe. The answer is JSON that lists llama3.2.
Tip: Our Ollama guide has a section on putting a login in front of Ollama. Home Assistant's Ollama setup has an optional API Key field for exactly that case.
Step 3: Run Whisper and Piper (speech in, speech out)#
Home Assistant calls both over the Wyoming protocol. Pick one route:
- Home Assistant OS: install the Whisper and Piper apps from Settings > Apps > Install app. Home Assistant finds them by itself. You can skip the rest of this step.
- Container, or Whisper and Piper on another machine: use Docker, below, with the versions pinned from the official repositories.
The Whisper model and Piper voice download on first start, so it takes longer.
Linux#
mkdir -p ~/docker_volumes/wyoming-voice/whisper/data ~/docker_volumes/wyoming-voice/piper/data ~/docker_volumes/wyoming-voice/backups
cd ~/docker_volumes/wyoming-voice
cat > docker-compose.yml << 'EOF'
services:
whisper:
image: rhasspy/wyoming-whisper:3.8.1
container_name: wyoming-whisper
restart: unless-stopped
command: --model base-int8 --language en
environment:
ORT_DISABLE_TELEMETRY: "1"
ports:
- "10300:10300"
volumes:
- ./whisper/data:/data
piper:
image: rhasspy/wyoming-piper:2.5.2
container_name: wyoming-piper
restart: unless-stopped
command: --voice en_US-lessac-medium
ports:
- "10200:10200"
volumes:
- ./piper/data:/data
EOF
docker compose up -d
docker compose ps
docker compose logs --tail=50 whisper piper
base-int8 is the Home Assistant app's default model on non-ARM devices; use tiny-int8 on a Raspberry Pi. Piper voices are named <language>_<REGION>-<name>-<quality>, and medium is the compromise the docs mention.
Windows (PowerShell)#
The images are Linux images (amd64, arm64). The READMEs do not mention Docker Desktop, so treat this route as untested.
New-Item -ItemType Directory -Force "$HOME\docker_volumes\wyoming-voice\whisper\data", "$HOME\docker_volumes\wyoming-voice\piper\data", "$HOME\docker_volumes\wyoming-voice\backups" | Out-Null
Set-Location "$HOME\docker_volumes\wyoming-voice"
@'
services:
whisper:
image: rhasspy/wyoming-whisper:3.8.1
container_name: wyoming-whisper
restart: unless-stopped
command: --model base-int8 --language en
environment:
ORT_DISABLE_TELEMETRY: "1"
ports:
- "10300:10300"
volumes:
- ./whisper/data:/data
piper:
image: rhasspy/wyoming-piper:2.5.2
container_name: wyoming-piper
restart: unless-stopped
command: --voice en_US-lessac-medium
ports:
- "10200:10200"
volumes:
- ./piper/data:/data
'@ | Set-Content -Encoding utf8 docker-compose.yml
docker compose up -d
docker compose ps
docker compose logs --tail=50 whisper piper
Mac (Terminal)#
Same commands and file as Linux (Docker Desktop, untested for the same reason).
Check it worked. docker compose ps lists both containers. The images carry a health check, so docker ps shows healthy once the model is loaded; the first start can take minutes. The READMEs publish no expected log text, so read the logs for errors. Then test the ports:
timeout 3 bash -c '</dev/tcp/127.0.0.1/10300' && echo "whisper port open" timeout 3 bash -c '</dev/tcp/127.0.0.1/10200' && echo "piper port open"
That is for Linux. On Windows use Test-NetConnection 127.0.0.1 -Port 10300 (then 10200). On Mac use nc -vz 127.0.0.1 10300 (then 10200).
Tip: If Home Assistant Container runs on the same Linux machine, publish the ports on loopback only:
"127.0.0.1:10300:10300"and"127.0.0.1:10200:10200". Wyoming has no login, so nobody else on the network should reach it.
Tip: There is no GPU image on Docker Hub. The README says to build
Dockerfile.gpuyourself (about 10.7 GB, NVIDIA only). Do not writerhasspy/wyoming-whisper:gpu.
Step 4: Connect everything in Home Assistant#
This step is in the Home Assistant web page, so it is the same on every system. First check from your own computer.
Linux#
Before you add anything, confirm Ollama answers from the Home Assistant machine:
curl http://<ollama-host>:11434/api/tags
Windows (PowerShell)#
curl.exe http://<ollama-host>:11434/api/tags Test-NetConnection <voice-host> -Port 10300
<voice-host> is the machine that runs Whisper and Piper.
Mac (Terminal)#
curl http://<ollama-host>:11434/api/tags nc -vz <voice-host> 10300
Now in the browser:
- Settings > Devices & services > Add integration > Ollama. Enter the URL
http://<ollama-host>:11434(orhttp://localhost:11434for the same-host setup) and the modelllama3.2. The docs say a missing model is downloaded during setup. - If you did not use the apps: Add integration > Wyoming Protocol, host
<voice-host>, port10300(Whisper). Add it again with port10200(Piper). - Open the Ollama agent's settings (the gear icon) and turn Control Home Assistant on. Leave Think before responding off and the context window at its 8k default.
- Settings > Voice assistants > Add assistant. Name it, pick your language, choose the Ollama agent as the conversation agent, your Whisper engine for speech-to-text and Piper for text-to-speech.
- In the three-dot menu of that assistant, turn on Prefer handling commands locally. Home Assistant's own sentence matching then answers simple commands without calling the model, and Ollama handles the rest.
Check it worked. The assistant shows up in Voice assistants with all three parts filled in. If the list of assistants is empty, add assist_pipeline: to configuration.yaml (the Assist troubleshooting page says so).
Tip: The docs suggest two Ollama entries on one model: one without control for chat, one with control for the house.
Step 5: Expose a few devices and test#
Nothing is exposed by default. The docs recommend fewer than 25 entities for local models.
Linux#
In Home Assistant: Settings > Voice assistants > Expose tab, pick a few lights and switches with clear names and areas, such as "Office light" in the area "Office". Do not expose locks or garage doors to a small model.
Windows (PowerShell)#
Same in the browser on your PC.
Mac (Terminal)#
Same in the browser on your Mac.
Test without a microphone first:
- Settings > Voice assistants, open your assistant, choose Debug.
- Top right icon > select your assistant > Run text pipeline.
- Type
Turn off the office lightsand select Run. The debug view shows which agent answered, the tool call and the result.
Check it worked. The light changes state, and the debug view shows a tool call. Then click the Assist icon at the top right of the dashboard and speak. A browser allows the microphone only on http://localhost and https:// pages (MDN: getUserMedia() needs a secure context), so plain http://<ip>:8123 cannot use it. The HTTPS section below fixes that; the Companion app and voice devices are alternatives.
Which models can control the house#
Home Assistant reads the tools capability that Ollama publishes. The docs: only models that support tools may control Home Assistant, and smaller ones make more mistakes. Each Ollama library page shows its badges. We read these on 2026-10-30:
| Model | Badges on its page | Sizes | Notes |
|---|---|---|---|
llama3.2 | tools | 1b, 3b | Default 2.0 GB. Our start |
llama3.1 | tools | 8b, 70b, 405b | Default 4.9 GB. A step up |
mistral | tools | 7b | 4.4 GB. The docs' own example |
qwen3 | tools, thinking | 0.6b to 235b | Default 5.2 GB, qwen3:4b 2.5 GB. See issue #167154 |
qwen3.5 | vision, tools, thinking | 0.8b to 122b | Check the size you pull |
gemma3 | vision | 270m to 27b | No tools badge: cannot control devices |
The tools filter (ollama.com/search?c=tools) changes often, so check it on the day. We give no ranking: the docs do not rank models and issue reports are mixed.
To try another model, pull it and change the Model field in the Ollama entry:
ollama pull llama3.1
What stays local and what needs the internet#
The voice path is on your network. These parts still call out, mostly once:
| Part | Needs the internet when | Afterwards |
|---|---|---|
| Docker images, Home Assistant | You pull images or update | Nothing for voice |
| Ollama | Install and ollama pull. Cloud models (:cloud) and web search use Ollama's servers | Local models work offline. OLLAMA_NO_CLOUD=1 disables cloud features |
| Whisper | First start downloads the model from Hugging Face | Since release 3.8.0 a downloaded model loads from disk. --local-files-only forbids downloads |
| Piper | Voices download from huggingface.co/rhasspy/piper-voices on first use. 2.4.3 sent ONNX Runtime telemetry; 2.5.1 turned it off | Voices load from disk |
| Home Assistant analytics | Only if you opt in | Off by default |
For local-only mode on Linux, add this line under [Service] with systemctl edit ollama.service, then restart:
Environment="OLLAMA_NO_CLOUD=1"
Ollama's log then shows Ollama cloud disabled: true. On Windows and Mac set the same variable the way Step 2 sets OLLAMA_HOST.
The proof: after the first start, disconnect the server from the internet and repeat the Step 5 test. We did not run it. Other integrations, such as weather, have their own internet needs.
Put it behind HTTPS (with or without Traefik)#
This is for Home Assistant Container on a Linux server with a domain; it makes the browser microphone work. Skip it if you use only the Companion app or localhost. Home Assistant OS has its own options (not covered). Windows and Mac: Linux only.
Either way, tell Home Assistant to trust the proxy. Since 2026.8 this is in the UI: Settings > System > Network > HTTP server, turn on Trust X-Forwarded-For and add the proxy under Trusted proxies. Saving restarts Home Assistant and an administrator must confirm within 5 minutes. Without it, proxied requests are blocked.
With Traefik#
Home Assistant Container runs with network_mode: host, and the Traefik docs we read do not say how Docker labels work for such containers. So we use a file-provider route instead. On a server with Traefik v3 and an https entrypoint, add ha.yml to the folder set in providers.file.directory:
http:
routers:
homeassistant:
rule: "Host(`ha.<your-domain>`)"
entryPoints:
- https
tls: {}
service: homeassistant
services:
homeassistant:
loadBalancer:
servers:
- url: "http://<ha-host-ip>:8123"
<ha-host-ip> is the server's LAN address. Add Traefik's address, as Home Assistant sees it, to Trusted proxies (we did not test which address that is).
Check it worked. curl -I https://ha.<your-domain>/ returns an HTTP status line over HTTPS.
Without Traefik: Caddy#
Caddy gets Let's Encrypt certificates for a public domain by itself, or makes a local one with tls internal. Save this as ~/docker_volumes/caddy/docker-compose.yml (caddy:2.11.7 is the latest release read in October 2026). Host networking lets Caddy reach Home Assistant on 127.0.0.1:
services:
caddy:
image: caddy:2.11.7
container_name: caddy
restart: unless-stopped
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./data:/data
- ./config:/config
The Caddyfile next to it, for a public domain:
ha.example.com {
reverse_proxy 127.0.0.1:8123
}
For a name used at home only, use tls internal:
ha.home.arpa {
tls internal
reverse_proxy 127.0.0.1:8123
}
Start it, and add 127.0.0.1 as the trusted proxy in Home Assistant:
mkdir -p ~/docker_volumes/caddy/data ~/docker_volumes/caddy/config cd ~/docker_volumes/caddy docker compose up -d curl -I https://ha.example.com/
For a local certificate, each device must trust Caddy's root. Copy it out:
docker exec caddy find /data -name root.crt docker cp caddy:<path-from-find> ./caddy-root.crt
Install caddy-root.crt as a trusted root on each device (Windows: Trusted Root Certification Authorities; macOS: Keychain Access, Always Trust; Linux: your CA store). These device steps are not from the Caddy docs.
Tip: A certificate error usually means the Caddyfile name differs from the DNS record. Let's Encrypt needs ports 80 and 443.
Security and testing#
A model now makes decisions for you, so limit what it can do.
| Control | How |
|---|---|
| Expose the minimum | Entities are opt-in. Fewer than 25, no locks or garage doors for a small model |
| Ollama and Wyoming have no login | Keep ports 11434, 10300 and 10200 on your LAN; firewall them to Home Assistant's address; never forward them on the router |
| Whose permissions | In the assistant's settings, Acts as user picks the Home Assistant user; the docs say it can only do what that user may do |
| Piper web UI | Off by default and has no authentication. Do not enable it unless you set --web-server-allow |
| Secrets | No tokens in Compose files. For Whisper's --hass-token, use WYO_WHISPER_HASS_TOKEN_FILE |
Quick tests on Linux after each change:
cd ~/docker_volumes/wyoming-voice docker compose ps docker compose logs --tail=100 whisper piper curl http://<ollama-host>:11434/api/tags
On Windows run the same docker commands in PowerShell and curl.exe. On Mac use Terminal.
Common mistakes#
These come from the docs' warnings, the issue trackers and common AI assistant answers.
| Mistake | Why it happens | Do this instead |
|---|---|---|
| Using a model without the tools badge | Issue #154192 (closed) shows gemma3:12b does not support tools; #140441 shows "Unexpected error during intent recognition" | Pick a model with the badge, or turn Control off |
| Turning on Think before responding with qwen3 | Issue #167154 (open): tool calls planned in the thinking text never run | Leave it off (the default); test with llama3.2 first |
| Exposing every entity | The docs warn of slower matching and a bigger prompt | Expose fewer than 25 entities |
Leaving Ollama on 127.0.0.1 | It binds to loopback by default (FAQ) | Set OLLAMA_HOST (Step 2) and firewall the port |
| Running Ollama on a laptop that sleeps | Issue #187424 (open): about 2 minutes of hanging when the server is unreachable | Use an always-on machine; test with curl first |
| Retrying a failed Ollama setup | Issue #163232 (open): one user fixed it by deleting all Ollama entries and restarting | Remove the failed entry, restart, add it once |
| Docker Desktop for Home Assistant Container | The docs say it will not work | Use Home Assistant OS in a VM, or Linux with Docker Engine |
| Old or unpinned Whisper and Piper images | Whisper before 3.8.0 boot-looped offline (#92, #93); Piper 2.4.3 sent telemetry (#64) | Pin 3.8.1 and 2.5.2 |
AI assistants: inventing rhasspy/wyoming-whisper:gpu | The GPU image is not on Docker Hub (#115, #70) | Build Dockerfile.gpu, as the README says |
AI assistants: adding ollama: to configuration.yaml | Copied YAML habits; the integration is UI-only | Use Add integration > Ollama |
Tip: When a command fails, open the assistant's Debug view first. It shows whether speech-to-text, the model or the tool call failed.
Tip: If Whisper mishears device names, add entity aliases (Home Assistant docs). Whisper can also read the names itself with
--hass-token, which needs a long-lived token.
Tip: Home Assistant's own sentences handle "turn on the kitchen light" without the model when Prefer handling commands locally is on. That is faster and uses no GPU.
Troubleshooting#
| Problem | Solution |
|---|---|
does not support tools | The model lacks the tools badge. Pull another one (llama3.2, llama3.1) |
| "Unexpected error during intent recognition" | Generic message. Open Debug, then check Ollama with curl http://<ollama-host>:11434/api/tags and ollama ps |
| Adding the Ollama entry fails | Check the URL (http://, port 11434) with curl; remove old failed entries and restart (#163232) |
| The reply is very slow | ollama ps: 100% CPU means no GPU. Choose a smaller model |
| No voice reply, text works | Settings > System > Network: Local Network URL to Automatic |
| Whisper restarts in a loop with no internet | Use 3.8.1; with models in /data, add WYO_WHISPER_LOCAL_FILES_ONLY: "true" |
| The browser microphone does nothing | Plain HTTP on an IP address. Use HTTPS or localhost |
| A new Piper voice does not appear | Reload the Piper integration (Piper README) |
| No assistants listed | Add assist_pipeline: to configuration.yaml and restart |
Logs: docker compose logs --tail=100 whisper piper; Ollama on Linux journalctl -u ollama --no-pager --follow --pager-end; on Mac cat ~/.ollama/logs/server.log; on Windows explorer %LOCALAPPDATA%\Ollama.
Known bugs (open, October 2026)#
- Issue #187424: no request timeout when the Ollama server is unreachable; the pipeline hangs about 2 minutes.
- Issue #167154: qwen3 with thinking on may plan tool calls that never execute. One report on 2026.4.0.
- Issue #163232: the first Ollama setup can fail with an "invalid" address; deleting entries and restarting helped one user.
- Wyoming #115 and #70: GPU image tags are not published to Docker Hub.
Updates and backups#
Update. Read the release notes, change the tags in docker-compose.yml, then:
cd ~/docker_volumes/wyoming-voice docker compose pull docker compose up -d docker compose logs --tail=100 whisper piper
Home Assistant Container updates the same way from its own Compose folder (the docs advise stop_grace_period: 60s). On Linux, update Ollama by running the installer from Step 1 again; our Ollama guide has the details.
Back up. The models and voices are in whisper/data and piper/data. Keep them: with --local-files-only you never download again.
cd ~/docker_volumes/wyoming-voice tar -czf "backups/wyoming-voice-$(date +%F).tar.gz" whisper piper docker-compose.yml
Run it at 03:00 with crontab -e (Linux and Mac): 0 3 * * * cd ~/docker_volumes/wyoming-voice && tar -czf "backups/wyoming-voice-$(date +\%F).tar.gz" whisper piper docker-compose.yml. Back up Home Assistant's configuration folder separately.
On Windows:
Compress-Archive -Path "$HOME\docker_volumes\wyoming-voice\whisper","$HOME\docker_volumes\wyoming-voice\piper","$HOME\docker_volumes\wyoming-voice\docker-compose.yml" -DestinationPath "$HOME\docker_volumes\wyoming-voice\backups\wyoming-voice-$(Get-Date -Format yyyy-MM-dd).zip"
Schedule it with Task Scheduler (Create Basic Task, daily, 03:00, program powershell.exe).
Restore test. Unpack one archive into a new empty folder, never over the live one, and check that the models are there:
mkdir -p /tmp/restore-test && tar -xzf backups/wyoming-voice-<date>.tar.gz -C /tmp/restore-test ls /tmp/restore-test/whisper/data
Performance and resources#
- Speech speed (Home Assistant docs): Whisper needs about 8 seconds per command on a Raspberry Pi 4 and under 1 second on an Intel NUC. Piper makes about 1.6 seconds of speech per second on a Pi with medium voices.
- Model memory: the download sizes above are a floor. A larger context window (default 8k) suits bigger homes; a smaller one lowers Ollama's RAM use.
- Keep alive: the default
-1keeps the model loaded. Set seconds to free the memory after use. - Whisper: bigger models are more accurate but slower. Start with
base-int8(tiny-int8on a Pi). - Monitor:
docker statsfor Whisper and Piper;ollama psfor the model and whether it sits on the GPU or CPU. - Faster commands: turn on Prefer handling commands locally and expose few entities.
We measured nothing ourselves; the numbers are the projects' own.
FAQ#
Can the voice path really run without the internet? After the downloads, yes. The table in "What stays local" lists what downloads once.
Do I need a GPU? The docs do not require one. A GPU speeds up answers.
Which model should I use? Start with llama3.2 or llama3.1. Only models with the tools badge can control devices.
Can Whisper and Piper run on another machine? Yes. The Wyoming docs say so; add the Wyoming Protocol integration with that machine's address and port.
Can I use the Speaches guide's server instead? No. Speaches offers an OpenAI-style API; Home Assistant talks Wyoming, so this guide uses the Wyoming Whisper image.
Can I use my phone as the microphone? Yes, with the Companion app on Android or Apple devices, or a voice device such as the Voice Preview Edition.
Sources#
- Home Assistant Ollama integration, local voice assistant, Wyoming Protocol, exposing entities, best practices, troubleshooting Assist, HTTP integration and Linux install - read October 2026
- Home Assistant release 2026.10.4 and Ollama release v0.40.13 - read October 2026
- Ollama docs (FAQ, Windows, macOS, Linux, context length) and download page; model pages llama3.2, llama3.1, mistral, qwen3, qwen3.5, gemma3 - read October 2026
- Wyoming Faster Whisper v3.8.1 and Wyoming Piper v2.5.2 (READMEs, changelogs, Dockerfiles), Docker Hub wyoming-whisper and wyoming-piper - read October 2026
- Home Assistant apps (Whisper, Piper docs), Caddy v2.11.7, Traefik file provider, MDN getUserMedia and Secure contexts - read October 2026
- GitHub issues home-assistant/core #140441, #154192, #163232, #167154, #187424; wyoming-faster-whisper #92, #93, #115; wyoming-piper #64, #70 - read October 2026
Checked against the official docs on 2026-10-30.