LW IT Solutions
« Blog Overview /Smart Home/Tutorials / Local Voice Control in Home Assistant with...
Read this article in other languages:

Local Voice Control in Home Assistant with Whisper & Piper

Part 4 of 6 in the series Home Assistant without the cloud

Local Voice Control in Home Assistant with Whisper & Piper
Contents
  1. 1. Architectural Framework: The Wyoming Voice Pipeline
  2. 2. Step-by-Step Installation of Whisper & Piper Add-ons
  3. 3. Step-by-Step Assist Pipeline Configuration
  4. 4. Summary & Architectural Value
  5. Questions and answers
  6. Sources

Cloud-dependent voice assistants such as Amazon Alexa, Google Assistant, and Apple Siri rely on remote servers for voice activity detection, automatic speech recognition (ASR), and natural language processing (NLP). This dependency introduces latency, creates vulnerability to internet outages, and raises severe privacy concerns regarding continuous acoustic monitoring. Implementing a fully local voice control architecture in Home Assistant using the Wyoming protocol—combining OpenAI Whisper for Speech-to-Text (STT) and Piper for neural Text-to-Speech (TTS)—enables sub-second voice command execution entirely within the local area network.

Loop of local voice control from the ESPHome satellite through Whisper and Home Assistant to the spoken answer via Piper
The Wyoming pipeline is a loop: the satellite listens, Whisper turns speech into text, Home Assistant acts on it, and Piper speaks the answer back along the same path — entirely within the local network.

1. Architectural Framework: The Wyoming Voice Pipeline

Local voice processing in Home Assistant operates as a modular, decoupled pipeline where audio streams are processed sequentially without external API calls:

  • Wake Word Detection (openWakeWord / microWakeWord): Lightweight models constantly analyze microphone input – openWakeWord on the Home Assistant server, to which the satellite continuously streams audio, and microWakeWord directly on local satellite hardware (such as ESP32-S3 devices) – to trigger pipeline activation upon detecting a keyword.
  • Speech-to-Text (Whisper): Audio packets are streamed via the Wyoming protocol to a local Whisper container, converting spoken language into structured text strings.
  • Intent Recognition (Home Assistant Assist): Natural language parser engines match the transcribed text against defined device entities, areas, and automation aliases.
  • Text-to-Speech (Piper): The response string is synthesized into natural-sounding speech audio by Piper and streamed back to the voice satellite speaker.

2. Step-by-Step Installation of Whisper & Piper Add-ons

Deploying local voice services requires provisioning dedicated container add-ons within Home Assistant OS or supervised Docker environments:

  1. Install the Whisper Add-on: Navigate to Settings > Add-ons > Add-on Store and search for Whisper. During configuration, select the appropriate model size: tiny-int8 or base for CPU-only servers (Raspberry Pi 4/5), or medium for servers equipped with GPU acceleration or Google Coral TPUs.
  2. Install the Piper Add-on: Search for and install the Piper add-on. In the configuration tab, select the preferred neural voice model (e.g., en_US-lessac-medium for English) and initialize the service.
  3. Configure the Wyoming Integration: Navigate to Settings > Devices & Services > Add Integration, search for Wyoming Protocol, and add both Whisper (default port 10300) and Piper (default port 10200).

3. Step-by-Step Assist Pipeline Configuration

Once the processing engines are integrated, a cohesive voice assistant pipeline must be established:

  1. Create a Voice Pipeline: Navigate to Settings > Voice Assistants > Add Pipeline. Assign an explicit name such as Local Assist - English.
  2. Assign Local Engines: Set the Speech-to-Text engine to Whisper, set the Conversation Agent to Home Assistant, and set the Text-to-Speech engine to Piper.
  3. Enable Local Wake Word: If using wake word detection on the Home Assistant server, select openWakeWord as the wake word engine and choose an activation keyword (such as Okay Nabu or Hey Jarvis).

Production-Ready ESPHome Satellite YAML

To capture audio and stream responses without cloud hardware, an ESP32-S3 voice satellite (such as the ESP32-S3-BOX-3) can be provisioned using the following ESPHome configuration:

esphome:
  name: "voice-satellite-livingroom"
  friendly_name: "Living Room Voice Satellite"

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

