Rhasspy grundsätzliches Verständnis

Begonnen von kl_ha, 20 September 2021, 12:24:51

Vorheriges Thema - Nächstes Thema

kl_ha

Moin

Ich habe einen Rhasspy über Docker aufesetzt.
Der funktioniert soweit ganz gut. Bis das wenn ich über Fhem die slots aktualisiere diese jedesmal
verloren gehen.

Das IO Device MQTT übermittelt auch Device,Room und Value.
Ist auch in der Log zu sehen.

Parsed value: 1 for key: probability
2021.09.20 12:12:36 5: Parsed value: wohnzimmer for key: Room
2021.09.20 12:12:36 5: Parsed value: schalte die wohnzimmerlampe im wohnzimmer aus for key: rawInput
2021.09.20 12:12:36 5: Parsed value: aus for key: Value
2021.09.20 12:12:36 5: Parsed value: porcupine_raspberry-pi for key: customData
2021.09.20 12:12:36 5: Parsed value: schalte die wohnzimmerlampe im wohnzimmer aus for key: input
2021.09.20 12:12:36 5: Parsed value: SetOnOff for key: intent
2021.09.20 12:12:36 5: Parsed value: wohnzimmerlampe for key: Device
2021.09.20 12:12:36 5: Parsed value: default for key: siteId
2021.09.20 12:12:36 5: handleIntentSetOnOff called
2021.09.20 12:12:36 1: No device for >>wohnzimmerlampe<< found, especially not in room >>wohnzimmer<< (also not outside)!


Das dazu gehörige Device

defmod Sonoff_Blitzwolf_138 MQTT_DEVICE
attr Sonoff_Blitzwolf_138 userattr Licht Licht_map Light_in_out Light_in_out_map Tasmota_Fcmilia_Bulb_103 Tasmota_Fcmilia_Bulb_103_map structexclude
attr Sonoff_Blitzwolf_138 IODev myMqttBroker
attr Sonoff_Blitzwolf_138 alias Wohnzimmer_Stehlampe
attr Sonoff_Blitzwolf_138 genericDeviceType light
attr Sonoff_Blitzwolf_138 group come_in_and_out_switch
attr Sonoff_Blitzwolf_138 publishSet on off cmnd/tasmota_138/POWER
attr Sonoff_Blitzwolf_138 rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off
attr Sonoff_Blitzwolf_138 rhasspyName wohnzimmerlampe
attr Sonoff_Blitzwolf_138 rhasspyRoom wohnzimmer
attr Sonoff_Blitzwolf_138 room Gruppen,MQTT2_DEVICE,Rhasspy,Wohnzimmer
attr Sonoff_Blitzwolf_138 subscribeReading_Sensor tele/tasmota_138/SENSOR
attr Sonoff_Blitzwolf_138 subscribeReading_Setup tele/tasmota_138/STATE
attr Sonoff_Blitzwolf_138 subscribeReading_State stat/tasmota_138/POWER


Leider funktioniert es nicht.
Die Frage
Wird das Rhasspy(Device) über rhasspyName wohnzimmer(Device) zugeordnet. Equivalent zu rhasspyRoom?
Ist das rhasspyRoom und rhasspyName case-sensitiv?

Gruß
Klaus

drhirn

Hast du nach der Änderung an den Attributen des Devices mal ein "update devicemap" im Rhasspy-Device gemacht?

Beta-User

#2
Zitat von: drhirn am 20 September 2021, 12:28:46
Hast du nach der Änderung an den Attributen des Devices mal ein "update devicemap" im Rhasspy-Device gemacht?
Das wäre erst mal wichtig zu wissen.

Ansonsten (da auch schon fertig):
Zitat von: kl_ha am 20 September 2021, 12:24:51
Bis das wenn ich über Fhem die slots aktualisiere diese jedesmal
verloren gehen.
Schon das ist seltsam.

Welche Versionen verwendest du (FHEM-Modul, Rhasspy-Dienst)?

