mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +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
|
seconds between the current and the previous evaluation. Granularity
|
||||||
of time is one second. No value is calculated if the time past is
|
of time is one second. No value is calculated if the time past is
|
||||||
below one second. Useful to calculate rates.</li>
|
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
|
<li>offset: if the current evaluated value is smaler than the previously
|
||||||
evaluated value the reading is incremented by the previous value.
|
evaluated value the reading is incremented by the previous value.
|
||||||
the reading can then be used as an offset correct for a counter that
|
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
|
dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit
|
||||||
und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet,
|
und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet,
|
||||||
falls der Unterschied unter eine Sekunde liegt.</li>
|
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
|
<li>offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist
|
||||||
wird der vorherige Wert zum Reading addiert. Das Reading kann dann
|
wird der vorherige Wert zum Reading addiert. Das Reading kann dann als
|
||||||
als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt
|
offset verwendet werden um einen Zähler der durch Sromverlust
|
||||||
wird zu korrigieren.</li>
|
zurückgesetzt wird zu korrigieren.</li>
|
||||||
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert
|
<li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen
|
||||||
positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von
|
Wert positiv ist wird diese Differenz zum Reading addiert. Damit
|
||||||
einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton
|
lässt sich von einem Zähler der bei Stromverlust
|
||||||
wachsender Zähler ableiten.</li>
|
zurückgesetzt wird ein monoton wachsender Zähler
|
||||||
|
ableiten.</li>
|
||||||
</ul>
|
</ul>
|
||||||
Beispiel:
|
Beispiel:
|
||||||
<ul><code>
|
<ul><code>
|
||||||
|
@ -3483,6 +3483,15 @@ readingsEndUpdate($$)
|
|||||||
if(defined($deltav) && defined($deltat) && ($deltat>= 1.0)) {
|
if(defined($deltav) && defined($deltat) && ($deltat>= 1.0)) {
|
||||||
$result= $deltav/$deltat;
|
$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") {
|
} elsif($modifier eq "offset") {
|
||||||
$oldvalue = $value if( !defined($oldvalue) );
|
$oldvalue = $value if( !defined($oldvalue) );
|
||||||
$result = ReadingsVal($name,$userReading,0);
|
$result = ReadingsVal($name,$userReading,0);
|
||||||
|
Loading…
Reference in New Issue
Block a user