RHASSPY/Schnellstart: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
 
(obsoletes Bild entfernt)
 
(22 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[File:Rhasspy01.png|thumb|right|Das Rhasspy-Webinterface nach erfolgreicher Installation und Aufruf des ersten Intents (GetTime)]]
[[File:Rhasspy Webinterface.png|thumb|right|Das Rhasspy-Webinterface nach erfolgreicher Installation und Aufruf des ersten Intents (GetTime)]]
Die folgende Kurzanleitung soll den Einstieg erleichtern. Es ist dabei wichtig, jeden der Schritte vollständig abgeschlossen zu haben, bevor mit dem nächsten begonnen wird!


 
==Installation von Rhasspy==
Voraussetzung für diese Anleitung ist, dass Rhasspy bereits funktionsfähig ist. Dazu bitte der Anleitung in der [https://rhasspy.readthedocs.io/en/latest/#getting-started offiziellen Dokumentation] folgen. Empfohlen wird, Rhasspy als [https://www.docker.com/ Docker Container] zu installieren. Und zwar aus folgenden Gründen:
Empfohlen wird, Rhasspy als [https://www.docker.com/ Docker Container] zu installieren. Und zwar aus folgenden Gründen:
* Alle Software-Abhängigkeiten sind gelöst
* Alle Software-Abhängigkeiten sind aufgelöst
* Es kommt zu keinen Konflikten mit Abhängigkeiten anderer Anwendungen (Python-Version, Paket-Versionen, ...)
* Es kommt zu keinen Konflikten mit Abhängigkeiten anderer Anwendungen (Python-Version, Paket-Versionen, ...)
* Wird der Container wieder gelöscht, ist Rhasspy vollständig vom System entfernt
* Wird der Container wieder gelöscht, ist Rhasspy vollständig vom System entfernt
Soll Docker verwendet werden, finden sich am [[#Anhang|Ende dieser Anleitung]] zwei Docker-Compose Dateien für den schnellen Einstieg.
Soll Docker verwendet werden, finden sich am [[#Anhang|Ende dieser Anleitung]] zwei Docker-Compose Dateien für den schnellen Einstieg.
Dazu bitte '''mit einer Ausnahme''' der Anleitung in der [https://rhasspy.readthedocs.io/en/latest/#getting-started offiziellen Dokumentation] folgen.
Die Ausnahme ergibt sich daraus, dass für den schnellen Einstieg der ''interne'' MQTT-Server von Rhasspy genutzt werden soll. Dieser ist auf dem Port 12183 erreichbar, der beim Start des Docker Containers auch mit ''exposed'' werden muss.  


Das Kommando zum Starten des Docker-Images lautet deshalb korrekterweise


Die Vorbereitung ist abgeschlossen, wenn im [https://rhasspy.readthedocs.io/en/latest/#web-interface Web-Interface von Rhasspy] der gesprochene Testsatz '''''wie spät ist es''''' erkannt wird und links als erkannter Intent '''''GetTime''''' angezeigt wird.
docker run -d -p 12101:12101 -p 12183:12183\
      --name rhasspy \
      --restart unless-stopped \
      -v "$HOME/.config/rhasspy/profiles:/profiles" \
      -v "/etc/localtime:/etc/localtime:ro" \
      --device /dev/snd:/dev/snd \
      rhasspy/rhasspy \
      --user-profiles /profiles \
      --profile en


Danach bitte alle weiteren in der nachfolgenden Anleitung beschriebenen Schritte ausführen. Der "Schnellstart" ist erst abgeschlossen, wenn im [https://rhasspy.readthedocs.io/en/latest/#web-interface Web-Interface von Rhasspy] der gesprochene Testsatz '''''wie spät ist es''''' erkannt wird und links als erkannter Intent '''''GetTime''''' angezeigt wird.


==Installation des FHEM Moduls==
Das RHASSPY-Modul ist seit Sept. 2022 über das reguläre FHEM-update verfügbar und muss nicht mehr gesondert in das Modulverzeichnis kopiert werden.


==Einrichtung MQTT2_CLIENT==
==Einrichtung des MQTT2_CLIENT==
[[File:Rhasspy02.png|right|thumb|Ein erfolgreich mit Rhasspy verbundenes MQTT2_CLIENT Device]]
[[File:Rhasspy02.png|right|thumb|Ein erfolgreich mit Rhasspy verbundenes MQTT2_CLIENT Device]]
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 und die für FHEM relevanten Daten über einen [[MQTT2_CLIENT]] bezogen werden.
Rhasspy kommuniziert hauptsächlich über das [[MQTT]]-Protokoll, und zwar sowohl Rhasspy-intern, als 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 und die für FHEM relevanten Daten über einen [[MQTT2_CLIENT]] bezogen werden.


Dieses Beispiel geht davon aus, dass Rhasspy auf dem selben Gerät installiert ist, auf dem auch FHEM läuft.
Dieses Beispiel geht davon aus, dass Rhasspy auf dem selben Gerät installiert ist, auf dem auch FHEM läuft.
Zeile 26: Zeile 39:
</syntaxhighlight>
</syntaxhighlight>


Läuft Rhasspy auf einem anderen Server und/oder wird ein anderer Port verwendet, sind die passenden Daten im obigen ''defmod'' entsprechend anzupassen.
Läuft Rhasspy auf einem anderen Server und/oder wird ein anderer Port verwendet, sind die passenden Daten im obigen ''defmod'' entsprechend anzupassen. Typischerweise ist der Rhasspy-interne MQTT-Server eines extern laufenden Rhasspy unter der Portnummer 12183 zu erreichen, die Definition wäre dann also
 
<syntaxhighlight lang="text">
defmod rhasspyMQTT2 MQTT2_CLIENT <IP-Adresse>:12183
attr rhasspyMQTT2 clientOrder RHASSPY
attr rhasspyMQTT2 subscriptions setByTheProgram
</syntaxhighlight>


Hat alles funktioniert, steht '''opened''' im ''STATE'' dieses Devices.
Hat alles funktioniert, steht '''opened''' im ''STATE'' dieses Devices.
<br clear=all>
<br clear="all">
==Installation FHEM Modul==
[[File:Rhasspy03.png|thumb|right|Installation/Update des RHASSPY Moduls via Kommando-Feld]]
Das RHASSPY-Modul kann ganz einfach mit einem einzelnen Befehl, der in die FHEM-Kommandozeile eingetragen werden muss, installiert werden:
 
{ Svn_GetFile('contrib/RHASSPY/10_RHASSPY.pm', 'FHEM/10_RHASSPY.pm') }
 
Danach muss FHEM neu gestartet werden.
<!--
Um das Modul RHASSPY in FHEM zu installieren, gibt es zwei Wege. Zum einen kann das Modul mittels FHEM-Befehl aus dem SVN geladen werden. Zum anderen kann das GitHub-Repository des Moduls als Update-Quelle hinzugefügt werden.
 
===FHEM SVN===
Das für FHEM erforderliche Modul ist in contrib verfügbar und kann über FHEMWEB durch folgenden Befehl in der Eingabezeile heruntergeladen werden:
{ Svn_GetFile('contrib/RHASSPY/10_RHASSPY.pm', 'FHEM/10_RHASSPY.pm') }
 
[[File:Rhasspy03.png|thumb|none|Installation/Update des RHASSPY Moduls via Kommando-Feld]]
 
Genauere Informationen zu dieser Vorgangsweise gibt es hier: [[Update#Einzelne_Dateien_aus_dem_SVN_holen]]
 
===FHEM Update und Git===
Eine andere Möglichkeit ist, das update Kommand von FHEM zu nützen, um das Modul zu installieren oder auf den neuesten Stand zu bringen.
Dazu muss das GIT-Repository des Moduls in die Liste der - vom update Befehl - zu verarbeitenden Module aufgenommen werden:
update add https://raw.githubusercontent.com/fhem/fhem-rhasspy/main/controls_fhem-rhasspy.txt
 
[[File:Rhasspy04.png|thumb|none|alt=Hinzufügen des RHASSPY-Repositories zur Liste der Updates]]
 
Danach kann das Modul mit folgendem Befehl installiert oder upgedatet werden:
update all https://raw.githubusercontent.com/fhem/fhem-rhasspy/main/controls_fhem-rhasspy.txt
 
Weitere Informationen zu dieser Vorgangsweise in der stehen in der [https://fhem.de/commandref.html#update CommandRef] oder im [[Update|FHEM-Wiki]].


Der Vorteil dieser Variante ist, dass bei einem FHEM-Update auch gleich das RHASSPY-Modul mit aktualisiert wird.
-->
== Define eines RHASSPY Devices ==
== Define eines RHASSPY Devices ==
Läuft der Rhasspy-Dienst auf derselben Maschine mit den Standardeinstellungen, genügt für ein erstes Kennenlernen:
Läuft der Rhasspy-Dienst auf derselben Maschine mit den Standardeinstellungen, genügt für ein erstes Kennenlernen:
  define Rhasspy RHASSPY
  define rhasspy RHASSPY
Für einen entfernten Rhasspy-Dienst muss angeben werden, wo dessen '''Web-Interface''' zu erreichen ist:
Für einen entfernten Rhasspy-Dienst muss angeben werden, wo dessen '''Web-Interface''' zu erreichen ist:
  defmod rhasspy RHASSPY baseUrl=http://192.168.1.210:12101
  defmod rhasspy RHASSPY baseUrl=http://192.168.1.210:12101


Dieser Schritt war erfolgreich, wenn  
Dieser Schritt war erfolgreich, wenn  
* ein Reading '''intents''' vorhanden ist, das z.B. den Wert ''GetTime'' enthält, und  
* im Device rhasspy ein Reading '''intents''' vorhanden ist, das z.B. den Wert ''GetTime'' enthält, und  
* '''STATE''' auf ''online'' gegangen ist.
* '''STATE''' dieses Devices auf ''online'' gegangen ist.


==Spracheinstellungen==
==Spracheinstellungen==
===Basissprache===
===Basissprache===
[[File:Rhasspy05.png|thumb|RHASSPY mit deutscher Spracheinstellung]]
{{Randnotiz|RNTyp=Info|RNText=Wird die Sprache im Device global nach Definition des RHASSPY-Devices geändert, kann es notwendig sein, die DEF des RHASSPY-Devices einmal ohne Änderungen zu bearbeiten (z.B. ein Leerzeichen anfügen).}}
[[File:Rhasspy05.png|thumb|rhasspy mit deutscher Spracheinstellung]]
In diesem Beispiel soll deutsch mit dem Sprachassistenten gesprochen werden. Das bedeutet
In diesem Beispiel soll deutsch mit dem Sprachassistenten gesprochen werden. Das bedeutet
# Rhasspy muss ein deutsches Profil verwenden
# Rhasspy - also die Anwendung im Docker-Container - muss ein deutsches Profil verwenden
# RHASSPY muss auf die deutsche Sprache eingestellt sein
# rhasspy - also das FHEM-Device - muss auf die deutsche Sprache eingestellt sein
# Eine deutsche [[#Sprachdatei]] muss installiert sein
# Eine deutsche [[#Sprachdatei|Sprachdatei]] muss installiert sein
 


Welche Sprache RHASSPY verwendet, ist am '''Internal''' ''LANGUAGE'' des RHASSPY-Devices zu erkennen.
Welche Sprache das Device rhasspy verwendet, ist am '''Internal''' ''LANGUAGE'' zu erkennen.


Sollte dieses Internal nicht '''de''' anzeigen, gibt es zwei Möglichkeiten, dies zu ändern:
Sollte dieses Internal nicht '''de''' anzeigen, gibt es zwei Möglichkeiten, dies zu ändern:
# im FHEM-Device '''global''' wird das  Attribut ''language'' auf ''DE'' eingestellt oder
# im FHEM-Device '''global''' wird das  Attribut ''language'' auf ''DE'' eingestellt oder
# die DEF des RHASSPY-Devices um ''language=de'' ergänzt.
# die Definition des rhasspy-Devices um ''language=de'' ergänzt.


   defmod rhasspy RHASSPY language=de
   defmod rhasspy RHASSPY language=de
In beiden Fällen kann es möglich sein, dass das RHASSPY-Device [[Reload|neu geladen]] werden muss, um die Änderung wirksam zu machen:
reload 10_RHASSPY.pm


===Sprachdatei===
===Sprachdatei===
RHASSPY enthält einige vorgefertigte Antwortsätze für diverse Situationen. Um diese von Englisch auf Deutsch umzustellen, wird eine zusätzliche (Muster-) Sprachdatei benötigt, die man mit folgendem Befehl erhält:
Das Modul RHASSPY enthält einige vorgefertigte Antwortsätze für diverse Situationen. Um diese von Englisch auf Deutsch umzustellen, wird eine zusätzliche (Muster-) Sprachdatei benötigt, die man mit folgendem Befehl erhält:
  { Svn_GetFile('contrib/RHASSPY/rhasspy-de.cfg', './rhasspy-de.cfg') }
  { Svn_GetFile('contrib/RHASSPY/rhasspy-de.cfg', './rhasspy-de.cfg') }


Ergänzend muss RHASSPY mitgeteilt werden, wo diese zu finden ist:  
Ergänzend muss dem Device rhasspy mitgeteilt werden, wo diese zu finden ist:  
  attr Rhasspy languageFile ./rhasspy-de.cfg
  attr rhasspy languageFile ./rhasspy-de.cfg
 
Dieser Schritt war erfolgreich, wenn der Befehl <code>list Rhasspy</code> einen Abschnitt ''lng'' enthält, der deutsche Antworten auflistet.


Dieser Schritt war erfolgreich, wenn der Befehl <code>list rhasspy</code> einen Abschnitt ''lng'' enthält, der deutsche Antworten auflistet.


== Erste Interaktion ==
== Erste Interaktion ==
[[File:Rhasspy06.png|thumb|Anpassung eines erstens Intents nach der Schnellstart-Anleitung]]
[[File:Rhasspy06.png|thumb|Anpassung eines erstens Intents nach der Schnellstart-Anleitung]]
Um dem Sprachassistenten jetzt eine Antwort auf eine Frage zu entlocken, muss zuerst im Webinterface von Rhasspy im Menüpunkt [https://rhasspy.readthedocs.io/en/latest/tutorials/#training Sentences] ein Intent erstellt werden. Für diese Schnellstart-Anleitung wird aber einfach der standardmäßig in Rhasspy vorhandene Intent ''[GetTime]'' verwendet. Um diesen aber benutzen zu können, muss er vorher umbenannt werden. Jede Instanz des RHASSPY-Moduls reagiert nur auf Intents, die "für sie" bestimmt und daher entsprechend gekennzeichnet sind. Diese Kennungzeichnung besteht aus:
Um dem Sprachassistenten jetzt eine Antwort auf eine Frage zu entlocken, muss zuerst im Webinterface von Rhasspy - also in der Anwendung im Docker-Container - im Menüpunkt [https://rhasspy.readthedocs.io/en/latest/tutorials/#training Sentences] ein Intent erstellt werden. Für diese Schnellstart-Anleitung wird aber einfach der standardmäßig in Rhasspy vorhandene Intent ''[GetTime]'' verwendet. Um diesen aber benutzen zu können, muss er vorher umbenannt werden. Jede Instanz des RHASSPY-Moduls reagiert nur auf Intents, die "für sie" bestimmt und daher entsprechend gekennzeichnet sind. Diese Kennungzeichnung besteht aus:
# dem '''''language''-Kürzel''' (z.B. <code>de</code>),
# dem '''''language''-Kürzel''' (z.B. <code>de</code>),
# der '''''fhemId''''' (z.B. <code>fhem</code>) und
# der '''''fhemId''''' (z.B. <code>fhem</code>) und
Zeile 117: Zeile 100:
</syntaxhighlight>
</syntaxhighlight>


Danach muss im Modul der Befehl <code>set rhasspy update all</code> ausgeführt werden. Dieser Befehl sorgt dafür, dass alle für die Zusammenarbeit zwischen Rhasspy und dem Modul ausgetauscht werden (Geräte, Slots, etc.). Außerdem startet er das Training von Rhasspy. Dadurch kann der Intent ''[de.fhem:GetTime]'' erst von Rhasspy erkannt werden. Nach wenigen Sekunden wird im Modul das Reading ''training'' befühlt und es kann losgehen.


Jetzt kann der Sprachassistent nach der aktuellen Uhrzeit gefragt werden. Ist alles richtig konfiguriert, wird er diese Frage auf deutsch beantworten und die Readings des Moduls werden mit entsprechenden Werten befüllt.
Jetzt kann der Sprachassistent nach der aktuellen Uhrzeit gefragt werden. Ist alles richtig konfiguriert, wird er diese Frage auf deutsch beantworten und die Readings des Moduls werden mit entsprechenden Werten befüllt.
Zeile 162: Zeile 143:
Um die konfigurierte Lampe schlussendlich auch steuern zu können, muss Rhasspy noch wissen, was nach einem erkannten Sprachbefehl anfangen soll. Dazu werden in Rhasspy Sentences/Intents erstellt. Im Falle dieser Lampe, reicht ein einfacher SetOnOff-Intent. Sie kann ja nicht mehr.
Um die konfigurierte Lampe schlussendlich auch steuern zu können, muss Rhasspy noch wissen, was nach einem erkannten Sprachbefehl anfangen soll. Dazu werden in Rhasspy Sentences/Intents erstellt. Im Falle dieser Lampe, reicht ein einfacher SetOnOff-Intent. Sie kann ja nicht mehr.


Da der Intent aber potentiell für mehrere Geräte dienen können soll, wird es etwas komplizierter, als beim ''GetTime'' Intent. Da aber vom Modul schon passende Slots erstellt wurden, können wir diese in den Sätzen verwenden, anstatt einen eigenen Satz für jedes Gerät schreiben zu müssen. Zusätzlich müssen wir aber ''Tags'' verwenden, damit das Modul dann unterscheiden kann, ob ein von Rhasspy geliefertes Wort ein Gerät, ein Raum oder ein Nummernwert ist.
Da der Intent aber potentiell für mehrere Geräte dienen können soll, wird es etwas komplizierter, als beim ''GetTime'' Intent. Allerdings hat dsa Modul schon passende Slots erstellt, die in eigenen Intents verwendet werden können. Zusätzlich müssen aber ''Tags'' verwendet, damit das Modul dann unterscheiden kann, ob ein von Rhasspy geliefertes Wort ein Gerät, ein Raum oder ein Nummernwert ist.


Ein ganz einfacher Intent, um die Lampe ein- und ausschalten zu können, kann z.B. so aussehen:
Ein ganz einfacher Intent, um die Lampe ein- und ausschalten zu können, kann z.B. so aussehen:
Zeile 194: Zeile 175:


==Schlusswort==
==Schlusswort==
Sind alle Punkte dieser Schnellstart-Anleitung erfolgreich abgeschlossen, kann damit begonnen werden RHASSPY auf die eigenen Bedürfnisse anzupassen und weitere Geräte damit zu steuern. Alle Informationen dazu finden sich auf der Hauptseite von [[RHASSPY]].
Sind alle Punkte dieser Schnellstart-Anleitung erfolgreich abgeschlossen, kann damit begonnen werden, das Device rhasspy auf die eigenen Bedürfnisse anzupassen und weitere Geräte damit zu steuern. Alle Informationen dazu finden sich auf der Hauptseite von [[RHASSPY]] sowie in der [[RHASSPY/Vertiefung]].


==Anhang==
==Anhang==

Aktuelle Version vom 18. September 2022, 10:03 Uhr

Das Rhasspy-Webinterface nach erfolgreicher Installation und Aufruf des ersten Intents (GetTime)

Installation von Rhasspy

Empfohlen wird, Rhasspy als Docker Container zu installieren. Und zwar aus folgenden Gründen:

  • Alle Software-Abhängigkeiten sind aufgelöst
  • Es kommt zu keinen Konflikten mit Abhängigkeiten anderer Anwendungen (Python-Version, Paket-Versionen, ...)
  • Wird der Container wieder gelöscht, ist Rhasspy vollständig vom System entfernt

Soll Docker verwendet werden, finden sich am Ende dieser Anleitung zwei Docker-Compose Dateien für den schnellen Einstieg. Dazu bitte mit einer Ausnahme der Anleitung in der offiziellen Dokumentation folgen. Die Ausnahme ergibt sich daraus, dass für den schnellen Einstieg der interne MQTT-Server von Rhasspy genutzt werden soll. Dieser ist auf dem Port 12183 erreichbar, der beim Start des Docker Containers auch mit exposed werden muss.

Das Kommando zum Starten des Docker-Images lautet deshalb korrekterweise

docker run -d -p 12101:12101 -p 12183:12183\
     --name rhasspy \
     --restart unless-stopped \
     -v "$HOME/.config/rhasspy/profiles:/profiles" \
     -v "/etc/localtime:/etc/localtime:ro" \
     --device /dev/snd:/dev/snd \
     rhasspy/rhasspy \
     --user-profiles /profiles \
     --profile en

Danach bitte alle weiteren in der nachfolgenden Anleitung beschriebenen Schritte ausführen. Der "Schnellstart" ist erst abgeschlossen, wenn im Web-Interface von Rhasspy der gesprochene Testsatz wie spät ist es erkannt wird und links als erkannter Intent GetTime angezeigt wird.

Installation des FHEM Moduls

Das RHASSPY-Modul ist seit Sept. 2022 über das reguläre FHEM-update verfügbar und muss nicht mehr gesondert in das Modulverzeichnis kopiert werden.

Einrichtung des MQTT2_CLIENT

Ein erfolgreich mit Rhasspy verbundenes MQTT2_CLIENT Device

Rhasspy kommuniziert hauptsächlich über das MQTT-Protokoll, und zwar sowohl Rhasspy-intern, als 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 und die für FHEM relevanten Daten über einen MQTT2_CLIENT bezogen werden.

Dieses Beispiel geht davon aus, dass Rhasspy auf dem selben Gerät installiert ist, auf dem auch FHEM läuft.

defmod rhasspyMQTT2 MQTT2_CLIENT localhost:12183
attr rhasspyMQTT2 clientOrder RHASSPY
attr rhasspyMQTT2 subscriptions setByTheProgram

Läuft Rhasspy auf einem anderen Server und/oder wird ein anderer Port verwendet, sind die passenden Daten im obigen defmod entsprechend anzupassen. Typischerweise ist der Rhasspy-interne MQTT-Server eines extern laufenden Rhasspy unter der Portnummer 12183 zu erreichen, die Definition wäre dann also

defmod rhasspyMQTT2 MQTT2_CLIENT <IP-Adresse>:12183
attr rhasspyMQTT2 clientOrder RHASSPY
attr rhasspyMQTT2 subscriptions setByTheProgram

Hat alles funktioniert, steht opened im STATE dieses Devices.

Define eines RHASSPY Devices

Läuft der Rhasspy-Dienst auf derselben Maschine mit den Standardeinstellungen, genügt für ein erstes Kennenlernen:

define rhasspy RHASSPY

Für einen entfernten Rhasspy-Dienst muss angeben werden, wo dessen Web-Interface zu erreichen ist:

defmod rhasspy RHASSPY baseUrl=http://192.168.1.210:12101

Dieser Schritt war erfolgreich, wenn

  • im Device rhasspy ein Reading intents vorhanden ist, das z.B. den Wert GetTime enthält, und
  • STATE dieses Devices auf online gegangen ist.

Spracheinstellungen

Basissprache

Info green.pngWird die Sprache im Device global nach Definition des RHASSPY-Devices geändert, kann es notwendig sein, die DEF des RHASSPY-Devices einmal ohne Änderungen zu bearbeiten (z.B. ein Leerzeichen anfügen).
rhasspy mit deutscher Spracheinstellung

In diesem Beispiel soll deutsch mit dem Sprachassistenten gesprochen werden. Das bedeutet

  1. Rhasspy - also die Anwendung im Docker-Container - muss ein deutsches Profil verwenden
  2. rhasspy - also das FHEM-Device - muss auf die deutsche Sprache eingestellt sein
  3. Eine deutsche Sprachdatei muss installiert sein

Welche Sprache das Device rhasspy verwendet, ist am Internal LANGUAGE zu erkennen.

Sollte dieses Internal nicht de anzeigen, gibt es zwei Möglichkeiten, dies zu ändern:

  1. im FHEM-Device global wird das Attribut language auf DE eingestellt oder
  2. die Definition des rhasspy-Devices um language=de ergänzt.
 defmod rhasspy RHASSPY language=de

Sprachdatei

Das Modul RHASSPY enthält einige vorgefertigte Antwortsätze für diverse Situationen. Um diese von Englisch auf Deutsch umzustellen, wird eine zusätzliche (Muster-) Sprachdatei benötigt, die man mit folgendem Befehl erhält:

{ Svn_GetFile('contrib/RHASSPY/rhasspy-de.cfg', './rhasspy-de.cfg') }

Ergänzend muss dem Device rhasspy mitgeteilt werden, wo diese zu finden ist:

attr rhasspy languageFile ./rhasspy-de.cfg

Dieser Schritt war erfolgreich, wenn der Befehl list rhasspy einen Abschnitt lng enthält, der deutsche Antworten auflistet.

Erste Interaktion

Anpassung eines erstens Intents nach der Schnellstart-Anleitung

Um dem Sprachassistenten jetzt eine Antwort auf eine Frage zu entlocken, muss zuerst im Webinterface von Rhasspy - also in der Anwendung im Docker-Container - im Menüpunkt Sentences ein Intent erstellt werden. Für diese Schnellstart-Anleitung wird aber einfach der standardmäßig in Rhasspy vorhandene Intent [GetTime] verwendet. Um diesen aber benutzen zu können, muss er vorher umbenannt werden. Jede Instanz des RHASSPY-Moduls reagiert nur auf Intents, die "für sie" bestimmt und daher entsprechend gekennzeichnet sind. Diese Kennungzeichnung besteht aus:

  1. dem language-Kürzel (z.B. de),
  2. der fhemId (z.B. fhem) und
  3. dem Intent-Namen (z.B. GetTime).

Der Name des Intents ist daher in der sentences.ini wie folgt zu ändern:

[de.fhem:GetTime]
wie spät ist es
sag mir die uhrzeit


Jetzt kann der Sprachassistent nach der aktuellen Uhrzeit gefragt werden. Ist alles richtig konfiguriert, wird er diese Frage auf deutsch beantworten und die Readings des Moduls werden mit entsprechenden Werten befüllt.

Ein Gerät mit Rhasspy verbinden

Erfolgreich befüllter Slot mit dem Alias der Lampe
Erfolgreich erstellte Helper für eine Lampe im RHASSPY Modul

Wenn nach dieser Anleitung vorgegangen wurde, ist das Modul so konfiguriert, dass es Rhasspy alle FHEM-Devices bekannt macht, bei denen das Attribut genericDeviceType definiert ist.

Für die Verbindung eines FHEM-Devices mit Rhasspy sind also folgende Schritte auszuführen:

  1. genericDeviceType Attribut bei einem Device setzen (z.B. switch)
  2. einen "sprechbaren" Namen im Attribut alias vergeben
  3. set rhasspy update devicemap ausführen, um das Device Rhasspy bekannt zu machen

Anhand einer Lampe "Office", die sich nur ein- und ausschalten lässt, könnte das z.B. so aussehen:

attr Office genericDeviceType switch
attr Office alias Licht

Der genericDeviceType switch gibt für ein Gerät vor, dass es sich nur ein- und ausschalten lässt. Beim Typ light z.B. könnte man auch noch die Helligkeit und die Farbe regulieren. Der alias Licht bewirkt, dass in Zukunft einfach "Licht aus" oder "Licht an" gesagt werden kann. Dazu aber später mehr.

Die Lampe ist somit fertig vorbereitet.


Damit Rhasspy auch von diesem Gerät erfährt, muss FHEM ihm davon erzählen. Das passiert, in dem folgender Befehl ausgeführt wird:

set rhasspy update devicemap

Darauf hin werden mehrere Aktionen durchgeführt:

  • Es werden in Rhasspy Slots erstellt, die später in Intents verwenden werden können
  • Diese Slots werden mit den Daten befüllt, die in FHEM für die Verwendung in Rhasspy konfiguriert wurden. In diesem Fall nur der Alias dieser Lampe
  • Ein Training von Rhasspy wird angestoßen, damit Rhasspy das Gerät in gesprochenen Sätzen erkennt


Ob alles funktioniert hat, lässt sich an drei Dingen erkennen:

  1. Es gibt neue Slots in Rhasspy bzw. bereits vorhandene wurden mit neuen Werten ergänzt
  2. Ein list rhasspy enthält den Helper devicemap mit den konfigurierten Geräten und dessen Steuermöglichkeiten (intents)
  3. In den Readings udpateSlots und training des Moduls ist kein Fehler zu erkennen (unter Umständen die Seite im Browser aktualisieren, wenn die Readings noch nicht vorhanden sind)

Einen ersten Intent erstellen

Info green.pngDieses Beispiel enthält bereits einige Sprech-Alternativen und optionale Elemente. Die vorhandenen Möglichkeiten sind zum Einen der offiziellen Dokumentation zu entnehmen, zur Vertiefung gibt es in den Links unten ein sehr informatives Video.
Ein erfolgreich von RHASSPY empfangener und umgesetzter Sprachbefehl

Um die konfigurierte Lampe schlussendlich auch steuern zu können, muss Rhasspy noch wissen, was nach einem erkannten Sprachbefehl anfangen soll. Dazu werden in Rhasspy Sentences/Intents erstellt. Im Falle dieser Lampe, reicht ein einfacher SetOnOff-Intent. Sie kann ja nicht mehr.

Da der Intent aber potentiell für mehrere Geräte dienen können soll, wird es etwas komplizierter, als beim GetTime Intent. Allerdings hat dsa Modul schon passende Slots erstellt, die in eigenen Intents verwendet werden können. Zusätzlich müssen aber Tags verwendet, damit das Modul dann unterscheiden kann, ob ein von Rhasspy geliefertes Wort ein Gerät, ein Raum oder ein Nummernwert ist.

Ein ganz einfacher Intent, um die Lampe ein- und ausschalten zu können, kann z.B. so aussehen:

[de.fhem:SetOnOff]
schalte das $de.fhem.Device-SetOnOff{Device} ( an{Value:on} | aus{Value:off})

Kurz umrissen bedeuten die Teile des Satzes:

  • $de.fhem.Device-SetOnOff ist der Slot, der die Geräte enthält, die mit diesem Intent gesteuert werden sollen. Das Dollarzeichen am Anfang des Slots wird gerne vergessen, darauf also besonders gut aufpassen
  • {Device} ist ein Tag, der dem FHEM-Modul und Rhasspy verrät, dass es sich bei diesem Wort um ein Device handelt. Wichtig bei Tags, die in Verbindung mit diesem Modul verwendet werden ist, dass sie immer mit einem Großbuchstaben beginnen!
  • ( ... | ... ) ist eine Gruppe. Wobei die runden Klammern eine Gruppe beschreiben, die einzelnen Mitglieder dieser Gruppe werden durch die "Pipe" getrennt. In diesem konkreten Fall bedeutet es, der Wert kann "an" ODER "aus" sein
  • {Value:on}/{Value:off} ist wieder ein Tag. Dieser gibt an, dass es sich beim übergebenen Wort um einen Wert handelt. Da das Modul aber die deutschen Wörter "an" und "aus" nicht versteht, müssen hier Synonyme verwendet werden. Das sind jeweils die Werte hinter dem Doppelpunkt.


Wichtig: Da mit Erstellen des ersten Intents wieder Änderungen an der Konfiguration vorgenommen wurden, muss jetzt wieder ein set rhasspy update all ausgeführt werden. In diesem Fall, damit das Modul vom neuen Intent erfährt.


Ist man dieser Schnellstart-Anleitung gefolgt, können aus diesem Satz mit der vorhandenen Lampe jetzt zwei gesprochene Sätze gebildet werden:

schalte das licht an
schalte das licht aus

Die Infos, die daraus resultierend nach einem Sprachbefehl "schalte das licht an" im FHEM-Modul ankommen sind dann unter anderem:

"intent":"SetOnOff"
"Device":"licht"
"Value":"on"

Schlusswort

Sind alle Punkte dieser Schnellstart-Anleitung erfolgreich abgeschlossen, kann damit begonnen werden, das Device rhasspy auf die eigenen Bedürfnisse anzupassen und weitere Geräte damit zu steuern. Alle Informationen dazu finden sich auf der Hauptseite von RHASSPY sowie in der RHASSPY/Vertiefung.

Anhang

Docker-Compose File - Base

version: '3'

services:
    rhasspy:
        image: "rhasspy/rhasspy"
        container_name: rhasspy
        restart: unless-stopped
        volumes:
            - ".config/rhasspy/profiles:/profiles"
            - /etc/timezone:/etc/timezone:ro
        ports:
            - "12101:12101"
            - "12183:12183"
        command: --user-profiles /profiles --profile de
        environment:
          - TZ=Europe/Berlin

Docker-Compose File - Satellite

version: '3'

services:
    rhasspy:
        image: "rhasspy/rhasspy"
        container_name: rhasspy
        restart: unless-stopped
        volumes:
            - ".config/rhasspy/profiles:/profiles"
            - "/etc/localtime:/etc/localtime:ro"
            - "/etc/asound.conf:/etc/asound.conf"
        ports:
            - "12101:12101"
        command: --user-profiles /profiles --profile de
        devices:
          - "/dev/snd:/dev/snd"
        ipc: host

Links