Modulentwicklung für Rhasspy Sprachassistent

Begonnen von drhirn, 11 März 2021, 15:59:50

Vorheriges Thema - Nächstes Thema

drhirn

Hmm. Ist jetzt nur so ein Bauchgefühl, aber ich tät's getrennt lassen. Wobei das mit dem Tweak schon was hätte. Aber ich tendiere eher dazu, eine Rückmeldung zu bekommen, wenn es ein Gerät nicht gibt. Bevor RHASSPY einfach irgendwas schaltet.

drhirn

Zum "User"-Bereich in der Sprachdatei: Ist der wirklich brauchbar? Ich mein, bei einem Update muss ich sowieso editieren. Da kann ich doch gleich auch meine "alten" Sätze wieder rein bauen. Einfacher ist's zwar. Aber angreifen muss ich's sowieso. Wär's da nicht praktischer, wir liefern eine Standard-Datei, binden aber auch zusätzlich Dateien ein, die ähnlich heißen (rhasspy-de-user.cfg z.B.)?

drhirn

#647
Moment mal. Bei SetTimedOnOff wird bei mir das Licht IN fünf Sekunden eingeschaltet. Und nicht FÜR fünf Sekunden. Soll das so sein?

Liegt an meinem Test-Device

Ziton

Hallo zusammen,

ich würde gerne mit Tests unterstützen bin aber noch zu sehr mit mir selbst beschäftigt. Musste mein rhasspy nochmal neu aufsetzen weil ich irgendwas kaputt konfiguriert habe
beim Versuch die Leds meines respeaker ans laufen zu bekommen.

In meinem Kopf schweben noch folgende Fragen, vielleicht kann mir die jemand von euch beantworten.
Ist es möglich für ausgewählte Intents eine Bestätigung einzufordern? Gelegentlich aktiviert sich Rhasspy selbst und erkennt einen Sprachbefehl obwohl nahezu stille im Raum herrscht.
Oft nicht weiter schlimm aber bei dem ein oder anderen Schaltbefehl wäre es mir lieber wenn rhasspy vorher nochmal nachfragt.

Gibt es eine Empfehlung welchen Weg man beschreiten sollte wenn ich Rhasspy in mehreren Räumen einsetzen möchte?
Ich tendiere zur Zeit eher dazu Satellites aufzusetzen. Dann hat man die Sprachkonfiguration an einer Stelle. Derzeit gibt es aber, soweit ich es durchblicke, keine Möglichkeit einen "room <-> siteID" Mapping vorzunehmen oder? Ist so etwas ggf. noch in Planung?


drhirn

Zitat von: Ziton am 28 Mai 2021, 10:50:57
Gibt es eine Empfehlung welchen Weg man beschreiten sollte wenn ich Rhasspy in mehreren Räumen einsetzen möchte?
Ich tendiere zur Zeit eher dazu Satellites aufzusetzen. Dann hat man die Sprachkonfiguration an einer Stelle. Derzeit gibt es aber, soweit ich es durchblicke, keine Möglichkeit einen "room <-> siteID" Mapping vorzunehmen oder? Ist so etwas ggf. noch in Planung?

Doch, gibt's. Du musst die Satelliten in deren Web-GUI nur so benennen, wie der Raum heißt, in dem deine Geräte sind. Also so, wie das FHEM-room oder FHEM-rhasspyRoom Attribut heißt. Meine Satelliten heißen z.B. "wohnzimmer", "küche" und "vorraum".

Willst du mehrere Satelliten im selben Raum haben kannst du die z.B. so benennen: "wohnzimmer.sofa", "wohnzimmer.esstisch", etc. Das ist eine Option von Rhasspy, das Modul sollte damit umgehen können. Ich hab das aber noch nicht getestet.

Bei deiner ersten Frage bin ich mir fast ganz sicher, dass das geht. Ich hoffe aber, da kann sich Beta-User dazu äußern.

drhirn

Szenen:

Mein Slot "de.fhem.Scenes" (automatisch erstellt) sieht richtig so aus:

( Esslicht ){Scene:Esslicht}
( AllesAn ){Scene:AllesAn}
( Schlummerlicht ){Scene:Schlummerlicht}
( AllesAus ){Scene:AllesAus}
( DunklesFernsehlicht ){Scene:DunklesFernsehlicht}
( Fernsehlicht ){Scene:Fernsehlicht}
( Computerlicht ){Scene:Computerlicht}


