Modulentwicklung für Rhasspy Sprachassistent

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

Vorheriges Thema - Nächstes Thema

drhirn


drhirn

Ich spiele gerade mit den gDTs. In der FHEM-Demo gibt's ein Device "ct light". Was zu einem spannenden Ergebnis führt:


2021.04.09 12:45:10.018 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetOnOff => {"input": "ct light aus", "intent": {"intentName": "de.fhem:SetOnOff", "confidenceScore": 1.0}, "siteId": "wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "ct light"}, "slotName": "Device", "rawValue": "ct light", "confidence": 1.0, "range": {"start": 0, "end": 8, "rawStart": 0, "rawEnd": 8}}, {"entity": "OnOffValue", "value": {"kind": "Unknown", "value": "aus"}, "slotName": "Value", "rawValue": "aus", "confidence": 1.0, "range": {"start": 9, "end": 12, "rawStart": 9, "rawEnd": 12}}], "sessionId": "wohnzimmer-snowboy-cf7a096b-ba3b-4fa2-ba5d-124f78b13b22", "customData": "snowboy", "asrTokens": [[{"value": "ct", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 2, "time": null}, {"value": "light", "confidence": 1.0, "rangeStart": 3, "rangeEnd": 8, "time": null}, {"value": "aus", "confidence": 1.0, "rangeStart": 9, "rangeEnd": 12, "time": null}]], "asrConfidence": null, "rawInput": "ct light aus", "wakewordId": "snowboy", "lang": null}
2021.04.09 12:45:10.019 5: Parsed value: ct light aus for key: rawInput
2021.04.09 12:45:10.019 5: Parsed value: wohnzimmer for key: siteId
2021.04.09 12:45:10.020 5: Parsed value: SetOnOff for key: intent
2021.04.09 12:45:10.020 5: Parsed value: 1 for key: probability
2021.04.09 12:45:10.020 5: Parsed value: wohnzimmer-snowboy-cf7a096b-ba3b-4fa2-ba5d-124f78b13b22 for key: sessionId
2021.04.09 12:45:10.020 5: Parsed value: aus for key: Value
2021.04.09 12:45:10.020 5: Parsed value: ct light aus for key: input
2021.04.09 12:45:10.020 5: Parsed value: ct light for key: Device
2021.04.09 12:45:10.021 5: handleIntentSetOnOff called
2021.04.09 12:45:10.021 5: Device selected (by hash, using only name): CT
2021.04.09 12:45:10.021 5: runCmd called with command: off
2021.04.09 12:45:10.022 5: CT off is a normal command
2021.04.09 12:45:10.022 5: Running command [off] on device [CT]


"ct light" wird noch als Device angenommen, der Befehl wird dann aber am Device "CT" ausgeführt.

Beta-User

Mir kommt das logisch vor: Der alias von "CT" ist "CT Light". Das wird zu lowercase "ct light" und scheinbar korrekt dann beim Schalten wieder "CT" zugeordnet. Sieht für mich ok aus, oder übersehe ich was?

Zitat von: drhirn am 09 April 2021, 12:45:45
Ah, verstehe. Haha ;D
Na ja, war nur bedingt ernst gemeint... Thema war eher, dass ich mir noch nicht sicher bin, wie weit man mit dem feature gehen sollte und wie schnell das wächst bzw. was auch wieder raus kommt.
Aber das obige Beispiel zeigt, dass man praktisch "nichts" machen muss, um zu (m.E.) passablen Ergebnissen zu kommen :P .
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

Ich war verwirrt. Das Device heißt ja wirklich "CT".
Und mir war nicht klar, dass der Alias für ein "updateSlots" genommen wird.

Führt aber dazu, dass der Status des Devices mal wieder nicht automatisch aktualisiert wird.

Beta-User

Bei gDT-Nutzung gibt es eine gewisse Logik für die Ermittlung der "rhasspyNames": siri- und alexaNames werden vorrangig berücksichtigt, dann der alias, und wenn es all das nicht gibt, eben der NAME.
Wenn gesetzt, wird all das verdrängt durch rhasspyName.

Das mit dem ausbleibenden Trigger wäre schlecht, ich kann das aber grade am Code nicht nachvollziehen. Vermute eher, dass wir es hier mit einem "Problem" aus readingsProxy zu tun haben, dieses Modul ist "speziell", was triggern angeht.
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

readingsProxy?

Bei einem Gerät ohne Alias (Livingroom) funktioniert das Update.

drhirn

Mit dem neuen "update devicemap" scheint mir, dass das Rhasspy-Training zu früh gestartet wird. Kann das sein? Ich muss nach dem "update devicemap" immer noch ein Training durchführen, damit neue Geräte von Rhasspy erkannt werden.

Cordula

Hier noch ein Input zu getNumeric:

sentence.ini= \[(wie ist der|wie ist die)] (co2-gehalt|kohlendioxid-gehalt|luft){Device} [im] [$de.fhem.Room{Room}]

rhasspyMapping = GetNumeric:currentVal=co2,response="Der CO2-Gehalt im Wohnzimmer beträgt [Innenstation:co2] ppm"

Parsed value: wie ist die luft im wohnzimmer for key: input
2021.04.09 13:20:36 5: Parsed value: wohnzimmer for key: Room
2021.04.09 13:20:36 5: Parsed value: wie ist die luft im wohnzimmer for key: rawInput
2021.04.09 13:20:36 5: Parsed value: 1 for key: probability
2021.04.09 13:20:36 5: Parsed value: GetNumeric for key: intent
2021.04.09 13:20:36 5: Parsed value: arbeitszimmer-Okay Kalle-ba28009c-d448-403a-a923-dec0e5339388 for key: sessionId
2021.04.09 13:20:36 5: Parsed value: arbeitszimmer for key: siteId
2021.04.09 13:20:36 5: Parsed value: luft for key: Device
2021.04.09 13:20:36 5: handleIntentGetNumeric called
2021.04.09 13:20:36 5: Device selected (by hash, with room and name): Innenstation
2021.04.09 13:20:36 5: runCmd called with command: "Der CO2-Gehalt im Wohnzimmer beträgt [Innenstation:co2] ppm"
2021.04.09 13:20:36 5: "Der CO2-Gehalt im Wohnzimmer beträgt [Innenstation:co2] ppm" has quotes...
2021.04.09 13:20:36 5: ...and is now: Der CO2-Gehalt im Wohnzimmer beträgt [Innenstation:co2] ppm (Der CO2-Gehalt im Wohnzimmer beträgt 688 ppm)

Funktioniert laut Log. Es kommt aber keine Sprachausgabe.

drhirn

Zitat von: Cordula am 09 April 2021, 13:40:45
sentence.ini= \[(wie ist der|wie ist die)] (co2-gehalt|kohlendioxid-gehalt|luft){Device} [im] [$de.fhem.Room{Room}]

Entschuldigt, aber ich muss kurz vom Thema abweichen.

Was hast du da für ein Gerät?

Cordula

#249
Netatmo Innenstation / "Smarte Wetterstation"

Beta-User

@Cordula: Der Code erscheint mir an der Stelle nicht logisch bzw. vollständig...
Ändere mal (ca. #2744) von
if ( defined $mapping->{response} ) {
        return RHASSPY_getValue($hash, $device, $mapping->{response}, $value, $location);
    }
auf:
if ( defined $mapping->{response} ) {
        return RHASSPY_respond ($hash, $data->{requestType}, $data->{sessionId}, $data->{siteId}, RHASSPY_getValue($hash, $device, $mapping->{response}, $value, $location));
    }

Zitat von: drhirn am 09 April 2021, 13:38:44
Mit dem neuen "update devicemap" scheint mir, dass das Rhasspy-Training zu früh gestartet wird. Kann das sein? Ich muss nach dem "update devicemap" immer noch ein Training durchführen, damit neue Geräte von Rhasspy erkannt werden.
Das will ich nicht ausschließen; im Moment wird das halt nacheinander rausgehauen, ohne auf Rückmeldung zu warten oder eine kurze Pause. Könnte Sinn machen, da was einzubauen...

Zitat von: drhirn am 09 April 2021, 13:22:23
Bei einem Gerät ohne Alias (Livingroom) funktioniert das Update.
Weiß nicht, aber eigentlich wird ab Zeitpunkt x mit dem Device-NAME gearbeitet, dürfte also eigentlich keinen Unterschied machen, und dem Code ist es auch egal, ob das mal ein rhasspyName war oder ein siriName, ... oder eben alias.

Kann's nur grade auch nicht so einfach nachstellen bzw. irgendwie ist die demo-cfg komisch...
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 09 April 2021, 14:09:09
Das will ich nicht ausschließen; im Moment wird das halt nacheinander rausgehauen, ohne auf Rückmeldung zu warten oder eine kurze Pause. Könnte Sinn machen, da was einzubauen...

Müssen wir. Ich weiß nur nicht, wie wir da warten können.

ZitatKann's nur grade auch nicht so einfach nachstellen bzw. irgendwie ist die demo-cfg komisch...

Jup :D
Die Zugehörigkeiten zu den Gruppen sind z.B. durch Leerzeichen, statt durch Beistrich getrennt

Beta-User

InternalTimer. Ist z.B. auch für die init-Geschichte drin. Die Frage ist nur, wie lange das schlummern soll...

Zitat von: drhirn am 09 April 2021, 14:19:32
Die Zugehörigkeiten zu den Gruppen sind z.B. durch Leerzeichen, statt durch Beistrich getrennt
Hmm, FHEMWEB macht das irgendwie zwangsweise mit dem Komma... Sollte ggf. Rudi (?) mal in der demo anpassen?

Ansonsten müßten wir den Code dann wieder konsolidieren, wenn OK seitens Cordula+JensS kommt. Ich habe jetzt erst mal auch wegen deiner Änderungen darauf verzichtet, wieder eine vollst. Version zu posten.
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 09 April 2021, 14:31:34
Ansonsten müßten wir den Code dann wieder konsolidieren, wenn OK seitens Cordula+JensS kommt. Ich habe jetzt erst mal auch wegen deiner Änderungen darauf verzichtet, wieder eine vollst. Version zu posten.

Meine und deine Änderung sind online.

Beta-User

Zitat von: Beta-User am 09 April 2021, 11:29:44
@JensS:
OK, scheint wirklich ein "lc"-Thema zu sein, allerdings aus einer unvermuteten Richtung: die siteId beginnt "Kapital".

Kannst du mal "lc" (ca. in Zeile 1281) ergänzen und dann nochmal testen:
$room = ReadingsVal($hash->{NAME}, $rreading, lc $data->{siteId});
Wie schaut's damit aus? (Und approved ist weder das noch die respond-Erägnzung).
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