Autor Thema: Modulentwicklung für Rhasspy Sprachassistent  (Gelesen 38923 mal)

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1 am: 11 März 2021, 16:23:47 »
Glaube, die Ursache gefunden zu haben:
Da wurden teils Hashes mit leerem Inhalt erzeugt, '' ist halt nicht undef...

Jetzt hat das Hand und Fuß :)

Aber, damit's nicht langweilig wird:
"radio um 10 prozent lauter"

Msg: hermes/intent/de.fhem_SetNumeric => {"input": "radio 10 percent volUp", "intent": {"intentName": "de.fhem:SetNumeric", "confidenceScore": 1.0}, "siteId": "wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "radio"}, "slotName": "Device", "rawValue": "radio", "confidence": 1.0, "range": {"start": 0, "end": 5, "rawStart": 0, "rawEnd": 5}}, {"entity": "rhasspy/number", "value": {"kind": "Number", "value": 10}, "slotName": "Value", "rawValue": "zehn", "confidence": 1.0, "range": {"start": 6, "end": 8, "rawStart": 6, "rawEnd": 10}}, {"entity": "Unit", "value": {"kind": "Unknown", "value": "percent"}, "slotName": "Unit", "rawValue": "prozent", "confidence": 1.0, "range": {"start": 9, "end": 16, "rawStart": 11, "rawEnd": 18}}, {"entity": "Change", "value": {"kind": "Unknown", "value": "volUp"}, "slotName": "Change", "rawValue": "lauter", "confidence": 1.0, "range": {"start": 17, "end": 22, "rawStart": 19, "rawEnd": 25}}], "sessionId": "wohnzimmer-snowboy-8080609b-e57b-44f5-935b-5a29bfcb8e67", "customData": null, "asrTokens": [[{"value": "radio", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 5, "time": null}, {"value": "10", "confidence": 1.0, "rangeStart": 6, "rangeEnd": 8, "time": null}, {"value": "percent", "confidence": 1.0, "rangeStart": 9, "rangeEnd": 16, "time": null}, {"value": "volUp", "confidence": 1.0, "rangeStart": 17, "rangeEnd": 22, "time": null}]], "asrConfidence": null, "rawInput": "radio zehn prozent lauter", "wakewordId": "snowboy", "lang": null}
Mapping macht hier den Unterschied:
SetNumeric:currentVal=volume,minVal=-60,maxVal=40,cmd=volume,step=0.5,type=volume
Man würde davon ausgehen, dass bei einem Ausgangswert von 0 als Ergebnis 10 kommt. Wird aber -50. Liegt das am negativen minVal?



Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #2 am: 11 März 2021, 17:02:28 »
Irgendwo stand, dass Rhasspy nicht mit negativen Zahlen könnte, und so gibt es an diversen Stellen Vorkehrungen, um insbesondere percent unbedingt zwischen 0 und 100 zu halten.

Insbesondere:
                    $newVal =   0 if ($newVal <   0);
                    $newVal = 100 if ($newVal > 100);
und - zwar so beabsichtigt, aber vermutlich unwirksam - auch hier:
                #my $minVal  = (defined($mapping->{minVal})) ? $mapping->{minVal} : 0; # Rhasspy kann keine negativen Nummern bisher, daher erzwungener minVal
                my $minVal  = $mapping->{minVal} // 0; # Rhasspy kann keine negativen Nummern bisher, daher erzwungener minVal

Würde behaupten, dass es reichen würde, die oberen beiden Zeilen auszukommentieren, habe aber die Furcht, dass das Nebenwirkungen hat...

Ähm, nicht umsonst meint perlcritic:
Subroutine "RHASSPY_handleIntentSetNumeric" with high complexity score (59) at line 1918, column 1. Consider refactoring.(Ist aber nicht so einfach, das ist schon klar...)
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #3 am: 11 März 2021, 17:11:26 »
Rhasspy muss es eh nicht können. Das kann nicht mal 0 hab ich gerade gemerkt. Kann uns aber egal sein, ich sage Rhasspy ja nicht, es soll um -10% höher stellen.

Das Modul sollt's können. AV-Receiver arbeiten z.B. oft mit negativen dB Werten.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #4 am: 11 März 2021, 18:12:00 »
Da hast du wohl recht...

M.E. war da auch ein Logikfehlerchen verborgen, bin mal gespannt, ob du das zwischen diesen ganzen Änderungen findest...

(Und es wäre ggf. hilfreich, die de-cfg um die neuen Fehlerkategorien zu ergänzen...)
« Letzte Änderung: 16 März 2021, 10:59:36 von Beta-User »
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline JensS

  • Sr. Member
  • ****
  • Beiträge: 910
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #5 am: 11 März 2021, 19:38:29 »
Habt ihr mal bitte ne aktuelle Sprachdatei.?
Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #6 am: 11 März 2021, 21:07:43 »
versuch's mal mit dem hier (ist auf die Schnelle zusammengestupft, nur , damit das erst mal vollständig ist):

#$Id: rhasspy-de.cfg 2021-03-11-alpha- Beta-User $
# Diese Datei an einem Ort ablegen, den der user fhem lesen kann
# und dann diesen Ort im Attribut configFile hinterlegen. Beispiel:
# attr <rhasspy> configFile ./log/rhasspy-de.cfg
#
# "commaconversion", "units" und "mutated_vowels" sind optional, wenn nicht
# angegeben, werden die englischen Werte/Gepflogenheiten verwendet bzw. keine
# Ersetzungen vorgenommen.

{
  "commaconversion": "1",
  "mutated_vowels": {
    "Ä": "Ae",
    "Ö": "Oe",
    "Ü": "Ue",
    "ß": "ss",
    "ä": "ae",
    "ö": "oe",
    "ü": "ue"
  },
  "units": {
    "unitHours": "(stunde|stunden)",
    "unitMinutes": "(minute|minuten)"
  },
  "on": "an",
  "percent": "Prozent",
  "responses": {
    "DefaultConfirmation": "OK",
    "DefaultError": "Da ist leider etwas schief gegangen",
    "NoValidData": "Sorry but the received data is not sufficient to derive any action",
    "NoDeviceFound": "Sorry but I could not find a matching device",
    "NoMappingFound": "Sorry but I could not find a suitable mapping",
    "NoNewValDerived": "Sorry but I could not calculate a new value to set",
    "NoActiveMediaDevice": "Tut mir leid  es ist kein Wiedergabegerät aktiv",
    "duration_not_understood": "Tut mir leid ich habe die Dauer nicht verstanden",
    "timerEnd": "taimer im raum $room abgelaufen",
    "timerSet": "taimer im raum $room gesetzt auf $value $unit",
    "DefaultConfirmationTimeout": "Sorry too late to confirm",
    "DefaultCancelConfir": "Thanks aborted",
    "DefaultConfirReceived": "ok will do it",
    "timeRequest": "Es ist $hour Uhr $min",
    "weekdayRequest": "Heute ist $weekDay"
  },
  "Change": {
    "Types": {
      "volume": "Lautstärke",
      "brightness": "Helligkeit",
      "temperature": "Temperatur",
      "battery": "Batterie",
      "waterLevel": "Wasserstand",
      "airHumidity": "Luftfeuchtigkeit",
      "soilHumidity": "Bodenfeuchte",
      "targetValue": "Sollwert"
    },
    "regex": {
      "kälter": "temperature",
      "wärmer": "temperature",
      "dunkler": "brightness",
      "heller": "brightness",
      "lauter": "volume",
      "leiser": "volume",
      "upward": "(höher|heller|lauter|wärmer)",
      "setTarget": "(Helligkeit|Lautstärke|Sollwert)",
      "volume": "Lautstärke"
    },
    "regexToEn": {
      "Temperatur": "temperature",
      "Luftfeuchtigkeit": "airHumidity",
      "Batterie": "battery",
      "Wasserstand": "waterLevel",
      "Bodenfeuchte": "soilMoisture",
      "Helligkeit": "brightness",
      "Sollwert": "setTarget",
      "Lautstärke": "volume"
    },
    "responses": {
      "volume": "$device ist auf $value gestellt",
      "brightness": "$device ist auf $value gestellt",
      "temperature": {
        "0": "Die Temperatur von $location ist $value",
        "1": "Die Temperatur von $location beträgt $value Grad"
      },
      "battery": {
        "0": "Der Batteriestand von $location ist $value",
        "1": "Der Batteriestand von $location beträgt $value Prozent"
      },
      "waterLevel": "Der Wasserstand von $location beträgt $value Prozent",
      "airHumidity": "Die Luftfeuchtigkeit von $location beträgt $value Prozent",
      "soilMoisture": "Die Bodenfeuchte von $location beträgt $value Prozent",
      "knownType": "$mappingType von $location beträgt $value Prozent",
      "unknownType": "Der Wert von $location beträgt $value Prozent"
    }
  },
  "stateResponseType": {
    "aus": "onOff",
    "an": "onOff",
    "auf": "openClose",
    "zu": "openClose",
    "eingefahren": "inOut",
    "ausgefahren": "inOut",
    "läuft": "inOperation",
    "fertig": "inOperation"
  },
  "stateResponses": {
    "onOff": {
      "0": "$deviceName ist ausgeschaltet",
      "1": "$deviceName ist eingeschaltet"
    },
    "openClose": {
      "0": "$deviceName ist geöffnet",
      "1": "$deviceName ist geschlossen"
    },
    "inOut": {
      "0": "$deviceName ist ausgefahren",
      "1": "$deviceName ist eingefahren"
    },
    "inOperation": {
      "0": "$deviceName ist fertig",
      "1": "$deviceName läuft noch"
    }
  }
}
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}
Informativ Informativ x 1 Liste anzeigen

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #7 am: 12 März 2021, 11:52:23 »
M.E. war da auch ein Logikfehlerchen verborgen, bin mal gespannt, ob du das zwischen diesen ganzen Änderungen findest...

