Modulentwicklung für Rhasspy Sprachassistent

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

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: laberlaib am 01 April 2021, 12:30:08
Ich frag mal kurz meinen Arbeitgeber, meine Homeschoolingtochter sowie den vermeintlichen Pfuscher von Lieferant der Parksysteme unserer Wohnanlage, ob diese Schlussfolgerung korrekt ist  ;)
:P ... das war durchaus provokativ gemeint ;D ;D ;D .

Zitat
Mit Bezug: Ich musste den Stecker ziehen, nachdem sich neben der MQTT-Bridge und dem sonstiges Testen die Wakewordeinstellung als sehr empfindlich rausgestellt hat und Jarvis quasi im Technebeat gehupt hat.
Seit heute habe ich eine Woche frei und es sind Schulferien; es könnte also wieder zu spontanen, ausschweifenden Rückmeldung meinerseits kommen.
Das mit der MQTT-Bridge würde ich gerne näher verstehen wollen, weil ich auch gewisse Schwierigkeiten bei nachträglichen Änderungen (also nach FHEM-Start) mit MQTT2_CLIENT hatte, die (kleine) Stolpersteine waren; das meiste hatte aber mit dem Umzug von Rhasspy auf meinen FHEM-Server zu tun und dürfte daher nicht eben representativ sein...

Das mit dem Wakeword ist ein anderes Thema, und hat (hoffentlich) nichts mit dem eigentlichen Code zu tun?

Ansonsten: Kein Stress, mir ging es erst mal nur drum rauszufinden, wie die Lage so ist...!
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 01 April 2021, 12:21:42
EDIT: Kommando zurück, das mit der response-Auswertung steht immer noch da, nur eben woanders, *Augenreib*

Hihi :D

Aber du hast natürlich vollkommen recht, es ist ein überholtes Feature.

Aber angenommen, jemand ändert jetzt die .cfg. Die wird beim nächsten Update überschrieben. Oder er hat keine aktuelle Datei. Wie sollen wir das lösen?

drhirn

Zitat von: Beta-User am 28 März 2021, 10:12:41
Die sind jetzt als "temporary"-at angelegt und daher nur noch via list-Kommando zu sehen; weiß noch nicht, ob das eine gute Idee ist.

Hmm, zum Testen find ich das nicht so angenehm. Sollte alles funktionieren, könnte das ein guter Plan sein.

Beta-User

Zitat von: drhirn am 01 April 2021, 13:44:45
Aber du hast natürlich vollkommen recht, es ist ein überholtes Feature.
Na ja, das ganze ist nur insoweit überholt, als man da starre Texte hinterlegen kann ;) . Die Idee, einen "RandomSentence" abspielen zu können, gefällt mir aber sehr (auch, wenn es völlig unwichtig ist ::) ...). Und dafür müsste es auch "irgendwo" einen Ort geben, an dem der User das "einkippen" kann...

ZitatAber angenommen, jemand ändert jetzt die .cfg. Die wird beim nächsten Update überschrieben.
Das Updaten der cfg ist mAn. immer in der Verantwortung des betreffenden Users. Daher ist es jetzt so gestaltet, dass die Struktur fest aus dem Modul kommt und dann (zweistufig) geprüft wird, was an "default" in der cfg steht, und zuletzt (jeweils überschreibend) der "user"-Teil darübergelegt wird.
Ergo kann ein User einfach den "default"-Teil in der cfg tauschen und seine eigenen Sätze bleiben unberührt (er muss/sollte nur anpassen, wenn in der "default" neue Variablen erlaubt sind u.ä.. Das ist aber mAn. irgendwann in näherer Zukunft "passée"...)

ZitatOder er hat keine aktuelle Datei. Wie sollen wir das lösen?
Keine aktuelle Datei (oder eine unvollständige) bedeutet: (teilweise) Englische defaults, s.o.; der User kann jederzeit die (aktuelle) Struktur exportieren und daraus was eigenes stricken; Anleitung ist in der cref...

