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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1245 am: 29 März 2022, 11:16:07 »
Cool!
...das stand jetzt lange genug unter "ToDo", ohne dass sich jemand anders dazu hätte breitschlagen lassen ;D - und da sowas in pah's Testsuite auftaucht, war es schwieriger, diese Anforderung zu ignorieren ::) ...

Allerdings ist mir gestern noch was raus:
- zum einen CancelTimer+Testmodus => wurde doch gelöscht...
- ein key in der de-cfg fehlt noch für "NoIntentRecognized"

Da ich wegen dem ersten Punkt sowieso nochmal ran musste, habe ich mir für die Tests dann auch noch "MediaChannels" und "Shortcuts" angesehen. Da auch dort die ggf. auszulösenden Aktionen über die zentralen internen Ausführungs-Routinen laufen, sollte es unproblematisch sein, nun auch diese Zweige für die Tests zu aktivieren. Damit müßte dann alles testbar sein, was intern abläuft :) .
Custom Intents gehen prinzipbedingt nicht zu testen, aber das sollte verschmerzbar sein.

Falls du zum Testen kommst, kannst du dir für den key in der de-cfg gerne was ausdenken und die gesammelten Werke einchecken. Weiß nicht, wann ich dazu komme.

Zitat
Ein "stopp" wäre super, wenn der Timer klingelt. Aber ich weiß nicht, wie man das lösen könnte. Irgendwie hört Rhasspy nicht zu, während es Audio ausgibt.
Nun ja, ohne input kein output... Das muss demnach außerhalb gelöst werden.
« Letzte Änderung: 29 März 2022, 11:46:52 von Beta-User »
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1246 am: 29 März 2022, 11:23:24 »
Wie kann ich den "NoIntentRecognized" triggern?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1247 am: 29 März 2022, 11:43:06 »
Wie kann ich den "NoIntentRecognized" triggern?
:)
Dazu muss der Input entweder über msgDialog (an einem RESIDENT/GUEST) kommen, oder über ein AMAD.*-Gerät. Ist eine Folge von
Notizen an mich selbst:
- die "not recognized"-Fälle sollte man bei den "echten" Messenger-Fällen vermutlich auch noch gesondert mit einer Antwort bedenken, damit der Anfragende jedenfalls eine Rückmeldung bekommt;
Ist also für einen "nur-Rhasspy"-Nutzer gar nicht so ohne weiteres nachzustellen ;D ...
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1248 am: 29 März 2022, 11:44:36 »
Aha

Naja, habe mich für "Ich konnte leider keinen passenden Intent finden" entschieden und die beiden Files eingecheckt.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1249 am: 29 März 2022, 13:29:23 »
- GetState überarbeitet:
-- erlaubt es, beliebige Inhalte auszuwerten, indem in rhasspyMapping GetState mit einem type und einer stateFormat-artigen "response" angeben wird;
-- Status-Infos zu RHASSPY selbst können abgefragt werden (insbesondere auf den aktuellen Raum der Anfrage bezogen)

Kannst du das mal genauer erläutern bitte? Wie sieht z.B. dein Diesel-Preis Mapping aus?
Danke!

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1250 am: 29 März 2022, 13:52:45 »
Kannst du das mal genauer erläutern bitte? Wie sieht z.B. dein Diesel-Preis Mapping aus?
Das sind eigentlich zwei bis 3 Themen...

"Diesel" ist eine "price"-Type-Anfrage, für die es in den fertigen Antwortsätzen eine Standardantwort gibt. Die Anfrage dazu sieht so aus:
was kostet{Type:price} (Diesel|Benzin:SuperE10|Super:SuperE5){Reading} [( in | an | bei )] $de.fhem.Device-info{Device}Abgefragt wird (hier und im Moment) ein (gDT: info) HTTPMOD, der als Readings eben "Diesel", "SuperE10" und "SuperE5" kennt.

