FHEM und Rhasspy

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

Vorheriges Thema - Nächstes Thema

Cordula

Ich beschäftige mich seit kurzem mit Rhasspy. Funktioniert auch soweit. Hab aber momentan zwei offene Punkte.
Bei den Wakewords habe ich schon verschiedene Module ausprobiert. Bin aber nicht wirklich zufrieden. Snowboy ist zu empfindlich und reagiert auf alles. Bei den anderen(Porcupine,Raven)  muss man häufig wiederholen. Hat hier jemand was, was funktioniert?
Zum zweiten stehe ich beim Thema Mapping auf dem Schlauch. In Rhasspy definiere ich die Sätze z.B.

[de.fhem:SetOnOff]
(schalte|mach|machs) [(den|die|das)] ($de.fhem.Device){Device} [(im |in der)] [($de.fhem.Room){Room}] (an|ein|hoch|aus|runter){Value}
(oeffne|schliesse){Value} [die] ($de.fhem.Device){Device} [(im |in der)] [($de.fhem.Room){Room}]

Wo erfolgt das Mapping, dass an|ein|oeffne = on und damit cmdOn zugeordnet ist und dass aus|schliesse|runter = off und damit cmdOff zugeordnet ist? Muss ich das selbst in MyUtils auswerten oder kann man das irgendwo einstellen?
Danke im voraus.


drhirn


JensS

#197
Hallo Cordula, willkommen im Forum und bei Rhasspy!
Um die Hotworderkennung zu justieren, reduziere den Wert Sensitivity. (z.B. 0.45). Ich nutze das Hotword Alexa, weil es mit 3 Silben daherkommt und dadurch gut zu erkennen ist.

Zur Erkennung von an|aus:
Rhasspy kennt im SetOnOff nur den Wert "an" für cmdOn. Alles andere wird als cmdOff gewertet.
((an|ein|hoch):an | (aus|runter):aus) {Value} sollte funktionieren, wobei "an|ein|hoch" durch den Doppelpunkt in "an" gewandelt wird. Die Off-Variante hat den Doppelpunkt nur zu besseren Ansicht.

Gruß Jens

p.s. Rhasspy kann auch Umlaute (öffne, schließe, etc.). Diese solltest Du auch nutzen, um eine gute Erkennung bzw. Sprachausgabe zu erhalten.
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

Hallo Jens, danke für die Tipps. Hab's gerade ausprobiert - Mapping funktioniert wie gewünscht, genauso die Umlaute. Mit der Sensitivity habe ich schon vorher rumgespielt, aber bisher bin ich noch nicht zufrieden. Probiere deinen Wert jetzt mal für längere Zeit aus. Wenn's mal wieder Probleme gibt, weiß ich ja, wo ich Hilfe finde.

davedeluxe

Zitat von: JensS am 11 Februar 2021, 17:22:15
@davedeluxe
Was drhirn schreibt, kann ich nur unterstreichen. Hier als Hilfestellung, was deinem Code gefehlt hätte  - jeder fängt mal an:sub rhasspySauger($$$) {
    # Übergebene Parameter in Variablen speichern
    my ($Artikel,$Room,$Value) = @_;

    # Standardantwort
    my $response = "Was willst du?";

if (defined $Artikel) {
fhem "set Roborock zone $Room";
#        return "OK ich sauge $Artikel $Room";
     $response = "OK ich sauge $Artikel $Room" #In der letzten Zeile kann, muss aber kein Semikolon stehen.
}; #Semikolon fehlt
if ( $Value eq "pause") { # Das = weist einer Variablen einen Wert zu. Um etwas zu vergleichen nutzt man == oder eq.
fhem "set Roborock pause";
# return "OK Staubsauger pausiert";
$response = "OK Staubsauger pausiert" #In der letzten Zeile kann, muss aber kein Semikolon stehen.
}; #Semikolon fehlt
if ( $Value eq "start") { # Das = weist einer Variablen einen Wert zu. Um etwas zu vergleichen nutzt man == oder eq.
fhem "set Roborock start";
# return "OK Staubsauger startet";
$response = "OK Staubsauger startet"
}; #Semikolon fehlt
if ( $Value eq "laden") { # Das = weist einer Variablen einen Wert zu. Um etwas zu vergleichen nutzt man == oder eq.
fhem "set Roborock charge";
# return "OK Staubsauger fährt zur Ladestation";
$response = "OK Staubsauger fährt zur Ladestation" #In der letzten Zeile kann, muss aber kein Semikolon stehen.
}; #Semikolon fehlt
return $response;
};

Gruß Jens

Vielen Dank für die tolle Hilfe, das hilft mir absolut!

JensS

#200
@Roman
Ich staune, was man alles timern kann.
Eier, Brötchen, Standard, Nudel, Kartoffel, Käse, Hähnchen, Kuchen, Pizza und der Slot füllt sich weiter. Jetzt weiß ich erst zu schätzen, was mein Kurzzeitwecker all die Jahre geleistet hat...
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

