FHEM und Rhasspy

Begonnen von drhirn, 28 Juli 2020, 14:28:50

Vorheriges Thema - Nächstes Thema

drhirn

Ich finde das merkwürdig, dass bei den meisten von den Skills die requirements.txt leer ist. Weil zumindest hermes_python solltest du brauchen. Steht z.B. auch in der vom Musik-Player-Skill.

davedeluxe

Zitat von: drhirn am 03 März 2021, 15:36:36
Ich finde das merkwürdig, dass bei den meisten von den Skills die requirements.txt leer ist. Weil zumindest hermes_python solltest du brauchen. Steht z.B. auch in der vom Musik-Player-Skill.

Danke, jetzt komme ich zumindest ein paar Zeilen weiter:
python skills/calculator/action-calculator.py
  File "skills/calculator/action-calculator.py", line 48
    async def CalculatorAddition(intent: NluIntent):
        ^
SyntaxError: invalid syntax

Cordula

Beim Intent GetNumeric habe ich noch Probleme, wenn der Raum Umlaute enthält. Eventuell ist das Problem ja schon behoben. Hier die Details:
[de.fhem:GetNumeric]
wie ist die (luftfeuchtigkeit){Device} {Type:Luftfeuchtigkeit} [im] ($de.fhem.Room){Room}
(wie ist die|wie warm ist es) {Type:Temperatur} [temperatur][im|auf dem|in der] ($de.fhem.Room){Room}

attr Kueche.Heizung rhasspyMapping GetNumeric:currentVal=Temperatur,type=Temperatur
attr Kueche.Heizung rhasspyName Temperatur
attr Kueche.Heizung rhasspyRoom Küche

Frage: wie ist die temperatur in der küche
erkannt wird: [de.fhem:GetNumeric] Küche Room, Temperatur Type
Die Ausgabe ist korrekt, aber es wird für die Temperatur das falsche Device abgefragt.
Hier die Ausgabe des Logfiles:
2021.03.05 12:33:22 5: Parsed value: Temperatur for key: Type
2021.03.05 12:33:22 5: Parsed value: GetNumeric for key: intent
2021.03.05 12:33:22 5: Parsed value: arbeitszimmer-Okay Kalle-a929c805-4ca0-4b1d-aff7-40e3472ce880 for key: sessionId
2021.03.05 12:33:22 5: Parsed value: arbeitszimmer for key: siteId
2021.03.05 12:33:22 5: Parsed value: Temperatur temperatur in der Küche for key: input
2021.03.05 12:33:22 5: Parsed value: 1 for key: probability
2021.03.05 12:33:22 5: Parsed value: wie ist die temperatur in der küche for key: rawInput
2021.03.05 12:33:22 5: Parsed value: Küche for key: Room
2021.03.05 12:33:22 5: handleIntentGetNumeric called
2021.03.05 12:33:22 5: Device selected: Aussenstation
2021.03.05 12:33:22 5: rhasspyMapping selected: currentVal=temperature,type=Temperatur

Das gleiche Problem besteht auch für die Abfrage der Luftfeuchtigkeit und auch, wenn ich den Raum Gästezimmer für die Temperatur und die Luftfeuchtigkeit abfrage.

drhirn

Ihr mit euren Umlauten immer...
Könnt ihr die Räume nicht einfach Esswerkstatt und Freundezimmer nennen? :D

Ich schau mir das an.

Cordula

Wäre für dich sicher einfacher, aber für die Akzeptanz Stichwort WAF kommt das glaube ich aber nicht so gut an.

drhirn

Zeigst du mir noch das Device Aussenstation bitte?

davedeluxe

Vielleicht kann damit ja jemand was anfagen:
https://github.com/philipp2310/snips-bring-shopping

Habe mich daran versucht zumindest mal den Befehl raus zu bekommen wie man einen Artikel per Browserzeile hinzufügt/entfernt,
das würde ja schon reichen um etwas in der MyUtils zu basteln ABER ich hab dafür scheinbar zu wenig Ahnung.