Richtig "frei" wird es, wenn man den Weg nimmt, wie im Wetter-Beispiel aus https://forum.fhem.de/index.php/topic,124240.msg1215241.html#msg1215241 aufgezeigt. Damit kann man dann im Prinzip völlig beliebige Abfragen und auch Infos/Readings von anderen Devices "vorlesen lassen", das "Reading" muss dann nicht mal exisitieren, sondern es genügt, wenn diese Bezeichnung als "Anker" im rhasspyMapping steht ;) .

Mein etwas ausgebauter Satz dazu:
wie ( ist | wird ){Type:heute} ( [das] wetter{Device} | [der] Wetterbericht{Device:wetter} [für] ) [ ( heute | morgen{Type:morgen} | übermorgen{Type:übermorgen} ) ]

Weiteres Beispiel dazu:
sind alle fenster{Type:openWindow} [und] [Türen] geschlossen{Device} 
ist irgendwo ein fenster{Type:openWindow} [oder eine tür] offen{Device:geschlossen}
führt zu folgendem monitoring-Device:attr Fenster_monitoring genericDeviceType info
attr Fenster_monitoring rhasspyMapping GetState:type=openWindow,response=Es sind grade [Fenster_monitoring:allCount] Fenster und Türen offen.
attr Fenster_monitoring rhasspyName geschlossen

Antwort Teil 3 - RHASSPY-Abfragen sehen in etwa so aus:
(Wie kannst du mir helfen | was kannst du [alles] ){Type:generic}
(Was|welche geräte) kannst du [<rooms>] ( steuern | [(an|aus)] schalten ){Type:control}
(Ich habe grade noch ein paar weitere im Test (v.a. wegen Szenen), bin mir aber nicht sicher, ob/was davon genau schon funktioniert...).

Hoffe, es ist jetzt etwas klarer?
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1251 am: 29 März 2022, 13:58:25 »
Ja, jetzt klarer. Aber noch nicht ganz klar. Den Rest werde ich durch ausprobieren rausfinden ;)

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1252 am: 29 März 2022, 14:00:30 »
Aaahhhmm, ich hab keinen GDT "info". Wo kommt der her?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1253 am: 29 März 2022, 14:12:54 »
...den hat "jemand" "erfunden", weil ihm nichts besseres eingefallen ist...
Bin für Alternativ-Vorschläge offen, in RHASSPY ist das halt ein "Marker", über den die Auswertung gewisser setter (z.B. update, reread, reload) zugelassen wird und (prinzipiell) die Abfrage von STATE.
Meine "wie wird das wetter"-Abfrage war ursprünglich nur ein Verlesen des STATE, den ich via stateFormat passend formatiert hatte. Das ist in der Leseansicht aber unübersichtlicher als das, was Weather standardmäßig macht, und "morgen" etc. kann es auch nicht, was mich dann auf den "Trick" mit den Pseudo-Readings gebracht hat...

Jetzt sind wir aber eigentlich schon mitten drin in der "anderen" Diskussion, wie man die neuen Optionen denn jetzt sinnigerweise nutzt, und was ggf. noch fehlt...
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1254 am: 29 März 2022, 14:37:02 »
...den hat "jemand" "erfunden", weil ihm nichts besseres eingefallen ist...
Bin für Alternativ-Vorschläge offen, in RHASSPY ist das halt ein "Marker", über den die Auswertung gewisser setter (z.B. update, reread, reload) zugelassen wird und (prinzipiell) die Abfrage von STATE.
Hehe
Ich find "info" eh gut. Hab mich nur gewundert, dass der in meiner inzwischen ewig langen Liste an GDTs nicht drinnen war.


Zitat
Jetzt sind wir aber eigentlich schon mitten drin in der "anderen" Diskussion, wie man die neuen Optionen denn jetzt sinnigerweise nutzt, und was ggf. noch fehlt...
Dazu fehlt mir noch die Info, was eigentlich alles und wie geht.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1255 am: 29 März 2022, 14:53:39 »
Ich find "info" eh gut. Hab mich nur gewundert, dass der in meiner inzwischen ewig langen Liste an GDTs nicht drinnen war.
Bei mir gibt's keine vorgegebene Liste, aber verwendet wird halt nur das, was RHASSPY versteht...

