2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-24 21:29:21 +00:00

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