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

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

Vorheriges Thema - Nächstes Thema

marwal

@Neuhier: nur zum Verständnis:
Für ein Training Examples steht: Schalte Standardgerät im Standardraum ab
Dann hinterlege ich in den Slots für jedes "Standardgerät" einen Slot. Muss ich dann auch für jedes "Standardgerät" ein neues Training Examples erstellen, mit unterschiedlicher Verknüpfung?

danke @Thyraz
Zitathast du den Set-Befehl updateModel nach dem Hinzufügen ausgeführt?
habe ich so umgesetzt!
ZitatUnd ist snips-asr-injection installiert und läuft?
ich glaube da liegt der Hund begraben!

Was bewirkt snips-asr-injection?

Danke - Martin

Thyraz

@marwal:

das Vorgehen welches Neuhier beschreibt ist das alte, welches vor ASR-Injection gemacht werden musste.
Nach jedem Update der FHEM App (zur Zeit noch sehr oft  :P) musste man die App neu forken und seine Gerätenamen etc. in die Slots eintragen.

Das ist ein erheblicher Aufwand und nicht wirklich wünschenswert.
Wenn man die App nicht forked, erhält man Updates automatisch wenn man eine neue Version des Assistenten installiert.

Dann haben wir die Möglichkeit gefunden bei einem bereits installiertem Assistenten neue Begriffe zu den Slots hinzuzufügen.
Über eine MQTT Nachricht an Snips.

Ihr müsst euch also nicht mehr darum kümmern, dass Snips eure Geräte- und Raumbezeichnungen etc. kennt.
Das Modul übernimmt das durch den Befehl updateModel.

Das funktioniert aber nur, wenn das Snips Modul zum ASR-Inject installiert ist und der Service auf dem Rechner auch läuft.
Die Installation ist in der Doku im Kapitel Snips Installation -> Wichtig: ASR Injection installieren zu finden:
https://github.com/Thyraz/Snips-Fhem/blob/master/README.md#wichtig-asr-injection-installieren

Danach nochmal updateModel ausführen und erneut testen.
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

@Thyraz,

ok, dann werde ich die Änderungen im Assistenten verwerfen und entsprechend https://github.com/Thyraz/Snips-Fhem/blob/master/README.md#wichtig-asr-injection-installieren umsetzen, testen und berichten! Derzeit ist meine App auch forked - wenn es ohne Änderungseinspielung komfortabler zu realisieren geht, ist es umso besser!

Vielen Dank - Martin

ahlermi

Zitat von: Thyraz am 11 September 2018, 17:02:56
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?

das klappt.
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

ahlermi

Das Talk2Fhem Modul ist schon sehr mächtig, aber auch eine menge Arbeit die ganzen Regexes zu definieren.

Ist es auswändig die SNIPS Spracherkennung direkt anzuzapfen? Quasi einfach alles gesagte zu bekommen ohne einen Assistenten.

ZitatFahre um 14 Uhr die Rollläden an der Terrasse runter und schalte dann in 2 Minuten die Bewässerung an

ZitatMach am Freitag um 5 Uhr die Heizung aus und in einer Woche wieder an

ZitatRollos im Wohnzimmer, Esszimmer und in der Küche auf 70

Das ist wirklich wie reden und die Antworten sind auch frei zu definieren.
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

tomster

Ich hab mich nun auch einmal an der Text-Ausgabe von Werten versucht. Erkannt wird meine Eingabe schon, aber die voiceResponse ist etwas, nun sagen wir Mal, kryptisch...
snipsDevice: P H Wert
snipsRoom: Teich
snipsMapping: GetNumeric:currentVal=pHSnips

updateModel ist natürlich ausgeführt.

Wenn ich sage: "Wie ist der P H Wert im Teich", erkennt Snips korrekt:

{"Device":"p h wert","Room":"teich","input":"wie ist der p h wert im teich","intent":"GetNumeric","probability":"0.5696849","requestType":"voice","sessionId":"3867e651-688f-4efe-9cd3-ab4714746433","siteId":"mirror"}


Die VoiceResponse ist aber:

Der Wert von HASH(0x559bbe8f8c20) beträgt 7,6.

Dummerweise liest Snips damit aber auch HASH(0x559bbf1ff840) vor. Mach ich was falsch?

enno

Zitat von: tomster am 12 September 2018, 08:47:54
snipsDevice: P H Wert

Ich habe bei einigen Device das snipsDevice so verbogen wie Snips es am besten versteht.

Bsp: "Radio FFN" wurde zu "radioefefen"

Vielleicht ist das eine Möglichkeit?
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

tomster

Zitat von: enno am 12 September 2018, 09:20:33
Ich habe bei einigen Device das snipsDevice so verbogen wie Snips es am besten versteht.

Bsp: "Radio FFN" wurde zu "radioefefen"