Grüße Dave

laberlaib

Zitat von: davedeluxe am 05 März 2021, 14:31:59
Vielleicht kann damit ja jemand was anfagen:
https://github.com/philipp2310/snips-bring-shopping

Habe mich daran versucht zumindest mal den Befehl raus zu bekommen wie man einen Artikel per Browserzeile hinzufügt/entfernt,
das würde ja schon reichen um etwas in der MyUtils zu basteln ABER ich hab dafür scheinbar zu wenig Ahnung.

Grüße Dave

Für die Einkaufsliste habe ich mir gestern was mit dem PostMe-Modul zusammengeklickt. Das ist der rudimentäre Anfang.
Zusammen mit Telegram/Jabber ist das dann auch mit der Außenwelt verbunden.

Zitatattr RHASSPYMASTERDE Einkaufsliste=rhasspyShoppinglist(Product,Action)

Zitatsub rhasspyShoppinglist($$){
   my ($product, $action) = @_;
   my $device = "pm_PostIt";
   my $list = "Einkaufen";
   my $response;
   
   if ($action eq "add"){
      $response = fhem("set $device add $list $product");
   }
   if ($action eq "remove"){
      $response = fhem("set $device remove $list $product");
   }
   if ($action eq "get"){
      
      $response =  fhem("get $device list $list");
   }
   return $response;
}

Sentences.ini
Zitat[de.Stude:Einkaufsliste]
Setze ($de.Stude.Einkaufen){Product} auf die Einkaufsliste{Action:add}
Nehme ($de.Stude.Einkaufen){Product} von der Einkaufsliste{Action:remove}
Welche Produkte sind auf der Einkaufsliste{Action:get}

Slots
ZitatBier
Joghurt
Toastbrot
Wurst
Käse
Eier
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

JensS

#323
@laberlaib
cool  8) Man beachte auch die Reihenfolge des Slots. Kannst Du bitte die Definitionen/Anpassungen von PostMe und Telegram/Jabber in dein Post reinschreiben? Günstig wäre auch als Code # statt Zitat. Das kopiert sich besser.  ;)

@drhirn && Beta-User
Die Möglichkeiten von Rhasspy sind u.a. durch CustomIntents erweiterbar. Ist es möglich/ratsam, die Erweiterungen in separate .pms in einem Unterordner RHASSPY zu legen und diese über Github zentral zur Verfügung zu stellen? So könnte man sich sein Rhasspy, je nach Bedarf, durch wenige Anpassungen zusammenstellen.

@davedeluxe
Die Snips-Skills sind leider nicht wirklich brauchbar. Diese arbeiten separat und nicht über FHEM. Man müsste dazu extra FHEM-Module schreiben, bzw. extra Intents.
Einfache RechenIntents wie drei plus sieben sollten dabei kein Problem darstellen. Anders sieht es aus, wenn Rhasspy die Mathe-Hausaufgeben eines 11.-klässlers machen soll.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, 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.

drhirn

Zitat von: JensS am 05 März 2021, 15:47:10
Die Möglichkeiten von Rhasspy sind u.a. durch CustomIntents erweiterbar. Ist es möglich/ratsam, die Erweiterungen in separate .pms in einem Unterordner RHASSPY zu legen und diese über Github zentral zur Verfügung zu stellen? So könnte man sich sein Rhasspy, je nach Bedarf, durch wenige Anpassungen zusammenstellen.

Interessante Idee! Wobei ich's fast schöner finden würde, wenn man das Ganze in Python macht und von dort aus Kommandos an FHEM schickt. Dann könnte man zum einen einen eventuell entstehenden Skill-Store nützen, zum anderen hätten auch Rhasspy-Nutzer, die nicht FHEM verwenden, was davon.

davedeluxe