Hab ich nicht. Aber um ehrlich zu sein, ich hab auch nicht danach gesucht.

Zitat
(Und es wäre ggf. hilfreich, die de-cfg um die neuen Fehlerkategorien zu ergänzen...)

Ist erledigt.

Überhaupt ist auf GitHub gerade ein aktueller Stand (ich hab da gestern am Timer gebastelt). Allerdings immer noch unter 0.4.3beta.

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #8 am: 12 März 2021, 14:03:37 »
So, in meinem vorwochenendlichen Überschwang und weil gerade in der Arbeit und beim Modul alles so funktioniert, wie's soll, hab ich in GitHub eine Version 0.4.3 erstellt. Das ist die aktuelle "stable".

Weiter geht's mit 0.4.4beta ;)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #9 am: 12 März 2021, 14:05:55 »
Na ja, ich hätte da noch ein paar Kleinigkeiten und auch einige Vorarbeiten aus der beta...

Sollte (hoffentlich!) nichts brechen, aber damit wir in etwa auf demselben Stand sind...
« Letzte Änderung: 16 März 2021, 10:59:22 von Beta-User »
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #10 am: 12 März 2021, 14:07:40 »
An was bastelst du eigentlich gerade? Eine Dialog-Option?

Ich übernehm' das gleich.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #11 am: 12 März 2021, 14:16:30 »
An zwei Dingen:
a) Ausführen nur nach Bestätigung, das ist vermutlich das, was du mit "Dialog-Option" meinst?
b) Einsammeln der ganzen Mappings => Bilden von einem Hash, der die ganze Struktur der steuerbaren Devices so abbildet, dass man darüber die Auswertung @runtime machen kann... Da interessiert mich v.a. erst mal, wie der sinnigerweise strukturiert sein sollte.
Ist der für die "eigenen" Attribute mal erstellt und funktionsfähig, könnte man dann "fremde Attribute" ausschlachten.

