Modulentwicklung für Rhasspy Sprachassistent

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

Vorheriges Thema - Nächstes Thema

JensS

ZitatPrima, GetNumeric läuft mit {Type:temperature} für Room und Device.  :)
Sorry, sollte heißen, das es in allen Konstellationen funktioniert.

Leider kann SetOnOff jetzt keinen Raum zum Device finden. "Licht an" im Wohnzimmer gesprochen, schaltet das Licht im Flur an.
Ist bestimmt so, weil in der experientellen Version die Raumsuche erst mal nur auf GetNumeric umgebogen wurde.
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

Das mit SetOnOff sollte eigentlich mit GetNumeric nicht direkt was zu tun haben, die Raumsuche ist ein gemeinsamer Baustein. Den habe ich aber nicht wegen "GetNumeric" angefasst, sondern wegen der ergänzenden Berücksichtigung von mobilen Geräten, was aber ohne passendes Reading ohne Auswirkung sein sollte.
Ich würde daher eher darauf tippen, dass es ein Groß-/Kleinschriebungs-Thema ist, das sich da auswirkt. Verbose 5 könnte Aufschluss geben, und evtl. schaust du dir auch das list und die slots mal an, ob die Schreibweisen da zusammenpaßen.
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

#227
Ok, hier die Verbose-Ausgabe:2021.04.09 11:20:39 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: 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": "Value", "value": {"kind": "Unknown", "value": "an"}, "slotName": "Value", "rawValue": "an", "confidence": 1.0, "range": {"start": 6, "end": 8, "rawStart": 6, "rawEnd": 8}}], "sessionId": "Wohnzimmer-alexa-6af6e108-5634-4084-b10a-5efe1c48b2cb", "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": "alexa", "lang": null}
2021.04.09 11:20:39 5: Parsed value: licht for key: Device
2021.04.09 11:20:39 5: Parsed value: licht an for key: rawInput
2021.04.09 11:20:39 5: Parsed value: an for key: Value
2021.04.09 11:20:39 5: Parsed value: Wohnzimmer-alexa-6af6e108-5634-4084-b10a-5efe1c48b2cb for key: sessionId
2021.04.09 11:20:39 5: Parsed value: SetOnOff for key: intent
2021.04.09 11:20:39 5: Parsed value: licht an for key: input
2021.04.09 11:20:39 5: Parsed value: 1 for key: probability
2021.04.09 11:20:39 5: Parsed value: Wohnzimmer for key: siteId
2021.04.09 11:20:39 5: handleIntentSetOnOff called
2021.04.09 11:20:39 5: Device selected (by hash, using only name): Flurlicht
2021.04.09 11:20:39 5: runCmd called with command: on
2021.04.09 11:20:39 5: Flurlicht on is a normal command
2021.04.09 11:20:39 5: Running command [on] on device [Flurlicht]
2021.04.09 11:20:39 5: runCmd called with command: {ResponseOnOff($DEVICE)}
2021.04.09 11:20:39 5: {ResponseOnOff($DEVICE)} is a perl command
2021.04.09 11:20:39 5: Response is Ok - Licht im Flur ist eingeschaltet


Meine Slots sind plötzlich klein geschrieben und es gibt neuerdings englische Slots mit z.B. Wohnzimmer. Die englischen und deutschen Slots sind zudem mit der falschen Sprache befüllt.
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.

drhirn

#228
Ich hab in der 0.4.7b mal eine Überprüfung eingebaut, die die Verbindung zum WebIF prüft. Die setzt das "state"-Reading auf "online" oder den Fehler.

Wird jedes Mal ausgeführt, wenn eine Verbindung zum HTTP-API aufgebaut wird (train, updateSlots, fetchSiteIDs, etc.). Das ist nicht ganz glücklich, eine bessere Idee hatte ich aber nicht. Vorteil ist, fetchSiteIDs wird gleich nach dem define aufgerufen wenn ich das richtig sehe. Nachteil ist, es dauert halt im schlimmsten Fall 120s (Timeout), bis das Ergebnis da ist.


