Sprachsteuerung mit Snips

Begonnen von PapaRiX, 18 Mai 2018, 13:08:15

Vorheriges Thema - Nächstes Thema

PapaRiX

Hallo beisammen!

Habe mir auf einem Raspi 3B+ jetzt mal ein Snips draufgepackt und angefangen damit rumzuspielen.
Die Kommunikation könnte schön über MQTT-DEVICE und expantJSON funktionieren.
Allerdings habe ich Schwierigkeiten mit expandJSON und/oder der Tatsache, dass das Topic von snips hermes/intent/[user:intentname] heißt.
ich bin nicht sonderlich fit in Pearl aber ich habe das Gefühl, dass das ":" im Topicnamen ein Problem ist.

Ich kann also im MQTT-DEVICE kein

attr SNIPS_MQTT_DEVICE subscribeReading_DINGS hermes/intent/paparix:intentname

machen, weil ich dann die Fehlermeldung bekomme "topic may not be empty"
alternativ kann ich mit

attr SNIPS_MQTT_DEVICE autoSubscribeReadings hermes/intent/+

zwar die readings für paparix:intentname sehen, allerdings habe ich da auch das ":" im Topic und komme dann nicht mit expandJSON weiter.

Hier jetzt meine Fragen:
1) Hat jemand schon mehr Erfahrungen mit der Snipssprachsteuerung und der Integration in FHEM gemacht?
2) ich komme generell mit expandJSON nicht klar, gibt's irgendwo schönere Beispiele, die mir helfen können, das besser zu verstehen?

Ich finde Snips sehr interessant auch wenn die Installation von snips und eines Assistenten noch etwas Einfacher gehen müsste. Aber das Konzept einer zuverlässigen Sprachsteuerung, ohne dass mein Gesagtes in die Cloud muss, schon erst mal sympathisch. Alleine, dass ich momentan meine Lichter ohne Internet nicht mit Sprache steuern kann ist schon doof.

Aktuell habe ich auch noch kein brauchbares Raummikro, somit weiß ich noch nicht, ob die Performance mit meinem echo dot vergleichbar ist.
Preislich wird es allerdings schwierig, mit snips die 40€ eines echo dot zu unterbieten.
Meinungen, Ideen, Vorschläge, Erfahrungen?

MadMax-FHEM

Vielleicht ist ja da passende HW etc. dabei: https://forum.fhem.de/index.php/topic,85479.msg778627.html#msg778627

Kurz da nur Handy...

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)

PapaRiX

Bin mit expandJSON etwas weitergekommen.

mit
define ej3 expandJSON SNIPS_MQTT_DEVICE.*:.*:.{.*}
bin ich weitergekommen. Ich habe zwar keine ahnung was das .*:.*{.*} macht... aber okay  ;D
Auch wenns nicht wirklich schön ist habe ich jetzt alle info, die ich brauch um die Daten, die von snips kommen mit ein paar notifys zu verwursten.

Was Grenzflächenmikros angeht, habe ich mir überlegt einfach mal ein günstiges von Amazon zu probieren, bevor ich 60€ für eine Matrix ausgebe.
Die leute von snips haben mal ein Benchmark gemacht https://medium.com/snips-ai/benchmarking-microphone-arrays-respeaker-conexant-microsemi-acuedge-matrix-creator-minidsp-950de8876fda darin ist die PS3 eye kamera mit sehr guten ergebnissen aufgefallen. Das gerät gibts bei ebay so um die 10€, wäre also auch eine überlegung wert...

denis.robel

Hallo PapaRiX ,

Das Snips Projekt finde ich auch sehr interessant.
Kannst Du mal kurz beschreiben, wie man das mit FHEM verbinden kann?

So wie ich das sehe kann man einen Assistenten zusammenstellen, der die verschieden Kommandos ausführt.

Wie ist dann die Schnittstelle zu FHEM? Gibt es dazu schon ne Dokumentation, wie das funktionieren könnte?

VG aus L.

Denis
VG

Denis

Thyraz

Klingt interessant. Werde das die Tage auch mal testweise installieren.  :)
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

#5
Bin sehr begeistert.

Dadurch, dass man den Intents beibringt, welche Gerätenamen es gibt und die AI mit verschiedensten Beispielsätzen trainiert,
klappt die Erkennung unglaublich gut.
Auch bei etwas lauter laufendem Radio klappt das bisher sehr gut.

Auch die gebotenen Features gefallen mir sehr.

Neben einfachen Sprachbefehlen, Text to Speech (Die Stimme ist etwas holprig, aber habe schon Anleitungen gesehen um Amazon Polly einzubinden) und Abspielen von Audiofiles kann man auch aufwändigere Unterhaltungen realisieren.
Eine neue Unterhaltungen kann auch von Snips angetriggert werden, ohne dass man zuerst das Hotword oder etwas anderes sagen müsste.

Ebenfalls schön: Man kann "Satellites" hinzufügen um weitere Räume abzudecken.
Bei jedem Sprachbefehl bekommt man mitgeliefert in welchem Raum das war.
"Mach die Deckenlampe an" im Büro gesprochen kann also was anderes ausführen als wenn ich im Wohnzimmer stehe.
Kann aber theoretisch auch von dort mit "Mach die Deckenlampe im Wohnzimmer an" das selbe erreichen.

