mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 17:26:34 +00:00
76_SolarForecast.pm: contrib 0.3.0
git-svn-id: https://svn.fhem.de/fhem/trunk@23594 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
2c198174f3
commit
1ee051e6dc
@ -38,6 +38,7 @@ eval "use JSON;1;" or my $jsonabs = "JSON"; ## no critic 'eval' #
|
||||
|
||||
use FHEM::SynoModules::SMUtils qw( evaljson
|
||||
moduleVersion
|
||||
trim
|
||||
); # Hilfsroutinen Modul
|
||||
|
||||
use Data::Dumper;
|
||||
@ -293,6 +294,7 @@ my $defmaxvar = 0.5;
|
||||
my $definterval = 70; # Standard Abfrageintervall
|
||||
my $pvhcache = $attr{global}{modpath}."/FHEM/FhemUtils/PVH_SolarForecast_"; # Filename-Fragment für PV History (wird mit Devicename ergänzt)
|
||||
my $calcmaxd = 30; # Anzahl Tage für Durchschnittermittlung zur Vorhersagekorrektur
|
||||
my @dwdattrmust = qw(Rad1h TTT Neff R101 ww SunUp SunRise SunSet); # Werte die im Attr forecastProperties des DWD_Opendata Devices mindestens gesetzt sein müssen
|
||||
|
||||
my $cloudslope = 0.55; # Steilheit des Korrekturfaktors bzgl. effektiver Bewölkung, siehe: https://www.energie-experten.org/erneuerbare-energien/photovoltaik/planung/sonnenstunden
|
||||
my $cloud_base = 0; # Fußpunktverschiebung bzgl. effektiver Bewölkung
|
||||
@ -939,8 +941,12 @@ sub centralTask {
|
||||
daref => \@da
|
||||
};
|
||||
|
||||
Log3 ($name, 5, "$name - ################################################################");
|
||||
Log3 ($name, 5, "$name - ### New data collection cycle ###");
|
||||
Log3 ($name, 5, "$name - ################################################################");
|
||||
|
||||
_transferDWDForecastValues ($params); # Forecast Werte übertragen
|
||||
_transWeatherValues ($params); # Wetterwerte übertragen
|
||||
_transferWeatherValues ($params); # Wetterwerte übertragen
|
||||
_transferInverterValues ($params); # WR Werte übertragen
|
||||
_transferMeterValues ($params);
|
||||
|
||||
@ -988,6 +994,11 @@ sub _transferDWDForecastValues {
|
||||
|
||||
my ($time_str,$epoche);
|
||||
|
||||
my @aneeded = checkdwdattr ($fcname);
|
||||
if (@aneeded) {
|
||||
Log3($name, 2, qq{$name - ERROR - the attribute "forecastProperties" of device "$fcname" needs to contain: }.join ",",@aneeded);
|
||||
}
|
||||
|
||||
# deleteReadingspec ($hash, "NextHour.*");
|
||||
|
||||
for my $num (0..47) {
|
||||
@ -1033,7 +1044,7 @@ return;
|
||||
################################################################
|
||||
# Wetter Werte aus dem angebenen Wetterdevice extrahieren
|
||||
################################################################
|
||||
sub _transWeatherValues {
|
||||
sub _transferWeatherValues {
|
||||
my $paref = shift;
|
||||
my $hash = $paref->{hash};
|
||||
my $name = $paref->{name};
|
||||
@ -1090,7 +1101,7 @@ sub _transWeatherValues {
|
||||
|
||||
my $txt = ReadingsVal($fcname, "fc${fd}_${fh}_wwd", '');
|
||||
|
||||
Log3($name, 5, "$name - collect Weather data: device=$fcname, wid=fc${fd}_${fh}_ww, val=$wid, txt=$txt, cc=$neff");
|
||||
Log3($name, 5, "$name - collect Weather data: device=$fcname, wid=fc${fd}_${fh}_ww, val=$wid, txt=$txt, cc=$neff, rp=$r101");
|
||||
|
||||
$hash->{HELPER}{"${time_str}_WeatherId"} = $wid;
|
||||
$hash->{HELPER}{"${time_str}_WeatherTxt"} = $txt;
|
||||
@ -2150,6 +2161,25 @@ sub TimeAdjust {
|
||||
}
|
||||
}
|
||||
|
||||
################################################################
|
||||
# benötigte Attribute im DWD Device checken
|
||||
################################################################
|
||||
sub checkdwdattr {
|
||||
my $dwddev = shift;
|
||||
|
||||
my @fcprop = map { trim($_) } split ",", AttrVal($dwddev, "forecastProperties", "pattern");
|
||||
|
||||
# my @trimed = map { trim($_) } @fcprop;
|
||||
|
||||
my @aneeded;
|
||||
for my $am (@dwdattrmust) {
|
||||
next if($am ~~ @fcprop);
|
||||
push @aneeded, $am;
|
||||
}
|
||||
|
||||
return @aneeded;
|
||||
}
|
||||
|
||||
##################################################################################################
|
||||
# PV Forecast Rad1h in kWh / Wh
|
||||
# Für die Umrechnung in einen kWh/Wh-Wert benötigt man einen entsprechenden Faktorwert:
|
||||
|
Loading…
x
Reference in New Issue
Block a user