From b41f393e68090b4f649cc84d6610f731c37307fc Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Mon, 29 Apr 2019 22:07:15 +0000 Subject: [PATCH] 76_SMAPortal: contrib 1.6.0 git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@19293 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- contrib/DS_Starter/76_SMAPortal.pm | 481 ++++++++++++++++++++++++++++- 1 file changed, 480 insertions(+), 1 deletion(-) diff --git a/contrib/DS_Starter/76_SMAPortal.pm b/contrib/DS_Starter/76_SMAPortal.pm index a69fe45f5..5cca55746 100644 --- a/contrib/DS_Starter/76_SMAPortal.pm +++ b/contrib/DS_Starter/76_SMAPortal.pm @@ -103,6 +103,7 @@ BEGIN { BlockingCall BlockingKill CommandAttr + CommandDefine CommandDeleteAttr CommandDeleteReading CommandSet @@ -130,6 +131,7 @@ BEGIN { readingsBeginUpdate readingsDelete readingsEndUpdate + ReadingsNum ReadingsVal RemoveInternalTimer setKeyValue @@ -142,6 +144,7 @@ BEGIN { # Versions History intern our %vNotesIntern = ( + "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 ", "1.5.3" => "26.03.2019 delete L1_ErrorMessages, L1_WarningMessages if no errors or warnings occur ", @@ -227,7 +230,8 @@ sub Set($@) { } else { # erweiterte Setlist wenn Credentials gesetzt $setlist = "Unknown argument $opt, choose one of ". - "credentials " + "credentials ". + "createPortalGraphic:noArg " ; } @@ -242,6 +246,24 @@ sub Set($@) { return "Error while saving Username / Password - see logfile for details"; } + } elsif ($opt eq "createPortalGraphic") { + if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";} + my ($htmldev,$ret); + + $htmldev = "WL.$name"; + $ret = CommandDefine($hash->{CL},"$htmldev weblink htmlCode {FHEM::SMAPortal::PortalAsHtml (\"$name\")}"); + return $ret if($ret); + my $c = "This device provides a praphical output of SMA Portal values.\n". + "The device needs to set attribute \"detailLevel\" in device \"$name\" to level \"4\""; + CommandAttr($hash->{CL},"$htmldev comment $c"); + $c = "SMA Portal Graphics"; + CommandAttr($hash->{CL},"$htmldev alias $c"); + + my $room = AttrVal($name,"room","SMAPortal"); + CommandAttr($hash->{CL},"$htmldev room $room"); + CommandAttr($hash->{CL},"$name detailLevel 4"); + return "SMA Portal Graphics device \"$htmldev\" created and assigned to room \"$room\"."; + } else { return "$setlist"; } @@ -1289,6 +1311,454 @@ sub substUmlauts ($) { return($txt); } +############################################################################### +# Subroutine für WebLink-Device +############################################################################### +sub PortalAsHtml ($) { + my ($name) = @_; + my $hash = $defs{$name}; + 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\" !"; + } + + 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", ""); + my $pv01 = ReadingsNum($name,"L4_NextHour01_PvMeanPower", ""); + my $pv02 = ReadingsNum($name,"L4_NextHour02_PvMeanPower", ""); + my $pv03 = ReadingsNum($name,"L4_NextHour03_PvMeanPower", ""); + my $pv04 = ReadingsNum($name,"L4_NextHour04_PvMeanPower", ""); + my $pv05 = ReadingsNum($name,"L4_NextHour05_PvMeanPower", ""); + my $pv06 = ReadingsNum($name,"L4_NextHour06_PvMeanPower", ""); + my $pv07 = ReadingsNum($name,"L4_NextHour07_PvMeanPower", ""); + my $pv08 = ReadingsNum($name,"L4_NextHour08_PvMeanPower", ""); + my $pv09 = ReadingsNum($name,"L4_NextHour09_PvMeanPower", ""); + my $pv10 = ReadingsNum($name,"L4_NextHour10_PvMeanPower", ""); + my $pv11 = ReadingsNum($name,"L4_NextHour11_PvMeanPower", ""); + my $pv12 = ReadingsNum($name,"L4_NextHour12_PvMeanPower", ""); + my $pv13 = ReadingsNum($name,"L4_NextHour13_PvMeanPower", ""); + my $pv14 = ReadingsNum($name,"L4_NextHour14_PvMeanPower", ""); + my $pv15 = ReadingsNum($name,"L4_NextHour15_PvMeanPower", ""); + my $pv16 = ReadingsNum($name,"L4_NextHour16_PvMeanPower", ""); + my $pv17 = ReadingsNum($name,"L4_NextHour17_PvMeanPower", ""); + my $pv18 = ReadingsNum($name,"L4_NextHour18_PvMeanPower", ""); + my $pv19 = ReadingsNum($name,"L4_NextHour19_PvMeanPower", ""); + my $pv20 = ReadingsNum($name,"L4_NextHour20_PvMeanPower", ""); + my $pv21 = ReadingsNum($name,"L4_NextHour21_PvMeanPower", ""); + my $pv22 = ReadingsNum($name,"L4_NextHour22_PvMeanPower", ""); + my $pv23 = ReadingsNum($name,"L4_NextHour23_PvMeanPower", ""); + + my $is00 = ReadingsVal($name,"L2_ThisHour_IsConsumptionRecommended", ""); + my $is01 = ReadingsVal($name,"L4_NextHour01_IsConsumptionRecommended", ""); + my $is02 = ReadingsVal($name,"L4_NextHour02_IsConsumptionRecommended", ""); + my $is03 = ReadingsVal($name,"L4_NextHour03_IsConsumptionRecommended", ""); + my $is04 = ReadingsVal($name,"L4_NextHour04_IsConsumptionRecommended", ""); + my $is05 = ReadingsVal($name,"L4_NextHour05_IsConsumptionRecommended", ""); + my $is06 = ReadingsVal($name,"L4_NextHour06_IsConsumptionRecommended", ""); + my $is07 = ReadingsVal($name,"L4_NextHour07_IsConsumptionRecommended", ""); + my $is08 = ReadingsVal($name,"L4_NextHour08_IsConsumptionRecommended", ""); + my $is09 = ReadingsVal($name,"L4_NextHour09_IsConsumptionRecommended", ""); + my $is10 = ReadingsVal($name,"L4_NextHour10_IsConsumptionRecommended", ""); + my $is11 = ReadingsVal($name,"L4_NextHour11_IsConsumptionRecommended", ""); + my $is12 = ReadingsVal($name,"L4_NextHour12_IsConsumptionRecommended", ""); + my $is13 = ReadingsVal($name,"L4_NextHour13_IsConsumptionRecommended", ""); + my $is14 = ReadingsVal($name,"L4_NextHour14_IsConsumptionRecommended", ""); + my $is15 = ReadingsVal($name,"L4_NextHour15_IsConsumptionRecommended", ""); + my $is16 = ReadingsVal($name,"L4_NextHour16_IsConsumptionRecommended", ""); + my $is17 = ReadingsVal($name,"L4_NextHour17_IsConsumptionRecommended", ""); + my $is18 = ReadingsVal($name,"L4_NextHour18_IsConsumptionRecommended", ""); + my $is19 = ReadingsVal($name,"L4_NextHour19_IsConsumptionRecommended", ""); + my $is20 = ReadingsVal($name,"L4_NextHour20_IsConsumptionRecommended", ""); + my $is21 = ReadingsVal($name,"L4_NextHour21_IsConsumptionRecommended", ""); + my $is22 = ReadingsVal($name,"L4_NextHour22_IsConsumptionRecommended", ""); + my $is23 = ReadingsVal($name,"L4_NextHour23_IsConsumptionRecommended", ""); + + 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)); + + # 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"; + + #### Tabelle + my $ret = ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $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 .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= "
".$time06."
".$is06."
".$pv06."
"; + + $ret .= "
"; + + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= "
".$time07."
".$is07."
".$pv07."
"; + + $ret .= "
"; + + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= "
".$time08."
".$is08."
".$pv08."
"; + + $ret .= "
"; + + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= "
".$time09."
".$is09."
".$pv09."
"; + + $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 .= "
".$time11."
".$is11."
".$pv11."
"; + + $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 .= "
".$time13."
".$is13."
".$pv13."
"; + + $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 .= "
".$time15."
".$is15."
".$pv15."
"; + + $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 .= "
".$time17."
".$is17."
".$pv17."
"; + + $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 .= "
".$time19."
".$is19."
".$pv19."
"; + + $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 .= "
".$time21."
".$is21."
".$pv21."
"; + + $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 .= "
".$time23."
".$is23."
".$pv23."
"; + + $ret .= "
"; + +return($ret); +} + 1; =pod @@ -1321,8 +1791,10 @@ return($txt);
@@ -1380,6 +1852,13 @@ return($txt);
  • set <name> credentials <username> <password>
  • Setzt Username / Passwort für den Zugriff zum SMA-Portal. +

    + +