[RHASSPY] - Einstellungen optimieren mit Hilfe der Testsuite

Begonnen von Beta-User, 23 März 2022, 10:25:53

Vorheriges Thema - Nächstes Thema

Beta-User

Hallo zusammen,

als "kleinen Appetizer" für die Frage, wie man pah's "Testsuite" (künftig und vielleicht) verwenden kann, hier mal ein erster Auszug aus meinen ersten Ergebnissen. Diese kommen aus der aktuellsten und noch nicht allgemein verfügbaren RHASSPY-Fassung, ich hoffe, die bis Ende der Woche* ins svn zu bekommen.

Gesamtergebnisse:
Zitattested 173 sentences, failed total: 114, amongst these in dialogues: 17. See FEST_result.txt for detailed results.
(Da sind ein paar Versuche drin, wie man ggf. das Dialog-Thema vercoden kann).

Hier Auszüge aus der FEST_result.txt:
  guten morgen => SetMute {"Value":"off","confidence":1,"customData":null,"input":"off","intent":"SetMute","lang":"de","rawInput":"  guten morgen","sessionId":"defhem_53_testmode","siteId":"defhem"}
  gute nacht => SetMute {"Value":"on","confidence":1,"customData":null,"input":"on","intent":"SetMute","lang":"de","rawInput":"  gute nacht","sessionId":"defhem_54_testmode","siteId":"defhem"}
  guten morgen jeannie => Confidence not sufficient! => SetMute {"Value":"off","confidence":0.5,"customData":null,"input":"off","intent":"SetMute","lang":"de","rawInput":"  guten morgen jeannie","sessionId":"defhem_55_testmode","siteId":"defhem"}
  gute nacht jeannie => Confidence not sufficient! => SetMute {"Value":"on","confidence":0.5,"customData":null,"input":"on","intent":"SetMute","lang":"de","rawInput":"  gute nacht jeannie","sessionId":"defhem_56_testmode","siteId":"defhem"}
 
  was kannst du => GetState {"confidence":1,"customData":null,"input":"generic","intent":"GetState","lang":"de","rawInput":"  was kannst du","sessionId":"defhem_58_testmode","siteId":"defhem","type":"generic"} => Response: es können einige Geräte gesteuert werden oder Informationen aus der Haussteuerung abgefragt werden
  was kannst du für mich tun => Confidence not sufficient! => GetState {"confidence":0,"customData":null,"input":"generic","intent":"GetState","lang":"de","rawInput":"  was kannst du für mich tun","sessionId":"defhem_59_testmode","siteId":"defhem","type":"generic"} => Response: es können einige Geräte gesteuert werden oder Informationen aus der Haussteuerung abgefragt werden
  und was kannst du für mich tun
 
  was kannst du steuern => GetState {"confidence":1,"customData":null,"input":"Was kannst du control","intent":"GetState","lang":"de","rawInput":"  was kannst du steuern","sessionId":"defhem_62_testmode","siteId":"defhem","type":"control"} => Response: im wohnzimmer kann ich unter anderen diese geräte steuern: leiste mitte, heizkörper südwest, [...] und stehlampe links
  was kannst du im haus steuern => Confidence not sufficient! => GetState {"confidence":0.5,"customData":null,"input":"Was kannst du control","intent":"GetState","lang":"de","rawInput":"  was kannst du im haus steuern","sessionId":"defhem_63_testmode","siteId":"defhem","type":"control"} => Response: im wohnzimmer kann ich unter anderen diese geräte steuern: leiste mitte, heizkörper südwest, [...] und stehlampe links
  was kannst du für mich steuern => Confidence not sufficient! => GetState {"confidence":0.5,"customData":null,"input":"Was kannst du control","intent":"GetState","lang":"de","rawInput":"  was kannst du für mich steuern","sessionId":"defhem_64_testmode","siteId":"defhem","type":"control"} => Response: im wohnzimmer kann ich unter anderen diese geräte steuern: leiste mitte, heizkörper südwest, [...] und stehlampe links
  was kannst du anschalten => Confidence not sufficient! => GetState {"confidence":0.666666666666667,"customData":null,"input":"generic","intent":"GetState","lang":"de","rawInput":"  was kannst du anschalten","sessionId":"defhem_65_testmode","siteId":"defhem","type":"generic"} => Response: es können einige Geräte gesteuert werden oder Informationen aus der Haussteuerung abgefragt werden
  was kannst du schalten => GetState {"confidence":1,"customData":null,"input":"Was kannst du control","intent":"GetState","lang":"de","rawInput":"  was kannst du schalten","sessionId":"defhem_66_testmode","siteId":"defhem","type":"control"} => Response: im wohnzimmer kann ich unter anderen diese geräte steuern: leiste mitte, heizkörper südwest, [...] und stehlampe links

