FHEM und Rhasspy

Begonnen von drhirn, 28 Juli 2020, 14:28:50

Vorheriges Thema - Nächstes Thema

drhirn

Verstehe, was du willst.
Sollte einfach zu lösen sein. Wir könnten den jeweiligen Raum einfach so benennen, wie das Device heißt.

Mir wäre aber lieber, wenn wir zuerst die derzeitige Funktionalität des Moduls überprüfen könnten. Ich hab ja wie gesagt, nicht viel Ahnung davon, was ich da mache ;). Wenn alles zu unserer Zufriedenheit läuft, können wir Funktionen dazu bauen. Bzw. kann das ja jeder selber mittels Pull-Request.

Ich habe z.B. derzeit noch das Problem, dass FHEM bei Lichtszenen doppelt reagiert.

Bei sowas:

defmod Beleuchtung LightScene lampe1 lampe2
attr Beleuchtung userattr rhasspyChannels:textField-long
attr Beleuchtung rhasspyChannels Esslicht=set Beleuchtung scene Esslicht\
Fernsehlicht=set Beleuchtung scene Fernsehlicht\
Computerlicht=set Beleuchtung scene Computerlicht
attr Beleuchtung rhasspyMapping SetOnOff:cmdOn=set Beleuchtung scene AllesAn,cmdOff=set Beleuchtung scene AllesAus
attr Beleuchtung rhasspyName beleuchtung
attr Beleuchtung room Rhasspy


bekomme ich zuerst "da ist etwas schiefgelaufen" und dann "ok". Das ist etwas irritierend. Ist das bei euch auch so?

laberlaib

Im Log sollte er doch anzeigen, was er genau versteht und welche Intents er aufruft etc. Dann sollte man aj erstmal sehen, ob der SetOnOff- oder der Mediachannels-Intent die Probleme macht, oder beide.
Rufst Du per Textcommand auf, so dass zumindets ein Problem bei Rhasspy ausgeschlossen werden kann und nur wirklich ein Intent aufgerufen wird?

Dann könntest Du auch (testweise) versuchen, alles über den MediaChannels-Intent abzuwickeln: also via den Channels "AnLicht" und "AusLicht".

Wie tief hast du den SNIPS zu STE geändert? Auf einer Skala von "Suchen-Ersetzen SNIPS>STE" bis zu komplettem Rewrite der einzelnen Funktionen?



--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

drhirn

Zitat von: laberlaib am 28 September 2020, 18:17:11
Im Log sollte er doch anzeigen, was er genau versteht und welche Intents er aufruft etc. Dann sollte man aj erstmal sehen, ob der SetOnOff- oder der Mediachannels-Intent die Probleme macht, oder beide.
Rufst Du per Textcommand auf, so dass zumindets ein Problem bei Rhasspy ausgeschlossen werden kann und nur wirklich ein Intent aufgerufen wird?

Es hat mit dem Aufbau der handleIntentXY-Funktionen zu tun. Aber ich hab's noch nicht ganz durchschaut. Da wird irgendwie immer eine Antwort gesendet (letzte Zeile). Aber halt auch, wenn der Aufruf eigentlich passt. Und somit doppelt. Keine Ahnung, warum Thyraz das so gelöst hat. Es muss aber einen Grund geben. Bei Snips hat's ja funktioniert. Und ich bilde mir ein, bei meinem vorigen Modul auch.
Ist mir bis jetzt aber nur bei Sprachbefehlen aufgefallen. Bei Textbefehlen nicht.

Zitat von: laberlaib am 28 September 2020, 18:17:11
Wie tief hast du den SNIPS zu STE geändert? Auf einer Skala von "Suchen-Ersetzen SNIPS>STE" bis zu komplettem Rewrite der einzelnen Funktionen?

Mehr als Suchen-Ersetzen, weniger als kompletter Rewrite ;)

laberlaib

Mach halt mal verbose 5 im Modul und guck was das Log bringt.
Eigentlich ist die Ausgabe am Ende entweder Erfolg oder Fehler.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

drhirn

Wenn's nur so einfach wär ;)

