Dominic Böttger

← Zurück zum Blog

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:

  1. Surface Pro 6 mit Linux und dem linux-surface Kernel
  2. Home Assistant mit installierten Whisper und Piper Add-ons
  3. 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

  1. Zu Einstellungen → Geräte & Dienste → Integration hinzufügen gehen
  2. Nach Wyoming suchen
  3. Die IP-Adresse des Surface und Port 10700 eingeben
  4. Der Satellite sollte als “Surface Kiosk” erscheinen

Assist Pipeline konfigurieren

  1. Zu Einstellungen → Sprachassistenten gehen
  2. Eine Pipeline erstellen oder bearbeiten
  3. 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 alsamixer prüfen

Audio bricht ab:

  • Auf PulseAudio-Konflikte prüfen: systemctl --user stop pipewire pulseaudio
  • Exklusiven ALSA-Zugriff sicherstellen

Hohe Latenz:

  • --trigger-level auf 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:

  1. Wake-Word-Erkennung an Home Assistant auslagern — erfordert das openWakeWord Add-on
  2. 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

Aktuelle Blogbeiträge