[...]

  wie warm ist es im wohnzimmer => GetNumeric {"Room":"wohnzimmer","Type":"temperature","confidence":1,"customData":null,"input":"wie temperature ist es im wohnzimmer","intent":"GetNumeric","lang":"de","rawInput":"  wie warm ist es im wohnzimmer","sessionId":"defhem_105_testmode","siteId":"defhem"} => Response: Die Temperatur von wohnzimmer beträgt 22,8 Grad
  wie warm ist es
  sag mir die temperatur im wohnzimmer => GetNumeric {"Room":"wohnzimmer","Type":"temperature","confidence":0.8,"customData":null,"input":"sag mir temperature im wohnzimmer","intent":"GetNumeric","lang":"de","rawInput":"  sag mir die temperatur im wohnzimmer","sessionId":"defhem_107_testmode","siteId":"defhem"} => Response: Die Temperatur von wohnzimmer beträgt 22,8 Grad
  wie ist die temperatur im schlafzimmer => GetNumeric {"Room":"schlafzimmer","Type":"temperature","confidence":1,"customData":null,"input":"wie ist die temperature im schlafzimmer","intent":"GetNumeric","lang":"de","rawInput":"  wie ist die temperatur im schlafzimmer","sessionId":"defhem_108_testmode","siteId":"defhem"} => Response: Die Temperatur von schlafzimmer beträgt 17,3 Grad
 
  wie feucht ist es im wohnzimmer => GetNumeric {"Room":"wohnzimmer","Type":"humidity","confidence":1,"customData":null,"input":"wie humidity ist es im wohnzimmer","intent":"GetNumeric","lang":"de","rawInput":"  wie feucht ist es im wohnzimmer","sessionId":"defhem_110_testmode","siteId":"defhem"} => Response: Die Luftfeuchtigkeit von wohnzimmer beträgt 38 Prozent
  wie feucht ist es => GetNumeric {"Type":"humidity","confidence":1,"customData":null,"input":"wie humidity ist es","intent":"GetNumeric","lang":"de","rawInput":"  wie feucht ist es","sessionId":"defhem_111_testmode","siteId":"defhem"} => Response: Die Luftfeuchtigkeit von wohnzimmer beträgt 38 Prozent

