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

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

Vorheriges Thema - Nächstes Thema

Neuhier

deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free$


Ist die erste Liste.
Da ist non-free aber Standard drin.


Nachtrag: oder geht das prinzipiell nicht mit Stretch-Lite?

Thyraz

Hm.. das Package war bei Raspbian wohl schonmal verschwunden:
https://github.com/google/aiyprojects-raspbian/issues/119

Ist die Frage ob das eben wieder der Fall ist.
Wenn ja könnte die dort beschriebene Lösung evtl. helfen:
Zitat
First, I installed libttspico-data using apt-get in Raspbian.

Then, I downloaded and installed the armhf versions of the packages libttspico0 and libttspico-utils from the Debian Stretch package index:
https://packages.debian.org/stretch/armhf/libttspico0/download
https://packages.debian.org/stretch/armhf/libttspico-utils/download
They must be installed in that order, because the first package is a dependency of the second one
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

Neues Update, zu finden wie immer auf Github.
Die FHEM App hat sich nicht geändert diesmal, es reicht also das Modul einzuspielen und FHEM neu zu starten.

Ihr könnt beim snipsMapping überall wo ihr ein cmd oder Reading angeben müsst nun auch device:cmd bzw. device:reading angeben.

Das Gerät kann sich so Infos aus anderen Geräten holen, bzw. set Kommandos in anderen Geräten ausführen.
Das war nötig um die Harmony Geräte bei mir zum Laufen zu bekommen. ;)

Man lege sich einen Dummy an wie z.B. SnipsRadioDummy (room = Snips, snipsName = Radio, snipsRoom z.B. Wohnzimmer) und gebe ihm folgendes mapping:

SetOnOff:cmdOn=Harmony01:activity Radio,cmdOff=Harmony01:off
GetOnOff:currentVal=Harmony01:activity,valueOn=Radio


Damit kann man dann die Radio Activity ein bzw. ausschalten, als auch über Snips "Ist das Radio eingeschaltet" abfragen.


Ich hatte auch kurzzeitig darüber nachgedacht, dass man mehrere Mappings in einem Gerät unterbringen kann,
damit man sich die Dummies spart.
Aber einige kommende Intents (wie z.B. MediaChannels) brauchen dann ja auch eigene Attribute pro Gerät um z.B. die unterstützten Channelnames anzugeben.

Ich glaube da fährt man auf Dauer mit den Dummies doch sauberer.

Doku auf Github ist noch nicht aktualisiert was diese Neuerung betrifft.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Wal

Ich habe Snips jetzt mal auf einem X86, RPI3 und einem Odroid XU4 mit einem ReSpeaker Mic Array v2.0 installiert und getestet. Die CPU-Last von Snips-ASR geht nach gesprochenem Hotword, bei mir wie folgt hoch :
X86 <10%
RPI3 >90%
XU4 <50%
Ich habe auch bemerkt, das mit einem RPI3 ab und zu der Befehl länger als 3sec. braucht, um ausgeführt zu werden.
Obwohl Snips für RPI3 optimiert ist, denke ich das er zu schwach ist. Ich werde beim XU4 wegen der Größe bleiben, da ich mir ein Snips-Dot bauen möchte.
Ich mußte Snips wegen fehlender Pakete auch drei mal unterschiedlich installieren, es werden aber immer diese Pakete gebraucht:
lsb-release
apt-transport-https
ca-certificates
systemd
systemd-sysv
libttspico-utils
alsa-utils
dirmngr
mosquitto

snips-asr
snips-audio-server
snips-dialogue
snips-hotword
snips-nlu
snips-tts
snips-asr-injection

die Snips-Pakete werden je nach Hardware nicht immer bei einem "sudo apt-get install snips-platform-voice" mit installiert.

P.S. mit dem ReSpeaker Mic Array v2.0 habe ich eine Erfolgsrate über 95% ohne Hintergrundgeräusche und über 80% mit Hintergrundgeräusche(Fernseher).

Danke an Thyraz
Kaum macht man es richtig, funktioniert es auch !

Gruß
Walter

shilbert

Hallo zusammen,

