Modulentwicklung für Rhasspy Sprachassistent

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

Vorheriges Thema - Nächstes Thema

drhirn

SetNumeric:

Hab ich kein passendes Mapping, bekomme ich 2x einen Hinweis darauf als Antwort. Warum dies?


2021.04.14 17:27:56.823 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetNumeric => {"input": "stelle die lautstärke vom fernseher im schlafzimmer auf 50", "intent": {"intentName": "de.fhem:SetNumeric", "confidenceScore": 1.0}, "siteId": "wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "fernseher"}, "slotName": "Device", "rawValue": "fernseher", "confidence": 1.0, "range": {"start": 26, "end": 35, "rawStart": 26, "rawEnd": 35}}, {"entity": "de.fhem.Room", "value": {"kind": "Unknown", "value": "schlafzimmer"}, "slotName": "Room", "rawValue": "schlafzimmer", "confidence": 1.0, "range": {"start": 39, "end": 51, "rawStart": 39, "rawEnd": 51}}, {"entity": "rhasspy/number", "value": {"kind": "Number", "value": 50}, "slotName": "Value", "rawValue": "fünfzig", "confidence": 1.0, "range": {"start": 56, "end": 58, "rawStart": 56, "rawEnd": 63}}], "sessionId": "wohnzimmer-snowboy-5301253b-8999-4458-9ab3-79316eaaacc1", "customData": "snowboy", "asrTokens": [[{"value": "stelle", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 6, "time": null}, {"value": "die", "confidence": 1.0, "rangeStart": 7, "rangeEnd": 10, "time": null}, {"value": "lautstärke", "confidence": 1.0, "rangeStart": 11, "rangeEnd": 21, "time": null}, {"value": "vom", "confidence": 1.0, "rangeStart": 22, "rangeEnd": 25, "time": null}, {"value": "fernseher", "confidence": 1.0, "rangeStart": 26, "rangeEnd": 35, "time": null}, {"value": "im", "confidence": 1.0, "rangeStart": 36, "rangeEnd": 38, "time": null}, {"value": "schlafzimmer", "confidence": 1.0, "rangeStart": 39, "rangeEnd": 51, "time": null}, {"value": "auf", "confidence": 1.0, "rangeStart": 52, "rangeEnd": 55, "time": null}, {"value": "50", "confidence": 1.0, "rangeStart": 56, "rangeEnd": 58, "time": null}]], "asrConfidence": null, "rawInput": "stelle die lautstärke vom fernseher im schlafzimmer auf fünfzig", "wakewordId": "snowboy", "lang": null}
2021.04.14 17:27:56.823 5: Parsed value: wohnzimmer-snowboy-5301253b-8999-4458-9ab3-79316eaaacc1 for key: sessionId
2021.04.14 17:27:56.823 5: Parsed value: SetNumeric for key: intent
2021.04.14 17:27:56.823 5: Parsed value: stelle die lautstärke vom fernseher im schlafzimmer auf fünfzig for key: rawInput
2021.04.14 17:27:56.824 5: Parsed value: stelle die lautstärke vom fernseher im schlafzimmer auf 50 for key: input
2021.04.14 17:27:56.824 5: Parsed value: 1 for key: probability
2021.04.14 17:27:56.824 5: Parsed value: schlafzimmer for key: Room
2021.04.14 17:27:56.824 5: Parsed value: wohnzimmer for key: siteId
2021.04.14 17:27:56.824 5: Parsed value: 50 for key: Value
2021.04.14 17:27:56.824 5: Parsed value: fernseher for key: Device
2021.04.14 17:27:56.825 5: handleIntentSetNumeric called
2021.04.14 17:27:56.825 5: Device selected (by hash, with room and name): FernseherSZ
2021.04.14 17:27:56.825 5: Response is: Tut mir leid, aber ich konnte kein passendes Mäpping finden
2021.04.14 17:27:56.826 5: Response is: Tut mir leid, aber ich konnte kein passendes Mäpping finden


(und weiß einer, warum mir das FHEM-Log keine Umlaute mehr anzeigt?)

Beta-User

#361
Zitat von: drhirn am 14 April 2021, 17:18:15
Haben wir uns auch verdient
:) Unbedingt!