[...]

  mach alle jalousien im esszimmer zu => SetOnOffGroup {"Group":"jalousien","Room":"esszimmer","Value":"off","confidence":1,"customData":null,"input":"mach alle jalousien im esszimmer off","intent":"SetOnOffGroup","lang":"de","rawInput":"  mach alle jalousien im esszimmer zu","sessionId":"defhem_209_testmode","siteId":"defhem"} Devices in group and room: Jalousie_Mitte,Jalousie_Links,Jalousie_Rechts
  fahre die jalousien im wohnzimmer halb auf => SetNumericGroup {"Group":"jalousien","Room":"wohnzimmer","Value":"49.5","confidence":1,"customData":null,"input":"fahre die jalousien im wohnzimmer 49.5","intent":"SetNumericGroup","lang":"de","rawInput":"  fahre die jalousien im wohnzimmer halb auf","sessionId":"defhem_210_testmode","siteId":"defhem"} Devices in group and room: Jalousie_WZ
  fahr die jalousie in der mitte halb zu => Confidence not sufficient! => SetNumeric {"Device":"jalousie mitte","Value":"49.5","confidence":0.666666666666667,"customData":null,"input":"fahr die jalousie mitte 49.5","intent":"SetNumeric","lang":"de","rawInput":"  fahr die jalousie in der mitte halb zu","sessionId":"defhem_211_testmode","siteId":"defhem"}

  wie warm ist es draussen => GetNumeric {"Room":"draussen","Type":"temperature","confidence":1,"customData":null,"input":"wie temperature ist es draussen","intent":"GetNumeric","lang":"de","rawInput":"  wie warm ist es draussen","sessionId":"defhem_213_testmode","siteId":"defhem"} => Response: Die Temperatur von draussen beträgt 7,0 Grad

  färbe die stehlampe links rot => SetColor {"Device":"stehlampe links","Hue":"0","confidence":1,"customData":null,"input":"färbe die stehlampe links 0","intent":"SetColor","lang":"de","rawInput":"  färbe die stehlampe links rot","sessionId":"defhem_215_testmode","siteId":"defhem"}
  stelle die stehlampe rechts auf blau => SetColor {"Device":"stehlampe rechts","Hue":"240","confidence":0.8,"customData":null,"input":"stelle die stehlampe rechts 240","intent":"SetColor","lang":"de","rawInput":"  stelle die stehlampe rechts auf blau","sessionId":"defhem_216_testmode","siteId":"defhem"}

  wie wird das wetter heute => GetState {"Device":"wetter","confidence":1,"customData":null,"input":"wie heute das wetter heute","intent":"GetState","lang":"de","rawInput":"  wie wird das wetter heute","sessionId":"defhem_239_testmode","siteId":"defhem","type":"heute"} => Response: heute Den ganzen Tag lang Klar. Es hat zwischen 1 und 20 Grad und Wind bis 4 Kilometer pro Stunde.
  wie wird das wetter morgen => GetState {"Device":"wetter","confidence":1,"customData":null,"input":"wie heute das wetter morgen","intent":"GetState","lang":"de","rawInput":"wie wird das wetter morgen","sessionId":"defhem_0_testmode","siteId":"defhem","type":"morgen"} => Response: morgen Den ganzen Tag lang Klar. Es gibt zwischen 2 und 20 Grad und Wind bis 4 Kilometer pro Stunde.


*Das ist uU. auch abhängig davon, welche Rückmeldungen zum Ausgabeformat kommen und ob/welche Ideen ggf. von eurer Seite her.
(Was ich gerne noch hätte, wäre die Schalt-Anweisungen mit aufzuzeichnen, die bei den Einzelbefehlen ausgeführt worden wären; das ist aber etwas aufwändiger und bedarf gewisser Tests, da sollte nichts "schiefgehen" (also: nichts tatsächlich geschaltet werden ::) )).

Vermutlich wird der eine oder andere sich fragen, wie manche dieser Ergebnisse zustande kommen. Das ist "keine Absicht"  ::) ...

Das eigentliche Ziel dieses Threads: Möglichkeiten aufzeigen, wo und wie man in der Gesamtkonfiguration (Rhasspy allg. und speziell sentences.ini, RHASSPY, RHASSPY-Attribute an den Devices, allgemeine FHEM-Konfiguration) eingreifen kann, um möglichst praxistaugliche "Ergebnisse" zu erzielen :) .

Update folgt, wenn das ganze allgemeiner "testbar" ist...

EDIT:
Erster Testdurchlauf mit Aufzeichnung der Kommandos sieht in etwa so aus:  fahr die jalousie in der mitte halb zu => SetNumeric {"Device":"jalousie mitte","Value":"49.5","confidence":0.666666666666667,"customData":null,"input":"fahr die jalousie mitte 49.5","intent":"SetNumeric","lang":"de","rawInput":"  fahr die jalousie in der mitte halb zu","sessionId":"defhem_211_testmode","siteId":"defhem"} => Command: set Jalousie_Mitte dim 49.5. => Command: set Jalousie_Mitte positionSlat 49.5. => Response: ok
mach lauter => SetNumeric {"Change":"volUp","confidence":1,"customData":null,"input":"mach volUp","intent":"SetNumeric","lang":"de","rawInput":"  mach lauter","sessionId":"defhem_233_testmode","siteId":"defhem"} => Command: set myMPD volume 100. => Response: zu diensten
  mach die musik leiser => SetNumeric {"Change":"volDown","confidence":0.666666666666667,"customData":null,"input":"mach die volDown","intent":"SetNumeric","lang":"de","rawInput":"  mach die musik leiser","sessionId":"defhem_234_testmode","siteId":"defhem"} => Command: set myMPD volume 97. => Response: zu diensten
  stelle die stehlampe rechts auf blau => SetColor {"Device":"stehlampe rechts","Hue":"240","confidence":0.8,"customData":null,"input":"stelle die stehlampe rechts 240","intent":"SetColor","lang":"de","rawInput":"  stelle die stehlampe rechts auf blau","sessionId":"defhem_216_testmode","siteId":"defhem"} => Command: set Licht_Stehlampe_rechts hue 43690. => Response: jawohl
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Beta-User