Zitat
Das IO Device MQTT übermittelt [...]
Bis auf das "aus" sieht das m.E. gut aus, das solltest du bei Gelegenheit mal auf englisch umstellen.

ZitatDas dazu gehörige Device
attr Sonoff_Blitzwolf_138 genericDeviceType light
attr Sonoff_Blitzwolf_138 rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off
attr Sonoff_Blitzwolf_138 rhasspyName wohnzimmerlampe
attr Sonoff_Blitzwolf_138 rhasspyRoom wohnzimmer

Warum gDT light, wenn das Ding nur on/off kann? (=> switch)
Nachtrag: wenn gDT gesetzt ist, brauchst du vermutlich das rhasspyMapping gar nicht explizit setzen.

Zitat
Die Frage
Wird das Rhasspy(Device) über rhasspyName wohnzimmer(Device) zugeordnet. Equivalent zu rhasspyRoom?
Ist das rhasspyRoom und rhasspyName case-sensitiv?
Zum einen: Ja, RHASSPY ist case-sensitive. Was letztendlich "verstanden" wurde, könnte man an einem list des RHASSPY-Devices sehen.
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

kl_ha

Hallo

Also ich habe ein "update all" gemacht. Dachte das esupdate devicemap mit drin ist.

Verwende Rhasspy 2.5.11 und die aktuellste Version(0.4.39) von Fhem-Rhasspy modul die ich auf Github bekommen kann.
Habe die rhasspy-de.cfg mit eingebunden, in dieser datei werden ja einige slots definiert, die sind dann auch dauerhaft. 

Hier das list meines Rhasspy moduls.

