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

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

Vorheriges Thema - Nächstes Thema

enno

Zitat von: Thyraz am 11 September 2018, 11:03:43
@enno, ihr seid aber schnell genervt von den Ausgaben.  ;D
@Thyraz: Keine Sorge, ich komme damit klar 8) Mich belastet eher die Reaktion meiner Mitbewohnerin ;D auf die Ansagen. Wenn ich nach Hause komme muss ich den Lautsprecher erst wieder aktivieren, weil er von einer der Sprachsteuerung nicht so aufgeschlossenen Person ausgestöpselt wurde. Zitat:"Dein Tamagotschi quatscht hier die ganze Zeit dazwischen, und versteht mich nicht. Da habe ich ihm den Stecker gezogen."
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Thyraz

Zitat
root@snips:/opt/snips-volume# python3 snips-volume.py
MQTT connected
volume=70

root@snips:/opt/snips-volume# alsamixer
cannot load mixer controls: Invalid argument
root@snips:/opt/snips-volume# python3 snips-volume.py
MQTT connected
70

root@snips:/opt/snips-volume# alsamixer
root@snips:/opt/snips-volume# python3 snips-volume.py
MQTT connected
siteId="default" volume="50"


Ich hab noch etwas Probleme die Ausgabe zu verstehen.
Sind das rote Ausgaben des Scripts, oder soll das andeuten, dass du zu dem Zeitpunkt einen Volume Befehl in FHEM abgesetzt hast?
Falls es Ausgaben sind: stürzt das Script danach ab, oder beendest du es z.B. mit STRG+C bevor du alsamixer aufrufst?

Alsamixer lässt sich aber normal schon öffnen auf dem System, oder?
Weil da einmal "cannot load mixer controls: Invalid argument" auftaucht.

MQTT scheint ja erfolgreich zum Server zu connecten laut Logausgabe.
Somit gibt es an sich 2 Dinge die schief gehen können:

Die Nachrichten von MQTT kommen im Skript nicht an (z.B. weil er für die falsche siteID abonniert oder warum auch immer),
oder das setzen der Volume klappt nicht.

Problem 2 lässt sich recht einfach testen.
Wenn das nicht geht, kann ich dir noch eine Version bastelt die mehr Logzeilen ausgibt um den Fehler zu finden.

Das Script stoppen, Lautstärke per alsamixer auf 0 stellen. Dann im Terminal eingeben:

sudo python3

>>> import alsaaudio

>>> mixer = alsaaudio.Mixer()
oder falls es ein Raspberry Pi ist:
>>> mixer = alsaaudio.Mixer('PCM')

>>> mixer.setvolume(100)

>>> exit()


Danach nochmal man in alsamixer sehen, dass die Lautstärke entsprechend angepasst wurde.
Wenn das passt, sollte zumindest mal der Alsa Teil des Scripts laufen.
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: enno am 11 September 2018, 11:47:36
Mich belastet eher die Reaktion meiner Mitbewohnerin ;D auf die Ansagen

Haha, das kann ich gut nachvollziehen.  ;D
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ahlermi

Alsamixer stürzt ab wenn ich auf Soundkarte PS3Eye wechsle, wohl normal.

MQTT connected is eine Ausgaben.

Alles andere aus dem Log sind Eingaben.
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

Neuhier

Schon mehrfach beschrieben: PS3Eye ist nicht im Alsamixer einstellbar.
Kann ausgewählt werden, kommt aber dann zu dem Absturz, wie Du ihn beschrieben hast.

Thyraz

Zitat von: ahlermi am 11 September 2018, 13:13:35
Alles andere aus dem Log sind Eingaben.


volume=70
70
siteId="default" volume="50"

Das sind dann Eingaben im Modul unter set volume?

Syntax muss immer so sein, wie beim letzten Beispiel.
Wenn nicht siteId UND volume in den Parametern gefunden werden, macht das Modul nichts.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ahlermi

ne, die habe ich in die Konsole geschrieben, dachte der Test würde so gehen.


root@snips:/opt/snips-volume# systemctl restart [snips-*]
root@snips:/opt/snips-volume# systemctl stop snips-volume.service
root@snips:/opt/snips-volume# python3 snips-volume.py
MQTT connected



wenn ich nun über das Modul was schicke

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

passiert auch nix
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

enno

Zitat von: ahlermi am 11 September 2018, 15:20:34
passiert auch nix

Mach mal eine zweite Konsole (in der ersten python3 snips-volume.py weiter laufen lassen) auf und starte dort alsamixer. Wenn du jetzt über FHEM die Kommandos sendest, tut sich was beim Mixer?

set Snips volume siteId="default" volume="50"
set Snips volume siteId="default" volume="10"
set Snips volume siteId="default" volume="100"
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