Zitat
Dazu fehlt mir noch die Info, was eigentlich alles und wie geht.
Da sind wir zu zweit ;D ...

Im Ernst: Relativ viel bekommt man über pah's Testsuite raus, v.a., wenn man die "Raumbezogenheit" von RHASSPY mit berücksichtigt und "siteId2room_defhem" mal mit etwas unterschiedlichen Orten vor jedem Durchlauf befüllt.

Soweit ich das bisher beurteilen kann, kommt man dann v.a. zu folgenden Problemkreisen:
- Priorisierungen (kann der User entscheiden)
- "Mach heller", wenn es kein dimmbares angeschaltetes Gerät gibt*
- Szenenauswahl: was gibt es + Auswahldialog*
- Konfiguration von allgemeinen Abfragen; wie macht man das am cleversten...**

Vermutlich sollte ich jetzt mal meine vollständige GetStates-Sätze zeigen, dann kannst du aus der Differenz ggf. ableiten, wo grade mein Stand für Tests ist...:
[de.fhem:GetState]
query=<de.fhem:GetDate.query>
#[de.fhem:GetDate]
#query=( weißt du [bitte] | ( könntest | kannst ) du mir [bitte] sagen | sag mir [bitte] )
den=<de.fhem:SetOnOff.den>
rooms=<de.fhem:SetOnOff.rooms>
#rooms=([(im|in dem|auf dem|in der|auf der)] $de.fhem.Room{Room})
\[<query>] ( wie ist der status | ( sag | sage ) [mir] [bitte] ){State} [(vom | von ( dem | der ) | (den (Stand|Zustand) [von] ) )] $de.fhem.Device{Device} [<rooms> | $de.fhem.Room-info]
(erneuere | aktualisiere ){Update} <den> $de.fhem.Device-info{Device}
was kostet{Type:price} (Diesel|Benzin:SuperE10|Super:SuperE5){Reading} [( in | an | bei )] $de.fhem.Device-info{Device}
wie ( ist | wird ){Type:heute} ( [das] wetter{Device} | [der] Wetterbericht{Device:wetter} [für] ) [ ( heute | morgen{Type:morgen} | übermorgen{Type:übermorgen} ) ]
Welche ( Räume:rooms | (Szenen | Szenarien | Einstellungen):scenes){Type} kennst du [<rooms>]
Welche (Szenen | Szenarien | Einstellungen){Type:scenes} (kennt|kann) [(der | die | das)] $de.fhem.Device-scene{Device}
(Wie kannst du mir helfen | was kannst du [alles] ){Type:generic}
(Was|welche geräte) kannst du [<rooms>] ( steuern | [(an|aus)] schalten ){Type:control}
welche Informationen (kannst|kennst){Type:info} du [<rooms>] [( liefern | [an] sagen | nennen )]
sind alle fenster{Type:openWindow} [und] [Türen] geschlossen{Device} 
ist irgendwo ein fenster{Type:openWindow} [oder eine tür] offen{Device:geschlossen}

* wären Punkte, die man im Modul ggf. mit lösen muss, bei ** braucht es ggf. zusätzlich eben noch weitere Klärung, was überhaupt in welcher Form Sinn macht...
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1256 am: 29 März 2022, 15:48:57 »
Muss ich mir ansehen.

