2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

98_DOIF.pm: new function DOIF_Set_Filter

git-svn-id: https://svn.fhem.de/fhem/trunk@20241 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Damian 2019-09-24 22:00:09 +00:00
parent a41dc3f308
commit a4f970f5fc

View File

@ -53,6 +53,7 @@ sub DOIF_delAll($)
{
my ($hash) = @_;
DOIF_killBlocking($hash);
delete ($hash->{helper});
delete ($hash->{condition});
delete ($hash->{do});
@ -78,9 +79,6 @@ sub DOIF_delAll($)
delete ($hash->{accu});
delete ($hash->{Regex});
#foreach my $key (keys %{$hash->{Regex}}) {
# delete $hash->{Regex}{$key} if ($key !~ "STATE|DOIF_Readings|uiTable");
#}
@ -1380,33 +1378,14 @@ sub AddRegexpTriggerDoIf
$reading="" if (!defined($reading));
my $regexpid='"'.$regexp.'"';
if ($dev) {
$hash->{NOTIFYDEV}.=",$dev" if ($hash->{NOTIFYDEV}!~/,$dev(,|$)/);
if ($reading){
$hash->{Regex}{$type}{$dev}{$element}{$reading}=(($reading =~ "^\&") ? "\^$dev\$":"\^$dev\$:\^$reading: ");
} elsif ($regexp) {
$hash->{Regex}{$type}{$dev}{$element}{$regexpid}="\^$dev\$:$regexp";
}
%ntfyHash = ();
return;
}
my($regdev)=split(/:/,$regexp);
if ($regdev eq "") {
$regdev=".*";
} else {
if ($regdev=~/^\^/) {
$regdev=~s/^\^//;
} else {
$regdev=".*".$regdev;
}
if ($regdev=~/\$$/) {
$regdev=~s/\$$//;
} else {
$regdev.=".*";
}
}
$hash->{NOTIFYDEV}.=",$regdev" if ($hash->{NOTIFYDEV}!~/,$regdev(,|$)/);
$hash->{Regex}{$type}{$dev}{$element}{$regexpid}=$regexp;
%ntfyHash = ();
}
sub addDOIF_Readings
@ -2390,7 +2369,51 @@ sub DOIF_Trigger
return undef;
}
sub DOIF_Set_Filter
{
my ($hash) = @_;
$hash->{helper}{NOTIFYDEV}="global";
$hash->{helper}{DEVFILTER}="\^global\$";
foreach my $type (keys %{$hash->{Regex}}) {
foreach my $device (keys %{$hash->{Regex}{$type}}) {
foreach my $id (keys %{$hash->{Regex}{$type}{$device}}) {
foreach my $reading (keys %{$hash->{Regex}{$type}{$device}{$id}}) {
my $devreg=$hash->{Regex}{$type}{$device}{$id}{$reading};
my($regdev)=split(/:/,$devreg);
my $devfilter=$regdev;
if ($regdev eq "") {
$regdev='.*';
} else {
if ($regdev=~/^\^/) {
$regdev=~s/^\^//;
} else {
$regdev="\.\*".$regdev;
}
if ($regdev=~/\$$/) {
$regdev=~s/\$$//;
} else {
$regdev.='.*';
}
}
my $found=0;
foreach my $item (split(/\|/,$hash->{helper}{NOTIFYDEV})) {
if ($regdev eq $item) {
$found=1;
last;
}
}
if (!$found) {
$hash->{helper}{NOTIFYDEV}.="\|$regdev" ;
$hash->{helper}{DEVFILTER}.="\|$devfilter" ;
}
#$hash->{helper}{NOTIFYDEV}.="\|$regdev" if ($hash->{helper}{NOTIFYDEV}!~/\|$regdev(\||$)/);
#$hash->{helper}{DEVFILTER}.="\|$devfilterori" if ($hash->{helper}{DEVFILTER}!~/\|$devfilter(\||$)/);
}
}
}
}
notifyRegexpChanged($hash,$hash->{helper}{NOTIFYDEV});
}
sub
DOIF_Notify($$)
@ -2407,6 +2430,10 @@ DOIF_Notify($$)
my $eventa;
my $eventas;
return "" if ($dev->{NAME} !~ /$hash->{helper}{DEVFILTER}/);
#Log3 ($pn,1,"pn: $pn, dev: $dev->{NAME}, devfilter: $devfilter");
$eventa = deviceEvents($dev, AttrVal($pn, "addStateEvent", 0));
$eventas = deviceEvents($dev, 1);
delete ($hash->{helper}{DOIF_eventas});
@ -2462,6 +2489,7 @@ DOIF_Notify($$)
my $err=DOIF_uiTable_def($hash,$uiState,"uiState");
Log3 ($pn,3,"$pn: error in uiState: $err") if ($err);
}
DOIF_Set_Filter ($hash);
}
return "" if (!$hash->{helper}{globalinit});
@ -3006,9 +3034,10 @@ CmdDoIfPerl($$)
my $err="";
my $i=0;
$hs=$hash;
$hash->{NOTIFYDEV}="global";
%ntfyHash = ();
#def modify
if ($init_done)
{
DOIF_delTimer($hash);
@ -3023,7 +3052,6 @@ CmdDoIfPerl($$)
DOIF_Attr ("set",$hash->{NAME},$key,AttrVal($hash->{NAME},$key,""));
}
}
}
$hash->{helper}{last_timer}=0;
@ -3092,8 +3120,6 @@ CmdDoIf($$)
my $last_do;
#def modify
$hash->{NOTIFYDEV}="global";
%ntfyHash = ();
if ($init_done)
{
DOIF_delTimer($hash);
@ -3227,6 +3253,7 @@ DOIF_Define($$$)
my $errmsg="$name $type: $err: $msg";
return $errmsg;
} else {
DOIF_Set_Filter ($hash);
return undef;
}
}
@ -3268,8 +3295,6 @@ DOIF_Attr(@)
return ("$err: $msg");
}
} elsif($a[0] eq "set" and $a[2] eq "disable" and $a[3] eq "1") {
$hash->{NOTIFYDEV}="global";
%ntfyHash = ();
DOIF_delTimer($hash);
DOIF_delAll ($hash);
readingsBeginUpdate($hash);
@ -3351,6 +3376,7 @@ DOIF_Attr(@)
return ("error in startup $a[3], $err");
}
}
DOIF_Set_Filter($hash);
return undef;
}