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

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

Vorheriges Thema - Nächstes Thema

enno

Einfacher FHEM Anwender auf Intel®NUC

JensS

Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

laberlaib

Hallo,
jetzt kam ich auch mal dazu, wieder etwas mit Snips zu spielen und bin begeistert, wie schnell das am Ende doch geht, sich was halbwegs funktionierendes einzurichten.
"Man" sollte einen Thread machen, mit Beispielkonfigurationen zu Rollläden, Mediaplayern etc.
Wenn meine Dinge getestet sind mach ich das mal.

2 3 Fragen/Anregungen/Probleme jetzt:
1) Ich möchte meine Anlage leiser stellen, wenn Snips zuhört, also die vorgeschlagene Nutzung von "listening_room". Probleme kommen dann, wenn man damit die Lautstärke reglen will (im Beispiel als DOIF)
Pause/Play bei einer Sqeezebox:
(([Snips:listening_wohnzimmer] eq "1") and ([sb_Wohnzimmer:playStatus] eq "playing"))(set sb_Wohnzimmer pause)
DOELSEIF
([Snips:listening_wohnzimmer] eq "0")(set sb_Wohnzimmer play)

Da das Gerät pausiert wird es nicht als spielendes Gerät gefunden und wird ohne konkrete Bennennung nicht gesteuert.

Leiser/Lauter
(([Snips:listening_wohnzimmer] eq "1") and ([sb_Wohnzimmer:playStatus] eq "playing"))(setreading $SELF volumeBackup [sb_Wohnzimmer:volume], set sb_Wohnzimmer volume 3)
DOELSEIF
([Snips:listening_wohnzimmer] eq "0")(set sb_Wohnzimmer volume $SELF:volumeBackup)

Snips macht lauter von 3 auf 13 um dann wieder mit der gespeicherten Lautstärke zu überschreiben.

Lösungsvorschlag?
(btw beim SetNumericIntent: type=Lautstärke zuerste alles irgendwie Englisch, dann ein Umlaut - das hat mich erstmal verwirrt)
€: ich hab vielleicht eine Lösung gefunden indem ich nach dem listening einfach auf den alten Wert zzgl. des Delta neuen Wertes - Reduzierter Wert schalte. Dann müsste lauter/leiser funktionieren. Morgen

2) Ich höre bisher nur Radio und muss daher Snipos nur 4-5 Sender beibringen.
Hat schon jemand Snips seine gesamten Playlists o.ä. zugeschoben?

€:
3) kann man mehrere snipsRooms angeben, ähnlich wie beim Namen? So dass ich das Licht im Bad, im Badezimmer, ausrufen kann?
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

ahlermi

Mehrere Namen sind möglich, einfach mit Komma trennen.

So mache ich das mit leiser wärend des hörens.


attr Snips userattr wohnzimmer_volume



define n_snips_listening_wohnzimmer notify Snips:listening_wohnzimmer.* {
  if ($EVTPART1 == 1 ){
    if (ReadingsVal("Denon","zoneMain","") eq "on"){
      fhem("attr $NAME wohnzimmer_volume " . ReadingsVal("Denon","volume","40"));
      fhem("set Denon volume 20");
    }
  }else{
    fhem("set Denon volume " . AttrVal($NAME, "wohnzimmer_volume", "40"));
    fhem("deleteattr $NAME wohnzimmer_volume");
  }
}
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

laberlaib

Zitat von: ahlermi am 27 September 2018, 08:03:15
Mehrere Namen sind möglich, einfach mit Komma trennen.

So mache ich das mit leiser wärend des hörens.


attr Snips userattr wohnzimmer_volume



define n_snips_listening_wohnzimmer notify Snips:listening_wohnzimmer.* {
  if ($EVTPART1 == 1 ){
    if (ReadingsVal("Denon","zoneMain","") eq "on"){
      fhem("attr $NAME wohnzimmer_volume " . ReadingsVal("Denon","volume","40"));
      fhem("set Denon volume 20");
    }
  }else{
    fhem("set Denon volume " . AttrVal($NAME, "wohnzimmer_volume", "40"));
    fhem("deleteattr $NAME wohnzimmer_volume");
  }
}


Aber wenn du jetzt den Befehl "Hey Snips, Denon leiser!" gibst, dann wir der Befehl ausgeführt und danach die Lausträke wieder auf die Ursprungslautstärke gesetzt. Dabei soll diese ja um "leiser" gemindert werden.
Oder les ich da was falsch?
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

ahlermi

Ups, das habe ich falsch verstanden, diese Lösung hilft nur das SNIPS mich versteht auch wenn Musik läuft.

Ich habe mittlerweile alles auf Talk2Fhem umgestellt, nutze SNIPS nur noch für die Erkennung.


https://forum.fhem.de/index.php/topic,91216.0.html
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

