mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 18:59:33 +00:00
Min and Max by Erwin (MH)
git-svn-id: https://svn.fhem.de/fhem/trunk@1723 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0368cc536c
commit
7b071d7305
@ -60,6 +60,7 @@ average_Notify($$)
|
||||
# Filtering
|
||||
next if(!defined($s));
|
||||
my ($evName, $val) = split(" ", $s, 2); # resets $1
|
||||
# Log 1,"mytestavg pre-filter: ".$devName.$evName." s=".$s;
|
||||
next if($devName !~ m/^$re$/ && "$devName:$s" !~ m/^$re$/ || $s =~ m/_avg_/);
|
||||
if(defined($1)) {
|
||||
my $reArg = $1;
|
||||
@ -68,6 +69,8 @@ average_Notify($$)
|
||||
next if(!defined($val) || $val !~ m/^(-?\d+\.?\d*)/);
|
||||
$val = $1;
|
||||
|
||||
# Log 1,"mytestavg pst-filter: ".$devName.$evName." val=".$val;
|
||||
|
||||
################
|
||||
# Avg computing
|
||||
$evName =~ s/[^A-Za-z_-].*//;
|
||||
@ -83,14 +86,29 @@ average_Notify($$)
|
||||
|
||||
my $cumName = "${evName}_cum_" . ($idx ? "month" : "day");
|
||||
my $avgName = "${evName}_avg_" . ($idx ? "month" : "day");
|
||||
my $minName = "${evName}_min_" . ($idx ? "month" : "day"); ##MH
|
||||
my $maxName = "${evName}_max_" . ($idx ? "month" : "day"); ##MH
|
||||
|
||||
if(!$r->{$cumName}) {
|
||||
$r->{$cumName}{VAL} = $secNow*$val;
|
||||
$r->{$avgName}{VAL} = $val;
|
||||
$r->{$maxName}{VAL} = $val; ##MH
|
||||
$r->{$minName}{VAL} = $val; ##MH
|
||||
$r->{$cumName}{TIME} = $r->{$avgName}{TIME} = $tn;
|
||||
next;
|
||||
}
|
||||
|
||||
##MH take care of existing average definitions - just add this one..
|
||||
if(!$r->{$maxName}) {
|
||||
$r->{$maxName}{VAL} = $val;
|
||||
$r->{$maxName}{TIME} = $tn;
|
||||
}
|
||||
##MH take care of existing average definitions - just add this one..
|
||||
if(!$r->{$minName}) {
|
||||
$r->{$minName}{VAL} = $val;
|
||||
$r->{$minName}{TIME} = $tn;
|
||||
}
|
||||
|
||||
my @dLast = split("[ :-]", $r->{$cumName}{TIME});
|
||||
my $secLast = 3600*$dLast[3] + 60*$dLast[4] + $dLast[5];
|
||||
$secLast += $dLast[2]*86400 if($idx);
|
||||
@ -100,11 +118,29 @@ average_Notify($$)
|
||||
my $cum = $r->{$cumName}{VAL} + ($secNow-$secLast) * $val;
|
||||
$r->{$cumName}{VAL} = $cum;
|
||||
$r->{$avgName}{VAL} = sprintf("%0.1f", $cum/$secNow);
|
||||
##MH change only if current value bigger than maxvalue
|
||||
if($r->{$maxName}{VAL} < $val) {
|
||||
$r->{$maxName}{VAL} = sprintf("%0.1f", $val); ##MH
|
||||
$r->{$maxName}{TIME} = $tn; ##MH
|
||||
}
|
||||
|
||||
##MH change only if current value smaller than minvalue
|
||||
if($r->{$minName}{VAL} > $val) {
|
||||
$r->{$minName}{VAL} = sprintf("%0.1f", $val); ##MH
|
||||
$r->{$minName}{TIME} = $tn; ##MH
|
||||
}
|
||||
} else {
|
||||
$dev->{CHANGED}[$myIdx++] = "$avgName: ".$r->{$avgName}{VAL};
|
||||
$dev->{CHANGED}[$myIdx++] = "$maxName: ".$r->{$maxName}{VAL}; ##MH
|
||||
$dev->{CHANGED}[$myIdx++] = "$minName: ".$r->{$minName}{VAL}; ##MH
|
||||
$r->{$cumName}{VAL} = $secNow*$val;
|
||||
$r->{$avgName}{VAL} = $val;
|
||||
|
||||
##MH set to current value
|
||||
$r->{$maxName}{VAL} = sprintf("%0.1f", $val); ##MH
|
||||
$r->{$maxName}{TIME} = $tn; ##MH
|
||||
$r->{$minName}{VAL} = sprintf("%0.1f", $val); ##MH
|
||||
$r->{$minName}{TIME} = $tn; ##MH
|
||||
}
|
||||
$r->{$cumName}{TIME} = $r->{$avgName}{TIME} = $tn;
|
||||
}
|
||||
@ -113,3 +149,4 @@ average_Notify($$)
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user