FHEM und Rhasspy

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

Vorheriges Thema - Nächstes Thema

drhirn

Ich hab noch nicht weiter getestet.

Zum Thema Wakeword: Ich sag das nicht gerne. Aber ich war einfach zu blöd, im alsamixer die Werte für "capture" hoch zu schrauben. Seitdem funktioniert's zu gut. Ich muss da noch etwas tunen.

Roman

Hallo,

ist noch geplant einen Intent für Uhrzeiten / Stunden / Minuten / Sekunden zu integrieren ?
GetWeekDay / GetTime gibt es als Intent ja schon. Sowas wie 'SetTimer'

Rhasspy bietet so was ja schon an. Ich könnte das für das Stellen von Timern/Weckern/Errinnerungen gebrauchen (Die Killerapplikation für meine Frau um Alexa ablösen zu können, Sie nutzt das mehrmals am Tag)

Gruß
Roman

drhirn

Ist für mich auch ein Killer-Feature. Ich persönlich sehe das aber als Funktion, die der Sprachassistent selber können muss. Unabhängig von FHEM. Wie eigentlich auch GetTime/GetWeekday. Die beiden waren eigentlich nur Tests von mir.

Rhasspy bietet das an? Hast du da einen Link für mich?

Ich hatte nicht geplant, einen Timer einzubauen. Ich denke aber gerne mal drüber nach. Vorschläge zur Lösung?
Kann sich aber natürlich jeder an dem Modul beteiligen. Ich übernehme das dann gerne.

drhirn

Ich hab in der neuesten Version einen rudimentären Timer eingebaut. Der setzt einfach einen at-Befehl und sagt nach der abgelaufenen Zeit "Timer abgelaufen".

Rhasspy-Sentence wäre z.B.:

[de.fhem:SetTimer]
\[stell|stelle] (taimer|countdown) [im|auf dem|auf der|in der] [$de.fhem.Room{Room}] auf (0..60){Value} (sekunden|minuten|stunden){Unit}


Könnt ihr das mal testen?

Roman

Hi,

danke für die neue Version, das ging ja unheimlich schnell. Ich hab's gleich mal ausprobiert.
Das klappt problemlos.

Das mit Rhasspy bietet das an, hab wohl beim überfiegen falsch gedeutet:
https://community.rhasspy.org/t/time-date-slots/1438/(2
Hier ging es nur um die Slots und nicht um einen fertigen Timer.

Ich bin so gar nicht der Perl-Crack, ich kann mir mit Müh und Not zusammenbasteln was ich brauche, aber ideal wäre ein Intent (den man z.B. einem Dummy zuweist) und ein rhasspyMapping dazu um z.B. eine Funktion aus der 99_MyUtils mit den Parametern (Stunde Minute Sekunde) aufzurufen.

Dann wäre man beim Timer flexibel. Auch was das Ausgabegerät für die Meldung angeht,

Gruß
Roman

JensS

#140
Ich bin mal einem ganz anderen Ansatz nachgegangen:

Es gibt ein mächtiges Modul names Talk2Fhem, dass mit Rhasspy zusammenarbeiten könnte.
Also habe ich eine Bridge definiert:define Talkbridge Talk2Fhem Stehlampe an = set Stehlampe on\
Stehlampe aus = set Stehlampe off
attr Talkbridge T2F_language DE
und einen neuen Rhasspy-Intent erstellt:attr Rhasspy rhasspyIntents Talker=Talker(Device,Time,Value)
Dazu in 99_myUtils.pm die sub zugefügt:sub Talker($$$){
my ($Geraet,$Zeitpunkt,$Zustand) = @_;
fhem("set Talkbridge ! $Geraet $Zeitpunkt $Zustand");
return "Ok - habe ich weitergegeben"
}
und der sentences.ini einen neuen Abschnitt eingetragen:[de.fhem:Talker]
knipse (die|den|das) ($de.fhem.Device){Device} [(um [0..23 Uhr] [0..59])]{Time} (an|aus){Value}

