Modulentwicklung für Rhasspy Sprachassistent

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

Vorheriges Thema - Nächstes Thema

Beta-User

#1425
Zitat von: drhirn am 19 Mai 2022, 10:14:04
Eigentlich könnte man RHASSPY überhaupt außen vor lassen. Nicht erkannte Intents könnte ja z.B. auch einfach ein Python-Progrämmchen gleich direkt bearbeiten.
An sich wäre es wünschenswert, wenn man sowas als eine Art "Zwischenprüfung" innerhalb von Rhasspy zentral verfügbar hätte, keine Frage. Ein "Progrämmchen" dürfte allerdings untertrieben sein, weil das ein asynchrones Vorgehen erfordert und mAn. zumindest einige wenige Sitzungsdaten (ggf. auch parallel) gepuffert werden müssen.

Zitat
Aber, wenn schon RHASSPY im Spiel ist, hätte ich mir gedacht, dass man den Input einfach weiterleitet. Mit siteId. Wie auch immer. Um den Rest kümmert sich dann wer anderer. Auch um die Rückmeldung an die richtige Adresse.
Genau dasselbe Problem mit dem Puffern hat man, wenn man es innerhalb FHEM versucht. Zwar kann man an customIntent ja alles (!) weiterleiten, was sich in $data befindet, aber das (zusätzliche) "Sitzungsmanagement" ist ja bereits in RHASSPY drin - es ist also m.E. wesentlich einfacher, diesen Teil einfach (geringfügig?) zu erweitern, statt nochmal eine Parallelstruktur (in Perl oder Python) aufzubauen...

Kann aber durchaus sein, dass ich damit falsch liege :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

JensS

Zitat von: Beta-User am 19 Mai 2022, 09:31:27
U: Schalte den Verstärker an!
R: Wohnzimmer oder Esszimmer?!?
U: Esszimmer...
R: Bitte bestätige das
U: Ja mach!
R: OK
U: Schalte den Verstärker an! - Gibt den Intent [setOnOff] mit dem $DEVICE Verstärker ohne $Raum aus.
R: sessionContinue wird mit dem Text "Wohnzimmer oder Esszimmer?!?" und dem temporär aktivierten Intent [Raum] mit dem Inhalt $Raum gestartet. Alle sonstigen Daten kommen in customData.
U: Esszimmer... - Gibt den Intent [Raum] mit dem $Raum Esszimmer aus.
R: Bastelt sich aus $Raum und und customData ein passendes Szenario zusammen und fragt mit einem weiteren sessionContinue (Intent confirm/cancel) mit dem Text "Bitte bestätige ...", ob das in Ordnung wäre.
U: Ja mach!
R: Führt die Aktion, welche in sessionContinue->customData gespeichert ist aus und schließt die Session mit endSession und dem Text "OK".

Ich denke, so könnte es gehen. Beim ABC funktioniert es jedenfalls.
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Beta-User

Zitat von: Beta-User am 19 Mai 2022, 09:31:27
EDIT: Vermutlich habe ich die betreffenden Stellen identifiziert, die dafür verantwortlich waren. Man muss bei asynchronem Datengeschubse wirklich aufpassen, was man wo wie lange vorhalten sollte...
Jetzt auch getestet; Fix ist im svn...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

#1428
Im Nebenthread gibt's wieder eine Testversion, mit in der DEF aktivierten Key "experimental=1" wechselt RHASSPY jetzt vom
- Gruppen- zum Einzelintent, wenn diese kein Mitglied im Raum hat und es (genau) ein Gerät mit gleichem Namen (im Raum, notfalls auch außerhalb, aber nicht mehr wie eines) gibt und
- Einzel- zum Gruppenintent, wenn es kein (ohne weiteres identifizierbares) Gerät mit diesem Namen gibt und eine gleich benannte Gruppe mind. ein Mitglied im Raum hat.

