diff --git a/fhem/contrib/DS_Starter/76_SMAPortal.pm b/fhem/contrib/DS_Starter/76_SMAPortal.pm index 24245a673..2372bd1f7 100644 --- a/fhem/contrib/DS_Starter/76_SMAPortal.pm +++ b/fhem/contrib/DS_Starter/76_SMAPortal.pm @@ -62,6 +62,8 @@ sub SMAPortal_Initialize($) { "disable:0,1 ". "getDataRetries:1,2,3,4,5,6,7,8,9,10 ". "interval ". + "portalGraphicColor:colorpicker,RGB ". + "portalGraphicStyle:default,modern ". "showPassInLog:1,0 ". "timeout ". "userAgent ". @@ -115,6 +117,7 @@ BEGIN { Debug FmtDateTime FmtTime + FW_makeImage fhemTimeGm getKeyValue gettimeofday @@ -144,6 +147,7 @@ BEGIN { # Versions History intern our %vNotesIntern = ( + "1.7.0" => "01.05.2019 code change of PortalAsHtml, new attributes \"portalGraphicColor\" and \"portalGraphicStyle\" ", "1.6.0" => "29.04.2019 function PortalAsHtml ", "1.5.5" => "22.04.2019 fix readings for BattryOut and BatteryIn ", "1.5.4" => "26.03.2019 delete L1_InfoMessages if no info occur ", @@ -880,6 +884,8 @@ sub extractForecastData($$) { $restOfDaySum{'Consumption'} += $fc_obj->{'ConsumptionForecast'}->{'Amount'} / 3600; $restOfDaySum{'Total'} += $fc_obj->{'PvMeanPower'}->{'Amount'} - $fc_obj->{'ConsumptionForecast'}->{'Amount'} / 3600; $restOfDaySum{'ConsumpRcmd'} += $fc_obj->{'IsConsumptionRecommended'} ? 1 : 0; + $PV_sum += int($fc_obj->{'PvMeanPower'}->{'Amount'}); # integrator of daily PV + $consum_sum += int($fc_obj->{'ConsumptionForecast'}->{'Amount'}/3600); # integrator of daily Consumption forecast } # If data is for the next day (quick and dirty: current day different from this object's day) @@ -923,6 +929,8 @@ sub extractForecastData($$) { readingsBulkUpdate($hash, "L2_Next04Hours-Total", int( $nextFewHoursSum{'Total'} ) ); readingsBulkUpdate($hash, "L2_Next04Hours-IsConsumptionRecommended", int( $nextFewHoursSum{'ConsumpRcmd'} ) ); readingsBulkUpdate($hash, "next04hours_state", int( $nextFewHoursSum{'PV'} ) ); + readingsBulkUpdate($hash, "L2_Forecast-Today-Consumption", $consum_sum); # publish consumption forecast values + readingsBulkUpdate($hash, "L2_Forecast-Today-PV", $PV_sum); # publish integrated PV } if($dl >= 3) { @@ -1279,14 +1287,23 @@ sub UTC2LocalString($$) { my ($year, $month, $day, $hour) = $datehour =~ /(\d+)-(\d\d)-(\d\d)\s+(\d\d)/; # proto: $time = timegm($sec,$min,$hour,$mday,$mon,$year); - my $epoch = timegm (0,0,$hour,$day,$month-1,$year); + my $utcepoch = timegm(0,0,$hour,$day,$month-1,$year); # proto: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); - my ($lyear,$lmonth,$lday,$lhour,$isdst) = (localtime($epoch))[5,4,3,2,-1]; + my (undef,undef,undef,undef,undef,undef,undef,undef,$isdst) = localtime(time); + + if($isdst) { + $utcepoch = $utcepoch - 7200; + } else { + $utcepoch = $utcepoch - 3600; + } + + # proto: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + my ($lyear,$lmonth,$lday,$lhour) = (localtime($utcepoch))[5,4,3,2]; $lyear += 1900; # year is 1900 based $lmonth++; # month number is zero based - + if(AttrVal("global","language","EN") eq "DE") { return (sprintf("%02d.%02d.%04d %02d:%s", $lday,$lmonth,$lyear,$lhour,$rest)); } else { @@ -1317,448 +1334,140 @@ return($txt); sub PortalAsHtml ($) { my ($name) = @_; my $hash = $defs{$name}; + my $ret = ""; + my ($i,$header); + my (%pv,%is,%t); + return "Device \"$name\" doesn't exist !" if(!$hash); if(AttrVal($name, "detailLevel", 1) != 4) { return "The attribute \"detailLevel\" of device \"$name\" has to be set to level \"4\" !"; } - + + # Stylewerte + my $maxVal; # max Ertrag in den nächsten 24 Stunden + my $he; # Balkenhöhe + my $space = 1; # Platz zwischen den Balken + my $width = 24; # Breite der Balken , 24 max , 6 min + my $height = 200; # Höhe der Balken + my $fsize = 20; # Höhe für Font + my $color1 = "#FFFFFF"; # Farbwert 1 + my $colorv = "#".AttrVal($name, "portalGraphicColor", "7F7F7F"); # Farbe des Wertes , ggf dyn ermitteln aus Device WEB styleData cols.Header (original grün -> "#4B9C8A") + + # Icon Erstellung + my $icon = "light_light_dim_100.svg"; + # $icon = FW_makeImage($icon,$icon,"icon"); + my $iconpath = "images/openautomation"; + $icon = $main::FW_ME."/$iconpath/$icon"; + my $pv4h = ReadingsNum($name,"L2_Next04Hours-PV", ""); my $pvRe = ReadingsNum($name,"L3_RestOfDay-PV", ""); my $pvTo = ReadingsNum($name,"L3_Tomorrow-PV", ""); - my $pv00 = ReadingsNum($name,"L2_ThisHour_PvMeanPower", undef); - my $pv01 = ReadingsNum($name,"L4_NextHour01_PvMeanPower",undef); - my $pv02 = ReadingsNum($name,"L4_NextHour02_PvMeanPower",undef); - my $pv03 = ReadingsNum($name,"L4_NextHour03_PvMeanPower",undef); - my $pv04 = ReadingsNum($name,"L4_NextHour04_PvMeanPower",undef); - my $pv05 = ReadingsNum($name,"L4_NextHour05_PvMeanPower",undef); - my $pv06 = ReadingsNum($name,"L4_NextHour06_PvMeanPower",undef); - my $pv07 = ReadingsNum($name,"L4_NextHour07_PvMeanPower",undef); - my $pv08 = ReadingsNum($name,"L4_NextHour08_PvMeanPower",undef); - my $pv09 = ReadingsNum($name,"L4_NextHour09_PvMeanPower",undef); - my $pv10 = ReadingsNum($name,"L4_NextHour10_PvMeanPower",undef); - my $pv11 = ReadingsNum($name,"L4_NextHour11_PvMeanPower",undef); - my $pv12 = ReadingsNum($name,"L4_NextHour12_PvMeanPower",undef); - my $pv13 = ReadingsNum($name,"L4_NextHour13_PvMeanPower",undef); - my $pv14 = ReadingsNum($name,"L4_NextHour14_PvMeanPower",undef); - my $pv15 = ReadingsNum($name,"L4_NextHour15_PvMeanPower",undef); - my $pv16 = ReadingsNum($name,"L4_NextHour16_PvMeanPower",undef); - my $pv17 = ReadingsNum($name,"L4_NextHour17_PvMeanPower",undef); - my $pv18 = ReadingsNum($name,"L4_NextHour18_PvMeanPower",undef); - my $pv19 = ReadingsNum($name,"L4_NextHour19_PvMeanPower",undef); - my $pv20 = ReadingsNum($name,"L4_NextHour20_PvMeanPower",undef); - my $pv21 = ReadingsNum($name,"L4_NextHour21_PvMeanPower",undef); - my $pv22 = ReadingsNum($name,"L4_NextHour22_PvMeanPower",undef); - my $pv23 = ReadingsNum($name,"L4_NextHour23_PvMeanPower",undef); - return "Awaiting level 4 data ... " if(!defined $pv01); + # Headerzeile generieren + my $alias = AttrVal($name, "alias", "SMA Portal"); # Linktext als Aliasname oder "SMA Portal" + my $dlink = "$alias"; + if(AttrVal("global","language","EN") eq "DE") { + $header = "$dlink Prognosedaten - nächste 4 Stunden: $pv4h Wh / Rest des Tages: $pvRe Wh / Morgen: $pvTo Wh"; + } else { + $header = "$dlink forecast data - next 4 hours: $pv4h Wh / rest of day: $pvRe Wh / tomorrow: $pvTo Wh"; + } + + # Werte aktuelle Stunde + $pv{0} = ReadingsNum($name,"L2_ThisHour_PvMeanPower", undef); + $is{0} = (ReadingsVal($name,"L2_ThisHour_IsConsumptionRecommended",'no') eq 'yes' ) ? $icon : undef; + return "Awaiting level 4 data ... " if(!defined $pv{0} || !defined $is{0}); + if(AttrVal("global","language","EN") eq "DE") { + (undef,undef,undef,$t{0}) = ReadingsVal($name,"L2_ThisHour_Time",'0') =~ m/(\d{2}).(\d{2}).(\d{4})\s(\d{2})/; + } else { + (undef,undef,undef,$t{0}) = ReadingsVal($name,"L2_ThisHour_Time",'0') =~ m/(\d{4})-(\d{2})-(\d{2})\s(\d{2})/; + } - my $is00 = ReadingsVal($name,"L2_ThisHour_IsConsumptionRecommended",undef); - my $is01 = ReadingsVal($name,"L4_NextHour01_IsConsumptionRecommended",undef); - my $is02 = ReadingsVal($name,"L4_NextHour02_IsConsumptionRecommended",undef); - my $is03 = ReadingsVal($name,"L4_NextHour03_IsConsumptionRecommended",undef); - my $is04 = ReadingsVal($name,"L4_NextHour04_IsConsumptionRecommended",undef); - my $is05 = ReadingsVal($name,"L4_NextHour05_IsConsumptionRecommended",undef); - my $is06 = ReadingsVal($name,"L4_NextHour06_IsConsumptionRecommended",undef); - my $is07 = ReadingsVal($name,"L4_NextHour07_IsConsumptionRecommended",undef); - my $is08 = ReadingsVal($name,"L4_NextHour08_IsConsumptionRecommended",undef); - my $is09 = ReadingsVal($name,"L4_NextHour09_IsConsumptionRecommended",undef); - my $is10 = ReadingsVal($name,"L4_NextHour10_IsConsumptionRecommended",undef); - my $is11 = ReadingsVal($name,"L4_NextHour11_IsConsumptionRecommended",undef); - my $is12 = ReadingsVal($name,"L4_NextHour12_IsConsumptionRecommended",undef); - my $is13 = ReadingsVal($name,"L4_NextHour13_IsConsumptionRecommended",undef); - my $is14 = ReadingsVal($name,"L4_NextHour14_IsConsumptionRecommended",undef); - my $is15 = ReadingsVal($name,"L4_NextHour15_IsConsumptionRecommended",undef); - my $is16 = ReadingsVal($name,"L4_NextHour16_IsConsumptionRecommended",undef); - my $is17 = ReadingsVal($name,"L4_NextHour17_IsConsumptionRecommended",undef); - my $is18 = ReadingsVal($name,"L4_NextHour18_IsConsumptionRecommended",undef); - my $is19 = ReadingsVal($name,"L4_NextHour19_IsConsumptionRecommended",undef); - my $is20 = ReadingsVal($name,"L4_NextHour20_IsConsumptionRecommended",undef); - my $is21 = ReadingsVal($name,"L4_NextHour21_IsConsumptionRecommended",undef); - my $is22 = ReadingsVal($name,"L4_NextHour22_IsConsumptionRecommended",undef); - my $is23 = ReadingsVal($name,"L4_NextHour23_IsConsumptionRecommended",undef); - return "Awaiting level 4 data ... " if(!defined $is01); - - my $time00 = strftime("%H",localtime); - my $time01 = strftime("%H",localtime(time+1*60*60)); - my $time02 = strftime("%H",localtime(time+2*60*60)); - my $time03 = strftime("%H",localtime(time+3*60*60)); - my $time04 = strftime("%H",localtime(time+4*60*60)); - my $time05 = strftime("%H",localtime(time+5*60*60)); - my $time06 = strftime("%H",localtime(time+6*60*60)); - my $time07 = strftime("%H",localtime(time+7*60*60)); - my $time08 = strftime("%H",localtime(time+8*60*60)); - my $time09 = strftime("%H",localtime(time+9*60*60)); - my $time10 = strftime("%H",localtime(time+10*60*60)); - my $time11 = strftime("%H",localtime(time+11*60*60)); - my $time12 = strftime("%H",localtime(time+12*60*60)); - my $time13 = strftime("%H",localtime(time+13*60*60)); - my $time14 = strftime("%H",localtime(time+14*60*60)); - my $time15 = strftime("%H",localtime(time+15*60*60)); - my $time16 = strftime("%H",localtime(time+16*60*60)); - my $time17 = strftime("%H",localtime(time+17*60*60)); - my $time18 = strftime("%H",localtime(time+18*60*60)); - my $time19 = strftime("%H",localtime(time+19*60*60)); - my $time20 = strftime("%H",localtime(time+20*60*60)); - my $time21 = strftime("%H",localtime(time+21*60*60)); - my $time22 = strftime("%H",localtime(time+22*60*60)); - my $time23 = strftime("%H",localtime(time+23*60*60)); + # Style-Auswahl + if(AttrVal($name, "portalGraphicStyle", "default") eq "modern") { + # modern Style + $maxVal = $pv{0}; # nehmen wir mal als Startwert - # Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 8020) - my $maxValue = ReadingsNum($name,"L2_PlantPeakPower", 8020); - # Konfiguration den Platz zwischen den Balken (hier wäre der höchste zu erwartende Wert = 30) - my $space = 2; - # Konfiguration des breite der Balken (hier wäre der höchste zu erwartende Wert = 30) - my $width = 24; - # Konfiguration des höhe der Balken (hier wäre der höchste zu erwartende Wert = 160) - my $height = 160; - # Konfiguration der Farbe oben (hier wäre der höchste zu erwartende Wert = "FFFFFF") - my $color1 = "#FFFFFF"; - # Konfiguration der Farbe des Wertes (hier wäre der höchste zu erwartende Wert = "4B9C8A") - my $color2 = "#4B9C8A"; + foreach $i (1..23) { + $pv{$i} = ReadingsNum($name,"L4_NextHour".sprintf("%02d",$i)."_PvMeanPower",0); + $maxVal = ($pv{$i} > $maxVal) ? $pv{$i} : $maxVal; + $is{$i} = (ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_IsConsumptionRecommended",'no') eq 'yes') ? $icon : undef; + + if(AttrVal("global","language","EN") eq "DE") { + (undef,undef,undef,$t{$i}) = ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_Time",'0') =~ m/(\d{2}).(\d{2}).(\d{4})\s(\d{2})/; + } else { + (undef,undef,undef,$t{$i}) = ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_Time",'0') =~ m/(\d{4})-(\d{2})-(\d{2})\s(\d{2})/; + } + } - #### Tabelle - my $ret = ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; + } - $ret .= ""; - $ret .= "
Prognose der nächsten 4 Stunden: ".($pv4h)." Wh / Rest des Tages: ".($pvRe)." Wh / Morgen: ".($pvTo)." Wh
"; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time00."
".$is00."
".$pv00."
"; - - $ret .= "
"; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time01."
".$is01."
".$pv01."
"; - - $ret .= "
"; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time02."
".$is02."
".$pv02."
"; - - $ret .= "
"; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time03."
".$is03."
".$pv03."
"; - - $ret .= "
"; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time04."
".$is04."
".$pv04."
"; - - $ret .= "
"; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time05."
".$is05."
".$pv05."
"; + $ret = ""; + $ret .= ""; + $ret .= ""; - $ret .= ""; - $ret .= ""; + $ret .= "
$header
"; + foreach $i (0..23) { + $he = int(($maxVal-$pv{$i})/$maxVal*$height) + $fsize; + $space = ($pv{$i}) ? 1 : 0; + $width = ($pv{$i}) ? 24 : 6; + $pv{$i} = " " if (!$pv{$i}); # keine Anzeige bei Null - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time06."
".$is06."
".$pv06."
"; + $ret .= "
+ + "; - $ret .= ""; - $ret .= ""; + } - $ret .= "
".$pv{$i}."
"; + if ($he < ($height+$fsize)) { + $ret .= "
"; + $ret .="" if (defined $is{$i}); + $ret .="
"; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time07."
".$is07."
".$pv07."
"; + $ret .= "
".$t{$i}."
"; + $ret .= "
"; + + } else { + # default Style + my $maxValue = ReadingsNum($name,"L2_PlantPeakPower", 8020); # Konfiguration des maximal übergebenen Werts + $space += 1; # Adaption Platz zwischen den Balken + $height -= 40; # Konfiguration der Höhe der Balken + + foreach $i (1..23) { + $pv{$i} = ReadingsNum($name,"L4_NextHour".sprintf("%02d",$i)."_PvMeanPower",undef); + $is{$i} = (ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_IsConsumptionRecommended",'no') eq 'yes') ? $icon : undef; + if(AttrVal("global","language","EN") eq "DE") { + (undef,undef,undef,$t{$i}) = ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_Time",'0') =~ m/(\d{2}).(\d{2}).(\d{4})\s(\d{2})/; + } else { + (undef,undef,undef,$t{$i}) = ReadingsVal($name,"L4_NextHour".sprintf("%02d",$i)."_Time",'0') =~ m/(\d{4})-(\d{2})-(\d{2})\s(\d{2})/; + } + } - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time08."
".$is08."
".$pv08."
"; + #### Tabelle + $ret = ""; + $ret .= ""; + $ret .= ""; + + foreach $i (0..23) { + $is{$i} = "/fhem/images/fhemSVG/rc_BLANK.svg" if(!$is{$i}); + $ret .= ""; + $ret .= ""; - $ret .= ""; + $ret .= "
$header
"; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time09."
".$is09."
".$pv09."
"; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= "
".$t{$i}."
".$pv{$i}."
"; + } + + $ret .= "
"; + } - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time10."
".$is10."
".$pv10."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time11."
".$is11."
".$pv11."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time12."
".$is12."
".$pv12."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time13."
".$is13."
".$pv13."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time14."
".$is14."
".$pv14."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time15."
".$is15."
".$pv15."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time16."
".$is16."
".$pv16."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time17."
".$is17."
".$pv17."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time18."
".$is18."
".$pv18."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time19."
".$is19."
".$pv19."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time20."
".$is20."
".$pv20."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time21."
".$is21."
".$pv21."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time22."
".$is22."
".$pv22."
"; - - $ret .= ""; - $ret .= ""; - - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= ""; - $ret .= "
".$time23."
".$is23."
".$pv23."
"; - - $ret .= ""; - $ret .= ""; - -return($ret); +return $ret; } 1; @@ -1851,15 +1560,18 @@ return($ret);

@@ -1911,7 +1623,7 @@ return($ret); - +
L1 - nur Live-Daten und Wetter-Daten werden generiert.
L2 - wie L1 und zusätzlich Prognose der aktuellen und nächsten 4 Stunden
L2 - wie L1 und zusätzlich Prognose der aktuellen und nächsten 4 Stunden sowie PV-Erzeugung und Verbrauch des aktuellen Tages
L3 - wie L2 und zusätzlich Prognosedaten des Resttages, des Folgetages und der geplanten Schaltzeiten für Verbraucher
L4 - wie L3 und zusätzlich die detaillierte Prognose der nächsten 24 Stunden
@@ -1939,6 +1651,18 @@ return($ret); Wenn gesetzt, wird das verwendete Passwort im Logfile angezeigt. (default = 0)
+ +
  • portalGraphicStyle <RGB-Code>
    + Definiert die Farbe der grafischen Darstellung von SMA Portal Prognosedaten. + (siehe "set <name> createPortalGraphic") +

  • + + +
  • portalGraphicStyle <default | modern>
    + Wählt das Erscheinungsbild der grafischen Darstellung von SMA Portal Prognosedaten aus. + (siehe "set <name> createPortalGraphic") +

  • +
  • timeout <Sekunden>
    Timeout-Wert für HTTP-Aufrufe zum SMA-Portal (Default: 30 Sekunden).