Fertig ist die Laube.
Bei "Alexa, knipse die Stehlampe um 19 Uhr 56 an" wird das Gerät, der Zeitpunkt und der gewollte Zustand an Talk2Fhem übergeben. Die Bridge definiert dann ein "at" und führt den Befehl zur gesagten Zeit aus.
Dann kommt natürlich eine Fehlermeldung von Rhasspy, weil keine Response-Nachricht definiert ist aber auch das kann Talk2Fhem.
Die Response-Nachricht ist in diesem Fall statisch, könnte aber auch von Talk2Fhem fallweise generiert werden.

Wie denkt Ihr darüber? Sollte man dem Ansatz nachgehen?

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

Das eine ist ja unabhängig vom anderen. Kann jeder machen, wie er will.

Du könntest auch einfach Kaldi auf "Open Transcription Mode" stellen und dann per MQTT abgreifen, was Rhasspy dir liefert. Die Intent-Erkennung machst du dann mit T2F.

Ich hatte T2F mal im Einsatz. Funktioniert sehr gut. Hab damals dann aber nicht mehr weiter gemacht. Und jetzt gefallen mir die Sentences/Slots von Rhasspy besser. Finde ich verständlicher. Hat aber beides Vor- und Nachteile.

Thyraz - der Ersteller des Snips-Moduls - ist ja auch zu T2F gewechselt.

Wie gesagt, Geschmacksache.

JensS

#142
@drhirn
Ok, war nur ein Gedanke. Meine anfänglichen Bedarfe an eine Sprachsteuerung waren das Schalten von Geräten und die Ausgabe von Readings. Das erfüllt dein Modul. Persönliche Anpassungen/Erweiterungen realisiere ich dann in extra Intents.

Momentan bin ich auf der Suche nach Infos zur Arbeitsweise von Rhasspy. Speziell versuche ich gerade herauszufinden, ob die Module zur Erkennung/Verarbeitung von Anweisungen/Antworten den RAM benutzen oder alles auf dem Datenträger zwischenspeichern - unabhängig vom Mosquitto.
Für den 2. Fall würde ich ein RAM-Laufwerk erstellen und die Tempverzeichnisse dorthin mounten. Das gäbe Geschwindigkeitsgewinn und eine längere Lebensdauer der SD.

Gruß Jens

p.s. Inotifywatch gab Auskunft... Hier der Dateizugriff (gekürzt) einer Rhasspy-Anweisung eines Satelliten inklusive Antwort.Datei: /dev/snd/timer
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /dev/snd/timer
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /dev/snd/timer
Datei: /tmp/#11790
Datei: /tmp/#11790
Datei: /usr/bin/aplay
Datei: /lib/arm-linux-gnueabihf/ld-2.28.so
Datei: /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
Datei: /lib/arm-linux-gnueabihf/librt-2.28.so
Datei: /usr/lib/arm-linux-gnueabihf/libasound.so.2.0.0
Datei: /lib/arm-linux-gnueabihf/libm-2.28.so
Datei: /lib/arm-linux-gnueabihf/libpthread-2.28.so
Datei: /usr/share/alsa/alsa.conf
Datei: /etc/alsa/conf.d
Datei: /usr/share/alsa/alsa.conf.d/10-rate-lav.conf
Datei: /usr/share/alsa/alsa.conf.d/10-samplerate.conf
Datei: /usr/share/alsa/alsa.conf.d/10-speexrate.conf
Datei: /usr/share/alsa/alsa.conf.d/50-arcam-av-ctl.conf
Datei: /usr/share/alsa/alsa.conf.d/50-jack.conf
Datei: /usr/share/alsa/alsa.conf.d/50-oss.conf
Datei: /usr/share/alsa/alsa.conf.d/50-pulseaudio.conf
Datei: /usr/share/alsa/alsa.conf.d/60-a52-encoder.conf
Datei: /usr/share/alsa/alsa.conf.d/60-upmix.conf
Datei: /usr/share/alsa/alsa.conf.d/60-vdownmix.conf
Datei: /usr/share/alsa/alsa.conf.d/98-usb-stream.conf
Datei: /etc/voicecard/asound_2mic.conf
Datei: /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_rate_samplerate.so
Datei: /usr/lib/arm-linux-gnueabihf/libsamplerate.so.0.1.8
Datei: /dev/snd/timer