Das umzusetzen war weniger schwierig als gedacht, und es dürfte auch eher erwartete Ergebnisse zeitigen wie mein gestriger gedanklicher Ansatz:
Zitat von: Beta-User am 22 Mai 2022, 10:20:54bei der "welche Devices passen?"-Anfrage dann nicht nur Arrays mit "im Raum" und "außerhalb Raum" zu liefern, sondern zusätzlich "Devices in so benannten Gruppen im Raum" und "Devices in so benannten Gruppen außerhalb Raum" zu liefern.
Weiß aber noch nicht so recht, ob der jetzige Lösungsvorschlag wirklich alle Fälle abdeckt. Daher das Ganze als Testversion ;) .

Zitat von: Beta-User am 19 Mai 2022, 09:31:27
Weiteres feature der neuen Version:
Für den key "Value" wird ein "custom-flaot-converter" angwandt, [...]
Der ist seit der gestrigen svn-Version  so ergänzt, dass er mit "allen möglichen" Zahlenspielchen in Value umgehen können sollte, einschließlich negativer Zahlen.

Diese Version sollte auch mit pah's Ergänzungen in FEST.txt umgehen können, und hat für alle Varianten von "schriftlichem Input" (Messenger, AMAD.* und Tests) einen Konverter drin, der Kommazahlen so für Rhasspy vorbereitet, dass dann auch wieder die Einzelteile verwertbar nach Value kommen (passende sentences vorausgesetzt). Schriftlich "10,5 Grad" werden also als "10 komma 5 Grad" an Rhasspy-NLU übergeben, das gibt dann "10 . 5" zurück und der "custom-flaot-converter" macht daraus dann wieder "10.5"...
Theoretisch könnte man das noch etwas ausbauen, mit "minus", "12:44 Uhr" und ähnlichem habe ich mich noch nicht befasst.
EDIT: z.B. "12:44 Minuten" als Textübergabe sollten jetzt auch funktionieren.

Zitat von: Beta-User am 17 Mai 2022, 10:06:40
Bliebe dann die Frage, wie man am anderen Ende (also auf der Rhasspy-Seite) sinnvollerweise die STT-Einstellungen konfiguriert, damit man wirklich eher "frei" sprechen kann und nicht zwanghaft bei irgendwas landet, was in sentences.ini angelegt war. Ist Neuland für mich - meine Versuche, "open transcription" zu aktivieren haben in endlosen trainings-sessions geendet... Also falls jemand einen "schnellen Tipp" hat: her damit!
...gilt weiter...

Seid ihr eigentlich alle im Urlaub, oder warum ist es so still grade?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

JensS

Zitat von: Beta-User am 23 Mai 2022, 16:15:15
Seid ihr eigentlich alle im Urlaub, oder warum ist es so still grade?

Im Urlaub hätte ich Zeit und Muße... Es gibt bestimmt noch mehr Tester*innen; oder sagt man Testende?   :o
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Gisbert

Zitat von: Beta-User am 23 Mai 2022, 16:15:15
Seid ihr eigentlich alle im Urlaub, oder warum ist es so still grade?

Hallo Jörg,
nein, eigentlich nicht - aber anscheinend gibt es noch wichtigere Dinge, die mich vom Fhem-Forum ferngehalten haben. Ich verfolge deine Rhasspy-Threads im Groben und muss sagen, dass ich deinen Diskussionen mit drhirn und Jens(S) nicht Schritt halten kann. Das darf als Kompliment verstanden werden; das ist echt eine Menge Arbeit, die du in dieses Projekt gesteckt hast. Ich bin gerne bereit demnächst zu testen, wenn ich genau weiß, was und wie ich es anstellen muss - im Moment wüsste ich es auf Anhieb noch nicht. Fhem halte ich sehr regelmäßig up-to-date, einmal wöchentlich.

Was mich vor allem interessiert, ist ein Dialog, wenn meine Anweisung nicht eindeutig ist, und ein Abbruch durch mich, wenn die weiteren Versuche ebenso nicht eindeutig sind. Die Verbindung zu AMAD würde mich auch interessieren, da ich dieses schon nutze. Schubs mich gerne mit einem Vorschlag an, wie ich den Einstieg in die Veränderungen finde.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

Zitat von: JensS am 23 Mai 2022, 18:32:49
Im Urlaub hätte ich Zeit und Muße...
...und ich keinen hinreichenden Zugriff auf FHEM+Rhasspy, um vernünftig testen zu können ;D ... Daher die Frage.

