From 26951527f4fb4f52cfd44f4007a0d32f2eb80eab Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Tue, 1 Dec 2015 14:10:03 +0000 Subject: [PATCH] fhem.pl: use AnalyzePerlCommand in ReplaceSetMagic (Forum #44896) git-svn-id: https://svn.fhem.de/fhem/trunk@10063 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/fhem.pl | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/fhem/fhem.pl b/fhem/fhem.pl index fd10b4d8e..913c29e37 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -1507,8 +1507,9 @@ CommandShutdown($$) ##################################### sub -ReplaceSetMagic($@) # Forum #38276 +ReplaceSetMagic($$@) # Forum #38276 { + my $hash = shift; my $nsplit = shift; my $a = join(" ", @_); @@ -1516,11 +1517,7 @@ ReplaceSetMagic($@) # Forum #38276 my $x = ReadingsVal($1,$2,""); $x eq "" ? "[$1:$2]" : $x }/egi; - $a =~ s/{\((.*)\)}/{ - my $x = eval $1; - return ("$1: $@") if($@); - $@ ? $1 : $x - }/eg; + $a =~ s/{\((.*)\)}/AnalyzePerlCommand($hash->{CL},$1,1)/eg; return (undef, split(" ", $a, $nsplit)); } @@ -1542,7 +1539,7 @@ DoSet(@) @a = ReplaceEventMap($dev, \@a, 0) if($attr{$dev}{eventMap}); my $err; - ($err, @a) = ReplaceSetMagic(0, @a) if($featurelevel >= 5.7); + ($err, @a) = ReplaceSetMagic($hash, 0, @a) if($featurelevel >= 5.7); return $err if($err); $hash->{".triggerUsed"} = 0; @@ -1576,7 +1573,9 @@ CommandSet($$) foreach my $sdev (devspec2array($a[0])) { $a[0] = $sdev; + $defs{$sdev}->{CL} = $cl; my $ret = DoSet(@a); + delete $defs{$sdev}->{CL}; push @rets, $ret if($ret); } @@ -2010,8 +2009,6 @@ CommandSetReading($$) return "Usage: setreading \n$namedef" if(@a != 3); my $err; - ($err, @a) = ReplaceSetMagic(3,@a) if($featurelevel >= 5.7); - return $err if($err); my @rets; foreach my $sdev (devspec2array($a[0])) { @@ -2020,6 +2017,12 @@ CommandSetReading($$) push @rets, "Please define $sdev first"; next; } + my $hash = $defs{$sdev}; + if($featurelevel >= 5.7) { + $hash->{CL} = $cl; + ($err, @a) = ReplaceSetMagic($hash, 3, @a); + delete($hash->{CL}); + } readingsSingleUpdate($defs{$sdev}, $a[1], $a[2], 1); } return join("\n", @rets);