sub RHASSPY_ParseHttpResponse {
...
    if ($err) {
        readingsBulkUpdate($hash, 'state', $err);
        readingsEndUpdate($hash, 1);
        Log3($hash->{NAME}, 1, "Connection to Rhasspy base failed: $err");
        return;
    }
...
    readingsBulkUpdate($hash, 'state', "online");
    readingsEndUpdate($hash, 1);
    return;
}


Jemand eine bessere Idee?

Beta-User

@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});

@drhirn:
Das wäre ggf. wirklich ein Thema, das in die developer-Ecke gut aufgehoben wäre...
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

ACHTUNG!

In der aktuellen 0.4.7b wurde WebIF durch baseUrl ersetzt, nachdem ich mit WebIF zu viele Gross-/Kleinschreibfehler gemacht habe ;D

Eine 0.4.7b Definition sieht also derzeit z.B. wie folgt aus:
define Rhasspy RHASSPY baseUrl=http://127.0.0.1:12101 devspec=room=Rhasspy defaultRoom=default language=en fhemId=fhem prefix=rhasspy useGenericAttrs=1

Beta-User

 ;D
Kein Problem...
Nur zur Klarstellung: Fast alle der Parameter in der "Muster-define" kann man weglassen, mind. für baseUrl, fhemId und prefix stimmt das aus dem Kopf heraus auch so. (Daher ist mir der Name für baseUrl auch egal, ich muss nur nach dem reload die DEF (ohne Änderung) anfassen, dann passt das wieder ;) .)
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

Stimmt für alle. Definition kann auch so aussehen:
define Rhasspy RHASSPY

Was passiert, wenn ich useGenericAttrs=0 eingebe?

Beta-User

Es kommt mit "0" in die Internals, Reaktion vom Modul dann:
_analyze_genDevType($hash, $_) if $hash->{useGenericAttrs};
0 ist bool-falsch => wird ignoriert. Interessanter wäre, was "false" bewirkt ;) .
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

Beim Attribut genericDeviceType haben wir kein Auswahlfeld. Nur ein Textfeld für den Input. War das geplant?

Beta-User

Jein. Dieses Attribut "gehört" eigentlich nicht RHASSPY, sondern ist ein gemeinsames für alle Arten der Sprachsteuerung. Von daher _glaube_ ich, dass es besser ist, da keine Einschränkungen von RHASSPY aus "reinzuknödeln".
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

Naja. Aber woher weiß ich, was ich reinschreiben könnte, wenn ich nur Rhasspy habe?

Beta-User

Es steht (nicht sehr prominent) in der commandref, was bisher seitens RHASSPY unterstützt wird. Ansonsten sind der Möglichkeiten viele, RHASSPY unterstützt bei weitem nicht alles, und ich bin mir auch nicht sicher, wo man da eine Grenze ziehen sollte...

Dieses feature ist für zwei Anwendergruppen gedacht:
a) (potentielle) Umsteiger, die schon was anderes nutzen und erst mal "schnell testen" wollen, wie das mit Rhasspy so funktioniert;
Wird da "zu viel vereinnahmt", wird die Struktur in Rhasspy schnell unübersichtlich und vielleicht (?) die Ergebnisse verwirrend (Sensoren etc.)
b) Neueinsteiger, die es sich mit der Konfiguration einfach machen wollen. Für die gehen dann "einfache" Geräte schnell zu konfigurieren...
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

Ach du meine Güte, jetzt hab ich aber lange gesucht. Hast du gut versteckt ;D

Es gibt:
* switch
* light
* thermostat
* blind
* media

Beta-User

 ;D na ja, die cref-Ergänzungen habe ich halt erst mal auf die Schnelle zusammengenagelt mit Prio auf (vollständige) Ergänzung meines "Gewurstels" in der Hoffnung, dass sich dann schon jemand findet, der das aufhübscht und ggf. verständlicher macht... ;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