Das funktioniert ja alles soweit gut für die Jalousien.

Problem 1)

Meine Fragen wie "Wie ist die Temperatur draussen ?" wird offenkunding mit Intent GetNumeric erkannt und läuft ins Leere -->"Da ist was schiefgegangen".

Die Frage "Temperatur draussen ?" wird mit Intent Status erkannt und läuft. Bei SnipsMapping habe ich daher drin

Status:response=Draussen sind es [Aussentemp:Temperatur] Grad.
GetNumeric:currentVal=Aussentemp:Temperatur

Das Device ist bei mir "Aussentemp" und hat folgende Readings
Zitat
Aussentemp  15.1   
Temperatur    15
state              Aussentemp 15.1

Kann ich auch über GetNumeric die Antwort wie bei Status erhalten ?

Problem 2)

Rasenmäher:

"Wie ist der Status vom Rasenmäher" funktioniert

"Was macht der Rasenmäher" funktioniert (nachvollziehbar) nicht.

Hier sind wir sicher an einem Punkt an dem in der FHEM App "Was macht" als Statusabfrage gewertet werden müsste. Dazu gibt es aber reichlich Fälle.

Wie ist hier die Lösung ? Eigene custom App anlegen und dort die entsprechenden Sätze unterbringen ?

Ich habe im Snips store die von mir geschriebene App "Robonect" hinterlegt und in meinen Assistenten eingebunden.

Wenn ich jetzt frage "Was macht der Rasenmäher?" prozessieren beide Apps die Spracheingabe und reagieren beide drauf.

Zitat10:55:05] [Asr] captured text "was macht der rasenmäher" in 2.0s
[10:55:05] [Asr] was asked to stop listening on site wohnzimmer
[10:55:05] [AudioServer] was asked to play a wav of 93.1 kB with id '0c889191-7bfe-4ad1-824e-a38d1c0eb76e' on site wohnzimmer
[10:55:06] [AudioServer] finished playing wav with id '0c889191-7bfe-4ad1-824e-a38d1c0eb76e'
[10:55:06] [Nlu] was asked to parse input "was macht der rasenmäher"
[10:55:06] [Nlu] detected intent shilbert:GetStatusMower with probability 1.000 for input "was macht der rasenmäher"
              Slots ->
                 Device -> Rasenmäher
[10:55:06] [Dialogue] New intent detected shilbert:GetStatusMower with probability 1.000
              Slots ->
                 Device -> Rasenmäher
[10:55:06] [Dialogue] was ask to end session with id 3f6775af-d293-4da9-b470-0157e5d4103a by saying 'Die Batterie von Ohnezahn ist 96% geladen. Der Rasenmäher ist im Modus zu Hause und parkt'
[10:55:06] [Tts] was asked to say "Die Batterie von Ohnezahn ist 96% geladen. Der Rasenmäher ist im Modus zu Hause und parkt"
[10:55:06] [Nlu] was asked to parse input "was macht der 'standardgerät'"
[10:55:06] [Nlu] detected intent Thyraz:Status with probability 0.306 for input "was macht der 'standardgerät'"
              Slots ->
                 Device -> Standardgerät
[10:55:06] [Dialogue] was ask to end session with id 3f6775af-d293-4da9-b470-0157e5d4103a by saying 'Status vom Rasenmäher ist parken. Der Batteriestand beträgt 96 Prozent.'
[10:55:06] [Tts] was asked to say "Status vom Rasenmäher ist parken. Der Batteriestand beträgt 96 Prozent."
[10:55:06] [AudioServer] was asked to play a wav of 222.9 kB with id '455a02d9-ee83-40a8-b4c4-cee33ed406ba' on site wohnzimmer
[10:55:07] [AudioServer] was asked to play a wav of 200.3 kB with id '73b23df3-8ed5-4858-a8e8-f336361125fe' on site wohnzimmer

Ich hatte auch schon das Problem, dass bei bestimmten Spracheingaben die korrespondierende App korrekt geantwort und die FHEM App damit nicht anfangen kann.

Beispiel: "Hey Snips. Stelle den Rasenmäher auf manuell".