Vielleicht ist das eine Möglichkeit?

Hatte ich schon probiert. Gleiches Ergebnis.

Thyraz

Erkannt wird es ja auch ohne Probleme.
Daran kann es also nicht liegen.

Device und Room sind ja auch korrekt erkannt.
Muss also im Modul irgendwo schiefgehen.

Ich schau mir das mal im Code an.

@tomster kannst du evtl. das selbe nochmal mit verbose 5 (nur um Snips Modul, nicht global) laufen lassen und die Logausgabe posten?
Dann hab ich es evtl. etwas einfacher das zu finden.
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

Ok, ist ein Fehler im Code wenn kein Type bei GetNumeric bestimmt werden kann.
Hab da was doppelt-gemoppelt reinkopiert.

Neue Version ist auf Github, kannst mal testen ob es jetzt klappt.

Allerdings wird die Antwort dennoch komisch werden:
Der Wert von P H Wert beträgt 7,6

Du hast ja P H Wert als Device und nicht als Type (weil du das aktuell nicht auf einen eigenen Wert festlegen kannst).
Teich ist dagegen der Room obwohl das von der Logik her eigentlich das Device wäre.

Ist die Frage, ob ich den Slot für NumericType auch durch euch erweiterbar mache.
Sprich zusätzlich zu den allgemein gültigen Types, die eine etwas optimierte Sprachausgabe haben, gäbe es die Möglichkeit eigene Werte einzutragen.
Diese Werte dann eben auch wieder per ASR Inject dem zugehörigen Slot hinzufügen.

Sähe dann so aus in deinem Fall:
snipsname: Teich
snipsRoom: Garten
snipsMapping: GetNumeric:currentVal=pHSnips,type=P H Wert

Als Antwort würde ich dann eine allgemeingültige Sprachausgabe wählen,
welche vielleicht nicht ganz so "rund" klingt, dafür mit allen Benennungen einigermaßen funktioniert:
Zitattype von device beträgt value
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

tomster

Danke, das ging fix!

Zitat
Neue Version ist auf Github, kannst mal testen ob es jetzt klappt.
Geht, allerdings wir die Antwort genau wie von Dir beschrieben.
Zitat
Der Wert von P H Wert beträgt 7,6

Auch wenn ich mich mit dem Mappings bei den Intents noch nicht auseinandergesetzt habe, sollte ein simples

Status:response=Der Wert beträgt [Device:PHSnips].

nicht auch genügen um die Response "korrekt" zu formatieren?

--edit--
Geht das updateModel nicht mehr in der aktuellen Version? Ich hatte zwischenzeitlich den snipsName auf pehhahhwert geändert. Nun wieder auf P H Wert. Snips erkennt aber immer noch pehhahhwert...

Thyraz

Das Problem mit dem ASR Inject bei Snips ist, dass es nur hinzufügen, aber nicht entfernen bzw. Reset gibt. ;)
Die Macher von Snips haben aber schon gemeint sie bringen evtl. bald eine neue Version raus die das ermöglicht.

Der Inject geht aber verloren wenn du den Assistenten neu installierst.
Also über sam install assistant oder händisch runterladen und entpacken.

Danach dann den aktuellen Stand wieder mit updateModel einspielen.

edit:
Das Status Mapping greift eben auch nur beim Status Intent.
Wenn du snipsName Teich vergibst und "Status Teich" sagst, könntest du eine Rückmeldung nach dem Schema Der Teich hat einen P H Wert von x festlegen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

tomster

Zitat
Das Problem mit dem ASR Inject bei Snips ist, dass es nur hinzufügen, aber nicht entfernen bzw. Reset gibt. ;)
Die Macher von Snips haben aber schon gemeint sie bringen evtl. bald eine neue Version raus die das ermöglicht.
Das habe ich gerade auch schlußgefolgert und mich auf die Suche nach dem (vermutlich JSON)-File auf meiner Festplatte gemacht, in dem die Injections abgelegt werden. Hab ich noch nicht gefunden...
Zitat
edit:
Das Status Mapping greift eben auch nur beim Status Intent.
Wenn du snipsName Teich vergibst und "Status Teich" sagst, könntest du eine Rückmeldung nach dem Schema Der Teich hat einen P H Wert von x festlegen.
Klingt eigentlich selbsterklärend, nur hab ich's so nicht verstanden ;-)

ahlermi

Gute Info mit dem neu installieren, mein Wecker den ich einmal eingespielt habe hat mich auch geärgert
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

Ja, vielleicht sollte das bei der Doku in den Abschnitt zu ASR Injection.
Das Problem ist nur, dass die Doku eh schon so groß ist, dass sie wohl niemand wirklich am Stück lesen wird...  :P

edit: War sogar schon unter der Beschreibung von updateModel drin.
Nicht mal ich kenne also scheinbar die Doku.  ;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, ...