2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-28 02:44:53 +00:00

76_SolarForecast: contrib 1.34.0

git-svn-id: https://svn.fhem.de/fhem/trunk@29175 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2024-09-29 07:47:46 +00:00
parent 8ac2711c72
commit 33d60d2849

View File

@ -158,7 +158,9 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
"1.34.0" => "28.09.2024 implement ___areaShareFactor for calculation of direct area factor and share of direct radiation ",
"1.34.0" => "28.09.2024 implement ___areaShareFactor for calculation of direct area factor and share of direct radiation ".
"note in Reading pvCorrectionFactor_XX if AI prediction was used in relevant hour ".
"minor fix in ___readCandQ ",
"1.33.1" => "27.09.2024 bugfix of 1.33.0, add aiRulesNumber to pvCircular, limits of AI trained datasets for ".
"AI use (aiAccTRNLim, aiSpreadTRNLim)",
"1.33.0" => "26.09.2024 substitute area factor hash by ___areaFactorFix function ",
@ -8183,9 +8185,11 @@ sub ___readCandQ {
}
else { # keine Autokorrektur
($hc, $hq) = CircularSunCloudkorrVal ($hash, sprintf("%02d",$fh1), $sabin, 'simple', undef); # Korrekturfaktor/Qualität der Stunde des Tages (simple)
$hc = 1;
}
$hq //= '-'; # keine Qualität definiert
$hq = sprintf "%.2f", $hq if(isNumeric ($hq));
$hc //= $hcraw; # Korrekturfaktor Voreinstellung
$hc = 1 if(1 * $hc == 0); # 0.0-Werte ignorieren (Schleifengefahr)
$hc = sprintf "%.2f", $hc;
@ -11087,6 +11091,7 @@ sub calcValueImproves {
next if(!$chour || $h > $chour);
$paref->{cpcf} = ReadingsVal ($name, 'pvCorrectionFactor_'.sprintf("%02d",$h), ''); # aktuelles pvCorf-Reading
$paref->{aihit} = CircularVal ($hash, sprintf("%02d",$h), 'aihit', 0); # AI verwendet?
$paref->{h} = $h;
_calcCaQcomplex ($paref); # Korrekturberechnung mit Bewölkung duchführen/speichern
@ -11095,6 +11100,7 @@ sub calcValueImproves {
delete $paref->{h};
delete $paref->{cpcf};
delete $paref->{aihit};
}
delete $paref->{aln};
@ -11115,6 +11121,7 @@ sub _calcCaQcomplex {
my $aln = $paref->{aln}; # Autolearning
my $h = $paref->{h};
my $day = $paref->{day}; # aktueller Tag
my $aihit = $paref->{aihit};
my $hash = $defs{$name};
my $sr = ReadingsVal ($name, '.pvCorrectionFactor_'.sprintf("%02d",$h).'_cloudcover', '');
@ -11159,12 +11166,14 @@ sub _calcCaQcomplex {
storeReading ('.pvCorrectionFactor_'.sprintf("%02d",$h).'_cloudcover', 'done');
$aihit = $aihit ? ' AI result used,' : '';
if ($acu =~ /on_complex/xs) {
if ($paref->{cpcf} !~ /manual/xs) { # pcf-Reading nur überschreiben wenn nicht 'manual xxx' gesetzt
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $factor." (automatic - old factor: $oldfac, Sun Alt range: $sabin, Cloud range: $crang, Days in range: $dnum)");
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $factor." (automatic - old factor: $oldfac,$aihit Sun Alt range: $sabin, Cloud range: $crang, Days in range: $dnum)");
}
else {
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $paref->{cpcf}." / flexmatic result $factor for Sun Alt range: $sabin, Cloud range: $crang, Days in range: $dnum");
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $paref->{cpcf}." / flexmatic result $factor for Sun Alt range: $sabin,$aihit Cloud range: $crang, Days in range: $dnum");
}
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h).'_autocalc', 'done');
@ -11185,6 +11194,7 @@ sub _calcCaQsimple {
my $aln = $paref->{aln}; # Autolearning
my $h = $paref->{h};
my $day = $paref->{day}; # aktueller Tag
my $aihit = $paref->{aihit};
my $hash = $defs{$name};
my $sr = ReadingsVal ($name, '.pvCorrectionFactor_'.sprintf("%02d",$h).'_apipercentil', '');
@ -11227,12 +11237,14 @@ sub _calcCaQsimple {
storeReading ('.pvCorrectionFactor_'.sprintf("%02d",$h).'_apipercentil', 'done');
$aihit = $aihit ? ' AI result used,' : '';
if ($acu =~ /on_simple/xs) {
if ($paref->{cpcf} !~ /manual/xs) { # pcf-Reading nur überschreiben wenn nicht 'manual xxx' gesetzt
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $factor." (automatic - old factor: $oldfac, Days in range: $dnum)");
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $factor." (automatic - old factor: $oldfac,$aihit Days in range: $dnum)");
}
else {
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $paref->{cpcf}." / flexmatic result $factor, Days in range: $dnum");
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h), $paref->{cpcf}." / flexmatic result $factor,$aihit Days in range: $dnum");
}
storeReading ('pvCorrectionFactor_'.sprintf("%02d",$h).'_autocalc', 'done');
@ -15305,7 +15317,7 @@ sub listDataPool {
$ret .= "wid: $wid, ";
$ret .= "wcc: $wcc, ";
$ret .= "rr1c: $rr1c, ";
$ret .= "pvcorrf: $pvcorrf";
$ret .= "pvcorrf: $pvcorrf ";
}
$ret .= "temp: $temp, " if($temp);
@ -15373,6 +15385,9 @@ sub listDataPool {
$ret .= "\n ";
$ret .= $csm;
}
else {
$ret .= "\n ";
}
}
return $ret;
};
@ -19299,8 +19314,8 @@ to ensure that the system configuration is correct.
<tr><td> <b>confcEx</b> </td><td>expected energy consumption without consumer shares with set key exconfc=1 </td></tr>
<tr><td> <b>crange</b> </td><td>calculated cloud area </td></tr>
<tr><td> <b>correff</b> </td><td>correction factor/quality used </td></tr>
<tr><td> </td><td>factor/- -> no quality defined </td></tr>
<tr><td> </td><td>factor/0..1 - quality of the PV forecast (1 = best quality) </td></tr>
<tr><td> </td><td>&lt;factor&gt;/- -> no quality defined </td></tr>
<tr><td> </td><td>&lt;factor&gt;/0..1 - quality of the PV forecast (1 = best quality) </td></tr>
<tr><td> <b>DoN</b> </td><td>sunrise and sunset status (0 - night, 1 - day) </td></tr>
<tr><td> <b>hourofday</b> </td><td>current hour of the day </td></tr>
<tr><td> <b>pvapifc</b> </td><td>expected PV generation (Wh) of the used API incl. a possible correction </td></tr>
@ -21624,8 +21639,8 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
<tr><td> <b>confcEx</b> </td><td>erwarteter Energieverbrauch ohne Anteile Verbraucher mit gesetztem Schlüssel exconfc=1 </td></tr>
<tr><td> <b>crange</b> </td><td>berechneter Bewölkungsbereich </td></tr>
<tr><td> <b>correff</b> </td><td>verwendeter Korrekturfaktor/Qualität </td></tr>
<tr><td> </td><td>Faktor/- -> keine Qualität definiert </td></tr>
<tr><td> </td><td>Faktor/0..1 - Qualität der PV Prognose (1 = beste Qualität) </td></tr>
<tr><td> </td><td>&lt;Faktor&gt;/- -> keine Qualität definiert </td></tr>
<tr><td> </td><td>&lt;Faktor&gt;/0..1 - Qualität der PV Prognose (1 = beste Qualität) </td></tr>
<tr><td> <b>DoN</b> </td><td>Sonnenauf- und untergangsstatus (0 - Nacht, 1 - Tag) </td></tr>
<tr><td> <b>hourofday</b> </td><td>laufende Stunde des Tages </td></tr>
<tr><td> <b>pvapifc</b> </td><td>erwartete PV Erzeugung (Wh) der verwendeten API inkl. einer eventuellen Korrektur </td></tr>