ChrisK

Nach längerer Zeit darf ich wieder an meinem Snips basteln.

Bin gerade allerdings leicht verwirrt (vermutlich weil ich die Custom Intents bisher noch nicht angegangen habe).
Der SetTimer gefällt mir und ich würde auch gerne einen Timer setzen können.

Meine Verwirrung ist hierdurch entstanden:
Zitat von: Thyraz am 10 September 2018, 17:23:02
Ok, das Umrechen ohne zu wissen wann das ganze stattfindet klappt durch einige der Werte ja gar nicht.
Thema Schaltjahr, Anzahl Tage im Monat usw.

Ich übergebe also doch den ganzen Hash.

Aktualisierte 10_SNIPS.pm auf Github verfügbar

Beispiel für die Abfrage:
...
"aktualisiert 10_SNIPS.pm" bedeutet dass das jetzt ohne CustomIntent laufen sollte oder benötige ich weiterhin einen Custom Intent so wie es in der Readme beschrieben ist ("Für Fortgeschrittene: Eigene Custom Intents erstellen und in FHEM darauf reagieren")?
Bevor ich in die falsche Richtung gehe, dachte ich frage ich mal nach.

Die nächste Frage wird dann sein, wie ich den Timer setze. Vermutlich mit einem at und mit Übergabe der erkannten Dauer der dann irgendeine Sound-Ausgabe anstößt, oder habt Ihr das anders gelöst?

kud

Ne kleine Frage Frage zu SetonOff:
(Sname=Licht/ Sroom=Treppe)

Die Anweisung "Schalte das Licht auf der Treppe ein" liefert sam watch
[Asr] captured text "schalte das licht auf der treppe ein" in 4.0s
[16:45:34] [Asr] was asked to stop listening on site arbeitszimmer
[16:45:34] [AudioServer] was asked to play a wav of 93.1 kB with id '41d36e39-5d22-43e5-ae15-546673c388c5' on site arbeitszimmer
[16:45:35] [AudioServer] finished playing wav with id '41d36e39-5d22-43e5-ae15-546673c388c5'
[16:45:35] [Nlu] was asked to parse input "schalte das licht auf der treppe ein"
[16:45:35] [Nlu] intent not recognized for "schalte das licht auf der treppe ein"


Bei "Schalte das Licht im Treppe ein" wird richtig erkannt

[Asr] captured text "schalte das licht im treppe ein" in 4.0s
[16:45:44] [Asr] was asked to stop listening on site arbeitszimmer
[16:45:44] [AudioServer] was asked to play a wav of 93.1 kB with id 'f1636145-3eb9-43d6-b514-118880974e83' on site arbeitszimmer
[16:45:45] [AudioServer] finished playing wav with id 'f1636145-3eb9-43d6-b514-118880974e83'
[16:45:45] [Nlu] was asked to parse input "schalte das licht im treppe ein"
[16:45:45] [Nlu] detected intent Thyraz:GetOnOff with probability 0.395 for input "schalte das licht im treppe ein"
              Slots ->
                 Status -> an


Ist das noch ein Bug?

laberlaib

Ich antworte mir mal selbst: Lösung für das Lauter Leister Problem:
Zitat von: laberlaib am 26 September 2018, 17:51:54
1) Ich möchte meine Anlage leiser stellen, wenn Snips zuhört, also die vorgeschlagene Nutzung von "listening_room". Probleme kommen dann, wenn man damit die Lautstärke reglen will (im Beispiel als DOIF)
Pause/Play bei einer Sqeezebox:
(([Snips:listening_wohnzimmer] eq "1") and ([sb_Wohnzimmer:playStatus] eq "playing"))(set sb_Wohnzimmer pause)
DOELSEIF
([Snips:listening_wohnzimmer] eq "0")(set sb_Wohnzimmer play)

Da das Gerät pausiert wird es nicht als spielendes Gerät gefunden und wird ohne konkrete Bennennung nicht gesteuert.

Leiser/Lauter
(([Snips:listening_wohnzimmer] eq "1") and ([sb_Wohnzimmer:playStatus] eq "playing"))(setreading $SELF volumeBackup [sb_Wohnzimmer:volume], set sb_Wohnzimmer volume 3)
DOELSEIF
([Snips:listening_wohnzimmer] eq "0")(set sb_Wohnzimmer volume $SELF:volumeBackup)

Snips macht lauter von 3 auf 13 um dann wieder mit der gespeicherten Lautstärke zu überschreiben.

defmod di_snips_Leiser DOIF (([Snips:listening_wohnzimmer] eq "1") and ([sb_Wohnzimmer:playStatus] eq "playing"))(setreading $SELF volumeBackup [sb_Wohnzimmer:volume], set sb_Wohnzimmer volume 15)\
DOELSEIF\
([Snips:listening_wohnzimmer] eq "0")(set sb_Wohnzimmer volume {([$SELF:volumeBackup] + [sb_Wohnzimmer:volume] - 15)})