Zwischeninfo: im svn/contrib ist zwischenzeitlich die aktualisierte RHASSPY-Fassung zu finden, die auch die erweiterten Testergebnisse anzeigt. Sinnvoll ist dazu auch eine aktualisierte/erweiterte Sprachdatei, die ebenfalls im svn zu finden ist.

Anleitung zum Gebrauch und etwas ergänzte FEST.txt finden sich rund um diesen Beitrag: https://forum.fhem.de/index.php/topic,119447.msg1214983.html#msg1214983
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Beta-User

Aktualisierte Anleitung:
1. siteId von der FHEM Instanz (siehe entsprechendes Internal) im Bereich "Intent Recognition" der Rhasspy-Base eintragen.

2. mit "get <RHASSPY> test_sentence wie spät ist es" testen, ob die Kommunikation in den "Positiv-Fällen" klappt.

3. mit "get <RHASSPY> test_sentence alice kann von bob nicht erhört werden" (oder irgendeinem Unsinn, den Rhasspy nicht versteht) die Negativ-Fälle testen. Es sollte eine Antwort kommen, die in etwa so aussieht: "Test failed, result is: alice kann von bob nicht erhört werden => Intent not recognized."
Kommt ein Timeout, ist der "not recognized"-Topic vermutlich nicht in den "subscriptions" am MQTT2_CLIENT enthalten; wer die subscriptions von RHASSPY verwalten läßt ("attr rhasspy2mqtt subscriptions setByTheProgram") sollte dieses Problem nicht haben.

4. FEST.txt aus dem Anhang (oder der Ausgangsversion von pah) so irgendwohin speichern, dass der User "fhem" sie lesen darf (z.B. nach /opt/fhem/FEST.txt mit passenden Rechten).
Die "FEST.txt" enthält einfach "nur" eine Sammlung von möglichen Ergebnissen aus einem speech2text-Prozess, die zeilenweise nacheinander getestet werden. Man kann die Zeilen (oder andere Sätze) genausogut jeweils einzeln testen: "get <RHASSPY> test_sentence <hier steht der gesprochene Text>". Falls ihr "gute" Sätze habt, die auch (ggf. in Anwandlungen) für die Allgemeinheit interessant sein könnten, bitte in pah's Thread bekannt geben.

5a. sicherheitshalber die statefile vorher wegzuschreiben kann nicht schaden, falls wider Erwarten doch was schief geht...

5b. Dann das Testen mit "get <RHASSPY> test_file ./FEST.txt" starten, und etwas warten. Wird der Test halbwegs zeitnah fertig (bis 30 Sekunden), gibt es eine qualifizierte Rückmeldung, wenn nicht, eben eine timeout-Meldung.

Während der Test läuft, ist ein Internal "testline" vorhanden, das hochgezählt und dann auch wieder gelöscht wird. Geht irgendwas schief, ändert sich die Zahl nicht mehr, und man kann dann den Prozess mit einem "get <RHASSPY> test_sentence bla blub" oä. stoppen. Da das ganze als "Ping-Pong"-Spiel zwischen RHASSPY und Rhasspy abläuft, wird FHEM auch in der Zeit nicht blockiert, Schaltanweisungen werden (hoffentlich) keine ausgeführt.

6. Auswertung (zu finden in FEST_result.txt) ansehen.