Wird bei mir auf alle Fälle Alexa ersetzen. Hier ist dann echt jeder Blödsinn an Fragen/Antworten möglich.
Und das vor allem ohne einen bestimmten Skill bei der Anrede nennen zu müssen.

Ich hab übrigens das 10€ PS3 Eye mit seinen 4 integrierten Mikrofonen gekauft.
Kann nach ersten Tests keinerlei Nachteile in Reichweite oder bei Musik im Hintergrund ggü. meinen Echo Dots erkennen.
Man könnte also recht kostengünstige Satellites mit einem Pi Zero, Mini-Lautsprecher mit USB-Stromversorgung und dem PS3 Eye bauen.

Werde die Tage überlegen wie ein Modul am Besten aufgebaut sein muss um irgendwann alles nutzen zu können.
Wahrscheinlich als weiteres Client-Modul für 00_MQTT.

edit:
Was auch nett ist:
Man bekommt auch mit wann das Hotword gehört wurde, bzw. wann Snips zuhört.
Bei Alexa hatte ich immer das Problem, dass ich die Musik nicht leiser drehen konnte solang die Musik nicht über den Echo Dot lief.

Mit Snips werde ich dann einfach den AV-Recevier leiser drehen wenn er an ist und dann ist egal ob ich Radio höre, fernsehe oder Musik übers Handy auf die Anlage streame.

Das sollte die Erkennung auch nochmal besser machen.
Man muss im schlimmsten Fall beim Hotword etwas schreien, den Rest kann man dann bei gedämpfter Musik normal sagen.


edit2:
Habe gerade auch mal ein paar Sendernamen in einem Intend hinzugefügt wie
- S.W.R. 3
- R. T. L.
- Big F.M.
- Das Ding
Klappt auch wunderbar. :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

der-Lolo


Ma_Bo

Ich lese auch mal mit, klingt sehr interessant...
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Thyraz

Hab das Modul soweit, dass es einen On-Off Intent steuern kann.
Allerdings müssen die Geräte aktuell noch ein snipsName und snipsRoom Attribut tragen, ein Fallback auf Alias oder Name ist noch nicht drin.

Wird auf alle Fälle auch eine ordentliche Doku erfordern, da man Snips natürlich auch entsprechend einrichten muss.
Man ist hier ja recht frei in der Wahl von IntentName, Slotnamen usw.
Ich erwarte im Moment einen Intent mit dem Namen "On" (angelehnt an HomebridgeMapping) und für diesen die 3 Slots "Device", "Value" und "Room" (optional).

Aber für Nutzer die das bereits bei sich konfiguriert haben oder einen vorgefertigten SmartHome Skill verwenden, lässt sich das ja evtl. auch über ein Attribut "IntentMapping" lösen nach dem Schema:

On=<MyOnIntent>,Room=<MyRoomSlot>,Device=<MyDeviceSlot>,Value=<MyValueSlot>


Bei On / Off hat man es in FHEM ja auch noch recht leicht, da diese Befehle bei allen Modulen einheitlich sind.
Aber schon beim Dimmen wird es ja schwerer durch pct/dim/etc. Readings und Set Befehlen.

Denke ich werde mich hier an Andre (justme1986) halten, damit das ganze auf ein evtl. schon vorhandenes homeBridgeMapping Attribut in den Geräten zugreift.
Das wird ja bisher auch schon mit Alexa geteilt.

Wird noch einiges an Arbeit. :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

der-Lolo

Snips versteht nur Englisch, oder?

Thyraz

Nein, die Doku ist bei denen an manchen Stellen nicht ganz aktuell.

Mittlerweile sind alle Teile von Snips (Texterkennung, Intent Parsen, Text2Speech) in Deutsch verfügbar und funktionieren in deutscher Sprache auch einwandfrei.

Hab Snips bei mr auch nur auf Deutsch im Einsatz.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mark79

Ich spiele auch schon seit ein paar Tagen damit rum, aber ich komme nicht weiter:

root@snips2:~# sam install assistant
Fetching assistants done
Found 1 assistant named snips
Downloading assistant
Fetching assistants done
NLU training done
ASR training done
✔ Deploying assistant to localhost...
Checking for skills
Generating virtual environment for python actions done
i Error setting up virtualenv, it might cause an issue on one of your action. It might also be caused by an invalid character in your skill name, reason : Could not find a version that satisfies the requirement hermes_python>=0.1 (from -r requirements.txt (line 1)) (from versions: )
No matching distribution found for hermes_python>=0.1 (from -r requirements.txt (line 1))
  Could not find a version that satisfies the requirement hermes_python (from -r requirements.txt (line 7)) (from versions: )
No matching distribution found for hermes_python (from -r requirements.txt (line 7))
Relaunching snips-skill-server
✔ Snips assistant is now running. Say hey_snips to start!
i Run sam watch to see the logs


root@snips2:~# pip2 install hermes
Requirement already satisfied: hermes in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: xmpppy>=0.5.0rc1 in /usr/local/lib/python2.7/dist-packages (from hermes)


