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

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

Vorheriges Thema - Nächstes Thema

Thyraz

Achja, die Shortcuts sind ja auch noch nicht in der Doku sehe ich gerade.
Brauch dringend mal wieder etwas Freizeit und Langeweile. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Brice

@Thyraz:
Vielen Dank für das tolle Modul und deine Dokumentation dazu. Mit ein paar Problemen ist alles installiert und ein paar Devices sind eingebunden. Erinnert mich an die Integration von Alexa mit Custom-Skills im Februar 2017: Herausforderungen können überwunden werden :). Alexa läuft (derzeit noch) parallel, evt. wird Snips aber die Steuerung der Heimautomation übernehmen. Meine Frau ist nach der ersten Demo mit dem Wakeword "Hey Uschi" nicht einverstanden, das werde ich dann mal ändern.

Tips für Klein&Fein: klein habe ich beim örtlichen Conrad gefunden, ob fein, wird sich zeigen. Es sind diese, die ich locker hinter Blumentöpfen verstecken kann.

@ all:
Hat jemand die Spachausgabe von Snips per tts über externe Lautsprecher laufen, z.B. über das Modul BOSEST? Snips läuft bei mir auf einem für das (inoffzielle) Modul Roomba extra eingerichtetem RPi3, da das Modul Fritzbox/PRESENCE im Produktivsystem permanente disconnect/connect auswirft. Es wäre natürlich schick, wenn die Sprachausgabe über die BoseSoundtouch 10 erfolgen könnte.

Ich werde mich jetzt mal mit den Feinheiten zu Snips beschäftigen.

Stefan
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

MadMax-FHEM

Zitat von: rih am 24 Oktober 2018, 22:41:05
@rischbiter: ich habe deinen Shortcut zur Ausgabe des Tages / Datum probiert.
Welcher Tag ist heute={return "es ist " . qx(date +%A) . " der " . qx(date +%D);}

Leider spricht Snips den Tag auf englisch aus. Auch die Datumsangabe ist englisch:
heute ist Wednesday der 10/24/18

Ist das bei dir auch so? Wenn ich auf der Konsole "date" aufrufe wird korrekt Mittwoch und das Datum "auf deutsch" angezeigt. Die Lokalisierungseinstellungen sollten also passen. Was kann da falsch sein (falls es bei dir passt)?

War bei mir bis eben auch so ;)

also bei date in der Linux-Console (ssh): Do usw.

Bei Eingabe von {qx(date +%A)} in FhemWeb dann: Thursday

Ich stelle bei raspi-config immer zwei locale ein bzw. zusätzlich Deutsch (utf-8) als "Standard" (Frage "danach") hatte ich bislang immer en utf-8 gelassen.

Eben auf de utf-8 umgestellt und gebootet: siehe da -> Donnerstag :)

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)

rih

Habe ich in raspi-config genauso eingestellt: de_DE-UTF8 und en_GB-UTF8. Dann als Standard de_DE-UTF8.
Auf deinen Tipp hin habe ich versuchsweise den Standard auf "en" umgestellt, rebootet und wieder auf "de" eingestellt. Nochmal rebootet.
Komischerweise sagt snips das Datum nun korrekt, also Tag, Monat, Jahr. War vorher Monat, Tag, Jahr. Und das, obwohl snips als voiceResponse "heute ist Thursday der 10/25/18" anzeigt. Aber der Tag selbst wird leider immer noch englisch gesprochen, also Thursday.
Komisch. Hast Du auch Stretch lite oder ein älteres Raspian?

MadMax-FHEM

Hm, eigenartig...

Hat bei mir sofort geklappt...

Nur zur Sicherheit: du hast das auf dem PI gemacht, auf dem fhem läuft (also die Antwort "generiert" wird)!?

Und ja: Stretch lite...

Was mir noch einfällt war etwas ähnliches bei TEERKO.
Da stand irgendwas von einem Eintrag in der fhem Startdatei (also zumindest bei initd möglich / aber eher unüblich bei systemd)...
...hat bei mir aber damals auch nicht geholfen (war aber noch auf dem alten Testsystem).

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)