ad a) fehlt eigentlich fast nur
aa) das Verzögern, wenn "c" gesetzt ist (im Shortcut-handling)
bb) ein "Bestätigungs"-Intent (da wäre Zuarbeit angesagt...)
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #12 am: 12 März 2021, 14:19:07 »
Für bb brauche ich mehr Infos. Was genau stellst du dir das vor? Sowas:

Ich: Lösche wikipedia.org
Rhasspy: Bist du sicher?
Ich: Nein

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15591
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #13 am: 12 März 2021, 14:57:04 »
Ja, genau so..

Oder etwas ausführlicher:

Anweisung via Rhasspy => Rückfrage =>
a) "Ja, mach" (oä) => Ausführung
b) "Neee, bloß nicht!" (oä.) => Abbrechen

oder eben
c) keine rechtzeitige Rückmeldung => Abbruch
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline JensS

  • Sr. Member
  • ****
  • Beiträge: 910
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #14 am: 13 März 2021, 10:40:06 »
Deutsche Sprache - schwere Sprache.
Mein Rhasspy kann derzeit keine Umlaute:{"Room":"Wohnzimmer","Type":"light","input":"lösche alle light im Wohnzimmer","intent":"SetAllOff","probability":1,"rawInput":"lösche alle lichter im wohnzimmer","requestType":"voice","sessionId":"Wohnzimmer-alexa-f1c191c6-5621-4e09-88ad-10083d405b19","siteId":"Wohnzimmer"}Darauf hin sagt Rhasspy, dass alle Lampen auf dem Dachboden ausgeschaltet sind.
Vom Rhasspy-Master wird der richtige Raum erkannt und übertragen.
Gruß Jens

p.s. Bei mir funktioniert:
    # JSON Decode und Fehlerüberprüfung
    my $decoded = eval { decode_json(encode('cp-1252',$json)) };
Wobei mir aber immer noch der Dachboden statt Wohnzimmer übergeben wird. Wieso verwendest Du eigentlich "eval"?

p.p.s. dito# Parse the response of the request to the HTTP-API
sub RHASSPY_ParseHttpResponse {
 ...
        my $siteIds = encode('cp-1252',$ref->{dialogue}{satellite_site_ids});
« Letzte Änderung: 13 März 2021, 11:04:08 von JensS »
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.