Die Frage wäre daher ggf. eher, ob wir das Attribut nicht vorneweg auswerten und dann in die Struktur integrieren, damit der User das komplett exportieren und verwenden kann...?

Zitat von: drhirn am 01 April 2021, 13:48:05
Hmm, zum Testen find ich das nicht so angenehm. Sollte alles funktionieren, könnte das ein guter Plan sein.
Wie gesagt: bin noch unentschlossen und man sollte auch noch checken, ob das Neustart-fest ist. Man kann die mit "list TYPE=at " sehen, das an sich sollte daher beim Testen nicht das Problem sein.
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 01 April 2021, 13:59:41
Daher ist es jetzt so gestaltet, dass die Struktur fest aus dem Modul kommt und dann (zweistufig) geprüft wird, was an "default" in der cfg steht, und zuletzt (jeweils überschreibend) der "user"-Teil darübergelegt wird.

Ja, ähm, genau. So ist das. Manoman, mein Hirn...

Beta-User

Nevermind...

Das ist letztlich ja nur dann wichtig, wenn man "mismatches" hat und gehört daher in die Kategorie "unter der Haube", in die man eigentlich erst dann schaut, wenn es irgendwo knirscht (was scheinbar nicht ernsthaft der Fall war ;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

Beta-User

#171
Hier mal meine letzten Erkenntnisse zum Thema Dialog:
- geht!  8)
- hält man die Sitzung offen, scheint es keinen oder einen längeren Timeout zu geben von der Rhasspy-Seite
- implementiert derzeit für Shortcut
- der Bestätigungs-Intent scheint jetzt auch per default aus zu sein, man kann also eine Negativauswahl machen und Rhasspy so initialisieren...

- Neu dazugekommen ist jetzt mal ein neuer setter-Vorschlag, mit dem man beliebige slots füllen kann, mit und ohne overwrite.
Damit sollte es möglich sein, z.B. einen Auswahldialog aufzumachen, wenn es mehrere passende Devices in einem Raum gibt oder mehrere Devices, aber in verschiedenen Räumen. (Ab hier wird es vermutlich dann komplex... Aber die Grundlagen sollten vorhanden sein :) .)

Falls ihr also zum Testen kommt, dann am besten gleich mit dem Anhang von hier...
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

laberlaib

Noch nicht der Anhang von direkt über mir:
Ich glaube bei zwei RHASSPY-Devices kommt er mit der config ducheinander:
RAW teilweise kopiert:
attr RHASSPY_DE configFile ./.config/rhasspy-de.cfg
setstate RHASSPY_DE 2021-04-01 16:39:48 lastIntentPayload {"Device":"Stehlampe","input":"schalte Stehlampe","intent":"SetNumeric","probability":0,"rawInput":"schalte die stehlampe sdkfj","requestType":"voice","sessionId":"caa2c909-e822-48e7-8399-50e8f233f9db","siteId":"MasterDe"}
setstate RHASSPY_DE 2021-04-01 16:39:48 voiceResponse Lo siento, pero faltan parámetros
oder auch mal
setstate RHASSPY_DE 2021-04-01 16:44:31 voiceResponse Lo siento, pero no hay ningún reproductor activo

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

drhirn

Zitat von: Beta-User am 01 April 2021, 18:27:25
Hier mal meine letzten Erkenntnisse zum Thema Dialog:
- geht!  8)
- hält man die Sitzung offen, scheint es keinen oder einen längeren Timeout zu geben von der Rhasspy-Seite
- implementiert derzeit für Shortcut
- der Bestätigungs-Intent scheint jetzt auch per default aus zu sein, man kann also eine Negativauswahl machen und Rhasspy so initialisieren...

Hast du da ein Beispiel, mit dem ich das testen könnte?

ZitatDamit sollte es möglich sein, z.B. einen Auswahldialog aufzumachen, wenn es mehrere passende Devices in einem Raum gibt oder mehrere Devices, aber in verschiedenen Räumen.