Zitat von: laberlaib am 05 März 2021, 15:17:26
Für die Einkaufsliste habe ich mir gestern was mit dem PostMe-Modul zusammengeklickt. Das ist der rudimentäre Anfang.
Zusammen mit Telegram/Jabber ist das dann auch mit der Außenwelt verbunden.

Sentences.ini
Slots

Ja so hatte ich mir das vorgestellt nur für Bring!, da wir das nutzen.
Leider schaffe ich es nicht mir einen API Befehl zu basteln.

laberlaib

Zitat von: JensS am 05 März 2021, 15:47:10
@laberlaib
cool  8) Man beachte auch die Reihenfolge des Slots. Kannst Du bitte die Definitionen/Anpassungen von PostMe und Telegram/Jabber in dein Post reinschreiben? Günstig wäre auch als Code # statt Zitat. Das kopiert sich besser.  ;)
Reiner Zufall, die Reihenfolge :)
Ich bohr' das im Laufe des Wochenendes mal auf, dann mach ich das. So ist das eher ein PoC da z.B. PostMe die Liste einfach direkt kommagetrennt speichert und wenn man die sich dann vorlesen lässt, dann klingt das doof. (Wobei das bei mir eh kein Nutzen finden wird, da die Liste zweisprachig geführt wird und Rhasspy-TTS-de_De mit ausländischer Aussprache sich eher lächerlich als verständlich macht).

Zu PostMe + Telegramm ist eh eng verzahnt, dass kann man dort besser nachlesen.
Ich nutze Jabber da ich ja in der Opensourcewelt bleiben möchte. Und da hab ich dann einfach ein notify was auf Nachrichten reagiert. Das ist dann im Grunde auch nichts anderes als eine Fallunterscheidung und auch eher rudimentär.


Zitat von: drhirn am 05 März 2021, 15:57:11
Interessante Idee! Wobei ich's fast schöner finden würde, wenn man das Ganze in Python macht und von dort aus Kommandos an FHEM schickt. Dann könnte man zum einen einen eventuell entstehenden Skill-Store nützen, zum anderen hätten auch Rhasspy-Nutzer, die nicht FHEM verwenden, was davon.
So etwas kann ich gut nachvollziehen, aber für mich gilt fast eher das umgekehrte: Ich will nicht Daten in zwei Systemen pflegen und finde es schön, alles in FHEM zu haben und Rhasspy als reines zu konfigurierendes Werkzeug zu nutzen. Drum wollte ich schon mal Fragen, ob/wie man die Funktionen in der 30_RHASSPY.pm auch außerhalb nutzen kann. Dann würde ich versuchen ein Sub zu erstellen, welches auf Basis beliebiger Attribute Rhasspyslots füllt. Dann würde ich einen Dummy "Rhasspyslots" erstellen, Userattribute rein und dann z.b. sagen, dass die erste Zeile der Slotname ist und dannach alles Slotinhalte. Dann könnte ich da bspw. alle in Frage kommenden Produkte abspeichern.

Wohlgemerkt gilt das für Daten. Für Skills/Intents die keine eigenen Daten brauchen gilt das natürlich nicht - allerdings kann ich Python noch weniger als Perl
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

JensS

#327
@Beta-User
Danke für deine Antwort. Je mehr man sich mit Rhasspy beschäftigt, um so mehr Ideen kommen einen. Ist halt ein Schweizer Taschenmesser mit ungeahnten Möglichkeiten, die nur durch den Sprachwortschatz eingeschränkt sind.
Das Thema Rhasspy-Mobile-App hatten wir hier angerissen: https://forum.fhem.de/index.php/topic,113180.msg1132723.html#msg1132723 ff.
Gruß Jens

