2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 16:05:19 +00:00

76_SolarForecast: fix merger failures, number of temperature decimal places

git-svn-id: https://svn.fhem.de/fhem/trunk@28479 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2024-02-05 14:49:20 +00:00
parent 9b9d811afe
commit 330d7bf5e9

View File

@ -157,7 +157,8 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
"1.15.2" => "05.02.2024 __mergeDataWeather: fix merger failures, number of temperature decimal places ",
"1.15.2" => "05.02.2024 __mergeDataWeather: fix merger failures, number of temperature decimal places ".
"cicrular Hash: replace 'percentile' by 'simple' ",
"1.15.1" => "04.02.2024 checkPlantConfig: fix check attribute ctrlWeatherDevX ",
"1.15.0" => "03.02.2024 reduce cpu utilization, add attributes ctrlWeatherDev2, ctrlWeatherDev3 ",
"1.14.3" => "02.02.2024 _transferWeatherValues: first step of multi weather device merger ",
@ -4212,7 +4213,7 @@ sub Attr {
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
if ($cmd eq 'set' && $aName eq 'affectNumHistDays') {
if ($cmd eq 'set' && $aName eq 'affectNumHistDays') { # 30.01.2024
if (!$init_done) {
return qq{Device "$name" -> The attribute '$aName' is obsolete and will be deleted soon. Please press "save config" when restart is finished.};
}
@ -5084,10 +5085,34 @@ sub centralTask {
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
## nicht-Bin Werte löschen
my $ra = '0|5|10|15|20|25|30|35|40|45|50|55|60|65|70|75|80|85|90|95|100|percentile';
## percentile in simple umsetzen # 05.02.2024
for my $idx (sort keys %{$data{$type}{$name}{circular}}) {
if(defined $data{$type}{$name}{circular}{$idx}{pvcorrf}{percentile}) {
$data{$type}{$name}{circular}{$idx}{pvcorrf}{simple} = $data{$type}{$name}{circular}{$idx}{pvcorrf}{percentile};
delete $data{$type}{$name}{circular}{$idx}{pvcorrf}{percentile};
}
if(defined $data{$type}{$name}{circular}{$idx}{quality}{percentile}) {
$data{$type}{$name}{circular}{$idx}{quality}{simple} = $data{$type}{$name}{circular}{$idx}{quality}{percentile};
delete $data{$type}{$name}{circular}{$idx}{quality}{percentile};
}
if(defined $data{$type}{$name}{circular}{$idx}{pvrlsum}{percentile}) {
$data{$type}{$name}{circular}{$idx}{pvrlsum}{simple} = $data{$type}{$name}{circular}{$idx}{pvrlsum}{percentile};
delete $data{$type}{$name}{circular}{$idx}{pvrlsum}{percentile};
}
if(defined $data{$type}{$name}{circular}{$idx}{pvfcsum}{percentile}) {
$data{$type}{$name}{circular}{$idx}{pvfcsum}{simple} = $data{$type}{$name}{circular}{$idx}{pvfcsum}{percentile};
delete $data{$type}{$name}{circular}{$idx}{pvfcsum}{percentile};
}
if(defined $data{$type}{$name}{circular}{$idx}{dnumsum}{percentile}) {
$data{$type}{$name}{circular}{$idx}{dnumsum}{simple} = $data{$type}{$name}{circular}{$idx}{dnumsum}{percentile};
delete $data{$type}{$name}{circular}{$idx}{dnumsum}{percentile};
}
}
for my $hod (keys %{$data{$type}{$name}{circular}}) {
## nicht-Bin Werte löschen
my $ra = '0|5|10|15|20|25|30|35|40|45|50|55|60|65|70|75|80|85|90|95|100|percentile|simple';
for my $hod (keys %{$data{$type}{$name}{circular}}) { # 30.01.2024
for my $range (keys %{$data{$type}{$name}{circular}{$hod}{pvcorrf}}) {
delete $data{$type}{$name}{circular}{$hod}{pvcorrf}{$range} if($range !~ /^($ra)$/xs);
}
@ -5097,7 +5122,7 @@ sub centralTask {
}
}
## currentWeatherDev in Attr umsetzen
my $cwd = ReadingsVal ($name, 'currentWeatherDev', '');
my $cwd = ReadingsVal ($name, 'currentWeatherDev', ''); # 30.01.2024
if ($cwd) {
CommandAttr (undef, "$name ctrlWeatherDev1 $cwd");
readingsDelete ($hash, 'currentWeatherDev') if(AttrVal ($name, 'ctrlWeatherDev1', '')); # erst prüfen ob gesetzt
@ -6149,7 +6174,7 @@ return $pvsum;
# speichert die Werte im Nexthours / pvHistory Hash
#
# Simple:
# Liest Korrekturfaktor/Qualität aus pvCircular percentile und
# Liest Korrekturfaktor/Qualität aus pvCircular simple und
# speichert die Werte im Nexthours / pvHistory Hash
######################################################################
sub ___readCandQ {
@ -6178,13 +6203,13 @@ sub ___readCandQ {
$data{$type}{$name}{nexthours}{"NextHour".sprintf("%02d",$num)}{cloudrange} = $range;
}
elsif ($acu =~ /on_simple/xs) {
($hc, $hq) = CircularAutokorrVal ($hash, sprintf("%02d",$fh1), 'percentile', undef); # Korrekturfaktor/Qualität der Stunde des Tages (simple)
($hc, $hq) = CircularAutokorrVal ($hash, sprintf("%02d",$fh1), 'simple', undef); # Korrekturfaktor/Qualität der Stunde des Tages (simple)
$hq //= '-';
$hc //= 1; # Korrekturfaktor = 1
$hc = 1 if(1 * $hc == 0); # 0.0-Werte ignorieren (Schleifengefahr)
}
else { # keine Autokorrektur
($hc, $hq) = CircularAutokorrVal ($hash, sprintf("%02d",$fh1), 'percentile', undef); # Korrekturfaktor/Qualität der Stunde des Tages (simple)
($hc, $hq) = CircularAutokorrVal ($hash, sprintf("%02d",$fh1), 'simple', undef); # Korrekturfaktor/Qualität der Stunde des Tages (simple)
$hq //= '-';
$hc = 1;
}
@ -8968,7 +8993,7 @@ sub _calcCaQsimple {
$paref->{pvrl} = $pvrl;
$paref->{pvfc} = $pvfc;
$paref->{range} = 'percentile';
$paref->{range} = 'simple';
$paref->{calc} = 'Simple';
my ($oldfac, $factor, $dnum) = __calcNewFactor ($paref);
@ -9770,8 +9795,7 @@ sub _checkSetupNotComplete {
### nicht mehr benötigte Daten löschen - Bereich kann später wieder raus !!
##########################################################################################
## currentWeatherDev in Attr umsetzen
## currentWeatherDev in Attr umsetzen
my $cwd = ReadingsVal ($name, 'currentWeatherDev', '');
my $cwd = ReadingsVal ($name, 'currentWeatherDev', ''); # 30.01.2024
if ($cwd) {
CommandAttr (undef, "$name ctrlWeatherDev1 $cwd");
}
@ -13294,7 +13318,7 @@ sub _ldchash2val {
no warnings 'numeric';
for my $f (sort {$a<=>$b} keys %{$pool->{$idx}{$key}}) {
next if($f eq 'percentile');
next if($f eq 'simple');
$ret .= " " if($ret);
$ret .= "$f=".$pool->{$idx}{$key}{$f};
my $ct = ($ret =~ tr/=// // 0) / 10;
@ -13303,10 +13327,10 @@ sub _ldchash2val {
use warnings;
if (defined $pool->{$idx}{$key}{percentile}) {
if (defined $pool->{$idx}{$key}{simple}) {
$ret .= "\n " if($ret && $ret !~ /\n\s+$/xs);
$ret .= " " if($ret);
$ret .= "percentile=".$pool->{$idx}{$key}{percentile};
$ret .= "simple=".$pool->{$idx}{$key}{simple};
}
}
else {
@ -15354,7 +15378,7 @@ return $def;
# $q: Qualität des Korrekturfaktors
#
# $hod: Stunde des Tages (01,02,...,24)
# $range: Range Bewölkung (1...100) oder "percentile"
# $range: Range Bewölkung (1...100) oder "simple"
# $def: Defaultwert
#
################################################################
@ -15398,7 +15422,7 @@ return ($pvcorrf, $quality);
# $dnumsum: Anzahl Tage pro Bewölkungsbereich über die gesamte Laufzeit
#
# $hod: Stunde des Tages (01,02,...,24)
# $range: Range Bewölkung (1...100) oder "percentile"
# $range: Range Bewölkung (1...100) oder "simple"
# $def: Defaultwert
#
#######################################################################################################
@ -16740,11 +16764,11 @@ to ensure that the system configuration is correct.
<tr><td> <b>pvapifc</b> </td><td>expected PV generation (Wh) of the API used </td></tr>
<tr><td> <b>pvaifc</b> </td><td>PV forecast (Wh) of the AI for the next 24h from the current hour of the day </td></tr>
<tr><td> <b>pvfc</b> </td><td>PV forecast used for the next 24h from the current hour of the day </td></tr>
<tr><td> <b>pvcorrf</b> </td><td>Autocorrection factors for the hour of the day, where "percentile" is the simple correction factor. </td></tr>
<tr><td> <b>pvcorrf</b> </td><td>Autocorrection factors for the hour of the day, where 'simple' is the simple correction factor. </td></tr>
<tr><td> <b>pvfcsum</b> </td><td>summary PV forecast per cloud area over the entire term </td></tr>
<tr><td> <b>pvrl</b> </td><td>real PV generation of the last 24h (Attention: pvforecast and pvreal do not refer to the same period!) </td></tr>
<tr><td> <b>pvrlsum</b> </td><td>summary real PV generation per cloud area over the entire term </td></tr>
<tr><td> <b>quality</b> </td><td>Quality of the autocorrection factors (0..1), where "percentile" is the quality of the simple correction factor. </td></tr>
<tr><td> <b>quality</b> </td><td>Quality of the autocorrection factors (0..1), where 'simple' is the quality of the simple correction factor. </td></tr>
<tr><td> <b>runTimeTrainAI</b> </td><td>Duration of the last AI training </td></tr>
<tr><td> <b>tdayDvtn</b> </td><td>Today's deviation PV forecast/generation in % </td></tr>
<tr><td> <b>temp</b> </td><td>Outdoor temperature </td></tr>
@ -18823,11 +18847,11 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
<tr><td> <b>pvapifc</b> </td><td>erwartete PV Erzeugung (Wh) der verwendeten API </td></tr>
<tr><td> <b>pvaifc</b> </td><td>PV Vorhersage (Wh) der KI für die nächsten 24h ab aktueller Stunde des Tages </td></tr>
<tr><td> <b>pvfc</b> </td><td>verwendete PV Prognose für die nächsten 24h ab aktueller Stunde des Tages </td></tr>
<tr><td> <b>pvcorrf</b> </td><td>Autokorrekturfaktoren für die Stunde des Tages, wobei "percentile" der einfache (simple) Korrekturfaktor ist. </td></tr>
<tr><td> <b>pvcorrf</b> </td><td>Autokorrekturfaktoren für die Stunde des Tages, wobei 'simple' der einfach berechnete Korrekturfaktor ist. </td></tr>
<tr><td> <b>pvfcsum</b> </td><td>Summe PV Prognose pro Bewölkungsbereich über die gesamte Laufzeit </td></tr>
<tr><td> <b>pvrl</b> </td><td>reale PV Erzeugung der letzten 24h (Achtung: pvforecast und pvreal beziehen sich nicht auf den gleichen Zeitraum!) </td></tr>
<tr><td> <b>pvrlsum</b> </td><td>Summe reale PV Erzeugung pro Bewölkungsbereich über die gesamte Laufzeit </td></tr>
<tr><td> <b>quality</b> </td><td>Qualität der Autokorrekturfaktoren (0..1), wobei "percentile" die Qualität des einfachen (simple) Korrekturfaktors ist. </td></tr>
<tr><td> <b>quality</b> </td><td>Qualität der Autokorrekturfaktoren (0..1), wobei 'simple' die Qualität des einfach berechneten Korrekturfaktors ist. </td></tr>
<tr><td> <b>runTimeTrainAI</b> </td><td>Laufzeit des letzten KI Trainings </td></tr>
<tr><td> <b>tdayDvtn</b> </td><td>heutige Abweichung PV Prognose/Erzeugung in % </td></tr>
<tr><td> <b>temp</b> </td><td>Außentemperatur </td></tr>