Aber Danke für die Rückmeldungen bis dato. Ich habe halt keinen wirklichen Anhaltspunkt, wer auf welchem Stand ist und wie zufrieden (oder eben auch nicht ::) ).

Prinzipiell bin ich allerdings sehr froh, dass anscheinend seit längerem keiner irgendwelche berechtigten Beschwerden vorzutragen hat ;D .

Zitat von: Gisbert am 23 Mai 2022, 19:17:10
wenn ich genau weiß, was und wie ich es anstellen muss - im Moment wüsste ich es auf Anhieb noch nicht. Fhem halte ich sehr regelmäßig up-to-date, einmal wöchentlich.
Die letzten Eingriffe waren jedoch "unter der Haube" schon etwas tiefgreifender. Von daher würde mich  bis z.B. Ende der Woche schon die Rückmeldung beruhigen, dass alles keine Auffälligkeiten bringt... Jeder "testbereite User" könnte eine Sicherheitskopie seiner aktuell genutzten .pm machen und entweder die aktuelle svn-Version oder die Test-Version runterladen (Rechte checken) + einfach nutzen (oder ggf. zusätzlich eben den "experimental"-key auf 1 setzen).

Ich bin allerdings dann in der Tat ein paar Tage weg, daher die Sicherheitskopie nicht vergessen (oder rausfinden, wie man notfalls (s)eine alte Version aus dem svn holt).

Zitat
Was mich vor allem interessiert, ist ein Dialog, wenn meine Anweisung nicht eindeutig ist, und ein Abbruch durch mich, wenn die weiteren Versuche ebenso nicht eindeutig sind.
An sich funktioniert "das dialogische" nach meinem Eindruck (jetzt auch mit multi-Kommandos und der svn-Version) ganz gut. Ich weiß aber nicht, auf welchem Stand deine sentences dazu sind usw..
Im Zweifel dazu auf eine der beiden aktuellen Versionen wechseln und dann einen separaten Thread dazu aufmachen oder den "neue Ufer"-Thread fortsetzen, dann können wir das separat - ohne die "komplizierten Zwischenrufe" - so durchackern, dass es (hoffentlich) für dich paßt :) .

Ein wesentliches Hilfsmittel für mich bei dieser Sache war übrigens pah's Testsuite - deswegen hatte ich dazu vor längerem mal einen eigenen Thread dazu aufgemacht. Damit kann man u.A. eben feststellen, wie Rhasspy bestimmte Dinge interpretiert und welche Geräte in FHEM dann ggf. tatsächlich angesprochen werden. Bei Interesse an diesem Punkt bitte einfach diesen "Faden" aufgreifen.

Zitat
Die Verbindung zu AMAD würde mich auch interessieren, da ich dieses schon nutze. Schubs mich gerne mit einem Vorschlag an, wie ich den Einstieg in die Veränderungen finde.
Wenn du bisher AMAD nicht für "voiceInput"-Aktionen genutzt hattest, sollte es reichen,
- dein RHASSPY-FHEM (genauer: dessen siteId wie im gleichnamigen Internal zu finden) als Satelliten für die Intent-Recognition bei Rhasspy anzugeben; das braucht man übrigens auch für das Testen und die Interaktion per msg (Telegram&Co))
- das AMAD-Device als "zulässig" zu benennen, z.B. so:
attr RHASSPY rhasspySpeechDialog allowed= TabletWohnzimmer
Dann mußt du nur noch "irgendwie" den voiceInput aktivieren (ich habe dazu einen shortcut für diese "automagic-Aktion" angelegt), und schon kannst du RHASSPY/Rhasspy auf diesem Weg mit "mach was"-Anweisungen "füttern".

Für mehr Details dazu bitte diese Anleitung per Zitat in einen neuen Thread zu AMAD+RHASSPY, auch das ist vermutlich ein Thema, das besser gesondert abgehandelt wird, damit es übersichtlich bleibt. Und eines, das vielleicht noch nicht hinreichend bekannt ist - damit kann man nämlich auch ohne zusätzliche Hardware (offline-) Sprachsteuerung für FHEM verwirklichen! Und zwar "internationalisiert" und nicht auf die deutsche Sprache beschränkt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

