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 .= "| Prognose der nächsten 4 Stunden: ".($pv4h)." Wh / Rest des Tages: ".($pvRe)." Wh / Morgen: ".($pvTo)." Wh | ";
- $ret .= "
";
- $ret .= "";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time00." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is00." | ";
- $ret .= " ";
- $ret .= "| ".$pv00." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time01." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is01." | ";
- $ret .= " ";
- $ret .= "| ".$pv01." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time02." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is02." | ";
- $ret .= " ";
- $ret .= "| ".$pv02." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time03." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is03." | ";
- $ret .= " ";
- $ret .= "| ".$pv03." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time04." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is04." | ";
- $ret .= " ";
- $ret .= "| ".$pv04." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time05." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is05." | ";
- $ret .= " ";
- $ret .= "| ".$pv05." | ";
- $ret .= " | ";
- $ret .= " ";
+ $ret = "";
+ $ret .= "| $header | ";
+ $ret .= " ";
- $ret .= "";
- $ret .= "";
+ 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 .= "| ".$time06." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is06." | ";
- $ret .= " ";
- $ret .= "| ".$pv06." | ";
- $ret .= " | ";
- $ret .= " ";
+ $ret .= " |
+
+ | ".$pv{$i}." | ";
- $ret .= "";
- $ret .= "";
+ if ($he < ($height+$fsize)) {
+ $ret .= " | ";
+ $ret .=" " if (defined $is{$i});
+ $ret .=" | ";
+ }
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time07." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is07." | ";
- $ret .= " ";
- $ret .= "| ".$pv07." | ";
- $ret .= " | ";
- $ret .= " ";
+ $ret .= "| ".$t{$i}." | ";
+ $ret .= " | ";
+ }
- $ret .= "";
- $ret .= "";
+ $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 .= "| ".$time08." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is08." | ";
- $ret .= " ";
- $ret .= "| ".$pv08." | ";
- $ret .= " | ";
- $ret .= " ";
+ #### Tabelle
+ $ret = "";
+ $ret .= "| $header | ";
+ $ret .= " ";
+
+ foreach $i (0..23) {
+ $is{$i} = "/fhem/images/fhemSVG/rc_BLANK.svg" if(!$is{$i});
+ $ret .= "";
+ $ret .= "| ";
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time09." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is09." | ";
- $ret .= " ";
- $ret .= "| ".$pv09." | ";
- $ret .= " | ";
- $ret .= " ";
+ $ret .= "";
+ $ret .= "";
+ $ret .= "| ".$t{$i}." | ";
+ $ret .= " ";
+ $ret .= " | ";
+ $ret .= " ";
+ $ret .= "| ".$pv{$i}." | ";
+ $ret .= " | ";
+ $ret .= " ";
+ }
+
+ $ret .= " | ";
+ $ret .= " ";
+ }
- $ret .= " | ";
- $ret .= "";
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time10." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is10." | ";
- $ret .= " ";
- $ret .= "| ".$pv10." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time11." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is11." | ";
- $ret .= " ";
- $ret .= "| ".$pv11." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time12." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is12." | ";
- $ret .= " ";
- $ret .= "| ".$pv12." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time13." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is13." | ";
- $ret .= " ";
- $ret .= "| ".$pv13." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time14." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is14." | ";
- $ret .= " ";
- $ret .= "| ".$pv14." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time15." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is15." | ";
- $ret .= " ";
- $ret .= "| ".$pv15." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time16." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is16." | ";
- $ret .= " ";
- $ret .= "| ".$pv16." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time17." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is17." | ";
- $ret .= " ";
- $ret .= "| ".$pv17." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time18." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is18." | ";
- $ret .= " ";
- $ret .= "| ".$pv18." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time19." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is19." | ";
- $ret .= " ";
- $ret .= "| ".$pv19." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time20." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is20." | ";
- $ret .= " ";
- $ret .= "| ".$pv20." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time21." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is21." | ";
- $ret .= " ";
- $ret .= "| ".$pv21." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time22." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is22." | ";
- $ret .= " ";
- $ret .= "| ".$pv22." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "";
-
- $ret .= "";
- $ret .= "";
- $ret .= "| ".$time23." | ";
- $ret .= " ";
- $ret .= "";
- $ret .= "| ".$is23." | ";
- $ret .= " ";
- $ret .= "| ".$pv23." | ";
- $ret .= " | ";
- $ret .= " ";
-
- $ret .= " | ";
- $ret .= "
";
-
-return($ret);
+return $ret;
}
1;
@@ -1851,15 +1560,18 @@ return($ret);
- - set <name> credentials <username> <password>
- Setzt Username / Passwort für den Zugriff zum SMA-Portal.
+ - set <name> createPortalGraphic
+ Erstellt ein weblink-Device zur grafischen Anzeige der SMA Portal Prognosedaten.
+ Das Attribut "detailLevel" muss auf den Level 4 gesetzt sein. Der Befehl setzt dieses Attribut automatisch auf
+ den benötigten Wert.
+ Mit den Attributen "portalGraphicStyle" und "portalGraphicColor" können Erscheinungsbild und Farbgebung des erstellten
+ Devices angepasst werden.
-
+
- - set <name> createPortalGraphic
- Erstellt ein weblink-Device zur grafischen Anzeige der SMA Portaldaten. Das Attribut "detailLevel" muss auf den
- Level 4 gesetzt sein. Der Befehl setzt dieses Attribut automatisch auf den benötigten Wert.
+ - set <name> credentials <username> <password>
+ Setzt Username / Passwort für den Zugriff zum SMA-Portal.
@@ -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).