RHASSPY
An dieser Seite wird momentan noch gearbeitet. |
RHASSPY | |
---|---|
Zweck / Funktion | |
Anbindung von FHEM an den Rhasspy Sprachassistenten | |
Allgemein | |
Typ | Contrib |
Details | |
Dokumentation | Thema |
Support (Forum) | Frontends/Sprachsteuerung |
Modulname | 10_RHASSPY.pm |
Ersteller | BetaUser (Forum /Wiki), drhirn (Forum /Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Rhasspy ist eine Open-Source Lösung für Spracherkennung und Sprachsteuerung. Es besteht aus einer Sammlung von Scripten, die unter einer einheitlichen Bedienoberfläche zusammengefasst sind, die sehr flexibel genutzt und erweitert werden können. Die Besonderheit an Rhasspy ist, dass es nach der Installation komplett offline betrieben wird. Es wir also keine Sprache zur Erkennung an einen Server im Internet geschickt, und für den Betrieb nur für FHEM werden nur moderate Hardwareanforderungen gestellt - ein aktueller Raspberry Pi ab Modell 3B+ sollte in der Regel genügen.
Die Anbindung weiterer Räume ist über sogenannte "Satelliten" möglich. Dies kann z.B. ein Pi Zero mit Mikro und Lautsprecher sein, ein ESP32 mit entsprechender Hardware oder ein Mobiltelefon mit Android und der entsprechenden App.
Rhasspy besteht aus vielen unterschiedlichen Modulen (Hot-Word Erkennung, Text to Speech, Speech to Text, Intent Erkennung, ...). Alle diese Module kommunizieren miteinander über das MQTT-Protokoll.
Das Modul RHASSPY prüft Teile des MQTT-Traffics, konvertiert diese JSON-Nachrichten in FHEM-Befehle und sendet Nachrichten zurück an Rhasspy um z.B. Antworten über TextToSpeech auszugeben.
RHASSPY verwendet das 00_MQTT2_CLIENT.pm Modul um Nachrichten zu empfangen und zu senden. Daher ist es notwendig, ein MQTT2_CLIENT Device zu erstellen, bevor dieses Modul verwendet werden kann.
Hervorgegangen ist dieses Modul ursprünglich aus dem Snips-Modul, nachdem Snips an Sonos verkauft und somit eingestellt wurde. Danke also an Thyraz, der die grundlegenden Arbeiten erledigt hat!
- RHASSPY bezieht sich auf das FHEM-Modul oder das FHEM-Device
- Rhasspy bezeichnet die (zentrale) Installation bzw. das Web-Interface, unter dem die Scriptsammlung verwaltet werden kann.
Erste Schritte
Für Einsteiger in das Thema Rhasspy bzw. RHASSPY gibt es eine Schnellstart-Anleitung, die die ersten grundlegenden Schritte einfach erklärt: RHASSPY/Schnellstart
Es ist auf jeden Fall empfehlenswert, die Schnellstart-Anleitung zuerst durchzulesen, bevor man sich auf dieser Seite weiter in das Thema vertieft.
Installation des RHASSPY Moduls
Das Modul ist derzeit nicht in der "offiziellen" FHEM Distribution enthalten und muss daher manuell installiert werden. Dafür gibt es zwei Möglichkeiten.
FHEM SVN
Im SVN von FHEM ist die jeweils aktuelle "stable" Version des Moduls im contrib-Zweig zu finden. Diese kann mit folgendem Befehl, der im FHEM Befehls-Eingabefeld einzugeben ist, herunter geladen werden:
{ Svn_GetFile('contrib/RHASSPY/10_RHASSPY.pm', 'FHEM/10_RHASSPY.pm') }
Genauere Informationen zu dieser Vorgangsweise finden sich unter Update#Einzelne_Dateien_aus_dem_SVN_holen.
Nach Installation des Moduls muss FHEM neu gestartet werden.
FHEM Update und GitHub
Im GitHub-Repository des Moduls gibt es zwei Branches main und dev. In main ist die stabile Version des Moduls, in dev die jeweils aktuelle Entwicklungsversion. Aus Gründen der Stabilität ist natürlich die aus main zu bevorzugen.
Um das Modul zu installieren beziehungsweise zu aktualisieren, kann der update-Mechanismus von FHEM genutzt werden. Dazu muss das Repository in der Liste der vom update-Befehl verarbeiteten Repos aufgenommen werden:
update add https://raw.githubusercontent.com/fhem/fhem-rhasspy/main/controls_fhem-rhasspy.txt
Anschließend kann mit folgendem Befehl das Modul installiert oder aktualisiert werden:
update all https://raw.githubusercontent.com/fhem/fhem-rhasspy/main/controls_fhem-rhasspy.txt
Wählt man diesen Weg, wird das Modul auch automatisch aktualisiert, wenn ein Update von FHEM durchgeführt wird. Möchte man die Entwicklungsversion verwenden, muss in den beiden Befehlen main durch dev ersetzt werden.
Weitere Informationen zu dieser Vorgangsweise in der stehen in der CommandRef oder im FHEM-Wiki.
Nach Installation des Moduls muss FHEM neu gestartet werden.
Einrichtung MQTT2_CLIENT
Rhasspy kommuniziert hauptsächlich über das MQTT-Protokoll. Und zwar sowohl Rhasspy-intern, wie auch mit FHEM. Da dies auch für die übertragene Sprache und Audio-Dateien gilt und es daher zu sehr viel MQTT-Verkehr kommt, sollte der Rhasspy-interne MQTT-Server verwendet werden. Daher ist die Einrichtung eines MQTT2_CLIENT-Devices notwendig, um die für FHEM relevanten Daten zu beziehen.
Zuerst muss ein MQTT2_CLIENT Device erstellt werden, welches sich mit dem MQTT-Server (Mosquitto) von Rhasspy verbindet:
define <deviceName> MQTT2_CLIENT <ip-oder-hostname-des-mqtt-servers>:<port>
Anschließend wird die clientOrder gesetzt, um die richtige Benachrichtigungsreihenfolge einzustellen. Wird das MQTT2_CLIENT Device nur für RHASSPY verwendet, reicht hier die Angabe RHASSPY
. Ansonsten müssen noch alle anderen Devices (z.B. MQTT_GENERIC_BRIDGE
, MQTT2_DEVICE
) angegeben werden.
attr <deviceName> clientOrder RHASSPY [device2] [device3]
Um die Topics einzuschränken, die das Device abonniert, müssen diese angegeben werden. Wird der MQTT-Server nur für RHASSPY verwendet, reicht die Angabe setByTheProgram
. Ansonsten müssen alle für RHASSPY notwendigen Topics eingefügt werden.
attr <deviceName> subscriptions setByTheProgram
bzw.
attr <deviceName> subscriptions hermes/intent/+ hermes/dialogueManager/sessionStarted hermes/dialogueManager/sessionEnded hermes/nlu/intentNotRecognized hermes/hotword/+/detected
- Beispiele
- Rhasspy-interner MQTT-Server wird mit seinem Standard-Port verwendet. Rhasspy läuft auf der selben Maschine wie FHEM. MQTT2_CLIENT wird nur für RHASSPY verwendet.
defmod rhasspyMQTT2 MQTT2_CLIENT localhost:12183
attr rhasspyMQTT2 clientOrder RHASSPY
attr rhasspyMQTT2 subscriptions setByTheProgram
- Rhasspy läuft auf einem eigenen Server und verwendet einen externen MQTT Server mit eigener Port-Einstellung. MQTT2_CLIENT wird für RHASSPY, aber auch MQTT_GENERIC_BRIDGE und MQTT2_DEVICE verwendet.
defmod rhasspyMQTT2 MQTT2_CLIENT 192.168.1.122:1884
attr rhasspyMQTT2 clientOrder RHASSPY MQTT_GENERIC_BRIDGE MQTT2_DEVICE
attr rhasspyMQTT2 subscriptions hermes/intent/+ hermes/dialogueManager/sessionStarted hermes/dialogueManager/sessionEnded hermes/nlu/intentNotRecognized hermes/hotword/+/detected [zusätzliche Subscriptions für andere MQTT-Module]
Definition (DEF) von RHASSPY
define <name> RHASSPY <baseUrl> <devspec> <defaultRoom> <language> <fhemId> <prefix> <useGenericAttrs> <handleHotword> <encoding>
Alle Parameter sind optional. Die meisten werden im Normalfall gar nicht benötigt (z.B. fhemId
, prefix
). Sollten sie aber verwendet und später geändert werden, kann es zu unvorhergesehenem Verhalten kommen. Speziell beim Einstieg in das Thema RHASSPY sollten nicht mehr, als die ersten drei verwendet werden. Ausgenommen eventuell noch language
, möchte man eine andere Sprache als Englisch oder Deutsch verwenden.