ZitatSeid ihr eigentlich alle im Urlaub, oder warum ist es so still grade?
Ich habe in dieser Woche rund 50 Stunden feste Termine und nächste Woche LEARNTEC - wolltest Du tauschen?

LG

pah

Beta-User

Zitat von: Prof. Dr. Peter Henning am 23 Mai 2022, 20:23:41wolltest Du tauschen?
Danke, nein; mein Stressbedarf ist bereits gefühlt lebenslänglich gedeckt...
Viel Freude jedenfalls mit der LEARNTEC!

Vor diesem Hintergrund aber ein ausdrückliches und fettes Danke für deinen Input über das WE - das hat mich in der Tat weitergebracht und geholfen, manches (teils nur gefühltes) Hindernis (hoffentlich) vollends in den Griff zu bekommen.

PS: du kannst "alle" in den Beispiel-Sätzen gerne ganz oder zum Teil durch "die" oder ähnliches ersetzen. Hatte das als "Gruppenkennwort" eh' schon seit längerem mit drin (es war aber nicht mehr gegenwärtig). Jetzt ist das <die> - vermutlich mit kleineren Einschränkungen - (technisch) nicht mehr  erforderlich. Gleichwohl ist es zum Sprechen aber mit <die> (gefühlt) "runder".
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

ZitatViel Freude jedenfalls mit der LEARNTEC!
Sehn wir mal. Ich hatte eine feste Zusage der Bundesministerin für Bildung und Forschung Bettina Stark-Watzinger für die Eröffnung - jetzt wird sie zwar live, aber nur virtuell da sein.

LG

pah

Beta-User

Zitat von: Prof. Dr. Peter Henning am 24 Mai 2022, 18:32:10
Sehn wir mal. Ich hatte eine feste Zusage der Bundesministerin für Bildung und Forschung Bettina Stark-Watzinger für die Eröffnung - jetzt wird sie zwar live, aber nur virtuell da sein.
Nun denn, immer wieder erhellend zu sehen, welchen Stellenwert welches Thema bei wem so zu haben scheint...
Na ja, vielleicht täuscht das auch. Viel Erfolg jedenfalls.

Im Nebenthread gibt es noch ein update für die Testversion. Da ist jetzt das "changeover"-feature standardmäßig aktiviert, über einen neuen key im DEF kann man einstellen, ob man ganz ausschalten will oder nur changeover von {Device} nach {Group} verhindern (das erscheint mir potentiell "gefährlicher"). Bin unschlüssig, ob die Einstellungsmöglichkeit an dieser Stelle verbleiben soll oder in Tweaks wandern, aber vorab wäre erst mal wichtig, ob es irgendwelche Probleme verursacht und/oder allgemein begrüßt wird (=default würde geändert, wenn zu viele Gegenstimmen kämen)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

ZitatNa ja, vielleicht täuscht das auch.
Leider nicht, heute morgen hat sie ganz abgesagt. Ich habe meinen Unmut schon in die politischen Kanäle eingespeist.

LG

pah

drhirn

Zitat von: Beta-User am 23 Mai 2022, 16:15:15
Seid ihr eigentlich alle im Urlaub, oder warum ist es so still grade?
Ja, war ich wirklich ;)

Wollte gerade mit dem "etwas lauter" spielen. Dabei ist mir etwas anderes aufgefallen:

Ich habe einen TV und einen RCV. Beide mit genericDeviceType "media". Wenn ich jetzt "mach etwas lauter" sage, nimmt sich RHASSPY per Zufall (?) eines der beiden Geräte. Sollte da nicht automatisch nachgefragt werden, welches Device verwendet werden soll?


