How to Set Up Voice Control
for Your Home Assistant

A complete practical guide to adding voice control to your Home Assistant setup. From hardware to automations — in under 30 minutes, with zero cloud accounts.

Hero image

You've built your Home Assistant setup. Sensors report. Lights turn on and off. Your thermostat adjusts automatically. But there's one thing missing: walking into a room and simply telling your home what to do.

Voice control is the final piece of the puzzle — and until recently, it meant either buying into a cloud ecosystem (Alexa, Google Home) or wrestling with underpowered USB mics and flaky software. Neither is a great experience.

With the NexLine Voice Box — powered by an NVIDIA Jetson Orin Nano — you can add local, private, sub-second voice control to Home Assistant in under 30 minutes. No cloud accounts. No API keys. No skills to enable.

Why Local Matters
Unlike cloud-based voice assistants that send your audio to remote servers for processing, a local voice assistant processes everything on-device. Your voice never leaves your home. This means faster response times, full offline operation, and total privacy-first control — no data collection, no listening profiles, no third-party sharing.

What You'll Need

Before we dive in, make sure you have the following:

  • A voice assistant box with far-field microphones, a speaker, and onboard AI processing (like the NexLine Voice Box)
  • Network connection — wired Ethernet preferred, but Wi-Fi works too
  • Home Assistant server running on a Raspberry Pi 4/5, NUC, or equivalent

That's it. No cloud subscriptions. No third-party accounts. No developer API keys. The entire pipeline — speech-to-text, intent matching, text-to-speech — runs locally on the voice box.

Step 1: Connect the Hardware

Getting the hardware set up is straightforward:

  1. Plug in the power adapter to your voice box and a wall outlet.
  2. Connect to your network via the Ethernet port for best performance, or follow the Wi-Fi pairing procedure.
  3. Wait for the green LED — about 90 seconds — while the device boots and connects to your network.

When the LED glows solid green, your voice box is online and ready. It will automatically announce itself on your network via mDNS, so Home Assistant can discover it without any manual IP configuration.

Pro Tip
Place the voice box in a central location in the room — on a table, shelf, or countertop. Avoid enclosing it in cabinets or placing it behind large objects. The far-field microphone array picks up voice best with a clear line of sight across the room.

Step 2: Add the Device to Home Assistant

Home Assistant should auto-discover the voice box within seconds of it connecting to your network. Here's how to complete the setup:

  1. Open Home Assistant and navigate to Settings > Devices & Services.
  2. Look for the new device under the Discovered section — it will appear as "NexLine Voice Box" or similar.
  3. Click Configure and walk through the setup wizard:
    • Assign the device to a room (e.g., "Living Room")
    • Select your preferred wake word (options: "Hey NexLine", "Hey Jarvis", or custom)
    • Run the microphone test — speak a test phrase and confirm the audio registers

Once configured, the voice box appears as a media player and microphone entity in Home Assistant. It's now ready for voice commands — but to handle natural language properly, we need to set up the Assist pipeline.

Step 3: Configure the Assist Pipeline

The Assist pipeline is the chain of processing steps that turns your spoken words into home automation actions. Here's how to configure it:

  1. Go to Settings > Voice Assistants > Assist Pipelines.
  2. Click Add Pipeline and give it a name (e.g., "Local Voice").
  3. Configure each stage:
    • Speech-to-Text (STT): Select "NexLine Whisper" — this runs OpenAI's Whisper model locally on the Jetson Orin Nano for accurate, offline transcription.
    • Text-to-Speech (TTS): Select "NexLine Kokoro" — this provides natural-sounding spoken responses generated entirely on-device.
    • Conversation Agent: Leave the default Home Assistant conversation agent, or enable a local LLM for more flexible command parsing.
  4. Set this pipeline as the default for your voice box entity.

That's it. The pipeline is live. You can now say your wake word followed by a command, and the voice box will process it entirely locally.

Local vs Cloud
Cloud-based alternatives like Alexa or Google Home require sending your voice to remote servers for transcription and processing. With the NexLine pipeline, every stage — wake word detection, STT, intent parsing, and TTS — runs on-device. For a detailed comparison, see our breakdown of Alexa vs Google Home vs local voice control.

Step 4: Create Voice Automations

Once the pipeline is configured, you can create automations triggered by voice commands. Each automation listens for specific phrases and performs the actions you define. Below are four common scenarios with ready-to-use YAML configurations.

Simple Light Control

This automation responds to multiple trigger phrases for turning lights on and off:

YAML — Light Control Automation
alias: "Voice - Living Room Lights"
trigger:
  - platform: conversation
    command:
      - "turn on the living room lights"
      - "lights on in the living room"
      - "living room lights"
      - "turn on lights"
condition: []
action:
  - service: light.turn_on
    target:
      area_id: living_room
mode: single
YAML — Light Off Automation
alias: "Voice - Living Room Lights Off"
trigger:
  - platform: conversation
    command:
      - "turn off the living room lights"
      - "lights off"
      - "living room lights off"
condition: []
action:
  - service: light.turn_off
    target:
      area_id: living_room
mode: single

"Movie Time" Scene

Trigger a full home theater scene with a single voice command — lights dim, blinds lower, projector turns on:

YAML — Movie Time Scene
alias: "Voice - Movie Time"
trigger:
  - platform: conversation
    command:
      - "movie time"
      - "start movie"
      - "home theater mode"
      - "let's watch a movie"
condition: []
action:
  - service: light.turn_off
    target:
      area_id: living_room
  - service: cover.close_cover
    target:
      area_id: living_room
  - service: media_player.turn_on
    target:
      entity_id: media_player.projector
  - service: media_player.select_source
    target:
      entity_id: media_player.projector
    data:
      source: "HDMI 1"
  - service: media_player.volume_set
    target:
      entity_id: media_player.receiver
    data:
      volume_level: 0.35
