Veröffentlicht am 3. Januar 2026 von Dominic Böttger (vor 3 Monaten) · 6 Min. Lesezeit
Das Surface Pro 6, das in der Schublade verstaubt? Es ist tatsächlich ein hervorragender Kandidat für einen Home Assistant Voice Satellite. Ursprünglich für Microsoft Teams Konferenzräume konzipiert, verfügt das Surface Pro über hochwertige digitale MEMS-Mikrofone mit Hardware-Beamforming — was es überraschend gut für den Einsatz als Sprachassistent geeignet macht.
Warum das Surface Pro 6 als Voice Satellite glänzt
Das Surface Pro 6 wurde mit Videokonferenzen im Sinn entwickelt. Microsoft hat es mit Funktionen ausgestattet, die sich perfekt für den Einsatz als Sprachassistent eignen:
Konferenz-taugliches Mikrofon-Array
Das Surface Pro verfügt über ein Dual-Far-Field-Mikrofon-Array mit mehreren Vorteilen:
- Digitale MEMS-Mikrofone: Hochwertige mikroelektromechanische Systemmikrofone mit exzellentem Signal-Rausch-Verhältnis
- Lineares Array-Design: Optimal platzierte Mikrofone ermöglichen Hardware-Beamforming
- Beamforming-Technologie: Das Mikrofon-Array fokussiert auf Schall aus bestimmten Richtungen, verstärkt beabsichtigte Sprache und reduziert Hintergrundgeräusche aus anderen Winkeln
- Integrierte Rauschunterdrückung: Akustische Echounterdrückung und Hintergrundgeräuschreduzierung auf Hardware-Ebene
Diese Funktionen wurden entwickelt, damit Microsoft Teams Stimmen klar über einen gesamten Konferenzraum aufnehmen kann — dieselben Eigenschaften, die die Wake-Word-Erkennung quer durch das Wohnzimmer zuverlässig machen.
Weitere Vorteile
- Always-on-Display: Der Touchscreen kann ein Home Assistant Dashboard anzeigen
- Integrierte Lautsprecher: Keine externe Audioausgabe nötig
- Geringer Stromverbrauch: Modern Standby hält den Energieverbrauch in Grenzen
- Lüfterloses Design: Geräuschloser Betrieb (beim Surface Pro 6 i5-Modell)
- Kiosk-Modus: Perfekt für Wandmontage oder Aufsteller
Architekturübersicht
Das Setup verwendet das Wyoming-Protokoll, um das Surface mit Home Assistant zu verbinden:
┌─────────────────────────────────────────────────────────────┐
│ Surface Pro 6 │
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
│ │ wyoming- │────▶│ wyoming-satellite │ │
│ │ openwakeword │ │ (streams audio to/from HA) │ │
│ │ (local wake │ └──────────────────────────────┘ │
│ │ word detection)│ │ │
│ └─────────────────┘ │ │
└───────────────────────────────────────┼────────────────────┘
│ TCP/10700
▼
┌───────────────────────────────────────────────────────────┐
│ Home Assistant │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Whisper │ │ Piper │ │ Conversation │ │
│ │ (STT) │ │ (TTS) │ │ Agent │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
└───────────────────────────────────────────────────────────┘
- wyoming-openwakeword: Lauscht lokal auf Wake Words (“Hey Jarvis”, “Okay Nabu”, etc.)
- wyoming-satellite: Streamt Audio an Home Assistant, wenn ein Wake Word erkannt wurde
- Home Assistant: Führt Speech-to-Text (Whisper), Konversationsverarbeitung und Text-to-Speech (Piper) aus
Voraussetzungen
Vor dem Start sollte Folgendes vorhanden sein:
- Surface Pro 6 mit Linux und dem linux-surface Kernel
- Home Assistant mit installierten Whisper und Piper Add-ons
- Netzwerkverbindung zwischen Surface und Home Assistant
Falls Linux noch nicht auf dem Surface eingerichtet ist, lohnt sich ein Blick in meinen Artikel zum Beheben von Surface Pro Touch nach dem Aufwachen.
Schritt 1: Wyoming Satellite installieren
Zuerst wird der Wyoming Satellite auf dem Surface geklont und eingerichtet:
# Installationsverzeichnis erstellen
sudo mkdir -p /opt/wyoming-satellite
sudo chown $USER:$USER /opt/wyoming-satellite
cd /opt/wyoming-satellite
# Repository klonen
git clone https://github.com/rhasspy/wyoming-satellite.git .
# Virtuelle Umgebung erstellen und installieren
python3 -m venv .venv
.venv/bin/pip install --upgrade pip wheel
.venv/bin/pip install -e .
# WebRTC für Rauschunterdrückung installieren
.venv/bin/pip install webrtc-noise-gain
Benachrichtigungstöne herunterladen
mkdir -p sounds
wget -O sounds/awake.wav \
"https://github.com/rhasspy/wyoming-satellite/raw/master/sounds/awake.wav"
wget -O sounds/done.wav \
"https://github.com/rhasspy/wyoming-satellite/raw/master/sounds/done.wav"
Schritt 2: Wyoming openWakeWord installieren
Den lokalen Wake-Word-Erkennungsdienst installieren:
# Installationsverzeichnis erstellen
sudo mkdir -p /opt/wyoming-openwakeword
sudo chown $USER:$USER /opt/wyoming-openwakeword
cd /opt/wyoming-openwakeword
# Klonen und installieren
git clone https://github.com/rhasspy/wyoming-openwakeword.git .
python3 -m venv .venv
.venv/bin/pip install --upgrade pip wheel
.venv/bin/pip install -e .
Schritt 3: Audiogeräte finden
Die richtigen ALSA-Gerätenamen identifizieren:
# Aufnahmegeräte auflisten
arecord -L | grep -A1 "^plughw"
# Wiedergabegeräte auflisten
aplay -L | grep -A1 "^plughw"
Auf dem Surface Pro 6 ist das interne Audio typischerweise plughw:CARD=PCH,DEV=0.
Schritt 4: Systemd Services erstellen
openWakeWord Service
Datei erstellen unter /etc/systemd/system/wyoming-openwakeword.service:
[Unit]
Description=Wyoming openWakeWord
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=dob
Group=dob
ExecStart=/opt/wyoming-openwakeword/.venv/bin/python3 -m wyoming_openwakeword \
--uri "tcp://0.0.0.0:10400" \
--preload-model hey_jarvis \
--threshold 0.3 \
--trigger-level 1 \
--debug
WorkingDirectory=/opt/wyoming-openwakeword
Restart=always
RestartSec=1
[Install]
WantedBy=default.target
Konfigurationsoptionen:
--preload-model: Zu verwendendes Wake Word (hey_jarvis,okay_nabu,hey_mycroft,alexa)--threshold: Erkennungsempfindlichkeit (niedriger = empfindlicher, Standard 0.5)--trigger-level: Erforderliche aufeinanderfolgende Erkennungen (1 = schnellste Reaktion)
Wyoming Satellite Service
Datei erstellen unter /etc/systemd/system/wyoming-satellite.service:
[Unit]
Description=Wyoming Satellite
Wants=network-online.target
After=network-online.target wyoming-openwakeword.service
[Service]
Type=simple
User=dob
Group=dob
Environment=XDG_RUNTIME_DIR=/run/user/1000
ExecStart=/opt/wyoming-satellite/.venv/bin/python3 -m wyoming_satellite \
--name "Surface Kiosk" \
--uri "tcp://0.0.0.0:10700" \
--mic-command "arecord -D plughw:CARD=PCH,DEV=0 -r 16000 -c 1 -f S16_LE -t raw" \
--snd-command "aplay -D plughw:CARD=PCH,DEV=0 -r 22050 -c 1 -f S16_LE -t raw" \
--mic-auto-gain 5 \
--mic-noise-suppression 2 \
--wake-uri "tcp://127.0.0.1:10400" \
--wake-word-name "hey_jarvis" \
--awake-wav "/opt/wyoming-satellite/sounds/awake.wav" \
--done-wav "/opt/wyoming-satellite/sounds/done.wav" \
--debug
WorkingDirectory=/opt/wyoming-satellite
Restart=always
RestartSec=1
[Install]
WantedBy=default.target
Wichtige Parameter:
--name: Wie der Satellite in Home Assistant erscheint--mic-auto-gain: Automatische Verstärkungsregelung (0-31)--mic-noise-suppression: WebRTC Rauschunterdrückungsstufe (0-4)--wake-word-name: Muss mit dem vorgeladenen Modell in openWakeWord übereinstimmen
Schritt 5: Services aktivieren und starten
# systemd neu laden
sudo systemctl daemon-reload
# Services für Autostart aktivieren
sudo systemctl enable wyoming-openwakeword
sudo systemctl enable wyoming-satellite
# Services starten
sudo systemctl start wyoming-openwakeword
sudo systemctl start wyoming-satellite
Schritt 6: Mit Home Assistant verbinden
- Zu Einstellungen → Geräte & Dienste → Integration hinzufügen gehen
- Nach Wyoming suchen
- Die IP-Adresse des Surface und Port
10700eingeben - Der Satellite sollte als “Surface Kiosk” erscheinen
Assist Pipeline konfigurieren
- Zu Einstellungen → Sprachassistenten gehen
- Eine Pipeline erstellen oder bearbeiten
- Den Satellite als Sprachassistenten-Gerät festlegen
Testen und Fehlerbehebung
Service-Status prüfen
systemctl status wyoming-openwakeword wyoming-satellite
Live-Logs ansehen
# Wake-Word-Erkennung beobachten
journalctl -u wyoming-openwakeword -f
# Satellite-Aktivität beobachten
journalctl -u wyoming-satellite -f
Erfolgreiche Erkennung im Log
Wenn alles korrekt funktioniert, sieht man:
DEBUG:wyoming_openwakeword.handler:Detected hey_jarvis at 26300
DEBUG:root:Detection(name='hey_jarvis', timestamp=26300)
DEBUG:root:Streaming audio
DEBUG:root:Event(type='run-pipeline', data={'start_stage': 'asr'...})
Häufige Probleme
Wake Word wird nicht erkannt:
- Schwellenwert senken:
--threshold 0.2 - Mikrofonpegel mit
alsamixerprüfen
Audio bricht ab:
- Auf PulseAudio-Konflikte prüfen:
systemctl --user stop pipewire pulseaudio - Exklusiven ALSA-Zugriff sicherstellen
Hohe Latenz:
--trigger-levelauf 1 reduzieren- Sicherstellen, dass das Home Assistant Whisper-Modell im Speicher geladen ist
CPU-Auslastung beachten
Die lokale Ausführung von openWakeWord verbraucht etwa 10-15% CPU auf dem Intel Core der 8. Generation im Surface Pro 6. Das ist für ein dediziertes Kiosk-Gerät akzeptabel, aber wer den Stromverbrauch minimieren möchte, kann folgende Alternativen in Betracht ziehen:
- Wake-Word-Erkennung an Home Assistant auslagern — erfordert das openWakeWord Add-on
- Push-to-Talk verwenden — Wake Word komplett deaktivieren und per Dashboard-Button auslösen
Fazit
Die konferenztauglichen Mikrofone und der Touchscreen des Surface Pro 6 machen es zu einer hervorragenden Wahl als Home Assistant Voice Satellite. Das Beamforming-Mikrofon-Array erkennt Wake Words zuverlässig quer durch den Raum, während das Display als Always-on-Dashboard für das Smart Home dienen kann.
In Kombination mit dem linux-surface Kernel für korrekte Hardware-Unterstützung kann man alternder Surface-Hardware neues Leben einhauchen und gleichzeitig einen leistungsfähigen Sprachsteuerungspunkt für die Heimautomatisierung gewinnen.
Getestet auf Surface Pro 6 (i5-8250U), Ubuntu 24.04, linux-surface Kernel 6.18.2-surface-1, Wyoming Satellite 1.5.0, Wyoming openWakeWord 1.8.0
Geschrieben von Dominic Böttger
← Zurück zum Blog