Continued from Part 1, where I ripped out the Hue Bridge and got all the lights working on ZHA.
The Voice Control Question
At the end of Part 1, everything worked except voice control. The last checkbox on Issue #9.
Two options: set up Google Cloud manually (free, but you have to deal with OAuth and consent screens and API keys), or pay $6.50/month for Nabu Casa and have it just work.
I went with the free option first. Obviously.
Three Sessions Down the Drain
Sessions 113 through 115. Created a GCP project. Enabled the Assistant API. Clicked through all the OAuth consent screen stuff. Generated credentials. Got the Google Assistant SDK installed in Home Assistant.
And it kind of worked?
“Hey Google, broadcast that dinner’s ready”—worked. “Hey Google, play the news on bedroom speaker”—worked. “Hey Google, play Stuff You Should Know podcast”—“something went wrong.”
Podcasts just… didn’t work. Tried different phrasings. Tried different podcast names. Checked the device names. Read a bunch of forum threads. Apparently the SDK is fine for broadcasts and simple queries but media playback is flaky. Podcasts especially.
I spent two sessions on this. Two sessions debugging OAuth scopes and reading error logs for something that was never going to work properly.
Fine. Nabu Casa It Is.
Session 117. Signed up for Nabu Casa. Created an account, linked it to Home Assistant, connected Google Home.
Ten minutes. Maybe less.
“Hey Google, turn on downstairs lights.” Lights on.
“Hey Google, activate bedroom relax.” Scene activates.
That’s it. That’s all it took.
I’d burned four hours across two sessions trying to save $6.50 a month. The math doesn’t work. At all.
The lesson isn’t “always pay for the easy option.” Sometimes the DIY path is worth it. But when something exists specifically to solve your exact problem, and it costs less than a fancy coffee, maybe just… use it.
Small Stuff That Mattered
Once voice control worked, I realized my naming was bad.
“Hey Google, turn on living and dining.” Awkward. “Hey Google, activate living concentrate.” Nobody talks like that.
So I renamed things:
- “Living and Dining” became “Downstairs lights”
- “Concentrate” scenes became “Focus”
- “Dimmed” scenes became “Dim”
Now it’s “Hey Google, activate downstairs focus.” Actually sounds like something a person would say.
One catch: Home Assistant’s REST API doesn’t let you rename entities. You have to stop HA, edit the JSON file directly (it’s in .storage/core.entity_registry), and restart. Annoying, but it works.
The Acceptance Criteria Thing
Here’s what kept the whole project from stalling out:
- [x] All 11 lights respond via ZHA
- [x] All 4 buttons paired and configured
- [x] All 6 automations working
- [x] Voice control via Google Home working
- [x] Hue bridge decommissioned
- [x] No Hue entities remain in HA
Six checkboxes. The issue stayed open until all six were checked.
Without that list, I would’ve stopped after the lights worked. “Voice control? I’ll get to it.” And I never would have. The checkboxes made “done” mean something specific.
Session 117 checked the last box. Issue closed.
The Full Timeline
| Sessions | What happened |
|---|---|
| 108-109 | Paired all the hardware |
| 110 | Groups, scenes, basic dashboard |
| 111-112 | Automations |
| 113-115 | DIY Google integration (partial success) |
| 116 | Dashboard polish, bug fixes |
| 117 | Nabu Casa, voice control, done |
Ten sessions total. The DIY detour cost me two of them. But honestly, I needed to try it. Otherwise I’d always be wondering if I was paying for something I could’ve done myself. Now I know: I was paying for something that actually works.
What’s Different Now
Lights are faster. No round-trip through Philips servers anymore.
The IKEA bulbs actually fade properly now. The whole reason I started this—fixed.
I have physical buttons. Dim the bedroom lights without finding my phone or talking to the ceiling.
Voice control works through my own system, with Nabu Casa as the bridge to Google. Not through Philips.
The Hue Bridge is in a drawer somewhere. Maybe I’ll sell it. Probably I’ll forget about it.
Migration tracked in GitHub Issue #9. Ten sessions, two days, one fewer hub on the network.
Written with Claude.