--> Robonect App reagiert darauf. FHEM app spricht "Da ist etwas schief gegangen"

Zitat10:57:44] [Asr] was asked to stop listening on site wohnzimmer
[10:57:44] [AudioServer] was asked to play a wav of 93.1 kB with id 'f679e8f7-9a28-4cf8-8048-7bc279aca2ff' on site wohnzimmer
[10:57:45] [AudioServer] finished playing wav with id 'f679e8f7-9a28-4cf8-8048-7bc279aca2ff'
[10:57:45] [Nlu] was asked to parse input "unknownword auf manuell"
[10:57:45] [Nlu] detected intent shilbert:SetModeMower with probability 0.823 for input "unknownword auf manuell"
              Slots ->
                 Value -> manuell
[10:57:45] [Dialogue] New intent detected shilbert:SetModeMower with probability 0.823
              Slots ->
                 Value -> manuell
[10:57:45] [Nlu] was asked to parse input "unknownword auf manuell"
[10:57:45] [Nlu] detected intent shilbert:SetModeMower with probability 0.823 for input "unknownword auf manuell"
              Slots ->
                 Value -> manuell
[10:57:45] [Dialogue] was ask to end session with id fcc6b8a1-4304-4eae-90ef-0a9edd8eb305 by saying 'Da ist etwas schief gegangen.'
[10:57:46] [Tts] was asked to say "Da ist etwas schief gegangen."
[10:57:46] [AudioServer] was asked to play a wav of 68.5 kB with id '622ba707-fddf-4026-9d42-5a3640d62f13' on site wohnzimmer
[10:57:47] [Dialogue] was ask to end session with id fcc6b8a1-4304-4eae-90ef-0a9edd8eb305 by saying 'Ohnezahn ist jetzt im manuellen Modus'
[10:57:47] [Tts] was asked to say "Ohnezahn ist jetzt im manuellen Modus"
[10:57:47] [AudioServer] was asked to play a wav of 78.2 kB with id '7d9cce69-ed84-4293-a72f-dac817a9860f' on site wohnzimmer
[10:57:48] [AudioServer] finished playing wav with id '622ba707-fddf-4026-9d42-5a3640d62f13'
[10:57:48] [Tts] finished speaking with id 'a1eeba45-d492-4db5-b9f0-a64a2e019ba5'
[10:57:51] [AudioServer] finished playing wav with id '7d9cce69-ed84-4293-a72f-dac817a9860f'
[10:57:51] [Tts] finished speaking with id '118c629d-c6f1-45ce-bea2-66e316132ad5'

Auffällig ist, dass offenbar kein Intent processing in der FHEM app stattfindet aber FHEM dennoch "Da ist etwas schiefgegangen" spricht.

Irgendeine Idee wie man die Interaktion/Überschneidung bei Verwendung von verschiedenen Apps in einem Assistenten verhindern/lösen kann ?

Möglicherweise ist das ein Thema für Snips.

shilbert

Es scheint wohl eine intentNotRecognised topic zu geben bei snips. Ich überlege ob es nicht sinnvoll wäre wenn die FHEM app nicht einfach "still bleibt" wenn etwas nicht erkannt wird. Der WAF von "Da ist etwas schiefgegangen" ist in meinem Umfeld überschaubar :-)

kud

Hat jemand eine Idee für die Anpassung der Snips-Lautstärke?
Der Befehl von der Console { system ('ssh remotecontrol@192.168.1.157 amixer -c0 sset \'PCM\' 11%')} funktioniert.

shilbert

"Was macht der Rasenmäher" wird von der FHEM app nicht als Statusabfrage interpretiert. Ich habe daher auf der Snips console eine FHEMcustom app angelegt und dort den GetStatus intent geforkt. Aus dem geforkten Intent habe ich alle Beispielsätze rausgeschmissen und nur den Beispielsatz "Was macht der Rasenmäher" reingeschrieben. Neuen Assistent runtergeladen und schwupps wird das korrekt erkannt.

Ich würde daraus schliessen, dass man über die custom App individuellere Sätze definieren kann und so die FHEM app erweitern kann ??

