FHEM und Rhasspy

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

Vorheriges Thema - Nächstes Thema

laberlaib

@drhirn:
Betreff MediaControls:
Ich hab hier https://github.com/drhirn/fhem-rhasspy#mediacontrols keine Anleitung für die Mediacontrols gefunden, drum mal im Code geschaut.
Folgende Annahme:
Ich muss in den Slot "Command" irgendwie stop, vor, zurück,play oder pause schreiben? Also minimal in der sentences.ini etwa sowas:
Zitat[de.fhem:MediaControls]
Musik (stop){Command}
Musik (vor){Command}
Musik (zurück){Command}
Musik (pause){Command}
Musik (start:play){Command}

Und für "lauter" und "leiser" nimmt man dann ein "SetNumeric"-Intent.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

davedeluxe

Zitat von: Treibhaus am 25 Februar 2021, 00:46:17
Hallo,

da gibt es die Wikipedia - Erweiterung.....

Bei der habe ich das Problem, das der Begriff wohl nicht erkannt wird.
Scrrenshot als Anhang.
Vielleicht weiss jemand Abhilfe ?

Gruß Jörg

Hi, wo hast du das gefunden?
Ich brauche auch dringend mehr Abfragemöglichkeiten ala Wikipedia, google oder sogar Wolfram - Meine Kinder haben Fragen! :)

drhirn

#302
Zitat von: laberlaib am 28 Februar 2021, 17:41:28
Ich muss in den Slot "Command" irgendwie stop, vor, zurück,play oder pause schreiben? Also minimal in der sentences.ini etwa sowas:

Ich habe kein Gerät, mit dem ich das testen könnte.

Aber das sentences-File müsste eher so aussehen:


[de.fhem:MediaControls]
(starte|start){Command:play} die wiedergabe [$de.fhem.Device{Device}]
(stoppe|stop){Command:stop} die wiedergabe [$de.fhem.Device{Device}]
(pausiere){Command:pause} die wiedergabe [$de.fhem.Device{Device}]
(nächstes|nächster){Command:vor} (lied|titel) [$de.fhem.Device{Device}]
(vorheriges|voriges|vorheriger|voriger){Command:zurück} (lied|titel) [$de.fhem.Device{Device}]


Und das Mapping im FHEM-Device:

MediaControls:cmdPlay=play,cmdPause=pause,cmdStop=stop,cmdFwd=next,cmdBack=previous


Beim Mapping musst du halt die richtigen Befehle für dein Gerät eintragen.

laberlaib

Danke.
Dein Hinweis mit dem Ersetzen ist gut; es klappt auch meine Variante, aber wenn man mehrere Möglichkeiten haben will, dann ist es auf Deine Weise doch übersichtlicher.
https://rhasspy.readthedocs.io/en/latest/training/#tags

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

laberlaib

Und da ich ab und an den Professionalliserungsthread überfliege:

Bevor Ihr da jetzt ein "useAlexaRooms" oder so bastelt wäre mein Vorschlag ja, wenn man den namen der rhasspyRoom und rhasspyName einfach selber angeben kann. Wenn man dann was eigenes angibt, z.B. in den Attributen via leerzeichengetrennte Liste, dann muss man eben auch selber dafür sorgen, dass man ggfs. in globel die userattrs dazu fügt (so macht das anscheinend ja auch das Modul selbst).

Zitatattr RHASSPYDEVICE rhasspyUseOwnNamespace meineRaumnamen meineNamennamen
Zitatattr global userattr meineRaumnamen meineNamennamen
und in den subs irgendwas ala:
Zitatmy $roomAttribute = split(' ', AttrVal($_,"rhasspyUseOwnNamespace","rhasspyRoom rhasspyName")(0)
my $nameAttribute = split(' ', AttrVal($_,"rhasspyUseOwnNamespace","rhasspyRoom rhasspyName")(1)
(ich hab nicht wirklich Ahung von Perl).
Dann könnten die 2% die 2 Sprachn gleichzeit nutzen, die Begriffe dazu gut trennen.
Man bekommt nämlich sonst sehr sehr viele "Rhasspy do not know how to pronounce" Hinweise angezeigt. Die Deutschen können Spanisch anscheind nicht gut lesen...

Ach und: Du machst Dir hier ne Heidenarbeit. Ich hoffe, Dir macht das auch Spass! Danke in jeden Fall für alles. Und ich kann auch gut abwarten, bis Du eine halbwegs fertige Version hast - dann fuchs ich mich eben auch mal in Perl rein und bau da selber dran rum.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

drhirn

Das hat Beta-User schon in Angriff genommen. Nur für dich ;)

Wir wollen aber zuerst wieder eine stabile Version bekommen. Und dann bauen wir am Sprach-Feature weiter.

Treibhaus

Zitat von: davedeluxe am 08 Februar 2021, 22:23:56
Hat jemand eine Möglichkeit parat wie man folgendes integrieren kann:

Bring! (Einkaufsliste)
Wikipedia fragen
Google fragen
Wolfram nutzen für z.B. Rechenaufgaben während man kocht (was sind 2/3 von 586g)
Wie ist das Wetter, brauch ich nen Schirm?

Das fehlt mir noch...

Hallo,

das hatte ich Letztens gefunden.Eventuell ist hier etwas dabei.

https://github.com/gidocarper/rhasspy-skills-test/tree/master/skills

z.B. Rechenfunktionen (der einfachen Art)
Witze begrenzt brauchbar da auf engl.
Spritpreisangabe (benötigte API-Registrierung)

Ich habe davon noch nichts implementieren können (zeitlich).
Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

Treibhaus

Zitat von: davedeluxe am 01 März 2021, 08:41:50
Hi, wo hast du das gefunden?
Ich brauche auch dringend mehr Abfragemöglichkeiten ala Wikipedia, google oder sogar Wolfram - Meine Kinder haben Fragen! :)

