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

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

Vorheriges Thema - Nächstes Thema

jowe

@kud: Das Problem mit "sound-feedback off" am Satelliten habe ich auch. Bin da bisher noch zu keiner Lösung gekommen. Ich habe aktuell die Soundausgabe am Satelliten deaktiviert, deshalb stört mich das auch nicht. Allerdings wäre eine Verkürzung der "Wartezeit" nach dem Hotword natürlich schon super

Zur Hotword-Erkennung: Der Satellit streamt dauerhaft über mqtt den audiostream an die main-unit. Auf der main-unit analysiert snips-hotword den stream und sendet bei hotword-Erkennung per mqtt die Info zurück an den satelliten. Ist natürlich nicht optimal. Wie gesagt, die hotword-Erkennung soll wohl schon lokal auf dem satelliten funktionieren, ist bisher aber noch nicht in der Doku beschrieben. Such bei Interesse mal bei discord, dort wurde das Vorgehen beschrieben.

Thyraz

An sich sollte das mit dem Feedback per MQTT funktionieren.
https://snips.gitbook.io/documentation/ressources/hermes-protocol#sound

Per Terminal auf der Snips-Hauptinstallation (dort wo der MQTT Server läuft):

mosquitto_pub -h localhost -t hermes/feedback/sound/toggleOff -m '{"siteid"="default"}'


Default eben gegen die passende siteId ersetzen.


edit: Das mit lokaler Hotword-Erkennung ist interessant.
Aber wenn dann Audio nicht mehr zum Main-Device gestreamt werden soll, müsste doch auch ASR auf dem Satellit laufen oder?
Und dann wäre da sicher auch wieder dickere Hardware nötig.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

jowe

So wie ich es verstanden habe ist nur die Hotword-Erkennung lokal auf dem satelliten. Das heißt, sobald das Hotword erkannt wurde wird der Audiostream wieder an das main-device weitergeleitet und dort mittels asr und nlu verarbeitet.
In Discord wurde folgende Anleitung für das Einrichten von local-hotword verlinkt. Ich habe es wie schon geschrieben aber noch nicht selber ausprobiert:
https://gist.github.com/mtrey/04af1660452ec8dab7b706d1a5f24a93

Thyraz

Hier mal ein Konfigurationstip zum Thema Lichtsteuerung der aus einer PN-Unterhaltung hervor ging:

Zitat
Das Snips Modul versteht "Licht" von sich aus nicht.
Für das Modul läuft das alles über GetOnOff, welches bisher auch keine Option "type" hat um Lampen zu identifizieren.

Ich bin auch eher dagegen hier eine Automatik seitens des Moduls einzubauen,
da dem User dann die Freiheit genommen wird zu Bestimmen was genau bei "Licht an" passieren soll.
Im Moment ist "Licht" für Snips ein Gerätename wie jeder andere auch.

...

Wenn du in verschiedenen Räumen "Licht an" sagen willst, musst du also dafür sorgen, dass Snips eindeutig bestimmten kann was du willst.

Ich habe für jeden snipsRoom ein Device welches den snipsName "Licht" trägt.
Je nach Raum können das unterschiedliche Device-Typen sein.

- Im Büro ist es ein Mapping bei einer einzelnen Deckenlampe.

- Im Wohnzimmer hab ich ein recht komplexes DOIF das sich um die Beleuchtung kümmert.
  Dort kann händisch durch Doppelklick eines Lichtschalter für die Szenenwahl eingegriffen werden.
  Zwei DOIF Stränge sind hier für "Standardbeleuchtung" und "Alles aus" zuständig.
  SetOnOff schaltet hier einfach mit "set <doif> cmd_x" den passenden DOIF-Strang.

- Im Schlafzimmer hab ich keine so komplexe Steuerung, aber dennoch ein paar verschiedene Beleuchtungsszenen für Deckenlampe/Nachttischlampen/eine Lichterkette.
  Geregelt ist das über das Lightscene Modul.
  Diesem habe ich hier direkt snipsName "Licht" und snipsRoom "Schlafzimmer" verpasst.
  Das SetOnOff Mapping startet dann einfach die Standardszene bzw. die AllOff Szene.
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

Und ein kleines Update: Lautstärke von Snips aus FHEM heraus steuern.

Ich hab einen kleinen Python Service geschrieben der auf bestimmte MQTT Nachrichten reagiert und daraufhin die Alsa-Systemlautstärke ändert.
Im neuen Update des FHEM Moduls ist ein neuer volume set-Befehl implementiert der den Service dann über MQTT ansteuert.

Installation:
https://github.com/Thyraz/Snips-Fhem/blob/master/README.md#lautst%C3%A4rke-von-snips-aus-fhem-heraus-steuern
Dann:
Neue Version von 10_SNIPS.pm laden und FHEM neu starten.

Syntax des volume Befehls:
set <snipsDevice> volume siteId="<siteId>" volume="<volume>"

Beispiel:

set Snips volume siteId="default" volume="50"


Wenn es jemand testet würde ich mich über eine kurze Rückmeldung freuen ob es bei euch funktioniert.
Eine Sache die bei mir etwas komisch ist: Die Lautstärkewerte stimmen nicht mit dem überein was alsamixer im Terminal anzeigt.
Bei Volume-Werten von 0 bis 30 tut sich in alsamixer reichlich wenig. Danach geht es aber recht linear bis zu 100 Prozent weiter.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ChrisK

Also ich muss Dich Thyraz jetzt nochmal loben.
Ich war jetzt über ne Woche quasi offline und hier gibt es 10 neue Seiten und 4-5 neue Versionen vom Modul und dem Assistenten. Respekt und vielen Dank!
Ich hatte vorher den Snips-Pi runtergefahren, jetzt wieder hochgefahren und alles klappt auf Anhieb wieder. Sehr schön.

