2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-09 20:57:11 +00:00

76_SolarForecast.pm: contrib 0.71.2

git-svn-id: https://svn.fhem.de/fhem/trunk@26603 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-10-27 20:27:28 +00:00
parent 434838ab7e
commit 9684a97361

View File

@ -1,5 +1,5 @@
########################################################################################################################
# $Id: 76_SolarForecast.pm 21735 2022-10-26 23:53:24Z DS_Starter $
# $Id: 76_SolarForecast.pm 21735 2022-10-27 23:53:24Z DS_Starter $
#########################################################################################################################
# 76_SolarForecast.pm
#
@ -130,7 +130,7 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
"0.71.2" => "26.10.2022 fix 'connection refused ...' ",
"0.71.2" => "27.10.2022 fix 'connection refused ...' ",
"0.71.1" => "26.10.2022 save no datasets with pv_estimate = 0 (__solCast_ApiResponse) to save time/space ".
"changed some graphic default settings, typo todayRemaingAPIcalls, input check currentBatteryDev ".
"change attr Css to flowGraphicCss ",
@ -1041,9 +1041,8 @@ sub _setconsumerImmediatePlanning { ## no critic "not used"
my $name = $paref->{name};
my $type = $paref->{type};
my $opt = $paref->{opt};
my $arg = $paref->{arg};
my ($c,$noTaskcall) = split " ", $arg;
my $c = $paref->{prop};
my $evt = $paref->{prop1} // 1;
return qq{no consumer number specified} if(!$c);
return qq{no valid consumer id "$c"} if(!ConsumerVal ($hash, $c, "name", ""));
@ -1067,7 +1066,7 @@ sub _setconsumerImmediatePlanning { ## no critic "not used"
Log3 ($name, 3, qq{$name - Consumer "$calias" $planstate}) if($planstate);
centralTask ($hash) if(!$noTaskcall);
centralTask ($hash, $evt);
return;
}
@ -1868,9 +1867,7 @@ sub _setclientAction { ## no critic "not used"
my $name = $paref->{name};
my $opt = $paref->{opt};
my $arg = $paref->{arg};
my $argsref = $paref->{argsref};
my $noUpdState = 0; # state nicht updaten = 0 -> state updaten !
my $argsref = $paref->{argsref};
if(!$arg) {
return qq{The command "$opt" needs an argument !};
@ -1878,36 +1875,34 @@ sub _setclientAction { ## no critic "not used"
my @args = @{$argsref};
my $ftui = shift @args; # Auslöser ist FTUI ?
my $action = shift @args; # z.B. set, setreading
my $cname = shift @args; # Consumername
my $tail = join " ", map { my $p = $_; $p =~ s/\s//xg; $p; } @args; ## no critic 'Map blocks' # restliche Befehlsargumente
my $evt = shift @args; # Readings Event (state nicht gesteuert)
my $action = shift @args; # z.B. set, setreading
my $cname = shift @args; # Consumername
my $tail = join " ", map { my $p = $_; $p =~ s/\s//xg; $p; } @args; ## no critic 'Map blocks' # restliche Befehlsargumente
Log3($name, 4, qq{$name - Client Action received / execute: "$action $cname $tail"});
if($action eq "set") {
CommandSet (undef, "$cname $tail");
$noUpdState = 1 if(!$ftui);
}
if($action eq "get") {
if($tail eq 'data') {
$noUpdState = 1 if(!$ftui);
centralTask ($hash, $noUpdState);
centralTask ($hash, $evt);
return;
}
}
if($action eq "setreading") {
CommandSetReading (undef, "$cname $tail");
$noUpdState = 1 if(!$ftui);
}
if($action eq "consumerImmediatePlanning") {
CommandSet (undef, "$name $action $cname noTaskcall");
CommandSet (undef, "$name $action $cname $evt");
return;
}
centralTask ($hash, $noUpdState);
centralTask ($hash, $evt);
return;
}
@ -2682,6 +2677,10 @@ return;
sub Notify {
# Es werden nur die Events von Geräten verarbeitet die im Hash $hash->{NOTIFYDEV} gelistet sind (wenn definiert).
# Dadurch kann die Menge der Events verringert werden. In sub DbRep_Define angeben.
return; # nicht genutzt zur Zeit
my $myHash = shift;
my $dev_hash = shift;
my $myName = $myHash->{NAME}; # Name des eigenen Devices
@ -2950,8 +2949,8 @@ return @pvconf;
# Zentraler Datenabruf
################################################################
sub centralTask {
my $hash = shift;
my $noUpdState = shift // 0; # state updaten 0, nicht updaten 1
my $hash = shift;
my $evt = shift // 1; # Readings Event (state nicht gesteuert)
my $name = $hash->{NAME};
my $type = $hash->{TYPE};
@ -2962,7 +2961,7 @@ sub centralTask {
### 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"};
# delete $data{$type}{$name}{pvhist}{$i} if(!$i); # evtl. vorhandene leere Schlüssel entfernen
# delete $data{$type}{$name}{pvhist}{$i} if(!$i); # evtl. vorhandene leere Schlüssel entfernen
#}
#for my $c (keys %{$data{$type}{$name}{consumers}}) {
@ -3002,13 +3001,13 @@ sub centralTask {
return if(IsDisabled($name));
#readingsSingleUpdate($hash, "state", "running", 1) if(!$noUpdState);
readingsSingleUpdate($hash, 'state', 'running', 0);
my $ret = createStringConfig ($hash); # die String Konfiguration erstellen
if ($ret) {
readingsSingleUpdate($hash, "state", $ret, 1);
readingsSingleUpdate($hash, 'state', $ret, 1);
return;
}
}
my @da;
my $t = time; # aktuelle Unix-Zeit
@ -3040,7 +3039,7 @@ sub centralTask {
_specialActivities ($centpars); # zusätzliche Events generieren + Sonderaufgaben
_transferWeatherValues ($centpars); # Wetterwerte übertragen
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen
createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
if (isSolCastUsed ($hash)) {
_getRoofTopData ($centpars); # SolCast API Strahlungswerte abrufen
@ -3061,20 +3060,20 @@ sub centralTask {
_createSummaries ($centpars); # Zusammenfassungen erstellen
_calcTodayPVdeviation ($centpars); # Vorhersageabweichung erstellen (nach Sonnenuntergang)
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen
createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
calcCorrAndQuality ($centpars); # neue Korrekturfaktor/Qualität berechnen und speichern
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen
createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
saveEnergyConsumption ($centpars); # Energie Hausverbrauch speichern
readingsSingleUpdate ($hash, "state", $centpars->{state}, 1) if(!$noUpdState); # Abschluß state
readingsSingleUpdate ($hash, 'state', $centpars->{state}, 1); # Abschluß state
setTimeTracking ($hash, $cst, 'runTimeCentralTask'); # Zyklus-Laufzeit ermitteln
genStatisticReadings ($centpars); # optionale Statistikreadings erstellen
createReadingsFromArray ($hash, \@da, 1); # Readings erzeugen
createReadingsFromArray ($hash, \@da, $evt); # Readings erzeugen
}
else {
InternalTimer(gettimeofday()+5, "FHEM::SolarForecast::centralTask", $hash, 0);
@ -6535,7 +6534,7 @@ sub _graphicHeader {
my $cmdupdate = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 get $name data')"}; # Update Button generieren
if ($ftui eq "ftui") {
$cmdupdate = qq{"ftui.setFhemStatus('get $name data')"};
$cmdupdate = qq{"ftui.setFhemStatus('set $name clientAction 0 get $name data')"};
}
my $cmdplchk = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=get $name plantConfigCheck', function(data){FW_okDialog(data)})"}; # Plant Check Button generieren
@ -6833,11 +6832,11 @@ sub _graphicConsumerLegend {
my $implan = qq{"FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name clientAction 0 consumerImmediatePlanning $c')"};
if ($ftui eq "ftui") {
$cmdon = qq{"ftui.setFhemStatus('set $name clientAction 1 set $cname $oncom')"};
$cmdoff = qq{"ftui.setFhemStatus('set $name clientAction 1 set $cname $offcom')"};
$cmdautoon = qq{"ftui.setFhemStatus('set $name clientAction 1 setreading $cname $autord 1')"};
$cmdautooff = qq{"ftui.setFhemStatus('set $name clientAction 1 setreading $cname $autord 0')"};
$implan = qq{"ftui.setFhemStatus('set $name clientAction 1 consumerImmediatePlanning $c')"};
$cmdon = qq{"ftui.setFhemStatus('set $name clientAction 0 set $cname $oncom')"};
$cmdoff = qq{"ftui.setFhemStatus('set $name clientAction 0 set $cname $offcom')"};
$cmdautoon = qq{"ftui.setFhemStatus('set $name clientAction 0 setreading $cname $autord 1')"};
$cmdautooff = qq{"ftui.setFhemStatus('set $name clientAction 0 setreading $cname $autord 0')"};
$implan = qq{"ftui.setFhemStatus('set $name clientAction 0 consumerImmediatePlanning $c')"};
}
$cmdon = q{} if(!$oncom);