ahlermi

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

Thyraz

Hast du das hier unten im Post mal getestet?
Denn Code zum Lautstärke ändern direkt in die Python Konsole eingeben:

https://forum.fhem.de/index.php/topic,89548.msg835217.html#msg835217

Um zu sehen ob der Teil an sich zumindest funktioniert?
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

marwal

Guten Abend zusammen,

vielen Dank im Voraus für dieses tolle Modul! Ich habe es vorerst in meiner Testumgebung eingebunden und erste erfolgreiche Schaltungen durch Snips umsetzen können. Jedoch habe ich ein Problem bei der Spracherkennung. Im Einsatz ist ein Rpi3 + PS3eye.
Im Snips-room befinden sich derzeit eine Lampe (Milight) und ein Lautsprecher (Sonos). Bei der Lampe klappt sowohl das Ein- und Ausschalten, sowie dimmen, als auch die Statusabfrage problemlos, wenn - ich den snipsNamen Lampe im Sprachkontext verwende. Als snipsName im Device sind "Kugel,Lampe,Licht" hinterlegt. Spreche ich z.B. "Kugel", versteht er alles, nur nicht "Kugel". Gesteigert hat sich das ganze bei der Sonos, da erhalte ich mit den snipsNamen "Sonos,Musik,Lautsprecher" immer nur ein "unknownword" im Reading. Sage ich Beispielsweise "Kiste" erkennt Snips "dnister" (der Name war bis dato nicht hinterlegt). Füge ich "dnister" den snipsNamen hinzu, schaltet er die Sonos wie gewollt an und aus. Muss ich die Wörter noch an einer anderen Stelle hinterlegen?

Zudem habe ich in meinem Snips-Device als STATE dauerhaft ein ???. Ging hier bei der Installation evtl. schon was schief, oder ist das Verhalten normal?

Anbei ein list vom Snips


Internals:
   DEF        SnipsMQTT Wohnzimmer
   IODev      SnipsMQTT
   MODULE_VERSION 0.2
   NAME       Snips
   NOTIFYDEV  SnipsMQTT Wohnzimmer
   NR         106
   STATE      ???
   TYPE       SNIPS
   READINGS:
     2018-09-11 22:23:55   lastIntentPayload {"Device":"dnister","Value":"an","input":"schalte unknownword dnister an","intent":"SetOnOff","probability":"0.8032369","requestType":"voice","sessionId":"916d78bc-1f11-427a-81ca-23726456328b","siteId":"default"}
     2018-09-11 22:23:55   lastIntentTopic hermes/nlu/intentParsed
     2018-09-11 22:23:56   listening_wohnzimmer 0
     2018-09-11 22:23:56   transmission-state incoming publish received
     2018-09-11 22:23:55   voiceResponse   Ok
   helper:
     defaultRoom Wohnzimmer
   message_ids:
   subscribe:
     hermes/intent/+
     hermes/nlu/intentParsed
     hermes/hotword/+/detected
     hermes/hotword/toggleOn
   subscribeExpr:
     ^hermes\/intent\/([^/]+)$
     ^hermes\/nlu\/intentParsed$
     ^hermes\/hotword\/([^/]+)\/detected$
     ^hermes\/hotword\/toggleOn$
   subscribeQos:
     hermes/hotword/+/detected 0
     hermes/hotword/toggleOn 0
     hermes/intent/+ 0
     hermes/nlu/intentParsed 0
Attributes:
   IODev      SnipsMQTT
   room       Snips
   verbose    5

Neuhier

Hatte ich auch schon gefragt: Status ist nicht vergeben, bleibt bei den Fragezeichen.
Geht aber trotzdem.

marwal

Danke @Neuhier ... Dann sollte das soweit passen  ::) Bleibt noch die Frage der Spracherkennung. Hast du die gesprochenen Namen noch wo anders hinterlegt, oder vergleichbare Probleme?

Neuhier

Habe die benötigten Bezeichnungen, im Assistenten in Snips.ai, in den Slots eingetragen.

Thyraz

@marwal hast du den Set-Befehl updateModel nach dem Hinzufügen ausgeführt?
Und ist snips-asr-injection installiert und läuft?

edit: @Neuhier das ist aber nicht die empfohlene Herangehensweise.
Dazu musst du den FHEM Skill auf console.snips.ai forken und bekommst dann keine automatischen Updates mehr.
Bei einem manuellen Update (geforkte App und alle geforkten Intents löschen -> neu hinzufügen -> wieder forken) müsstest du außerdem alle Änderungen wieder machen.

Die neuen Gerätebezeichnungen über einen Inject zur Spracherkennung hinzuzufügen (ausgelöst über den updateModell Befehl im Fhem Modul) wäre der normale Weg.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...