Hallo,

das war ein Inhalt von JensS etwas eher hier im Beitragsverlauf:
https://forum.fhem.de/index.php/topic,113180.msg1128500.html#msg1128500

Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

davedeluxe

Zitat von: JensS am 02 Februar 2021, 20:08:02
Hier mal ein (Bei)Spielscript.

rhasspyIntents hinzufügen:Wikipedia=Wikipedia(Begriff)

sentences.ini:[de.fhem:Wikipedia]
erkläre mir was ist {Begriff}


99_myUtils:
use Data::Dumper;
use JSON;
use LWP::UserAgent;

sub Wikipedia($){
my ($Input) = @_;
my $lastIntentPayload = $defs{Rhasspy}->{READINGS}{lastIntentPayload}{VAL};
my ($Begriff) = $lastIntentPayload =~ /rawInput\"\:\"erkl\äre\ mir\ was (.*?)(?= ist)/;
$Begriff =~ s/ /_/g;
$Begriff =~ s/ä/%C3%A4/g;
$Begriff =~ s/ö/%C3%B6/g;
$Begriff =~ s/ü/%C3%BC/g;
$Begriff =~ s/ß/%E1%BA%9E/g;
my $ua = LWP::UserAgent->new();
my $response = $ua->get("https://de.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=$Begriff");
my $content = $response->content;
my $ref = JSON->new->decode($content);
my ($jsonHash) = values %{ $ref->{'query'}->{'pages'} };
my $Response = $jsonHash->{'extract'};
$Response =~ s/\(/ /g;
$Response =~ s/\)/ /g;
$Response =~ s/\;/ /g;
$Response =~ s/\'/ /g;
$Response =~ s/\./ - /g;
$Response =~ s/\:/ /g;
$Response =~ s/\,/ /g;
$Response =~ s/\'/ /g;
$Response = lc $Response;
$Response = encode('utf-8',$Response);
return $Response;
}


Hi JensS,

funktioiert das bei dir genau so? Ich habe es mir genau so eingerichtet aber ich bekomme keine Antwort, lediglich in meiner Log wird etwas gemeckert:

