2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

98_DOIF.pm: fixed: incorrect assignment of the device for set and get functions in Perl mode

git-svn-id: https://svn.fhem.de/fhem/trunk@22570 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Damian 2020-08-10 06:25:19 +00:00
parent fdde1b85b6
commit d9420dbb8f

View File

@ -2119,6 +2119,7 @@ sub DOIF_CheckCond($$) {
} }
$cmdFromAnalyze="$hash->{NAME}: ".sprintf("warning in condition c%02d",($condition+1)); $cmdFromAnalyze="$hash->{NAME}: ".sprintf("warning in condition c%02d",($condition+1));
$lastWarningMsg=""; $lastWarningMsg="";
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
my $ret=$hash->{MODEL} eq "Perl" ? eval("package DOIF; $command"):eval ($command); my $ret=$hash->{MODEL} eq "Perl" ? eval("package DOIF; $command"):eval ($command);
if($@){ if($@){
@ -2134,7 +2135,7 @@ sub DOIF_CheckCond($$) {
} }
$lastWarningMsg=""; $lastWarningMsg="";
$cmdFromAnalyze = undef; $cmdFromAnalyze = undef;
$hs=$cur_hs;
return ($ret,$err); return ($ret,$err);
} }
@ -3210,6 +3211,7 @@ CmdDoIfPerl($$)
my $ret; my $ret;
my $err=""; my $err="";
my $i=0; my $i=0;
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
my $msg; my $msg;
@ -3235,8 +3237,10 @@ CmdDoIfPerl($$)
$hash->{helper}{last_timer}=0; $hash->{helper}{last_timer}=0;
$hash->{helper}{sleeptimer}=-1; $hash->{helper}{sleeptimer}=-1;
return("","") if ($tail =~ /^ *$/); if ($tail =~ /^ *$/) {
$hs=$cur_hs;
return("","");
}
$tail =~ s/\$VAR/\$hash->{var}/g; $tail =~ s/\$VAR/\$hash->{var}/g;
$tail =~ s/\$_(\w+)/\$hash->\{var\}\{$1\}/g; $tail =~ s/\$_(\w+)/\$hash->\{var\}\{$1\}/g;
$tail =~ s/\$SELF/$hash->{NAME}/g; $tail =~ s/\$SELF/$hash->{NAME}/g;
@ -3245,16 +3249,27 @@ CmdDoIfPerl($$)
return ($msg,$err) if ($err); return ($msg,$err) if ($err);
($err,$tail)=DOIF_DEF_TPL($hash,"defs",$tail); ($err,$tail)=DOIF_DEF_TPL($hash,"defs",$tail);
return ($tail,$err) if ($err); if ($err) {
$hs=$cur_hs;
return ($tail,$err);
}
($err,$tail)=DOIF_FOR($hash,"defs",$tail); ($err,$tail)=DOIF_FOR($hash,"defs",$tail);
return($tail,$err) if ($err); if ($err) {
$hs=$cur_hs;
return ($tail,$err);
}
($err,$tail)=DOIF_TPL($hash,"defs",$tail); ($err,$tail)=DOIF_TPL($hash,"defs",$tail);
return ($tail,$err) if ($err); if ($err) {
$hs=$cur_hs;
return ($tail,$err);
}
($err,$msg)=DOIF_Perlblock($hash,"defs",$tail); ($err,$msg)=DOIF_Perlblock($hash,"defs",$tail);
return ($tail,$msg) if ($err); if ($err) {
$hs=$cur_hs;
return ($tail,$err);
}
# while ($tail ne "") { # while ($tail ne "") {
# ($beginning,$perlblock,$err,$tail)=GetBlockDoIf($tail,'[\{\}]'); # ($beginning,$perlblock,$err,$tail)=GetBlockDoIf($tail,'[\{\}]');
@ -3300,6 +3315,7 @@ CmdDoIfPerl($$)
} }
} }
} }
$hs=$cur_hs;
return("","") return("","")
} }
@ -3435,6 +3451,7 @@ DOIF_Define($$$)
return undef if (AttrVal($hash->{NAME},"disable","")); return undef if (AttrVal($hash->{NAME},"disable",""));
my $err; my $err;
my $msg; my $msg;
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
if (AnalyzeCommandChain(undef,"version 98_DOIF.pm noheader") =~ "^98_DOIF.pm (.*)Z") { if (AnalyzeCommandChain(undef,"version 98_DOIF.pm noheader") =~ "^98_DOIF.pm (.*)Z") {
$hash->{VERSION}=$1; $hash->{VERSION}=$1;
@ -3462,9 +3479,11 @@ DOIF_Define($$$)
if ($err ne "") { if ($err ne "") {
$msg=$cmd if (!$msg); $msg=$cmd if (!$msg);
my $errmsg="$name $type: $err: $msg"; my $errmsg="$name $type: $err: $msg";
$hs=$cur_hs;
return $errmsg; return $errmsg;
} else { } else {
DOIF_Set_Filter ($hash); DOIF_Set_Filter ($hash);
$hs=$cur_hs;
return undef; return undef;
} }
} }
@ -3478,6 +3497,7 @@ DOIF_Attr(@)
my $hash = $defs{$a[1]}; my $hash = $defs{$a[1]};
my $pn=$hash->{NAME}; my $pn=$hash->{NAME};
my $ret=""; my $ret="";
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
if (($a[0] eq "set" and $a[2] eq "disable" and ($a[3] eq "0")) or (($a[0] eq "del" and $a[2] eq "disable"))) if (($a[0] eq "set" and $a[2] eq "disable" and ($a[3] eq "0")) or (($a[0] eq "del" and $a[2] eq "disable")))
@ -3504,6 +3524,7 @@ DOIF_Attr(@)
if ($err ne "") { if ($err ne "") {
$msg=$cmd if (!$msg); $msg=$cmd if (!$msg);
$hs=$cur_hs;
return ("$err: $msg"); return ("$err: $msg");
} }
} elsif($a[0] eq "set" and $a[2] eq "disable" and $a[3] eq "1") { } elsif($a[0] eq "set" and $a[2] eq "disable" and $a[3] eq "1") {
@ -3518,6 +3539,7 @@ DOIF_Attr(@)
} elsif($a[0] eq "set" && $a[2] eq "state") { } elsif($a[0] eq "set" && $a[2] eq "state") {
delete $hash->{Regex}{"STATE"}; delete $hash->{Regex}{"STATE"};
my ($block,$err)=ReplaceAllReadingsDoIf($hash,$a[3],-2,0); my ($block,$err)=ReplaceAllReadingsDoIf($hash,$a[3],-2,0);
$hs=$cur_hs;
return $err if ($err); return $err if ($err);
} elsif($a[0] eq "del" && $a[2] eq "state") { } elsif($a[0] eq "del" && $a[2] eq "state") {
delete $hash->{Regex}{"STATE"}; delete $hash->{Regex}{"STATE"};
@ -3562,6 +3584,7 @@ DOIF_Attr(@)
} elsif($a[0] eq "set" && ($a[2] eq "DOIF_Readings" or $a[2] eq "event_Readings")) { } elsif($a[0] eq "set" && ($a[2] eq "DOIF_Readings" or $a[2] eq "event_Readings")) {
my ($def,$err)=addDOIF_Readings($hash,$a[3],$a[2]); my ($def,$err)=addDOIF_Readings($hash,$a[3],$a[2]);
if ($err) { if ($err) {
$hs=$cur_hs;
return ("error in $a[2] $def, $err"); return ("error in $a[2] $def, $err");
} else { } else {
if ($init_done) { if ($init_done) {
@ -3576,6 +3599,7 @@ DOIF_Attr(@)
} elsif($a[0] eq "set" && ($a[2] eq "uiTable" || $a[2] eq "uiState")) { } elsif($a[0] eq "set" && ($a[2] eq "uiTable" || $a[2] eq "uiState")) {
if ($init_done) { if ($init_done) {
my $err=DOIF_uiTable_def($hash,$a[3],$a[2]); my $err=DOIF_uiTable_def($hash,$a[3],$a[2]);
$hs=$cur_hs;
return $err if ($err); return $err if ($err);
DOIF_reloadFW; DOIF_reloadFW;
} }
@ -3585,10 +3609,12 @@ DOIF_Attr(@)
} elsif($a[0] eq "set" && $a[2] eq "startup") { } elsif($a[0] eq "set" && $a[2] eq "startup") {
my ($cmd,$err)=ParseCommandsDoIf($hash,$a[3],0); my ($cmd,$err)=ParseCommandsDoIf($hash,$a[3],0);
if ($err) { if ($err) {
$hs=$cur_hs;
return ("error in startup $a[3], $err"); return ("error in startup $a[3], $err");
} }
} }
DOIF_Set_Filter($hash); DOIF_Set_Filter($hash);
$hs=$cur_hs;
return undef; return undef;
} }
@ -3617,10 +3643,12 @@ DOIF_Set($@)
my $arg = $a[1]; my $arg = $a[1];
my $value = (defined $a[2]) ? $a[2] : ""; my $value = (defined $a[2]) ? $a[2] : "";
my $ret=""; my $ret="";
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
if ($arg eq "disable" or $arg eq "initialize" or $arg eq "enable") { if ($arg eq "disable" or $arg eq "initialize" or $arg eq "enable") {
if (AttrVal($hash->{NAME},"disable","")) { if (AttrVal($hash->{NAME},"disable","")) {
$hs=$cur_hs;
return ("modul ist deactivated by disable attribut, delete disable attribut first"); return ("modul ist deactivated by disable attribut, delete disable attribut first");
} }
} }
@ -3681,6 +3709,7 @@ DOIF_Set($@)
$cmdList.=$hash->{perlblock}{$i}.":noArg "; $cmdList.=$hash->{perlblock}{$i}.":noArg ";
} }
} }
$hs=$cur_hs;
return "unknown argument ? for $pn, choose one of disable:noArg enable:noArg $initialize $checkall $cmdList $setList"; return "unknown argument ? for $pn, choose one of disable:noArg enable:noArg $initialize $checkall $cmdList $setList";
} else { } else {
my @rl = split(" ", AttrVal($pn, "readingList", "")); my @rl = split(" ", AttrVal($pn, "readingList", ""));
@ -3693,7 +3722,10 @@ DOIF_Set($@)
$doRet = 1; $doRet = 1;
} }
}; };
return if($doRet); if($doRet) {
$hs=$cur_hs;
return;
}
if (ReadingsVal($pn,"mode","") ne "disabled") { if (ReadingsVal($pn,"mode","") ne "disabled") {
if ($hash->{MODEL} ne "Perl") { if ($hash->{MODEL} ne "Perl") {
foreach my $i (keys %{$hash->{attr}{cmdState}}) { foreach my $i (keys %{$hash->{attr}{cmdState}}) {
@ -3718,6 +3750,7 @@ DOIF_Set($@)
#return "unknown argument $arg for $pn, choose one of disable:noArg initialize:noArg enable:noArg cmd $setList"; #return "unknown argument $arg for $pn, choose one of disable:noArg initialize:noArg enable:noArg cmd $setList";
} }
} }
$hs=$cur_hs;
return $ret; return $ret;
} }
@ -3748,6 +3781,7 @@ sub DOIF_ExecTimer
my $name=$hash->{NAME}; my $name=$hash->{NAME};
my $subname=${$timer}->{subname}; my $subname=${$timer}->{subname};
my $param=${$timer}->{param} if (defined ${$timer}->{param}); my $param=${$timer}->{param} if (defined ${$timer}->{param});
my $cur_hs=$hs;
$hs=$hash; $hs=$hash;
delete ($::defs{$name}{READINGS}{"timer_$timername"}); delete ($::defs{$name}{READINGS}{"timer_$timername"});
if (!defined ($param)) { if (!defined ($param)) {
@ -3760,6 +3794,7 @@ sub DOIF_ExecTimer
::Log3 ($::defs{$name}{NAME},1 , "$name error in $subname: $@"); ::Log3 ($::defs{$name}{NAME},1 , "$name error in $subname: $@");
::readingsSingleUpdate ($hash, "error", "in $subname: $@",1); ::readingsSingleUpdate ($hash, "error", "in $subname: $@",1);
} }
$hs=$cur_hs;
} }
sub set_Exec sub set_Exec