2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

76_SolarForecast.pm: contrib 0.34.1

git-svn-id: https://svn.fhem.de/fhem/trunk@24220 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2021-04-11 15:50:28 +00:00
parent b654b832fc
commit 1509769fbf

View File

@ -3484,7 +3484,7 @@ sub calcVariance {
Log3($name, 5, "$name - Hour: ".sprintf("%02d",$h).", Today PVreal: $pvval, PVforecast: $fcval"); Log3($name, 5, "$name - Hour: ".sprintf("%02d",$h).", Today PVreal: $pvval, PVforecast: $fcval");
$paref->{hour} = $h; $paref->{hour} = $h;
my ($pvavg,$fcavg,$anzavg) = calcFromHistory ($paref); # historische PV / Forecast Vergleichswerte ermitteln my ($pvavg,$fcavg,$anzavg,$range) = calcFromHistory ($paref); # historische PV / Forecast Vergleichswerte ermitteln
$anzavg //= 0; $anzavg //= 0;
$pvval = $pvavg ? ($pvval + $pvavg) / 2 : $pvval; # Ertrag aktuelle Stunde berücksichtigen $pvval = $pvavg ? ($pvval + $pvavg) / 2 : $pvval; # Ertrag aktuelle Stunde berücksichtigen
$fcval = $fcavg ? ($fcval + $fcavg) / 2 : $fcval; # Vorhersage aktuelle Stunde berücksichtigen $fcval = $fcavg ? ($fcval + $fcavg) / 2 : $fcval; # Vorhersage aktuelle Stunde berücksichtigen
@ -3500,17 +3500,18 @@ sub calcVariance {
Log3($name, 3, "$name - new Variance factor: $factor (old: $oldfac) for hour: $h calculated") if($factor != $oldfac); Log3($name, 3, "$name - new Variance factor: $factor (old: $oldfac) for hour: $h calculated") if($factor != $oldfac);
} }
push @da, "pvCorrectionFactor_".sprintf("%02d",$h)."<>".$factor." (automatic - old factor: $oldfac, found history days for avg: $anzavg)"; if(defined $range) {
push @da, "pvCorrectionFactor_".sprintf("%02d",$h)."_autocalc<>done";
my $chwcc = HistoryVal ($hash, $day, sprintf("%02d",$h), "wcc", undef); # Wolkenbedeckung Tag / Stunde
if(defined $chwcc) {
my $range = int ($chwcc/10); # Range errechnen
my $type = $hash->{TYPE}; my $type = $hash->{TYPE};
Log3($name, 5, "$name - write correction factor into circular Hash: Factor $factor, Hour $h, Range $chwcc"); Log3($name, 5, "$name - write correction factor into circular Hash: Factor $factor, Hour $h, Range $range");
$data{$type}{$name}{circular}{sprintf("%02d",$h)}{pvcorrf}{$range} = $factor; # Bewölkung Range 0..10 für die jeweilige Stunde als Datenquelle eintragen $data{$type}{$name}{circular}{sprintf("%02d",$h)}{pvcorrf}{$range} = $factor; # Bewölkung Range 0..10 für die jeweilige Stunde als Datenquelle eintragen
} }
else {
$range = "";
}
push @da, "pvCorrectionFactor_".sprintf("%02d",$h)."<>".$factor." (automatic - old factor: $oldfac, cloudiness range: $range, found history days in range: $anzavg)";
push @da, "pvCorrectionFactor_".sprintf("%02d",$h)."_autocalc<>done";
$paref->{pvcorrf} = $factor; $paref->{pvcorrf} = $factor;
$paref->{nhour} = sprintf("%02d",$h); $paref->{nhour} = sprintf("%02d",$h);
@ -3573,9 +3574,9 @@ sub calcFromHistory {
return; return;
} }
$chwcc = int ($chwcc/10); my $range = int ($chwcc/10);
Log3 ($name, 4, "$name - cloudiness range of day/hour $day/$hour is: $chwcc"); Log3 ($name, 4, "$name - cloudiness range of day/hour $day/$hour is: $range");
$anzavg = 0; $anzavg = 0;
my ($pvrl,$pvfc) = (0,0); my ($pvrl,$pvfc) = (0,0);
@ -3590,26 +3591,26 @@ sub calcFromHistory {
$histwcc = int ($histwcc/10); $histwcc = int ($histwcc/10);
if($chwcc == $histwcc) { if($range == $histwcc) {
$pvrl += HistoryVal ($hash, $dayfa, $hour, "pvrl", 0); $pvrl += HistoryVal ($hash, $dayfa, $hour, "pvrl", 0);
$pvfc += HistoryVal ($hash, $dayfa, $hour, "pvfc", 0); $pvfc += HistoryVal ($hash, $dayfa, $hour, "pvfc", 0);
$anzavg++; $anzavg++;
Log3 ($name, 5, "$name - History Average -> current/historical cloudiness range identical: $chwcc. Day/hour $dayfa/$hour included."); Log3 ($name, 5, "$name - History Average -> current/historical cloudiness range identical: $range. Day/hour $dayfa/$hour included.");
} }
else { else {
Log3 ($name, 5, "$name - History Average -> current/historical cloudiness range different: $chwcc/$histwcc. Day/hour $dayfa/$hour discarded."); Log3 ($name, 5, "$name - History Average -> current/historical cloudiness range different: $range/$histwcc. Day/hour $dayfa/$hour discarded.");
} }
} }
if(!$anzavg) { if(!$anzavg) {
Log3 ($name, 5, "$name - History Average -> all cloudiness ranges were different/not set -> no historical averages calculated"); Log3 ($name, 5, "$name - History Average -> all cloudiness ranges were different/not set -> no historical averages calculated");
return; return (undef,undef,undef,$range);
} }
my $pvavg = sprintf "%.2f", $pvrl / $anzavg; my $pvavg = sprintf "%.2f", $pvrl / $anzavg;
my $fcavg = sprintf "%.2f", $pvfc / $anzavg; my $fcavg = sprintf "%.2f", $pvfc / $anzavg;
return ($pvavg,$fcavg,$anzavg); return ($pvavg,$fcavg,$anzavg,$range);
} }
return; return;