LW IT Solutions
« Przegląd bloga /Smart Home/Tutorials / Lokalne sterowanie głosem w Home Assistant z...
Ten artykuł w innych językach:

Lokalne sterowanie głosem w Home Assistant z Whisper i Piper

Część 4 z 6 serii Home Assistant bez chmury

Lokalne sterowanie głosem w Home Assistant z Whisper i Piper
Spis treści
  1. 1. Architektura rozwiązania: Potok głosowy Wyoming
  2. 2. Instalacja dodatków Whisper i Piper krok po kroku
  3. 3. Konfiguracja potoku Assist krok po kroku
  4. 4. Podsumowanie i wartość architektoniczna
  5. Pytania i odpowiedzi
  6. Źródła

Chmurowe asystenty głosowe, takie jak Amazon Alexa, Google Assistant czy Apple Siri, opierają się na zdalnych serwerach w zakresie detekcji aktywności głosowej, automatycznego rozpoznawania mowy (ASR) oraz przetwarzania języka naturalnego (NLP). Zależność ta generuje opóźnienia, powoduje wrażliwość na awarie internetu i budzi poważne wątpliwości dotyczące prywatności w związku z ciągłym nasłuchem otoczenia. Wdrożenie w pełni lokalnej architektury sterowania głosem w systemie Home Assistant przy użyciu protokołu Wyoming – łączącej mechanizm OpenAI Whisper dla rozpoznawania mowy (STT) oraz Piper dla syntezy mowy (TTS) – umożliwia wykonywanie komend głosowych w czasie poniżej sekundy, całkowicie w obrębie sieci lokalnej.

1. Architektura rozwiązania: Potok głosowy Wyoming

Lokalne przetwarzanie głosu w Home Assistant funkcjonuje jako modułowy, odseparowany potok, w którym strumienie audio są przetwarzane sekwencyjnie bez zapytań do zewnętrznych API:

  • Wykrywanie słowa wybudzającego (openWakeWord / microWakeWord): Lekkie modele nieustannie analizują sygnał z mikrofonu – openWakeWord na serwerze Home Assistant, do którego satelita stale strumieniuje dźwięk, a microWakeWord bezpośrednio na lokalnych satelitach sprzętowych (np. układach ESP32-S3) – aby aktywować potok po wykryciu słowa kluczowego.
  • Rozpoznawanie mowy (Whisper): Pakiety audio są przesyłane strumieniowo przez protokół Wyoming do lokalnego kontenera Whisper, który transkrybuje mowę na ustrukturyzowany tekst.
  • Rozpoznawanie intencji (Home Assistant Assist): Silniki przetwarzania języka naturalnego dopasowują transkrybowany tekst do zdefiniowanych encji, stref i aliasów automatyzacji.
  • Synteza mowy (Piper): Ciąg odpowiedzi jest zamieniany na naturalnie brzmiący sygnał audio przez silnik Piper i strumieniowany z powrotem do głośnika satelity.
Pętla lokalnego sterowania głosem od satelity ESPHome przez Whisper i Home Assistant do odpowiedzi wypowiadanej przez Piper
Potok Wyoming jest pętlą: satelita nasłuchuje, Whisper zamienia mowę na tekst, Home Assistant wykonuje polecenie, a Piper wypowiada odpowiedź tą samą drogą — w całości w sieci lokalnej.

2. Instalacja dodatków Whisper i Piper krok po kroku

Wdrożenie lokalnych usług głosowych wymaga zainstalowania dedykowanych dodatków kontenerowych w środowisku Home Assistant OS lub nadzorowanym Dockerze:

  1. Instalacja dodatku Whisper: W sekcji Ustawienia > Dodatki > Sklep z dodatkami należy wyszukać i zainstalować dodatek Whisper. W konfiguracji trzeba wybrać odpowiedni rozmiar modelu: tiny-int8 lub base dla serwerów opartych wyłącznie na CPU (Raspberry Pi 4/5) bądź medium dla systemów z akceleracją GPU lub modułami Google Coral TPU.
  2. Instalacja dodatku Piper: Po wyszukaniu i zainstalowaniu dodatku Piper, w zakładce konfiguracji należy wybrać preferowany neuronowy model głosu (np. pl_PL-darkman-medium dla języka polskiego) i uruchomić usługę.
  3. Konfiguracja integracji Wyoming: W sekcji Ustawienia > Urządzenia i usługi > Dodaj integrację należy wyszukać Wyoming Protocol i dodać zarówno usługę Whisper (domyślny port 10300), jak i Piper (domyślny port 10200).

3. Konfiguracja potoku Assist krok po kroku

Po zintegrowaniu silników przetwarzania należy skonfigurować spójny potok asystenta głosowego:

  1. Utworzenie potoku głosowego: W sekcji Ustawienia > Asystenci głosowi > Dodaj potok należy nadać precyzyjną nazwę, np. Lokalny Assist - Polski.
  2. Przypisanie lokalnych silników: Jako silnik mowy na tekst (STT) należy wybrać Whisper, jako agenta konwersacyjnego Home Assistant, a jako silnik tekstu na mowę (TTS) Piper.
  3. Aktywacja lokalnego słowa wybudzającego: W przypadku detekcji słowa kluczowego na serwerze Home Assistant należy wybrać openWakeWord jako silnik wybudzania i wskazać słowo aktywujące (np. Okay Nabu lub Hey Jarvis).

Produkcyjny kod YAML dla satelity ESPHome

W celu zbierania dźwięku i strumieniowania odpowiedzi bez użycia sprzętu chmurowego, satelita głosowy ESP32-S3 (np. ESP32-S3-BOX-3) może zostać skonfigurowany przy użyciu poniższego kodu ESPHome:

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. Podsumowanie i wartość architektoniczna

Co da się osiągnąć dzięki temu poradnikowi: Wdrożenie w pełni autonomicznej, lokalnej architektury sterowania głosem w systemie Home Assistant z wykorzystaniem protokołu Wyoming, silnika STT Whisper, silnika TTS Piper oraz satelitów sprzętowych opartych na ESPHome.

Wynikająca z tego wartość: Interakcja głosowa w inteligentnym domu staje się całkowicie niezależna od zewnętrznych serwerów chmurowych. Prywatne rozmowy oraz telemetria akustyczna pozostają ściśle odizolowane w sieci lokalnej, co eliminuje ryzyko profilowania i pozyskiwania danych. Ponadto rezygnacja z zewnętrznego routingu obniża opóźnienia wykonania komend do poziomu poniżej sekundy i gwarantuje 100-procentową dostępność sterowania głosem podczas awarii połączenia z internetem.

Pytania i odpowiedzi

Czy sterowanie głosem działa w pełni podczas awarii internetu?

Sam potok – od słowa wybudzającego przez Whisper i Assist po Piper – działa, bo żaden jego etap nie opuszcza sieci lokalnej. Wykonać polecenie da się jednak tylko na urządzeniach, którymi Home Assistant steruje sam, lokalnie; integracja przełączająca urządzenie przez chmurę producenta przestaje działać razem z internetem, niezależnie od tego, jak dobrze rozpoznano zdanie. Również zmiana modelu Whisper albo głosu Piper wymaga połączenia, bo dodatki pobierają modele i głosy przy pierwszym użyciu.

Dlaczego Assist nie wykonuje zdania, które Whisper rozpoznał poprawnie?

Dlatego, że wbudowany agent konwersacyjny Home Assistant nie interpretuje dowolnego tekstu. Porównuje rozpoznane zdanie ze stałymi wzorcami zdań oraz z nazwami encji, stref i aliasów. Zdanie, które wymienia lampę z nazwy i ma spowodować jej włączenie, pasuje do wzorca; uwaga w rodzaju „Tu jest za ciemno” nie pasuje do żadnego, nawet jeśli Whisper poprawnie zapisał każde słowo.

Pomagają trzy kroki, w tej kolejności:

  1. Przejrzenie przebiegu. W ustawieniach asystentów głosowych da się prześledzić każdy przebieg potoku, łącznie z tekstem dostarczonym przez Whisper i z tym, co zrobił z niego Assist. Od razu widać wtedy, czy błąd leży w rozpoznawaniu, czy w dopasowaniu.
  2. Nadanie aliasów. Encja może nosić kilka nazw, a słowa, które naprawdę padają na co dzień („lampa sufitowa”, „duże światło”), należą właśnie tam.
  3. Zdefiniowanie własnych zdań. Automatyzacja z wyzwalaczem w postaci zdania reaguje na swobodnie dobrane sformułowania i może potem wykonać dowolne akcje, w razie potrzeby kilka naraz.

Home Assistant bez chmury

  1. Zigbee2MQTT vs. ZHA: Budowa bezawaryjnej sieci Mesh w Home Assistant
  2. ESPHome i ESP32 w praktyce: Własne czujniki środowiskowe bez chmury
  3. Wykrywanie obecności 2.0: radary mmWave (LD2410/LD2450) w automatyzacji oświetlenia
  4. Lokalne sterowanie głosem w Home Assistant z Whisper i Piper
  5. WireGuard i Tailscale DMZ: Bezpieczny dostęp z zewnątrz do Home Assistant i własnych serwerów
  6. Lokalny system zarządzania energią: Integracja falowników PV i magazynów energii przez Modbus TCP
Lukas Wójcik

Lukas Wójcik

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.

Napisanie komentarza

Doświadczenia z innymi urządzeniami lub integracjami oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.

Artykuły i kategorie

CCTV

Śledź tę kategorię przez RSS

Cloud & AI

Wszystkie artykuły w tej kategorii (17) Śledź tę kategorię przez RSS

Data Privacy

Wszystkie artykuły w tej kategorii (19) Śledź tę kategorię przez RSS

Digital Analytics

Wszystkie artykuły w tej kategorii (58) Śledź tę kategorię przez RSS

Digital Marketing

Wszystkie artykuły w tej kategorii (37) Śledź tę kategorię przez RSS

IT & Networks

Wszystkie artykuły w tej kategorii (18) Śledź tę kategorię przez RSS

Music Production

Wszystkie artykuły w tej kategorii (17) Śledź tę kategorię przez RSS

Raspberry Pi

Śledź tę kategorię przez RSS

SaaS & Internet Earning

Śledź tę kategorię przez RSS

Smart Home

Wszystkie artykuły w tej kategorii (18) Śledź tę kategorię przez RSS

Tworzenie stron internetowych

Wszystkie artykuły w tej kategorii (11) Śledź tę kategorię przez RSS

Wtyczki i triki WordPress

Wszystkie artykuły w tej kategorii (14) Śledź tę kategorię przez RSS