SNIPS: Sprachsteuerung (mittlerweile auch per Textcommands) über snips.ai

Begonnen von Thyraz, 21 Juli 2018, 20:28:48

Vorheriges Thema - Nächstes Thema

dkreutz

Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

drhirn


MadMax-FHEM

Tja...

Vielleicht ist ja das (im Fall der Fälle) eine Möglichkeit: https://forum.fhem.de/index.php/topic,102000.0.html

Sofern das open-source bleibt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

sepia

Snips war ja eh nie so "richtig" open-source im Vergleich zu SEPIA ;) aber spannende Sache.
Wer SEPIA jetzt klont auf GitHub hat es auf jeden Fall für alle Zeiten verfügbar (und ich würde mich über ein paar GitHub Sterne freuen :D). Außerdem kann ich euch garantieren, dass es keine Pläne gibt für einen Verkauf des Projektes ;)

dkreutz

Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

jule24

Erstmal Danke fuer das Modul. nach einigem testen lauft es nun fehlerfrei :)
Eine Frage allerdings: Ich lebe in einem mehrsprachigen Haushalt. Kann ich das Modul dazu bewegen englisch zu reden?
Danke

laberlaib

Zitat von: jule24 am 22 November 2019, 15:53:34
Erstmal Danke fuer das Modul. nach einigem testen lauft es nun fehlerfrei :)
Eine Frage allerdings: Ich lebe in einem mehrsprachigen Haushalt. Kann ich das Modul dazu bewegen englisch zu reden?
Danke