Zitat
Das sind ja auch alles Feiglinge ;D
Du bist der Boss!

ZitatMeine Logik ist eigentlich die:
x.0.0 - Große Stable-Versionen (Änderung der Stelle bringt sehr wahrscheinlich Inkompatibilitäten mir vorigen Versionen)
Hoffen wir mal, dass es nicht erforderlich wird, irgendwas zu brechen. Die höchste Wahrscheinlichkeit für sowas sehe ich im Moment bei Color/Media. Daher mag ich auch die "1" vorne noch nicht...

Zitat
Würde ich fast so lassen. Dann hat der User die Wahl. Oder ein zusätzliches Attribut/Mapping beim Device.
Gehört m.E. nach "Specials". Hatte erst gedacht, dass das da ein Format "Confirmation:..." geben sollte, aber im Moment denke ich eher, das wird in Richtung
"SetOnOff:v=on,off c="Soll ich $NAME $newVal schalten" r="habe $NAME auf $newVal gestellt"
(Wir werden wohl dazu noch einige Übersetzungshilfswerte brauchen).

Zitat
Hatte ich bei Snips in Kombination mit Talk2FHEM. Aber leider die Devices gelöscht. Hab aber einfach alles, was an hermes/asr/textCaptured ankam, zu T2F geschickt.
Sehe ich aber nicht als Rhasspy-Thema.
Habe noch kein genaues Bild vom ganzen; irgendwas pauschal durchzureichen, finde ich auf den ersten Blick nicht so spannend, das wäre dann ggf. ein Thema für "forceNEXT" und ein separates M2D?

Zitat
Nein! Hat níchts mit FHEM zu tun. Wie schon mal erwähnt, ist da ein Rhasspy-"Modul" der bessere Weg. Weil dann auch Nicht-FHEM-User davon profitieren könnten.
Den Einwand habe ich gelesen, aber bis dato nicht verstanden (und das auch noch nicht versucht).

Zitat
Hohe Prio! "Wie lange noch" geht mir mächtig ab.
Guter Kandidat für einen (übergangsweisen) CustomIntent. Vielleicht kann das jemand anderes an die neuen Timer-Namen anpassen?

Zitat
Täte mir auch gefallen. Geht aber theoretisch eh schon mittels "response" und "rand()"
Das wäre (auf Basis meiner Anmerkungen zu "Witze") m.E. ein guter Kandidat für das 1. "add-on" in contrib...

Meine persönliche Prio (und das Interesse ;) ) liegt eher auf dem dialogischen und "matches outside".

@all: Wenn ich das richtig deute, haben einige wenige die aktuellste Fassung runtergeladen. Falls ihr die auch einsetzt: Feedback "aus dem Feld" wäre willkommen, damit wir ggf. eventuelle Probleme noch identifiziert bekommen.
Falls jemand was in den "Listen" besonders gerne umgesetzt hätte: Wünsche äußern ist erlaubt...




Ad SetNumeric:
#2569ff muss vermutlich so lauten; der "response"-Teil ist danach nochmal drin bzw. reingekommen wegen der "Group"-Geschichte:
if ( !defined $mapping ) {
        if ( defined $data->{'.inBulk'} ) {
            #Beta-User: long forms to later add options to check upper/lower limits for pure on/off devices
            return;
        } #else {
        #    return RHASSPY_respond ($hash, $data->{requestType}, $data->{sessionId}, $data->{siteId}, RHASSPY_getResponse($hash, 'NoMappingFound'));
        #}
    }

(Das "return" hatte gefehlt; die Frage ist, ob man den Code dann doch (mit return) aktiv läßt...)
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

drhirn

