Lokale Sprachsteuerung in Home Assistant mit Whisper & Piper
Teil 4 von 6 der Reihe Home Assistant ohne Cloud

Inhalt
Cloud-abhängige Sprachassistenten wie Amazon Alexa, Google Assistant und Apple Siri basieren auf externen Servern für die Spracherkennung (ASR), die Aktivierungserkennung und die Verarbeitung natürlicher Sprache (NLP). Diese Abhängigkeit verursacht Latenzen, schafft Anfälligkeiten bei Internetausfällen und wirft erhebliche Datenschutzbedenken bezüglich permanenter akustischer Überwachung auf. Die Implementierung einer vollständig lokalen Sprachsteuerungsarchitektur in Home Assistant über das Wyoming-Protokoll – durch die Kombination von OpenAI Whisper für Speech-to-Text (STT) und Piper für neuronales Text-to-Speech (TTS) – führt Sprachbefehle in Bruchteilen von Sekunden aus, komplett innerhalb des lokalen Netzwerks.
1. Architektonische Grundlagen: Die Wyoming-Sprachpipeline
Die lokale Sprachverarbeitung in Home Assistant operiert als modulare, entkoppelte Pipeline, in der Audioströme sequenziell ohne externe API-Aufrufe verarbeitet werden:
- Wake-Word-Erkennung (openWakeWord / microWakeWord): Leichte KI-Modelle analysieren kontinuierlich die Mikrofoneingaben – openWakeWord auf dem Home-Assistant-Server, dem der Satellit dafür dauerhaft Audio streamt, microWakeWord direkt auf der Satelliten-Hardware (z. B. ESP32-S3) –, um die Pipeline bei Erkennung des Aktivierungswortes zu starten.
- Speech-to-Text (Whisper): Audiopakete werden über das Wyoming-Protokoll an den lokalen Whisper-Container gestreamt und in strukturierte Zeichenketten transkribiert.
- Absichtserkennung (Home Assistant Assist): Natürliche Sprachparser gleichen die transkribierte Zeichenkette mit definierten Entitäten, Räumen und Automatisierungs-Aliasnamen ab.
- Text-to-Speech (Piper): Der Antworttext wird durch Piper in eine natürlich klingende Sprachausgabe synthetisiert und an den Lautsprecher des Satelliten zurückgestreamt.
2. Schritt-für-Schritt-Installation der Whisper- & Piper-Add-ons
Die Bereitstellung lokaler Sprachdienste erfordert die Installation dedizierter Container-Add-ons unter Home Assistant OS oder in überwachten Docker-Umgebungen:
- Installation des Whisper-Add-ons: Unter Einstellungen > Add-ons > Add-on Store ist nach Whisper zu suchen. Bei der Konfiguration muss die passende Modellgröße gewählt werden:
tiny-int8oderbasefür reine CPU-Server (Raspberry Pi 4/5) odermediumfür Systeme mit GPU-Beschleunigung oder Google Coral TPUs. - Installation des Piper-Add-ons: Nach der Installation des Piper-Add-ons wird im Konfigurationsbereich das gewünschte neuronale Sprachmodell (z. B.
de_DE-thorsten-mediumfür Deutsch) ausgewählt und der Dienst gestartet. - Konfiguration der Wyoming-Integration: Unter Einstellungen > Geräte & Dienste > Integration hinzufügen wird nach Wyoming Protocol gesucht und sowohl Whisper (Standardport
10300) als auch Piper (Standardport10200) hinzugefügt.
3. Schritt-für-Schritt-Konfiguration der Assist-Pipeline
Sobald die Verarbeitungsmodule integriert sind, muss eine einheitliche Sprachassistenten-Pipeline eingerichtet werden:
- Erstellung einer Sprachpipeline: Unter Einstellungen > Sprachassistenten > Pipeline hinzufügen ist ein aussagekräftiger Name wie
Lokaler Assist - Deutschzu vergeben. - Zuweisung lokaler Engines: Als Sprache-zu-Text-Engine wird Whisper, als Konversationsagent Home Assistant und als Text-zu-Sprache-Engine Piper konfiguriert.
- Aktivierung des lokalen Wake-Words: Für die Aktivierungserkennung auf dem Home-Assistant-Server wird openWakeWord gewählt und ein passendes Schlüsselwort (z. B.
Okay NabuoderHey Jarvis) festgelegt.
Produktionsreifes ESPHome-Satelliten-YAML
Um Sprache aufzunehmen und Antworten ohne Cloud-Hardware auszugeben, kann ein ESP32-S3-Sprachsatellit (z. B. ESP32-S3-BOX-3) mit folgender ESPHome-Konfiguration betrieben werden:
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. Zusammenfassung & Mehrwert
Was sich damit erreichen lässt: Die erfolgreiche Bereitstellung einer vollständig autonomen, lokalen Sprachsteuerungsarchitektur in Home Assistant mit dem Wyoming-Protokoll, Whisper STT, Piper TTS und ESPHome-basierter Hardware-Satelliten.
Resultierender Mehrwert: Die Sprachsteuerung im Smart Home wird komplett unabhängig von Cloud-Servern Dritter. Privatsphäre und akustische Telemetriedaten bleiben strikt innerhalb des lokalen Netzwerks isoliert, was jegliches Profiling und Datenabfischen ausschließt. Darüber hinaus entfällt das Routing über externe Server, wodurch Sprachbefehle in weniger als einer Sekunde verarbeitet werden und eine 100-prozentige Verfügbarkeit auch bei Internetausfällen garantiert ist.
Fragen und Antworten
Funktioniert die Sprachsteuerung bei einem Internetausfall vollständig?
Die Kette selbst schon, vom Aktivierungswort über Whisper und Assist bis zu Piper, denn keines ihrer Glieder verlässt das lokale Netz. Ausführen lässt sich ein Befehl aber nur an Geräten, die Home Assistant selbst im lokalen Netz ansteuert; eine Integration, die über die Cloud des Herstellers schaltet, fällt mit dem Internet aus, gleich wie gut der Satz erkannt wurde. Auch ein Wechsel des Whisper-Modells oder der Piper-Stimme braucht eine Verbindung, weil die Add-ons Modelle und Stimmen beim ersten Gebrauch herunterladen.
Warum führt Assist einen Satz nicht aus, den Whisper richtig erkannt hat?
Weil der eingebaute Konversationsagent von Home Assistant keinen freien Text deutet. Er gleicht den erkannten Satz mit festen Satzmustern und mit den Namen und Aliasnamen von Entitäten und Räumen ab. Ein Satz, der eine Lampe beim Namen nennt und sie einschalten soll, passt zu einem Muster; eine Bemerkung wie „Hier ist es zu dunkel“ passt zu keinem, auch wenn Whisper jedes Wort richtig transkribiert hat.
Drei Schritte helfen, in dieser Reihenfolge:
- Der Blick auf den Durchlauf. In den Einstellungen der Sprachassistenten lässt sich jeder Durchlauf einer Pipeline nachverfolgen, samt dem Text, den Whisper geliefert hat, und dem, was Assist daraus gemacht hat. Daran ist sofort zu erkennen, ob der Fehler bei der Erkennung oder beim Abgleich liegt.
- Aliasnamen. Eine Entität darf mehrere Namen tragen, und die Wörter, die im Alltag wirklich fallen („Deckenlampe“, „großes Licht“), gehören genau dorthin.
- Eigene Sätze. Eine Automatisierung mit einem Satz als Auslöser reagiert auf frei gewählte Formulierungen und kann danach beliebige Aktionen ausführen, bei Bedarf mehrere auf einmal.
Quellen
Home Assistant ohne Cloud
- Zigbee2MQTT vs. ZHA: Aufbau eines ausfallsicheren Mesh-Netzwerks in Home Assistant
- ESPHome und ESP32 in der Praxis: Eigene Cloud-freie Umweltsensoren entwickeln
- Präsenzerkennung 2.0: mmWave-Radare (LD2410/LD2450) in der Lichtautomatisierung
- Lokale Sprachsteuerung in Home Assistant mit Whisper & Piper
- WireGuard & Tailscale DMZ: Sicherer externer Zugriff auf Home Assistant und eigene Server
- Lokales Energiemanagement: Integration von PV-Wechselrichtern und Batteriespeichern über Modbus TCP