From a5885bb239328796eb99b2181b2ec6dfb1e33979 Mon Sep 17 00:00:00 2001 From: Damian <> Date: Thu, 22 Feb 2024 23:10:54 +0000 Subject: [PATCH] 98_DOIF.pm: Fixed duplicate events in event_Readings, plots optimized in card git-svn-id: https://svn.fhem.de/fhem/trunk@28543 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_DOIF.pm | 49 +++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index e5ebd3bb8..f99ad22f8 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -1636,6 +1636,10 @@ sub DOIF_setValue_collect } else { my @rv=splice (@{$va},0,$diff_slots); my @rt=splice (@{$ta},0,$diff_slots); + if ($diff_slots > 1 and !defined ${$va}[$dim-$diff_slots] and defined ${$collect}{last} and ${$va}[$dim-$diff_slots-1] != ${$collect}{last}) { + ${$va}[$dim-$diff_slots]=${$collect}{last}; + ${$ta}[$dim-$diff_slots]=(int(${$ta}[$dim-$diff_slots-1]/$seconds_per_slot)+1)*$seconds_per_slot; + } for (my $i=@rv-1;$i>=0;$i--) { if (defined ($rv[$i])) { ${$collect}{last_value}=$rv[$i]; @@ -1643,6 +1647,7 @@ sub DOIF_setValue_collect } } } + ${$collect}{last}=undef; } if (!defined ${$va}[$dim-1] or !defined ${$collect}{last_v} or (abs($r-${$collect}{last_v}) > abs(${$va}[$dim-1]-${$collect}{last_v}))) { @@ -1657,9 +1662,10 @@ sub DOIF_setValue_collect } ${$ta}[$dim-1]=$seconds; ${$collect}{last_slot}=$slot_nr; + } elsif ($r ne "N/A" and ${$va}[$dim-1] != $r) { + ${$collect}{last}=$r; } - if (defined $statistic or defined $change) { DOIF_statistic_col ($collect) } @@ -3491,18 +3497,18 @@ DOIF_Notify($$) return "" if (ReadingsVal($pn,"mode","") eq "disabled"); $ret=0; - if (defined $hash->{Regex}{"event_Readings"}) { - foreach $device ("$dev->{NAME}","") { - if (defined $hash->{Regex}{"event_Readings"}{$device}) { - #readingsBeginUpdate($hash); - foreach my $reading (keys %{$hash->{Regex}{"event_Readings"}{$device}}) { - my $readingregex=CheckRegexpDoIf($hash,"event_Readings",$dev->{NAME},$reading,$eventa,$eventas); - setDOIF_Reading($hash,$reading,$readingregex,"event_Readings",$eventa, $eventas,$dev->{NAME}) if (defined($readingregex)); - } - #readingsEndUpdate($hash,1); - } - } - } +# if (defined $hash->{Regex}{"event_Readings"}) { +# foreach $device ("$dev->{NAME}","") { +# if (defined $hash->{Regex}{"event_Readings"}{$device}) { +# foreach my $reading (keys %{$hash->{Regex}{"event_Readings"}{$device}}) { +# my $readingregex=CheckRegexpDoIf($hash,"event_Readings",$dev->{NAME},$reading,$eventa,$eventas); +# if (defined($readingregex)) { +# setDOIF_Reading($hash,$reading,$readingregex,"event_Readings",$eventa, $eventas,$dev->{NAME}); +# } +# } +# } +# } +# } if (defined $hash->{Regex}{"accu"}{"$dev->{NAME}"}) { my $device=$dev->{NAME}; @@ -3622,21 +3628,22 @@ DOIF_Notify($$) if (defined $hash->{Regex}{"event_Readings"}) { foreach $device ("$dev->{NAME}","") { if (defined $hash->{Regex}{"event_Readings"}{$device}) { - #readingsBeginUpdate($hash); foreach my $reading (keys %{$hash->{Regex}{"event_Readings"}{$device}}) { my $readingregex=CheckRegexpDoIf($hash,"event_Readings",$dev->{NAME},$reading,$eventa,$eventas); setDOIF_Reading($hash,$reading,$readingregex,"event_Readings",$eventa, $eventas,$dev->{NAME}) if (defined($readingregex)); } - #readingsEndUpdate($hash,1); - } - } - if (defined ($hash->{helper}{DOIF_eventas})) { #$SELF events - foreach my $reading (keys %{$hash->{Regex}{"event_Readings"}{$hash->{NAME}}}) { - my $readingregex=CheckRegexpDoIf($hash,"event_Readings",$hash->{NAME},$reading,$hash->{helper}{DOIF_eventa},$hash->{helper}{DOIF_eventas}); - setDOIF_Reading($hash,$reading,$readingregex,"event_Readings",$eventa, $eventas,$dev->{NAME}) if (defined($readingregex)); } } } + # if (defined ($hash->{helper}{DOIF_eventas})) { #$SELF events + # foreach my $reading (keys %{$hash->{Regex}{"event_Readings"}{$hash->{NAME}}}) { + # my $readingregex=CheckRegexpDoIf($hash,"event_Readings",$hash->{NAME},$reading,$hash->{helper}{DOIF_eventa},$hash->{helper}{DOIF_eventas}); + # if (defined($readingregex)){ +# setDOIF_Reading($hash,$reading,$readingregex,"event_Readings",$eventa, $eventas,$dev->{NAME}); +# } +# } +# } +# } if (defined $hash->{helper}{DOIF_Readings_events}) { if ($dev->{NAME} ne $hash->{NAME}) {