Sunny Portal Livedaten auslesen

Begonnen von Waldmensch, 26 Juni 2014, 07:19:30

Vorheriges Thema - Nächstes Thema

tpn59

Hi Kenneth,
versuchs mal mit ./supoxy-init.sh start (aufrufen in dem Verzeichnus, in dem supoxy-init.sh gespeichert ist).
Gruss
    Thomas

Kenneth

Hi,

genau das war mein Fehler.. Danke.

Leider kommt nun gleich der Nächste. Direkt nach dem "start" kommen folgende Meldungen...:

Aufruf: grep [OPTION]... MUSTER [DATEI]...
,,grep --help" liefert weitere Informationen.
Rogue pidfile found!
Aufruf: grep [OPTION]... MUSTER [DATEI]...
,,grep --help" liefert weitere Informationen.
Aufruf: grep [OPTION]... MUSTER [DATEI]...
,,grep --help" liefert weitere Informationen.
Aufruf: grep [OPTION]... MUSTER [DATEI]...


Vll hast du eine Idee was er mir damit sagen möchte.. Die Hilfe dazu bringt mich nicht wirklich weiter..

Grüße

Kenneth

Problem gelöst..

java installiert und schon:

SuPoxy.jar is running.


Grüße

Kenneth

Täglich grüßt das Murmeltier ..

Leider startet sich nun FHEM immer wieder neu. Hab mal alles rausgenommen außer Supoxy und die SMA config


der letzte Logeintrag ist immer:
2014.09.08 20:23:54 4: HTTPMOD: GetUpdate called, hash = HASH(0x271ff78), name = Sunny

