From 77240566a82f817b9148be20c653ce0dcb538e09 Mon Sep 17 00:00:00 2001 From: Phill Date: Sun, 4 Mar 2018 22:35:05 +0000 Subject: [PATCH] 39_Talk2Fhem.pm: bracket decoding bug fixed git-svn-id: https://svn.fhem.de/fhem/trunk@16331 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/39_Talk2Fhem.pm | 361 ++++++++++++++++++++------------------ 1 file changed, 192 insertions(+), 169 deletions(-) diff --git a/fhem/FHEM/39_Talk2Fhem.pm b/fhem/FHEM/39_Talk2Fhem.pm index c90d26b72..6e4c7655f 100644 --- a/fhem/FHEM/39_Talk2Fhem.pm +++ b/fhem/FHEM/39_Talk2Fhem.pm @@ -98,6 +98,10 @@ # replace ; to ;; in timecommands # Add 1 day if timecode is in past in hour phrases # Added async warning if keywordlist is unkown +# 04.03.2018 0.4.6 +# Breacket decoding bug fixed +# +# ################################################################ # TODO: # @@ -109,6 +113,9 @@ # zusätzlich unmodifizierte zeit greifbar machen # timephrase kombies morgen früh um 9 uhr ist unzuverlässig. evtl order einführen, dann kann auch die splittung weg # viertel zeitphrasen +# - regexp +#vordefinierte regex zu verfügung stellen +# (i[nm]|vor|auf|unter|hinter)? ?(de[rmn]|die|das)? ? package main; @@ -123,7 +130,7 @@ use Encode qw(decode encode); my %Talk2Fhem_globals; -$Talk2Fhem_globals{version}="0.4.5"; +$Talk2Fhem_globals{version}="0.4.6"; $Talk2Fhem_globals{EN}{erase} = ['\bplease\b', '\balso\b', '^msgtext:']; $Talk2Fhem_globals{EN}{numbers} = { @@ -552,13 +559,13 @@ sub Talk2Fhem_Set($@) { my ( $hash, $name, @args ) = @_; (return "\"set $name\" needs at least one argument") unless(scalar(@args)); - (return "Unknown argument ?, choose one of ! cleartriggers:noArg cleartimers:noArg") if($args[0] eq "?"); + (return "Unknown argument ?, choose one of ! cleartriggers:noArg cleartimers:noArg") if($args[0] eq "?"); if ($hash->{STATE} ne "Initialized") { #Fülle nur cmds array - } elsif ($args[0] eq "cleartimers") { + } elsif ($args[0] eq "cleartimers") { AnalyzeCommand($hash->{CL}, "delete at_".$name."_.*"); - } elsif ($args[0] eq "cleartriggers") { + } elsif ($args[0] eq "cleartriggers") { $$hash{helper}{notifies} = []; Talk2Fhem_UpdND($hash); @@ -767,11 +774,11 @@ sub Talk2Fhem_Get($$@) sub Talk2Fhem_Attr(@) { my ( $cmd, $name, $attrName, $attrValue ) = @_; - - # $cmd - Vorgangsart - kann die Werte "del" (löschen) oder "set" (setzen) annehmen + + # $cmd - Vorgangsart - kann die Werte "del" (löschen) oder "set" (setzen) annehmen # $name - Gerätename # $attrName/$attrValue sind Attribut-Name und Attribut-Wert - return unless $init_done; + return unless $init_done; #Log 1, Dumper @_; if ($attrName eq "T2F_keywordlist" or $attrName eq "T2F_modwordlist") { $defs{$name}{helper}{phrase} = undef; @@ -893,9 +900,12 @@ my $list = (shift || AttrVal($hash->{NAME}, $type, "")); $list = Talk2Fhem_parseParams($list); #Log 1, Dumper $list; return ("Error while parsing Keywordlist.\n$list" ) unless(ref($list) eq "HASH"); + delete $hash->{helper}{T2F_andwordlist}; + delete $hash->{helper}{$type}; foreach (keys %$list) { # $$list{$_} = Talk2Fhem_parseArray($$list{$_}); - $hash->{helper}{$type}{$_} = Talk2Fhem_parseArray($$list{$_}); + $hash->{helper}{T2F_andwordlist}{$_} = Talk2Fhem_parseArray($$list{$_}) if /^\&/; + $hash->{helper}{$type}{s/^\&//r} = Talk2Fhem_parseArray($$list{$_}); } # my $modlist = Talk2Fhem_parseParams(AttrVal($name, "T2F_modwordlist", ""));; @@ -978,13 +988,20 @@ my @cmds = split(/ und (?!$Talk2Fhem_globals{DE}{numberre})/, $txt); # CHECK if $cmd[0] hit Talk2Fhem_test. Unless dont split. And make a deeper analysis. #if ($#cmd) # before test remove time and if phrases simple -# unless (Talk2Fhem_test($me, $cmds[0])) { +# unless (Talk2Fhem_test($me, $cmds[0])) # Nun schauen wir mal was vor und nach dem und ist. # könnte phrasentreffer auf kompletten satz ausschluss geben -# -# } + + +# Tiefe UND analyse +#for (@cmd) { + #} +#print Dumper $$me{helper}{T2F_andwordlist}; + +#return; + foreach (@cmds) { @@ -1215,7 +1232,7 @@ my $punmatch = $cmd; my @dir = ($$spec{origin}); T2FL($myname, 5, "$myname Evaluate search:\n$cmd =~ /$$phr{key}/i") if ref $res; for my $fphr (@fphrs) { -# if (my @d = ($cmd =~ qr/$fphr/i)){ +# if (my @d = ($cmd =~ qr/$fphr/i)) if ($fphr =~ s/^\?//){ my @d = (eval { $cmd =~ /$fphr/i}); my $m = $&; @@ -1517,9 +1534,12 @@ my %react; # my @cs = map { my @t = split('\|', $_ =~ s/^\(|\)$//gr); \@t } $$phr{key} =~ /(? 10; } - +#T2FL($myname, 5, "CS: ".Dumper @cs); + # @keywords = @{$cs[($clipno-1)]}; # Log 1, Dumper @cs; # @cs = grep { /^\(/ } @cs; # Log 1, Dumper @cs; # Log 1, "-----> ".$cs[($clipno-1)]; (my $clip = $cs[($clipno)]) =~ s/^\(|\)$//g; +#T2FL($myname, 5, "clip: ".Dumper $clip); # push(@keywords, split('\|', $clip) extract_bracketed($clip, '()')); @keywords = map { /^\(/ ? $_ : split('\|', $_=~s/^\||\|$//gr) } extract_multiple($clip, [sub { extract_bracketed($_[0], '()') }]); +#T2FL($myname, 5, "keywords: ".Dumper @keywords); # @keywords = split('\|',); #Log 1, Dumper @keywords; @@ -1551,7 +1574,7 @@ my %react; } else { @keywords = @{$keylist{$hitnokeylist[$clipno]}}; } - T2FL($myname, 4, "Searching position of $d in @keywords"); +# T2FL($myname, 4, "Searching position of $d in @keywords"); @keywords = map { Talk2Fhem_escapeumlauts($_, $disu) } @keywords; T2FL($myname, 4, "Searching position of $d in @keywords"); my $i=0; @@ -1686,36 +1709,36 @@ return($_[2]);

Talk2Fhem

@@ -1895,36 +1918,36 @@ return($_[2]);

Talk2Fhem