Es hat nicht funktioniert wenn man in dem geforkten Intent "SetOnOff"  "reinfahren und rausfahren" (für die Markise) hinzufügen will.

Eventuell wäre zu überlegen ob man das in die originale FHEM app mit reinnimmt. rein für aus und raus für ein ?



bennebartsch

Kann ich eigentlich an einem Gerät (z.B. Intel NUC) mehrere Mikros (PS3 EYE) anschließen? Wenn ja, wie?

shilbert

Noch ein Beispiel für 2 Apps und problematischer Interaktion

"Wie spät ist es" wird korrekt abgearbeitet aber FHEM app scheint sich auch mit dem intent zu beschäftigen und sagt dann "Da ist etwas schief gegangen". Kann die FHEM app erkennen, dass sie mit dem "wie spät ist es" nix anfangen kann und das dann "still ignorieren" :-) Ich kann Da ist etwas schief gegangen schon nicht mehr hören :-)

Zitat14:12:34] [Asr] captured text "wie spät ist es" in 2.0s
[14:12:34] [Asr] was asked to stop listening on site wohnzimmer
[14:12:34] [AudioServer] was asked to play a wav of 93.1 kB with id 'd051777a-f110-4799-84d1-98d69083567e' on site wohnzimmer
[14:12:36] [AudioServer] finished playing wav with id 'd051777a-f110-4799-84d1-98d69083567e'
[14:12:36] [Nlu] was asked to parse input "wie spät ist es"
[14:12:36] [Nlu] detected intent domi:currentTime with probability 1.000 for input "wie spät ist es"
[14:12:36] [Dialogue] New intent detected domi:currentTime with probability 1.000
[14:12:36] [Dialogue] was ask to end session with id 68dc2a94-4f48-4f35-9594-b160fc682988 by saying 'Gerade ist es 14 Uhr 12 .'
[14:12:36] [Tts] was asked to say "Gerade ist es 14 Uhr 12 ."
[14:12:36] [Nlu] was asked to parse input "wie spät ist es"
[14:12:36] [Nlu] detected intent domi:currentTime with probability 1.000 for input "wie spät ist es"
[14:12:36] [Dialogue] was ask to end session with id 68dc2a94-4f48-4f35-9594-b160fc682988 by saying 'Da ist etwas schief gegangen.'
[14:12:36] [Tts] was asked to say "Da ist etwas schief gegangen."
[14:12:36] [AudioServer] was asked to play a wav of 87.3 kB with id 'c937e3e0-1b74-4415-9fd7-f6af204b5456' on site wohnzimmer
[14:12:36] [AudioServer] was asked to play a wav of 68.5 kB with id 'a34cb5e3-7da0-4281-92da-790480a5bcf0' on site wohnzimmer
[14:12:39] [AudioServer] finished playing wav with id 'c937e3e0-1b74-4415-9fd7-f6af204b5456'
[14:12:39] [Tts] finished speaking with id 'd927434a-33ac-4285-abbd-1f862d818ad4'
[14:12:41] [AudioServer] finished playing wav with id 'a34cb5e3-7da0-4281-

Wal

Zitat von: shilbert am 26 August 2018, 14:16:39
Ich kann Da ist etwas schief gegangen schon nicht mehr hören :-)

Das kannst du in der 10_SNIPS.pm ändern, aus einem "Da ist etwas schief gegangen."  wird ein "".
Kaum macht man es richtig, funktioniert es auch !

Gruß
Walter

shilbert


Thyraz

Zitat von: shilbert am 26 August 2018, 11:03:50
Problem 1)

Meine Fragen wie "Wie ist die Temperatur draussen ?" wird offenkunding mit Intent GetNumeric erkannt und läuft ins Leere -->"Da ist was schiefgegangen".

Die Frage "Temperatur draussen ?" wird mit Intent Status erkannt und läuft. Bei SnipsMapping habe ich daher drin

Status:response=Draussen sind es [Aussentemp:Temperatur] Grad.
GetNumeric:currentVal=Aussentemp:Temperatur