Dann geht die Lautstärke erst auf 15 runter und danach auf den Zwischengespeicherten Wert plus dem neuen Wert (15 +/- lauter/leiser) minus 15 .
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

msommer

Nachdem ich gerade ein bisschen an den custom replies verzweifelt bin...

https://github.com/Thyraz/Snips-Fhem/blob/master/FHEM/10_SNIPS.pm#L63
Da müsste eq statt ==  verwendet werden, sonst ist $ROOM immer der Default Room.

my $ROOM = (defined($siteId) && $siteId eq "default") ? $hash->{helper}{defaultRoom} : $siteId;


kud

Liest "Thyraz" noch mit ? Es ist sehr ruhig geworden in diesem Tread.

laberlaib

Ich hätte auch noch eine Frage/ ein Feature Request:
Und zwar, dass man beim Befehl "say" auch Perlcode in {} angeben kann.
Hintergrund: Ich habe mir eine Statusfunktion gebaut, welche den Zustand der Autobahn zurückgibt. Wenn ich diese per Statusintent aufrufe, dann muss da ja "return text" zurückgegeben werden. Ich möchte aber auch die Statusinformation auf Knopfdruck bekommen, also per
set <snipsdevice> say {statusVerkehr()}
Das wird aber genau so vorgelesen..."Geschweifete Klammer..."
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

bennebartsch

Zitat von: laberlaib am 03 Oktober 2018, 08:42:07
Ich hätte auch noch eine Frage/ ein Feature Request:
Und zwar, dass man beim Befehl "say" auch Perlcode in {} angeben kann.
Hintergrund: Ich habe mir eine Statusfunktion gebaut, welche den Zustand der Autobahn zurückgibt. Wenn ich diese per Statusintent aufrufe, dann muss da ja "return text" zurückgegeben werden. Ich möchte aber auch die Statusinformation auf Knopfdruck bekommen, also per
set <snipsdevice> say {statusVerkehr()}
Das wird aber genau so vorgelesen..."Geschweifete Klammer..."

Das lässt sich doch sicherlich auch mittels dummy und notify regeln oder?

laberlaib

Zitat von: bennebartsch am 04 Oktober 2018, 00:42:37
Das lässt sich doch sicherlich auch mittels dummy und notify regeln oder?
Sicher, oder ich übergebe eine Parameter und die Funktion spricht entweder direkt oder gibt nur den Text aus.
Aber irgendwie bin ich es gewöhnt, in den FHEM Eingabefeldern  Perlcode einzugeben, bei den Attributen geht das ja auch.
Eobei ich zugeben muss, dass ich es bisher nur direkt im Eingabefeld des Devices probiert habe. Ob im FHEM-Eingabefeld "set device say {}" funktioniert müsste ich mal probieren...
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

heiko-73

Hallo Ihr Lieben,
ich war nun mutig und habe es auch einmal versucht und mich herangewagt  ;D

Soweit bin ich auch gekommen das Snips mich hört und scheinbar versteht zumindest sehe ich das per mqqt

Das mit den Intents habe ich nur noch nicht verstanden.
Bzw. wo muß ich nun was eingeben?
Das mit dem Snipsraum habe ich gemacht aber bei den Intents ist die Anleitung doch eher mager?
Gebe ich das bei jedem einzelnen Gerät ein oder bei snips?

Für den Anfang wäre ich schon erfreut wenn ich meine Hue Lampen damit an/aus machen könnte.

Ich sehe z.B. folgendes:
[Nlu] intent not recognized for "lampeeins aus"



[22:10:52] [Asr] was asked to listen on site default
[22:10:57] [Asr] captured text "schalte im schlafzimmer lampeeins aus" in 4.0s
[22:10:57] [Asr] was asked to stop listening on site default
[22:10:57] [AudioServer] was asked to play a wav of 93.1 kB with id 'dde2d173-dc4e-4f3c-a993-b928608f84d2' on site default
[22:10:58] [AudioServer] finished playing wav with id 'dde2d173-dc4e-4f3c-a993-b928608f84d2'
[22:10:58] [Nlu] was asked to parse input "schalte im schlafzimmer lampeeins aus"
[22:10:58] [Nlu] detected intent Thyraz:SetOnOff with probability 0.511 for input "schalte im schlafzimmer lampeeins aus"
              Slots ->
                 Value -> aus
[22:10:58] [Dialogue] New intent detected Thyraz:SetOnOff with probability 0.511
              Slots ->
                 Value -> aus
[22:11:04] [Dialogue] session with id '90311190-092a-43bf-963f-bcb09c09ed49' was ended on site default. The session was ended because one of the component didn't respond in a timely manner