mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +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:
parent
a41dc3f308
commit
a4f970f5fc
@ -53,6 +53,7 @@ sub DOIF_delAll($)
|
|||||||
{
|
{
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
DOIF_killBlocking($hash);
|
DOIF_killBlocking($hash);
|
||||||
|
|
||||||
delete ($hash->{helper});
|
delete ($hash->{helper});
|
||||||
delete ($hash->{condition});
|
delete ($hash->{condition});
|
||||||
delete ($hash->{do});
|
delete ($hash->{do});
|
||||||
@ -78,9 +79,6 @@ sub DOIF_delAll($)
|
|||||||
delete ($hash->{accu});
|
delete ($hash->{accu});
|
||||||
delete ($hash->{Regex});
|
delete ($hash->{Regex});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#foreach my $key (keys %{$hash->{Regex}}) {
|
#foreach my $key (keys %{$hash->{Regex}}) {
|
||||||
# delete $hash->{Regex}{$key} if ($key !~ "STATE|DOIF_Readings|uiTable");
|
# delete $hash->{Regex}{$key} if ($key !~ "STATE|DOIF_Readings|uiTable");
|
||||||
#}
|
#}
|
||||||
@ -1380,33 +1378,14 @@ sub AddRegexpTriggerDoIf
|
|||||||
$reading="" if (!defined($reading));
|
$reading="" if (!defined($reading));
|
||||||
my $regexpid='"'.$regexp.'"';
|
my $regexpid='"'.$regexp.'"';
|
||||||
if ($dev) {
|
if ($dev) {
|
||||||
$hash->{NOTIFYDEV}.=",$dev" if ($hash->{NOTIFYDEV}!~/,$dev(,|$)/);
|
|
||||||
if ($reading){
|
if ($reading){
|
||||||
$hash->{Regex}{$type}{$dev}{$element}{$reading}=(($reading =~ "^\&") ? "\^$dev\$":"\^$dev\$:\^$reading: ");
|
$hash->{Regex}{$type}{$dev}{$element}{$reading}=(($reading =~ "^\&") ? "\^$dev\$":"\^$dev\$:\^$reading: ");
|
||||||
} elsif ($regexp) {
|
} elsif ($regexp) {
|
||||||
$hash->{Regex}{$type}{$dev}{$element}{$regexpid}="\^$dev\$:$regexp";
|
$hash->{Regex}{$type}{$dev}{$element}{$regexpid}="\^$dev\$:$regexp";
|
||||||
}
|
}
|
||||||
%ntfyHash = ();
|
|
||||||
return;
|
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;
|
$hash->{Regex}{$type}{$dev}{$element}{$regexpid}=$regexp;
|
||||||
%ntfyHash = ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub addDOIF_Readings
|
sub addDOIF_Readings
|
||||||
@ -2390,7 +2369,51 @@ sub DOIF_Trigger
|
|||||||
return undef;
|
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
|
sub
|
||||||
DOIF_Notify($$)
|
DOIF_Notify($$)
|
||||||
@ -2407,6 +2430,10 @@ DOIF_Notify($$)
|
|||||||
my $eventa;
|
my $eventa;
|
||||||
my $eventas;
|
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));
|
$eventa = deviceEvents($dev, AttrVal($pn, "addStateEvent", 0));
|
||||||
$eventas = deviceEvents($dev, 1);
|
$eventas = deviceEvents($dev, 1);
|
||||||
delete ($hash->{helper}{DOIF_eventas});
|
delete ($hash->{helper}{DOIF_eventas});
|
||||||
@ -2462,6 +2489,7 @@ DOIF_Notify($$)
|
|||||||
my $err=DOIF_uiTable_def($hash,$uiState,"uiState");
|
my $err=DOIF_uiTable_def($hash,$uiState,"uiState");
|
||||||
Log3 ($pn,3,"$pn: error in uiState: $err") if ($err);
|
Log3 ($pn,3,"$pn: error in uiState: $err") if ($err);
|
||||||
}
|
}
|
||||||
|
DOIF_Set_Filter ($hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
return "" if (!$hash->{helper}{globalinit});
|
return "" if (!$hash->{helper}{globalinit});
|
||||||
@ -3006,9 +3034,10 @@ CmdDoIfPerl($$)
|
|||||||
my $err="";
|
my $err="";
|
||||||
my $i=0;
|
my $i=0;
|
||||||
$hs=$hash;
|
$hs=$hash;
|
||||||
$hash->{NOTIFYDEV}="global";
|
|
||||||
%ntfyHash = ();
|
|
||||||
#def modify
|
#def modify
|
||||||
|
|
||||||
if ($init_done)
|
if ($init_done)
|
||||||
{
|
{
|
||||||
DOIF_delTimer($hash);
|
DOIF_delTimer($hash);
|
||||||
@ -3023,7 +3052,6 @@ CmdDoIfPerl($$)
|
|||||||
DOIF_Attr ("set",$hash->{NAME},$key,AttrVal($hash->{NAME},$key,""));
|
DOIF_Attr ("set",$hash->{NAME},$key,AttrVal($hash->{NAME},$key,""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash->{helper}{last_timer}=0;
|
$hash->{helper}{last_timer}=0;
|
||||||
@ -3092,8 +3120,6 @@ CmdDoIf($$)
|
|||||||
my $last_do;
|
my $last_do;
|
||||||
|
|
||||||
#def modify
|
#def modify
|
||||||
$hash->{NOTIFYDEV}="global";
|
|
||||||
%ntfyHash = ();
|
|
||||||
if ($init_done)
|
if ($init_done)
|
||||||
{
|
{
|
||||||
DOIF_delTimer($hash);
|
DOIF_delTimer($hash);
|
||||||
@ -3227,6 +3253,7 @@ DOIF_Define($$$)
|
|||||||
my $errmsg="$name $type: $err: $msg";
|
my $errmsg="$name $type: $err: $msg";
|
||||||
return $errmsg;
|
return $errmsg;
|
||||||
} else {
|
} else {
|
||||||
|
DOIF_Set_Filter ($hash);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3268,8 +3295,6 @@ DOIF_Attr(@)
|
|||||||
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") {
|
||||||
$hash->{NOTIFYDEV}="global";
|
|
||||||
%ntfyHash = ();
|
|
||||||
DOIF_delTimer($hash);
|
DOIF_delTimer($hash);
|
||||||
DOIF_delAll ($hash);
|
DOIF_delAll ($hash);
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -3351,6 +3376,7 @@ DOIF_Attr(@)
|
|||||||
return ("error in startup $a[3], $err");
|
return ("error in startup $a[3], $err");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
DOIF_Set_Filter($hash);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user