SNIPS: Sprachsteuerung mit Modul Talk2Fhem kombiniert

Begonnen von ahlermi, 17 September 2018, 13:18:28

Vorheriges Thema - Nächstes Thema

ahlermi

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 talk:answers:.*|talk:err:.*|talk:response:.*|talk:status.*done.* {

  my $text = ["Das habe ich nicht verstanden!","Phuu das kann ich noch nicht!","keine Ahnung was du von mir willst.", "Wie bitte?"]->[rand(4)];

  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 " . $text);
    }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");
  }
}


Shortcuts:


attr Snips shortcuts wir gehen=define a_Snips_tmp at +00:00:00 setreading Snips input wir gehen

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

enno

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 Anwender auf Intel®NUC

ahlermi

#2
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'




ausgelagert in eine Routine in 99_myT2FUtils.pm:



use Lingua::DEU::Word2Num;


sub clean_talk($){

  my $input = "";
  my $num = 0;
  my @Words = ();
  my @EVENTS = ();
  my $word = "";
  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;

  @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_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ü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);

}



anpassen am input Notify n_Snips_input.


Snips:input:.* {

  fhem("attr talk Snips Snips");
  fhem("set talk Snips=" . clean_talk( (split(/ /, $EVENT, 2))[1] ) );
#  fhem("set talk Snips=" . clean_talk($EVENT) );

}
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

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

CBSnake

Hi,

top, klappt prima und ich muss nicht schon wieder alle Geräte neu mit Attributen bestücken ;-) und der Befehl auf Telegram und mit snips ist identisch.

Ein paar Exoten hab ich allerdings, evtl hat dazu einer eine Idee ;-)

Medizin bestätigen
Ein wenig|Etwas|viel| heller oder dunkler

Geht das ohne ein custom intent?

Grüße

Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

denis.robel

Hallo ahlermi,

ich bin noch absolut neu in dieser Materie.

Nur so für mein Verständnis:

1. Snips generiert einen Textoutput / Satz der dann an Talk2Fhem übergeben wird
2. Talk2Fhem wandelt den Satz und ist die Schnittstelle zu FHEM

Ist das korrekt so?

Kannst Du bitte mal die Gesamtinstallation beschreiben?

z.B. Snips - inwiefern ohne Konfiguration,
wie wird talk2fhem konfiguriert

und wie sieht die Spracheingabe aus, welche Sätze muss man sprechen, damit es funktioniert...

Ich habe noch gar keinen Plan wie ich anfangen soll Snips mit FHEM zu verheiraten..

VG Denis
VG

Denis

ahlermi

#6
Zitat von: CBSnake am 10 November 2018, 07:06:53
Hi,

top, klappt prima und ich muss nicht schon wieder alle Geräte neu mit Attributen bestücken ;-) und der Befehl auf Telegram und mit snips ist identisch.

Ein paar Exoten hab ich allerdings, evtl hat dazu einer eine Idee ;-)

Medizin bestätigen
Ein wenig|Etwas|viel| heller oder dunkler

Geht das ohne ein custom intent?

Grüße

Achim

Sowas wie Medizin bestätigen habe ich über die Snips Shortcuts gelöst.


attr  shortcuts  wir gehen={my_gehen( );}


Heller etc habe ich für Rollladen, also höher, ohne Custom intent.