Zitat von: Beta-User am 14 April 2021, 17:55:57
Hoffen wir mal, dass es nicht erforderlich wird, irgendwas zu brechen. Die höchste Wahrscheinlichkeit für sowas sehe ich im Moment bei Color/Media. Daher mag ich auch die "1" vorne noch nicht...
Na guuuut, dann wird's halt 0.5.0. Ist eh eine coole Zahl. :D

ZitatGehört m.E. nach "Specials". Hatte erst gedacht, dass das da ein Format "Confirmation:..." geben sollte, aber im Moment denke ich eher, das wird in Richtung
"SetOnOff:v=on,off c="Soll ich $NAME $newVal schalten" r="habe $NAME auf $newVal gestellt"
Ja, gute Idee mit "rhasspySpecials"

ZitatDen Einwand habe ich gelesen, aber bis dato nicht verstanden (und das auch noch nicht versucht).
Nun, ich kann ja MQTT-Messages in welcher Sprache auch immer abgreifen. Python würde sich im Falle Rhasspy anbieten. Und da läuft dann halt ein kleines Python-Script irgendwo, dass auf den Intent "Wikipedia" wartet. Kommt der daher, wird er abgehandelt. Das selbe, was wir jetzt ja auch machen.
Bei Snips gab's eine "Web-Shop", in dem diverse AddOns gelistet waren. Die konnte man sich einfach zu seinem "Assistenten" hinzufügen. Sowas gibt's bei Rhasspy noch nicht wirklich, es wird aber daran gebaut (https://community.rhasspy.org/t/hermes-skill-server-for-intent-handling/1054).

Das ist auch der Grund, warum wir so komische Intent-Namen verwenden (de.fhem.XXXX). Damit sich FHEM und ein externes Script nicht in die Quere kommen, weil sie versehentlich die selben Intents abgreifen.

Hier ist z.b. ein Wetter-Skill: https://community.rhasspy.org/t/rhasspy-can-tell-you-the-weather/671. Habe ich aber nicht ausprobiert.

Zitat@all: Wenn ich das richtig deute, haben einige wenige die aktuellste Fassung runtergeladen.
Befürchte, das war 4x ich. Hatte kleinere Probleme.


ZitatAd SetNumeric:
#2569ff muss vermutlich so lauten; der "response"-Teil ist danach nochmal drin bzw. reingekommen wegen der "Group"-Geschichte:
if ( !defined $mapping ) {
        if ( defined $data->{'.inBulk'} ) {
            #Beta-User: long forms to later add options to check upper/lower limits for pure on/off devices
            return;
        } #else {
        #    return RHASSPY_respond ($hash, $data->{requestType}, $data->{sessionId}, $data->{siteId}, RHASSPY_getResponse($hash, 'NoMappingFound'));
        #}
    }

(Das "return" hatte gefehlt; die Frage ist, ob man den Code dann doch (mit return) aktiv läßt...)

Merci, klappt jetzt.

Beta-User

#363
Nachträge zu gestern:
- war an mind. einer Stelle mit "return $name" über das Ziel rausgeschossen (set ... play). Kann bestätigen, dass auch mein Handy auf Anweisung von Rhasspy Sounds wiedergeben kann, aber nach der set-Anweisung will man eigentlich auf die Detail-Seite vom RHASSPY-Device zurück...
- das mit dem "zusätzlichen richtigen return" gefällt mir besser, ist einfach für die Zukunft gesehen übersichtlicher wie das komplette Auskommentieren.
- noch etwas clean-up

UND: ...doch noch ein (bislang ungetesteter!) feature-Versuch - wiederholtes Abspielen einer WAV.
Das ganze ist eigentlich generisch gestaltet, aber erst mal zu dem Anwendungfall "Timer":
attr RHASSPY rhasspyTweaks timerSounds=default="./flasche.wav" Eier="3:20:./flasche1.wav" Kartoffeln="5:./flasche2.wav"
Die Keys sind Beispiele und müssen "Label" entsprechen. "default" ist optional, und leitet dann ALLE (belabelten?) timer auf die betreffende File um, wenn kein expliziter Label-Match paßt.

Die Zahlen sind optional und stehen für "repeats" und "wait", "wait" ist die Wartezeit bis zum nächsten Durchlauf. (Erst mal gesetzte) defaults dafür sind 5 repeats und 15 für "wait", ist nur eine Zahl angegeben, wird das als "repeats" verwendet.

Da das ganze so funktioniert, dass playWav mit ein paar mehr Parametern aufgerufen wird, kann man das natürlich auch außerhalb von Timer nutzen, die erneute Widergabe abbrechen geht dann mit der normalen Cancel-Anweisung für Timer.

Jetzt müsste man
a) testen, ob der Code überhaupt funktioniert (belabelte und unbelabelte timer,Anzahl Wiederholungen und Dauer, Abbruch, ...)
b) Rückmeldung geben, ob die Syntax und generelle Logik "ok" ist, und
c) (wenn a) und b) geklärt sind) Doku dazu machen...
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