Use of uninitialized value $Begriff in substitution (s///) at ./FHEM/99_myUtilsRhasspy.pm line 54. bis Zeile 58
Use of uninitialized value $Begriff in concatenation (.) or string at ./FHEM/99_myUtilsRhasspy.pm line 60
Use of uninitialized value $Response in substitution (s///) at ./FHEM/99_myUtilsRhasspy.pm line 65. bis Zeile 72
Use of uninitialized value $Response in lc at ./FHEM/99_myUtilsRhasspy.pm line 73.


Zeile 54 bis 73:
$Begriff =~ s/ /_/g;
$Begriff =~ s/ä/%C3%A4/g;
$Begriff =~ s/ö/%C3%B6/g;
$Begriff =~ s/ü/%C3%BC/g;
$Begriff =~ s/ß/%E1%BA%9E/g;
my $ua = LWP::UserAgent->new();
my $response = $ua->get("https://de.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=$Begriff");
my $content = $response->content;
my $ref = JSON->new->decode($content);
my ($jsonHash) = values %{ $ref->{'query'}->{'pages'} };
my $Response = $jsonHash->{'extract'};
$Response =~ s/\(/ /g;
$Response =~ s/\)/ /g;
$Response =~ s/\;/ /g;
$Response =~ s/\'/ /g;
$Response =~ s/\./ - /g;
$Response =~ s/\:/ /g;
$Response =~ s/\,/ /g;
$Response =~ s/\'/ /g;
$Response = lc $Response;


Auch [de.fhem:Wikipedia]
erkläre mir was ist {Begriff}

scheint Probleme zu machen, da er so "ist" als Begriff nutzt.

Hast du eine Idee?

Grüße, Dave

JensS

Die Wikipedia war lediglich ein Beispiel-Intent für User, welche den Open transcriptions mode nutzen.

Sonst ist das nicht brauchbar, da zu wenig Begriffe erkannt werden würden. Man müsste alle definieren...

[de.fhem:Wikipedia]
erkläre mir was (Lampe | Fenster | Fahrrad){Begriff} ist

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.

Treibhaus

Zitat von: JensS am 02 März 2021, 18:18:26
Die Wikipedia war lediglich ein Beispiel-Intent für User, welche den Open transcriptions mode nutzen.

Sonst ist das nicht brauchbar, da zu wenig Begriffe erkannt werden würden. Man müsste alle definieren...

[de.fhem:Wikipedia]
erkläre mir was (Lampe | Fenster | Fahrrad){Begriff} ist

Gruß Jens

Ja, das war auch so verstanden.
Eine Ausgabe des Textes habe ich allerdings trotzdem nicht. Obwohl der Begriff erkannt wird.
(mag ggf. an Umlauten liegen) .. das habe ich hier noch nicht weiter getestet.

Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

Treibhaus

Hallo JensS,

bei "GetWeekday" habe ich die 10_RHASSPY.pm für mich geändert.
Um den Tag(Namen) und Datumstag,  Monats(Namen) und Jahr anzugeben.
= Montag , 1. März, 2021

Funktioniert mit dem Monat März  ( ä) nicht = Keine Tonausgabe:
  $response = "Heute ist " . DateTime->now(locale => $language)->day_name . " , " .  DateTime->now(locale => $language)->day . "., " . DateTime->now(locale => $language)->month_name . DateTime->now(locale => $language)->year;

Ausgabe: Logfile-fhem:    RhasspyBridge voiceResponse: Heute ist Mittwoch , 3., M�rz2021


Nehme ich das "...month_name" raus, funktioniert es = Tonausgabe - Datumsangabe wird gesprochen.
    $response = "Heute ist " . DateTime->now(locale => $language)->day_name . " , " .  DateTime->now(locale => $language)->day . "., " . DateTime->now(locale => $language)->year;

Ausgabe: Logfile-fhem: RhasspyBridge voiceResponse: Heute ist Mittwoch , 3., 2021

Die Local-Settings auf beiden Rechnern:  de_DE.UTF-8  (falls das interessiert ). Eigentlich ist es ja nur der RHASSPY-Rechner.

1. Woran kann es liegen ? Was müsste ich ändern ?
2. Vielleicht ist diese Änderung  "Heute ist Mittwoch , 3. März, 2021"  wert es dahin gehend in der 10_RHASSSPY.pm zu ändern. (wenn 1. behoben ist)  ;)
Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

Treibhaus

Thema Rolladen-Steuerung:

Hier kann ich die Rolladen rauf & runter fahren.
Dazu nutze ich das 
rhasspyMapping   SetOnOff:cmdOn=down,cmdOff=up

Hat jetzt den Nachteil, dass sich während einer Fahrtr (Auf oder AB) die Rollade nicht stoppen lässt.
Somit würde ein Stop Befehl fehlen.

Zudem währe es in einigen Situationen auch sinnvoller direkt eine Höhe/Prozentangabe einzusprechen.

Hat das jemand schon dahingehend realisiert ?
Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

drhirn

MediaControls und SetNumeric nehmen

davedeluxe

#314
Zitat von: Treibhaus am 02 März 2021, 11:22:45
Hallo,

das hatte ich Letztens gefunden.Eventuell ist hier etwas dabei.

https://github.com/gidocarper/rhasspy-skills-test/tree/master/skills

z.B. Rechenfunktionen (der einfachen Art)
Witze begrenzt brauchbar da auf engl.
Spritpreisangabe (benötigte API-Registrierung)

Ich habe davon noch nichts implementieren können (zeitlich).
Gruß Jörg

Danke, sieht interessant aus, scheintert aber direkt beim Start:
python3 action-calculator.py
Traceback (most recent call last):
  File "skills/calculator/action-calculator.py", line 5, in <module>
    from rhasspyhermes_app import EndSession, HermesApp
ModuleNotFoundError: No module named 'rhasspyhermes_app'


Mit python3.7 action-calculator.py
scheint es zu starten aber wenn ich ihm eine Rechenaufgabe stelle kommt kein Output wobei er es scheinbar korrekt zuordnet:

CalculatorAddition
    3 first
    4 second