Was ist SnipsSnips ist ein Sprachassistent ähnlich Siri oder Alexa.
Die Besonderheit an Snips ist, dass es nach der Installation komplett Offline betrieben wird.
Es wir also keine Sprache zur Erkennung an einen Server im Internet geschickt.
Die Anbindung weiterer Räume ist über sogenannte "Satelliten" möglich.
Dies kann z.B. ein Pi Zero mit Mikro und Lautsprecher sein.
https://snips.aiWas ist mit dem Modul möglichMit von mir vorgefertigten Intents können:
- Geräte geschaltet werden
- der Status von Geräten abgefragt werden
- Stellwerte für Dimmer, Rollläden, Thermostate gesendet werden (oder was sich eben sonst auf einen numerischen Wert setzen lässt)
- Numerische Werte abgefragt werden wie z.B. Temperatur, Luftfeuchtigkeit, ...
- Multimedia Befehle (Play, Pause, ...) gesendet werden
- Wiedergabe oder Wechsel von Sendern / Favoriten / Kanälen / ...
- Lichtfarbe z.B. von HUE Lampen ändern
Dies wird über ein Attribut ähnlich dem von Homebridge und AlexaFhem bekannten homebridgeMapping gesteuert.
Zusätzlich gibt es die Möglichkeit,
eigene Intents einzubinden und dann die per Sprache übergebenen Parameter (z.B. Gerät, Wert, ...) an eigene Perl-Funktionen zu übergeben.
Dies entspricht mehr oder weniger den erweiterten Möglichkeiten im CustomSkill von AlexaFhem, womit sich auch ausgefallenere Wünsche realisieren lassen sollten.
Außerdem ist TextToSpeech möglich und bald auch die Wiedergabe von Audiodateien.
Was brauche ich für Hardware?Snips lässt sich unter Linux bisher auf einem Raspberry mit Raspbian (Debian Stretch), oder auf x86 unter Debian Stretch nutzen.
https://snips.gitbook.io/documentation/installing-snipshttps://snips.gitbook.io/documentation/advanced-configuration/advanced-solutionsMan braucht zusätzlich ein Mikrofon, nach Möglichkeit ein Mikrofon-Array / Far-Field Microphone wie z.B. das ReSpeaker Mic Array.
Als sehr gute Lösung für kleines Geld hat sich hier das "PS3 Eye" herausgestellt. Eine Webcam mit 4 Mikrofonen, welche unter Linux ohne extra Treiber als Micro erkannt wird. Ist bei Amazon für knappe 10€ erhältlich.
Zusätzlich noch einen Lautsprecher für die Sprachausgabe.
Installation in FHEMModul hier herunterladen:
https://github.com/Thyraz/Snips-FhemDIE README AUF GITHUB LESEN! 
Denn die erklärt was alles konfiguriert werden muss und wie.
BeispieleDefinition in FHEM (genauer erklärt in Readme auf Github):
define SnipsMQTT MQTT <ip-or-hostname-of-snips-machine>:1883
define Snips SNIPS SnipsMQTT Wohnzimmer
Attribut snipsMapping von einem Dimmer bei mir:
SetOnOff:cmdOn=on,cmdOff=off
GetOnOff:currentVal=state,valueOff=off
SetNumeric:currentVal=brightness,cmd=dim,step=20,type=Helligkeit
GetNumeric:currentVal=brightness,type=Helligkeit
Attribut snipsMapping von einem Thermometer bei mir:
GetNumeric:currentVal=temperature,type=Temperatur
GetNumeric:currentVal=humidity,type=Luftfeuchtigkeit
Status:response=Die Temperatur beträgt [ThermoWZ:temperature] Grad bei [ThermoWZ:humidity] Prozent Luftfeuchtigkeit.
Die einzelnen Intents, das zugehörige Mapping und dessen Optionen sind auch in der Readme auf Github erklärt.
TroubleshootingSollte das Ganze nicht wie gewollt funktionieren, empfiehlt es sich zuerst die Readings im Snips Device anzuschauen.
Hier sollte (nachdem ihr über Snips einen Befehl gesprochen habt) 2 Readings auftauchen:
- lastIntentTopic
- lastIntentPayload
Ansonsten bekommt man noch weitere Infos wenn man beim Snips Device Verbose 5 einstellt und schaut ob bei Sprachbefehlen etwas im Log auftaucht.
Sollte auch hier nichts kommen, auch beim MQTT Server Device Verbose 5 einstellen und schauen ob da etwas im Log erscheint.
Wenn nicht, erstmal hier ansetzen und schauen warum das MQTT Device nicht funktioniert.
Wenn die Readings im Modul ankommen aber dennoch nichts passiert, hängt es höchstwahrscheinlich an der Konfiguration des zu schaltenden Geräts.
Hier nochmal kontrollieren ob es im Raum Snips ist und die Attribute snipsName, snipsRoom und snipsMapping passen.
Bei Fragen zum Mapping bitte ein list vom Snips Device und des nicht funktionierenden Geräts mit posten.
Versionsverlauf / Änderungen03.09.2018: Neue Syntax say-Befehl. Möglichkeit Perl-Code in Commands und für Readings zu verwenden.
30.08.2018: Neuer Intent MediaChannels
29.08.2018: Neuer Intent MediaCommands
26.08.2018: Attribut errorResponse eingeführt ("disabled" deaktivert die Fehlerrückmeldungen)
26.08.2018: Unbekannte Intents werden ignoriert, damit sich das Modul nicht mit parallel installierten Snips-Apps beißt
24.08.2018: Cmds und Readings im Mapping können nun auch im Format Device:Reading bzw. Device:cmd auf andere Geräte verweisen.
23.08.2018: Readings "listening_*" hinzugefügt, damit man z.B. Musik muten kann während Snips lauscht
22.08.2018: Neuer Intent "Status"
18.08.2018: Neuer Set-Befehle "textCommand" um Snips über Text zu steuern (z.B. mit TelegramBot)
17.08.2018: Über Fhem automatisch eure Geräte- und Raumnamen in den Assistenten injizieren. Forken der App nicht mehr nötig.
17.08.2018: Neues snipsMapping Format. Siehe Github Readme und Beispiele in diesem Post
26.07.2018: Abfrage von numerischen Werten nur über Raum und Type ohne das Gerät explizit nennen zu müssen
25.07.2018: Custom Intents können nun in eigenen 99_myUtils Perl-Funktionen verarbeitet werden
23.07.2108: Die Intent-Option map und part funktionieren jetzt
21.07.2108: Erste Beta veröffentlich
Was in der aktuellen Version noch nicht geht- Der Play Befehl zum Abspielen von Audiodateien geht bisher noch nicht (TextToSpeech geht aber schon)