heiko-73

So nun hat es mich ja schon ein wenig gepackt......
wie wäre es wenn Snips mal einen Witz erzählen könnte?
Mit dem genialen Shortcut hat das sofort geklappt, aber dann ist es ja immer der gleiche Witz^^

Nun dachte ich mir ok dann holt man sich die Witze als RSS Feed von witze.net
Also hab ich nun ein Device WitzeFeed das auch fleißig 20 Witze als Reading bereithält.

ABER wie bau ich das denn nun ein?Mit dem Mapping komme ich so noch nicht klar.
Man müsste dann ja auch noch per Zufall einen von 20 Witzen auslosen...

Und gibt es eine Funktion um das Reading vorher noch ein wenig abzuändern?
Bei meinem Test mit dem Shortcut war es z.B. praktisch erstmal die Sonderzeichen zu maskieren und nach einem Fragezeichen einfach pauschal 5-10 Kommas hinter zu packen für eine gewisse Pause.

Hat dazu wer eine Idee?
Wenn das mit dem Text umformen so nicht geht wäre es nicht so schlimm dann baue ich ein PHP Script dazwischen (das kann ich wenigstens)....

mericon

Zitat von: heiko-73 am 25 Oktober 2018, 21:36:12
So nun hat es mich ja schon ein wenig gepackt......
wie wäre es wenn Snips mal einen Witz erzählen könnte?
Mit dem genialen Shortcut hat das sofort geklappt, aber dann ist es ja immer der gleiche Witz^^

Nun dachte ich mir ok dann holt man sich die Witze als RSS Feed von witze.net
Also hab ich nun ein Device WitzeFeed das auch fleißig 20 Witze als Reading bereithält.

ABER wie bau ich das denn nun ein?Mit dem Mapping komme ich so noch nicht klar.
Man müsste dann ja auch noch per Zufall einen von 20 Witzen auslosen...

Und gibt es eine Funktion um das Reading vorher noch ein wenig abzuändern?
Bei meinem Test mit dem Shortcut war es z.B. praktisch erstmal die Sonderzeichen zu maskieren und nach einem Fragezeichen einfach pauschal 5-10 Kommas hinter zu packen für eine gewisse Pause.

Hat dazu wer eine Idee?
Wenn das mit dem Text umformen so nicht geht wäre es nicht so schlimm dann baue ich ein PHP Script dazwischen (das kann ich wenigstens)....
Das wäre eher etwas für ein custom intent mit Funktion in der myutils glaube ich. Aber das können die perlexperten besser als ich.

Gesendet von meinem VTR-L09 mit Tapatalk


ahlermi

Zitat von: heiko-73 am 25 Oktober 2018, 21:36:12

Nun dachte ich mir ok dann holt man sich die Witze als RSS Feed von witze.net
Also hab ich nun ein Device WitzeFeed das auch fleißig 20 Witze als Reading bereithält.

ABER wie bau ich das denn nun ein?Mit dem Mapping komme ich so noch nicht klar.
Man müsste dann ja auch noch per Zufall einen von 20 Witzen auslosen...



$text = ["Das habe ich nicht verstanden!","Phuu das kann ich noch nicht!","Nein! Heute nicht.", "Wie bitte?"]->[rand(4)];


Das ist schon mal was für Zufall
PI4 FHEM, PI3 FHEM, 6 x Echo mit talk2fhem, Siri, SNIPS auf PI3 mit Samson UB1, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEasy, Gardena, Telegram, FLOORPLAN, HEOS, Xiaomi Aqara, Sonoff, SolvisMax, SolvisClient, HUE, ESPEasy für Bayernlüfter, Harmony, Tasmota, JKBMS, EASUN

heiko-73

Cooooooooooooooooool ahlermi !!!!