#Rolladen verändern
?(bitte) && (@types_blind) && ?(@rooms) && ?(@properties) && ((\d+) (?: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@.* $7[up,down,volumeUp,volumeDown] $6{integer=>$6, empty=>$5[0,0,3,7,15,empty,7]}")},
   answer=>'(( "$7[up,down,up,down]" eq "up") ? "$1{/bitte/=>Gern\,} ich fahre die $2 in folgenden Räumen $DATE $6{integer=>$6, 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 $6{integer=>$6, empty=>$5[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@.*","T2F_types_blind")')
#Rolladen setzen
?(bitte) && (@types_blind) && ?(@rooms) && ?(@properties) && (auf (\d+) (?: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@.* $6{integer=>$2{/Lautstärke/=>volume, /Lüfter/=>, else=>pct} $6, else=>$7{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 $6{integer=>auf $6 Prozent, else=>$7{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@.*","T2F_types_blind")')
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

Hallo Denis,

eigentlich steht alles im 1. Post erklärt was alles zu konfigurieren ist damit es funktioniert.
Wichtig ist, dass alle Wörter welche in Talk2Fhem verwendet werden in dem Dummy "d_snips_dummy" definiert sind, damit Snips die Wörter verstehen/erkennen kann. Hierzu habe ich mir ein DOIF gebastelt, welches alle Wörter zusammenstellt und in das Dummy schreibt. Für den Anfang kannst du aber einfach die Wörter händisch in das Dummy schreiben.
Alles andere ist dann die Konfigiration von Talk2Fhem https://wiki.fhem.de/wiki/Modul_Talk2Fhem

ahlermi

Habe die Antworten mal überarbeitet damit die nicht erfolgreiche Meldung einem nicht so auf den Kecks geht  :)

Außerdem ein Beispiel für Shortcuts ohne Umweg über eigene Routinen.
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

schulzan

Hallo Zusammen,

kann eventuell einer von Euch seine Talk2Fhem Installation posten. Ich stehe da aktuell auf dem Schlauch.

Vor allem komme ich aktuell mit meinen Wünschen in's straucheln.

Ich habe im WZ 5 Lampen. Normalerweise sind Abends 3 davon an (Stehlampe, dimmbare Deckenlampe über der Couch mit 40% und eine weitere). Mit Licht im Wohnzimmer anmachen, sollten also diese 3 eingeschaltet werden.

Wenn wir im WZ essen kommt die vierte über dem Esstisch dazu, und wenn ich etwas zu arbeiten habe wird das volle Programm angemacht, indem auch noch der Deckenfluter dazu kommt, und alle dimmbaren Lampen auf 100% gehen.

Wenn ich aber abends zu Bett gehe, möchte ich natürlich mit Licht im Wohnzimmer ausschalten alle 5 Lampen ausschalten, egal ob sie an waren oder nicht. Lässt sich das irgendwie in Snips und/oder Talk2Fhem reinpressen?

Mein zweites Verständnisproblem - Musik. Die Zentrale ist ein AV Receiver, der sowohl Internetradio abspielt, als auch Medien vom NAS im Keller, als auch in Verbindung mit anderen Geräten CDs, FIRETV, oder DVDs. Lässt sich das irgendwie kombinieren?
Media_Channels wäre bei einem dedizierten Internetradio der Sender -  fein, das verstehe ich. Aber bei dem AV Receiver muss ja mit Chanel erstmal der Eingang Internetradio gewählt werden. wie bilde ich dann die nächste Ebene der Sender ab?

Gruß
Andreas


Meck

Hallo,

ich wollte das auch mal in die Richtung ausprobieren. Dabei bin ich auf den Ansatz und dem Hier gestoßen.
https://forum.fhem.de/index.php/topic,89548.825.html#ratethis

Und versuche gerade die Vorzüge von beidem zu betrachten. Welche seht Ihr wo?

Gruß

Meck

ahlermi

#11
Talk


Internals:
   DEF        # <regex> = <command>
# Examples:
timer && (lösche|zurück)     = set $NAME cleartimers
ereignis\S* && (lösche|zurück)     = set $NAME cleartriggers
( lüften)([?]){0,1}$                = (answer => '{InternalVal("lueftentext","STATE","Ich weiß es nicht")}')
^(wir gehen|ich gehe)( (zur|zu) (\S+))?$  = (cmd=>{my_gehen()})
^(gute nacht|schlaf gut)( (\S+))?$  = (cmd=>{my_nacht()})
^(alles ok)( (\S+))?$               = set myalarmbell off
^(telefon|anruf) (ok|[\w üäö]*erledigt)$ = setreading FritzBox_CM event ok
^wo( (\S+))? robbi$                 = (cmd =>{my_AlexaIntent("wo ist robbi")})
^such(\S+)? robbi$                  = (cmd =>{my_AlexaIntent("wo ist robbi")})
^((IP|ip)|(\D+)?( (IP|ip))( )?)$    = ( answer => '"Die IP ist: " . ReadingsVal("FritzBox","box_ipExtern","")' )
#Garage
garage\S* (auf|hoch|rauf|zu|runter) = set HM_3A6FFD $1{ true => on, false => off }
#Robbi
robbi\S* (an|ein|aus)               = set robbi $1{ true => on, false => off }
#Farben
?(bitte) && (@types_color) && ?(@rooms) && ?(@places) && auf (@colors)( schalten| stellen)?$ =
   (cmd=>'set T2F_types_color=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.* RGB $5[@rgb]',
    answer=>'"Ich schalte folgende Geräte $DATE auf $5@: ".T2F_answer("T2F_types_color=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.*","T2F_types_color")')
#Wecker
?(bitte) && (@types_wecker) && ?(@rooms) && (auf ((\d+) uhr(?:(?: )(\d+)){0,1})|(aus)\S*)( stellen| setzen| einstellen| ein)?$ =
  (cmd=>'set T2F_types_wecker=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).* $8{/aus/=>Aus, empty=>$6$7{integer=>:$7, empty=>:00}}',
   answer=>'"ich stelle den Wecker in folgenden Räumen $DATE auf $8{/aus/=>Aus, empty=>$6 Uhr $7{integer=>$7, word=>, else=>}}: ".T2F_answer("T2F_types_wecker=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*","T2F_types_wecker")')
#HEOS Channel
?(bitte) && (@types_heos) && ?(@rooms) && ?(@places) && (@heos_channels) =
   (cmd=>'$3{empty=>, else=>set T2F_types_switch=.*Denon.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.* input OnlineMusic; } set T2F_types_heos=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.* channel $5[@heos_channel]',
    answer=>'"Ich spiele $DATE Musik von $5 $3{empty=>, else=>im $3}"')
#Denon Input
?(bitte) && (@types_heos) && ?(@rooms) && ?(@places) && (@denon_inputs) =
   (cmd=>'set T2F_types_switch=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.* input $5[@denon_input]',
    answer=>'"Ich schalte folgende Geräte $DATE auf $5[@denon_input]: ".T2F_answer("T2F_types_switch=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.*","T2F_types_switch")')
#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")')
#Schalter
?(bitte) && ?(@properties) && (@types_switch) && ?(@rooms) && ?(@places) && (\S+)(schalten|machen)?$ =
   (cmd=>'set T2F_types_switch=.*$3@.*:FILTER=T2F_rooms=.*($4@).*:FILTER=T2F_properties=.*$2@.*:FILTER=T2F_places=.*$5@.* $6{true=>on, false=>off}',
   answer=>'"$AGAIN" ? "dann $DATE wieder $6{true=>ein, false=>aus}" : "$1{/bitte/=>Gern\,} ich schalte folgende Geräte $DATE $6{true=>ein, false=>aus}: ".T2F_answer("T2F_types_switch=.*$3@.*:FILTER=T2F_rooms=.*($4@).*:FILTER=T2F_properties=.*$2@.*:FILTER=T2F_places=.*$5@.*","T2F_types_switch")')
#Licht
##(?:licht|lampe) (\S+ ){0,2}(@rooms) (\S+) = set $2[@lights] $3{ true => on, false => off }
#HEOS Player
?(bitte) && ?(@types_heos) && ?(@rooms) && ?(@places) && (@heos_commands) =
   (cmd=>'set T2F_types_heos=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.* $5[@heos_command]',
    answer=>'"Ich schalte folgende Geräte $DATE auf $5[@heos_command]: ".T2F_answer("T2F_types_heos=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_places=.*$4@.*","T2F_types_heos")')
#Bescheid
(bescheid|informire mich|benachrichtige mich) = { send_to_all("X","Talk", "Ich sollte bescheid geben$IF") }
#(bescheid|informire mich|benachrichtige mich) = $0{/kevin/=>hiphop,/jaqueline/=>gothik,else=>pop}  "Ich sollte bescheid geben$IF"
#Heizung
?(bitte) && (@types_heating) && ?(@rooms) && (auf ((\d+)(?:(?: )(\d+)){0,1} (grad))|auto\S*)( stellen| setzen| einstellen| ein)?$ =
  (cmd=>'set T2F_types_heating=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).* $8{/grad/=>desiredTemperature $6$7{integer=>.$7, word=>, else=>}, empty=>desiredTemperature auto}',
   answer=>'"$AGAIN" ? "dann $DATE wieder auf Automatik" : "Die Durchschnittstemperatur beträgt dort zur Zeit ".averageTemp("T2F_types_heating=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*")." Grad\n$1{/bitte/=>Gern\,} ich stelle die Heizung in folgenden Räumen $DATE auf $8{/grad/=>$6 $7{integer=>komma $7, word=>, else=>} Grad, else=>Automatik}: ".T2F_answer("T2F_types_heating=.*$2{empty=>.+, else=>$2@}.*:FILTER=T2F_rooms=.*($3@).*","T2F_types_heating")')
#Status von etwas
Wie && ?(@properties) && (@types_info) && ?(@rooms) && ?(@places) = (answer=>'T2F_getInfo("T2F_types_info=.*$2@.*:FILTER=T2F_rooms=.*($3@).*:FILTER=T2F_properties=.*$1@.*:FILTER=T2F_places=.*$4@.*","$2@")')
#Zustand
(zustand|status)( \S+)* (\S+) =
   ( answer => {"Der Status ist ".(Value((devspec2array('a:alias~$3'))[0]) || "unbekannt")} )

   FUUID      5c63f980-f33f-6442-f947-b40e2c60cb399870
   NAME       talk
   NR         629
   NTFY_ORDER 50-talk
   STATE      Ready
   TYPE       Talk2Fhem
   READINGS:
     2019-08-04 22:19:13   answers         Ich schalte folgende Geräte  auf stop: Denon im Wohnzimmer 
     2019-08-05 07:09:16   cmds            {my_gehen()}
     2019-08-02 23:47:58   err             No match: ' im wohnzimmer auf onlinemusic'
     2019-02-23 09:11:08   notifies       
     2019-08-05 07:09:15   origin          alexa=
     2019-08-05 07:09:16   response        Fenster sind alle geschlossen. Fahrzeit zur Arbeit 27 Minuten, Verspätung 2 min. Auf wieder sehen
     2019-08-05 07:09:15   set             alexa=ich gehe
     2019-08-05 07:09:16   status          response
   helper:
     LOG        Talk2Fhem Version: 0.6.0c
Decoding Text: alexa=ich gehe
Using User Filter: \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
After correction:
ich gehe
Command part: 'ich gehe'
talk Evaluate search:
ich gehe =~ /wenn .*telefon.*?klingel/i
talk Evaluate search:
ich gehe =~ /wenn .*anruft/i
talk Evaluate search:
ich gehe =~ /wenn .*zuhause/i
talk Evaluate search:
ich gehe =~ /wenn .*alarm.*/i
talk Evaluate search:
ich gehe =~ /wenn .*fenster.*/i
talk Evaluate search:
ich gehe =~ /wenn .*tür.*/i
talk Evaluate search:
ich gehe =~ /wenn .*dunkel.*/i
talk Evaluate search:
ich gehe =~ /wenn .*hell.*/i
talk Evaluate search:
ich gehe =~ /timer && (lösche|zurück)/i
talk Evaluate search:
ich gehe =~ /ereignis\S* && (lösche|zurück)/i
talk Evaluate search:
ich gehe =~ /( lüften)([?]){0,1}$/i
talk Evaluate search:
ich gehe =~ /^(wir gehen|ich gehe)( (zur|zu) (\S+))?$/i
Command after Phrasecheck:
Keylists: $VAR1 = '^\\w+=';

Filled lists: $VAR1 = '^(wir gehen|ich gehe)( (zur|zu) (\\S+))?$';

Words: $VAR1 = 'alexa=';
$VAR2 = 'ich gehe';
$VAR3 = undef;
$VAR4 = undef;
$VAR5 = undef;

Match: ich gehe
Unmatch:
Hit with phrase: qr/^(wir gehen|ich gehe)( (zur|zu) (\S+))?$/i
Handle reaction cmd: {my_gehen()}
Result of cmd: $VAR1 = {
          'cmd' => '{my_gehen()}'
        };

Executing Command: {my_gehen()}
Pushed: {my_gehen()}

     T2F_andwordlist:
       &places:
         Tür
         Steckdose
         Tisch
         Decke
         Esstisch
         Hauswand
         Haustür
         Eingang
         Heizung
         Draußen
         Oben
         Feld
         Hünern
         Nottuln
         fällt
       &rooms:
         Haus|überall|Wohnung
         Wohnzimmer|Wohnbereich
         BadS*
         Toilette|Wc
         Büro|Arbeitszimmer
         eg|ErdgeschoSS?
         Draußen|Garten
         Schlafzimmer
         Esszimmer
         Bastelzimmer
         Keller
         Alice
         Flur
         Waschküche
         Terasse
         Terrasse
         Küche
     T2F_keywordlist:
       colors:
         Aus
         Schwarz
         Dunkles Schiefergrau
         Schiefergrau
         Helles Schiefergrau
         Helles Stahlblau
         Mattes Grau
         Grau
         Dunkelgrau
         Silber
         Hellgrau
         Gainsboro
         Rauchiges Weiß
         Geisterweiß
         Weiß
         Schneeweiß
         Elfenbein
         Blütenweiß
         Muschel
         Altgold
         Leinenfarbe
         Antikes Weiß
         Mandelweiß
         Cremiges Papaya
         Beige
         Mais
         Helles Goldrutengelb
         Hellgelb
         Chiffongelb
         Blasse Goldrutenfarbe
         Khaki
         Gelb
         Gold
         Orange
         Dunkles Orange
         Goldrute
         dunkle Goldrutenfarbe
         Peru
         Schokolade
         Sattelbraun
         Ocker
         Braun
         Dunkelrot
         Kastanienbraun
         Ziegelfarbe
         Indischrot
         Karmesinrot
         Rot
         Orangenrot
         Tomatenrot
         Koralle
         Lachs
         Helles Korallenrot
         Dunkle Lachsfarbe
         Helle Lachsfarbe
         Sandbraun
         Rosiges Braun
         Gelbbraun
         Grobes Braun
         Weizen
         Pfirsich
         Navajoweiß
         Tomatencreme
         Rosige Lavenderfarbe
         Altrosa
         Rosa
         Hellrosa
         Leuchtendes Rosa
         Fuchsie
         Magentarot
         Tiefrosa
         Mittleres Violettrot
         Blasses Violettrot
         Pflaume
         Distel
         Lavendelfarbe
         Violett
         Orchidee
         Dunkles Magentarot
         Violett
         Indigo
         Blauviolett
         Dunkles Violett
         Dunkle Orchideenfarbe
         Mittleres Violett
         Mittlere Orchideenfarbe
         Mittleres Schieferblau
         Schieferblau
         Dunkles Schieferblau
         Mitternachtsblau
         Marineblau
         Dunkelblau
         Mittelblau
         Blau
         Königsblau
         Stahlblau
         Kornblumenblau
         Dodger-Blau
         Tiefes Himmelblau
         Helles Himmelblau
         Himmelblau
         Hellblau
         Zyanblau
         Blaugrün
         Taubenblau
         Helles Cyanblau
         Aliceblau
         Himmelblau
         Cremig Pfefferminz
         Honigmelone
         Aquamarinblau
         Türkis
         Blasses Türkis
         Mittleres Türkis
         Dunkles Türkis
         Mittleres Aquamarinblau
         Helles Seegrün
         Dunkles Zyanblau
         Entenbraun
         Kadettblau
         Mittleres Seegrün
         Dunkles Seegrün
         Hellgrün
         Blassgrün
         Mittleres Frühlingsgrün
         Frühlingsgrün
         Zitronengrün
         Gelbgrün
         Seegrün
         Waldgrün
         Grün
         Dunkelgrün
         Olivfarbiges Graubraun
         Dunkles Olivgrün
         Olivgrün
         Dunkles Khaki
         Gelbgrün
         Hellgrün
         Grüngelb
       denon_inputs:
         Mediaplayer|Mediacenter|kodi|xbmc
         OnlineMusic|heos|internet|Musik
         Sat|Satellit
         Bluetooth|handy|echo
         Aux1|firetv|Amazon
       heos_channels:
         ndr(s)*2
         ROCK-FM
         Radio Kiepenkerl
         wdr(s)*4
         Schlager von heute
         P!nk Radiosender|Pink
         Amy
         80|Achziger|80er
         Roxette
         Unheilig
         Creedence Clearwater Revival
         J.B.O.|JBO
         Guns N Roses
         Mumford & Sons|Mumford and Sons
         Enya
         70|70er|siebziger
         Dire Straits
         Elvis Presley
         Irish & Celtic Folk|Irish Folk|Celtic Folk
         Die Ärzte
         Country
         Montgomery Gentry
         Die Prinzen
         Pur
         Rock-Hits
         RADIO BOB
         RADIO BOB Classic Rock
         Mark Knopfler
       heos_commands:
         play|los|abspielen
         pause|warte|^halt|halt
         weiter|nächstes|next|vor
         stop\S*
         zurück
       mengenrollo:
         (\d+) (?:prozent|%|db)?
         1 wenig
         etwas
         viel
       places:
         Tür
         Steckdose
         Tisch
         Decke
         Esstisch
         Hauswand
         Haustür
         Eingang
         Heizung
         Draußen
         Oben
         Feld
         Hünern
         Nottuln
         fällt
       properties:
         hell
         dunkel
         schwach
         klein
         groß
         doof
       rooms:
         Haus|überall|Wohnung
         Wohnzimmer|Wohnbereich
         BadS*
         Toilette|Wc
         Büro|Arbeitszimmer
         eg|ErdgeschoSS?
         Draußen|Garten
         Schlafzimmer
         Esszimmer
         Bastelzimmer
         Keller
         Alice
         Flur
         Waschküche
         Terasse
         Terrasse
         Küche
       types_blind:
         Rollade
         Rolllade
         Rolladen
         Rollladen
         Rollos
         Lautstärke
         Lüfter
         Musik
         Anlage
       types_color:
         Lampe
         Licht
       types_heating:
         Heizung
         Heizungen
         Temperatur
         Wohnzimmer
         Schlafzimmer
         Bastelzimmer
         Flur
         Alice
         Keller
         Bad
       types_heos:
         Denon
         Anlage
         Verstärker
         Radio
         Zone
         Musik
       types_info:
         warm
         modus
         Betriebsart
         VentiS*
         Temperatur
         lüften
       types_switch:
         Steckdose
         Waschmaschine
         Stehlampe
         Deckenlampe
         Vitrine
         Kino
         Lampe
         Licht
         Leuchte
         Rapsi
         Denon
         Anlage
         Verstärker
         Musik
         Zone
         Bluetooth
         Leinwand
         Radio
         Wasserkocher
         Tannenbaum
         Pool
         Schummerbeleuchtung
         Eckbeleuchtung
         Türbeleuchtung
       types_wecker:
         Wecker
     T2F_modwordlist:
       denon_input:
         Mediaplayer
         OnlineMusic
         Cbl/Sat
         Bluetooth
         Aux1
       heos_channel:
         1
         2
         3
         4
         5
         6
         7
         8
         9
         10
         11
         12
         13
         14
         15
         16
         17
         18
         19
         20
         21
         22
         23
         24
         25
         26
         27
         28
       heos_command:
         play
         pause
         next
         stop
         back
       lights:
         alias=.*licht.*,alias=.*lampe.*
         HM_50B996_Sw_01,HM_50B996_Sw_02
         
         
         
         
       rgb:
         000000
         000000
         8FBC8F
         708090
         778899
         B0C4DE
         696969
         808080
         A9A9A9
         C0C0C0
         D3D3D3
         DCDCDC
         F5F5F5
         F8F8FF
         FFFFFF
         FFFAFA
         FFFFF0
         FFFAF0
         FFF5EE
         FDF5E6
         FAF0E6
         FAEBD7
         FFEBCD
         FFEFD5
         F5F5DC
         FFF8DC
         FAFAD2
         FFFFE0
         FFFACD
         EEE8AA
         F0E68C
         FFFF00
         FFD700
         FFA500
         FF8C00
         DAA520
         B8860B
         CD853F
         D2691E
         8B4513
         A0522D
         A52A2A
         8B0000
         800000
         B22222
         CD5C5C
         DC143C
         FF0000
         FF4500
         FF6347
         FF7F50
         FA8072
         F08080
         E9967A
         FFA07A
         F4A460
         BC8F8F
         D2B48C
         DEB887
         F5DEB3
         FFDAB9
         FFDEAD
         FFE4C4
         FFF0F5
         FFE4E1
         FFC0CB
         FFB6C1
         FF69B4
         FF00FF
         FF00FF
         FF1493
         C71585
         DB7093
         DDA0DD
         D8BFD8
         E6E6FA
         EE82EE
         DA70D6
         8B008B
         800080
         4B0082
         8A2BE2
         9400D3
         9932CC
         9370DB
         BA55D3
         7B68EE
         6A5ACD
         483D8B
         191970
         000080
         00008B
         0000CD
         0000FF
         4169E1
         4682B4
         6495ED
         1E90FF
         00BFFF
         87CEFA
         87CEEB
         ADD8E6
         00FFFF
         00FFFF
         B0E0E6
         E0FFFF
         A0CE00
         F0FFFF
         F5FFFA
         F0FFF0
         7FFFD4
         40E0D0
         AFEEEE
         48D1CC
         00CED1
         66CDAA
         20B2AA
         008B8B
         008080
         5F9EA0
         3CB371
         8FBC8F
         90EE90
         98FB98
         00FA9A
         00FF7F
         00FF00
         32CD32
         2E8B57
         228B22
         008000
         006400
         6B8E23
         556B2F
         808000
         BDB76B
         9ACD32
         7FFF00
         ADFF2F
       rollos:
         alias=Rollade.*
         st_rolladen_wohnzimmer
         HM_54FFE5
         HM_54FFE5
         HM_54639A
     if:
       HASH(0x9c10b68)
       HASH(0xa6fa280)
       HASH(0xa325c70)
       HASH(0xa632048)
       HASH(0xa72fcc0)
       HASH(0xa569b80)
       HASH(0x9c0fe30)
       HASH(0xa54ffd0)
     notifiers:
     phrase:
       HASH(0xa69ba40)
       HASH(0xa6dddb0)
       HASH(0xa3ce580)
       HASH(0x9eff6e8)
       HASH(0x9aa6a78)
       HASH(0x9ca8198)
       HASH(0xa4aec40)
       HASH(0x9c6eb68)
       HASH(0x8e57580)
       HASH(0x9e11b78)
       HASH(0x82f8528)
       HASH(0x9ed7e80)
       HASH(0xa6d1f90)
       HASH(0x9d2b600)
       HASH(0xa6dbc68)
       HASH(0xa25eb50)
       HASH(0xa509f68)
       HASH(0xa33e030)
       HASH(0xa37f3d0)
       HASH(0xa5dda70)
       HASH(0x9df8ab8)
       HASH(0x9a9eb80)
       HASH(0xa5f0b48)
       HASH(0x9d59670)
Attributes:
   T2F_disableumlautescaping 1
   T2F_filter \bbitte\b,\bauch\b,\bkann\b,\bsoll\b
   T2F_if     wenn .*telefon.*?klingel = [FritzBox_CM:event] eq "ring"
wenn .*anruft = [FritzBox_CM:event] eq "ring"
wenn .*zuhause = [michael:anwesend] eq "on"
wenn .*alarm.* = [st_alarm:state] ne "closed"
wenn .*fenster.* = [st_fenster:state] ne "closed"
wenn .*tür.* = [st_tuer:state] ne "closed"
wenn .*dunkel.* = [dunkel:state] ne "on"
wenn .*hell.* = [dunkel:state] ne "off"
   T2F_keywordlist &rooms = Haus|überall|Wohnung, Wohnzimmer|Wohnbereich, Bad\S*, Toilette|Wc, Büro|Arbeitszimmer, eg|Erdgescho\S\S?, Draußen|Garten, Schlafzimmer, Esszimmer, Bastelzimmer, Keller, Alice, Flur, Waschküche, Terasse, Terrasse, Küche
colors = Aus, Schwarz, Dunkles Schiefergrau, Schiefergrau, Helles Schiefergrau, Helles Stahlblau, Mattes Grau, Grau, Dunkelgrau, Silber, Hellgrau, Gainsboro, Rauchiges Weiß, Geisterweiß, Weiß, Schneeweiß, Elfenbein, Blütenweiß, Muschel, Altgold, Leinenfarbe, Antikes Weiß, Mandelweiß, Cremiges Papaya, Beige, Mais, Helles Goldrutengelb, Hellgelb, Chiffongelb, Blasse Goldrutenfarbe, Khaki, Gelb, Gold, Orange, Dunkles Orange, Goldrute, dunkle Goldrutenfarbe, Peru, Schokolade, Sattelbraun, Ocker, Braun, Dunkelrot, Kastanienbraun, Ziegelfarbe, Indischrot, Karmesinrot, Rot, Orangenrot, Tomatenrot, Koralle, Lachs, Helles Korallenrot, Dunkle Lachsfarbe, Helle Lachsfarbe, Sandbraun, Rosiges Braun, Gelbbraun, Grobes Braun, Weizen, Pfirsich, Navajoweiß, Tomatencreme, Rosige Lavenderfarbe, Altrosa, Rosa, Hellrosa, Leuchtendes Rosa, Fuchsie, Magentarot, Tiefrosa, Mittleres Violettrot, Blasses Violettrot, Pflaume, Distel, Lavendelfarbe, Violett, Orchidee, Dunkles Magentarot, Violett, Indigo, Blauviolett, Dunkles Violett, Dunkle Orchideenfarbe, Mittleres Violett, Mittlere Orchideenfarbe, Mittleres Schieferblau, Schieferblau, Dunkles Schieferblau, Mitternachtsblau, Marineblau, Dunkelblau, Mittelblau, Blau, Königsblau, Stahlblau, Kornblumenblau, Dodger-Blau, Tiefes Himmelblau, Helles Himmelblau, Himmelblau, Hellblau, Zyanblau, Blaugrün, Taubenblau, Helles Cyanblau, Aliceblau, Himmelblau, Cremig Pfefferminz, Honigmelone, Aquamarinblau, Türkis, Blasses Türkis, Mittleres Türkis, Dunkles Türkis, Mittleres Aquamarinblau, Helles Seegrün, Dunkles Zyanblau, Entenbraun, Kadettblau, Mittleres Seegrün, Dunkles Seegrün, Hellgrün, Blassgrün, Mittleres Frühlingsgrün, Frühlingsgrün, Zitronengrün, Gelbgrün, Seegrün, Waldgrün, Grün, Dunkelgrün, Olivfarbiges Graubraun, Dunkles Olivgrün, Olivgrün, Dunkles Khaki, Gelbgrün, Hellgrün, Grüngelb
&places = Tür, Steckdose, Tisch, Decke, Esstisch, Hauswand, Haustür, Eingang, Heizung, Draußen, Oben, Feld, Hünern, Nottuln, fällt
types_color = Lampe,Licht
types_heating = Heizung, Heizungen, Temperatur, Wohnzimmer, Schlafzimmer, Bastelzimmer, Flur, Alice, Keller, Bad
types_switch = Steckdose, Waschmaschine, Stehlampe, Deckenlampe, Vitrine, Kino, Lampe, Licht, Leuchte, Rapsi, Denon, Anlage, Verstärker, Musik, Zone, Bluetooth, Leinwand, Radio, Wasserkocher, Tannenbaum, Pool, Schummerbeleuchtung, Eckbeleuchtung, Türbeleuchtung
types_blind = Rollade, Rolllade, Rolladen, Rollladen, Rollos, Lautstärke, Lüfter, Musik, Anlage
properties = hell, dunkel, schwach, klein, groß, doof
types_info = warm, modus, Betriebsart, Venti\S*, Temperatur, lüften
types_wecker = Wecker
#heos_channels = ndr(\s)*2, kiepenkerl, wdr(\s)*4, pink, amy, 80|Achziger, Roxette, Unheilig, 'Chreedence Clearwater Revival', JBO, 'Guns N Roses', 'Mumfort & Sons'
#heos_channels = 'NDR 2', ROCK-FM, RKStreamNord, WDR4, 'Schlager von heute', 'P!nk Radiosender', 'Amy Macdonald', 80er, Roxette, Unheilig, 'Creedence Clearwater Revival', J.B.O., 'Guns N Roses', 'Mumford & Sons', Enya, 70er, 'Dire Straits', 'Elvis Presley', 'Irish & Celtic Folk', 'Die Ärzte', Country, 'Montgomery Gentry', 'Die Prinzen', Pur
heos_channels = ndr(\s)*2, ROCK-FM, Radio Kiepenkerl, wdr(\s)*4, Schlager von heute, P!nk Radiosender|Pink, Amy, 80|Achziger|80er, Roxette, Unheilig, Creedence Clearwater Revival, J.B.O.|JBO, Guns N Roses, Mumford & Sons|Mumford and Sons, Enya, 70|70er|siebziger, Dire Straits, Elvis Presley, Irish & Celtic Folk|Irish Folk|Celtic Folk, Die Ärzte, Country, Montgomery Gentry, Die Prinzen, Pur, Rock-Hits, RADIO BOB, RADIO BOB Classic Rock, Mark Knopfler
heos_commands = play|los|abspielen, pause|warte|^halt|halt, weiter|nächstes|next|vor, 'stop\S*', zurück
types_heos = Denon, Anlage, Verstärker, Radio, Zone, Musik
denon_inputs = Mediaplayer|Mediacenter|kodi|xbmc, OnlineMusic|heos|internet|Musik, Sat|Satellit,Bluetooth|handy|echo, Aux1|firetv|Amazon
mengenrollo = '(\d+) (?:prozent|%|db)?', 1 wenig, etwas, viel
   T2F_language DE
   T2F_modwordlist rollos = alias=Rollade.*, st_rolladen_wohnzimmer, HM_54FFE5, HM_54FFE5, HM_54639A
lights = "alias=.*licht.*,alias=.*lampe.*", "HM_50B996_Sw_01,HM_50B996_Sw_02", , , ,
rgb = 000000, 000000, 8FBC8F, 708090, 778899, B0C4DE, 696969, 808080, A9A9A9, C0C0C0, D3D3D3, DCDCDC, F5F5F5, F8F8FF, FFFFFF, FFFAFA, FFFFF0, FFFAF0, FFF5EE, FDF5E6, FAF0E6, FAEBD7, FFEBCD, FFEFD5, F5F5DC, FFF8DC, FAFAD2, FFFFE0, FFFACD, EEE8AA, F0E68C, FFFF00, FFD700, FFA500, FF8C00, DAA520, B8860B, CD853F, D2691E, 8B4513, A0522D, A52A2A, 8B0000, 800000, B22222, CD5C5C, DC143C, FF0000, FF4500, FF6347, FF7F50, FA8072, F08080, E9967A, FFA07A, F4A460, BC8F8F, D2B48C, DEB887, F5DEB3, FFDAB9, FFDEAD, FFE4C4, FFF0F5, FFE4E1, FFC0CB, FFB6C1, FF69B4, FF00FF, FF00FF, FF1493, C71585, DB7093, DDA0DD, D8BFD8, E6E6FA, EE82EE, DA70D6, 8B008B, 800080, 4B0082, 8A2BE2, 9400D3, 9932CC, 9370DB, BA55D3, 7B68EE, 6A5ACD, 483D8B, 191970, 000080, 00008B, 0000CD, 0000FF, 4169E1, 4682B4, 6495ED, 1E90FF, 00BFFF, 87CEFA, 87CEEB, ADD8E6, 00FFFF, 00FFFF, B0E0E6, E0FFFF, A0CE00, F0FFFF, F5FFFA, F0FFF0, 7FFFD4, 40E0D0, AFEEEE, 48D1CC, 00CED1, 66CDAA, 20B2AA, 008B8B, 008080, 5F9EA0, 3CB371, 8FBC8F, 90EE90, 98FB98, 00FA9A, 00FF7F, 00FF00, 32CD32, 2E8B57, 228B22, 008000, 006400, 6B8E23, 556B2F, 808000, BDB76B, 9ACD32, 7FFF00, ADFF2F
heos_channel = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28
heos_command = play, pause, next, stop, back
denon_input = Mediaplayer, OnlineMusic, Cbl/Sat, Bluetooth, Aux1
   T2F_origin ^\w+=
   room       Alexa
   userattr   WhatsApp Snips teleBot
   verbose    0


Denon


Internals:
   CHANGED   
   Clients    :DENON_AVR_ZONE:
   DEF        192.168.69.102:23
   DeviceName 192.168.69.102:23
   FD         55
   FUUID      5c63f97b-f33f-6442-2bae-b11f7d3124444d21
   NAME       Denon
   NR         331
   NTFY_ORDER 50-Denon
   PARTIAL   
   STATE      off
   TIMEOUT    3
   TYPE       DENON_AVR
   READINGS:
     2018-11-02 17:44:04   HASH(0x8ceba08) on
     2019-07-15 20:48:21   allZoneStereo   off
     2019-04-27 17:09:16   ampAssign       HASH(0xdc3eea0)
     2019-07-16 19:10:51   aspectRatio     16:9
     2018-11-02 17:43:32   audioFormat     2/0/.0
     2018-11-04 00:29:23   audioOutHDMI    HASH(0x87111d8)
     2019-07-30 10:30:33   audysseyLFC     off
     2019-07-15 20:48:22   autoStandby     15min
     2019-08-04 22:01:33   bass            0
     2019-07-16 19:10:51   cinemaEQ        off
     2019-08-03 00:22:44   currentAlbum    -
     2019-08-03 00:22:44   currentArtist   -
     2019-08-03 00:22:44   currentBitrate  -
     2019-08-03 00:22:44   currentCover    http://192.168.69.102/img/album%20art_S.png?1564784564000
     2019-08-03 00:22:44   currentMedia    -
     2019-08-03 00:22:44   currentPlaytime -
     2019-08-03 00:22:44   currentStation  -
     2019-08-03 00:22:44   currentStream   -
     2019-08-03 00:22:44   currentTitle    -
     2018-11-02 17:46:28   dialogLevelAdjust 0
     2019-08-03 00:22:44   digitalInput    auto
     2019-07-16 19:10:51   display         bright
     2019-08-04 22:01:33   dynamicCompression off
     2019-08-03 00:22:44   dynamicEQ       on
     2019-08-03 00:22:44   dynamicVolume   medium
     2019-07-15 20:48:22   eco             off
     2018-11-02 17:46:30   graphicEQ       off
     2019-08-03 00:22:44   input           Aux1
     2019-08-03 00:22:44   inputSound      hdmi
     2019-08-03 00:22:44   levelCenter     0
     2019-08-03 00:22:44   levelFrontLeft  0
     2019-08-03 00:22:44   levelFrontRight 0
     2019-08-03 00:22:44   levelSourroundLeft 0
     2019-08-03 00:22:44   levelSourroundRight 0
     2019-07-15 20:48:22   levelSubwoofer  0
     2019-06-19 20:00:08   lock            off
     2019-07-16 19:10:51   loudness        on
     2019-08-04 22:01:33   lowFrequencyEffects 0
     2019-06-19 20:00:08   model           AVR-X4300H
     2019-08-04 22:03:02   monitorOut      1
     2019-08-03 00:22:44   multEQ          reference
     2019-07-30 10:30:31   mute            off
     2019-08-03 00:22:44   playStatus      stopped
     2019-08-05 07:09:16   power           off
     2019-07-30 10:30:31   presence        present
     2019-07-16 19:10:51   resolution      auto
     2019-07-16 19:10:51   resolutionHDMI  auto
     2019-08-04 22:22:32   samplingRate    -
     2019-07-15 20:48:21   setup           off
     2019-08-04 22:22:33   signal          PCM
     2019-07-30 10:30:31   sleep           off
     2019-08-04 22:01:33   sound           HASH(0x80a3b68)
     2019-08-05 07:09:05   state           off
     2019-08-05 08:08:52   stateAV         off
     2019-08-04 22:22:32   surroundMode    Movie
     2019-08-04 22:01:33   toneControl     off
     2019-08-04 22:01:33   treble          0
     2019-07-16 19:10:51   trigger1        off
     2019-07-16 19:10:51   trigger2        off
     2019-07-16 19:10:51   tunerBand       FM
     2019-07-30 10:30:33   tunerFrequency  87.5 MHz
     2019-07-16 19:10:51   tunerMode       auto
     2019-07-30 10:30:33   tunerPreset     1
     2019-07-16 19:10:51   videoProcessingMode auto
     2019-08-03 00:22:44   videoSelect     off
     2019-08-04 22:03:03   volume          45
     2019-08-04 22:03:03   volumeMax       98
     2019-08-04 22:03:03   volumeStraight  -35
     2019-08-05 07:09:05   zone2           off
     2019-08-03 19:33:09   zone3           off
     2019-08-05 08:08:52   zoneMain        off
   helper:
     INPUT      AUX1
     PARTIAL   
     deviceIP   192.168.69.102
     isPause    0
     isPlaying  0
     nextConnectionCheck 1564986237.72199
     playTimeCheck 0
     volume     45
Attributes:
   T2F_rooms  !Wohnzimmer, Erdgeschoss, Wohnbereich, Haus
   T2F_types_blind !Lautstärke, Musik, Anlage
   T2F_types_switch !Denon, Anlage, Verstärker, Musik, Zone, alles
   cmdIcon    muteT:rc_MUTE
   devStateIcon on:rc_GREEN:main_off mainOff:rc_YELLOW:main_on off:rc_STOP:main_on absent:rc_RED:main_on muted:rc_MUTE@green:muteT playing:rc_PLAY@green:pause paused:rc_PAUSE@green:play disconnected:rc_RED
   group      Multimedia
   room       Wohnzimmer
   stateFormat stateAV
   userattr   T2F_places:textField-long T2F_properties:textField-long T2F_rooms:textField-long T2F_types_color:textField-long T2F_types_heating:textField-long T2F_types_info:textField-long T2F_types_switch:textField-long T2F_types_blind:textField-long
   webCmd     volume:mute:input:sound:favorite:preset


Licht klein Wohnzimmer

Internals:
   DEF        50B99602
   FUUID      5c63f97e-f33f-6442-37be-7dfb9da67ad84388
   NAME       HM_50B996_Sw_02
   NOTIFYDEV  global
   NR         550
   NTFY_ORDER 50-HM_50B996_Sw_02
   STATE      off
   TYPE       CUL_HM
   chanNo     02
   device     HM_50B996
   READINGS:
     2019-08-05 07:09:19   CommandAccepted yes
     2019-08-05 07:09:19   deviceMsg       off (to VCCU)
     2019-08-05 07:09:19   level           0
     2019-08-05 07:09:19   pct             0
     2019-08-05 07:09:19   recentStateType ack
     2019-08-05 07:09:19   state           off
     2019-08-05 07:09:19   timedOn         off
     2019-08-05 07:09:18   trigLast        fhem:02
   helper:
     dlvlCmd    ++A011F1345650B9960202000000
     peerFriend peerSens,peerVirt
     peerOpt    3:switch
     regLst     1,3p
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     role:
       chn        1
     tmpl:
Attributes:
   T2F_properties klein
   T2F_rooms  !Wohnzimmer, Erdgeschoss, Wohnung, Haus, eg
   T2F_types_switch !Deckenlampe, Licht, Lampe, Deckenbeleuchtung, alles
   alias      Wohnzimmer Licht klein
   devStateIcon on:light_downlight@orange off:light_downlight
   fp_Altbau  185,515,0
   fp_WetterDash 363,415,0,HM_50B996_Sw_02,
   genericDeviceType light
   icon       light_downlight
   model      HM-LC-SW2PBU-FM
   room       System->CUL_HM,Homebridge,Wohnzimmer
   snipsMapping SetOnOff:cmdOn=on,cmdOff=off
GetOnOff:currentVal=state,valueOff=off,valueOn=on
   snipsName  Licht klein
   snipsRoom  Wohnzimmer
   userattr   Steckdose2 Steckdose2_map T2F_places:textField-long T2F_properties:textField-long T2F_rooms:textField-long T2F_types_blind:textField-long T2F_types_color:textField-long T2F_types_heating:textField-long T2F_types_info:textField-long T2F_types_switch:textField-long dummy dummy_map structexclude
   webCmd     statusRequest:toggle:on:off


MAX Heizung Wohnzimmer

Internals:
   DEF        HeatingThermostat 040549
   FUUID      5c63f977-f33f-6442-10bb-01a31d6b1f3d9d52
   IODev      cm
   NAME       MAX_040549
   NR         86
   STATE      auto, 26.9 (19.5)C
   TYPE       MAX
   addr       040549
   type       HeatingThermostat
   READINGS:
     2019-07-27 10:08:47   RSSI            -72.5
     2018-09-27 21:24:55   TimeInformationHour 2
     2019-07-27 10:08:41   battery         low
     2019-07-27 10:08:41   batteryState    low
     2019-07-27 10:08:41   desiredTemperature 19.5
     2019-04-11 15:00:27   firmware        1.6
     2019-04-11 15:00:27   groupid         0
     2019-07-27 10:08:41   mode            auto
     2019-08-05 04:30:55   msgcnt          46
     2019-07-27 10:08:47   state           19.5 °C (rf error)
     2019-07-27 10:08:14   temperature     26.9
     2019-04-11 15:00:27   testresult      255
     2019-07-27 10:08:41   valveposition   0
     2019-07-27 10:08:47   weekprofile-0-Sat-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-0-Sat-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
     2019-07-27 10:08:47   weekprofile-1-Sun-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-1-Sun-time 00:00-08:30  /  08:30-22:00  /  22:00-00:00
     2019-07-27 10:08:47   weekprofile-2-Mon-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-2-Mon-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
     2019-07-27 10:08:47   weekprofile-3-Tue-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-3-Tue-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
     2019-07-27 10:08:47   weekprofile-4-Wed-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-4-Wed-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
     2019-07-27 10:08:47   weekprofile-5-Thu-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-5-Thu-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
     2019-07-27 10:08:47   weekprofile-6-Fri-temp 18.0 °C  /  19.5 °C  /  18.0 °C
     2019-07-27 10:08:47   weekprofile-6-Fri-time 00:00-08:30  /  08:30-23:00  /  23:00-00:00
   internals:
     interfaces thermostat;battery;temperature
Attributes:
   IODev      cm
   T2F_places Heizung !
   T2F_rooms  Haus !Wohnzimmer
   T2F_types_heating Heizung,Temperatur,Wohnzimmer
   T2F_types_info warm,Temperatur => Die Heizung T2F_answer ist auf '.punkt_komma(ReadingsVal($device, 'desiredTemperature', '') ).' Grad eingestellt

modus,Betriebsart => Die Betriebsart T2F_answer ist #mode#(auto=Automatik)(manuel=Hand)

Venti.* => Das Ventil T2F_answer ist #valveposition# Prozent geöffnet
   alias      Heizung Wohnzimmer
   fm_type    temp,desiredtemp,tempbutton,actuators
   fp_Altbau  140,485,5,Wohnzimmer,
   fp_Home    140,485,5,Wohnzimmer
   icon       sani_heating_level_0
   room       Homebridge,System->MAX,Wohnzimmer
   scanTemp   1
   scnProcessByDesiChange 0
   scnShutterList MAX_0d4aa5,MAX_0d48e4
   snipsMapping SetNumeric:currentVal=desiredTemperature,cmd=desiredTemperature,minVal=5,maxVal=24,step=1,type=Temperatur
GetNumeric:currentVal=desiredTemperature,minVal=5,maxVal=24,type=Temperatur
   snipsName  Heizung, Temperatur
   snipsRoom  Wohnzimmer
   stateFormat {sprintf("%s, %.1f (%.1f)C", ReadingsVal($name,"mode"," "), ReadingsVal($name,"temperature",0), ReadingsVal($name,"desiredTemperature",0))}
   userattr   scnProcessByDesiChange:0,1 scnShutterList scnModeHandling:NOCHANGE,AUTO,MANUAL desiredTemperature T2F_places:textField-long T2F_properties:textField-long T2F_rooms:textField-long T2F_types_color:textField-long T2F_types_heating:textField-long T2F_types_info:textField-long T2F_types_switch:textField-long T2F_types_blind:textField-long
   webCmd     desiredTemperature


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

#12
Rollade Wohnzimmer Groß
Internals:
   AHL3_MSGCNT 52
   AHL3_RAWMSG A0DF0A41054640BF134560601C800::-81.5:AHL3
   AHL3_RSSI  -81.5
   AHL3_TIME  2019-08-05 05:29:26
   DEF        54640B
   FUUID      5c63f97b-f33f-6442-c649-64c058c76ec4bdc0
   IODev      AHL3
   LASTInputDev AHL3
   MSGCNT     52
   NAME       HM_54640B
   NOTIFYDEV  global
   NR         315
   NTFY_ORDER 50-HM_54640B
   STATE      on
   TYPE       CUL_HM
   chanNo     01
   lastMsg    No:F0 - t:10 s:54640B d:F13456 0601C800
   peerList   HM_37C0AA_Btn_01,HM_37C0AA_Btn_02,
   protLastRcv 2019-08-05 05:29:24
   protRcv    47 last_at:2019-08-05 05:29:24
   protResnd  4 last_at:2019-08-04 05:27:08
   protSnd    43 last_at:2019-08-05 05:29:26
   protState  CMDs_done
   rssi_AHL3  cnt:19 min:-98 max:-88 avg:-93.36 lst:-93
   rssi_HM_37C0AA cnt:7 min:-79 max:-70 avg:-74.28 lst:-72
   rssi_at_AHL3 cnt:52 min:-99 max:-78 avg:-83.18 lst:-81.5
   READINGS:
     2019-08-05 05:28:55   CommandAccepted yes
     2018-09-27 21:24:32   D-firmware      2.8
     2018-09-27 21:24:32   D-serialNr      OEQ0047961
     2019-08-05 05:29:24   deviceMsg       on (to VCCU)
     2019-08-05 05:29:24   level           100
     2019-08-05 05:29:24   motor           stop:on
     2019-08-05 05:29:24   pct             100
     2019-07-30 10:30:07   peerList        HM_37C0AA_Btn_01,HM_37C0AA_Btn_02,
     2019-04-04 10:52:35   powerOn         2019-04-04 10:52:35
     2019-08-05 05:29:24   recentStateType info
     2019-08-05 05:28:53   sonnenschutz    off
     2019-08-05 05:29:24   state           on
     2019-08-05 05:29:24   timedOn         off
     2019-08-04 19:42:46   trigLast        HM_37C0AA_Btn_01:short
     2019-08-04 19:42:46   trig_HM_37C0AA_Btn_01 Short_135
   helper:
     HM_CMDNR   240
     cSnd       11F1345654640B020100,11F1345654640B0201C8
     dlvlCmd    ++A011F1345654640B0201C8
     mId        0005
     peerFriend peerSens,peerVirt
     peerOpt    3:blindActuator
     regLst     0,1,3p
     rxType     1
     supp_Pair_Rep 0
     dir:
       cur        stop
       rct        up
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +54640B,00,00,00
       nextSend   1564975766.78031
       prefIO     
       rxt        0
       vccu       
       p:
         54640B
         00
         00
         00
     mRssi:
       mNo        F0
       io:
         AHL3:
           -79.5
           -79.5
     prt:
       bErr       0
       sProc      0
       rspWait:
     q:
       qReqConf   00
       qReqStat   
     role:
       chn        1
       dev        1
       prs        1
     rpt:
       IO         AHL3
       flg        A
       ts         1564975766.68102
       ack:
         HASH(0x5ab1418)
         F08002F1345654640B00
     rssi:
       AHL3:
         avg        -93.3684210526316
         cnt        19
         lst        -93
         max        -88
         min        -98
       HM_37C0AA:
         avg        -74.2857142857143
         cnt        7
         lst        -72
         max        -70
         min        -79
       at_AHL3:
         avg        -83.1826923076923
         cnt        52
         lst        -81.5
         max        -78
         min        -99
     tmpl:
Attributes:
   IODev      AHL3
   T2F_properties klein, Garten
   T2F_rooms  Wohnzimmer
   T2F_types_blind !Rollade, Rolllade, Rollos
   alias      Rollade Wohnzimmer Garten
   autoReadReg 4_reqStatus
   compass    SE,SSE,S,SSW
   devStateIcon on:fts_shutter_1w_0@orange:off off:fts_shutter_1w_100@orange:on opend:fts_shutter_1w_0@orange:off closed:fts_shutter_1w_100@orange:on [1-9](.5){0,1}:fts_shutter_1w_100@orange:on 1[0-9](.5){0,1}:fts_shutter_1w_90@orange:on 2[0-9](.5){0,1}:fts_shutter_1w_80@orange:on 3[0-9](.5){0,1}:fts_shutter_1w_70@orange:on 4[0-9](.5){0,1}:fts_shutter_1w_60@orange:on 5[0-9]:fts_shutter_1w_50@orange:off 6[0-9](.5){0,1}:fts_shutter_1w_40@orange:off 7[0-9](.5){0,1}:fts_shutter_1w_30@orange:off 8[0-9](.5){0,1}:fts_shutter_1w_20@orange:off 9[0-9](.5){0,1}:fts_shutter_1w_10@orange:off set_.*:scc_868@orange .*:fts_shutter_1w_100@red:on
   expert     2_raw
   firmware   2.8
   fp_Altbau  220,515,0,HM_54640B
   genericDeviceType blind
   group      Rollade
   icon       fts_window_2w
   model      HM-LC-BL1-FM
   msgRepeat  14
   peerIDs    00000000,37C0AA01,37C0AA02,
   room       System->CUL_HM,Homebridge,Wohnzimmer
   serialNr   OEQ0047961
   snipsMapping SetNumeric:currentVal=pct,cmd=pct,minVal=0,maxVal=100,step=25
GetNumeric:currentVal=pct,cmd=pct,minVal=0,maxVal=100,step=25
   snipsName  Rollade
   snipsRoom  Wohnzimmer
   sonnenschutzstand 100
   subType    blindActuator
   userattr   compass sonnenschutzstand automin automax fenster, T2F_places:textField-long T2F_properties:textField-long T2F_rooms:textField-long T2F_types_color:textField-long T2F_types_heating:textField-long T2F_types_info:textField-long T2F_types_switch:textField-long T2F_types_blind:textField-long
   webCmd     stop


Ich hoffe damit hast du erst mal das wichtigste ;-)

Heos Channels sind die Kanäle vom Denon wenn das Gerät auf OnlineMusik gestellt ist, also ist auch der Input Wechsel mit drin, guck dir das mal an #HEOS Channel
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