Mal was anderes: Ich hab ja - wie du - ein HM Thermostat. Da würde ich gerne die aktuelle Temperatur und die aktuelle Solltemperatur abfragen. Also bei _Weather und _Climate jeweils ein GetNumeric Mapping erstellt. rhasspyName bei _Weather ist "temperatur", bei _Climate "heizung".
Frage ich jetzt nach "wie warm ist es im wohnzimmer" fragt mich RHASSPY:
{"text": "Es kommen mehrere Geräte in Frage, bitte wähle zwischen heizung oder temperatur", "siteId": "wohnzimmer", "lang": null, "id": "a60147f4-f306-478f-86ad-1aea2d5cd6b5", "sessionId": "wohnzimmer-porcupine_raspberry-pi-bf42a432-1d59-4bfd-80f9-cca98b9de2b6", "volume": null}
Will ich zwar nicht die Frage, bekomm sie aber auch nicht weg.
Meine Anwort "temperatur" liefert dann aber:
{"text": "färbe temperatur rot", "likelihood": 0.46558900000000003, "seconds": 3.9034894359938335, "siteId": "wohnzimmer", "sessionId": "wohnzimmer-porcupine_raspberry-pi-bf42a432-1d59-4bfd-80f9-cca98b9de2b6", "wakewordId": null, "asrTokens": [[{"value": "färbe", "confidence": 0.994153, "rangeStart": 0, "rangeEnd": 6, "time": {"start": 0.0104221, "end": 2.96268}}, {"value": "temperatur", "confidence": 1.0, "rangeStart": 6, "rangeEnd": 17, "time": {"start": 2.96268, "end": 3.55}}, {"value": "rot", "confidence": 0.477236, "rangeStart": 17, "rangeEnd": 21, "time": {"start": 3.55011, "end": 4.14}}]], "lang": null}
und das ganze bricht mit einem IntentNotRecognized ab. Lange danach kommt dann: "Tut mir leid, da hat etwas zu lange gedauert."

Mir scheint, RHASSPY will da einen Intent zur Fragebeantwortung. Gibt's natürlich nicht.

Frage 1: Hast du eine Ahnung, was da bei mir falsch eingestellt ist?
Frage 2: Wie schaff ich's, dass ich die Abfrage, welches Gerät ich will, wegbekomme?

---EDIT---
Ad 2: Hihi, mit getState  ;D. Aber das kann nicht die Lösung sein
« Letzte Änderung: 29 März 2022, 15:56:23 von drhirn »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18135
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1257 am: 29 März 2022, 16:17:49 »
Hmm, also:

"wie ist die wunschtemperatur vom heizkörper südwest" liefert mir was anderes wie "wie ist die temperatur vom heizkörper südwest"
Intent dazu sieht so aus:
[de.fhem:GetNumeric]
query=<de.fhem:GetDate.query>
\[<query>] [wie [ist [die]]] ((Solltemperatur | Wunschtemperatur | Zieltemperatur){Type:desired-temp} | ( warm | kalt | heiß | Temperatur ){Type:temperature}) [ist es | von | vom | ist ] (<de.fhem:SetOnOff.rooms> | [das] ($de.fhem.Device-thermostat | $de.fhem.Device-thermometer ){Device})

Der "Trick" ist: Es gibt beide Temperaturen im _Clima-Channel, beide Abfragen gehen also an dasselbe Device, aber auf ein anderes Reading.

Andere Variante: "eigentlich" verbirgt sich hinter der Solltemperatur nur ein externer (BT-) Sensor, dessen Wert dann als virtueller peer in _Climate landet (da kommt die Antwort aber auch tatsächlich her, wenn man so konkret fragt). Die "normale Abfrage" "wie warm ist es (im wohnzimmer)" landet via priority-Setting (rhasspySpecials) auf diesem Gerät,  die Soll-Temperatur käme dann von einem anderen (mit dem o.g. geteamten) RT-DN:
Raumfuehler_Wohnzimmer => priority:inRoom=temperature
Thermostat_Wohnzimmer_SSO_Clima =>  priority:inRoom=desired-temp

Ach so: Sowohl die Thermostate wie der BT-Sensor haben keine explizit gesetzten rhasspyMappings, das kommt aus gDT "thermostat" bzw. "thermometer".

Nachtrag noch:
Vergleichbares für einen Wandthermostaten (_Climate-Channel):Thermostat_EssZi_Climate => priority:inRoom=desired-temp,temperature,humidity
« Letzte Änderung: 29 März 2022, 16:24:21 von Beta-User »
Server: HP-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1817
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1258 am: 29 März 2022, 17:39:04 »
Danke. rhasspySpecials war die Lösung! Hatte ich probiert, wusste aber nicht, wie man das richtig verwendet.

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1077
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #1259 am: 29 März 2022, 17:45:18 »
Wo kann man sich beim RHASSPY (B.A.) einschreiben?  8)
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.

 

decade-submarginal