Hotword erkannt - Ausgabe "bling":

2020.09.28 19:44:47 5: publish received for hermes/dialogueManager/sessionStarted, {"sessionId": "wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290", "siteId": "wohnzimmer", "customData": "default", "lang": null}
2020.09.28 19:44:47 5: Parsed value:  for key: intent
2020.09.28 19:44:47 5: Parsed value:  for key: rawInput
2020.09.28 19:44:47 5: Parsed value:  for key: input
2020.09.28 19:44:47 5: Parsed value: wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290 for key: sessionId
2020.09.28 19:44:47 5: Parsed value: wohnzimmer for key: siteId
2020.09.28 19:44:47 5: Parsed value:  for key: probability


Intent erkannt - Ausgabe "da ist etwas schiefgegangen":

2020.09.28 19:44:50 5: publish received for hermes/intent/de.fhem:SetOnOff, {"input": "Licht an", "intent": {"intentName": "de.fhem:SetOnOff", "confidenceScore": 1.0}, "siteId": "wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "Licht"}, "slotName": "Device", "rawValue": "licht", "confidence": 1.0, "range": {"start": 0, "end": 5, "rawStart": 0, "rawEnd": 5}}, {"entity": "OnOffValue", "value": {"kind": "Unknown", "value": "an"}, "slotName": "Value", "rawValue": "an", "confidence": 1.0, "range": {"start": 6, "end": 8, "rawStart": 6, "rawEnd": 8}}], "sessionId": "wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290", "customData": null, "asrTokens": [[{"value": "Licht", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 5, "time": null}, {"value": "an", "confidence": 1.0, "rangeStart": 6, "rangeEnd": 8, "time": null}]], "asrConfidence": null, "rawInput": "licht an", "wakewordId": "default", "lang": null}
2020.09.28 19:44:50 5: Parsed value: 1 for key: probability
2020.09.28 19:44:50 5: Parsed value: wohnzimmer for key: siteId
2020.09.28 19:44:50 5: Parsed value: Licht an for key: input
2020.09.28 19:44:50 5: Parsed value: Licht for key: Device
2020.09.28 19:44:50 5: Parsed value: an for key: Value
2020.09.28 19:44:50 5: Parsed value: wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290 for key: sessionId
2020.09.28 19:44:50 5: Parsed value: licht an for key: rawInput
2020.09.28 19:44:50 5: Parsed value: SetOnOff for key: intent
2020.09.28 19:44:50 5: handleIntentSetOnOff called
2020.09.28 19:44:50 5: Device selected: lightSceneWz
2020.09.28 19:44:50 5: rhasspyMapping selected: cmdOn=set lightSceneWz scene AllesAn,cmdOff=set lightSceneWz scene AllesAus
2020.09.28 19:44:50 5: Running command set lightSceneWz scene AllesAn on device lightSceneWz


Befehl ausgeführt - Ausgabe "ok"

2020.09.28 19:44:52 5: publish received for hermes/dialogueManager/sessionEnded, {"termination": {"reason": "nominal"}, "sessionId": "wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290", "siteId": "wohnzimmer", "customData": "default"}
2020.09.28 19:44:52 5: Parsed value:  for key: intent
2020.09.28 19:44:52 5: Parsed value:  for key: rawInput
2020.09.28 19:44:52 5: Parsed value: wohnzimmer-default-41b6532a-2755-4882-ad6e-b6a12f3bb290 for key: sessionId
2020.09.28 19:44:52 5: Parsed value:  for key: input
2020.09.28 19:44:52 5: Parsed value: wohnzimmer for key: siteId
2020.09.28 19:44:52 5: Parsed value:  for key: probability


Wie gesagt, der Intent liefert die Standard-Ansage "Fehler". Danach wird der Befehl ausgeführt und die Session je nach Erfolg mit der definierten Ansage ("ok" in dem Fall) abgeschlossen.

Kann nicht schwer zu lösen sein. Aber mir fehlt gerade etwas die Zeit.

drhirn

Es scheint ja, als ob das bei dir nicht passiert. Und auf meiner Test-Maschine auch nicht, wie ich gerade festgestellt habe. Muss also eher was mit meiner FHEM-Installation zu tun haben. Irgendwie beruhigend, irgendwie auch nicht ;).