Wie meinst du das? Wie "mehrere passende Devices"?
Und wenn wir schon dabei sind. Mir ist "Recommended to be unique" in der CRef bei rhasspyRoom aufgefallen. Was meinst du damit? Weil, es kann schon mehrere Devices in einem Raum gegen. Somit ist der Raum nicht unique.

Zitat
Falls ihr also zum Testen kommt, dann am besten gleich mit dem Anhang von hier...

Ist im GitHub

Beta-User

Zitat von: laberlaib am 01 April 2021, 18:45:03
Noch nicht der Anhang von direkt über mir:
Ich glaube bei zwei RHASSPY-Devices kommt er mit der config ducheinander:
Dazu solltest du die lists ansehen, ob da deutsche Texte drin stehen?

Allerdings ist mir grade aufgefallen, dass SetNumeric "solo" nicht mehr will und über angeblich fehlende Daten mosert, grade funktioniert wohl nur noch die Gruppenvariante. Hat vermutlich mit der Umstellung auf "gruppe" zu tun, aber im Moment werde ich vermutlich nicht dazukommen, das zu fixen.

Zitat von: drhirn am 01 April 2021, 18:45:47
Hast du da ein Beispiel, mit dem ich das testen könnte?
mit dem "confirm"-Beispiel aus der cref (hoffe, das eingepflegt zu haben) sollte es gehen.

ZitatWie meinst du das? Wie "mehrere passende Devices"?
Im Moment schaltet RHASSPY das erste Device, das sich "im Raum" befindet, selbst wenn es mehrere gibt, und wenn es das nicht gibt, das erste beliebige Device, das zwar paßt, aber in matchesOutsideRoom ist.

ZitatUnd wenn wir schon dabei sind. Mir ist "Recommended to be unique" in der CRef bei rhasspyRoom aufgefallen. Was meinst du damit? Weil, es kann schon mehrere Devices in einem Raum gegen. Somit ist der Raum nicht unique.
Darüber muss ich vermutlich nochmal nachdenken, könnte sein, dass das ein Übertragungsfehler war...
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

laberlaib

