[39_Talk2Fhem.pm] Flexible Sprachsteuerunghilfsmodul

Begonnen von Phill, 12 Dezember 2017, 12:24:09

Vorheriges Thema - Nächstes Thema

ahlermi

Bei mir ist es eine Kombination aus Lautstärke, Rollade und Lüftersteuerung. Macht aber genau was es soll:


#Rolladen verändern
?(bitte) && (@types_blind) && ?(@rooms) && ?(@properties) && ?(@places) && ((\d+)(?:[ ]){0,1}(?:prozent|%|db)|1 wenig|etwas|viel) ((höher|größer|weiter auf|weiter hoch|weiter öffnen|erhöhen|weiter rauf)|(niedriger|kleiner|weiter zu|weiter runter|weiter schließen|verringern|tiefer|runter)|(lauter)|(leiser)) =
  (cmd=>{fhem("define at_talk_rollade_" . rand(600) . " at +00:00:02 set T2F_types_blind=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_properties=.*$4@.*:FILTER=T2F_places=.*$5@.* $8[up,down,volumeUp,volumeDown] $7{integer=>$7, empty=>$6[0,0,3,7,15,empty,7]}")},
   answer=>'(( "$8[up,down,up,down]" eq "up") ? "$1{/bitte/=>Gern\,} ich fahre die $2 in folgenden Räumen $DATE $7{integer=>$7, empty=>$5[0,0,3,7,15,empty,7]} $2{/Lautstärke/=>Prozent, else=>Prozent} $2{/Lautstärke/=>lauter, else=>rauf}: " : "$1{/bitte/=>Gern\,} ich fahre die $2 in folgenden Räumen $DATE $7{integer=>$7, empty=>$6[0,0,3,7,15,empty,7]} $2{/Lautstärke/=>Prozent, else=>Prozent} $2{/Lautstärke/=>leiser, else=>runter}: ").T2F_answer("T2F_types_blind=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_properties=.*$4@.*:FILTER=T2F_places=.*$5@.*","T2F_types_blind")')
#Rolladen setzen
?(bitte) && (@types_blind) && ?(@rooms) && ?(@properties) && ?(@places) && (auf (\d+)(?:[ ]){0,1}(?:prozent|%|db)|(hoch|runter|rauf|zu|auf|leise|laut|stumm))( stellen| setzen| einstellen| ein)?$ =
  (cmd=>{fhem("define at_talk_rollade_" . rand(600) . " at +00:00:02 set T2F_types_blind=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_properties=.*$4@.*:FILTER=T2F_places=.*$5@.* $7{integer=>$2{/Lautstärke/=>volume, /Lüfter/=>, else=>pct} $7, empty=>$8{true=>$2{/Lautstärke/=>volume 70,/Lüfter/=>250, else=>pct 100}, false=>$2{/Lautstärke/=>volume 0,/Lüfter/=>0, else=>pct 0} } }")},
   answer=>'"$1{/bitte/=>Gern\,} ich fahre die $2 in folgenden Räumen $DATE $7{integer=>auf $7 Prozent, empty=>$8{true=>$2{/Lautstärke/=>laut, else=>hoch}, false=>$2{/Lautstärke/=>leise, else=>runter} } }: ".T2F_answer("T2F_types_blind=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_properties=.*$4@.*:FILTER=T2F_places=.*$5@.*","T2F_types_blind")')


T2F_keywordlist

types_blind = Rollade, Rolllade, Rolladen, Rollladen, Rollos, Lautstärke, Lüfter, Musik, Anlage


Rollade Wohnzimmer Garten
Attributes

T2F_properties klein, Garten
T2F_rooms Wohnzimmer
T2F_types_blind !Rollade, Rolllade, Rollos


Denon
Attributes

T2F_rooms !Wohnzimmer, Erdgeschoss, Wohnbereich, Haus
T2F_types_blind !Lautstärke, Musik, Anlage
T2F_types_switch !Denon, Anlage, Verstärker, Musik, Zone, alles
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

obi

#361
Hallo,

ich habe wohl einen Bug gefunden.
Folgende Eingabe funktioniert nicht "schalte licht spüle küche morgen vormittags aus".
Alle Zeitangaben früh/vormittags usw. werden passende ersetzt wird aber nicht als Zeit umgewandelt.