Zum mehrsprachig reden reicht folgende Änderung in der 10_SNIPS.pm (ohne Zeilenangabe, aber wenn man nach "sub say" sucht findet man das schnell.

sub say($$) {
    my ($hash, $cmd) = @_;
    my $sendData, my $json;
    my $siteId = "default";
    my($unnamedParams, $namedParams) = parseParams($cmd);
# print Dumper parseParams( $cmd );
my $text = join(" ",@{ $unnamedParams });

my $lang = "de"; # PS 20181220

    # if (defined($namedParams->{'siteId'}) && defined($namedParams->{'text'})) {
        # $siteId = $namedParams->{'siteId'};
        # $text = $namedParams->{'text'};
    # }
#### PS 20181220
if (defined($namedParams->{'siteId'})) {
$siteId = $namedParams->{'siteId'};
}
if (defined($namedParams->{'text'})) {
$text = $namedParams->{'text'};
}
if (defined($namedParams->{'lang'})) {
$lang = $namedParams->{'lang'};
}
Log3($hash->{NAME}, 1, "siteId: $siteId");
Log3($hash->{NAME}, 1, "text: $text");
Log3($hash->{NAME}, 1, "lang: $lang");

#### /PS 20181220
    $sendData =  {
        siteId => $siteId,
        text => $text,
        lang => $lang,
        id => "0",
        sessionId => "0"
    };

# ÄNDERUNGEN PS:

    $json = toJSON($sendData);
    MQTT::send_publish($hash->{IODev}, topic => 'hermes/tts/say', message => $json, qos => 0, retain => "0");
}


Normalerweise kann man nur die Parameter "siteID" mitgeben und muss dann noch "text" definieren. Ich habe den neuen Parameter "lang", den snips.ai kenn, eingeführt. Dieser wird defaltmäßig mit "de" belegt, das müsstest Du dann ändern.
Dann wird die Funktion ParsParams verwendet, mit allen Wechselwirkungen auf die Verwendung von "=" und sonstigen Dingen. Das habe ich nicht abgefangen, da ich eher unkomplizierte Sätze sage und im Zweifelsfalls wüsste, woher das kommt.
Danach kannst du mit
set SNIPS_DEVICE say I will be back lang=en
das Ding englisch reden lassen oder mit
set SNIPS_DEVICE say Voulez vous coucher avec moi? lang=fr
französisch etc...

Für ein mehrsprachige Sprachsteuerung bspw. für spanisch sprechende Schwiegereltern:
Das Modul ist mehr oder weniger "nur" eine komfortable MQTT-Schnittstelle zu SNIPS. Es durchsucht die, leider hartcodierte, vordefinierten Attribute (snipsRoom, snipsName, etc) und matcht diese mit allem, was auf den MQTT-Kanälen von SNIPS läuft und handelt danach. Bzw. injected auf Anstoss alles da rein.

Ich habe dann einfach alle "ausländischen" Begriffe (bei mir Spanisch) ebenfalls in die Attribute eingetragen und dann ein zweites, spanisches Snips aufgesetzt und angebunden. In Snips war die FHEM-App aber kopiert, da ja die Standardworte und Beispielsätze dort übersetzt werden mussten.
Das hat funktioniert, allerdings halt parallel, so dass mich einer halt nicht verstanden hat. Und Spanisch-Deutsch ist relativ weit auseinander und es klingt nicht alles gleich, so dass der jeweils andere Snips nicht ausversehen die anderen Worte falsch interpretiert - weil jedem Snips wird ja alles injected, also dem deutschen auch die spanischen Worte.
Den letzten Schritt, die beiden Snips-Installationen dann mit unterschiedlichen Wakewords zu versehen bin ich final nicht gegangen. Es wäre auch denkbar, um Falschinterpretation zu vermeiden, die Begriffe nicht zu injecten sondern direkt in der SNIPS-FHEM-APP beizubringen, so wie in der ur-ur-ur-Version des Moduls.

Also man müsste für eine saubere Implementation das ganze Parameterweitergeben sauberer und robuster machen und am besten im SNIPS-Modul die Präfixe für die eigenen Attribute angeben. Dann könnte man je nach Sprache unterschiedliche Attribute füttern, bspw.  snipsNameDE, snipsNameES, snipsRoomES, etc. Dann wäre die Pflege hier leichter und die sprachübergreifenden Wortverwechslungen ausgeschlossen.
Wenn man dann noch die in der FHEM-APP hartcodierten Trainingssätze und Worte in eine Textdatei auslagert und injected (ich weiss nicht, ob snips das überhaupt unterstützt), dann könnte man dafür Listen und Dateien in unterschiedlicher Sprache mitgeben und diese hier pflegen und contributen...

Ich hab ab Mitte Dezember Freitags frei...mal gucken...
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

jule24

Supi danke. Werde es heute abend gleich testen. Da es bei mir nur in englisch laufen muss und nicht zweisprachig ( bin eh die einzige Deutsche im Haushalt) wird es warscheinlich deutlich einfacher....


s710

Hab ebenfalls schon unterzeichnet, auch wenn die Aussichten natürlich sehr schlecht sind.

Äußerst schade, dass ein so tolles Projekt aufgekauft und (vermutlich) begraben wird.

Thyraz

Wow, harter Schritt nachdem man extrem viel an Feedback und Daten durch die Community aufgesaugt hat.

Schade rum...
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

drhirn

Zitat von: Thyraz am 03 Dezember 2019, 11:45:57
Wow, harter Schritt nachdem man extrem viel an Feedback und Daten durch die Community aufgesaugt hat.

Ja. Schon einigermaßen frech. V.a. die Vorgangsweise ohne Kommunikation.

mericon

Sehr schade dann heißt es jetzt wohl Alternativen suchen

Gesendet von meinem VTR-L09 mit Tapatalk


drhirn

Was leider nicht ganz einfach ist. Die, die ich bisher gefunden habe, sind lange nicht so gut. Und beherrschen v.a. das Snips-Killer-Feature "Satelliten" nicht. Abgesehen davon, dass meine Rasperry Zero jetzt alle arbeitslos sind.

mericon

Zitat von: drhirn am 03 Dezember 2019, 11:55:15
Was leider nicht ganz einfach ist. Die, die ich bisher gefunden habe, sind lange nicht so gut. Und beherrschen v.a. das Snips-Killer-Feature "Satelliten" nicht. Abgesehen davon, dass meine Rasperry Zero jetzt alle arbeitslos sind.
Das wird das Problem sein. Ich werde meine Sachen auf alle Fälle so sichern das ich erstmal ohne die console weiter quatschen kann

Gesendet von meinem VTR-L09 mit Tapatalk