diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index acd15498c..a2e558ce3 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -160,6 +160,8 @@ BEGIN { # Versions History intern my %vNotesIntern = ( + "1.50.4" => "13.04.2025 Consumer Strokes: fix __dynColor, new key flowGraphicControl->strokeCmrRedColLimit ". + "__getopenMeteoData: fix get calclated call interval ", "1.50.3" => "12.04.2025 __calcPVestimates: Fix missing limitation for strings if more than one string is assigned to an inverter ". "code change in _attrInverterStrings, _attrStringPeak, checkPlantConfig: improved string check ", "1.50.2" => "11.04.2025 take inverter cap into account if no strings key is set, ctrlSpecialReadings: new option tomorrowConsumptionForecast ". @@ -482,6 +484,7 @@ use constant { STROKCOLSIGDEF => 'red', # Flußgrafik: Standardfarbe aktive Signal-Kette STROKCOLINADEF => 'gray', # Flußgrafik: Standardfarbe inaktive Kette STROKWIDTHDEF => 25, # Flußgrafik: Standard Breite der Kette + STROKCMRREDLIM => 400, # Flußgrafik: Consumerpower ab der dynamische Laufkette rot gefärbt wird PRODICONDEF => 'sani_garden_pump', # default Producer-Icon CICONDEF => 'light_light_dim_100', # default Consumer-Icon CICONCOLACT => 'darkorange', # default Consumer-Icon aktiv Färbung @@ -2820,7 +2823,7 @@ sub __getSolCastData { return "The current time is not between sunrise minus ".(LEADTIME/60)." minutes and sunset"; } - my $lrt = StatusAPIVal ($hash, $rapi, '?All', 'lastretrieval_timestamp', 0); + my $lrt = StatusAPIVal ($hash, $rapi, '?All', 'lastretrieval_timestamp', 0); my $apiitv = StatusAPIVal ($hash, $rapi, '?All', 'currentAPIinterval', SOLAPIREPDEF); if ($lrt && $t < $lrt + $apiitv) { @@ -4236,10 +4239,11 @@ sub __getopenMeteoData { my $reqm = $paref->{reqm}; if (!$force) { # regulärer API Abruf - my $lrt = StatusAPIVal ($name, 'OpenMeteo', '?All', 'lastretrieval_timestamp', 0); + my $lrt = StatusAPIVal ($name, 'OpenMeteo', '?All', 'lastretrieval_timestamp', 0); + my $cival = StatusAPIVal ($name, 'OpenMeteo', '?All', 'currentAPIinterval', OMETEOREPDEF); - if ($lrt && $t < $lrt + OMETEOREPDEF) { - my $rt = $lrt + OMETEOREPDEF - $t; + if ($lrt && $t < $lrt + $cival) { + my $rt = $lrt + $cival - $t; return qq{The waiting time to the next Open-Meteo API call has not expired yet. The remaining waiting time is $rt seconds}; } } @@ -6288,6 +6292,7 @@ sub _attrflowGraphicControl { ## no critic "not used" showconsumerdummy showconsumerpower strokeconsumerdyncol + strokeCmrRedColLimit strokecolstd strokecolsig strokecolina @@ -6311,6 +6316,7 @@ sub _attrflowGraphicControl { ## no critic "not used" showconsumerremaintime => '(0|1)', showconsumerpower => '(0|1)', strokeconsumerdyncol => '(0|1)', + strokeCmrRedColLimit => '\d+', strokecolstd => '.*', strokecolsig => '.*', strokecolina => '.*', @@ -16369,7 +16375,7 @@ sub _flowGraphic { my $cgc = ReadingsNum ($name, 'Current_GridConsumption', 0); my $node2grid = ReadingsNum ($name, 'Current_GridFeedIn', 0); # vom Knoten zum Grid my $cself = ReadingsNum ($name, 'Current_SelfConsumption', 0); - my $cc = CurrentVal ($hash, 'consumption', 0); + my $cc = CurrentVal ($name, 'consumption', 0); my $cc_dummy = $cc; my $scale = FGSCALEDEF; @@ -16399,7 +16405,7 @@ sub _flowGraphic { $bat2home += $bat2homepow if(defined $bat2homepow); } - my $soc = CurrentVal ($hash, 'batsoctotal', 0); # resultierender SoC (%) aller Batterien als Cluster + my $soc = CurrentVal ($name, 'batsoctotal', 0); # resultierender SoC (%) aller Batterien als Cluster if (!defined $batin && !defined $bat2home) { $hasbat = 0; @@ -16559,10 +16565,11 @@ sub _flowGraphic { !$node2grid && !$cgc && $bat2home ? "$stna grid_gray" : "$stna grid_red"; - my $strokecolstd = CurrentVal ($hash, 'strokecolstd', STROKCOLSTDDEF); - my $strokecolsig = CurrentVal ($hash, 'strokecolsig', STROKCOLSIGDEF); - my $strokecolina = CurrentVal ($hash, 'strokecolina', STROKCOLINADEF); - my $strokewidth = CurrentVal ($hash, 'strokewidth', STROKWIDTHDEF); + my $strokecolstd = CurrentVal ($name, 'strokecolstd', STROKCOLSTDDEF); + my $strokecolsig = CurrentVal ($name, 'strokecolsig', STROKCOLSIGDEF); + my $strokecolina = CurrentVal ($name, 'strokecolina', STROKCOLINADEF); + my $strokewidth = CurrentVal ($name, 'strokewidth', STROKWIDTHDEF); + my $strokeredlim = CurrentVal ($name, 'strokeCmrRedColLimit', STROKCMRREDLIM); my $ret = << "END0";