Hier mein Log:
Talk2Fhem Version: 0.5.3
Decoding Text: Wohnung.schalte licht spüle küche morgen vormittags aus
Using User Filter: \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
After correction:
schalte spüle morgen küche licht licht   vormittags aus
Command part: 'schalte spüle morgen küche licht licht   vormittags aus'
Timephrase found: =~ s/\bmorgen\b/
TIMEPHRASEDATA mod: 'days' raw: '1' result: '1' opt: '1' pm: ''
Timephrase found: =~ s/\bvormittags?\b/
TIMEPHRASEDATA mod: 'notime' raw: '"10:30"' result: '10:30' opt: '1' pm: '0'
Extracted Timephrase. 'morgen vormittags '
Commandpart after datedecoding. 'schalte spüle   küche licht licht     aus'
Eventtime found: Tue Sep  3 00:30:00 2019
Command left: 'schalte spüle küche licht licht aus'


In der Funktion "Talk2Fhem_get_time_by_phrase" wird "notime" nicht verarbeitet.

Ich habe folgendes ergänzt, dann funktioniert es. Ob es dadurch an einer anderen Stelle zu Problemem kommt kann ich noch nicht sagen.
} elsif ($datemod eq "notime") {
my @t = map { s/\s//gr } split(":", $tf{notime});
$evt = POSIX::mktime($t[2] || 0,$t[1] || 0,$t[0],$lt[3],$lt[4],$lt[5]) || 0;
$timeset = undef;


Bitte um Prüfung, eventuell mache ich ja irgendwo einen Fehler.

Danke

obi

Hallo Phill,

ich habe wieder eine Konstellation welche zu Problemen führt. Ich verwende if mit einem Wort/Namen welches auch in einer Keywordliste enthalten ist. Dieses Wort wird dann bei "After correction" entfernt, falsch zusammengesetzt und wird dann anschließend nicht mehr als if erkannt. Theoretisch lässt sich das lösen indem man vor der "After correction" erst die If-regex sucht und den IF-Text speichert und aus dem Text entfernt. Anshließend dann nach "After correction" wieder Text + IF-Text zusammensetzen. Dann sollte es weiter richtig erkannt werden. Ich habe dies jetzt Programm-Technisch noch nicht ausprobiert. Was meinst du?

Hier mein Log, ich habe "Stehlampe" in der IF-Definition und auch in einer Keywordliste:
Talk2Fhem Version: 0.5.3
Decoding Text: wenn stehlampe an schalte hängelampe büro aus
Using User Filter: \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
After correction:
wenn büro stehlampe stehlampe an schalte aus
wenn hängelampe hängelampe an schalte aus
Command part: 'wenn büro stehlampe stehlampe an schalte aus'
T2F Evaluate search:


Hier ein OK beispiel mit eindeutigem Namen "Sonnenaufgang" in der IF-Definition:
wenn sonnenaufgang schalte hängelampe büro aus
Using User Filter: \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
After correction:
wenn sonnenaufgang schalte büro hängelampe hängelampe aus
Command part: 'wenn sonnenaufgang schalte büro hängelampe hängelampe aus'
T2F Evaluate search:
wenn sonnenaufgang schalte büro hängelampe hängelampe aus =~ /wenn Sonnenaufgang/i
Command after Phrasecheck: schalte büro hängelampe hängelampe aus

obi

Hallo Phill,

es hat sich wohl wieder ein Fehler in die Programmierung eingeschlichen:

Fehlermeldung:
Can't use string (""$1".("$4"?".$4":"")") as a SCALAR ref while "strict refs" in use at ./FHEM/39_Talk2Fhem.pm line 1666.

Zeile 1666:
T2FL($myname,5,"Functionmod '$$fc' $rp");

Ändern in:
T2FL($myname,5,"Functionmod '$fc' $rp");

VG Obi

Haecksler

Hallo,
ich schalte mit folgendem Ausdruck

(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\S+|\d+)( schalten| stellen| dimmen)? = set $2[@lightName] $5{ true=>on, false=>off, integer => pct $5, else => rgb $5[@rgb] }

Mein Licht.
Das funktioniert auch wunderbar, bis man versucht auf einen zweistelligen Wert zu dimmen

Licht Wohnzimmer auf 20 dimmen

er gibt folgende Fehlermeldung

Field #20 doesn't exist in Array!

wenn man jedoch auf Zahlen von 0-9 dimmen will z.B.

Licht Wohnzimmer auf 8 dimmen

funktioniert das ohne Probleme.

Ist das ein Bug oder habe ich irgendwo einen Fehler drin.

Gruß,
Stefan

Haecksler

Zitat von: Haecksler am 23 November 2019, 19:51:30
Hallo,
ich schalte mit folgendem Ausdruck

(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\S+|\d+)( schalten| stellen| dimmen)? = set $2[@lightName] $5{ true=>on, false=>off, integer => pct $5, else => rgb $5[@rgb] }

Mein Licht.
Das funktioniert auch wunderbar, bis man versucht auf einen zweistelligen Wert zu dimmen

Licht Wohnzimmer auf 20 dimmen

er gibt folgende Fehlermeldung

Field #20 doesn't exist in Array!

wenn man jedoch auf Zahlen von 0-9 dimmen will z.B.

Licht Wohnzimmer auf 8 dimmen

funktioniert das ohne Probleme.

Ist das ein Bug oder habe ich irgendwo einen Fehler drin.

Gruß,
Stefan

Habe mir das Problem angeschaut, wenn man den Log anschaut wird die 20 als Integer erkannt, trotzdem wird noch in die else Funktion aufgerufen...Denke das ist ein Bug.
Mittlerweile habe ich das ganze in 2 Zeilen aufgespalten, womit das ganze dann auch funktioniert.

Log "Licht Aula 20" => geht nicht
Talk2Fhem Version: 0.5.3
Decoding Text: Licht Aula 20
After correction:
Licht Aula 20
Command part: 'Licht Aula 20'
talk Evaluate search:
Licht Aula 20 =~ /(im |in )?(@roomsJalousie) && Jalousie (im )?&&(\S+|\d+)/i
talk Evaluate search:
Licht Aula 20 =~ /(im )?(@etagen) && Jalousien && (auf )?(\S+|\d+)/i
talk Evaluate search:
Licht Aula 20 =~ /(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\d+|\S+)( schalten| stellen)?/i
Command after Phrasecheck: 
Keylists: $VAR1 = undef;
$VAR2 = undef;
$VAR3 = 'rooms';
$VAR4 = undef;
$VAR5 = undef;
$VAR6 = 'colors';

Filled lists: $VAR1 = '(im |in )?(wohnzimmer|tv|fernseher|aula|allah|aura|treppe|schlafzimmer|garten|aussen|au\\S\\S?en|weg|Weihnachtsbeleuchtung innen|Weihnachtsbeleuchtung au\\S\\S?en)';
$VAR2 = '(liegt|nicht|Licht|Dimmer|Lampe)';
$VAR3 = '(auf )?(fernsehen|arbeiten|lesen|g\\S\\S?ste|rot|gr\\S\\S?n|blau|lila|fussball|\\d+|\\S+)( schalten| stellen)?';

Words: $VAR1 = '';
$VAR2 = undef;
$VAR3 = 'Aula';
$VAR4 = 'Licht';
$VAR5 = undef;
$VAR6 = '20';
$VAR7 = undef;

Match: AulaLicht20
Unmatch:
Hit with phrase: qr/(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\d+|\S+)( schalten| stellen)?/i
Handle reaction cmd: set $2[@lightName] $5{ true=>on, false=>off, integer=>pct $5, else=>$5[@rgb] }
Simple bracket selection (No. 5): '20'
Replaced bracket: set $2[@lightName] $5{ true=>on, false=>off, integer=>pct $5, else=>$5[@rgb] } -> set $2[@lightName] $5{ true=>on, false=>off, integer=>pct 20, else=>$5[@rgb] }
Advanced bracket replacement. $5@rgb = set $2[@lightName] $5{ true=>on, false=>off, integer=>pct 20, else=>### }
Adding modlist: "rgb F19824","rgb ffdec3","rgb ffc494","rgb ed0000","rgb 38FF04","rgb 0000F9","rgb DE43C9","rgb 73FF57"
Keyword (5): '20'
ARRAY evaluation: else:  empty:
array: rgb F19824 rgb ffdec3 rgb ffc494 rgb ed0000 rgb 38FF04 rgb 0000F9 rgb DE43C9 rgb 73FF57
Numeral word found. '20' converted to; 20
Field #20 doesn't exist in Array!
Field #20 doesn't exist in Array!
Nothing to do: Licht Aula 20



Haecksler

Habe nochmals ein Problemchen, habe eine T2F_keywordlist in der unteranderem "Weihnachtsbeleuchtung innen" steht, habe nun festgestellt, dass sämtliche Befehle mit Weihnacht.* nicht funktionieren, weil in dem Wort "Weihnacht" die "ACHT" erkannt wird. siehe Log.

Numeral word found. 'Weihnachtsbeleuchtung innen' converted to; 8
Field #8 doesn't exist in Array!
Field #8 doesn't exist in Array
!

Ersetze ich Weihnachtsbeleuchtung durch Osterbeleuchtung funktioniert es....ist vielleicht ein Bug.

Talk2Fhem Version: 0.5.3
Decoding Text: Weihnachtsbeleuchtung innen Licht aus
After correction:
Weihnachtsbeleuchtung innen Licht aus
Command part: ' Weihnachtsbeleuchtung innen Licht aus'
Command left: 'Weihnachtsbeleuchtung innen Licht aus'
talk Evaluate search:
Weihnachtsbeleuchtung innen Licht aus =~ /(im |in )?(@roomsJalousie) && Jalousie (im )?&&(\S+|\d+)/i
talk Evaluate search:
Weihnachtsbeleuchtung innen Licht aus =~ /(im )?(@etagen) && Jalousien && (auf )?(\S+|\d+)/i
talk Evaluate search:
Weihnachtsbeleuchtung innen Licht aus =~ /(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(\d+)( dimmen)?/i
talk Evaluate search:
Weihnachtsbeleuchtung innen Licht aus =~ /(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\S+)( schalten| stellen)?/i
Command after Phrasecheck: 
Keylists: $VAR1 = undef;
$VAR2 = undef;
$VAR3 = 'rooms';
$VAR4 = undef;
$VAR5 = undef;
$VAR6 = 'colors';

Filled lists: $VAR1 = '(im |in )?(wohnzimmer|tv|fernseher|aula|allah|aura|treppe|schlafzimmer|garten|aussen|au\\S\\S?en|weg|Weihnachtsbeleuchtung innen|Weihnachtsbeleuchtung au\\S\\S?en)';
$VAR2 = '(liegt|nicht|Licht|Dimmer|Lampe)';
$VAR3 = '(auf )?(fernsehen|arbeiten|lesen|g\\S\\S?ste|rot|gr\\S\\S?n|blau|lila|fussball|\\S+)( schalten| stellen)?';

Words: $VAR1 = '';
$VAR2 = undef;
$VAR3 = 'Weihnachtsbeleuchtung innen';
$VAR4 = 'Licht';
$VAR5 = undef;
$VAR6 = 'aus';
$VAR7 = undef;

Match: Weihnachtsbeleuchtung innenLichtaus
Unmatch:
Hit with phrase: qr/(im |in )?(@rooms) && (liegt|nicht|Licht|Dimmer|Lampe) && (auf )?(@colors|\S+)( schalten| stellen)?/i
Handle reaction cmd: set $2[@lightName] $5{ true=>on, false=>off, else=>$5[@rgb] }
Advanced bracket replacement. $5@rgb = set $2[@lightName] $5{ true=>on, false=>off, else=>### }
Adding modlist: "rgb F19824","rgb ffdec3","rgb ffc494","rgb ed0000","rgb 38FF04","rgb 0000F9","rgb DE43C9","rgb 73FF57"
Keyword (5): 'aus'
ARRAY evaluation: else:  empty:
array: rgb F19824 rgb ffdec3 rgb ffc494 rgb ed0000 rgb 38FF04 rgb 0000F9 rgb DE43C9 rgb 73FF57
Numeral word found. 'aus' converted to; aus
Searching position of 'aus' in 'fernsehen arbeiten|lesen g\S\S?ste rot gr\S\S?n blau lila fussball'
ARRAY Replacement Failed! set $2[@lightName] $5{ true=>on, false=>off, else=>### }
Advanced bracket replacement. $5 true=>on, false=>off, else=>###  = set $2[@lightName] ###
Keyword (5): 'aus'
HASH evaluation:
$VAR1 = {
          'false' => {
                       'order' => 1,
                       'val' => 'off'
                     },
          'else' => {
                      'order' => 2,
                      'val' => '###'
                    },
          'true' => {
                      'val' => 'on',
                      'order' => 0
                    }
        };

Word found (false): 'aus' replace with 'off'
Advanced bracket replacement. $2@lightName = set ### off
Adding modlist: "HUEDevice3","LichtAula","Dimmer_1","Schalter_Aussen_Sw_02","Schalter_PM1","Schalter_3"
Keyword (2): 'Weihnachtsbeleuchtung innen'
ARRAY evaluation: else:  empty:
array: HUEDevice3 LichtAula Dimmer_1 Schalter_Aussen_Sw_02 Schalter_PM1 Schalter_3
Numeral word found. 'Weihnachtsbeleuchtung innen' converted to; 8
Field #8 doesn't exist in Array!
Field #8 doesn't exist in Array!
Nothing to do: Weihnachtsbeleuchtung innen Licht aus


Gruß,
Stefan

ahlermi

Lustig, ich habe mich gerade über das selbe geärgert, ich wollte die Weihnachts Musik abspielen, mit "X MAS" hat es dann geklappt :-D

Ursache ist die "acht" in Weinachten, das führt dazu das Talk2Fhem das als "8" umsetzt ;-)

Wollte gerade nach einer neueren Version gucken, aber ich werde das dann wohl rausnehmen müssen, bzw mit space arbeiten etc.

Gruß Michael
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

Prof. Dr. Peter Henning

Und wenn man auf Weihelfbeleuchtung umsteigt  ?  8)

LG

pah

Haecksler

Ist schade, dass hier nicht's mehr passiert...der Ansatz ist genial.

obi

Hallo,
Der Modul Autor scheint nicht mehr aktiv zu sein. Ich habe dieses Modul immer im Einsatz, da die Möglichkeit mit Attributen in den Geräten zu arbeiten genial ist. Und die Flexibilität mit der Erkennung von Zeiten usw. auch praktisch ist.
Ich habe bei mir im Modul Quelltext die komplette Nummern Erkennung  auskommentiert. Weil ich auch schon auf diese  Fehler gestoßen bin. Bevor ich den Text von talk2fhem verarbeiten lasse benutze ich die perl Bibliothek  word2num. Das funktioniert prima.

VG Obi

ahlermi

Genau so habe ich das auch gelöst:

Für Alexa ganz wichtig ersetzen von "8min" in "in 8 Minuten".

Geht mit Sicherheit hübscher, läuft aber gut.



sub clean_talk($){

  my $input = "";
  my $num = 0;
  my @Words = ();
  my @EVENTS = ();
  my $word = "";
  my $word_org = "";
  my $word_conv = "";
  my $word1 = false;
  my $word1_char = "";
  my $word1_num = 0;
  my $word2 = false;
  my $calc_num = 0;

  $input = $_[0];

  Log 3, "clean_talk: " . $input;

  $input=~ s/prozent\shundert\s/prozent und in /ig;
  $input=~ s/\sein\shundert\s/ 100 /ig;

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

  foreach(@EVENTS) {
     $word = "$_";
     $word =~ s/sein/ein/g;
     $word =~ s/rein/ein/g;
     $word =~ s/raus/aus/g;
     $word =~ s/\%/Prozent/g;

#     $word_org = $word;
#     while ($word_org =~ /(\dmin)/g) {
#        my $word_org = $1;
#        my $word_conv = $1;
#        $word_conv =~ s/min/\ Minuten/g;
#        $word =~ s/$word_org/$word_conv/g;
#        print "Word is $word_org, conv $word_conv, result $word \n";
#     }
     $word  =~ s/^(\d+)min$/'in '.$1.' Minuten'/e;
     $word  =~ s/^(\d+)h$/'in '.$1.' Stunden'/e;


     $word_conv = $word;
     $word_conv =~ s/ß/ss/g;

     undef $num;
     $num = Lingua::DEU::Word2Num::w2n($word_conv);
     if ( $word_conv eq "fünfzig" ){
       $num = 50;
     }
     if ( $word_conv eq "fünfzehn" ){
       $num = 15;
     }
     if ( $word_conv eq "fünf" ){
       $num = 5;
     }
     if ( $word_conv eq "zwölf" ){
       $num = 12;
     }


#     Log 3, $word . " " . $num;
     
     if ( $word eq "und" && $word1 == true ) {
       $word2 = true;
     }else{
       if ( defined($num) ){
         if ( $word1 == true ){
           if ( $word2 == true ){       
             $calc_num = $word1_num + $num;
             push @Words, $calc_num;
             $word1 = false;
             $word2 = false;
           }else{
             push @Words, $word1_num;
             push @Words, $num;
             $word1 = false;
           }       
         }else{
           $word1 = true;
           $word1_num = $num;
           $word1_char = $word;
         }     
       }else{
         if ( $word1 == true ){
           if ( $word2 == true ){       
             push @Words, $word1_num;
             push @Words, "und";
             push @Words, $word;
             $word1 = false;
             $word2 = false;
           }else{
             push @Words, $word1_num;
             push @Words, $word;
             $word1 = false;
           }       
         }else{
           push @Words, $word;
           $word1 = false;
           $word2 = false;
         }
       }
     }       
  }
  if ( $word1 == true ){
    push @Words, $word1_num;
  }
  return join(' ', @Words);

}

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

Haecksler

Hallo ahlermi,
kannst du mir eventuell eine kleine Anleitung geben, wo ich was anpassen muss. Danke!

Ich gehe mal davon aus, dass du Talk2Fhem mit dem voice Reading im echodevice triggerst.
Wie schaut denn da dein Trigger-Dummy aus?

Gruß,
Stefan

ahlermi

#373
Ich arbeite mit dem Alexa Plugin und einem Custom Skill, außerdem natürlich Telebot etc.


fhemIntents

#IntentName=<sample utterance>
{my_AlexaTalk("$ALLES")}={ALLES:wo+ist+robbi;gute+Nacht;Schlaf+Gut;Play;Pause;Stop;Next;Weiter;wir+gehen;ich+gehe}
{my_AlexaTalk("stell $ALLES")}=stell+{ALLES:AMAZON.SearchQuery}
{my_AlexaTalk("bescheid $ALLES")}=bescheid+{ALLES:AMAZON.SearchQuery}
{my_AlexaTalk("wie $ALLES")}=wie+{ALLES:AMAZON.SearchQuery}
#{my_AlexaTalk("$STARTWORT $ALLES")}={STARTWORT:spiel;spiele;dimme;mach;mache;fahr;fahre;schalte;stell;stelle;fahr} {ALLES:AMAZON.SearchQuery}




sub my_AlexaTalk($){
    Log 3, "Alexa: " . $_[0];
    return fhem("set talk alexa=" . clean_talk($_[0]));
}


Ich habe dafür aber im 39_Talk2Fhem.pm eine Änderung machen müssen damit die Antwort sofort kommt und nicht Asyncron.

sub Talk2Fhem_Set($@)

                #$return = $hash->{$status};
                $return = ReadingsVal($name, $status, undef);
                if ($status eq "done"){
                  $return = ["alles klar","wird gemacht","ich kümmere mich drum","ei ei sir"]->[rand(4)];
                }

        }
        $hash->{STATE} = "Ready";
        return($return);


Custom Skill:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "haus",
            "intents": [
                {
                    "name": "FHEMperlCodeIntent",
                    "slots": [
                        {
                            "name": "FHEMperlCodeIntent_ALLES",
                            "type": "FHEMperlCodeIntent_ALLES_Value"
                        }
                    ],
                    "samples": [
                        "{FHEMperlCodeIntent_ALLES}"
                    ]
                },
                {
                    "name": "FHEMperlCodeIntentB",
                    "slots": [
                        {
                            "name": "FHEMperlCodeIntentB_ALLES",
                            "type": "AMAZON.SearchQuery"
                        }
                    ],
                    "samples": [
                        "fahre {FHEMperlCodeIntentB_ALLES}",
                        "fahr {FHEMperlCodeIntentB_ALLES}",
                        "färbe {FHEMperlCodeIntentB_ALLES}",
                        "nach {FHEMperlCodeIntentB_ALLES}",
                        "spiel {FHEMperlCodeIntentB_ALLES}",
                        "spiele {FHEMperlCodeIntentB_ALLES}",
                        "wie {FHEMperlCodeIntentB_ALLES}",
                        "wo {FHEMperlCodeIntentB_ALLES}",
                        "stelle {FHEMperlCodeIntentB_ALLES}",
                        "stell {FHEMperlCodeIntentB_ALLES}",
                        "schalte {FHEMperlCodeIntentB_ALLES}",
                        "mach {FHEMperlCodeIntentB_ALLES}"
                    ]
                },
                {
                    "name": "FHEMperlCodeIntentC",
                    "slots": [
                        {
                            "name": "FHEMperlCodeIntentC_ALLES",
                            "type": "AMAZON.SearchQuery"
                        }
                    ],
                    "samples": [
                        "es soll mich informieren {FHEMperlCodeIntentC_ALLES}",
                        "es soll mir bescheid {FHEMperlCodeIntentC_ALLES}",
                        "sag {FHEMperlCodeIntentC_ALLES}",
                        "informiere {FHEMperlCodeIntentC_ALLES}"
                    ]
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "FHEMperlCodeIntentD",
                    "slots": [
                        {
                            "name": "FHEMperlCodeIntentD_ALLES",
                            "type": "AMAZON.SearchQuery"
                        }
                    ],
                    "samples": [
                        "gibt {FHEMperlCodeIntentD_ALLES}",
                        "kannst {FHEMperlCodeIntentD_ALLES}",
                        "kann {FHEMperlCodeIntentD_ALLES}",
                        "ist {FHEMperlCodeIntentD_ALLES}",
                        "was {FHEMperlCodeIntentD_ALLES}",
                        "warum {FHEMperlCodeIntentD_ALLES}",
                        "wie {FHEMperlCodeIntentD_ALLES}"
                    ]
                }
            ],
            "types": [
                {
                    "name": "FHEMperlCodeIntentB_STARTWORT_Value",
                    "values": [
                        {
                            "name": {
                                "value": "spiel"
                            }
                        },
                        {
                            "name": {
                                "value": "spiele"
                            }
                        },
                        {
                            "name": {
                                "value": "dimme"
                            }
                        },
                        {
                            "name": {
                                "value": "mach"
                            }
                        },
                        {
                            "name": {
                                "value": "mache"
                            }
                        },
                        {
                            "name": {
                                "value": "fahr"
                            }
                        },
                        {
                            "name": {
                                "value": "fahre"
                            }
                        },
                        {
                            "name": {
                                "value": "schalte"
                            }
                        },
                        {
                            "name": {
                                "value": "stell"
                            }
                        },
                        {
                            "name": {
                                "value": "stelle"
                            }
                        }
                    ]
                },
                {
                    "name": "FHEMperlCodeIntent_ALLES_Value",
                    "values": [
                        {
                            "name": {
                                "value": "wo ist robbi"
                            }
                        },
                        {
                            "name": {
                                "value": "gute Nacht"
                            }
                        },
                        {
                            "name": {
                                "value": "Schlaf Gut"
                            }
                        },
                        {
                            "name": {
                                "value": "Play"
                            }
                        },
                        {
                            "name": {
                                "value": "Pause"
                            }
                        },
                        {
                            "name": {
                                "value": "Stop"
                            }
                        },
                        {
                            "name": {
                                "value": "Next"
                            }
                        },
                        {
                            "name": {
                                "value": "Weiter"
                            }
                        },
                        {
                            "name": {
                                "value": "wir gehen"
                            }
                        },
                        {
                            "name": {
                                "value": "ich gehe"
                            }
                        }
                    ]
                }
            ]
        }
    }
}


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

Haecksler

Vielen Dank für die Beschreibung, dass mit dem custom skill ist mir zu kompliziert...werde mal versuchen das meiste mit alexa Routinen hinzubekommen.