Zitat von: Beta-User am 01 April 2021, 19:01:08
Dazu solltest du die lists ansehen, ob da deutsche Texte drin stehen?
Nope.
Internals:
   CONFIGFILE ./.config/rhasspy-de.cfg
   DEF        devspec=room=Rhasspy defaultRoom=Wohnzimmer language=de prefix=de
   FUUID      605f973f-f33f-3460-1827-1bd6124fb6c68a44
   IODev      RhasspyMasterDeMQTT2
   LANGUAGE   de
   LASTInputDev RhasspyMasterDeMQTT2
   MODULE_VERSION 0.4.6a
   MSGCNT     33
   NAME       RHASSPY_DE
   NR         16
   RhasspyMasterDeMQTT2_MSGCNT 33
   RhasspyMasterDeMQTT2_TIME 2021-04-01 17:12:44
   STATE      ???
   TYPE       RHASSPY
   devspec    room=Rhasspy
   encoding   
   fhemId     fhem
   prefix     de
   useGenericAttrs
   READINGS:
     2021-04-01 17:12:41   lastIntentPayload {"Change":"leiser","input":"leiser","intent":"SetNumeric","probability":1,"rawInput":"leiser","requestType":"voice","sessionId":"lebenXWohnzimmer-jarvis-4d8550ad-7a98-4bdf-b5eb-9a77240f785e","siteId":"lebenXWohnzimmer"}
     2021-04-01 17:12:41   lastIntentTopic hermes/intent/de.fhem_SetNumeric
     2021-03-28 19:11:46   listening_lebenXKochen 0
     2021-04-01 17:12:44   listening_lebenXWohnzimmer 0
     2021-04-01 17:12:41   responseType    voice
     2021-03-27 20:37:49   siteIds         lebenXWohnzimmer,handylaib,lebenXKochen,tester,MasterDe
     2021-04-01 16:30:09   training        Training completed in 2.99 second(s)
     2021-04-01 16:30:06   updateSlots     OK
     2021-04-01 17:12:41   voiceResponse   Lo siento, pero faltan parámetros
   helper:
     defaultRoom Wohnzimmer
     devicemap:
       devices:
         du_Dummyschalter:
           intents:
             GetOnOff:
               GetOnOff:
                 currentValue state
                 type       GetOnOff
                 valueOff   off
             MediaControls:
             SetOnOff:
               SetOnOff:
                 cmdOff     off
                 cmdOn      on
                 type       SetOnOff
           rooms:
             Wohnzimmer
       rhasspyRooms:
         Wohnzimmer:
           Stehlampe  du_Dummyschalter
         lebenXWohnzimmer:
     lng:
       responses:
         DefaultCancelConfirmation Orden cancelada
         DefaultConfirmation Vale
         DefaultConfirmationNoOutstanding No había nada para confirmar
         DefaultConfirmationReceived Valo, lo hago
         DefaultConfirmationTimeout Lo siento, está durando demasiado
         DefaultError Algo fallado
         NoActiveMediaDevice Lo siento, pero no hay ningún reproductor activo
         NoDeviceFound Lo siento, pero no se encontró el aparato
         NoMappingFound Lo siento, pero no se encontró un mapping apropiado
         NoNewValDerived Lo siento, pero no se puede definir el valor deseado
         NoValidData Lo siento, pero faltan parámetros
         duration_not_understood Lo siento, pero no se entendió la duratión
         reSpeak_failed Lo siento, pero no lo recuerdo
         timeRequest Son las $hour y $min
         timerCancellation timer $label for $room deleted
         weekdayRequest Hoy es $weekDay
         Change:
           airHumidity la humedad del aire de $location está $value por ciento
           brightness $deviceName está definido a $value
           knownType  $mappingType de $location está definido para $value por ciento
           setTarget  $device está definido para $value
           soilMoisture La humedad del suelo de $location está $value por ciento
           unknownType El valor de $location está definido para $value por ciento
           volume     $deviceName está definido a $value
           waterLevel el nivel del aqua de $location está $value por ciento
           battery:
             0          El estado de la batería de $location está $value
             1          El estado de la batería de $location está $value por ciento
           temperature:
             0          La temperatura de $location está $value
             1          La temperatura de $location está $value grados
         timerEnd:
           0          temporizador $label terminado
           1          temporizador $label en la habitación $room terminado
         timerSet:
           0          temporizador $label en la habitación $room está definido para $seconds segundos
           1          temporizador $label en la habitación $room está definido para $minutes minutos y $seconds segundos
           2          temporizador $label en la habitación $room está definido para $minutes minutos
           3          despertador $label en la habitación $room está definido para $hours horas y $minutes minutos
           4          despertador $label en la habitación $room está definido para $hours horas y $minutes minutos
           5          despertador $label en la habitación $room está definido para mañana, $hours horas y $minutes minutos
       stateResponses:
         inOperation:
           0          $deviceName ha terminado
           1          $deviceName sigue en marcha
         inOut:
           0          $deviceName está abierta
           1          $deviceName está cerrada
         onOff:
           0          $deviceName está apagada
           1          $deviceName está encendida
         openClose:
           0          $deviceName está abierta
           1          $deviceName está cerrada
       units:
         unitHours:
           0          horas
           1          una hora
         unitMinutes:
           0          Testeinheiten
           1          eine weniger
         unitSeconds:
           0          segundos
           1          un segundo
Attributes:
   IODev      RhasspyMasterDeMQTT2
   configFile ./.config/rhasspy-de.cfg
   rhasspyMaster http://192.168.2.121:12101
   room       Rhasspy
   verbose    5

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

Beta-User

Und in der configFile stehen deutsche Texte?
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

laberlaib

#177
jo:
laberlaib@ubuntu:/opt/fhem/.config$ cat rhasspy-de.cfg
#$Id: rhasspy-de.cfg 2021-03-30 incl. new timer 2 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.