Ich habe snips in einem Debian LXC Container auf einen Rock64 laufen (ARM).
Hat da jemand vielleicht ein Tipp?

Viele Grüße
Mark
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

Hab es bei mir bisher nur auf dem NUC installiert,
nach der Anleitung hier für AMD64: https://snips.gitbook.io/documentation/advanced-configuration/advanced-solutions

Bei ARM wärst du ja näher an der Standard-Installation für den Raspberry denke ich.
Wie hast du es denn installiert und was für ein Debian nutzt du dafür im Container?

Wenn du hier oben auf Documentation klickst:
https://snips.gitbook.io/documentation/

kommst du zum Discord Chat.
Evtl. dort mal nachfragen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mark79

Hey danke dir. Im Discord Chat hatte ich schon nachgefragt, aber ich warte noch auf eine Antwort.

Bzgl. snips, ich habe snips und den LXC Container gefühlt 5 mal neuinstalliert, das scheint irgendwie echt zickig zu sein.
Derzeit läuft es in einem Debian Stretch 32 Bit System (arm). Ich habe auch mal Ubuntu versucht, aber dafür gab es keine Pakete.

Es gab vorher mehrere Probleme, erst das es keine arm64 Pakete für snips gibt. Danach habe ich ein arm32 bit LXC Container aufgesetzt, auf einem arm64 Hauptsystem.

Danach ging später sporadisch die "Hey Snips" Erkennung nicht mehr im Container und da frage ich mich immer noch, ob man den Sound nur in einem Container betreiben kann oder ob man diesen in mehreren Container teilen kann.
Einmal hatte ich z.B. auch das Problem im Fhem Container, das die TTS Ausgabe eine Micky Mouse stimme hatte. Also die Wiedergabe schneller abgespielt wurde, obwohl im Snips Container keine Sprachausgabe stattgefunden hat.

Ganz oft hatte ich auch das Problem, das "sam" nicht mehr ausführbar war.
Aber das lag daran, das ich die Console via lxc-attach geöffnet hatte. Mit SSH direkt im Container eingeloggt ging das dann komischerweise, aber da muss man erstmal drauf kommen...  ::)

Jetzt hänge ich halt diesen Python Fehler fest, in google findet man darüber nix. Ich werde einfach mal abwarten was die im Chat schreiben. Und morgen werde ich snips mal auf eine x86 VM installieren, scheint ja doch recht intressant zu sein. :)

Geht bei dir mit dem PS3 Eye eigentlich der alsamixer? Ich erhalte immer ein Fehler: cannot load mixer controls: Invalid argument
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

#14
Das System auf das die sich im Moment für die frühen Tester konzentrieren ist halt der Pi3 fürchte ich.
Mit dem dürfte die Installation sehr einfach sein.

Die Debian x86 (AMD64) Installation hatte bei mir auch ein paar Probleme, da die Software ein paar Abhängikeiten hat,
welche das Package nicht aufführt.
Dadurch musste ich ein paar Sachen nachinstallieren bevor es lief.

Alsamixer läuft dafür problemlos mit dem PS3 Eye bei mir.

Ich poste hier mal meine Schritte zur x86 Installation im Proxmox LXC Container.
Evtl. hilft das ja dem einen oder anderen:

Zitat
Debian Jessie (8.0) installieren
Nicht Stretch verwenden, das Snips Repo für x86 ist dafür noch nicht angepasst.

Non-Free Packages für Debian freischalten:
sudo nano /etc/apt/sources.list
in jeder Zeile hinter "contrib" ein "non-free" anhängen

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install lsb-release apt-transport-https ca-certificates  systemd systemd-sysv libttspico-utils alsa-utils

Reboot wegen systemd Installation

PS3 eye einstecken und mit arecord -l schauen als welches hw:x:x das Gerät im System erkannt ist.

Testaufnahme:
sudo arecord --device=hw:1,0 -f S16_LE -c 4 -r 16000 -d5 test.wav
Dann z.B. über SFTP auf den Rechner kopieren und schauen ob etwas aufgenommen wurde.

sudo nano /etc/asound.conf anpassen (bei capture.pcm auch wieder die passende hw:x,x eintragen):
pcm.!default {
  type asym
   playback.pcm {
     type plug
     slave.pcm "hw:2,0"
   }
   capture.pcm {
     type plug
     slave.pcm "hw:1,0"
   }
}

Installation wie here beschrieben:
https://snips.gitbook.io/documentation/advanced-configuration/advanced-solutions
Dann noch sudo apt-get install snips-watch

Assistant auf
https://console.snips.ai
konfigurieren und runterladen.
Entpacktes assistant Verzeichnis als /usr/share/snips/assistant speichern

Snips neu starten:
sudo systemctl restart "snips-*"

Lautstärke mit ,,alsamixer" einstellen. Speichern der Lautstärke mit:
sudo alsactl store

Danach snips-watch starten und das Hotword sprechen.
Man sollte nun die Logausgaben fürs Aktivieren des Hotwords oder das Erkennen von gesprochenem Text zu sehen bekommen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...