CONFIGFILE ./FHEM/rhasspy-de.cfg
   DEF        baseUrl=http://ip:12101 devspec=genericDeviceType=.+ defaultRoom=wohnzimmer language=de fhemId=fhem1 prefix=rhasspy2 useGenericAttrs=0 encoding=utf-8
   FUUID      613dfc3f-f33f-17e9-25a5-f47873f9c02befc5
   IODev      RhasspyMQTT
   LANGUAGE   de
   LASTInputDev RhasspyMQTT
   MODULE_VERSION 0.4.39
   MSGCNT     33
   NAME       MyRhasspy
   NR         569
   RhasspyMQTT_MSGCNT 33
   RhasspyMQTT_TIME 2021-09-20 23:28:59
   STATE      online
   TYPE       RHASSPY
   baseUrl    http://192.168.178.64:12101
   defaultRoom wohnzimmer
   devspec    genericDeviceType=.+
   encoding   utf-8
   fhemId     fhem1
   prefix     rhasspy2
   useGenericAttrs 0
   Helper:
     DBLOG:
       intents:
         logdb:
           TIME       1632132734.00247
           VALUE      de.fhem1:GetNumeric,de.fhem1:GetTime,de.fhem1:SetOnOff
       lastIntentPayload:
         logdb:
           TIME       1632173337.32822
           VALUE      {"Device":"wohnzimmerlampe","Room":"wohnzimmer","Value":"aus","customData":"porcupine_raspberry-pi","input":"schalte die wohnzimmerlampe im wohnzimmer aus","intent":"SetOnOff","lang":null,"probability":1,"rawInput":"schalte die wohnzimmerlampe im wohnzimmer aus","requestType":"voice","sessionId":"default-porcupine_raspberry-pi-cf6c06f5-f093-40dd-b35d-3e7211b9c795","siteId":"default"}
       lastIntentTopic:
         logdb:
           TIME       1632173337.32822
           VALUE      hermes/intent/de.fhem1_SetOnOff
       listening_wohnzimmer:
         logdb:
           TIME       1632173339.38542
           VALUE      0
       responseType:
         logdb:
           TIME       1632173337.32822
           VALUE      voice
       state:
         logdb:
           TIME       1632173278.16945
           VALUE      online
       training:
         logdb:
           TIME       1632173278.16945
           VALUE      Training completed in 7.01 second(s)
       updateSlots:
         logdb:
           TIME       1632173270.28397
           VALUE      OK
       voiceResponse:
         logdb:
           TIME       1632173337.32822
           VALUE      Da paßt irgend was nicht
   READINGS:
     2021-09-19 22:22:24   IODev           RhasspyMQTT
     2021-09-20 12:12:13   intents         de.fhem1:GetNumeric,de.fhem1:GetTime,de.fhem1:SetOnOff
     2021-09-20 23:28:57   lastIntentPayload {"Device":"wohnzimmerlampe","Room":"wohnzimmer","Value":"aus","customData":"porcupine_raspberry-pi","input":"schalte die wohnzimmerlampe im wohnzimmer aus","intent":"SetOnOff","lang":null,"probability":1,"rawInput":"schalte die wohnzimmerlampe im wohnzimmer aus","requestType":"voice","sessionId":"default-porcupine_raspberry-pi-cf6c06f5-f093-40dd-b35d-3e7211b9c795","siteId":"default"}
     2021-09-20 23:28:57   lastIntentTopic hermes/intent/de.fhem1_SetOnOff
     2021-09-20 23:28:59   listening_wohnzimmer 0
     2021-09-20 23:28:57   responseType    voice
     2021-09-20 23:27:58   state           online
     2021-09-20 23:27:58   training        Training completed in 7.01 second(s)
     2021-09-20 23:27:50   updateSlots     OK
     2021-09-20 23:28:57   voiceResponse   Da paßt irgend was nicht
   TIMER:
     MyRhasspy_null:
       HASH       MyRhasspy
       MODIFIER   null
       NAME       MyRhasspy_null
       enable     false
       toDisable:
         ConfirmAction
         CancelAction
         ChoiceRoom
         ChoiceDevice
   helper:
     custom:
       SetCustomIntentsTest:
         function   SetCustomIntentsTest
         args:
           siteId
           Device
     devicemap:
       devices:
         Sonoff_Blitzwolf_138:
           intents:
       rhasspyRooms:
         wohnzimmer:
     lng:
       commaconversion 1
       mutated_vowels:
         Ä         Ae
         Ö         Oe
         Ü         Ue
         ß         ss
         ä         ae
         ö         oe
         ü         ue
       responses:
         DefaultCancelConfirmation Habe abgebrochen
         DefaultChangeIntentRequestRawInput wechseln zu $rawInput
         DefaultChoiceNoOutstanding warte grade nicht auf eine Auswahl
         DefaultConfirmation Gerne!
         DefaultConfirmationBack also nochmal
         DefaultConfirmationNoOutstanding warte grade nicht auf eine bestätigung
         DefaultConfirmationReceived Ok, werde ich machen
         DefaultConfirmationRequestRawInput bestätige $rawInput
         DefaultConfirmationTimeout Tut mir leid, da hat etwas zu lange gedauert
         DefaultError Da paßt irgend was nicht
         NoActiveMediaDevice Tut mir leid, es ist kein Wiedergabegerät aktiv
         NoDeviceFound Tut mir leid, ich konnte kein passendes Gerät finden
         NoMappingFound Tut mir leid, ich konnte kein passendes Mäpping finden
         NoMediaChannelFound Tut mir leid, der angefragte Kanal scheint nicht zu existieren.
         NoNewValDerived Tut mir leid, ich konnte den Zielwert nicht ausrechnen
         NoTimedOnDeviceFound Das gewählte Gerät unterstützt leider keine taimer Kommandos
         NoValidData ich habe leider zu wenig Daten um den Vorgang auszuführen
         RequestChoiceDevice Es kommen mehrere Geräte in Frage, bitte wähle zwischen $first_items oder $last_item
         RequestChoiceRoom Es kommen mehrere Geräte in verschiedenen Räumen in Frage, wähle einen Raum von  $first_items oder $last_item
         SilentCancelConfirmation
         duration_not_understood Tut mir leid, ich habe die Dauer nicht verstanden
         reSpeak_failed Tut mir leid, ich kann mich nicht erinnern
         timeRequest Es ist $hour Uhr $min
         timerCancellation $label im $room gelöscht
         weekdayRequest Heute ist $weekDay
         Change:
           brightness $deviceName ist auf $value gestellt
           desired-temp Die Solltemperatur von $location beträgt $value Grad
           humidity   Die Luftfeuchtigkeit von $location beträgt $value Prozent
           knownType  $mappingType von $location beträgt $value Prozent
           setTarget  $device ist auf $value gesetzt
           soilMoisture Die Bodenfeuchte von $location beträgt $value Prozent
           unknownType Der Wert von $location beträgt $value Prozent
           volume     $deviceName ist auf $value gestellt
           waterLevel Der Wasserstand von $location beträgt $value Prozent
           battery:
             0          Der Batteriestand von $location ist $value
             1          Der Batteriestand von $location beträgt $value Prozent
           temperature:
             0          Die Temperatur von $location ist $value
             1          Die Temperatur von $location beträgt $value Grad
         timerEnd:
           0          $label abgelaufen
           1          $label im raum $room abgelaufen
         timerSet:
           0          $label im Raum $room ist gestellt auf $seconds sekunden
           1          $label im Raum $room ist gestellt auf $minutetext $seconds
           2          $label im Raum $room ist gestellt auf $minutetext
           3          $label im Raum $room ist gestellt auf $hours stunden $minutetext
           4          $label im Raum $room ist gestellt auf $hours uhr $minutes
           5          $label im Raum $room ist gestellt auf morgen, $hours uhr $minutes
       stateResponses:
         inOperation:
           0          $deviceName ist fertig
           1          $deviceName läuft noch
         inOut:
           0          $deviceName ist ausgefahren
           1          $deviceName ist eingefahren
         onOff:
           0          $deviceName ist ausgeschaltet
           1          $deviceName ist eingeschaltet
         openClose:
           0          $deviceName ist geöffnet
           1          $deviceName ist geschlossen
       units:
         unitHours:
           0          stunden
           1          eine stunde
         unitMinutes:
           0          minuten
           1          eine minute
         unitSeconds:
           0          Beispiel 1a: einige Sekunden
           1          Beispiel 1b: genau eine Sekunde
       words:
         off        aus
         on         an
     shortcuts:
     tweaks:
Attributes:
   IODev      RhasspyMQTT
   languageFile ./FHEM/rhasspy-de.cfg
   rhasspyIntents SetCustomIntentsTest=SetCustomIntentsTest(siteId,Device)
   rhasspyRoom Flur
   room       Rhasspy,Geräte
   verbose    5


Und hier meine sentences

[de.fhem1:SetOnOff]
schalte (die | das) (wohnzimmerlampe|stehlampe){Device} im (wohnzimmer|schlafzimmer){Room} (an | ein | aus | on | off){Value}

Beta-User

#4
Hmm, das Device wird nicht korrekt erkannt:
devicemap:
       devices:
         Sonoff_Blitzwolf_138:
           intents:
       rhasspyRooms:
         wohnzimmer:

Das sollte eher so aussehen:
devicemap:
       devices:
         Aussenlicht_Garage:
           alias      aussenlicht garage
           groups     licht
           names      aussenlicht garage
           rooms      garten
           intents:
             GetOnOff:
               GetOnOff:
                 currentVal state
                 type       GetOnOff
                 valueOff   off
             SetOnOff:
               SetOnOff:
                 cmdOff     off
                 cmdOn      on
                 type       SetOnOff
    [...]
   
rhasspyRooms:
         [...]
         garten:
           [...]
           aussenlicht garage Aussenlicht_Garage