Hat jemand von euch die Rhasspy Mobile App (Android) am laufen incl. Hotword?
Ich komm da leider nicht weiter...

JensS

@davedeluxe
Ja, das geht, wenn bei der Basis auf die Spracherkennung verzichtest. Handy in alle Satellites siteIds eintragen.
UDP Audio (Input) 192.168.100.1:12203:Handy
Satellite siteIds: Handy

Und beim Handy:Enable MQTT an
Host 192.168.100.1
Port 1883
Username wer
Password wiso
SiteId Handy
Silence Detection an - Rest aus
Wake word an
UDP
192.168.100.1:12203

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.

Roman

Zitat von: JensS am 14 Februar 2021, 12:07:40
@Roman
Ich staune, was man alles timern kann.
Eier, Brötchen, Standard, Nudel, Kartoffel, Käse, Hähnchen, Kuchen, Pizza und der Slot füllt sich weiter. Jetzt weiß ich erst zu schätzen, was mein Kurzzeitwecker all die Jahre geleistet hat...

Hi JensS,

ja, Timer dürften bei uns mindestens die Hälfte der Sprachkommandos ausmachen. Lichter, Rollos usw. sind zwar nett, aber zum großen Teil anderweitig automatisiert. Erhöht den WAF auch um einiges. :)


davedeluxe

Zitat von: JensS am 15 Februar 2021, 17:49:03
@davedeluxe
Ja, das geht, wenn bei der Basis auf die Spracherkennung verzichtest. Handy in alle Satellites siteIds eintragen.
UDP Audio (Input) 192.168.100.1:12203:Handy
Satellite siteIds: Handy

Und beim Handy:Enable MQTT an
Host 192.168.100.1
Port 1883
Username wer
Password wiso
SiteId Handy
Silence Detection an - Rest aus
Wake word an
UDP
192.168.100.1:12203

Gruß Jens

Hi,
danke für die Infos aber was mache ich wenn ich den integrierten MQTT nutze bei dem ich ja weder user nach passwort kenne/habe?

drhirn

Keinen Benutzernamen und Passwort eintragen?

davedeluxe

Zitat von: drhirn am 16 Februar 2021, 08:49:28
Keinen Benutzernamen und Passwort eintragen?

Mag er nicht  :-\

davedeluxe

Zitat von: JensS am 15 Februar 2021, 17:49:03
@davedeluxe
Ja, das geht, wenn bei der Basis auf die Spracherkennung verzichtest. Handy in alle Satellites siteIds eintragen.
UDP Audio (Input) 192.168.100.1:12203:Handy
Satellite siteIds: Handy

Und beim Handy:Enable MQTT an
Host 192.168.100.1
Port 1883
Username wer
Password wiso
SiteId Handy
Silence Detection an - Rest aus
Wake word an
UDP
192.168.100.1:12203

Gruß Jens
Okay ich bin einen Schritt weiter:
user:user
pass:pass


Leider verstehe ich den Rest nicht...
Am Master habe ich es lt. der Anleitung von haxxor eingerichtet, da Rhasspy incl. MQTT per Docker läuft:
Port freigegeben: -p 20000:20000/udp
Es ist das Wakeword per Porcupine aktiviert:
UDP audio: 172.17.0.2:20000:honor20
Satellite siteIDs: honor20

Muss da noch etwas anderes aktiviert oder eingetragen werden? Audio Recording ist deaktiviert.
Bei den Satelliten, wo muss ich alle Satelliten eintragen?

Wenn ich das Hotword sage sehe ich schon das ich beim MQTT Server etwas tut:
{"modelId": "/usr/lib/rhasspy/.venv/lib/python3.7/site-packages/pvporcupine/resources/keyword_files/linux/jarvis_linux.ppn", "modelVersion": "", "modelType": "personal", "currentSensitivity": 0.5, "siteId": "honor20", "sessionId": null, "sendAudioCaptured": null, "lang": null}

JensS

#208
UDP audio: 0.0.0.0:20000:honor20 sollte funktionieren. Mit "Satellites siteIds" meinte ich, dass honor20 bei der Basis in alle Dienste unter "Satellites siteIds" zugefügt werden soll. Das hast Du bestimmt schon gemacht.

p.s. Start wake word wäre natürlich auch eine Option.
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

@drhirn
Für die Nutzung eigener Intents wäre die Übergabe von $hash super.
Bitte füge in RHASSPY_handleCustomIntent $hash an den Intent-Aufruf zu.            # Sub aus dem Custom Intent aufrufen
            eval {
                Log3($hash->{NAME}, 5, "Calling sub: $subName");

                no strict 'refs';
                $response = $subName->(@params, $hash);

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.