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:
parent
b654b832fc
commit
1509769fbf
@ -3483,11 +3483,11 @@ 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
|
||||||
|
|
||||||
Log3 ($name, 4, "$name - PV History -> average hour ($h) -> real: $pvval, forecast: $fcval");
|
Log3 ($name, 4, "$name - PV History -> average hour ($h) -> real: $pvval, forecast: $fcval");
|
||||||
|
|
||||||
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user