76_SolarForecast: contrib V1.56.0

git-svn-id: https://svn.fhem.de/fhem/trunk@30183 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
DS_Starter
2025-08-07 15:31:17 +00:00
parent 0c73f519ad
commit a21b6b6f23

View File

@@ -160,6 +160,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"1.56.0" => "07.08.2025 set MAXINVERTER to 5 ",
"1.55.0" => "06.08.2025 DWD-Weather and DWD-Radiation device new minimum value of attr 'forecastDays' is 2 ". "1.55.0" => "06.08.2025 DWD-Weather and DWD-Radiation device new minimum value of attr 'forecastDays' is 2 ".
"checkPlantConfig: check forecastDays of new minimum value ". "checkPlantConfig: check forecastDays of new minimum value ".
"___createOpenMeteoURL: set forecast_hours=72, bugfix of V 1.54.7 ". "___createOpenMeteoURL: set forecast_hours=72, bugfix of V 1.54.7 ".
@@ -407,7 +408,7 @@ use constant {
MAXBATTERIES => 3, # maximale Anzahl der möglichen Batterien MAXBATTERIES => 3, # maximale Anzahl der möglichen Batterien
MAXCONSUMER => 20, # maximale Anzahl der möglichen Consumer (Attribut) MAXCONSUMER => 20, # maximale Anzahl der möglichen Consumer (Attribut)
MAXPRODUCER => 3, # maximale Anzahl der möglichen anderen Produzenten (Attribut) MAXPRODUCER => 3, # maximale Anzahl der möglichen anderen Produzenten (Attribut)
MAXINVERTER => 4, # maximale Anzahl der möglichen Inverter MAXINVERTER => 5, # maximale Anzahl der möglichen Inverter
MAXBEAMLEVEL => 3, # maximale Anzahl der Balkengrafik Ebenen MAXBEAMLEVEL => 3, # maximale Anzahl der Balkengrafik Ebenen
MAXSOCDEF => 95, # default Wert (%) auf den die Batterie maximal aufgeladen werden soll bzw. als aufgeladen gilt MAXSOCDEF => 95, # default Wert (%) auf den die Batterie maximal aufgeladen werden soll bzw. als aufgeladen gilt
@@ -15164,10 +15165,11 @@ sub entryGraphic {
## Werte restliche Stunden ## Werte restliche Stunden
############################ ############################
my $back = _beamGraphicRemainingHours ($paref); my $back = _beamGraphicRemainingHours ($paref);
$paref->{maxVal} = $back->{maxVal}; # Startwert wenn kein Wert bereits via attr vorgegeben ist $paref->{maxVal} = $back->{maxVal}; # Startwert
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff
## Batteriewerte füllen ## Batteriewerte füllen
######################### #########################
@@ -15179,6 +15181,7 @@ sub entryGraphic {
$ret .= _levelSeparator ($paref); $ret .= _levelSeparator ($paref);
delete $paref->{maxVal}; # bereinigen vor nächster Ebene delete $paref->{maxVal}; # bereinigen vor nächster Ebene
delete $paref->{maxStVal};
delete $paref->{maxDif}; delete $paref->{maxDif};
delete $paref->{minDif}; delete $paref->{minDif};
delete $paref->{hfcg}; delete $paref->{hfcg};
@@ -15207,10 +15210,11 @@ sub entryGraphic {
# Werte restliche Stunden # Werte restliche Stunden
########################### ###########################
my $back = _beamGraphicRemainingHours ($paref); my $back = _beamGraphicRemainingHours ($paref);
$paref->{maxVal} = $back->{maxVal}; # Startwert wenn kein Wert bereits via attr vorgegeben ist $paref->{maxVal} = $back->{maxVal}; # Startwert wenn kein Wert bereits via attr vorgegeben ist
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff
## Batteriewerte füllen ## Batteriewerte füllen
######################### #########################
@@ -15222,6 +15226,7 @@ sub entryGraphic {
$ret .= _levelSeparator ($paref); $ret .= _levelSeparator ($paref);
delete $paref->{maxVal}; # bereinigen vor nächster Ebene delete $paref->{maxVal}; # bereinigen vor nächster Ebene
delete $paref->{maxStVal};
delete $paref->{maxDif}; delete $paref->{maxDif};
delete $paref->{minDif}; delete $paref->{minDif};
delete $paref->{hfcg}; delete $paref->{hfcg};
@@ -15251,10 +15256,11 @@ sub entryGraphic {
# Werte restliche Stunden # Werte restliche Stunden
########################### ###########################
my $back = _beamGraphicRemainingHours ($paref); my $back = _beamGraphicRemainingHours ($paref);
$paref->{maxVal} = $back->{maxVal}; # Startwert wenn kein Wert bereits via attr vorgegeben ist $paref->{maxVal} = $back->{maxVal}; # Startwert wenn kein Wert bereits via attr vorgegeben ist
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff
## Batteriewerte füllen ## Batteriewerte füllen
######################### #########################
@@ -15266,6 +15272,7 @@ sub entryGraphic {
$ret .= _levelSeparator ($paref); $ret .= _levelSeparator ($paref);
delete $paref->{maxVal}; # bereinigen vor nächster Ebene delete $paref->{maxVal}; # bereinigen vor nächster Ebene
delete $paref->{maxStVal};
delete $paref->{maxDif}; delete $paref->{maxDif};
delete $paref->{minDif}; delete $paref->{minDif};
delete $paref->{hfcg}; delete $paref->{hfcg};
@@ -16943,11 +16950,12 @@ sub _beamGraphicRemainingHours {
my ($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10); my ($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10);
my $hbsocs; my $hbsocs;
my $hash = $defs{$name}; my $hash = $defs{$name};
my $maxVal = $hfcg->{0}{beam1}; # Startwert my $maxVal = $hfcg->{0}{beam1}; # Startwert
my $maxDif = $hfcg->{0}{diff}; # für Typ diff my $maxStVal = $hfcg->{0}{beam1} + $hfcg->{0}{beam2}; # Start Staplewert
my $minDif = $hfcg->{0}{diff}; # für Typ diff my $maxDif = $hfcg->{0}{diff}; # für Typ diff
my $bcapsum = CurrentVal ($name, 'batcapsum', 0); # Summe installierte Batterie Kapazität in Wh my $minDif = $hfcg->{0}{diff}; # für Typ diff
my $bcapsum = CurrentVal ($name, 'batcapsum', 0); # Summe installierte Batterie Kapazität in Wh
for my $i (1..($maxhours*2)-1) { # doppelte Anzahl berechnen my $val1 = 0; for my $i (1..($maxhours*2)-1) { # doppelte Anzahl berechnen my $val1 = 0;
($val1, $val2, $val3 ,$val4 ,$val5, $val6, $val7 ,$val8, $val9, $val10) = (0,0,0,0,0,0,0,0,0,0); ($val1, $val2, $val3 ,$val4 ,$val5, $val6, $val7 ,$val8, $val9, $val10) = (0,0,0,0,0,0,0,0,0,0);
@@ -17102,16 +17110,18 @@ sub _beamGraphicRemainingHours {
$hfcg->{$i}{diff} = sprintf "%.1f", ($hfcg->{$i}{beam1} - $hfcg->{$i}{beam2}); $hfcg->{$i}{diff} = sprintf "%.1f", ($hfcg->{$i}{beam1} - $hfcg->{$i}{beam2});
$hfcg->{$i}{diff} = sprintf "%.0f", $hfcg->{$i}{diff} if($kw eq 'Wh' && grep { $roundable{$_} } @beams); $hfcg->{$i}{diff} = sprintf "%.0f", $hfcg->{$i}{diff} if($kw eq 'Wh' && grep { $roundable{$_} } @beams);
$maxVal = $hfcg->{$i}{beam1} if($hfcg->{$i}{beam1} > $maxVal); $maxVal = $hfcg->{$i}{beam1} if($hfcg->{$i}{beam1} > $maxVal);
$maxVal = $hfcg->{$i}{beam2} if($hfcg->{$i}{beam2} > $maxVal); $maxVal = $hfcg->{$i}{beam2} if($hfcg->{$i}{beam2} > $maxVal);
$maxDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} > $maxDif); $maxStVal = $hfcg->{$i}{beam1} + $hfcg->{$i}{beam2} if($maxStVal < $hfcg->{$i}{beam1} + $hfcg->{$i}{beam2});
$minDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} < $minDif); $maxDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} > $maxDif);
$minDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} < $minDif);
} }
my $back = { my $back = {
maxVal => $maxVal, maxVal => $maxVal,
maxDif => $maxDif, maxStVal => $maxStVal,
minDif => $minDif, maxDif => $maxDif,
minDif => $minDif,
}; };
return $back; return $back;
@@ -17204,7 +17214,8 @@ sub _beamGraphic {
my $fcolor2 = $paref->{fcolor2}; my $fcolor2 = $paref->{fcolor2};
my $offset = $paref->{offset}; my $offset = $paref->{offset};
my $thishour = $paref->{thishour}; my $thishour = $paref->{thishour};
my $maxVal = $paref->{maxVal}; my $maxVal = $paref->{maxVal}; # Maximalwert von beam1 ODER beam2
my $maxStVal = $paref->{maxStVal}; # Maximalwert des Stapels beam1 UND beam2
my $maxDif = $paref->{maxDif}; my $maxDif = $paref->{maxDif};
my $minDif = $paref->{minDif}; my $minDif = $paref->{minDif};
my $beam1cont = $paref->{beam1cont}; my $beam1cont = $paref->{beam1cont};