api:
  encryption:
    key: "GENERATE_YOUR_KEY_HERE"

i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO4
    i2s_bclk_pin: GPIO5
  - id: i2s_out
    i2s_lrclk_pin: GPIO15
    i2s_bclk_pin: GPIO16

microphone:
  - platform: i2s_audio
    id: sat_mic
    i2s_audio_id: i2s_in
    i2s_din_pin: GPIO6
    adc_type: external
    pdm: false

speaker:
  - platform: i2s_audio
    id: sat_speaker
    i2s_audio_id: i2s_out
    i2s_dout_pin: GPIO17

voice_assistant:
  id: va_pipeline
  microphone: sat_mic
  speaker: sat_speaker
  use_wake_word: true
  noise_suppression_level: 2
  auto_gain: 31dBFS
  volume_multiplier: 2.0

4. Summary & Architectural Value

What this tutorial achieves: The successful deployment of a fully autonomous, local voice control architecture in Home Assistant using the Wyoming protocol, Whisper STT, Piper TTS, and ESPHome-based hardware satellites.

Resulting value: Smart home voice interaction becomes completely independent of third-party cloud servers. Private conversations and acoustic telemetry remain isolated within the local network, eliminating profiling and data harvesting risks. Furthermore, removing cloud round-trip routing reduces voice command execution latency to sub-second speeds while ensuring 100% voice control availability during internet outages.

Questions and answers

Does voice control keep working completely during an internet outage?

The chain itself does, from wake word through Whisper and Assist to Piper, because none of its links leaves the local network. A command can only be carried out, however, on devices that Home Assistant controls locally itself; an integration that switches through the manufacturer’s cloud goes down with the internet connection, no matter how well the sentence was recognized. Changing the Whisper model or the Piper voice also needs a connection, because the add-ons download models and voices the first time they are used.

Why does Assist not act on a sentence that Whisper transcribed correctly?

Because Home Assistant’s built-in conversation agent does not interpret free text. It matches the recognized sentence against fixed sentence patterns and against the names of entities, areas and aliases. A sentence that names a lamp and is meant to switch it on fits a pattern; a remark such as “It is too dark in here” fits none, even if Whisper transcribed every word correctly.

Three steps help, in this order:

  1. Looking at the run. In the voice assistant settings, every run of a pipeline can be traced, including the text Whisper delivered and what Assist made of it. That shows at once whether the fault lies in the recognition or in the matching.
  2. Adding aliases. An entity may carry several names, and the words actually used in everyday speech (“ceiling lamp”, “big light”) belong exactly there.
  3. Defining custom sentences. An automation with a sentence trigger reacts to freely chosen wording and can then run any actions, several at once if needed.

Home Assistant without the cloud

  1. Zigbee2MQTT vs. ZHA: Building a Highly Reliable Mesh Network in Home Assistant
  2. ESPHome and ESP32 in Practice: Building Cloud-Free Environmental Sensors
  3. Presence Detection 2.0: mmWave Radars (LD2410/LD2450) in Lighting Automation
  4. Local Voice Control in Home Assistant with Whisper & Piper
  5. WireGuard & Tailscale DMZ: Secure External Access to Home Assistant and Self-Hosted Servers
  6. Local Energy Management: Integrating PV Inverters and Battery Storage via Modbus TCP
Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Write a comment

Experience with other devices or integrations and questions about the setup are welcome here.

The email address is not published. Required fields are marked with an asterisk.

Articles & categories

CCTV

Follow this category by RSS

Cloud & AI

All 17 articles in this category Follow this category by RSS

Data Privacy

All 19 articles in this category Follow this category by RSS

Digital Analytics

All 58 articles in this category Follow this category by RSS

Digital Marketing

All 37 articles in this category Follow this category by RSS

IT & Networks

All 19 articles in this category Follow this category by RSS

Music Production

All 17 articles in this category Follow this category by RSS

Raspberry PI

Follow this category by RSS

SaaS & Internet Earning

Follow this category by RSS

Smart Home

All 18 articles in this category Follow this category by RSS

Web Development

All 11 articles in this category Follow this category by RSS

WordPress Plugins & Tricks

All 14 articles in this category Follow this category by RSS