Das Device ist bei mir "Aussentemp" und hat folgende Readings   
Kann ich auch über GetNumeric die Antwort wie bei Status erhalten ?
Die Frage ist: Worüber kann/soll Snips "draußen" identifizieren?
Ist das der snipsRoom?
Wie lautet der snipsName?

Wenn man ein GetNumeric mit Type=Temperatur hat, kann man das Device weglassen bei der Frage.
Das Modul sucht dann im Raum nach einem passenden Mapping.

Ich hab z.B. ein Device mit snipsName Thermometer und snipsRoom Garten.
Da kann ich fragen: "Wie warm ist es im Garten" statt der Langversion "Wie ist die Temperatur vom Thermometer im Garten".

Da bei mir auch die Frage "Wie warm ist es Garten" klappt, sollte auch "Wie warm ist es draußen" klappen, wenn der snipsRoom "Draußen" heißt.

Zitat von: shilbert am 26 August 2018, 11:03:50
Rasenmäher:
"Wie ist der Status vom Rasenmäher" funktioniert

"Was macht der Rasenmäher" funktioniert (nachvollziehbar) nicht.

Der Status-Intent  hat als einziger Intent übrigens einen Beispielsatz nur aus dem Device-Slot bestehend.
"Hey Snips, Rasenmäher" sollte also auch den Status liefern.

Was macht ...  ist wahrscheinlich nicht die gängigste Art nach dem Status zu fragen. ;)
Hab es gerade mit Siri und Alexa probiert und die verstehen mich auch nicht wenn ich so versuche einen Gerätestatus abzufragen.
Bin mir daher jetzt nicht sicher ob das wirklich als Standard-Beispielsatz in den Status Intent gehört...

Zitat von: shilbert am 26 August 2018, 12:41:05
Ich habe daher auf der Snips console eine FHEMcustom app angelegt und dort den GetStatus intent geforkt. Aus dem geforkten Intent habe ich alle Beispielsätze rausgeschmissen und nur den Beispielsatz "Was macht der Rasenmäher" reingeschrieben. Neuen Assistent runtergeladen und schwupps wird das korrekt erkannt.
Aber damit ist das für dich wahrscheinlich auch zu verkraften.
Gute Idee übrigens. :)

Zitat von: shilbert am 26 August 2018, 12:41:05
Eventuell wäre zu überlegen ob man das in die originale FHEM app mit reinnimmt. rein für aus und raus für ein ?

rein/raus/einfahren/ausfahren/reinfahren/rausfahren ist ab sofort im SetOnOff,
eingefahren/ausgefahren im GetOnOff eingetragen.

Zitat von: shilbert am 26 August 2018, 14:16:39
Noch ein Beispiel für 2 Apps und problematischer Interaktion

Schau ich mir gleich mal an.
Wäre natürlich logischer, wenn das FHEM-Modul nur reagiert, wenn es ein Standard-Intent oder ein bekannter Custom-Intent ist.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

Zitat von: bennebartsch am 26 August 2018, 13:10:56
Kann ich eigentlich an einem Gerät (z.B. Intel NUC) mehrere Mikros (PS3 EYE) anschließen? Wenn ja, wie?

Technisch ja, Snips unterstützt aber glaub nur ein Micro pro Device/Satellite.
Klar, man könnte auf dem NUC in VMs mehrere Satellites parallel laufen lassen und jeweils ein USB-Device an eine VM weiterleiten...
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

Zitat von: shilbert am 26 August 2018, 14:16:39
Noch ein Beispiel für 2 Apps und problematischer Interaktion

"Wie spät ist es" wird korrekt abgearbeitet aber FHEM app scheint sich auch mit dem intent zu beschäftigen und sagt dann "Da ist etwas schief gegangen". Kann die FHEM app erkennen, dass sie mit dem "wie spät ist es" nix anfangen kann und das dann "still ignorieren" :-) Ich kann Da ist etwas schief gegangen schon nicht mehr hören :-)

Ok, neue Version auf Github.

Für unbekannte Intents sollte keine Antwort ausgegeben und auch kein endSession geschickt werden.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...