p.s. Habe gerade deine aktuelle 10_RHASSPY.pm inkl. rhasspy-de.cfg heruntergeladen und installiert. Edit: Leider findet Rhasspy meine Stehlampe nicht mehr. Ich habe nachgeschaut; sie steht wie eh und je im Wohnzimmer. Habe die Definition vom RHASSPY-Device um "de" erweitert - nun läuft's. Wer lesen kann, ist halt klar im Vorteil...
2021.03.05 18:15:56 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionStarted => {"sessionId": "Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4", "siteId": "Wohnzimmer", "customData": "alexa", "lang": null}
2021.03.05 18:15:56 5: Parsed value: Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4 for key: sessionId
2021.03.05 18:15:56 5: Parsed value: Wohnzimmer for key: siteId
2021.03.05 18:16:00 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetOnOff => {"input": "Stehlampe an", "intent": {"intentName": "de.fhem:SetOnOff", "confidenceScore": 1.0}, "siteId": "Wohnzimmer", "id": null, "slots": [{"entity": "de.fhem.Device", "value": {"kind": "Unknown", "value": "Stehlampe"}, "slotName": "Device", "rawValue": "stehlampe", "confidence": 1.0, "range": {"start": 0, "end": 9, "rawStart": 0, "rawEnd": 9}}, {"entity": "Value", "value": {"kind": "Unknown", "value": "an"}, "slotName": "Value", "rawValue": "an", "confidence": 1.0, "range": {"start": 10, "end": 12, "rawStart": 10, "rawEnd": 12}}], "sessionId": "Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4", "customData": null, "asrTokens": [[{"value": "Stehlampe", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 9, "time": null}, {"value": "an", "confidence": 1.0, "rangeStart": 10, "rangeEnd": 12, "time": null}]], "asrConfidence": null, "rawInput": "stehlampe an", "wakewordId": "alexa", "lang": null}
2021.03.05 18:16:00 5: Parsed value: stehlampe an for key: rawInput
2021.03.05 18:16:00 5: Parsed value: 1 for key: probability
2021.03.05 18:16:00 5: Parsed value: an for key: Value
2021.03.05 18:16:00 5: Parsed value: Stehlampe for key: Device
2021.03.05 18:16:00 5: Parsed value: Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4 for key: sessionId
2021.03.05 18:16:00 5: Parsed value: Stehlampe an for key: input
2021.03.05 18:16:00 5: Parsed value: Wohnzimmer for key: siteId
2021.03.05 18:16:00 5: Parsed value: SetOnOff for key: intent
2021.03.05 18:16:00 5: handleIntentSetOnOff called
2021.03.05 18:16:00 5: Device selected:
2021.03.05 18:16:00 5: cmd selected: Ich habe dich nicht verstanden
2021.03.05 18:16:00 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/endSession => {"sessionId":"Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4","siteId":"Wohnzimmer","text":"Ich habe dich nicht verstanden"}
2021.03.05 18:16:00 5: Parsed value: Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4 for key: sessionId
2021.03.05 18:16:00 5: Parsed value: Wohnzimmer for key: siteId
2021.03.05 18:16:02 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionEnded => {"termination": {"reason": "nominal"}, "sessionId": "Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4", "siteId": "Wohnzimmer", "customData": "alexa"}
2021.03.05 18:16:02 5: Parsed value: Wohnzimmer for key: siteId
2021.03.05 18:16:02 5: Parsed value: Wohnzimmer-alexa-bb83e517-b4d0-4818-9f3a-191951502bc4 for key: sessionId


p.p.s. fetchSideIds: Küche wird als K�che angezeigt
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, 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.

Cordula

@drhirn
Hier die Attribute von Aussenstation
attr Aussenstation rhasspyMapping GetNumeric:currentVal=temperature,type=Temperatur
attr Aussenstation rhasspyName Temperatur
attr Aussenstation rhasspyRoom Vorgarten

Reicht dir das oder brauchst du ein komplettes List?

JensS

#329
@Beta-User
Wie sieht dann mein Respeak aus?sub Respeak(){
my $name = "Rhasspy"; # Rhasspy durch eigenen Rhasspy-Device-Namen ersetzen
my $Response = ReadingsVal($name,"voiceResponse","Ich kann mich nicht mehr erinnern");
return $Response;
}


Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, 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.