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
@@ -15165,7 +15166,8 @@ 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->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{minDif} = $back->{minDif}; # für Typ diff
@@ -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};
@@ -15209,6 +15212,7 @@ sub entryGraphic {
########################### ###########################
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->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{minDif} = $back->{minDif}; # für Typ diff
@@ -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};
@@ -15253,6 +15258,7 @@ sub entryGraphic {
########################### ###########################
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->{maxStVal} = $back->{maxStVal}; # Start Staplewert
$paref->{maxDif} = $back->{maxDif}; # für Typ diff $paref->{maxDif} = $back->{maxDif}; # für Typ diff
$paref->{minDif} = $back->{minDif}; # für Typ diff $paref->{minDif} = $back->{minDif}; # für Typ diff
@@ -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};
@@ -16945,6 +16952,7 @@ sub _beamGraphicRemainingHours {
my $hash = $defs{$name}; my $hash = $defs{$name};
my $maxVal = $hfcg->{0}{beam1}; # Startwert my $maxVal = $hfcg->{0}{beam1}; # Startwert
my $maxStVal = $hfcg->{0}{beam1} + $hfcg->{0}{beam2}; # Start Staplewert
my $maxDif = $hfcg->{0}{diff}; # für Typ diff my $maxDif = $hfcg->{0}{diff}; # für Typ diff
my $minDif = $hfcg->{0}{diff}; # für Typ diff my $minDif = $hfcg->{0}{diff}; # für Typ diff
my $bcapsum = CurrentVal ($name, 'batcapsum', 0); # Summe installierte Batterie Kapazität in Wh my $bcapsum = CurrentVal ($name, 'batcapsum', 0); # Summe installierte Batterie Kapazität in Wh
@@ -17104,12 +17112,14 @@ sub _beamGraphicRemainingHours {
$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);
$maxStVal = $hfcg->{$i}{beam1} + $hfcg->{$i}{beam2} if($maxStVal < $hfcg->{$i}{beam1} + $hfcg->{$i}{beam2});
$maxDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} > $maxDif); $maxDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} > $maxDif);
$minDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} < $minDif); $minDif = $hfcg->{$i}{diff} if($hfcg->{$i}{diff} < $minDif);
} }
my $back = { my $back = {
maxVal => $maxVal, maxVal => $maxVal,
maxStVal => $maxStVal,
maxDif => $maxDif, maxDif => $maxDif,
minDif => $minDif, minDif => $minDif,
}; };
@@ -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};