{"default":
{
  "commaconversion": "1",
  "mutated_vowels": {
    "Ä": "Ae",
    "Ö": "Oe",
    "Ü": "Ue",
    "ß": "ss",
    "ä": "ae",
    "ö": "oe",
    "ü": "ue"
  },
  "units": {
      "unitHours" : {
          "0": "stunden",
          "1": "eine stunde"
      },
      "unitMinutes": {
          "0": "minuten",
          "1": "eine minute"
      },
      "unitSeconds": {
          "0": "sekunden",
          "1": "eine sekunde"
      }
   },
  "responses": {
    "DefaultConfirmation": "OK",
    "DefaultConfirmationTimeout": "Tut mir leid, da hat etwas zu lange gedauert"                 ,
    "DefaultCancelConfirmation": "Habe abgebrochen",
    "DefaultConfirmationReceived": "Ok, werde ich machen",
    "DefaultConfirmationNoOutstanding": "Es war nichts mehr zu bestätigen",
    "DefaultError": "Da ist leider etwas schief gegangen",
    "NoValidData": "Tut mir leid, aber ich habe zu wenig Daten um den Vorgang au                 szuführen",
    "NoDeviceFound": "Tut mir leid, ich konnte kein passendes Gerät finden",
    "NoMappingFound": "Tut mir leid, aber ich konnte kein passendes Mäpping find                 en",
    "NoNewValDerived": "Tut mir leid, aber ich konnte den Zielwert nicht ausrech                 nen",
    "NoActiveMediaDevice": "Tut mir leid, es ist kein Wiedergabegerät aktiv",
    "duration_not_understood": "Tut mir leid, ich habe die Dauer nicht verstande                 n",
    "timerEnd": {
        "0": "taimer $label abgelaufen",
        "1": "taimer $label im raum $room abgelaufen"
    },
    "timerSet": {
        "0": "taimer $label im Raum $room ist gestellt auf $seconds sekunden",
        "1": "taimer $label im Raum $room ist gestellt auf $minutetext $seconds"                 ,
        "2": "taimer $label im Raum $room ist gestellt auf $minutetext",
        "3": "Wecker $label im Raum $room ist gestellt auf $hours stunden $minut                 etext",
        "4": "Wecker $label im Raum $room ist gestellt auf $hours uhr $minutes",
        "5": "Wecker $label im Raum $room ist gestellt auf morgen, $hours uhr $m                 inutes"
    },"timeRequest": "Es ist $hour Uhr $min",
    "weekdayRequest": "Heute ist $weekDay",
    "reSpeak_failed": "Tut mir leid, ich kann mich nicht erinnern",
    "Change": {
      "volume": "$deviceName ist auf $value gestellt",
      "brightness": "$deviceName 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",
      "setTarget": "$device ist auf $value gesetzt",
      "knownType": "$mappingType von $location beträgt $value Prozent",
      "unknownType": "Der Wert von $location beträgt $value Prozent"
    }
  },
  "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"
    }
  }
},
"user":
{
  "units": {
      "unitSeconds": {
          "0": "Test einige Sekunden",
          "1": "Test genau eine Sekunde"
      }
  }

}
laberlaib@ubuntu:/opt/fhem/.config$

Und der andere Rhasspy ist exakt gleich, außer halt dass aus "de" überall "es" wird.
Und die config-es.cfg enthält die Spanischen Texte.

Edit:
Ich dreh mal die Reihenfolge in der fhem.cfg um und mach n Neustart

Edit2: Reihenfolge gedreht, nun erst den Spanier, dann den Deutschen mit ihren jeweiligen configs
=> Beide sprechen Deutsch; in beiden lists sind die deutschen Texte.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Beta-User

#178
Hmm, kannst du mal den Spanier anweisen, seine es-config neu einzulesen?

Edit: vermutlich muss da beim Kopieren in lng dereferenziert werden: =%{$...}
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

laberlaib

Zitat von: Beta-User am 01 April 2021, 19:43:21
Hmm, kannst du mal den Spanier anweisen, seine es-config neu einzulesen?
...was genau was ist?
Update language?
Done.
Und list ergibt spanisch... leider bei beiden
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)