mode: single

Temperature Control

Adjust your thermostat with natural voice commands:

YAML — Temperature Control
alias: "Voice - Set Temperature"
trigger:
  - platform: conversation
    command:
      - "set temperature to {% raw %}{{ temperature }}{% endraw %} degrees"
      - "make it {% raw %}{{ temperature }}{% endraw %} degrees"
      - "set thermostat to {% raw %}{{ temperature }}{% endraw %}"
condition: []
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.thermostat
    data:
      temperature: "{% raw %}{{ temperature }}{% endraw %}"
mode: single

Goodnight Routine

A comprehensive goodnight automation that preps the entire home for sleep:

YAML — Goodnight Routine
alias: "Voice - Goodnight"
trigger:
  - platform: conversation
    command:
      - "goodnight"
      - "good night"
      - "time for bed"
      - "bedtime"
condition: []
action:
  - service: light.turn_off
    target:
      area_id: living_room
  - service: light.turn_off
    target:
      area_id: kitchen
  - service: light.turn_on
    target:
      entity_id: light.bedside_lamp
  - service: lock.lock
    target:
      area_id: front_door
  - service: climate.set_temperature
    data:
      target:
        entity_id: climate.thermostat
      temperature: 18
  - service: media_player.turn_off
    target:
      area_id: living_room
mode: single

Step 5: Fine-Tune Wake Word Sensitivity

The wake word engine is designed to work reliably in real-world conditions, but you may need to adjust sensitivity based on your environment.

Access the wake word settings through the web interface at the voice box's IP address (find it in your router's DHCP client list or check Home Assistant). You'll see three sensitivity levels:

  • High — responds from farther away and to quieter speech, but may trigger more false positives from TV, conversations, or background noise
  • Normal — balanced for most home environments; recommended starting point
  • Low — requires a clear, direct command; best for open-plan spaces with lots of ambient noise or households with frequent TV/music use

Start with Normal and adjust up or down based on your experience. You can change this at any time without restarting the device.

Quick Test
Use the Voice Assistant Dashboard in Home Assistant to test commands manually. It shows you exactly what the voice box hears (transcribed text), what intent it matched, and what action was taken — invaluable for debugging automation triggers.

Pro Tips

Make your voice control setup more reliable and natural with these best practices:

  • Use area names consistently — name your areas (Living Room, Kitchen, Bedroom) in Home Assistant and always reference them the same way in your trigger phrases.
  • Group related commands — instead of one automation per phrase, bundle multiple trigger phrases into a single automation. This keeps your automations list clean and easier to manage.
  • Test with the Voice Assistant Dashboard before relying on voice triggers in daily use. The dashboard shows the full pipeline: audio waveform, STT output, matched intent, and execution result.
  • Enable a local LLM for the conversation agent. A small model like Qwen 3B or Llama 3.2 (both runnable on the Jetson Orin Nano) provides much more flexible natural language parsing than the default template-based conversation agent.

Troubleshooting

Even with careful setup, you may encounter issues. Here are the most common problems and their fixes:

Symptom Likely Cause Solution
"I didn't catch that" Background noise or low volume Increase wake word sensitivity or reduce ambient noise (TV, fan, HVAC)
2-second delay before response Cloud fallback instead of local pipeline Verify Assist Pipeline is set to "NexLine Whisper" for STT and "NexLine Kokoro" for TTS — not a cloud provider
Device not found in HA mDNS / network segmentation Ensure voice box and HA server are on the same subnet; check IGMP/mDNS settings on your router
Inconsistent command recognition Too many similar trigger phrases Consolidate phrases; avoid minor variations that confuse the intent matcher
No audio response from speaker Volume muted or too low Check volume level via the voice box web interface or Home Assistant media player controls

Frequently Asked Questions

How long does it take to set up voice control with Home Assistant?

With a dedicated voice assistant box like the NexLine Voice Box, you can be up and running in under 30 minutes. Hardware connects in 90 seconds, Home Assistant auto-discovers the device, and the Assist pipeline configures with a few clicks. Most of your time will be spent creating the automations that make the system useful for your specific home.

Do I need a cloud subscription for Home Assistant voice control?

No. A local voice assistant box runs everything on-device — Whisper for speech-to-text, Kokoro for text-to-speech, and your choice of conversation agent. There are no cloud accounts, no API keys, and no monthly subscription fees. Even Home Assistant's own Nabu Casa cloud is optional and unnecessary for local voice control.

Can I control voice automations beyond just lights?

Absolutely. Voice automations can trigger any Home Assistant entity or service: lights, climate, covers (blinds/shades), locks, media players, fans, sensors, and custom scripts. The "Movie Time" and "Goodnight" examples in this guide demonstrate multi-device scene control. Anything Home Assistant can do, your voice can trigger.

What if the voice box doesn't respond to my commands?

Start with the troubleshooting table above. The three most common fixes: (1) ensure you're using the local Assist pipeline, not a cloud fallback; (2) adjust wake word sensitivity if background noise is drowning out commands; (3) check that the voice box and Home Assistant server are on the same network subnet for mDNS discovery.

References & Further Reading
Home Assistant voice: HA Voice documentation — official guide for adding voice control to your setup

STT & TTS options: Whisper for transcription, Kokoro for speech synthesis — both run fully locally

Complete HA integration: The NexLine Voice Box connects to Home Assistant via the local REST API and WebSocket, providing RAG-powered voice control for all your entities and automations.