2022.05.28 12:15:38 5: Response is: Wird erledigt
2022.05.28 12:15:38 5: TV volume 29.5 is a normal command
2022.05.28 12:15:38 5: analyzeAndRunCmd called with command: volume
2022.05.28 12:15:38 5: [Rhasspy] getNeedsConfirmation called, regex is TV
2022.05.28 12:15:38 5: Device selected: TV
2022.05.28 12:15:38 5: room is identified using siteId as wohnzimmer
2022.05.28 12:15:38 5: handleIntentSetNumeric called
2022.05.28 12:15:38 5: Parsed value: mache ein bisschen lauter for key: rawInput
2022.05.28 12:15:38 5: Parsed value: mache ein 0.75 volUp for key: input
2022.05.28 12:15:38 5: Parsed value: 1 for key: confidence
2022.05.28 12:15:38 5: Parsed value: volUp for key: Change
2022.05.28 12:15:38 5: Parsed value: porcupine_raspberry-pi for key: customData
2022.05.28 12:15:38 5: Parsed value: 0.75 for key: Factor
2022.05.28 12:15:38 5: Parsed value: wohnzimmer.pc for key: siteId
2022.05.28 12:15:38 5: Parsed value: SetNumeric for key: intent
2022.05.28 12:15:38 5: Parsed value: wohnzimmer.pc-porcupine_raspberry-pi-8b11b43c-167a-4754-bb11-035452cc9053 for key: sessionId
2022.05.28 12:15:38 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetNumeric => {"input": "mache ein 0.75 volUp", "intent": {"intentName": "de.fhem:SetNumeric", "confidenceScore": 1.0}, "siteId": "wohnzimmer.pc", "id": null, "slots": [{"entity": "Factor", "value": {"kind": "Unknown", "value": "0.75"}, "slotName": "Factor", "rawValue": "bisschen", "confidence": 1.0, "range": {"start": 10, "end": 14, "rawStart": 10, "rawEnd": 18}}, {"entity": "Change", "value": {"kind": "Unknown", "value": "volUp"}, "slotName": "Change", "rawValue": "lauter", "confidence": 1.0, "range": {"start": 15, "end": 20, "rawStart": 19, "rawEnd": 25}}], "sessionId": "wohnzimmer.pc-porcupine_raspberry-pi-8b11b43c-167a-4754-bb11-035452cc9053", "customData": "porcupine_raspberry-pi", "asrTokens": [[{"value": "mache", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 5, "time": null}, {"value": "ein", "confidence": 1.0, "rangeStart": 6, "rangeEnd": 9, "time": null}, {"value": "0.75", "confidence": 1.0, "rangeStart": 10, "rangeEnd": 14, "time": null}, {"value": "volUp", "confidence": 1.0, "rangeStart": 15, "rangeEnd": 20, "time": null}]], "asrConfidence": 0.7460910000000001, "rawInput": "mache ein bisschen lauter", "wakewordId": "porcupine_raspberry-pi", "lang": null}

Prof. Dr. Peter Henning

Das ist ein generelles Problem der unbestimmten Orte - beispielsweise auch "überall" und "irgendwo".

Hier sollte in der Tat immer ein Dialog eingeleitet werden. Beispiel:


----> Starting dialog
[Babble_DoIt] Input:  bitte spiele musik
              Ergebnis: Category=1.3.0: Gerät=musik Ort=none Verb=spielen Ziel=none /
              Antwort:  {speak('Tab2.EG','Das mache ich gerne, bitte sage mir wo Du gerade bist')}
---->
[Babble_DoIt] Input:  ich bin im wohnzimmer
              Ergebnis: Category=3.4.7: Gerät=ich Ort=wohnzimmer Verb=none Ziel=none /
              Antwort:  {speak('Tab2.EG','Von wem soll ich im wohnzimmer Musik spielen? ')}
---->
[Babble_DoIt] Input:  von den pogues
              Ergebnis: Category=3.2.5: Gerät=pogues Ort=none Verb=none Ziel=den /
              Antwort:  {speak('Tab2.EG','OK, ich werde im wohnzimmer die spezielle Musik pogues von   spielen ')}
----> Ending dialog

Beta-User

Hmmm, das scheint mir eher ein spezielles Überbleibsel aus der Zeit vor der Dialog-Option zu sein ("nimm das erste passende Gerät aus dem aktuellen Raum"). Muss mal schauen, ob diese Spezialbehandlung noch sinnvoll ist oder ergänzt/umgebaut werden sollte...Vermutlich ist es wirklich zufällig (for keys ...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files