laberlaib

vgl. parsParam...  :/

Ich bin mir nicht sicher, ob ich ein ähnliches Verhalten mit den doppelten Ansagen bei SNIPS auch mal hatte - inzwischen verschwimmen da die Erinnerungen.
Aber mal ein wenig Detektiv sein:

Bei meinen Tests gebe ich immer noch in Rhasspy direkt die Sätze ein und verwende kein Audio. Aber das dürfte ja keine Rolle spielen.

im Grunde wird "STE_respond" nur 2x aufgerufen: einmal bei "STE_onmessage" wenn ein Shortcut vermutet wird und einmal als Bestätigung nach einem Standardintent.

Wenn Du nun sagst, dass das evtl. an deiner Installation liegt, dann eine mögliche Vermutung:
"STE_onmessage" wird "irgendwie" 2x aufgerufen (leider Blick ich nicht so ganz, wo das überhaupt aufgerufen wird):

  • 1x auf dem MQTT-Topic für den Shortcut, was aber nicht ins log kommt und den "Default Error" auslöst (ca. Zeilen 780ff).
  • 1x auf dem MQTT-Topic für den SetOnOff intent, was dann die richtige Reaktion und auch die Richtige Ausgabe, "ok" auslöst.
also mal gucken, was da noch im Raum "Rhasspy" so rumfliegt?
(btw: seh ich das richtig in Zeile 317, dass das Userattribut dazu "shortcuts" heißen muss? das wäre ja unter rhasspyShortcuts (oder rhasspyShortcutsDE :p) besser aufgehoben)

D.h. man könnte mal dem ganzen MQTT-Verkehr zuhören, zum Glück gibts da ja was:
https://forum.fhem.de/index.php/topic,95918.0/all.html
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

drhirn

"STE_onmessage" wird immer dann aufgerufen, wenn eine MQTT-Nachricht über hermes/intent/+, hermes/dialogueManager/sessionStarted oder hermes/dialogueManager/sessionEnded daher kommt.

Mir ist das bisher nur aufgefallen, wenn ich Spracheingaben mache. Bei Texteingaben habe ich ja keine Sprachausgabe.

Das mit shortcuts ist auch bei Thyraz so. Das passt schon. Gilt ja nur für das Snips-/Rhasspy-Device. Wie auch response. Habe ich übrigens noch gar nicht getestet.

drhirn

Also, das mit der doppelten Sprachausgabe scheint an den Satelliten zu liegen. Solange ich nur einen Master habe, klappt alles einwandfrei. Sobald ich einen Satellit hinzufüge, kommt irgendwo ein "OK" als Bestätigung daher. Ich befürchte, das kommt von Rhasspy.

drhirn

#39
Die neue Version kann jetzt auch mit Shortcuts umgehen.

Dafür wird nach einem set [device] updateSlots ein neues Sentence-File mit dem Namen de.fhem.Shortcuts.ini angelegt und alle Shortcuts rein geschrieben.

Ich hab das mal auf die Schnelle mit denen getestet (ergeben keinen Sinn, macht aber nichts):

attr Ste shortcuts Wieviel Trauben ist es={return "es ist " . qx(date +%R) . "Trauben";;}\
Wieviel Orangen ist es={return "es ist " . qx(date +%R) . "Bananen";;}\
schreibe apfel auf die Einkaufsliste={return "Äpfel stehen auf der Einkaufsliste";;}

laberlaib

Ich bin gerade an der Wakewordkonfiguration:

1) Welche Dienst könnt Ihr da empfehlen?
Ich hab gerade Porcupine, aber da es da nur Englische Wakewords gibt, ist das etwas schwietig für die ganze Familie. Bin also am rumspielen mit der Sensitiviät.