Wie ist denn das Attribut "rhasspyMapping" in dein System gelangt? An sich müßte das mit verändertem prefix (rhasspy2) nämlich als "rhasspy2Mapping" gesetzt werden, damit diese RHASSPY-Instanz das Mapping an sich sieht. (dto. für die übrigen rhasspy.*-Attribute).
Seltsam ist nur, dass dann nicht das gDT "solo" ausgewertet wird, aber das liegt dann vermutlich daran, dass
{getAllSets('Sonoff_Blitzwolf_138')}
irgendwas unerwartetes zurückliefert (was vermutlich der Grund war, warum du überhaupt das manuelle Mapping gesetzt hast?).

EDIT: das MQTT-Device an sich ist m.E. auch nicht das Problem. Zumindest wird das bei mir im RHASSPY-list sauber angelegt, ganz gleich, ob mit oder ohne (passend benannte) rhasspy.*-Attribute und "update" als "devicemap" oder "all". 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

kl_ha

Hallo

Habe es jetzt funktionieren gebracht.

Entscheidend meiner Meinung nach war das rhasspyName zu rhasspy2Name, rhasspyRoom zu rhasspy2Room und rhasspyMapping zu rhasspy2Mapping verändert habe.
Was noch entscheident war, das ich genericDeviceType gesetzt habe, ohne dies hatte es nicht funktioniert.

Beta-User

Zitat von: kl_ha am 22 September 2021, 10:53:58
Was noch entscheident war, das ich genericDeviceType gesetzt habe, ohne dies hatte es nicht funktioniert.
Falls das jemand nachbauen will: Das ist mAn. irreführend, weil das zwar _hier_ zutreffend ist, aber wegen der hier (dann unter dem richtigen Namen) explizit angegebenen rhasspy-Attribute der RHASSPY-Hash auch dann funktionsfähig hätte aufgebaut werden müssen, wenn die devspec (in der DEF) anderweitig passend gesetzt wird.

Vielleicht noch ein Wort zu den ganzen Optionen in der DEF, (v.a. zu dem useGenericAttrs=0, das ich bisher leider übersehen hatte):
Die meisten Optionen braucht man nicht, zu setzen, und die Beispiele in der commandref sind nur deswegen so gewählt, dass man sehen kann, was möglich wäre... Das mit "useGenericAttrs" war lange "experimentell" und ungetestet, aber (gerade) Anfänger sollten mAn. dieses feature ausdrücklich nicht (mehr) deaktivieren.
Werde mir (u.A.) die commandref nochmal vornehmen, da ist (v.a. auch in Bezug auf die genericDeviceType-Darstellung) manches noch verbesserungsfähig (@drhirn: explizit: mea culpa!).
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

kl_ha

@Beta-user

Erst mal danke für deine Hilfe und narürlich für die Arbeit.

Das ganze define habe aus github zusammenkopiert. Und dann rumprobiert.


define Rhasspy RHASSPY baseUrl=http://Rhasspy_IP:12101 devspec=genericDeviceType=.+ defaultRoom=wohnzimmer language=de fhemId=fhem1 prefix=rhasspy2 useGenericAttrs=0 encoding=cp-1252

Hier noch ein kleiner Anfangsspolperer von mir an dem ich länger saß.

Um die deutsche rhasspy-de.cfg einzubinden ist encoding=cp-1252 das falsche encoding und wirft eine Fehlermeldung "Da es keine korrekte JSON Datei wäre". Entweder man  lässt encoding=cp-1252 weg da es per default encoding auf utf-8 gesetzt wird oder setzt es explizit auf utf-8.

Vielleicht hlft das den einen oder andreren.


Beta-User

Nochmal: Die meisten dieser ganzen Optionen sind  (im Normalfall) eigentlich gar nicht dafür gedacht, gesetzt zu werden ::) ... Daher sollte man alles weglassen, was man nicht braucht, unabhängig davon, was irgendwo als Beispiel (für spezielle Fälle) zu finden ist.

Meine eigene DEF ist nur devspec und defaultRoom (läuft auf demselben Server, sonst braucht man noch baseUrl; bei "global" steht "language" auf "DE")...

Es würde daher helfen, keine "schlechten" Beispiele zu posten, die dann wieder jemand kopiert ;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