Autor Thema: SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert  (Gelesen 398 mal)

Offline ahlermi

  • Full Member
  • ***
  • Beiträge: 108
SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert
« am: 17 September 2018, 13:18:28 »
Hallo zusammen,

ich habe nun eine Version gebaut mit der ich recht zufrieden bin, die SNIPS ohne große Konfiguration benutzt.


define Snips SNIPS SnipsMQTT Wohnzimmer
attr Snips response DefaultError=
NoActiveMediaDevice=
attr Snips userattr wohnzimmer_volume

Ein Dummy device:
define d_snips_dummy dummy
attr d_snips_dummy room Snips
attr d_snips_dummy snipsName Lampe, Licht, Heizung, Temperatur, Steckdose, Waschmaschine, Stehlampe, Deckenlampe, Vitrine, Kino, Leuchte, Rapsi, Denon, Anlage, Verstärker, Musik, Zone, Bluetooth, Leinwand, Radio, Wasserkocher,Rollade, Rollos, Lautstärke
attr d_snips_dummy snipsRoom Haus,überall,Wohnung, Wohnzimmer,Wohnbereich, Bad, Toilette,Wc, Büro,Arbeitszimmer, Erdgeschoss, Draußen, Schlafzimmer, Esszimmer, Bastelzimmer, Keller, Alice, Flur, Waschküche, Terasse, Küche
attr d_snips_dummy userattr snipsChannels:textField-long
attr d_snips_dummy snipsChannels Mediaplayer=Mediaplayer
Mediacenter=Mediacenter
kodi=kodi
xbmc=xbmc
OnlineMusic=OnlineMusic
Online Music=OnlineMusic
heos=heos
internet=internet
Sat=SCbl/Sat
Satellit=SCbl/Sat
Bluetooth=Bluetooth
handy=handy
echo=echo


Einmal Code um das Input rauszuspalten
define ej_SNIPS expandJSON Snips:lastIntentPayload:.\{.*input.*} input

Reaktion auf gesprochenen Text:
define n_Snips_input notify
Snips:input:.* {
  $EVENT =~ s/\srein/\sein/g;
  fhem("attr talk Snips Snips");
  fhem("set talk " . ( split / /, $EVENT, 2 )[1]);
}

Merken das der Text von Snips kam damit nicht alles über Lautsprecher ausgegeben wird.
attr talk userattr Snips

Antworten auf Reaktion von Talk2Fhem

define n_Snips notify Snips:textResponse:.*|talk:answers:.*|talk:err:.*|talk:response:.*|talk:status.*done.* {

  if (AttrVal($NAME, "Snips", " ") ne " "){
    if ($EVTPART1 eq "done"){
      fhem ("set " . AttrVal($NAME, "Snips", " ") . " say alles klar!");
    }elsif ($EVTPART0 eq "err:"){
      fhem ("set " . AttrVal($NAME, "Snips", " ") . " say keine Ahnung was du von mir willst");
    }else{
      fhem ("set " . AttrVal($NAME, "Snips", " ") . " say " . ( split / /, $EVENT, 2 )[1]);
    }
    fhem ("deleteattr " . $NAME . " Snips");
  }
}


Lautsprecher leise schalten um Sprachbefehl besser zu verstehen.
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");
  }
}

« Letzte Änderung: 19 September 2018, 08:19:33 von ahlermi »
Debian FHEM, PI3 FHEM, 2 x Echo, Siri, SNIPS auf PI3 mit PS3Eye, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEASY, Gardena, WhatsApp, FLOORPLAN

Offline enno

  • Full Member
  • ***
  • Beiträge: 299
Antw:SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert
« Antwort #1 am: 17 September 2018, 19:19:37 »
interessanter Ansatz, das beobachte ich mal weiter. Wobei ich das vielleicht mal mit https://wiki.fhem.de/wiki/Modul_Babble versuche zu verheiraten.

Gruss
  Enno
Einfacher FHEM User auf Raspberry Pi 3 und Intel®NUC
-----------------------
Nächster Hannover-Stammtisch: 03.11.2018 - 15:00 Uhr
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline ahlermi

  • Full Member
  • ***
  • Beiträge: 108
Antw:SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert
« Antwort #2 am: 17 September 2018, 19:33:11 »
Zahlen müssen konvertiert werden, SNIPS schickt im input text

so wird aus
fahre die große rollade im wohnzimmer auf siebzig prozent
fahre die große rollade im wohnzimmer auf 70 prozent

installieren:
perl -MCPAN -e 'install Lingua::DEU::Word2Num'


anpassen am input Notify.

Snips:input:.* {
use Lingua::DEU::Word2Num;

  my $input = "";
  my $num = 0;
  my @Words = ();
  my @EVENTS = ();
  my $word = "";

  $input = ( split / /, $EVENT, 2 )[1];

  @EVENTS = ( split / /, $input );
  if (!defined($EVENTS[0])){
    push @EVENTS, $input;
  }

  foreach(@EVENTS) {
     $word = "$_";
     $word =~ s/rein/\sein/g;

     undef $num;
     $num = Lingua::DEU::Word2Num::w2n( $word );
#     Log 3, $word . " " . $num;
     push @Words, defined($num) ? $num : $word;
  }
 
  fhem("attr talk Snips Snips");
  fhem("set talk " .  join ' ', @Words);
}
« Letzte Änderung: 11 Oktober 2018, 14:09:28 von ahlermi »
Debian FHEM, PI3 FHEM, 2 x Echo, Siri, SNIPS auf PI3 mit PS3Eye, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEASY, Gardena, WhatsApp, FLOORPLAN

Offline ahlermi

  • Full Member
  • ***
  • Beiträge: 108
Antw:SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert
« Antwort #3 am: 11 Oktober 2018, 14:07:00 »
Da die Befehle mit Zeitangaben oft falsch verstanden worden sind habe ich einen neuen Skill "FHEM Extension Time" nach Vorlage "FHEM" von Thyraz erstellt und Freigegeben.
Dieser Skill kann zusätzlich zu "FHEM" vom Thyraz hinzugefügt werden.
Debian FHEM, PI3 FHEM, 2 x Echo, Siri, SNIPS auf PI3 mit PS3Eye, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEASY, Gardena, WhatsApp, FLOORPLAN