Offensichtlich beschränkt sich Rhasspy auf die Erstellung einer einzelnen Datei mit # am Anfang im Verzeichnis /tmp. Den Zugriff aud /dev/pts/1 habe ich ignoriert, da es sich wohl um eine Pipe handeln sollte.
Mit folgender Erweiterung in /etc/fstab habe ich ein 50 MB großes RAM-Laufwerk erstellt und auf /tmp nach einem reboot gemounted:tmpfs    /tmp    tmpfs    defaults,size=50M      0       0
Die Swappartition hatte ich zuvor schon deaktiviert:
systemctl stop dphys-swapfile.service
systemctl disable dphys-swapfile.service
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.

Roman

Hallo,

danke erst mal an die Antworten von drhirn und JensS, das hat mir schon mal sehr geholfen.
Das eigene intents mit attr Rhasspy rhasspyIntents mytimer=SetTimer (hour,min,sec) angelegt werden können war mir nicht bekannt (in der Doku stehen CustomIntents ja als ToDo)

Gruß
Roman

drhirn

Und ich wusste nicht, dass es funktioniert. Drum hab ich's auf ToDo gesetzt ;)

JensS

Wichtig ist, dass es zum Abschluss immer ein return "irgendwas";gibt, sonst bleibt die Session lange ungeschlossen in der Luft hängen.
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.

JensS

Manchmal möchte ich nochmal hören, was Rhasspy gerade sagte. Hier meine zusätzliche rhasspyIntents-Zeile dazu:Respeak=Respeak()
Code in 99_myUtils.pm: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;
}

Aufgerufen wird's wie immer in sentences.ini[de.fhem:Respeak]
was hast du gesagt

Bei: "Was hast du gesagt?" wiederholt Rhasspy ihre letzte Meldung.

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.

davedeluxe

Hi, kann mir jemand bei dem Problem helfen das ich keine antwort bekomme von FHEM/Rhasspy?

Ich habe einen Master auf meinem NUC laufen und einen Satelliten auf nem RPi3 incl. Respeak 2.
Wenn ich einen Befehl gebe wird dieser an FHEM übergeben z.B. "Wie warm ist es im Dach"
lastIntentPayload:
{"Room":"dach","Type":"Temperatur","input":"Temperatur im dach","intent":"GetNumeric","probability":1,"rawInput":"wie warm ist es im dach","requestType":"voice","sessionId":"288ff6a9-b064-4b36-9b60-817372ee6d05","siteId":"master"}

lastIntentTopic:
hermes/intent/de.fhem:GetNumeric

voiceResponse:
Die Temperatur von dach beträgt 19,1 Grad

Es kommt aber keine antwort an meinem Satelliten an.

Hat jemand eine Idee wie ich vorgehen kann? Ich bin mir auch nicht sicher ob das Problem an FHEM oder an Rhasspy liegt.

drhirn

Du musst in den Einstellungen deines Satelliten noch die siteId konfigurieren. Und dann beim Master unter "Speech to Text", "Intent Recognition", etc. auch. Im Moment geht die Sprachausgabe zum "master", also zum NUC.

JensS

#149
Hallo davedeluxe,

zum Vergleich habe ich die Konfigurationen meiner Basis und eines Satelliten angehangen. Vielleicht hilft dir's weiter.

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.