Mittlerweile habe ich die Lautsprecher vom Pi entfernt und Sonos Play 1, der in der Nähe aufgestellt ist, dient per notify als Lautsprecher. Ob das so bleibt schauen wir mal.

Eigentlich wollte ich nur mal danke sagen :)

kud

Zitat von: jowe am 05 September 2018, 16:53:33
So wie ich es verstanden habe ist nur die Hotword-Erkennung lokal auf dem satelliten. Das heißt, sobald das Hotword erkannt wurde wird der Audiostream wieder an das main-device weitergeleitet und dort mittels asr und nlu verarbeitet.
In Discord wurde folgende Anleitung für das Einrichten von local-hotword verlinkt. Ich habe es wie schon geschrieben aber noch nicht selber ausprobiert:
https://gist.github.com/mtrey/04af1660452ec8dab7b706d1a5f24a93

Also das klappt bei mir nicht. Da warte ich mal auf was "offizielles" ;-)

Die Standard-Satelliten Installation geht ja.

enno

Zitat von: Thyraz am 06 September 2018, 10:20:41
Und ein kleines Update: Lautstärke von Snips aus FHEM heraus steuern.

sudo ./snips-volume.py starten.

klappt bei mir nicht. Mit folgendem Code klappt es:
sudo python3 /opt/snips-volume/snips-volume.py

Den Rest teste ich später.
Einfacher FHEM Anwender auf Intel®NUC

Thyraz

@ChrisK, danke für die Blumen. :)

@enno, stimmt damit sollte es klappen egal welche Python Version als Standard definiert ist.
Änder ich in der Doku.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

enno

mit:set Snips volume siteId="default" volume="50"
hätte ich erwartet, dass ich die Lautstärkenänderung auf dem laufenen alsamixer sehen können müsste. Tut sich aber leider nichts....
Snips ändert die Ausgabe leider auch nicht. Also funktioniert bei mir erst mal nicht.

Wenn ich sudo python3 /opt/snips-volume/snips-volume.py

Dann in FHEM set Snips volume siteId="default" volume="0" stürzt das Script mit folgender Fehlermeldung ab:

pi@snipes:~ $ sudo python3 /opt/snips-volume/snips-volume.py
MQTT connected
Traceback (most recent call last):
  File "/opt/snips-volume/snips-volume.py", line 96, in <module>
    client.loop_forever()
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 1578, in loop_forever
    rc = self.loop(timeout, max_packets)
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 1072, in loop
    rc = self.loop_read(max_packets)
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 1374, in loop_read
    rc = self._packet_read()
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 2071, in _packet_read
    rc = self._packet_handle()
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 2560, in _packet_handle
    return self._handle_publish()
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 2759, in _handle_publish
    self._handle_on_message(message)
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 2902, in _handle_on_message
    callback(self, self._userdata, message)
  File "/opt/snips-volume/snips-volume.py", line 48, in on_set
    set_volume(volume)
  File "/opt/snips-volume/snips-volume.py", line 35, in set_volume
    mixer = alsaaudio.Mixer()
alsaaudio.ALSAAudioError: Unable to find mixer control Master,0 [default]


Einfacher FHEM Anwender auf Intel®NUC

Thyraz

Ok, irgendwas ist also anders als bei mir. ;)
Wäre auch zu einfach gewesen, wenn das auf Anhieb so geklappt hätte...

Kannst du mal folgendes bei dir im Terminal eingeben:
1)

sudo python3

2) Ab jetzt bist du in der Python Konsole:

import alsaaudio

3)

mixer = alsaaudio.Mixer()

4)

volume = mixer.getvolume()

5) Folgendes sollte dann irgendwas Sinnvolles ausgeben: (Bei mir kommt dann [72, 72])

volume

6) Verlassen kannst du die Python Konsole dann so:

exit()


Mal sehen ob das Licht ins Dunkel bringt ...
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

enno

pi@snipes:~ $ sudo python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import alsaaudio
>>> mixer = alsaaudio.Mixer()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
alsaaudio.ALSAAudioError: Unable to find mixer control Master,0 [default]
>>> volume = mixer.getvolume()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mixer' is not defined
>>> volume
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'volume' is not defined
>>>
Einfacher FHEM Anwender auf Intel®NUC

noname41

Hi,

ich wollte gerade das FHEm-Modul installieren und bekomme folgende Fehlermeldung:
reload: Error:Modul 10_SNIPS deactivated:
Excessively long <> operator at ./FHEM/10_SNIPS.pm line 21.

Excessively long <> operator at ./FHEM/10_SNIPS.pm line 21.

wie kann ich das Lösen?
Danke und LG

Thyraz

Zitat von: enno am 06 September 2018, 20:50:51

>>> mixer = alsaaudio.Mixer()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
alsaaudio.ALSAAudioError: Unable to find mixer control Master,0 [default]


Ok, er findet also nichtmal den Mixer für deine Soundkarte. :-\

Kannst du mal deine /etc/asound.conf posten und die Ausgabe von sudo aplay -l

Bin mal gespannt ob man das dann überhaupt generisch für alle User hinbekommt,
oder ob man das editieren muss je nach verwendeter Soundkarte.
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: noname41 am 06 September 2018, 21:14:24
wie kann ich das Lösen?

Hallo noname41,
hast du die aktuelle Version von Github?
Ist dein FHEM auch recht aktuell?

Auf Github ist Line 21 Teil dieser Hash Definition:

my %sets = (
    "say" => "",
    "play" => "",
    "updateModel" => "",
    "textCommand" => "",
    "volume" => ""
);

Da ist eigentlich nichts Verdächtiges bei.
Finde es auch komisch, dass er eine Zeile mitten in der Definition anmeckert.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...