das komplette Log:
2014.09.08 20:23:52 1: Including ./FHEM/SMA_SunnyPortal.cfg
2014.09.08 20:23:52 5: Cmd: >define Sunny HTTPMOD http://192.168.120.68:8000/actual 10<
2014.09.08 20:23:52 5: Loading ./FHEM/98_HTTPMOD.pm
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName1 PV<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName2 FI<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName3 GC<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName4 DC<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName5 SC<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName6 SS<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName7 TC<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName8 DCQ<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName9 SCQ<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName10 AC<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName11 BI<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName12 BO<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName13 BCS<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName14 BSH<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsName15 ERROR<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex1 PV:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex2 FI:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex3 GC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex4 DC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex5 SC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex6 SS:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex7 TC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex8 DCQ:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex9 SCQ:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex10 AC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex11 BI:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex12 GC:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex13 BCS:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex14 BSH:([\d\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny readingsRegex15 ERROR:([\w\.]+)<
2014.09.08 20:23:52 5: Cmd: >attr Sunny verbose 5<
2014.09.08 20:23:52 5: Interface "interface": readings "", getters "", setters ""
2014.09.08 20:23:52 5: Interface "switch": readings "onoff", getters "onoff", setters ""
2014.09.08 20:23:52 5: Interface "switch_active": readings "onoff", getters "onoff", setters ""
2014.09.08 20:23:52 5: Interface "switch_passive": readings "onoff", getters "onoff", setters "on:off"
2014.09.08 20:23:52 5: Interface "dimmer": readings "onoff:level", getters "onoff:level", setters "on:off:dimto:dimup:dimdown"
2014.09.08 20:23:52 5: Interface "temperature": readings "temperature", getters "temperature", setters ""
2014.09.08 20:23:52 5: Interface "humidity": readings "humidity", getters "humidity", setters ""
2014.09.08 20:23:52 5: Interface "wind": readings "wind", getters "wind", setters ""
2014.09.08 20:23:52 5: Interface "power": readings "power:maxPower:energy", getters "power:maxPower:energy", setters ""
2014.09.08 20:23:52 5: Triggering global (1 changes)
2014.09.08 20:23:52 5: Notify loop for global INITIALIZED
2014.09.08 20:23:52 4: eventTypes: Global global INITIALIZED -> INITIALIZED
2014.09.08 20:23:52 5: Triggering initialUsbCheck
2014.09.08 20:23:52 5: Cmd: >usb create<
2014.09.08 20:23:52 1: usb create starting
2014.09.08 20:23:52 1: usb create end
2014.09.08 20:23:52 0: Server started with 12 defined entities (version $Id: fhem.pl 3872 2013-09-07 11:58:33Z rudolfkoenig $, os linux, user fhem, pid 13513)
2014.09.08 20:23:52 5: HMLAN_Parse: HMLAN1 V:03C4 sNo:XXXXXXXXX d:26E928 O:26E928 t:07421DBF IDcnt:000A
2014.09.08 20:23:54 4: HTTPMOD: GetUpdate called, hash = HASH(0x271ff78), name = Sunny

Kenneth

Ich hab es nun mal endlich zum laufen bekommen.

Woran es lag kann ich leider nicht genau sagen, ich habe supoxy nochmal neu geladen, die config
angepasst und dann lief es.
Mit DBlog und dem Frontend klappt das super...

Greetz





Brun

Hallo,

ich habe die Idee mal aufgegriffen und habe ein Modul gebaut.
http://forum.fhem.de/index.php/topic,27667.0.html


Gruß Brun

Waldmensch

Ich kann das Modul von Brun wärmstens empfehlen. Es nutzt das selbe Abfrageprinzip, nur das es ohne supoxy auskommt. Damit kann man sich das ganze Java Geraffels schenken und FHEM macht die Abfrage selbst. Der Supoxy funktioniert trotzdem - vielleicht kann man ihn für irgendwas Anderes außerhalb FHEM verwenden.

THX @ Brun

Waldmensch

Ich habe den Supoxy auf https umgebaut und im Git committed. Die Abfrage über http scheint am Sunny Portal nicht mehr möglich.

hahu01

Kann man das auch auf der Fritzbox zum laufen bekommen, oder ist dort der Speicher zu klein. Wie legt man dort einen Proxyserver an, und wie startet man den?

Bekomme immer folgende Meldung - Sunny: read callback: request type was Update, no headers, buffer empty,
Error localhost: Connection refused




Waldmensch

Warum nimmst Du nicht das FHEM Modul? Seit es das gibt, ist es nicht mehr nötig den Supoxy separat laufen zu haben. Ich weiß nicht ob auf der Fritz Java läuft, dass braucht der Supoxy.

rbothe

Hallo, auch ich nutze das SHM Modul, sehe aber keine Daten fuer Gesamtverbrauch, Gesamterzeugung, ...
Ich habe einen Sunny Island 6.0 und Sunny Homamanager, zusaetzlich Fronius-Wechselrichter fuer die Batterieeinspeisung.

www.sunnyportal/homemanager sagt:
{"__type":"LiveDataUI","Timestamp":{"__type":"DateTime","DateTime":"2015-12-22T08:51:11","Kind":"Unspecified"},"PV":null,"FeedIn":0,"GridConsumption":7039,"DirectConsumption":null,"SelfConsumption":null,"SelfSupply":0,"TotalConsumption":7039,"DirectConsumptionQuote":null,"SelfConsumptionQuote":null,"AutarkyQuote":0,"BatteryIn":0,"BatteryOut":0,"BatteryChargeStatus":27,"OperationHealth":null,"BatteryStateOfHealth":null,"InfoMessages":[],"WarningMessages":[],"ErrorMessages":[],"Info":{}}
Und was da als Gridconsumption rauskommt, spiegelt in keiner Weise den Gesamtverbrauch wieder.

Im normalen Sunnyportal werden alle Werte ordentlich angezeigt bis auf "Analyse" und "Report".
Da steht im Infofeld: "Berechnung des Kanals Gesamtertrag geht nicht, da "zur Berechnung des Kanals Energy keine Kanaele zugeordnet wurden". Laut SMA ist dies nicht implementiert.
Habe ich keine Chance die Gesamtwerte auszulesen?
FHEM 5.6 auf 2 Linux-Servern als Highavailability Heartbeat- Cluster
1xCUNO
2x HMLAN via 1x VCCU redundant angebunden
Ansonst: wie erstelle ich eine Signatur? Gibt es eine Inventory Funktion im FHEM?

Lefdi

Hi zusammen,

ich bin gerade verzweifelt am Versuch supoxy auf meiner Beere zum laufen zu bringen. Bin nach der Anleitung aus GitHub vorgegangen.
Aber schon bei Punkt 4 von Install klappt bei mir der Befehl supoxy-init.sh nicht....da kommt immer "Kommando nicht gefunden".

Testing Punkt 2 ging mit dem Ergebnis, dass ich jetzt in den Logfiles ständig diese Meldung bekomme:
2016.01.17 14:52:06 3: Sunny: Read callback: request type was Update, no headers, buffer empty,
Error connect to to http://192.168.2.124:8000 timed out


Die sunny.conf hab ich mit den Zugangsdaten fürs Portal angepasst....was muss man denn in der supoxy_init_config anpassen?

Interessant ist auch, dass im Ordner fhem/www/gplot die Datei SVG_sunnylog_1.plot vorhanden ist. Wenn ich aber in FHEM auf "Edit Files" gehe, dann erscheint die Datei dort nicht.....alles seltsam.....

Kann mir da eventuell bei der Installation mal jemand ein wenig unter die Arme greifen...??

Merci

Lefdi

saschab

#57
Hallo Zusammen,
anbei meinen Lösungsansatz:

Grundlage ist folgende Modul: https://forum.fhem.de/index.php/topic,99859.msg932446.html#msg932446


# SMAPortal

define SMAPortal SMAPortal
attr SMAPortal DbLogExclude .*
attr SMAPortal cookieLocation ./log/cookies.txt
attr SMAPortal cookielifetime 3000
attr SMAPortal detailLevel 4
attr SMAPortal disable 0
attr SMAPortal event-on-update-reading state,L1_FeedIn,L1_PV,L1_SelfSupply,L1_SelfConsumption,L1_SelfConsumptionQuote,L1_TotalConsumption,L1_GridConsumption,L1_AutarkyQuote
attr SMAPortal group Sunny Home Manager
attr SMAPortal interval 900
attr SMAPortal room A.1_PV-Anlage
attr SMAPortal stateFormat {# Daten vom Device\
my $pv4h = ReadingsVal("$name","L2_Next04Hours-PV", "")."";;\
my $pvRe = ReadingsVal("$name","L3_RestOfDay-PV", "")."";; \
my $pvTo = ReadingsVal("$name","L3_Tomorrow-PV", "")."";;\
my $pv00 = ReadingsVal("$name","L2_ThisHour_PvMeanPower", "")."";;\
my $pv01 = ReadingsVal("$name","L4_NextHour01_PvMeanPower", "")."";;\
my $pv02 = ReadingsVal("$name","L4_NextHour02_PvMeanPower", "")."";;\
my $pv03 = ReadingsVal("$name","L4_NextHour03_PvMeanPower", "")."";;\
my $pv04 = ReadingsVal("$name","L4_NextHour04_PvMeanPower", "")."";;\
my $pv05 = ReadingsVal("$name","L4_NextHour05_PvMeanPower", "")."";;\
my $pv06 = ReadingsVal("$name","L4_NextHour06_PvMeanPower", "")."";;\
my $pv07 = ReadingsVal("$name","L4_NextHour07_PvMeanPower", "")."";;\
my $pv08 = ReadingsVal("$name","L4_NextHour08_PvMeanPower", "")."";;\
my $pv09 = ReadingsVal("$name","L4_NextHour09_PvMeanPower", "")."";;\
my $pv10 = ReadingsVal("$name","L4_NextHour10_PvMeanPower", "")."";;\
my $pv11 = ReadingsVal("$name","L4_NextHour11_PvMeanPower", "")."";;\
my $pv12 = ReadingsVal("$name","L4_NextHour12_PvMeanPower", "")."";;\
my $pv13 = ReadingsVal("$name","L4_NextHour13_PvMeanPower", "")."";;\
my $pv14 = ReadingsVal("$name","L4_NextHour14_PvMeanPower", "")."";;\
my $pv15 = ReadingsVal("$name","L4_NextHour15_PvMeanPower", "")."";;\
my $pv16 = ReadingsVal("$name","L4_NextHour16_PvMeanPower", "")."";;\
my $pv17 = ReadingsVal("$name","L4_NextHour17_PvMeanPower", "")."";;\
my $pv18 = ReadingsVal("$name","L4_NextHour18_PvMeanPower", "")."";;\
my $pv19 = ReadingsVal("$name","L4_NextHour19_PvMeanPower", "")."";;\
my $pv20 = ReadingsVal("$name","L4_NextHour20_PvMeanPower", "")."";;\
my $pv21 = ReadingsVal("$name","L4_NextHour21_PvMeanPower", "")."";;\
my $pv22 = ReadingsVal("$name","L4_NextHour22_PvMeanPower", "")."";;\
my $pv23 = ReadingsVal("$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 = POSIX::strftime("%H",localtime);;\
my $time01 = POSIX::strftime("%H",localtime(time+1*60*60));;\
my $time02 = POSIX::strftime("%H",localtime(time+2*60*60));;\
my $time03 = POSIX::strftime("%H",localtime(time+3*60*60));; \
my $time04 = POSIX::strftime("%H",localtime(time+4*60*60));; \
my $time05 = POSIX::strftime("%H",localtime(time+5*60*60));; \
my $time06 = POSIX::strftime("%H",localtime(time+6*60*60));;\
my $time07 = POSIX::strftime("%H",localtime(time+7*60*60));;\
my $time08 = POSIX::strftime("%H",localtime(time+8*60*60));;\
my $time09 = POSIX::strftime("%H",localtime(time+9*60*60));;\
my $time10 = POSIX::strftime("%H",localtime(time+10*60*60));;\
my $time11 = POSIX::strftime("%H",localtime(time+11*60*60));;\
my $time12 = POSIX::strftime("%H",localtime(time+12*60*60));;\
my $time13 = POSIX::strftime("%H",localtime(time+13*60*60));;\
my $time14 = POSIX::strftime("%H",localtime(time+14*60*60));;\
my $time15 = POSIX::strftime("%H",localtime(time+15*60*60));;\
my $time16 = POSIX::strftime("%H",localtime(time+16*60*60));;\
my $time17 = POSIX::strftime("%H",localtime(time+17*60*60));;\
my $time18 = POSIX::strftime("%H",localtime(time+18*60*60));;\
my $time19 = POSIX::strftime("%H",localtime(time+19*60*60));;\
my $time20 = POSIX::strftime("%H",localtime(time+20*60*60));;\
my $time21 = POSIX::strftime("%H",localtime(time+21*60*60));;\
my $time22 = POSIX::strftime("%H",localtime(time+22*60*60));;\
my $time23 = POSIX::strftime("%H",localtime(time+23*60*60));;\
# Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 8020)\
my $maxValue = 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\
"<html><table border=2 bordercolor='darkgreen' cellspacing=1><tr>\
<td colspan=24 style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>Prognose der nächsten 4 h: ".($pv4h)." Wh / Rest des Tages: ".($pvRe)." Wh / Morgen: ".($pvTo)." Wh</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time00."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is00."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv00)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv00."</td></tr>\
<tr style='height:".($pv00/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time01."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is01."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv01)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv01."</td></tr>\
<tr style='height:".($pv01/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time02."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is02."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv02)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv02."</td></tr>\
<tr style='height:".($pv02/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time03."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is03."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv03)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv03."</td></tr>\
<tr style='height:".($pv03/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time04."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is04."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv04)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv04."</td></tr>\
<tr style='height:".($pv04/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time05."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is05."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv05)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv05."</td></tr>\
<tr style='height:".($pv05/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time06."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is06."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv06)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv06."</td></tr>\
<tr style='height:".($pv06/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time07."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is07."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv07)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv07."</td></tr>\
<tr style='height:".($pv07/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time08."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is08."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv08)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv08."</td></tr>\
<tr style='height:".($pv08/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time09."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is09."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv09)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv09."</td></tr>\
<tr style='height:".($pv09/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time10."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is10."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv10)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv10."</td></tr>\
<tr style='height:".($pv10/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time11."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is11."</td>\
</tr>\
<tr align=center style='height:".(($maxValue-$pv11)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv11."</td></tr>\
<tr style='height:".($pv11/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time12."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is12."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv12)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv12."</td></tr>\
<tr style='height:".($pv12/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time13."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is13."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv13)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv13."</td></tr>\
<tr style='height:".($pv13/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time14."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is14."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv14)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv14."</td></tr>\
<tr style='height:".($pv14/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time15."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is15."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv15)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv15."</td></tr>\
<tr style='height:".($pv15/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time16."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is16."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv16)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv16."</td></tr>\
<tr style='height:".($pv16/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time17."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is17."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv17)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv17."</td></tr>\
<tr style='height:".($pv17/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time18."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is18."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv18)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv18."</td></tr>\
<tr style='height:".($pv18/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time19."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is19."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv19)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv19."</td></tr>\
<tr style='height:".($pv19/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time20."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is20."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv20)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv20."</td></tr>\
<tr style='height:".($pv20/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time21."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is21."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv21)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv21."</td></tr>\
<tr style='height:".($pv21/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time22."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is22."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv22)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv22."</td></tr>\
<tr style='height:".($pv22/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;width:".($width)."px'>\
<table border=0 bordercolor='darkgreen' cellspacing=1>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$time23."</td>\
</tr>\
<tr>\
<td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$is23."</td>\
</tr>\
<tr style='height:".(($maxValue-$pv23)/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color1."'>".$pv23."</td></tr>\
<tr style='height:".($pv23/$maxValue*$height)."px'><td style='padding-right:".($space)."px;;padding-left:".($space)."px;;background-color:".$color2."'></td></tr>\
</table>\
</td>\
</tr></table></html>"\
}
attr SMAPortal timeout 200
attr SMAPortal verbose 3


Gruß Sascha
FHEM und Homebridge im Dockercontainer auf einem RPi4!!!
(für: Wärmepumpe, Heizungsreglung, PV-Anlage, Wallbox, Kontrollierte Wohnraumlüftung, Beleuchtung, Energiekosten Monitoring, Wetterstation, Feinstraubsensor)

DS_Starter

Hallo Sascha,

deine grafische Anzeigelösung hat mir sehr gut gefallen und hat mich inspiriert dies in das Modul zu übernehmen.
Ich habe die Funktion so abgeändert, dass man mit einem set Kommando ein separates weblink-Device erstellen kann, welches man z.B. auch auf einem Dashboard platzieren kann.

* 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.

Der Download des Moduls aus meinem contrib und danach restart:
https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter  (Downloadbutton benutzen)

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter