A smart home that isn't listening for someone else
Say the wake word to a store-bought smart speaker and your voice leaves the building. It goes to a data center in another state, gets turned into text there, and comes back as an instruction to a lamp that is eight feet away from you. If that company's servers have a bad night, your lights stop working. In your own house.
None of that is technically necessary. It's a business model.
Home Assistant is the open version. It runs on a small computer in your house, it talks to your devices directly, and it keeps working when your internet doesn't. Mine lives on a single board computer that pulls less power than a light bulb.
Start here, not with voice
Install it and let it look around your network. It'll find things on its own, more than you expect. Get your lights and switches showing up, build one automation that actually does something you want, and live with it for a week.
The reason to go slow is that this thing is deep. It will absorb as much time as you hand it. Get one useful thing working before you start building a cathedral.
The wall panel
I've got a small computer behind a screen in the living room that shows the house at a glance. It's a four inch touchscreen next to a 75 inch TV, which is a ridiculous sentence, but the little one is the control panel and the big one is for everything else.
The trick is running the browser in kiosk mode so it's just the dashboard, no address bar, no tabs, nothing to accidentally close. Point it at your Home Assistant address, tell it to open at that exact size on that exact screen, and set it to start on boot.
Two stupid things that cost me real time, so they don't cost you any.
The browser command is chromium, not chromium-browser. That name changed and half the guides online still have the old one. You get a confusing "command not found" and start doubting the whole approach over seven characters.
And a fresh browser on a machine with no one sitting at it will pop up a keychain password prompt on launch and just sit there blocking everything. There's a flag to tell it to use basic password storage instead. One flag, problem gone. Nobody mentions it because everybody hits it once and forgets.
Voice, without the cloud
This is the part people assume is impossible. It isn't. It's three jobs and you can run all three yourself.
- Hearing the wake word. A small always-listening program that does nothing but wait for one specific phrase. Runs fine on a tiny computer. Mine listens for "Hey Jarvis," because I'm not subtle.
- Turning speech into text. This is the heavy one. It wants a machine with a graphics card.
- Turning text back into a voice. Also happier with a graphics card, and this is where you get to pick what your house sounds like.
They don't have to live on the same box. The little computer by the couch just listens. When it hears the wake word it ships the audio over to the machine in the other room that has the graphics card, and that machine does the thinking. Nothing leaves the house at any point.
Worth knowing before you start: the wake word part is the easy half. I got that listening and working and then hit a wall, because the pipeline isn't finished until the speech-to-text and text-to-speech pieces exist somewhere too. If you only stand up the listener, you get a system that knows you're talking to it and has no idea what you said. Plan for all three from the start.
What it's actually worth
Speed, mostly. A local voice command doesn't make a round trip to another state, so the response is close to instant in a way the store-bought ones aren't.
And the failure mode changes completely. When the internet goes out here, the lights still work, the automations still run, and the voice still answers. That's the whole argument in one sentence.
You do not need the voice half to get value out of this. A local dashboard that controls your house and keeps running during an outage is already worth the afternoon.
Local smart-home control, a wall panel, and optional local voice. Home Assistant runs on an 8GB single-board computer; the voice pipeline's heavy pieces want a box with a GPU. Replace every value in angle brackets with your own.
1. Install Home Assistant and let it discover
Install it on an always-on low-power box (a dedicated OS image is the easiest path). Open its web UI, create your account, and let it auto-discover devices before you build anything.
http://127.0.0.1:<port> # or the box's LAN address from another device
# Settings -> Devices & Services -> check what it already found.
# get lights/switches showing, build ONE automation, live with it a week.
2. Stand up the wall panel (browser in kiosk mode)
A cheap touchscreen on a small computer, running a browser locked to the dashboard, set to launch on boot.
chromium --kiosk --password-store=basic \
--window-size=<w>,<h> --window-position=<x>,<y> \
"http://<home-assistant-address>:<port>/<dashboard>"
3. The two flags that cost real time
These are the whole reason this log exists. Both are one-liners once you know them.
# BUG 1: the binary is `chromium`, NOT `chromium-browser`.
# the name changed; old guides give "command not found". check yours:
command -v chromium
# BUG 2: a headless machine pops a keychain unlock prompt on launch
# and blocks forever. this flag skips it:
--password-store=basic
4. Local voice = three separate jobs
Voice on Home Assistant is a pipeline of three pieces that talk over the Wyoming protocol. They do NOT have to be on the same box: the listener sits by the couch, the heavy two live on a machine with a GPU.
# 1. WAKE WORD - tiny, always-listening, runs on the small box
# (openWakeWord). waits for one phrase, e.g. "Hey Jarvis".
# 2. SPEECH-TO-TEXT - the heavy one, wants a GPU (Whisper).
# 3. TEXT-TO-SPEECH - also GPU-happy, picks your house's voice (Piper).
# Settings -> Voice assistants -> wire all three into one pipeline.
Plan for all three from the start
The wake word is the easy half and it feels like progress. But a listener with no speech-to-text behind it just knows you're talking and has no idea what you said. Stand up all three, or you have a doorbell that can't take a message.