From 7608c51327e2b67bd9c07ba0e88b6d0cebc786cd Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Sun, 4 Apr 2021 07:45:35 +0000 Subject: [PATCH] 76_SolarForecast.pm: contrib 0.29.0 git-svn-id: https://svn.fhem.de/fhem/trunk@24143 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/76_SolarForecast.pm | 98 ++++++++++++--------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index 23ecda680..d373debac 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -672,7 +672,7 @@ sub _setpowerTrigger { ## no critic "not used" } for my $key (keys %{$h}) { - if($key !~ /^tr[0-9]+(?:on|off)$/x || $h->{$key} !~ /^[0-9]+$/x) { + if($key !~ /^[0-9]+(?:on|off)$/x || $h->{$key} !~ /^[0-9]+$/x) { return qq{The key "$key" is invalid. Please consider the commandref.}; } } @@ -811,7 +811,7 @@ sub _setpvCorrectionFactor { ## no critic "not used" _transferDWDForecastValues ($params); if(@da) { - push @da, "state:updated"; # Abschluß state + push @da, "state<>updated"; # Abschluß state createReadingsFromArray ($hash, \@da, 1); } @@ -1420,16 +1420,16 @@ sub _additionalActivities { my ($ts,$ts1,$pvfc,$pvrl,$gcon); - $ts1 = $date." ".sprintf("%02d",$chour)."<>00<>00"; + $ts1 = $date." ".sprintf("%02d",$chour).":00:00"; $pvfc = ReadingsNum($name, "Today_Hour".sprintf("%02d",$chour)."_PVforecast", 0); - push @$daref, "LastHourPVforecast:".$pvfc." Wh:".$ts1; + push @$daref, "LastHourPVforecast<>".$pvfc." Wh<>".$ts1; $pvrl = ReadingsNum($name, "Today_Hour".sprintf("%02d",$chour)."_PVreal", 0); - push @$daref, "LastHourPVreal:".$pvrl." Wh:".$ts1; + push @$daref, "LastHourPVreal<>".$pvrl." Wh<>".$ts1; $gcon = ReadingsNum($name, "Today_Hour".sprintf("%02d",$chour)."_GridConsumption", 0); - push @$daref, "LastHourGridconsumptionReal:".$gcon." Wh:".$ts1; + push @$daref, "LastHourGridconsumptionReal<>".$gcon." Wh<>".$ts1; my $tlim = "00"; # bestimmte Aktionen if($chour =~ /^($tlim)$/x) { @@ -1438,13 +1438,13 @@ sub _additionalActivities { $ts = $date." 23:59:59"; $pvfc = ReadingsNum($name, "Today_Hour24_PVforecast", 0); - push @$daref, "LastHourPVforecast:".$pvfc.":".$ts1; + push @$daref, "LastHourPVforecast<>".$pvfc."<>".$ts1; $pvrl = ReadingsNum($name, "Today_Hour24_PVreal", 0); - push @$daref, "LastHourPVreal:".$pvrl.":".$ts1; + push @$daref, "LastHourPVreal<>".$pvrl."<>".$ts1; $gcon = ReadingsNum($name, "Today_Hour24_GridConsumption", 0); - push @$daref, "LastHourGridconsumptionReal:".$gcon.":".$ts1; + push @$daref, "LastHourGridconsumptionReal<>".$gcon."<>".$ts1; deleteReadingspec ($hash, "Today_Hour.*_GridConsumption"); deleteReadingspec ($hash, "Today_Hour.*_PV.*"); @@ -1515,9 +1515,8 @@ sub _transferDWDForecastValues { $epoche = $t + (3600*$num); my ($ta,$realts) = TimeAdjust ($epoche); - # $realts =~ s/:/<>/gx; - # push @$daref, "CurrentHourPVforecast:".$calcpv." Wh:".$realts if($num == 0); - #push @$daref, "${time_str}_Time:" .$ta; + # push @$daref, "CurrentHourPVforecast<>".$calcpv." Wh<>".$realts if($num == 0); + #push @$daref, "${time_str}_Time<>" .$ta; $data{$type}{$name}{nexthours}{$time_str}{pvforecast} = $calcpv; $data{$type}{$name}{nexthours}{$time_str}{starttime} = $ta; @@ -1528,7 +1527,7 @@ sub _transferDWDForecastValues { } if($fd == 0 && int $calcpv > 0) { # Vorhersagedaten des aktuellen Tages zum manuellen Vergleich in Reading speichern - push @$daref, "Today_Hour".sprintf("%02d",$fh1)."_PVforecast:$calcpv Wh"; + push @$daref, "Today_Hour".sprintf("%02d",$fh1)."_PVforecast<>$calcpv Wh"; } if($fd == 0 && $fh1) { @@ -1540,7 +1539,7 @@ sub _transferDWDForecastValues { } } - push @$daref, ".lastupdateForecastValues:".$t; # Statusreading letzter DWD update + push @$daref, ".lastupdateForecastValues<>".$t; # Statusreading letzter DWD update return; } @@ -1567,20 +1566,15 @@ sub _transferWeatherValues { my $fc1_SunRise = ReadingsVal($fcname, "fc1_SunRise", "00:00"); # Sonnenaufgang morgen my $fc1_SunSet = ReadingsVal($fcname, "fc1_SunSet", "00:00"); # Sonnenuntergang morgen - $fc0_SunRise =~ s/:/<>/x; - $fc0_SunSet =~ s/:/<>/x; - $fc1_SunRise =~ s/:/<>/x; - $fc1_SunSet =~ s/:/<>/x; + push @$daref, "Today_SunRise<>". $fc0_SunRise; + push @$daref, "Today_SunSet<>". $fc0_SunSet; + push @$daref, "Tomorrow_SunRise<>".$fc1_SunRise; + push @$daref, "Tomorrow_SunSet<>". $fc1_SunSet; - push @$daref, "Today_SunRise:". $fc0_SunRise; - push @$daref, "Today_SunSet:". $fc0_SunSet; - push @$daref, "Tomorrow_SunRise:".$fc1_SunRise; - push @$daref, "Tomorrow_SunSet:". $fc1_SunSet; - - my $fc0_SunRise_round = sprintf "%02d", (split "<>", $fc0_SunRise)[0]; - my $fc0_SunSet_round = sprintf "%02d", (split "<>", $fc0_SunSet)[0]; - my $fc1_SunRise_round = sprintf "%02d", (split "<>", $fc1_SunRise)[0]; - my $fc1_SunSet_round = sprintf "%02d", (split "<>", $fc1_SunSet)[0]; + my $fc0_SunRise_round = sprintf "%02d", (split ":", $fc0_SunRise)[0]; + my $fc0_SunSet_round = sprintf "%02d", (split ":", $fc0_SunSet)[0]; + my $fc1_SunRise_round = sprintf "%02d", (split ":", $fc1_SunRise)[0]; + my $fc1_SunSet_round = sprintf "%02d", (split ":", $fc1_SunSet)[0]; for my $num (0..46) { my ($fd,$fh) = _calcDayHourMove ($chour, $num); @@ -1658,7 +1652,7 @@ sub _transferInverterValues { my $pvuf = $pvunit =~ /^kW$/xi ? 1000 : 1; my $pv = ReadingsNum ($indev, $pvread, 0) * $pvuf; # aktuelle Erzeugung (W) - push @$daref, "Current_PV:". $pv." W"; + push @$daref, "Current_PV<>". $pv." W"; $data{$type}{$name}{current}{generation} = $pv; # Hilfshash Wert current generation Forum: https://forum.fhem.de/index.php/topic,117864.msg1139251.html#msg1139251 my $etuf = $etunit =~ /^kWh$/xi ? 1000 : 1; @@ -1696,7 +1690,7 @@ sub _transferInverterValues { } my $nhour = $chour+1; - push @$daref, "Today_Hour".sprintf("%02d",$nhour)."_PVreal:".$ethishour." Wh"; + push @$daref, "Today_Hour".sprintf("%02d",$nhour)."_PVreal<>".$ethishour." Wh"; $data{$type}{$name}{circular}{sprintf("%02d",$nhour)}{pvrl} = $ethishour; # Ringspeicher PV real Forum: https://forum.fhem.de/index.php/topic,117864.msg1133350.html#msg1133350 $paref->{ethishour} = $ethishour; @@ -1737,7 +1731,7 @@ sub _transferMeterValues { my $gcuf = $gcunit =~ /^kW$/xi ? 1000 : 1; my $co = ReadingsNum ($medev, $gc, 0) * $gcuf; # aktueller Bezug (W) - push @$daref, "Current_GridConsumption:".$co." W"; + push @$daref, "Current_GridConsumption<>".$co." W"; $data{$type}{$name}{current}{gridconsumption} = $co; # Hilfshash Wert current grid consumption Forum: https://forum.fhem.de/index.php/topic,117864.msg1139251.html#msg1139251 my $ctuf = $ctunit =~ /^kWh$/xi ? 1000 : 1; @@ -1775,7 +1769,7 @@ sub _transferMeterValues { } my $nhour = $chour+1; - push @$daref, "Today_Hour".sprintf("%02d",$nhour)."_GridConsumption:".$gctotthishour." Wh"; + push @$daref, "Today_Hour".sprintf("%02d",$nhour)."_GridConsumption<>".$gctotthishour." Wh"; $data{$type}{$name}{circular}{sprintf("%02d",$nhour)}{gcons} = $gctotthishour; # Hilfshash Wert Bezug (Wh) Forum: https://forum.fhem.de/index.php/topic,117864.msg1133350.html#msg1133350 $paref->{gctotthishour} = $gctotthishour; @@ -1805,16 +1799,14 @@ sub _evaluateThresholds { my ($a,$h) = parseParams ($pt); for my $key (keys %{$h}) { - my ($knum,$cond) = $key =~ /^tr([0-9]+)(on|off)$/x; + my ($knum,$cond) = $key =~ /^([0-9]+)(on|off)$/x; if($cond eq "on" && $gen > $h->{$key}) { - push @$daref, "powerTrigger_${knum}_on:1" if(!ReadingsVal($name, "powerTrigger_${knum}_on", 0)); - push @$daref, "powerTrigger_${knum}_off:0" if(ReadingsVal ($name, "powerTrigger_${knum}_off", 0)); + push @$daref, "powerTrigger_${knum}<>on" if(ReadingsVal($name, "powerTrigger_${knum}", "off") eq "off"); } if($cond eq "off" && $gen < $h->{$key}) { - push @$daref, "powerTrigger_${knum}_off:1" if(!ReadingsVal($name, "powerTrigger_${knum}_off", 0)); - push @$daref, "powerTrigger_${knum}_on:0" if(ReadingsVal ($name, "powerTrigger_${knum}_on", 0)); + push @$daref, "powerTrigger_${knum}<>off" if(ReadingsVal($name, "powerTrigger_${knum}", "on") eq "on"); } } @@ -1856,11 +1848,11 @@ sub _calcSummaries { $todaySum->{PV} += ReadingsNum($name, "Today_Hour".sprintf("%02d",$th)."_PVforecast", 0);; } - push @$daref, "NextHours_Sum00_PVforecast:".(int $thforecast)." Wh"; - push @$daref, "NextHours_Sum04_PVforecast:".(int $next4HoursSum->{PV})." Wh"; - push @$daref, "RestOfDayPVforecast:". (int $restOfDaySum->{PV}). " Wh"; - push @$daref, "Tomorrow_PVforecast:". (int $tomorrowSum->{PV}). " Wh"; - push @$daref, "Today_PVforecast:". (int $todaySum->{PV}). " Wh"; + push @$daref, "NextHours_Sum00_PVforecast<>".(int $thforecast)." Wh"; + push @$daref, "NextHours_Sum04_PVforecast<>".(int $next4HoursSum->{PV})." Wh"; + push @$daref, "RestOfDayPVforecast<>". (int $restOfDaySum->{PV}). " Wh"; + push @$daref, "Tomorrow_PVforecast<>". (int $tomorrowSum->{PV}). " Wh"; + push @$daref, "Today_PVforecast<>". (int $todaySum->{PV}). " Wh"; return; } @@ -3458,9 +3450,7 @@ sub createReadingsFromArray { readingsBeginUpdate($hash); for my $elem (@$daref) { - my ($rn,$rval,$ts) = split ":", $elem, 3; - $rval =~ s/<>/:/gx; - $ts =~ s/<>/:/gx if(defined $ts); + my ($rn,$rval,$ts) = split "<>", $elem, 3; readingsBulkUpdate($hash, $rn, $rval, undef, $ts); } @@ -3868,6 +3858,26 @@ werden weitere SolarForecast Devices zugeordnet.
+ +
+