Allgemeine Hinweise dazu:
a) Zeilen, in denen keine Anmerkungen "hinten" zu finden ist, enthalten Sätze, für die Rhasspy keinen Intent erkannt hat. Wer daran was ändern will, kann
aa) entweder den Satz anpassen (in FEST.txt) oder eine Abwandlung hinten anstellen;
bb) die Benennungen seiner Geräte in den rhasspy-Attributen (v.a. name und group bzw. room) anpassen, insbesondere ggf. im Tweak gdt2groups;
cc) auf der Rhasspy-Seite anpassen, also sentences.ini ändern. Für alle Arten Abfragen ist dabei vorrangig "GetNumeric" zu empfehlen, was darüber nicht klappt, kann etwas universeller mit "GetState" erledigt werden;
dd) die siteId (typ: defhem) mal in einen anderen Raum verschieben und danach das ganze wiederholen. Beispiel:
setreading <RHASSPY> siteId2room_defhem    wohnzimmer

b) Zeilen, in denen die "falsche" Anweisung steht oder eine (unnötige) Rückfrage erfolgt:
aa) siehe a) aa) bis cc)
bb) evtl. hilft "Specials" bearbeiten: "priority" und "blacklistIntents"

c) wo alles paßt: Freuen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Prof. Dr. Peter Henning

Prima, heute habe ich etwas weniger beruflichen Druck und werde mir das ansehen.

LG

pah

Beta-User

Falls du mal wieder Zeit zum Testen und/oder Rückmeldung machen findest: Bitte die aktuellste Developer-Version verwenden https://forum.fhem.de/index.php/topic,119447.msg1217486.html#msg1217486, eine passende de-cfg ist im svn.

Zitat von: Beta-User am 09 April 2022, 07:21:10
Beispielsatz dazu:
[de.fhem:SetOnOff]
rooms=([(im|in dem|auf dem|in der|auf der)] $de.fhem.Room{Room})
morerooms=([[und] (im|in dem|auf dem|in der|auf der)] $de.fhem.Room{Room1})
devSetOnOff=($de.fhem.Device-SetOnOff{Device})
onOff=((an|ein){Value:on}|aus{Value:off})
den=(den|die|das)
cmdmulti=(schalte|schalt|mache|mach|stelle|stell)

(<cmdmulti>|starte) [<den>] <devSetOnOff> [[und] [<den>] $de.fhem.Device-SetOnOff{Device1}] [<rooms> [<morerooms>]] <onOff>


Hier noch ein paar weitere Test-Ergebnisse/-Sätze:
Zitattest(s) passed successfully. Summary: Test ok, result is: schalt das licht am esstisch und das radio an => SetOnOff {"Device":"licht am esstisch","Device1":"radio","Value":"on","confidence":1,"customData":null,"input":"schalt das licht am esstisch und das radio on","intent":"SetOnOff","lang":"de","rawInput":"schalt das licht am esstisch und das radio an","sessionId":"defhem_0_testmode","siteId":"defhem"} => redirected group intent (SetOnOffGroup), adressed devices: Licht_Essen,Yamaha_Main
Zitattest(s) passed successfully. Summary: Test ok, result is: schalt das licht am esstisch und das radio im garten an => SetOnOff {"Device":"licht am esstisch","Device1":"radio","Room":"garten","Value":"on","confidence":1,"customData":null,"input":"schalt das licht am esstisch und das radio im garten on","intent":"SetOnOff","lang":"de","rawInput":"schalt das licht am esstisch und das radio im garten an","sessionId":"defhem_0_testmode","siteId":"defhem"} => Response: Du hast widersprüchliche Angaben gemacht: licht am esstisch und garten passen nicht zusammen. Soll licht am esstisch mit dem Namen und dem besprochenen Gerät ermittelt werden?

Zitattest(s) passed successfully. Summary: Test ok, result is: schalt das licht am esstisch und das radio im garten und im esszimmer an => SetOnOff {"Device":"licht am esstisch","Device1":"radio","Room":"garten","Room1":"esszimmer","Value":"on","confidence":1,"customData":null,"input":"schalt das licht am esstisch und das radio im garten und im esszimmer on","intent":"SetOnOff","lang":"de","rawInput":"schalt das licht am esstisch und das radio im garten und im esszimmer an","sessionId":"defhem_0_testmode","siteId":"defhem"} => redirected group intent (SetOnOffGroup), adressed devices: Licht_Essen,Yamaha_Zone2
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors