Jak zbudować lokalne sterowanie głosowe smart home bez chmury – Rhasspy, openWakeWord i Home Assistant
Systemy głosowe takie jak Alexa, Google Assistant czy Siri są wygodne, ale mają jedną zasadniczą wadę – każde Twoje słowo trafia do serwerów zewnętrznych firm. Jeśli zależy Ci na prywatności i pełnej kontroli nad własnym inteligentnym domem, warto postawić na rozwiązania działające wyłącznie lokalnie. W tym przewodniku pokazujemy, jak połączyć Rhasspy, openWakeWord i Home Assistant w spójny, wydajny system sterowania głosowego – bez jednego bajtu danych wychodzącego poza Twoją sieć domową.
Co to jest lokalne sterowanie głosowe i dlaczego warto je wdrożyć?
Lokalne sterowanie głosowe to architektura, w której cały proces rozpoznawania mowy, analizy intencji i wykonywania poleceń odbywa się na urządzeniach fizycznie znajdujących się w Twoim domu lub sieci lokalnej. Nie potrzebujesz stałego połączenia z Internetem, a Twoje rozmowy nie są nagrywane ani analizowane przez zewnętrznych dostawców usług.
Główne zalety takiego podejścia to:
- Prywatność – nagrania głosowe pozostają wyłącznie na Twoich urządzeniach.
- Niezawodność – system działa nawet przy awarii łącza internetowego.
- Szybkość – odpowiedzi są błyskawiczne, bez opóźnień związanych z komunikacją z chmurą.
- Brak kosztów subskrypcji – wszystkie narzędzia, które tu opisujemy, są open source.
- Pełna konfigurowalność – możesz uczyć system własnych fraz i poleceń.
Przegląd komponentów systemu
Zanim przejdziemy do instalacji, wyjaśnijmy, jaką rolę pełni każdy z elementów naszego systemu:
openWakeWord – wykrywanie słowa budzącego
openWakeWord to biblioteka open source służąca do wykrywania tak zwanego wake word – słowa lub frazy aktywującej asystenta głosowego. Działa lokalnie i w czasie rzeczywistym, stale nasłuchując mikrofonu w oczekiwaniu na konkretne słowo, np. „OK Hej", „Hej asystencie" czy własne słowo zdefiniowane przez użytkownika. Po wykryciu wake word przekazuje kontrolę do modułu rozpoznawania mowy. openWakeWord jest lekki, działa nawet na Raspberry Pi i obsługuje własne modele trenowane przez użytkowników.
Rhasspy – lokalne rozpoznawanie mowy i intencji
Rhasspy to kompleksowa platforma do obsługi głosowej pracująca w 100% offline. Zawiera w sobie moduły do:
- Rozpoznawania mowy (ASR – Automatic Speech Recognition),
- Analizy intencji (NLU – Natural Language Understanding),
- Syntezy mowy (TTS – Text to Speech),
- Obsługi dialogów i sesji rozmów.
Rhasspy obsługuje wiele języków, w tym język polski, i może być zintegrowane z Home Assistant przez MQTT lub HTTP API.
Home Assistant – centrum automatyki domowej
Home Assistant to najpopularniejsza platforma open source do zarządzania inteligentnym domem. Integruje się z tysiącami urządzeń i usług, pozwalając tworzyć automatyzacje, zarządzać scenami oświetlenia, temperaturą, alarmami i wieloma innymi urządzeniami. W naszym systemie pełni rolę „mózgu" – odbiera intencje z Rhasspy i wykonuje odpowiednie akcje.
Wymagania sprzętowe i programowe
Do zbudowania systemu potrzebujesz:
- Serwera lokalnego – może to być Raspberry Pi 4 (min. 4 GB RAM), NUC, stary laptop lub dowolny komputer z Linuxem.
- Mikrofonu USB lub tabletu/głośnika z mikrofonem podłączonego do sieci lokalnej.
- Zainstalowanego Home Assistant (zalecamy Home Assistant OS lub Home Assistant Supervised).
- Dockera – do uruchomienia Rhasspy i openWakeWord w kontenerach.
- Brokera MQTT – np. Mosquitto (dostępny jako add-on w Home Assistant).
Krok 1 – Instalacja i konfiguracja Home Assistant
Jeśli nie masz jeszcze zainstalowanego Home Assistant, najwygodniej skorzystać z obrazu Home Assistant OS dla Raspberry Pi lub instalatora dla systemu x86. Po uruchomieniu przejdź do panelu administracyjnego i zainstaluj następujące dodatki (Add-ons):
- Mosquitto Broker – broker MQTT do komunikacji między komponentami.
- File Editor lub Studio Code Server – do edycji plików konfiguracyjnych.
- Terminal & SSH – do zarządzania systemem z linii poleceń.
Po zainstalowaniu Mosquitto, przejdź do jego konfiguracji i utwórz użytkownika MQTT. Zanotuj dane logowania – będą potrzebne przy konfiguracji Rhasspy.
W pliku configuration.yaml Home Assistant dodaj integrację MQTT:
mqtt:
broker: localhost
port: 1883
username: mqtt_user
password: twoje_haslo
Krok 2 – Instalacja Rhasspy w Dockerze
Rhasspy najwygodniej uruchomić jako kontener Docker. Poniżej przykładowy plik docker-compose.yml:
version: '3'
services:
rhasspy:
image: rhasspy/rhasspy:latest
container_name: rhasspy
restart: unless-stopped
volumes:
- ./rhasspy_config:/config
ports:
- "12101:12101"
devices:
- /dev/snd:/dev/snd
environment:
- RHASSPY_PROFILE=pl
command: --user-profiles /config --profile pl
Uruchom kontener poleceniem:
docker-compose up -d
Po uruchomieniu interfejs Rhasspy będzie dostępny pod adresem http://[IP_TWOJEGO_SERWERA]:12101. Przejdź do zakładki Settings i skonfiguruj poszczególne moduły:
- Wake Word – ustaw na Pocketsphinx lub openWakeWord (o tym niżej).
- Speech to Text – zalecamy Kaldi lub Vosk z modelem polskim.
- Intent Recognition – ustaw na Fsticuffs lub Rhasspy NLU.
- Text to Speech – np. NanoTTS lub Larynx dla lepszej jakości głosu.
- Intent Handling – ustaw na Home Assistant i wprowadź adres URL oraz token dostępu.
- MQTT – włącz i podaj dane brokera Mosquitto.
Krok 3 – Instalacja i konfiguracja openWakeWord
openWakeWord może działać jako samodzielny serwis lub być zintegrowany bezpośrednio z Rhasspy poprzez Wyoming Protocol (jeśli używasz nowszych wersji). Poniżej opisujemy podejście z Wyoming:
version: '3'
services:
openwakeword:
image: rhasspy/wyoming-openwakeword:latest
container_name: openwakeword
restart: unless-stopped
ports:
- "10400:10400"
volumes:
- ./openwakeword_data:/data
command: --uri tcp://0.0.0.0:10400 --preload-model ok_nabu
Parametr --preload-model ok_nabu ładuje domyślny model budzący „OK Nabu". Możesz też wytrenować własny model lub pobrać gotowe modele ze społeczności. Po uruchomieniu kontenera w interfejsie Rhasspy lub Home Assistant Voice (jeśli używasz Wyoming integration) wskaż adres serwisu openWakeWord.
Krok 4 – Definiowanie intencji w Rhasspy
Rhasspy używa prostego języka opisu intencji. Przejdź do zakładki Sentences i zdefiniuj swoje komendy. Przykład dla języka polskiego:
[WlaczSwiatlo]
włącz (światło | lampę) [w (salonie | kuchni | sypialni)]
[WylaczSwiatlo]
wyłącz (światło | lampę) [w (salonie | kuchni | sypialni)]
[UstawTemperature]
ustaw temperaturę na <temp> stopni
temp = (osiemnaście | dziewiętnaście | dwadzieścia | dwadzieścia jeden | dwadzieścia dwa)
[OtworzZasłony]
otwórz (zasłony | rolety) [w (salonie | sypialni)]
Po zapisaniu intencji kliknij Train – Rhasspy wytrenuje modele językowe dopasowane do Twoich fraz. Im bardziej precyzyjnie zdefiniujesz intencje, tym lepsza będzie dokładność rozpoznawania.
Krok 5 – Obsługa intencji w Home Assistant
Gdy Rhasspy rozpozna polecenie, wysyła intencję do Home Assistant. Możesz obsłużyć ją na kilka sposobów. Najprostszy to użycie automatyzacji. W pliku automations.yaml lub przez GUI dodaj:
- alias: "Głos – Włącz światło w salonie"
trigger:
platform: event
event_type: rhasspy_WlaczSwiatlo
event_data:
room: salonie
action:
service: light.turn_on
target:
entity_id: light.salon
Alternatywnie, nowsze wersje Home Assistant obsługują integrację Assist Pipeline z Wyoming Protocol, która automatyzuje wiele z tych kroków. Możesz tam ustawić openWakeWord jako detektor wake word, Whisper (lokalny model STT) jako silnik rozpoznawania mowy i Piper jako silnik TTS – wszystko bez chmury.
Krok 6 – Testy i optymalizacja
Po skonfigurowaniu systemu czas na testy. W interfejsie Rhasspy znajdziesz zakładkę Test, gdzie możesz ręcznie wpisać zdanie i sprawdzić, jak zostaje rozpoznane. Możesz też użyć funkcji nagrywania przez mikrofon w przeglądarce.
Kilka wskazówek dotyczących optymalizacji:
- Mikrofon ma kluczowe znaczenie – dobry mikrofon kierunkowy lub tablica mikrofonowa (np. ReSpeaker) drastycznie poprawia jakość rozpoznawania.
- Redukcja hałasu – jeśli w pomieszczeniu jest dużo szumu tła, rozważ włączenie filtrów w konfiguracji Rhasspy.
- Precyzja intencji – im mniej niejednoznacznych fraz, tym lepsze wyniki. Unikaj nakładania się wzorców.
- Własne modele wake word – jeśli domyślne modele openWakeWord reagują za często lub za rzadko, warto wytrenować własny model na swoim głosie.
- Aktualizuj modele ASR – dla języka polskiego warto śledzić nowe wydania modeli Vosk lub Whisper.cpp.
Architektura sieci i bezpieczeństwo
Ponieważ cały system działa lokalnie, ryzyko związane z prywatnością jest minimalne. Mimo to warto zadbać o kilka kwestii bezpieczeństwa:
- Nie wystawiaj portów Rhasspy ani MQTT na publiczny Internet bez VPN i szyfrowania.
- Używaj silnych haseł do brokera MQTT i panelu Home Assistant.
- Rozważ segmentację sieci – umieść urządzenia IoT w osobnym VLAN-ie.
- Regularnie aktualizuj wszystkie komponenty, śledząc biuletyny bezpieczeństwa projektów open source.
Podsumowanie
Budowa lokalnego systemu sterowania głosowego to projekt wymagający pewnej wiedzy technicznej, ale efekty są warte zachodu. Raz skonfigurowany system działa niezawodnie, szybko i – co najważniejsze – całkowicie prywatnie. Połączenie openWakeWord, Rhasspy i Home Assistant tworzy potężne narzędzie, które możesz dowolnie rozbudowywać i dostosowywać do swoich potrzeb.
W miarę jak projekty takie jak Wyoming Protocol i Home Assistant Assist Pipeline dojrzewają, instalacja i konfiguracja tego typu systemów staje się coraz prostsza. Warto śledzić społeczności skupione wokół tych projektów – na forach, Reddicie (/r/homeassistant) czy GitHubie możesz znaleźć gotowe konfiguracje, modele wake word i wsparcie innych entuzjastów. Twój inteligentny dom nie musi słuchać nikogo poza Tobą.