OHF-Voice/linux-voice-assistant

Voice satellite for Home Assistant using the ESPHome protocol

What it solves

This project turns any Linux device into a smart voice satellite for Home Assistant. You can talk to your home automation system from a custom speaker without needing a cloud service, and it can detect wake words locally so it is always listening without sending audio to the cloud.

How it works

It runs on a full Linux system (with PulseAudio or PipeWire for audio) and connects to Home Assistant using the ESPHome protocol. When you say a wake word (like "Okay Nabu"), the OpenWakeWord or MicroWakeWord model detects it on the device, then the audio is streamed to Home Assistant's Assist pipeline for speech-to-text, intent handling, and text-to-speech. It also supports timers, announcements, and continuing conversations. Microphone arrays with DSP chips (like Satellite1 or Respeaker) can handle far-field audio processing with noise suppression and echo cancellation.

Who it's for

People who want to build their own voice-controlled smart speaker at home, especially those using Home Assistant and who prefer a Linux-based device over a microcontroller-only satellite. It is also for hobbyists who want to fine-tune wake words, integrate buttons/LEDs, or experiment with PipeWire.

Highlights

  • Local, on-device wake word detection with OpenWakeWord or MicroWakeWord, supporting multiple wake words and languages
  • Seamless integration with Home Assistant's Assist pipeline, including announcements, start/continue conversations, and timers
  • Runs on common hardware: x64 or ARM64 with 1GHz CPU and 512MB RAM; can fit on a Raspberry Pi Zero 2W or Pi 3
  • Includes a WebSocket API for attaching peripherals like buttons and LEDs
  • Ships as Docker images, a Home Assistant add-on, or a ready-to-flash Raspberry Pi image

Related

  • Project
  • Project
  • Project
  • Project
  • Project