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

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

Vorheriges Thema - Nächstes Thema

tomster

Zitat von: kud am 20 August 2018, 15:00:47
Also mein Logeintrag sieht so aus
Injecting data to ASR: {"operations":[["add",{"de.fhem.Device":["rasenmäher","Temperatur","Wasser","Sensor","Licht"]}],["add",{"de.fhem.Room":["Wohnzimmer","Küche","Treppe","Garten","garten","Keller","Büro"]}]]

Spracheingabe : Wie ist die Temperatur im Wohnzimmer"

Sam-Watch :
[Asr] captured text "wie ist die temperatur im unknownword wärmer" in 3.0s
...
[Nlu] was asked to parse input wie ist die temperatur im unknownword wärmer


In meinem Verzeichnis /var/lib/snips gibt es nur ein Unterverzeichnis skills . Mehr ist nicht drin und ja ich habe apt-get install -y snips-asr-injection
ausgeführt.

Hast Du im FHEM-Snips-Device Mal ein set <Snips-Device> updateModel durchgeführt?

kud

 8) Sonst käme doch der Logeintrag Injecting ASR .... doch gar nicht .

jowe

Ich konnte nicht abwarten und habe per VPN die aktuelle 10_Snips.pm eingespielt. Und Dank der neuen textCommand Funktion konnte ich gerade von unterwegs testen: Funktioniert! Ich bin begeistert!

Thyraz

@jowe, heißt aber leider nicht, dass es mit ASR (also über Sprache) ebenfalls klappt.
Teste das daheim am Besten auch noch einmal.


@kud ich teste das mit dem String bei mir später auch mal.
In dem Verzeichnis sollte normal nach jedem Inject ein Unterordner erstellt werden mit dem Inhalt des Injects.

Der ASR Inject bricht also wohl ab.

@tomster schön, dass es bei dir klappt.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

kud

Ich habe bisher nicht darauf geachtet aber bei meinem SNIPS Device ist STATE auf "???" hat das was zu bedeuten?

mark79

Hallo Thyraz,