Das funktioniert :)
Als Shortcut
Mach Witze={my $value=[ReadingsVal("WitzeFeed","n00_description",""),ReadingsVal("WitzeFeed","n01_description",""),ReadingsVal("WitzeFeed","n02_description",""),ReadingsVal("WitzeFeed","n03_description",""),ReadingsVal("WitzeFeed","n04_description",""),ReadingsVal("WitzeFeed","n05_description",""),ReadingsVal("WitzeFeed","n06_description",""),ReadingsVal("WitzeFeed","n07_description",""),ReadingsVal("WitzeFeed","n08_description",""),ReadingsVal("WitzeFeed","n09_description",""),ReadingsVal("WitzeFeed","n10_description",""),ReadingsVal("WitzeFeed","n11_description",""),ReadingsVal("WitzeFeed","n12_description",""),ReadingsVal("WitzeFeed","n13_description",""),ReadingsVal("WitzeFeed","n14_description",""),ReadingsVal("WitzeFeed","n15_description",""),ReadingsVal("WitzeFeed","n16_description",""),ReadingsVal("WitzeFeed","n17_description",""),ReadingsVal("WitzeFeed","n18_description",""),ReadingsVal("WitzeFeed","n19_description","")]->[rand(20)]; return " $value";}

Das müßte man dann doch auch im Feed Devise als Mapping umsetzen können?
Weil dann wäre man ja mit den Erkennungswörtern flexibler?

rischbiter123

Da bei mir -aus welchem Grund auch immer- die Wetter-Apps von Snips nicht funktionieren, habe ich mir mit shortcuts und einem Proplanta-Device eine 6-Tage-Wettervorhersage gebastelt. Da Proplanta die Daten für 3,6,9,12,15,18 und 21 Uhr bereitstellt, lasse ich mir die Daten für 6-18 Uhr vorlesen.
Die Shortcuts:
Wie wird das Wetter morgen={WetterMorgen(1);}
Wie wird das Wetter übermorgen={WetterMorgen(2);}
Wie wird das Wetter in 3 Tagen={WetterMorgen(3);}
Wie wird das Wetter in 4 Tagen={WetterMorgen(4);}
Wie wird das Wetter in 5 Tagen={WetterMorgen(5);}
Wie wird das Wetter in 6 Tagen={WetterMorgen(6);}

und der Eintrag in die 99_myUtils:
sub WetterMorgen($) {
my ($no) = @_;
my $i = 6;
my $k = 0;
my $u = "";
my $v = "";
my $w = "";
my $da = "fc".$no."_date";
while($i < 19) {
if ($i == 6)
{$k = "06"}
elsif ($i == 9)
{$k = "09"}
else
{$k = $i};
my $we = "fc".$no."_weather".$k;
my $te = "fc".$no."_temp".$k;
my $wi = "fc".$no."_wind".$k;
  $u = "Um ".$i." Uhr ist es ".(ReadingsVal("wetter",$we,0))." Die Temperatur beträgt voraussichtlich ".(ReadingsVal("wetter",$te,0))." Grad Celsius."." Die Windgeschwindigkeit beträgt ".(ReadingsVal("wetter",$wi,0))." Kilometer pro Stunde. ";
  $v = $v.$u;
  $i += 3;
}
  $w = "Das Wetter vom ".(ReadingsVal("wetter",$da,0)).". ".$v;
  return $w;
}

wetter ist der Name des Proplanta-Device.

Wahrscheinlich kann man das Ganze besser über Custum-Intents lösen, aber damit komme ich (noch) nicht zurecht.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

bennebartsch

Achtung, am besten erstmal nicht updaten!
Beim Update der Snips Platform über apt bekomme ich folgenden Fehler:
The following packages have unmet dependencies:
snips-asr-injection : Depends: snips-platform-common (< 0.59.3) but 0.60.1 is to be installed
E: Unable to correct problems, you have held broken packages.

Scheint als hätten die Snips Entwickler vergessen das Paket snips-asr-injection zu updaten...

bennebartsch

#566
Hat sich anscheinend erledigt, das Paket snips-asr-injection wird von snips-injection abgelöst!
https://forum.snips.ai/t/error-on-apt-get-update/480/2

