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