Tach zusammen,
ich versuche eine Sprachsteuerung mittels RHASSPY aufzubauen. Ich habe die Anleitung "Erste Schritte" befolgt und bekomme folgende Ergebnisse:
MQTTClient
Internals:
BUF
CFGFN
Clients :RHASSPY:
ClientsKeepOrder 1
DEF localhost:12183
DeviceName localhost:12183
FD 36
FUUID 63a5a884-f33f-e93f-fea4-d1b3c388c63085c4
NAME rhasspyMQTT2
NR 40721
PARTIAL
STATE opened
TYPE MQTT2_CLIENT
WBCallback
clientId rhasspyMQTT2
eventCount 1453
lastMsgTime 1671807224.94025
nextOpenDelay 5
MatchList:
1:RHASSPY ^.
READINGS:
2022-12-23 15:49:58 state opened
Attributes:
clientOrder RHASSPY
room Rhasspy
subscriptions setByTheProgram
Modul RHASSPY:
Internals:
CFGFN
CONFIGFILE ./rhasspy-de.cfg
FUUID 63a5a8d7-f33f-e93f-e553-27c397c095e6d568
IODev rhasspyMQTT2
LANGUAGE de
LASTInputDev rhasspyMQTT2
MSGCNT 20
NAME rhasspy
NOTIFYDEV global
NR 40734
NTFY_ORDER 50-rhasspy
STATE online
TYPE RHASSPY
autoTraining 60
baseUrl http://127.0.0.1:12101
defaultRoom default
devspec genericDeviceType=.+
encoding utf8
eventCount 27
fhemId fhem
prefix rhasspy
rhasspyMQTT2_MSGCNT 20
rhasspyMQTT2_TIME 2022-12-23 15:30:17
siteId defhem
useGenericAttrs 1
READINGS:
2022-12-23 14:10:47 IODev rhasspyMQTT2
2022-12-23 14:10:47 enableMsgDialog 0
2022-12-23 15:30:17 hotwordAwaiting_default 1
2022-12-23 14:10:47 intents GetTime,GetGarageState,GetTemperature,ChangeLightState
2022-12-23 15:30:17 listening_default 0
2022-12-23 14:15:50 state online
2022-12-23 14:15:50 training Training completed in 0.01 second(s)
2022-12-23 14:15:50 updateSlots OK
TIMER:
rhasspy_autoTraining:
HASH rhasspy
MODIFIER autoTraining
NAME rhasspy_autoTraining
rhasspy_null:
HASH rhasspy
MODIFIER null
NAME rhasspy_null
enable false
toDisable:
ConfirmAction
CancelAction
Choice
ChoiceRoom
ChoiceDevice
helper:
devicemap:
devices:
lng:
commaconversion 1
mutated_vowels:
Ä Ae
Ö Oe
Ü Ue
ß ss
ä ae
ö oe
ü ue
responses:
ContinueSession Sonst noch was? | Weitere Wünsche?
DefaultCancelConfirmation Habe abgebrochen
DefaultChangeIntentRequestRawInput Wechseln zu $rawInput
DefaultChoiceNoOutstanding Warte grade nicht auf eine Auswahl
DefaultConfirmation Gerne!|Wird erledigt|Ok|Jawohl|Zu Diensten
DefaultConfirmationBack Also nochmal
DefaultConfirmationNoOutstanding 'Warte grade nicht auf eine Bestätigung
DefaultConfirmationReceived Ok, werde ich machen
DefaultConfirmationRequestRawInput Bestätige $rawInput
DefaultConfirmationTimeout Tut mir leid, da hat etwas zu lange gedauert
DefaultError Da paßt irgend was nicht
NoActiveMediaDevice Tut mir leid, es ist kein Wiedergabegerät aktiv
NoDeviceFound Tut mir leid, ich konnte kein passendes Gerät finden
NoIntentRecognized Ich konnte leider keinen passenden Intent finden
NoMappingFound Tut mir leid, ich konnte kein passendes Mäpping finden
NoMediaChannelFound Tut mir leid, der angefragte Kanal scheint nicht zu existieren.
NoMinConfidence Deine Angaben waren mit rechnerischen $confidence nicht ausreichend, um eine Aktion auszulösen!
NoNewValDerived Tut mir leid, ich konnte den Zielwert nicht ausrechnen
NoTimedOnDeviceFound Das gewählte Gerät unterstützt leider keine taimer Kommandos
NoValidData Ich habe leider zu wenig Daten um den Vorgang auszuführen
NoValidIntentResponse Fehler. Die respond Funktion wurde von $intent ohne Antworttext aufgerufen
NoValidResponse Fehler. Die respond Funktion wurde ohne Antworttext aufgerufen
RequestChoiceDevice Es kommen mehrere Geräte in Frage, bitte wähle zwischen $first_items oder $last_item
RequestChoiceGeneric Es gibt diese Möglichkeiten, unter denen du wählen kannst: $options
RequestChoiceRoom Es kommen mehrere Geräte in verschiedenen Räumen in Frage, wähle zwischen $first_items oder $last_item
SilentCancelConfirmation
duration_not_understood Tut mir leid, ich habe die Dauer nicht verstanden
reSpeak_failed Tut mir leid, ich kann mich nicht erinnern
timeRequest Es ist $hour Uhr $min
timerCancellation $label im $room gelöscht
weekdayRequest Heute ist $weekDay
Change:
brightness $deviceName ist auf $value gestellt
desired-temp Die Solltemperatur von $location beträgt $value Grad
humidity Die Luftfeuchtigkeit von $location beträgt $value Prozent
knownType $mappingType von $location beträgt $value Prozent
setTarget $device ist auf $value gesetzt
soilMoisture Die Bodenfeuchte von $location beträgt $value Prozent
unknownType Der Wert vom $location beträgt $value Prozent
volume $deviceName ist auf $value gestellt
waterLevel Der Wasserstand von $location beträgt $value Prozent
battery:
0 Der Batteriestand von $location ist $value
1 Der Batteriestand von $location beträgt $value Prozent
temperature:
0 Die Temperatur vom $location ist $value
1 Die Temperatur vom $location beträgt $value Grad
ParadoxData:
confirm Soll $val[0] mit dem Namen und dem besprochenen Gerät ermittelt werden?
hint Du hast widersprüchliche Angaben gemacht: $val[0] und $val[1] passen nicht zusammen.
XtendAnswers:
unknownDevs $uknDevs konnten nicht ermittelt werden
getRHASSPYOptions:
control Im $room kann ich unter anderen diese Geräte steuern: $deviceNames
generic Es können einige Geräte gesteuert werden oder Informationen aus der Haussteuerung abgefragt werden
info Insbesondere $deviceNames stehen als Informationsquellen im $room zur Verfügung
rooms Unter anderem kenne ich die Räume $roomNames
scenes $deviceNames in $room kann auf die Szenen $sceneNames gestellt werden
getStateResponses:
STATE $deviceName hat den Status [$device:STATE]
price Der aktuelle Preis für $reading in $deviceName beträgt [$device:$reading:d] Euro
reading [$device:$reading]
update Update für $deviceName ist angestoßen
timerEnd:
0 $label abgelaufen
1 $label im Raum $room abgelaufen
timerSet:
0 $label im Raum $room ist gestellt auf $seconds Sekunden
1 $label im Raum $room ist gestellt auf $minutetext $seconds
2 $label im Raum $room ist gestellt auf $minutetext
3 $label im Raum $room ist gestellt auf $hours Stunden $minutetext
4 $label im Raum $room ist gestellt auf $hours Uhr $minutes
5 $label im Raum $room ist gestellt auf morgen, $hours Uhr $minutes
6 kein $label im Raum $room gestellt
stateResponses:
inOperation:
0 $deviceName ist fertig
1 $deviceName läuft noch
inOut:
0 $deviceName ist ausgefahren
1 $deviceName ist eingefahren
onOff:
0 $deviceName ist ausgeschaltet|$deviceName ist aus
1 $deviceName ist eingeschaltet|$deviceName ist an
openClose:
0 $deviceName ist geöffnet|$deviceName ist offen
1 $deviceName ist geschlossen|$deviceName ist zu
units:
unitHours:
0 stunden
1 eine stunde
unitMinutes:
0 minuten
1 eine minute
unitSeconds:
0 Beispiel 1a: einige Sekunden
1 Beispiel 1b: genau eine Sekunde
words:
and und
off aus
on an
shortcuts:
tweaks:
Attributes:
languageFile ./rhasspy-de.cfg
room Rhasspy
Leider wird die Frage nach der Uhrzeit nicht erkannt bzw. nicht beantwortet. Ich benutze zur Ein- und Ausgabe ein ESP32Audiokit V2.2 mit der Software ESP32Satellite von @Romkabouter. RHASSPY läuft im Docker wie im Wiki genannt. Kann mir jemand mit den Einstellungen in RHASSPY helfen?
MQTT: Internal,Host: 192.168.xxx.xxx Port: 1883 User: <user> PWD: <pwd>
Audio Recording: Hermes
Wake Word: Hermes
Speech to text: Hermes
Intent regnotion: Hermes
Text to speech: Hermes
Audio playing: Hermes
Dialog management: Rhasspy
Intent handling: disabled
Gruß Roman
Hattest du dann den Abschnitt in sentences.ini auch umbenannt (bei diesen Einstellungen dann auf "[de.fhem:GetTime]")?
EDIT: Die Einstellungen zu MQTT könnten evtl. auch nicht zusammenzupassen. Alles sollte (ausgehend von den CLIENT-Einstellungen) auf 12183 zeigen.
Und überall "Hermes" kommt mir auch komisch vor, ich weiß aber nicht, worauf sich diese Einstellungen beziehen, und für welche Satelliten das jeweils gelten soll (wenn es die Einstellungen der "base" sind).
Die baseUrl stimmt ziemlich sicher auch nicht. Die muss auf die Rhasspy-Base zeigen. Also den Docker Container, in dem Rhasspy läuft. Und dort muss der Port natürlich nach außen freigegeben sein.
Wenn ich den MQTT auf localhost : 12138 stelle bekomme ich kein online im MQTT Client
Sentence.ini ist umbenannt.
Machen wir's ganz von Anfang an:
- Wo ist FHEM installiert (+IP-Adresse)
- Wo ist die Docker Base installiert (+IP Adresse)
- Du verwendest den MQTT-Broker von Rhasspy?
FHEM auf RPi4 IP 192.168.187.76
Docker Base auf RPi4 IP 192.168.187.76
MQTT Brocker von Rhasspy
Das Audiokit erkennt den MQTT Server.
PS: Muss unterbrechen und die Enkel holen
Ok, dann ist das soweit eh richtig.
Aber im Satellit wäre die Config:
MQTT:
- external
- Host: 192.168.187.76
- Port: 12183
- Username/Passwort
Audio Recording:
- muss BetaUser beantworten
Wakeword:
- muss BetaUser beantworten
Speech to Text:
- Hermes MQTT
Intent Recognition:
- Hermes MQTT
Text to Speech:
- Hermes MQTT
Audio Playing:
- muss ebenfalls BetaUser beantworten
Dialogue Management:
- Rhasspy
(Ich hab leider (noch) kein ESP32 Gerät, deshalb kann ich dazu keine Aussage treffen).
Auf der Base muss du auf jeden Fall noch die Satelliten-ID (siteId) des Satelliten in allen Konfigurations-Einstellungen eintragen, in denen das möglich ist (Wakeword, SpeechToText, IntentRecognition, TextToSpeech und Dialogue Management).
Hmmm, die Einstellungen auf dem esp32 habe ich auch grade nicht mehr parat, müsste das Ding erst mal suchen....
So ein Mist. Ich kann mich nochmal mehr anmelden am Port 12101.
Der Versuch Docker zu deinstallieren erweist sich als schwierig. Den Container neu starten ergibt 0.0.0.0:12101 als Port aAngabe. Villeicht kann ich mich deshalb nicht anmelden. Hat jemand schon Docker entfernt. Ist ja schlimmer als Windows.
Warum genau willst du's deinstallieren?
Hast du die beiden Ports beim Start des Containers veröffentlicht?
Ja ich habe den aufruf aus dem Wiki Erste Schritte verwendet. Kann mich wie geschrieben nicht anmelden. Versuche nochmal Docker wie bei Berrybase beschrieben zu installieren. Irgendwie ist das Ganze jetzt verkorkst. Danke für die Hilfe.
Die fehlgeschlagenen Verbindungsversuche hängen eventuell mit der Mosquitto-Version 2.x zusammen, welche im Standard nur localhost zulässt.
https://community.rhasspy.org/t/bullseye-mosquitto-and-authentification-for-remote-access/3444 (https://community.rhasspy.org/t/bullseye-mosquitto-and-authentification-for-remote-access/3444)
Lokal liegt die Datei vermutlich hier: /usr/lib/rhasspy/rhasspy-supervisor/rhasspysupervisor/__init__.py
Auf jeden Fall muss der Port 12183 durchgeschliffen werden
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 de
Gruß Jens
Hallo Jens u.a.,
genauso habe ich es gemacht. Ich werde heute den Faden wieder aufnehmen und erstmal mit Rhasspy arbeiten. Sobald dies in allen Konfigurationsschritte passt werde ich die Anbindung an FHEM versuchen und mich ggf. wieder melden. Ich halte mich auch den Thread von Gisbert.
Gruss Roman
Hallo zusammen,
jetzt hatte ich endlich die Zeit das Problem anzugehen und zu lösen.
Hauptgrund war, ist und bleibt die Verwendung eines geeigneten Satelliten. Der zuerst verwendete ESP32-Rhasspy Satellit hatte Probleme mit der Empfindlichkeit des Mikrofons. Es war ein ESP32-A1S, ein scheinbar komplettes System zur Ein- und Ausgabe. Nach Aenderung an der Software läuft die Spracherkennung zumindest, ist aber nicht das was ich mir vorgestellt habe. Der Versuch mit ESP32 und I2S Mikrofon und Lautsprecher, scheiterte an der Qualität der Signale. Ferner ist die in der Version 2.5.11 vorhandene Wake-Erkennung nicht korrekt eingebunden. Hier ist ein Patch des Porcupine System erforderlich, den ich in der Docker Version noch nicht probiert habe. Andere Wake Erkennungen laufen nur bedingt, was auch an der verwendeten Hardware liegen kann. Ein weitere Versuch mit einem RPI Zero W hingegen und einer Grundinstallation von Rhasspy mit dem Patch läuft zumindest. Eine Anbindung an FHEM werde ich demnächst versuchen.
Erstmal Dank an alle und Gruß
Roman
Danke für den Update!
Schade, dass du dir mit der Wahl der Hardware solche Stolpersteinchen auf der Rhasspy-Seite eingefangen hast...
Dann wünsche ich dir mal, dass das mit der FHEM-Integration wesentlich stressfreier läuft (bin da optimistisch)!