mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 06:39:11 +00:00
fhem.pl: UserReadings/integral by simonberry (Forum #26300)
git-svn-id: https://svn.fhem.de/fhem/trunk@6425 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
7a9abe2f87
commit
cf18028551
@ -485,6 +485,11 @@ A line ending with \ will be concatenated with the next one, so long lines
|
||||
seconds between the current and the previous evaluation. Granularity
|
||||
of time is one second. No value is calculated if the time past is
|
||||
below one second. Useful to calculate rates.</li>
|
||||
<li>integral: reverse function of differential. The result is incremented
|
||||
by the product of the time difference between the last two readings
|
||||
and the avarage of the last two readings. <br>
|
||||
result += (time - timeold) * (oldval + value) / 2
|
||||
</li>
|
||||
<li>offset: if the current evaluated value is smaler than the previously
|
||||
evaluated value the reading is incremented by the previous value.
|
||||
the reading can then be used as an offset correct for a counter that
|
||||
|
@ -501,14 +501,20 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
|
||||
dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit
|
||||
und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet,
|
||||
falls der Unterschied unter eine Sekunde liegt.</li>
|
||||
<li>integral: das Gegenteil von differential. Das Ergebnis wird um das
|
||||
Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei
|
||||
Readings erhöht.<br>
|
||||
result += (time - timeold) * (oldval + value) / 2
|
||||
</li>
|
||||
<li>offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist
|
||||
wird der vorherige Wert zum Reading addiert. Das Reading kann dann
|
||||
als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt
|
||||
wird zu korrigieren.</li>
|
||||
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert
|
||||
positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von
|
||||
einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton
|
||||
wachsender Zähler ableiten.</li>
|
||||
wird der vorherige Wert zum Reading addiert. Das Reading kann dann als
|
||||
offset verwendet werden um einen Zähler der durch Sromverlust
|
||||
zurückgesetzt wird zu korrigieren.</li>
|
||||
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen
|
||||
Wert positiv ist wird diese Differenz zum Reading addiert. Damit
|
||||
lässt sich von einem Zähler der bei Stromverlust
|
||||
zurückgesetzt wird ein monoton wachsender Zähler
|
||||
ableiten.</li>
|
||||
</ul>
|
||||
Beispiel:
|
||||
<ul><code>
|
||||
|
@ -3483,6 +3483,15 @@ readingsEndUpdate($$)
|
||||
if(defined($deltav) && defined($deltat) && ($deltat>= 1.0)) {
|
||||
$result= $deltav/$deltat;
|
||||
}
|
||||
} elsif($modifier eq "integral") {
|
||||
if(defined($oldt) && defined($oldvalue)) {
|
||||
my $deltat= $hash->{".updateTime"} - $oldt if(defined($oldt));
|
||||
my $avgval= ($value + $oldvalue) / 2;
|
||||
$result = ReadingsVal($name,$userReading,$value);
|
||||
if(defined($deltat) && $deltat>= 1.0) {
|
||||
$result+= $avgval*$deltat;
|
||||
}
|
||||
}
|
||||
} elsif($modifier eq "offset") {
|
||||
$oldvalue = $value if( !defined($oldvalue) );
|
||||
$result = ReadingsVal($name,$userReading,0);
|
||||
|
Loading…
Reference in New Issue
Block a user