drhirn

timerSounds=default="/opt/fhem/raspberry01.wav"

Funktioniert, wird aber nicht wiederholt weil:

timer_wohnzimmer_Taimer: datespec is not allowed with +

Beta-User

#365
...na dann...

...müssen wir wohl $attime etwas anders berechnen und formatieren; war gedanklich wohl bei InternalTimer...

%T war doch irgendwie auf Wind.*-Maschinen problematisch, oder? Daher jetzt auch an anderer Stelle die "umständliche" Variante.
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

drhirn

%T hab ich nur verwendet, um das Timer-Reading anzuzeigen.

Beta-User

Es ist egal, wo %T effektiv zur Anwendung kommt - auf diesem seltsamen OS führt es dann (soweit ich mich entsinne) zu einem Fehler...
Daher hatte ich das irgendwann mal in einer früheren Version gegen die "lange Form" '%H:%M:%S' getauscht. Zwischenzeitlich war das dann mal nicht mehr erforderlich, weil eh' die Einzelteile benötigt gewesen waren, jetzt muss man (bzw. sollte man freundlicherweise) m.E. eben wieder die "lange Form" an beiden Stellen verwenden. Ist aber nebensächlich, interessanter wäre, ob es jetzt geht ;D .
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

drhirn

;D

Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at ./FHEM/10_RHASSPY.pm line 3009.

Beta-User

#369
OK, dann versuchen wir es eben mit der (hoffentlich) korrekten Klammersetzung...
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

drhirn

Da wird jetzt nicht richtig getrennt:

set Rhasspy play siteId="wohnzimmer" path=":/opt/fhem/raspberry01.wav" repeats=3 wait=5 id=timer_wohnzimmer_Taimer

Der Doppelpunkt vor dem Pfad sollte da nicht sein.

Beta-User

#371
Argh, da ist ein Doppelpunkt in Zeile 3018 verloren gegangen:
            $soundoption =~ m{((?<repeats>[0-9]*):){0,1}((?<duration>[0-9.]*):){0,1}(?<file>(.+))}x;

Warum notiert ihr eigentlich scheinbar bevorzugt absolut? Sollte auch so funktionieren:
path="./raspberry01.wav"
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

drhirn

Jetzt geht's wieder. Aber wiederholt wird noch immer nichts.

Keine Ahnung, warum ich den Pfad immer so angegebe. Die Finger tippen das inzwischen von selbst. Aber ja, geht natürlich auch anders.

Beta-User

Hmm, werde wohl selbst testen müssen, vermute irgendeine Kleinigkeit beim Anlegen des nächsten at...
Aber wenn erst mal das Ausgangskommando abgesetzt ist, sollte der Rest dann auch kein Hexenwerk mehr sein.

Wie findest du die Syntax?
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

drhirn

Zitat von: Beta-User am 15 April 2021, 13:51:56
Wie findest du die Syntax?

Extrem fehleranfällig leider.

timerSounds {
    "default" : "./flasche.wav"
    "Eier" : "3,20,flasche1.wav"
}

Oder so in der Art wäre fast schöner. Sonst sind das extrem viele =, : und "