2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-04 20:17:45 +00:00

76_Solarforcast: contrib 0.15.2

git-svn-id: https://svn.fhem.de/fhem/trunk@24006 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2021-03-19 13:17:55 +00:00
parent 97012b05fd
commit 57226d8a9c

View File

@ -116,6 +116,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"0.15.2" => "19.03.2021 some bug fixing ",
"0.15.1" => "18.03.2021 replace ThisHour_ by NextHour00_ ", "0.15.1" => "18.03.2021 replace ThisHour_ by NextHour00_ ",
"0.15.0" => "18.03.2021 delete overhanging readings in sub _transferDWDForecastValues ", "0.15.0" => "18.03.2021 delete overhanging readings in sub _transferDWDForecastValues ",
"0.14.0" => "17.03.2021 new getter PVReal, weatherData, consumption total in currentMeterdev ", "0.14.0" => "17.03.2021 new getter PVReal, weatherData, consumption total in currentMeterdev ",
@ -1132,7 +1133,10 @@ sub centralTask {
RemoveInternalTimer($hash, "FHEM::SolarForecast::centralTask"); RemoveInternalTimer($hash, "FHEM::SolarForecast::centralTask");
### nicht mehr benötigte Readings löschen - kann später wieder raus !! ### nicht mehr benötigte Readings/Daten löschen - kann später wieder raus !!
for my $i (keys %{$data{$type}{$name}{pvhist}}) {
delete $data{$type}{$name}{pvhist}{$i}{"00"};
}
deleteReadingspec ($hash, "Today_Hour.*_Consumption"); deleteReadingspec ($hash, "Today_Hour.*_Consumption");
deleteReadingspec ($hash, "ThisHour_.*"); deleteReadingspec ($hash, "ThisHour_.*");
deleteReadingspec ($hash, "Today_PV"); deleteReadingspec ($hash, "Today_PV");
@ -1367,8 +1371,9 @@ sub _transferDWDForecastValues {
for my $num (0..47) { for my $num (0..47) {
my ($fd,$fh) = _calcDayHourMove ($chour, $num); my ($fd,$fh) = _calcDayHourMove ($chour, $num);
my $num1 = $num-1;
if($fd > 1) { # überhängende Readings löschen if($fd > 1) { # überhängende Readings löschen
deleteReadingspec ($hash, "NextHour".$num.".*"); deleteReadingspec ($hash, "NextHour".$num1.".*");
next; next;
} }
@ -1376,11 +1381,16 @@ sub _transferDWDForecastValues {
Log3($name, 5, "$name - collect DWD forecast data: device=$fcname, rad=fc${fd}_${fh}_Rad1h, Val=$v"); Log3($name, 5, "$name - collect DWD forecast data: device=$fcname, rad=fc${fd}_${fh}_Rad1h, Val=$v");
$time_str = "NextHour".sprintf "%02d", $num; if ($num1 >= 0) {
$epoche = $t + (3600*$num); $time_str = "NextHour".sprintf "%02d", $num1;
$epoche = $t + (3600*$num1);
}
my $calcpv = calcPVforecast ($name, $v, $fh); # Vorhersage gewichtet kalkulieren my $calcpv = calcPVforecast ($name, $v, $fh); # Vorhersage gewichtet kalkulieren
$data{$hash->{TYPE}}{$name}{pvfc}{sprintf("%02d",$fh)} = $calcpv if($num < 24); # Hilfshash Wert PV forecast Forum: https://forum.fhem.de/index.php/topic,117864.msg1133350.html#msg1133350
if($num < 24 && $fh && $fh < 24) { # Ringspeicher PV forecast Forum: https://forum.fhem.de/index.php/topic,117864.msg1133350.html#msg1133350
$data{$hash->{TYPE}}{$name}{pvfc}{sprintf("%02d",$fh)} = $calcpv;
}
push @$daref, "${time_str}_PVforecast:".$calcpv." Wh"; push @$daref, "${time_str}_PVforecast:".$calcpv." Wh";
push @$daref, "${time_str}_Time:" .TimeAdjust ($epoche); # Zeit fortschreiben push @$daref, "${time_str}_Time:" .TimeAdjust ($epoche); # Zeit fortschreiben
@ -1391,7 +1401,7 @@ sub _transferDWDForecastValues {
push @$daref, "Today_Hour".sprintf("%02d",$fh)."_PVforecast:$calcpv Wh"; push @$daref, "Today_Hour".sprintf("%02d",$fh)."_PVforecast:$calcpv Wh";
} }
if($fd == 0) { if($fd == 0 && $fh) {
$paref->{calcpv} = $calcpv; $paref->{calcpv} = $calcpv;
$paref->{histname} = "pvfc"; $paref->{histname} = "pvfc";
$paref->{nhour} = sprintf("%02d",$fh); $paref->{nhour} = sprintf("%02d",$fh);
@ -1439,8 +1449,12 @@ sub _transferWeatherValues {
my ($fd,$fh) = _calcDayHourMove ($chour, $num); my ($fd,$fh) = _calcDayHourMove ($chour, $num);
last if($fd > 1); last if($fd > 1);
$time_str = "NextHour".sprintf "%02d", $num; my $num1 = $num-1;
$epoche = $t + (3600*$num);
if ($num1 >= 0) {
$time_str = "NextHour".sprintf "%02d", $num1;
$epoche = $t + (3600*$num1);
}
my $wid = ReadingsNum($fcname, "fc${fd}_${fh}_ww", -1); my $wid = ReadingsNum($fcname, "fc${fd}_${fh}_ww", -1);
my $neff = ReadingsNum($fcname, "fc${fd}_${fh}_Neff", 0); # Effektive Wolkendecke my $neff = ReadingsNum($fcname, "fc${fd}_${fh}_Neff", 0); # Effektive Wolkendecke
@ -1464,8 +1478,8 @@ sub _transferWeatherValues {
$hash->{HELPER}{"${time_str}_CloudCover"} = $neff; $hash->{HELPER}{"${time_str}_CloudCover"} = $neff;
$hash->{HELPER}{"${time_str}_RainProb"} = $r101; $hash->{HELPER}{"${time_str}_RainProb"} = $r101;
if($num < 24) { if($num < 24 && $fh && $fh < 24) { # Ringspeicher Weather Forum: https://forum.fhem.de/index.php/topic,117864.msg1139251.html#msg1139251
$data{$type}{$name}{weather}{sprintf("%02d",$fh)}{id} = $wid; # Hilfshash Wert Weather Forum: https://forum.fhem.de/index.php/topic,117864.msg1139251.html#msg1139251 $data{$type}{$name}{weather}{sprintf("%02d",$fh)}{id} = $wid;
$data{$type}{$name}{weather}{sprintf("%02d",$fh)}{txt} = $txt; $data{$type}{$name}{weather}{sprintf("%02d",$fh)}{txt} = $txt;
$data{$type}{$name}{weather}{sprintf("%02d",$fh)}{cloudcover} = $neff; $data{$type}{$name}{weather}{sprintf("%02d",$fh)}{cloudcover} = $neff;
$data{$type}{$name}{weather}{sprintf("%02d",$fh)}{rainprob} = $r101; $data{$type}{$name}{weather}{sprintf("%02d",$fh)}{rainprob} = $r101;
@ -3516,8 +3530,8 @@ werden weitere SolarForecast Devices zugeordnet.
<ul> <ul>
<a name="pvHistory"></a> <a name="pvHistory"></a>
<li><b>pvHistory </b> <br> <li><b>pvHistory </b> <br>
Listet die historischen Werte der letzten Tage (max. 31) sortiert nach dem Tagesdatum und der Stunde des jeweiligen Listet die historischen Werte der letzten Tage (max. 31) sortiert nach dem Tagesdatum und Stunde.
Tages auf. Die Stundenangaben beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von 08 - 09 Uhr.
Dabei sind <b>pvreal</b> der reale PV Ertrag, <b>pvforecast</b> der prognostizierte PV Ertrag und <b>gridcon</b> Dabei sind <b>pvreal</b> der reale PV Ertrag, <b>pvforecast</b> der prognostizierte PV Ertrag und <b>gridcon</b>
der Netzbezug der jeweiligen Stunde. der Netzbezug der jeweiligen Stunde.
</li> </li>
@ -3527,8 +3541,8 @@ werden weitere SolarForecast Devices zugeordnet.
<ul> <ul>
<a name="pvForecast"></a> <a name="pvForecast"></a>
<li><b>pvForecast </b> <br> <li><b>pvForecast </b> <br>
Listet die im Ringspeicher vorhandenen PV Vorhersagewerte der kommenden 24h auf. Die Stundenangaben beziehen sich auf den Listet die im Ringspeicher vorhandenen PV Vorhersagewerte der kommenden 24h auf.
Beginn der Stunde, z.B. bezieht sich 09 auf die Zeit von 08:00-09:00. Die Stundenangaben beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von 08 - 09 Uhr.
</li> </li>
</ul> </ul>
<br> <br>
@ -3536,8 +3550,8 @@ werden weitere SolarForecast Devices zugeordnet.
<ul> <ul>
<a name="pvReal"></a> <a name="pvReal"></a>
<li><b>pvReal </b> <br> <li><b>pvReal </b> <br>
Listet die im Ringspeicher vorhandenen PV Erzeugungswerte der letzten 24h auf. Die Stundenangaben beziehen sich auf die Stunde Listet die im Ringspeicher vorhandenen PV Erzeugungswerte der letzten 24h auf.
des Tages, z.B. Stunde 09 ist die Zeit von 08:00-09:00. Die Stundenangaben beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von 08 - 09 Uhr.
</li> </li>
</ul> </ul>
<br> <br>
@ -3545,8 +3559,8 @@ werden weitere SolarForecast Devices zugeordnet.
<ul> <ul>
<a name="weatherData"></a> <a name="weatherData"></a>
<li><b>weatherData </b> <br> <li><b>weatherData </b> <br>
Listet die im Ringspeicher vorhandenen Wetterdaten der kommenden 24h auf. Die Stundenangaben beziehen sich auf den Listet die im Ringspeicher vorhandenen Wetterdaten der kommenden 24h auf.
Beginn der Stunde, z.B. bezieht sich 09 auf die Zeit von 08:00-09:00. Die Stundenangaben beziehen sich auf die Stunde des Tages, z.B. bezieht sich die Stunde 09 auf die Zeit von 08 - 09 Uhr.
</li> </li>
</ul> </ul>
<br> <br>