Edit: hat sich doch nicht erledigt. Es hat sich nicht nur der Name von snips-asr-injection zu snips-injection geändert, sondern auch noch ein paar andere Dinge. Die Snips Dokumentation ist dazu schon aktualisiert worden:
https://snips.gitbook.io/documentation/advanced-configuration/dynamic-vocabulary

Das MQTT Topic ist jetzt hermes/injection/perform anstatt hermes/asr/inject. Dies lässt sich recht einfach in Zeile 1087 der 10_SNIPS.pm ändern:
MQTT::send_publish($hash->{IODev}, topic => 'hermes/asr/inject', message => $json, qos => 0, retain => "0");
in folgendes ändern:
MQTT::send_publish($hash->{IODev}, topic => 'hermes/injection/perform', message => $json, qos => 0, retain => "0");

msommer

Zitat von: Brice am 25 Oktober 2018, 13:08:49
@ all:
Hat jemand die Spachausgabe von Snips per tts über externe Lautsprecher laufen, z.B. über das Modul BOSEST?
Du kannst in /etc/snips.toml, unter [snips-tts] ein eigenes Script konfigurieren (provider = "customtts"), das als Parameter den Ausgabetext von Snips übergeben bekommt.
Damit könntest du das speak Command vom BOSEST Modul antriggern.

Brice

Danke, damit werde ich mich mal in den kommenden dunklen Tagen beschäftigen. Hat keine Priorität, da die jetzt genutzten Lautsprecher sehr klein sind und auch kein "Rauschen im Standby" feststellbar ist.

@bennebartsch:
selbiges Problem hatte ich heute auch. Da ich vor einer größeren Aktion immer ein Image des funktionierenden Systems erstelle, habe ich dies zurück gespielt. Deinen Hinweis habe ich in meine Doku für meine System aufgenommen. Danke dafür.
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

ChrisK

Moin zusammen,

ich habe ein komisches Problem und komme leider nicht weiter.
Eigentlich wollte ich "nur" meinen Onkyo-Receiver einbinden, damit ich den per lauter/leiser steuern kann. Da ich aber immer "kein Wiedergabegerät aktiv" als Rückmeldung erhalten habe, habe ich meinen Assistenten aktualisiert.


chris@htpc:~$ sam devices

Found 1 device:
- 192.168.2.abc

Connect to a device using sam connect HOSTNAME_OR_IP


chris@htpc:~$ sam connect 192.168.2.abc
? Enter username for the device: [hidden]
? Enter password for the device: [hidden]
â Connected to 192.168.2.abc
i A public key has been generated and copied to the device at 192.168.2.abc:~/.ssh/authorized_keys
chris@htpc:~$ sam login
? Enter email used on the console: chris@emailadresse.de
? Enter password used on the console: [hidden]
â Logged in



chris@htpc:~$ sam update-assistant
Updating assistant

NLU training done
ASR training done
â Deploying assistant to 192.168.2.abc...
Checking for skills
â Generating virtual environment for python actions

Checking actions for end-user parameters
Relaunching snips-skill-server
â Snips assistant is now running. Say hey_snips to start!
i Run sam watch to see the logs

Danach habe ich fhem neu gestartet und set snips updateModel ausgeführt.

Jetzt erkennt snips leider gar nichts mehr.
"Hey Snips" wird erkannt, danach aber leider nichts mehr:
[18:35:27] [Hotword] detected on site default, for model hey_snips
[18:35:28] [Dialogue] session with id '9bcb9bbf-ffbd-4209-aa30-2ddcb750c6c5' was started on site default
[18:35:33] [Asr] captured text "" in 4.0s
[18:35:35] [Dialogue] session with id '9bcb9bbf-ffbd-4209-aa30-2ddcb750c6c5' was ended on site default. The session was ended because the platform didn't understand the user


captured test "" kommt immer, egal was ich nach "hey snips" sage.
Habe ich irgendwas vergessen?
Vielen Dank schonmal!