2) Wie kann ich den die Reaktionszeit erhöhen? Der wartet sehr lange auf Input nach dem er aktiviert wurde. Auch per Weboberfläche: aktiviert, dann spricht man sein Sätzchen und dann brauchts noch 2-5 Sekunden, bis der Befehl ausgeführt wird, da er noch aufzeichnet.

Gibts da n Trick?
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

drhirn

Ich bin eigentlich mit Raven zufrieden. Habe aber noch nicht genügend Praxistests gemacht.

Bezüglich dem zweiten Punkt würde ich mal im Rhasspy-Forum fragen. Eventuell hat dort jmd. eine Idee.

JensS

Als Wakeword nutze ich Snowboy(alexa_02092017.umdl), das geht fix und Alexa versteht jeden.

Die Aufzeichnung des Sprachbefehls sollte bei einer Sprechpause von ca. 0,5 Sekunden enden und sofort ausgeführt werden.
Da Rhasspy ziemlich lange bracht, um die Bestätigungstöne(WakeWAVE, Recorded WAVE) auszugeben, habe ich diese auskommentiert (# am Anfang).

Insgesamt bin ich sehr zufrieden mit dem Snips-Ersatz, welcher für meine Belange genügt.

Gibt es eine einfache Möglichkeit, Snips-Skills, wie z.B. Wikipedia zu implementieren?

Gruß Jens
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.

Thargor

#43
Hallo zusammen,

ich bin jetzt versuchsweise auch mal auf den Rhasspy-Zug aufgesprungen. Meine Konfiguration besteht aus einem Rhasspy-Server auf dem NAS und einem Satellite (aktuell noch ein Raspi-4). Durch Trial and Error bin ich inzwischen soweit, dass ich bestimmte Devices an/ausschalten kann (Snowboy/Kaldi/NanoTTS). Da mir der SNIPS Hintergrund fehlt, habe ich noch nicht wirklich verstanden wie man das nun erweitern kann. Gibt es da irgendeine Anleitung?

Wie kann ich zum Beispiel erreichen, dass ich Lampen nicht nur An/Aus-Schalten kann, sondern auch bestimmte Helligkeiten oder Lichtszenen per Name setzen kann.

Meine Sentence.ini sieht aktuell so aus:

Zitat
[global]
artikel = [( der | die | das | den )]
end = [( kollege  | mein freund )]
SetStart = [ [ schalt[e] | stell[e] | mach[e] ] [<artikel>] ]
DeviceRoom = ($de.fhem.Device){Device} [im] [($de.fhem.Room){Room}]

[de.fhem:SetOnOff]
<global.SetStart> <global.DeviceRoom> $OnOffValue{Value} <global.end>

Eine Seite vorher habe ich folgenden Eintrag gefunden:

Zitat
[de.fhem:SetNumeric]
<global.SetStart> <global.DeviceRoom> [auf] (0..100 | dunkel:10 | hell:100 | heller:100 | dunkler:10){Value} [Prozent] <global.end>

Wie muss die entsprechende Reaktion in rhasspyMapping eintragen?

Kann mir hier jemand einen Schubs in die richtige Richtung geben?


Danke!

P.S: Woher kommen eigentlich die Antwortsätze "Mache ich doch sehr gerne" Sind die im Rhasspy-Modul fest kodiert?

JensS

#44
Hier mal das rhasspyMapping meiner dimmbaren Ikea-Lampe:SetOnOff:cmdOn=on,cmdOff=off
GetOnOff:currentVal=state,valueOff=off
SetNumeric:currentVal=pct,cmd=pct,minVal=5,maxVal=100,step=10,type=Helligkeit
GetNumeric:currentVal=pct,type=Helligkeit
Helligkeit:response="Die Ikea-Lampe ist auf [HUEDevice4:pct] Prozent eingestellt"

Für "heller" oder "dunkler" muss habe ich in der Sentence Change als Ubergabeparameter eingetragen.
[de.fhem:SetNumeric]
(($de.fhem.Room){Room}|($de.fhem.Device){Device}) [auf] (0..100){Value} [Prozent]
($de.fhem.Device){Device} (heller | dunkler){Change}

Gruß Jens
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.