diff --git a/fhem/FHEM/SetExtensions.pm b/fhem/FHEM/SetExtensions.pm index 5184cbb11..5d33609e4 100644 --- a/fhem/FHEM/SetExtensions.pm +++ b/fhem/FHEM/SetExtensions.pm @@ -60,19 +60,18 @@ SetExtensions($$@) my $hasOn = ($list =~ m/(^| )on\b/); my $hasOff = ($list =~ m/(^| )off\b/); - my $value = Value($name); - my $em = AttrVal($name, "eventMap", undef); - if($em) { - if(!$hasOn || !$hasOff) { - $hasOn = ($em =~ m/:on\b/) if(!$hasOn); - $hasOff = ($em =~ m/:off\b/) if(!$hasOff); + + if((!$hasOn || !$hasOff) && AttrVal($name, "eventMap", undef)) { + if(!$hasOn) { + my (undef,$value) = ReplaceEventMap($name, [$name, "on"], 0); + $hasOn = ($value ne "on"); + } + if(!$hasOff) { + my (undef,$value) = ReplaceEventMap($name, [$name, "off"], 0); + $hasOff = ($value ne "off"); } - # Following is fix for P#1: /B0:on/on-for-timer 300:5Min/ - # $cmd = ReplaceEventMap($name, $cmd, 1) if($cmd ne "?"); - # Has problem with P#2 (Forum #28855): /on-for-timer 300:5Min/on:Ein/ - # Workaround for P#1 /on-for-timer 300:5Min/on-for-timer:on-for-timer/B0:on/ - (undef,$value) = ReplaceEventMap($name, [$name, $value], 0) if($cmd ne "?"); } + if(!$hasOn || !$hasOff) { # No extension return "Unknown argument $cmd, choose one of $list"; } @@ -169,6 +168,7 @@ SetExtensions($$@) } } elsif($cmd eq "toggle") { + my $value = Value($name); $value = ($1==0 ? "off" : "on") if($value =~ m/dim (\d+)/); # Forum #49391 SE_DoSet($name, $value =~ m/^on/ ? "off" : "on"); diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 62faf11b4..ac5600bf1 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -255,8 +255,8 @@ use vars qw($fhemForked); # 1 in a fhemFork()'ed process, else undef $selectTimestamp = gettimeofday(); $cvsid = '$Id$'; -my $AttrList = "alias comment:textField-long eventMap group room ". - "suppressReading userReadings:textField-long ". +my $AttrList = "alias comment:textField-long eventMap:textField-long ". + "group room suppressReading userReadings:textField-long ". "verbose:0,1,2,3,4,5"; my $currcfgfile=""; # current config/include file @@ -3981,7 +3981,7 @@ ReplaceEventMap($$$) } # $dir: 0:usr,$str is array pointer, 1:dev, $str is string -# perl notation: { dev=>{"re1"=>"Evt1",...}, dpy=>{"re2"=>"Set 1",...}} +# perl notation: { dev=>{"re1"=>"Evt1",...}, fw=>{"re1"=>"Set 1",...}} sub ReplaceEventMap2($$$) {