2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-13 05:06:35 +00:00

14_SD_WS09.pm: Fixed WindDirAverage bug since svn revision 25922

git-svn-id: https://svn.fhem.de/fhem/trunk@25967 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
sidey79 2022-04-15 22:52:37 +00:00
parent f83f790463
commit 41b7138d99
2 changed files with 35 additions and 29 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- bugfix: 14_SD_WS09: fixed windDirAverage bug
- bugfix: 95_Dashboard: fix perl warnings, Forum: #127216
- bugfix: 74_GardenaSmartDevice: fix ic24,fix regex,fix state_string variable
add sensor2 support, fix open + paused

View File

@ -488,7 +488,7 @@ sub SD_WS09_Attr(@) {
}
###################################
sub SD_WS09_WindDirAverage($$$){
sub SD_WS09_WindDirAverage {
###############################################################################
# übernommen von SabineT https://forum.fhem.de/index.php/topic,75225.msg669950.html#msg669950
# WindDirAverage
@ -513,6 +513,11 @@ sub SD_WS09_WindDirAverage($$$){
###############################################################################
my ($hash, $ws, $wd) = @_;
return if ref($hash) ne 'HASH';
return if !defined $ws;
return if !defined $wd;
my $name = $hash->{NAME};
Log3 $hash, 4, "SD_WS09_WindDirAverage --- OK ----" ;
@ -531,20 +536,20 @@ sub SD_WS09_WindDirAverage($$$){
return "";
}
my $avtime = AttrVal($name,'WindDirAverageTime',0);
my $avtime = AttrVal($name,'WindDirAverageTime',600);
my $decay = AttrVal($name,'WindDirAverageDecay',0);
my $minspeed = AttrVal($name,'WindDirAverageMinSpeed',0);
my $windDirection_old = $wd;
# default Werte für die optionalen Parameter, falls nicht beim Aufruf mit angegeben
$avtime = 600 if (!(defined $avtime) || $avtime == 0 );
#$avtime = 600 if (!(defined $avtime) || $avtime == 0 );
$decay = 1 if (!(defined $decay));
$decay = 1 if ($decay > 1); # darf nicht >1 sein
$decay = 0 if ($decay < 0); # darf nicht <0 sein
$minspeed = 0 if (!(defined $minspeed));
#$minspeed = 0 if (!(defined $minspeed));
$wd = deg2rad($wd);
my $ctime = time;
my $ctime = CORE::time;
my $time = FmtDateTime($ctime);
my @new = ($ws,$wd,$time);
@ -604,7 +609,7 @@ sub SD_WS09_WindDirAverage($$$){
$weight = $decay ** ($age / $avtime);
#-- für die Mittelwertsbildung der Geschwindigkeit wird nur ein 10tel von avtime genommen
if ($age < ($avtime / 10)) {
$sumSpeed += $ws * $weight if ($age < ($avtime / 10));
$sumSpeed += $ws * $weight ;
$sanz++;
}
$sumSin += sin($wd) * $ws * $weight;
@ -617,8 +622,8 @@ sub SD_WS09_WindDirAverage($$$){
Log3 $hash,4,"SD_WS09_WindDirAverage_09 $name Mittelwert über $anz Werte ist $average, avspeed=".round($sumSpeed/$num,1) if ($num > 0);
#-- undef zurückliefern, wenn die durchschnittliche Geschwindigkeit zu gering oder gar keine Werte verfügbar
return undef if (($anz == 0) || ($sanz == 0));
return undef if (($sumSpeed / $sanz) < $minspeed);
return if (($anz == 0) || ($sanz == 0));
return if (($sumSpeed / $sanz) < $minspeed);
Log3 $hash,4,"SD_WS09_WindDirAverage_END $name Mittelwert=$average";
return $average;