Sobald ich aber ein HUE-Device von RHASSPY steuern lasse (also in den Raum Rhasspy stelle), werden alle HUE Lichtszenen (die von der Bridge automatisch erstellt werden) zu Rhasspy übertragen. Und das leider nicht richtig. Der Slot sieht dann so aus:

( Konzentrieren#[id=kcz2eYl2goK91Hz] ){Scene:Konzentrieren#[id=kcz2eYl2goK91Hz]}
( Esslicht ){Scene:Esslicht}
( Gedimmt#[id=nEY-TZ2qVEx6WpP] ){Scene:Gedimmt#[id=nEY-TZ2qVEx6WpP]}
( Tropendämmerung#[id=Li5XQV2Ckvcl9ac] ){Scene:Tropendämmerung#[id=Li5XQV2Ckvcl9ac]}
( Konzentrieren#[id=ig9Hb2jZ6iP9X0E] ){Scene:Konzentrieren#[id=ig9Hb2jZ6iP9X0E]}
( Energie#tanken#[id=ykGAH5vm9qguUhm] ){Scene:Energie#tanken#[id=ykGAH5vm9qguUhm]}
( Frühlingsblüten#[id=amg18-TICTPiayR] ){Scene:Frühlingsblüten#[id=amg18-TICTPiayR]}
( Lesen#[id=qk7qNpKVeugEugh] ){Scene:Lesen#[id=qk7qNpKVeugEugh]}
( Sonnenuntergang#Savanne#[id=J88yqZyARhlQh4q] ){Scene:Sonnenuntergang#Savanne#[id=J88yqZyARhlQh4q]}
( Hell#[id=QszaD6316SsOGNX] ){Scene:Hell#[id=QszaD6316SsOGNX]}
( Tropendämmerung#[id=1a6rDrpjg-i33u8] ){Scene:Tropendämmerung#[id=1a6rDrpjg-i33u8]}
( Hell#[id=Kd35TY8qIb6pTax] ){Scene:Hell#[id=Kd35TY8qIb6pTax]}
( Sonnenuntergang#Savanne#[id=968VgE7b29JysiY] ){Scene:Sonnenuntergang#Savanne#[id=968VgE7b29JysiY]}
( AllesAus ){Scene:AllesAus}
( Frühlingsblüten#[id=fmsyN3Ve4fYGqhG] ){Scene:Frühlingsblüten#[id=fmsyN3Ve4fYGqhG]}
( DunklesFernsehlicht ){Scene:DunklesFernsehlicht}
( Nachtlicht#[id=0F5VwJFcHpymkm2] ){Scene:Nachtlicht#[id=0F5VwJFcHpymkm2]}
( Fernsehlicht ){Scene:Fernsehlicht}
( Nachtlicht#[id=yJ0tWdBhE-emL3q] ){Scene:Nachtlicht#[id=yJ0tWdBhE-emL3q]}
( Nordlichter#[id=lk39fWLRdxjTqVl] ){Scene:Nordlichter#[id=lk39fWLRdxjTqVl]}
( Sonnenuntergang#Savanne#[id=SOcyx8ZWLqI73MR] ){Scene:Sonnenuntergang#Savanne#[id=SOcyx8ZWLqI73MR]}
( Tropendämmerung#[id=yzMdTFOtJPAIVel] ){Scene:Tropendämmerung#[id=yzMdTFOtJPAIVel]}
( Konzentrieren#[id=WGjGSBvWPfW0JH0] ){Scene:Konzentrieren#[id=WGjGSBvWPfW0JH0]}
( Entspannen#[id=gbca4wF9Vni8oSb] ){Scene:Entspannen#[id=gbca4wF9Vni8oSb]}
( Gedimmt#[id=oZRhLrscoEgC7Xu] ){Scene:Gedimmt#[id=oZRhLrscoEgC7Xu]}
( Nachtlicht#[id=Ke4VCTMCsSNaIli] ){Scene:Nachtlicht#[id=Ke4VCTMCsSNaIli]}
( Entspannen#[id=MkBqmt1iphIRayB] ){Scene:Entspannen#[id=MkBqmt1iphIRayB]}
( Energie#tanken#[id=1N0Ow9IjFvwJWOb] ){Scene:Energie#tanken#[id=1N0Ow9IjFvwJWOb]}
( AllesAn ){Scene:AllesAn}
( Entspannen#[id=g9hPzEGZkAR2g5j] ){Scene:Entspannen#[id=g9hPzEGZkAR2g5j]}
( Schlummerlicht ){Scene:Schlummerlicht}
( Frühlingsblüten#[id=wZdk5cpy35oldlw] ){Scene:Frühlingsblüten#[id=wZdk5cpy35oldlw]}
( Gedimmt#[id=7r1VzbwX5H5VVqW] ){Scene:Gedimmt#[id=7r1VzbwX5H5VVqW]}
( Energie#tanken#[id=iJiMFXkE57qvCJ7] ){Scene:Energie#tanken#[id=iJiMFXkE57qvCJ7]}
( Lesen#[id=s-co9adxMQsAsEz] ){Scene:Lesen#[id=s-co9adxMQsAsEz]}
( Nordlichter#[id=UloxktBtdsVJEUg] ){Scene:Nordlichter#[id=UloxktBtdsVJEUg]}
( Hell#[id=jJAU3n8QlDZI4Zh] ){Scene:Hell#[id=jJAU3n8QlDZI4Zh]}
( Lesen#[id=IYY-Qkhs6577mil] ){Scene:Lesen#[id=IYY-Qkhs6577mil]}
( Nordlichter#[id=l9gNnheN-NwDIgY] ){Scene:Nordlichter#[id=l9gNnheN-NwDIgY]}
( Computerlicht ){Scene:Computerlicht}


Training wirft somit sofort einen Fehler.

Wie kommt RHASSPY drauf, dass das gültige Szenen sind?

Ziton

Hallo,

ich habe jetzt auch ein komisches Phänomen und komme nicht auf das Problem.

Mein SetOnOff Intent quittiert jetzt alles mit "Das ist leider etwas schief gegangen". Feststellen kann ich das Problem erst seit ich einen Satallite mit der siteID "kueche" erstellt habe und die siteId des "servers" auf "wohnzimmer" umbenannt habe. Soweit ich das überblicken kann funktioniert die Kommunikation auch problemlos. SetNumeric oder MediaControls Intents funktionieren in beiden Räumen.

Auszug aus dem Logfile beim Versuch das Gerät "receiver" aus dem Raum Wohnzimmer einzuschalten:

2021.05.29 12:59:14 3: CUL_HM set Th.Rm.00 statusRequest noArg
2021.05.29 12:59:24 5: RHASSPY: [RhasspyTK] Parse (IO: Mqtt.Rhasspy): Msg: hermes/dialogueManager/sessionStarted => {"sessionId": "wohnzimmer-bumblebee_raspberry-pi-6fe55acf-db37-467d-8c9c-8dfd75bb66c5", "siteId": "wohnzimmer", "customData": "bumblebee_raspberry-pi", "lang": null}
2021.05.29 12:59:24 5: Parsed value: wohnzimmer-bumblebee_raspberry-pi-6fe55acf-db37-467d-8c9c-8dfd75bb66c5 for key: sessionId
2021.05.29 12:59:24 5: Parsed value: wohnzimmer for key: siteId
2021.05.29 12:59:24 5: Parsed value: bumblebee_raspberry-pi for key: customData
2021.05.29 12:59:24 5: room is identified using siteId as wohnzimmer
2021.05.29 12:59:27 5: RHASSPY: [RhasspyTK] Parse (IO: Mqtt.Rhasspy): Msg: hermes/intent/de.fhem_SetOnOff => {"input": "receiver on", "intent": {"intentName": "de.fhem:SetOnOff", "confidenceScore": 1.0}, "siteId": "wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "receiver"}, "slotName": "Device", "rawValue": "receiver", "confidence": 1.0, "range": {"start": 0, "end": 8, "rawStart": 0, "rawEnd": 8}}, {"entity": "value", "value": {"kind": "Unknown", "value": "on"}, "slotName": "value", "rawValue": "einschalten", "confidence": 1.0, "range": {"start": 9, "end": 11, "rawStart": 9, "rawEnd": 20}}], "sessionId": "wohnzimmer-bumblebee_raspberry-pi-6fe55acf-db37-467d-8c9c-8dfd75bb66c5", "customData": "bumblebee_raspberry-pi", "asrTokens": [[{"value": "receiver", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 8, "time": null}, {"value": "on", "confidence": 1.0, "rangeStart": 9, "rangeEnd": 11, "time": null}]], "asrConfidence": 0.999297532, "rawInput": "receiver einschalten", "wakewordId": "bumblebee_raspberry-pi", "lang": null}
2021.05.29 12:59:27 5: Parsed value: SetOnOff for key: intent
2021.05.29 12:59:27 5: Parsed value: receiver on for key: input
2021.05.29 12:59:27 5: Parsed value: receiver for key: Device
2021.05.29 12:59:27 5: Parsed value: bumblebee_raspberry-pi for key: customData
2021.05.29 12:59:27 5: Parsed value: wohnzimmer for key: siteId
2021.05.29 12:59:27 5: Parsed value: 1 for key: probability
2021.05.29 12:59:27 5: Parsed value: on for key: value
2021.05.29 12:59:27 5: Parsed value: receiver einschalten for key: rawInput
2021.05.29 12:59:27 5: Parsed value: wohnzimmer-bumblebee_raspberry-pi-6fe55acf-db37-467d-8c9c-8dfd75bb66c5 for key: sessionId
2021.05.29 12:59:27 5: handleIntentSetOnOff called
2021.05.29 12:59:27 5: Device = receiver
2021.05.29 12:59:27 5: Value =
2021.05.29 12:59:27 5: Response is: Da ist leider etwas schief gegangen


Die beiden Logzeilen Device = ... und Value = ... habe ich eingefügt um mich dem Problem zu nähern. Anscheinend ist kein Wert enthalten. Da steigt mein Verständnis jetzt aber leider aus. Weiter oben steht "Parsed value: on for key: value"

drhirn

Kannst du bitte ein RAW Listing vom Device schicken?

Ziton


drhirn

Hmm, seh auf die Schnelle nichts ungewöhnliches. Kannst du mir bitte auch noch ein List vom Wz.VSX_S510 schicken?

Ziton

Ebenfalls im Anhang

Das Device spielt aber kein Rolle. SetOnOff funktioniert derzeit mit keinem Device.

Ein bisschen seltsam...

drhirn

Schräg! Welche Version vom Modul?

Und kannst du bitte nur zum Testen ein SetOnOff-Mapping setzten? (SetOnOff:cmdOn=on,cmdOff=off)

Ziton

Modul Version ist jetzt die letzte 0.4.16
Hatte das Problem aber auch mit der 0.4.12 ... Wollte ausschließen das es an der Version liegt  :)
Aber mit der 0.4.12 hat es schon funktioniert. Wie gesagt bevor ich den Satallite hinzugefügt habe. Kann mir aber nicht erklären warum das bisher nur zu einem Problem beim SetOnOff Intent führt und
nicht bei den anderen. Habe grade nochmal ein de.fhem:GetOnOff getestet. Das scheint auch zu funktionieren.

Achso das Mapping einzufügen hat keinen Unterschied gemacht. Hatte das testweise zuvor auch schon mal probiert.


drhirn

Gibt auf GitHub in der dev-Branch eine Version 0.4.17 (https://github.com/fhem/fhem-rhasspy/blob/dev/FHEM/10_RHASSPY.pm). Bzw. auch hier: https://forum.fhem.de/index.php/topic,119447.msg1159345.html#msg1159345.
Kannst du die bitte mal versuchen?

Aber so grundsätzlich versteh ich das eh nicht. Es hat mal funktioniert. Mit 0.4.12 ohne Satellit. Richtig?
Dann hast du die siteIDs von Rhasspy (Base + Satellit) geändert. Und seit dem geht's nicht mehr. Richtig?

Ziton

Ja genau
Zumindest ist mir ansonsten keine weitere Änderung eingefallen.
Habe auch den Sentence für SetOnOff nochmal auf ein sehr einfaches Schema gesetzt um das auszuschließen. Aber auf Rhasspy Seite werten die Tags alle korrekt erkannt.

0.4.17 funktioniert leider auch nicht