danke erstmal für die Tipps. Ich kann das auf dem Rechner, wo es Probleme macht erst Mittwoch wieder ausprobieren.
Vermutlich reicht es aber, wenn ich den Inhalt vom Verzechniss /var/lib/snips/injections/* lösche. Ich werde dann berichten. :)

Ich habe Snips gerade auf einem anderen Rechner (orange pi) frisch installiert und dort tritt der Fehler nicht auf.
Die Spracherkennung ist nun auch wieder normal. :)

[18:53:01] [Nlu] was asked to parse input "wie ist die temperatur vom thermometer im wohnzimmer"
[18:53:01] [Tts] was asked to say "Die Temperatur von thermometer beträgt 23 Grad."
[18:55:46] [Asr] captured text "Schalte den bilderrahmen aus" in 3.0s

Schon cool und macht es wirklich einfacher, die Sachen dort einzupflegen. :)


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

Roman

Hallo Thyraz,

auch von mir einmal Dank für das tolle Modul. Nach anfänglichen Problemen läuft das schon ganz gut.
Lichter, Rollos steuern , Temperaturen abfragen klappt inzwischen einwandfrei. Mit meinen Fensterkontakten (On-Wire) kämpfe ich noch etwas.

Das neue textCommand ist auch super,  der WAF ist beim testen viel besser, da ich nicht immer mit Snips reden muss ;)

Gruß
Roman

Thyraz

#127
Ok hier mal ein Update für die, bei denen der Inject nicht funktioniert:

Ich hab es mal mit dem Injectstring von kud bei mir getestet und das klappt problemlos.
Hatte davor /var/lib/snips/injections gelöscht, einen neuen Assistenten aufgespielt und dann den inject gemacht.

Danach ist /var/lib/snips/injections wieder mit einem Unterverzeichnis erschienen und Snips/ASR hat den Satz "Schalte den Rasenmäher ein" problemlos verstanden.

Jetzt ist die Frage woran das noch liegen kann.
Hätte da einmal die Umlaute in Verdacht, könnte aber natürlich auch ein Bug im ASR Inject Modul von Snips sein.

Am Besten mal Folgendes versuchen falls es bei euch nicht geht:
- Kontrollieren ob /var/lib/snips/injections wirklich nicht exisitiert

- Im Terminal auf dem Snips Rechner einen Inject direkt über den MQTT Server (mosquitto) posten der keine Unlaute beinhaltet:

mosquitto_pub -h localhost -t hermes/asr/inject -m '{"operations":[["add",{"de.fhem.Device":["Deckenlampe"]}]]}'


- Schauen ob /var/lib/snips/injections jetzt existiert

- Falls ja, testen ob Sips das Wort Deckenlampe jetzt versteht (z.B. "Schalte die Deckenlampe ein")
Falls ihr kein Gerät namens Deckenlampe für Snips in Fhem konfiguriert habt, wird dennoch ein "Da ist etwas schief gegangen" als Antwort kommen.
Aber im Reading lastIntentPayload sieht man ja den erkannten Text unter dem key "input". Hier sollte Bogenlampe richtig erkannt worden sein, falls der Inject geklappt hat

Falls das klappt:
Testet mal ob der Inject über Fhem klappt wenn ihr keine Umlaute (neben äöü wäre auch ß noch ein Kandidat) in den Geräte- und Raumbezeichnungen habt.
Oder fügt erstmal nur ein Gerät in den FHEM Raum "Snips" ein.
Im Erfolgsfall müsste man mal genauer analysieren was da schief geht und was der Unterschied zu den Systemen anderer User ist.

Sollte das alles schief gehen, sollten wir mal sammeln auf was für Systemen ihr Snips laufen lasst.
Evtl. ist hier ja ein Bug bei einer bestimmten Prozessorarchitektur zu erkennen.
Dann müsste man das mal in der Snips Community posten.
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

Noch ein paar Antworten / Bemerkungen zu Posts von heute:

Zitat von: kud am 20 August 2018, 15:00:47
Also mein Logeintrag sieht so aus
Injecting data to ASR: {"operations":[["add",{"de.fhem.Device":["rasenmäher","Temperatur","Wasser","Sensor","Licht"]}],["add",{"de.fhem.Room":["Wohnzimmer","Küche","Treppe","Garten","garten","Keller","Büro"]}]]

Ich würde das Gerät nicht Temperatur, sondern Thermometer nennen.
Temperatur ist ja der "Type" aus dem GetNumeric Intent.
Der vollständige Satz wäre an sich "Wie ist die Temperatur vom Thermometer im Wohnzimmer".
Wenn du "Wie ist die Temperatur im Wohnzimmer" sagst, soll hier das Device als Slot wegfallen. Es bleiben Type und Room.
Das Modul sucht dann nach dem Gerät mit einem GetNumeric Intent mit type=Temperatur im aktuellen Raum und liefert dessen Wert zurück.

Wenn du nun einen Slot Type und einen Slot Device mit dem selben möglichen Wert (Temperatur) hast, könnte das zu Verwirrung seitens Snips führen (evtl. auch nicht, aber ich würde das Glück nicht herausfordern und Temperatur nicht zusätzlich als Gerätenamen anlernen. ;))

Zitat von: kud am 20 August 2018, 18:51:42
Ich habe bisher nicht darauf geachtet aber bei meinem SNIPS Device ist STATE auf "???" hat das was zu bedeuten?

Bedeutet nur, dass ich bisher den state im Modul noch nicht beschreibe.
Dies scheint FHEM mit 3 Fragezeichen zu quittieren. ;)
Werde das vorerst nach erfolgreichem Laden auf "initialized" setzen bevor was Sinnvolleres kommt.

Zitat von: Roman am 20 August 2018, 21:50:32
Mit meinen Fensterkontakten (On-Wire) kämpfe ich noch etwas.

Das neue textCommand ist auch super,  der WAF ist beim testen viel besser, da ich nicht immer mit Snips reden muss ;)

Ja, ich nerve meine Frau abends auch weniger seit ich nicht dauernd beim Modul testen vor mich hin brabbel. :P

Was willst du denn genau fragen bei den Fensterkontakten?
Ist das <Gerätename> geöffnet als Frage sollte schon funktionieren.

Wie ich Abfragen nach Gerätegruppen einbinden will (passt das noch in GetNumeric mit eigenem Slot, oder muss es eher ein eigener Intent sein? Muss das mal genauer durchdenken.) bin ich mir noch nicht sicher, falls du eher etwas in der Art "Sind alle Fenster geschlossen" oder "Wieviele Fenster sind geöffnet" versuchst.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

kud

Also nach langen probieren exestierte in /var/lib/snips noch immer kein Unterverzeichnis. Hab dann Snips komplett gelöscht und die Installation wiederholt.
Die Installation von snips-asr-injection dauerte dieses mal erheblich länger und voila das Verzeichnis wurde angelegt und es klappt so wie bisher und zwar mit Injection ;-)
Danke. Tolle Arbeit. :D

Thyraz

#130
@kud Super, freut mich. :)
Dann können wir uns ja neuen Features und Intents widmen.  ;D


@all
2 weitere Neuerungen die ich glaub vergessen hatte:

1) Bei SetNumeric muss bei relativen Wertänderungen nun der Type (Helligkeit / Temperatur / ...) nicht mehr direkt gesagt werden,
wenn der Type aus dem Wortlaut der Änderung bestimmt werden kann.

Nehmen wir an ihr habt eine Lampe mit Helligkeit und Temperatur SetNumeric Intent.
Bisher ging:
"Stelle die Lampe auf 20" hat sich den ersten SetNumeric Eintrag im Mapping gegriffen.
Meist dürfte da bei einer Lampe die zu regelnde Helligkeit drin stehen.

"Temperatur der Lampe wärmer stellen" hat dagegen nach einem SetNumeric mit type Option Temperatur gesucht.
An sich muss man die Temperatur ja aber nicht explizit sagen, da "wämer/kälter" ja schon aussagen, dass es sich um einen Temperaturwunsch handelt.

Ihr könnt also in Zukunft direkt "Lampe wärmer stellen" sagen.

2) Bei GetNumeric kann man nun als Type auch noch "Batterie" angeben.
Damit sind dann Fragen wie "Wie ist der Batteriestand von <Gerät>" oder "Batteriestatus <Gerät>", ... möglich.
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

Bei mir funktioniert es sehr gut, sowohl über textCommand (hatte ja gestern schon geklappt) wie auch Spracheingabe.
Ich habe noch die Raumnamen analog wie bei den Device Namen mit Synonymen ergänzt, funktioniert tadellos. Vielleicht kannst du das in deiner Doku noch ergänzen.

Eine Frage noch:
Hat sich bei den customIntents etwas geändert? Ich kann seit dem Update die Custom intents nicht mehr auslösen. Muss ich bei der Definition evtl. auch "=" durch ":" ersetzen?

Thyraz

Die Möglichkeit mehrere Räume zu nennen hab ich bisher extra noch Verschwiegen,
da ich mir noch nicht angeschaut habe, wie sich das auf die Erkennung des aktuellen Raumes auswirkt. ;)

Solange man den Raumnamen mit ansagt (oder kein anderes Gerät mit selbem snipsName in einem anderen Raum besteht) sollte das alles passen und das richtige Gerät gefunden werden.

Zu den CustomIntents:
Ich hab da nur einen zum Test drin bei mir, der klappt noch (Weiterhin mit Gleichzeichen).

Kannst du mal verbose 5 beim Snips Device setzen und das Kommando mal absetzen?

Bei mir sieht das so aus:


2018.08.21 12:25:47.805 5: set textCommand - value: Was ist 5 plus 4
2018.08.21 12:25:47.807 5: Parsed value:  for key: siteId
2018.08.21 12:25:47.807 5: Parsed value: Was ist 5 plus 4 for key: input
2018.08.21 12:25:47.807 5: Parsed value:  for key: sessionId
2018.08.21 12:25:47.808 5: Parsed value:  for key: probability
2018.08.21 12:25:47.808 5: Parsed value:  for key: intent
2018.08.21 12:25:47.809 5: sending message to NLU: {"id":"{\u0022Device\u0022:null,\u0022Room\u0022:null,\u0022input\u0022:\u0022Was ist 5 plus 4\u0022,\u0022sessionId\u0022:null,\u0022siteId\u0022:null}","input":"Was ist 5 plus 4","sessionId":"fhem.textCommand"}
2018.08.21 12:25:47.814 5: publish received for hermes/nlu/intentParsed, {"id":"{\"Device\":null,\"Room\":null,\"input\":\"Was ist 5 plus 4\",\"sessionId\":null,\"siteId\":null}","input":"Was ist 5 plus 4","intent":{"intentName":"Thyraz:Calculation","probability":0.93374974},"slots":[{"rawValue":"5","value":{"kind":"Number","value":5.0},"range":{"start":8,"end":9},"entity":"snips/number","slotName":"Number1"},{"rawValue":"plus","value":{"kind":"Custom","value":"plus"},"range":{"start":10,"end":14},"entity":"Operator","slotName":"Operator"},{"rawValue":"4","value":{"kind":"Number","value":4.0},"range":{"start":15,"end":16},"entity":"snips/number","slotName":"Number2"}],"sessionId":"fhem.textCommand"}
2018.08.21 12:25:47.815 5: Parsed value: Calculation for key: intent
2018.08.21 12:25:47.815 5: Parsed value: plus for key: Operator
2018.08.21 12:25:47.815 5: Parsed value: Was ist 5 plus 4 for key: input
2018.08.21 12:25:47.815 5: Parsed value: 5 for key: Number1
2018.08.21 12:25:47.815 5: Parsed value: 0.93374974 for key: probability
2018.08.21 12:25:47.815 5: Parsed value: fhem.textCommand for key: sessionId
2018.08.21 12:25:47.815 5: Parsed value:  for key: siteId
2018.08.21 12:25:47.815 5: Parsed value: 4 for key: Number2
2018.08.21 12:25:47.817 5: handleCustomIntent called
2018.08.21 12:25:47.817 5: snipsIntent selected: Calculation=snipsCalc(Number1,Operator,Number2)
2018.08.21 12:25:47.817 5: Calling sub: main::snipsCalc


Evtl. sieht man ja was schief geht.

Edit: deine CustomIntents App hast du aber weiterhin in deinem Assistenten drin?
Nicht, dass du das neu aufgesetzt hast wegen der nicht mehr zu forkenden FHEM App und die gar nicht mehr drin ist (so ging es mir gerade).
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 von: Thyraz am 20 August 2018, 18:24:58
@tomster schön, dass es bei dir klappt.

Find ich auch ;-)
Nur der Ordnung halber als Ergänzung:
Ich hab seit gestern meine Snips- und den FHEM-Server auf einem Thin-Client unter Debian laufen. Ein RasPi ist nur als Satellit konfiguriert und liefert den Mikrofon-Input.
Deshalb habe ich keine "alte" App oder Intents, die noch rumschwirren könnten. Quasi "Clean Install". Kann also sein, dass es bei meinem Setup funzt, auf einer reinen RasPi-Lösung (noch) nicht. Vielleicht gibt es ja ein Rechte-Poblem, wenn die Injections nicht im entsprechenden Ordner angelegt werden (*kristallkugelisier*)?

RoBra81

Hallo,

wenn ich Zeit finde möchte ich das Modul u.U. auch mal ausprobieren. Daher eine Frage: funktioniert das Modul mit dem neuen MQTT2_SERVER (https://fhem.de/commandref.html#MQTT2_SERVER)?

Ronny