98_DOIF.pm: NOTIFYDEV now set for all DOIF devices

git-svn-id: https://svn.fhem.de/fhem/trunk@25590 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Damian 2022-01-30 11:30:21 +00:00
parent 2c331ffa1f
commit 1693173b04

View File

@ -2744,52 +2744,39 @@ sub DOIF_Trigger
sub DOIF_Set_Filter sub DOIF_Set_Filter
{ {
my ($hash) = @_; my ($hash) = @_;
$hash->{helper}{NOTIFYDEV}="global"; my @ndev=();
$hash->{helper}{DEVFILTER}="\^global\$"; # my @ddev=();
push(@ndev,"global");
# push(@ddev,"\^global\$");
foreach my $type (keys %{$hash->{Regex}}) { foreach my $type (keys %{$hash->{Regex}}) {
foreach my $device (keys %{$hash->{Regex}{$type}}) { foreach my $device (keys %{$hash->{Regex}{$type}}) {
foreach my $id (keys %{$hash->{Regex}{$type}{$device}}) { foreach my $id (keys %{$hash->{Regex}{$type}{$device}}) {
foreach my $reading (keys %{$hash->{Regex}{$type}{$device}{$id}}) { foreach my $reading (keys %{$hash->{Regex}{$type}{$device}{$id}}) {
my $devreg=$hash->{Regex}{$type}{$device}{$id}{$reading}; my $devreg=$hash->{Regex}{$type}{$device}{$id}{$reading};
my($regdev)=split(/:/,$devreg); my($regdev)=split(/:/,$devreg);
my $devfilter=$regdev; my $item;
if ($regdev eq "") { if ($regdev =~ /^\^([\w.]*)\$$/) {
$regdev='.*'; $item=$1;
} else { } else {
if ($regdev=~/^\^/) { $item='.*('.$regdev.').*';
$regdev=~s/^\^//;
} else {
$regdev="\.\*".$regdev;
}
if ($regdev=~/\$$/) {
$regdev=~s/\$$//;
} else {
$regdev.='.*';
}
} }
my $found=0; push (@ndev,$item);
foreach my $item (split(/\|/,$hash->{helper}{NOTIFYDEV})) { # push (@ddev,$regdev);
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}); my %h;
if (defined ($hash->{NOTIFYDEV})) { %h = map { $_ => 1 } @ndev;
delete ($hash->{DOIFDEV}); @ndev = keys %h; # remove duplicates
} else { $hash->{helper}{NOTIFYDEV} = join(",", @ndev);
$hash->{DOIFDEV}=$hash->{helper}{DEVFILTER}; setNotifyDev ($hash,$hash->{helper}{NOTIFYDEV});
}
# %h = map { $_ => 1 } @ddev;
# @ddev = keys %h; # remove duplicates
# $hash->{helper}{DEVFILTER} = join("|", @ddev);
# $hash->{DOIFDEV}=$hash->{helper}{DEVFILTER};
} }
sub sub
@ -2797,8 +2784,8 @@ DOIF_Notify($$)
{ {
my ($hash, $dev) = @_; my ($hash, $dev) = @_;
my $pn = $hash->{NAME}; my $pn = $hash->{NAME};
return "" if($attr{$pn} && $attr{$pn}{disable}); #return "" if($attr{$pn} && $attr{$pn}{disable});
return "" if (!$dev->{NAME}); #return "" if (!$dev->{NAME});
my $device; my $device;
my $reading; my $reading;
my $internal; my $internal;
@ -2807,12 +2794,14 @@ DOIF_Notify($$)
my $eventa; my $eventa;
my $eventas; my $eventas;
## print("DOIF $pn aufgerufen $dev->{NAME}\n");
if (!defined($hash->{helper}{DEVFILTER})) { # if (!defined($hash->{helper}{DEVFILTER})) {
return ""; # if (!defined($hash->{helper}{NOTIFYDEV})) {
} elsif ($dev->{NAME} !~ /$hash->{helper}{DEVFILTER}/) { # return "";
return ""; # }
} # elsif ($dev->{NAME} !~ /$hash->{helper}{DEVFILTER}/) {
# return "";
# }
$eventa = deviceEvents($dev, AttrVal($pn, "addStateEvent", 0)); $eventa = deviceEvents($dev, AttrVal($pn, "addStateEvent", 0));
$eventas = deviceEvents($dev, 1); $eventas = deviceEvents($dev, 1);
@ -3775,7 +3764,7 @@ DOIF_Attr(@)
my $cmd = $defs{$hash->{NAME}}{DEF}; my $cmd = $defs{$hash->{NAME}}{DEF};
my $msg; my $msg;
my $err; my $err;
setDisableNotifyFn($hash,0);
if (!$cmd) { if (!$cmd) {
$cmd=""; $cmd="";
$defs{$hash->{NAME}}{DEF}="##"; $defs{$hash->{NAME}}{DEF}="##";
@ -3800,6 +3789,7 @@ DOIF_Attr(@)
} 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") {
DOIF_delTimer($hash); DOIF_delTimer($hash);
DOIF_delAll ($hash); DOIF_delAll ($hash);
setDisableNotifyFn($hash,1);
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
#if ($hash->{MODEL} ne "Perl") { #if ($hash->{MODEL} ne "Perl") {
# readingsBulkUpdate ($hash, "state", "deactivated"); # readingsBulkUpdate ($hash, "state", "deactivated");