A glowing voice waveform inside concentric rings, for the post on building a Jarvis-style voice assistant

I built a Jarvis-style voice assistant for my house (and what it really costs)

I wanted to talk to my house like Tony Stark does: “turn the office lights off”, “what’s on my calendar?”, “play some music in the kitchen”. I already ran Home Assistant, so I didn’t need to buy anything. I needed to stitch a few pieces together.

It works. The first voice sounded stiff, so I moved to ElevenLabs and its Daniel voice, which is far more fluent.

The chain

Everything goes through Home Assistant’s built-in voice system, Assist. A spoken request takes four steps:

  1. Speech to text turns my voice into words. This is Whisper, which runs on my own server.
  2. The brain is Google Gemini. It gets the words and works out what I want and which devices to use.
  3. Actions happen in Home Assistant: lights, speakers, reminders.
  4. Text to speech speaks the reply. I started with Piper, another local add-on, and now use ElevenLabs with the Daniel voice.

The microphone and speaker are an old Samsung tablet in the office running the Home Assistant app in push-to-talk mode. I skipped a wake word on purpose, because a button is more reliable than a box that’s always listening. Typed commands go through the same pipeline, which made testing easy.

Keeping it private

Gemini only sees the text of what I ask and the names of the devices I’ve let it control. It never gets recordings of my voice. I keep speech recognition on my own server for that reason.

The voice is the one trade-off. ElevenLabs is a cloud service, so the text of each reply goes to it to be spoken. My voice still stays in the house.

I also use the paid Gemini tier. Google’s free tier can use your prompts for training and have humans review them, and the paid tier doesn’t.

What it costs

I set up a prepaid billing account with £10 of credit and auto-reload switched off, so it can’t run away with my money. The model is one of the cheap fast ones, at roughly $0.25 per million tokens in and $1.50 out.

My estimate for normal use is between £0.75 and £3.80 a month. I’ll update this post once I have a few weeks of real usage in the Google console.

The voice is a separate cost. ElevenLabs’ Starter plan is $6 a month (about £4.50) and gives 30,000 credits a month. I’ve used 9,738 in my first two weeks. That brings the total to roughly £5 to £8.50 a month.

One thing surprised me: subscriptions don’t count. Home Assistant can’t use my Gemini subscription. It needs an API key, which is billed separately.

Things that went wrong

  • The microphone wouldn’t work. Browsers only allow microphone access on secure (https) pages, and my Home Assistant was on plain http. I had to put it behind my reverse proxy with a proper certificate first.
  • The tablet said “name not resolved”. I’d set a second DNS server (1.1.1.1) on its Wi-Fi as a safety net, so it sometimes skipped my Pi-hole and couldn’t find my internal address. Removing the extra DNS fixed it.
  • Gemini refused to answer questions about my calendar. Its safety filter blocked everything once I exposed the full calendar. A small helper that holds only the next event’s title and time fixed it.
  • It tried to play music on the wrong speaker. It kept picking an Echo Dot, which can’t play it. I hid the Echos and TVs from the assistant so it only sees speakers that work. Nothing was removed from Home Assistant.

What’s still not done

  • Daniel is far more fluent than where I started, but it still isn’t Jarvis. Next I’ll try a butler-style personality in Gemini’s instructions, which is free and should change a lot.
  • Speaker output goes through the tablet for now. I want it coming out of the proper speakers.
  • There’s no wake word.

Would I recommend it?

If you already run Home Assistant, yes. It took an afternoon to set up and costs under £10 a month to run. It’s the first time voice control in my house has felt useful instead of a party trick. The next post covers the screen I built to go with it.

Leave a Comment

Your email address will not be published. Required fields are marked *