FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: Waldmensch am 26 Juni 2014, 07:19:30

Titel: Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 26 Juni 2014, 07:19:30
Hallo,

Ich weiß nicht wo ich es hinposten soll. Mir ist es gestern gelungen, die Livedaten des Homemanagers meiner Solaranlage aus dem Sunny Portal auszulesen. Ich benutze dazu eine Java Lösung und greife das JSON Format ab, mit dem die Webseite normal versorgt wird.
Das Format was geliefert wird, sieht so aus:
{
    "Timestamp": "/Date(1403729740909)/",
    "PV": 57,
    "FeedIn": 0,
    "GridConsumption": 996,
    "DirectConsumption": null,
    "SelfConsumption": 57,
    "SelfSupply": 57,
    "TotalConsumption": 1053,
    "DirectConsumptionQuote": null,
    "SelfConsumptionQuote": 100,
    "AutarkyQuote": 5,
    "BatteryIn": null,
    "BatteryOut": null,
    "BatteryChargeStatus": null,
    "OperationHealth": null,
    "BatteryStateOfHealth": null,
    "InfoMessages": [],
    "WarningMessages": [],
    "ErrorMessages": [],
    "Info": {}
}


Ich habe daraus mal einen 3 Sekunden Intervall gemacht, und schreibe ein solches TAB separiertes Log (kann in jeglicher Form verändert werden)

Login
06/26/2014 06:49:12 PV:1125 SC:1125 GC:82 TC:1207 SS:1125
06/26/2014 06:49:15 PV:1129 SC:1108 GC:0 TC:1108 SS:1108
06/26/2014 06:49:19 PV:1127 SC:1106 GC:0 TC:1106 SS:1106
06/26/2014 06:49:22 PV:1120 SC:1120 GC:0 TC:1120 SS:1120
06/26/2014 06:49:25 PV:1130 SC:1130 GC:0 TC:1130 SS:1130
06/26/2014 06:49:28 PV:1121 SC:1116 GC:0 TC:1116 SS:1116
06/26/2014 06:49:31 PV:1134 SC:1088 GC:0 TC:1088 SS:1088
06/26/2014 06:49:34 PV:1127 SC:1127 GC:69 TC:1196 SS:1127
06/26/2014 06:49:37 PV:1138 SC:1138 GC:85 TC:1223 SS:1138
06/26/2014 06:49:40 PV:1139 SC:1139 GC:89 TC:1228 SS:1139
06/26/2014 06:49:43 PV:1141 SC:1141 GC:89 TC:1230 SS:1141
06/26/2014 06:49:46 PV:1143 SC:1143 GC:96 TC:1239 SS:1143
06/26/2014 06:49:49 PV:1144 SC:1144 GC:67 TC:1211 SS:1144
06/26/2014 06:49:52 PV:1137 SC:1137 GC:67 TC:1204 SS:1137
06/26/2014 06:49:56 PV:1144 SC:1114 GC:0 TC:1114 SS:1114
06/26/2014 06:49:59 PV:1140 SC:1110 GC:0 TC:1110 SS:1110
06/26/2014 06:50:02 PV:1150 SC:1132 GC:0 TC:1132 SS:1132
06/26/2014 06:50:05 PV:1144 SC:1126 GC:0 TC:1126 SS:1126
06/26/2014 06:50:08 PV:1154 SC:1112 GC:0 TC:1112 SS:1112
06/26/2014 06:50:11 PV:1158 SC:1158 GC:42 TC:1200 SS:1158
06/26/2014 06:50:14 PV:1158 SC:1158 GC:42 TC:1200 SS:1158
06/26/2014 06:50:17 PV:1149 SC:1149 GC:62 TC:1211 SS:1149
06/26/2014 06:50:20 PV:1152 SC:1152 GC:77 TC:1229 SS:1152
06/26/2014 06:50:23 PV:1153 SC:1153 GC:77 TC:1230 SS:1153
06/26/2014 06:50:26 PV:1165 SC:1165 GC:63 TC:1228 SS:1165
06/26/2014 06:50:29 PV:1156 SC:1156 GC:63 TC:1219 SS:1156
06/26/2014 06:50:33 PV:1166 SC:1166 GC:38 TC:1204 SS:1166
06/26/2014 06:50:36 PV:1170 SC:1108 GC:0 TC:1108 SS:1108
06/26/2014 06:50:39 PV:1171 SC:1109 GC:0 TC:1109 SS:1109
06/26/2014 06:50:42 PV:1174 SC:1136 GC:0 TC:1136 SS:1136
06/26/2014 06:50:45 PV:1170 SC:1115 GC:0 TC:1115 SS:1115
06/26/2014 06:50:48 PV:1179 SC:1124 GC:0 TC:1124 SS:1124
06/26/2014 06:50:51 PV:1176 SC:1176 GC:21 TC:1197 SS:1176
06/26/2014 06:50:54 PV:1181 SC:1181 GC:22 TC:1203 SS:1181
06/26/2014 06:50:57 PV:1187 SC:1187 GC:26 TC:1213 SS:1187
06/26/2014 06:51:00 PV:1192 SC:1192 GC:50 TC:1242 SS:1192
06/26/2014 06:51:03 PV:1194 SC:1194 GC:50 TC:1244 SS:1194
06/26/2014 06:51:06 PV:1196 SC:1196 GC:48 TC:1244 SS:1196
06/26/2014 06:51:09 PV:1197 SC:1197 GC:19 TC:1216 SS:1197
06/26/2014 06:51:13 PV:1190 SC:1085 GC:0 TC:1085 SS:1085
06/26/2014 06:51:16 PV:1194 SC:1111 GC:0 TC:1111 SS:1111
06/26/2014 06:51:19 PV:1193 SC:1110 GC:0 TC:1110 SS:1110
06/26/2014 06:51:22 PV:1210 SC:1107 GC:0 TC:1107 SS:1107
06/26/2014 06:51:25 PV:1202 SC:1202 GC:18 TC:1220 SS:1202
06/26/2014 06:51:28 PV:1212 SC:1212 GC:18 TC:1230 SS:1212
06/26/2014 06:51:31 PV:1213 SC:1208 GC:0 TC:1208 SS:1208
06/26/2014 06:51:34 PV:1214 SC:1214 GC:9 TC:1223 SS:1214
06/26/2014 06:51:37 PV:1214 SC:1214 GC:8 TC:1222 SS:1214
06/26/2014 06:51:40 PV:1208 SC:1208 GC:34 TC:1242 SS:1208
06/26/2014 06:51:43 PV:1218 SC:1218 GC:34 TC:1252 SS:1218
06/26/2014 06:51:46 PV:1209 SC:1115 GC:0 TC:1115 SS:1115
06/26/2014 06:51:49 PV:1218 SC:1117 GC:0 TC:1117 SS:1117
06/26/2014 06:51:52 PV:1220 SC:1119 GC:0 TC:1119 SS:1119
06/26/2014 06:51:56 PV:1222 SC:1098 GC:0 TC:1098 SS:1098
06/26/2014 06:51:59 PV:1222 SC:1098 GC:0 TC:1098 SS:1098
06/26/2014 06:52:02 PV:1221 SC:1143 GC:0 TC:1143 SS:1143
06/26/2014 06:52:05 PV:1223 SC:1223 GC:9 TC:1232 SS:1223
06/26/2014 06:52:08 PV:1223 SC:1223 GC:9 TC:1232 SS:1223
06/26/2014 06:52:11 PV:1218 SC:1204 GC:0 TC:1204 SS:1204
06/26/2014 06:52:14 PV:1227 SC:1213 GC:0 TC:1213 SS:1213
06/26/2014 06:52:17 PV:1226 SC:1194 GC:0 TC:1194 SS:1194
06/26/2014 06:52:20 PV:1229 SC:1229 GC:10 TC:1239 SS:1229
06/26/2014 06:52:23 PV:1230 SC:1105 GC:0 TC:1105 SS:1105
06/26/2014 06:52:26 PV:1231 SC:1104 GC:0 TC:1104 SS:1104
06/26/2014 06:52:29 PV:1232 SC:1105 GC:0 TC:1105 SS:1105
06/26/2014 06:52:32 PV:1232 SC:1094 GC:0 TC:1094 SS:1094
06/26/2014 06:52:36 PV:1233 SC:1085 GC:0 TC:1085 SS:1085
06/26/2014 06:52:39 PV:1236 SC:1088 GC:0 TC:1088 SS:1088
06/26/2014 06:52:42 PV:1235 SC:1203 GC:0 TC:1203 SS:1203
06/26/2014 06:52:45 PV:1243 SC:1229 GC:0 TC:1229 SS:1229
06/26/2014 06:52:48 PV:1244 SC:1238 GC:0 TC:1238 SS:1238
06/26/2014 06:52:51 PV:1247 SC:1230 GC:0 TC:1230 SS:1230
06/26/2014 06:52:54 PV:1246 SC:1186 GC:0 TC:1186 SS:1186
06/26/2014 06:52:57 PV:1249 SC:1090 GC:0 TC:1090 SS:1090
06/26/2014 06:53:00 PV:1253 SC:1127 GC:0 TC:1127 SS:1127
06/26/2014 06:53:03 PV:1255 SC:1129 GC:0 TC:1129 SS:1129
06/26/2014 06:53:06 PV:1255 SC:1116 GC:0 TC:1116 SS:1116
06/26/2014 06:53:09 PV:1261 SC:1146 GC:0 TC:1146 SS:1146
06/26/2014 06:53:12 PV:1262 SC:1100 GC:0 TC:1100 SS:1100
06/26/2014 06:53:16 PV:1267 SC:1201 GC:0 TC:1201 SS:1201
06/26/2014 06:53:19 PV:1268 SC:1202 GC:0 TC:1202 SS:1202
06/26/2014 06:53:22 PV:1267 SC:1228 GC:0 TC:1228 SS:1228
06/26/2014 06:53:25 PV:1267 SC:1228 GC:0 TC:1228 SS:1228
06/26/2014 06:53:28 PV:1268 SC:1241 GC:0 TC:1241 SS:1241
06/26/2014 06:53:31 PV:1265 SC:1207 GC:0 TC:1207 SS:1207
06/26/2014 06:53:34 PV:1270 SC:1103 GC:0 TC:1103 SS:1103
06/26/2014 06:53:37 PV:1260 SC:1087 GC:0 TC:1087 SS:1087
06/26/2014 06:53:40 PV:1275 SC:1128 GC:0 TC:1128 SS:1128
06/26/2014 06:53:43 PV:1270 SC:1123 GC:0 TC:1123 SS:1123
06/26/2014 06:53:46 PV:1279 SC:1125 GC:0 TC:1125 SS:1125
06/26/2014 06:53:49 PV:1271 SC:1117 GC:0 TC:1117 SS:1117
06/26/2014 06:53:53 PV:1282 SC:1228 GC:0 TC:1228 SS:1228
06/26/2014 06:53:56 PV:1282 SC:1201 GC:0 TC:1201 SS:1201
06/26/2014 06:53:59 PV:1285 SC:1204 GC:0 TC:1204 SS:1204
06/26/2014 06:54:02 PV:1275 SC:1208 GC:0 TC:1208 SS:1208
06/26/2014 06:54:05 PV:1289 SC:1234 GC:0 TC:1234 SS:1234
06/26/2014 06:54:08 PV:1284 SC:1229 GC:0 TC:1229 SS:1229
06/26/2014 06:54:11 PV:1290 SC:1096 GC:0 TC:1096 SS:1096
06/26/2014 06:54:14 PV:1279 SC:1085 GC:0 TC:1085 SS:1085
06/26/2014 06:54:17 PV:1292 SC:1093 GC:0 TC:1093 SS:1093


Können wir damit etwas anfangen? Ich habe im Internet viele Anfragen zu Schaltvorgängen, abhängig von der (über)Kapazität einer PV Anlage gelesen. FHEM wäre ja genau richtig, wenn die Livedaten zur Verfügung stünden. Diese Lösung funktioniert allerdings nur für SMA Anlagen, die über das SMA Portal Livedaten anzeigen.

Das Eclipse Projekt (1,72 MB) stelle ich gerne zur Verfügung. Ich kann es nur hier nicht anhängen.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 26 Juni 2014, 15:22:19
Ich habe mir überlegt, dort einen kleinen HTTP Server reinzucoden, der auf Zuruf die letzten Daten liefert und auf einen anderen Zuruf die letzten 100 (oder mehr). Ich weiß nur nicht welches Ausgabeformat für ein evtl. zu bauendes FHEM Modul am leichtesten zu parsen ist.

Das ganze würde dann wie ein abgekoppelter Proxy funktionieren. Das Portal wird alle n Sekunden abgefragt, ein gewisser Datenbestand wird vorgehalten (letzte 2h oder so) und kann auf http://localhost:8000/actual oder /historical abgerufen werden. Damit werden nicht immense Logs erzeugt und man kann mit FHEM entscheiden wie oft man Daten abholt.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: SpenZerX am 26 Juni 2014, 21:18:29
Wozu soll das gut sein?  Kann man doch vom Wechselrichter viel einfacher holen.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 26 Juni 2014, 21:44:38
Vom Wechselrichter bekommst du aber nur die Erzeugungswerte, die Verbrauchswerte muss man schon am Verbrauchs- b.z.w. Einspeisezähler abgreifen. Meine Befürchtung ist eher, was passiert, wenn SMA wieder am Portal rumschraubt.


Gesendet von meinem iPad mit Tapatalk
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 26 Juni 2014, 22:43:34
Genau, der Wechselrichter hat nur seine Daten und weiß nicht was das Haus gerade verbraucht. Beim SMA  Homemanager treffen sich die WR Daten über Bluetooth mit den Daten des D0 Zählers. Beides wird ans Sunny Portal übermittelt. Es gibt keine zentrale Möglichkeit wieder an seine Daten ranzukommen, außer das man sich die Webseite anschauen kann. Will man die PV Daten für FHEM nutzen, müßte man den D0 Zähler selber anzapfen und den WR um die Differenz zu ermitteln. Dann funktioniert aber das Portal nicht mehr. Warum das so ist, ist auch logisch. SMA möchte seine Bluetooth Steckdosen für knapp 100EUR verkaufen, die der Homemanager steuert. Keine Frage, dass System funktioniert. Nur leider reichen die Bluetooth Steckdosen nur 10m weit. Zwischen Poolpumpe (die ich gern mit Überschuss Energie betreiben würde) und Homemanager liegen gute 150m. Zudem habe ich mehr Verbraucher die ich gern PV abhängig schalten würde als ich mir BT Steckdosen leisten kann.

Klaus, berechtigte Frage! Aber was hält schon ewig? Vielleicht stellt ja SMA irgendwann die Daten mal über eine API oder Webservice selber zur Verfügung.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 27 Juni 2014, 07:53:03
Hallo Waldmensch,

Zitat von: Waldmensch am 26 Juni 2014, 22:43:34
Es gibt keine zentrale Möglichkeit wieder an seine Daten ranzukommen, außer das man sich die Webseite anschauen kann. Will man die PV Daten für FHEM nutzen, müßte man den D0 Zähler selber anzapfen und den WR um die Differenz zu ermitteln. Dann funktioniert aber das Portal nicht mehr.

diese Aussage ist so nicht ganz richtig, ich habe das Thema bei mir wie folgt gelöst:

Erzeugungsdaten hole ich mir via Ethernet (BT geht natürlich auch) und SMAUtils.pm (mit SMAspot) vom Wechselrichter.
Die Verbrauchs/Einspeisewerte werden über ein SMA Energy Meter gemessen und mittels Smart Charging Controller SW (http://www.eb-systeme.de/?tag=smart-charging-controller (http://www.eb-systeme.de/?tag=smart-charging-controller)) via XML und einenm kleinen Stück Code in der 99_myUtils.pm ausgelesen und in FHEM als Readings bereitgestellt. Diese werte ich dann aus und steuere damit über FS20 Steckdosen z. B. die Poolpumpe oder den Luftentfeuchter im Keller.
Künftig soll dann auch noch das Ladegerät für den E-Roller nur noch mit Solarstrom versorgt werden.

Sunny-Portal ist davon vollkommen unabhängig und funktioniert weiterhin.

Viele Grüße

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 27 Juni 2014, 07:53:58
So, HTTP ist implementiert

So sieht es aus, wenn eine Kaffeemaschine läuft.  ;)

Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 27 Juni 2014, 08:17:20
@Klaus: ich habe aber kein SMA Energymeter. Ich habe nur einen Zweirichtungszähler der Stadtwerke mit D0 Ausgang. Daran hängt der SMA Homemanager, der sich die WR Daten über Bluetooth holt und alles tutti completti an SMA übermittelt. Außer den WR per Bluetooth anzuzapfen, fällt mir da jetzt nichts ein, was ich mit vertretbarem (finanziellen) Aufwand dazwischen schalten könnte. Man könnte natürlich den Netzwerkverkehr zwischen Hommanager und SMA Portal als "man in the middle" mitsniffen - da ist ja alles drin. Das ist mir aber zu hoch.

Betr. "falls SMA was an der Webseite ändert" - deshalb parse ich nicht die Webseite ansich, sondern zapfe die API (Middleware) an, die die Daten für die Webseite bereitstellt. Über diese API bedient sich soweit ich weiß auch die Android App und die Mobilansicht der Webseite. Layout Änderungen an der Webseite sollten darauf keinen Einfluß haben. Die Daten stehen nach dem Einloggen ganz normal zur Verfügung. Man kann das testen, indem man, nachdem man sich auf dem Sunny Portal eingeloggt hat diese Seite aufruft: http://www.sunnyportal.com/homemanager Dort bekommt man das JSON

Edit:
Drauf gekommen bin ich übrigens, als ich mir in der Entwicklerkonsole von Chrome den Netzwerkverkehr angeschaut hab. Dort sieht man, wie periodisch alle 5 Sekunden das JSON mit den Rohdaten per AJAX Call abgeholt wird und welches Javascript dies tut.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 30 Juni 2014, 09:04:32
Also zusammen mit dem HTTPMOD funktioniert es schonmal einwandfrei. Interessante Werte sind

PV: aktuelle Anlagenleistung
FI: aktuelle Einspeisung
SC: Eigenverbrauch
TC: Gesamtverbrauch
SCQ: Eigenverbrauchsquote

Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 30 Juni 2014, 13:54:49
Hallo Waldmensch,

das sieht sehr interessant aus - ich würde das gerne auch probieren. Ich kämpfe gerade mit SMAspot aka SBFspot herum und wie du schon schreibst: das ist nur die halbe Wahrheit  :)

Würdest du mir bitte den Code zukommen lassen? Deiner Sig entnehme ich, dass du den FHEM auf dem Pi laufen hast - evtl könntest du mir für's erste auch gleich die fertige .jar zukommen lassen?

Grüße
Regengott
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 30 Juni 2014, 14:23:53
Also momentan habe ich den "Proxy" unter Windows (aus Eclipse heraus - Debug) laufen. Der FHEM läuft auf dem RasPi und connectet sich über das HTTPMod auf den Windowsrechner. Falls sich wer mit Java auskennt - ich bin über jeden Mitstreiter hoch erfreut. Ich wollte das Projekt auf Github hochladen, stehe aber mit Git absolut auf Kriegsfuß. Das Eclipse Projekt oder eine .Jar (die unter Windows läuft - Linux habe ich bisher nicht getestet) schicke ich dir gerne heute Abend von zuhause, wenn Du mir eine Mail Adresse gibst (PM)

Edit: Soweit ich weiß ist bei aktuellen RasPi images Java7 an bord. Ziel ist es natürlich den Proxy mit auf dem RasPi laufen zu haben und dann über localhost zu verbinden.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 30 Juni 2014, 19:59:28
Wie es scheint habe ich es mit Github hinbekommen. Hier ist das Projekt https://github.com/Tommy-LSA/supoxy

In die sunny.conf müssen die Anmeldedaten fürs Sunny Portal eingetragen werden

die FHEM config
define Sunny HTTPMOD http://192.168.2.124:8000/actual 10

attr Sunny readingsName1 PV
attr Sunny readingsName2 FI
attr Sunny readingsName3 GC
attr Sunny readingsName4 DC
attr Sunny readingsName5 SC
attr Sunny readingsName6 SS
attr Sunny readingsName7 TC
attr Sunny readingsName8 DCQ
attr Sunny readingsName9 SCQ
attr Sunny readingsName10 AC
attr Sunny readingsName11 BI
attr Sunny readingsName12 BO
attr Sunny readingsName13 BCS
attr Sunny readingsName14 BSH
attr Sunny readingsName15 ERROR

attr Sunny readingsRegex1 PV:([\d\.]+)
attr Sunny readingsRegex2 FI:([\d\.]+)
attr Sunny readingsRegex3 GC:([\d\.]+)
attr Sunny readingsRegex4 DC:([\d\.]+)
attr Sunny readingsRegex5 SC:([\d\.]+)
attr Sunny readingsRegex6 SS:([\d\.]+)
attr Sunny readingsRegex7 TC:([\d\.]+)
attr Sunny readingsRegex8 DCQ:([\d\.]+)
attr Sunny readingsRegex9 SCQ:([\d\.]+)
attr Sunny readingsRegex10 AC:([\d\.]+)
attr Sunny readingsRegex11 BI:([\d\.]+)
attr Sunny readingsRegex12 GC:([\d\.]+)
attr Sunny readingsRegex13 BCS:([\d\.]+)
attr Sunny readingsRegex14 BSH:([\d\.]+)
attr Sunny readingsRegex15 ERROR:([\w\.]+)
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 01 Juli 2014, 01:51:08
Ich habe grad mit eclipse mal ein "runnable jar" exportiert und auf den RasPi geschoben rennt!!!

root@raspberrypi:~/SuPoxy# java -Djava.library.path=/root/SuPoxy/SuPoxy_lib -jar /root/SuPoxy/SuPoxy.jar /root/SuPoxy/sunny.conf
SunnyProxy is running at  8000
Login

Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 03 Juli 2014, 13:46:53
Hi
die gute Nachricht: die .jar läuft auch bei mir und liefert die Werte - Eclipse hab ich aber nicht zum kompilieren bekommen :(
Grüße
Regengott
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 03 Juli 2014, 14:26:04
Mal eine Idee in den Raum geworden: es gibt bereits ein Modul JSONMETER, welches anscheinend JSON-Daten interpretieren kann. Könnte man dem den Output vom suproxy direkt vorwerfen und damit ins FHEM integrieren?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 03 Juli 2014, 23:04:29
Das json durchzusetzen sollte kein Problem sein. Ich versuche es mal einzubauen.

Edit: Ist drin und committed, auch als JAR. Der Aufruf .../raw  liefert den letzten Datensatz wie .../actual aber als JSON
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 04 Juli 2014, 13:37:49
So, kompilieren klappt jetzt auch  8)

Auch wenn ich wahrscheinlich Eulen nach Athen trage: Um die Daten grafisch anzeigen zu lassen habe ich folgendes erstellt:
fhem.cfg:

# Log
define sunnylog FileLog ./log/sunnylog-%Y-%m-%d.log Sunny


SVG_sunnylog_1.gplot

# Created by FHEM/98_SVG.pm, 2014-07-04 13:28:36
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics
set y2tics
set grid ytics y2tics
set ylabel "Power (W)"
set y2label "prov. Power"
set yrange [0:5000]
set y2range [0:5000]

#FileLog 4:Sunny.PV\x3a::
#FileLog 4:Sunny.SC\x3a::
#FileLog 4:Sunny.FI\x3a::

plot "<IN>" using 1:2 axes x1y1 title 'PV' ls l2fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'SelfConcumption' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'FeedIn' ls l3 lw 1 with lines


Mir gefällt nicht, dass das Logfile derartig groß wird - da gibt es bestimmt einen eleganteren Weg...
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 04 Juli 2014, 14:57:30
COOL! Ich wollte sowas auch schon bauen, hatte aber nicht die Zeit.

wg. Loggröße - eventuell könntest du den Abfrageintervall im HTTPMod auf 60 hochsetzen um blos alle Minute Daten zu bekommen. Dann hast Du zwar nicht jede Schäfchenwolke im Chart aber naja.  :D

Andrerseits sind mir historische Daten auch nicht sooo wichtig. Die kann man ja super aufbereitet aus dem Portal kriegen. Mir geht es primär um Echtzeit Daten um gezielt Verbraucher zu schalten. Eigenverbrauchsmaximierung ist die Devise. Momentan liege ich mit meiner 10kWp Anlage bei 21% (aktueller Monat) - da geht noch was  ;)

Am WE versuche ich mal eine Waschmaschinensteckdose. Wenn PV > 3000 && SCR < 20 dann on-for-timer 3h

Edit: Noch besser wäre es natürlich über FeedIn zu gehen. Wenn FI > 6000 .... Weil DANN zieht der Homemanager den Wechselrichter hoch auf 70% + Eigenverbrauch (70% Regelung)
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 04 Juli 2014, 15:03:26
Hab meine Anlage (4,3 kWp) erst ganz frisch und will mir einen Überblick schaffen - daher sind mir die historischen Daten recht wichtig. Ich will mir so eine Art "Kosten-Nutzen-Anzeige" bauen mit einem Vergleich Einspeiseentgeld vs Stromkosten.

Mir ist ein weiteres Feature von FHEM aufgefallen: DBlog - wir werden sehen, was damit geht :)

Nachdem das ja gut funktioniert werde ich es mal im Wiki als weitere Lösung neben dem Auslesen des WR promoten...
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 04 Juli 2014, 15:09:23
Wäre super. Worauf wir aber unbedigt bei Supoxy achten müssen sind die Ausgaben an der Konsole. Ich schleuse dort die Errors mit aus. Falls ein Error mit "Sitzung abgelaufen" o.ä. kommt, muß Thread kurz gestoppt werden und die login Funktion angesprungen werden. Sonst liefert das Portal statt dem JSON die Login Seite, was natürlich dann permanent intern Fehler reißt.

Wenn Du natürlich sowieso das Log wegschreibst kannst Du auch bitte mal dort die Augen offenhalten und den Wortlaut posten. Die Fehler müßten hinter ERROR: stehen
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 04 Juli 2014, 15:12:35
Wies der Teufel will habe ich seit ein paar Minuten folgenden Fehler im fhem.log

2014.07.04 14:57:50 3: HTTPMOD: Response didn't match Reading(s) ERROR
2014.07.04 14:58:00 3: HTTPMOD: Response didn't match Reading(s) ERROR
2014.07.04 14:58:10 3: HTTPMOD got error in callback: localhost: Connection refused
2014.07.04 14:58:20 3: HTTPMOD got error in callback: localhost: Connection refused
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 04 Juli 2014, 15:39:07
Die ersten 2 sind Regex Fehler in FHEM. Da stimmt das Pattern für das Feld ERROR: nicht. Ich hatte das auch und habe dieses Reading erstmal auskommentiert. Die anderen Beiden waren Verbindungsfehler zum Supoxy. Läuft beides auf dem RasPi? Kann das sein das der Kleine etwas überfordert ist?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 05 Juli 2014, 11:13:30
War keine Überlastung der Schwarzbeere, sondern ein geschlossener Terminal, in dem SuProxy lief  :o
Ich lass den jetzt mit nohup im Hintergrund laufen - oder kann man mit Java den Prozess direkt im Background forken?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 05 Juli 2014, 23:23:53
Na am einfachsten wie hier: http://stackoverflow.com/questions/12554526/running-a-java-application-in-the-background-of-a-linux-server
Das dev/null kannst du auch durch ein /var/log/supoxy.log ersetzen mit >> davor für append. Das ganze noch in die /etc/init.d/local packen, damit es beim raspi Start mitgestartet wird

Falls du irgendwann mal ein "cannot bind. ...." beim Start bekommst wurde supoxy nicht richtig beendet und der http Port ist noch belegt. In diesem Fall hilft ein "killall -9 java"
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 09 Juli 2014, 23:03:02
Ein aktueller Erfahrungsbericht von mir:


Mir scheint, es fehlt ein Reading vom Portal: "Purchased electricity", bzw auf Deutsch "Netzbezug" oder wird das aus den anderen Werten berechnet?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 09 Juli 2014, 23:13:50
Das sollte GC sein. Grid Consumption. Was du im JSON siehst ist alles was wir haben
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 11 Juli 2014, 10:56:24
Ich habe mal die Logausgaben mit Timestamps versehen. Aktuelle Version ist im github
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Regengott am 21 Juli 2014, 21:46:36
So, mit ein bisschen Inspiration vom Minecraft-Server meines Filius gibt es jetzt auf GITHUB (https://github.com/Tommy-LSA/supoxy) auch ein erstes init-script für den supoxy.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 21 Juli 2014, 23:46:16
Ich habe keine Ahnung was das Script macht - aber es sieht gut aus   :D
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 06 August 2014, 12:39:17
Hallo,
ich habe seit 2 Tagen immer das Problem, dass der Proxy scheinbar hängen bleibt. Zumindest liefert er keine neuen Daten mehr. Wenn ich ihn stoppe und wieder starte läuft die Datenlieferung wieder.
Hat schon mal jemand dieses Phänomen gehabt?

Viele Grüße

klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 06 August 2014, 15:32:08
Schreibst du die stdout Meldungen in eine logdatei? Vielleicht ist da was zu sehen. Bin leider beruflich zur zeit voll im stress und der  Raspi hat mal wieder die SD Karte gefressen. :-/
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 06 August 2014, 16:58:43
Hallo,

leider wurde der Log beim Restart überschrieben, werde beim nächsten Hänger den Log mal posten.

Gruß
Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 06 August 2014, 17:18:32
Normal wird er das nicht wenn du .....>> /var/log/.... schreibst. 2 >> bedeuten append.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 06 August 2014, 17:54:13
Zitat von: Waldmensch am 06 August 2014, 17:18:32
Normal wird er das nicht wenn du .....>> /var/log/.... schreibst. 2 >> bedeuten append.

ja, hatte aber nur ein ">"  >:( hab's geändert
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 07 August 2014, 16:28:34
Hallo Waldmensch,

Problem ist heute wieder aufgetreten.

Logfile:
08/06/2014 16:50:52     Use default value for timecorrection (0)
08/06/2014 16:50:52     API Thread started
08/06/2014 16:50:53     SuPoxy is running at  8000
08/06/2014 16:50:58     SuPoxy try to log in
08/06/2014 16:51:02     login done
08/06/2014 16:51:02     SuPoxy login done


Internals Wert BUF:
buf

HTTP/1.1 200 OK Content-length: 119 Connection: close Date: Thu, 07 Aug 2014 14:20:00 GMT 08/07/2014 15:02:38 PV:3745 FI:2261 GC:0 DC:0 SC:1484 SS:1484 TC:1484 DCQ:0 SCQ:40 AC:100 BI:0 BO:0 BCS:0 BSH:0 ERROR:


Hier sieht man eben, dass die Abrage um 16:20 Uhr (14:20 + 2h) war, der Rückgabewert aber von 15:02 Uhr ist.

Viele Grüße

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 07 August 2014, 21:04:41
Das ist seltsam. Normalerweise leite ich Fehler direkt auf stdout und die fehler die im JSON kommen, also Anlagenfehler, stehen hinter ERROR:
Kannst du den abfrageintervall evtl. Etwas hochsetzen?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 07 August 2014, 22:33:46
Das Abfrageintervall steht aktuell auf 300 Sekunden, wie hoch soll ich es denn setzen?
Wobei es gibt auch zwischendurch im FHEM log eine Fehlermeldung von HTTPMOD bezüglich timeout, nach weiteren 5 Minuten kommt dann eben der nächste Wert. Die HTTPMOD Timeout Meldungen korrelieren aber nicht mit den Hängern des Proxys.

Viele Grüße

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 08 August 2014, 16:24:57
Auf 300??? Ich meine die supoxy settings. Wenn der abfrageintervall am Portal auf 300 steht läuft evtl die Session ab. Die Webseite fragt die API (json) alle 5 Sekunden ab wenn du die Status Seite offen hast. Und diesen json holt sich der supoxy ja auch.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 08 August 2014, 18:17:57
Die 300 Sekunden sind das Abfrageintervall von HTTPMOD beim SUPOXY. Muss ich für den SUPOXY auch noch eine Einstellung vornehmen?

Aktuell habe ich jetzt HTTPMOD auf 60 Sekunden gestellt.
Ich berichte weiter... :)

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 08 August 2014, 18:51:05
Na der supoxy hat doch eine settings Datei,  in die du deine zugangsdaten eintragen musst. Dort kannst du auch noch ein paar andere Sachen konfigurieren. Z.b. port, Intervall und Cache Größe. Anleitung ist im Git und in der configdatei selbst.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 09 August 2014, 09:39:05
Ok, aktuelle Werte sind:

SUPOXY requestinterval=10

HTTPMOD 60 Sekunden

Problem tritt weiterhin auf, im Log von SUPOXY (STDOUT) sind keine Fehler.

Kann ich durch einen Parameter den SUPOXY "gesprächiger" machen?

Viele Grüße

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 09 August 2014, 12:12:39
Ne das geht nicht. Aber eigentlich werden an allen neuralgischen punkten die Fehlermeldungen rausgeführt. Ich bin nicht so der Java checker. Vielleicht kann ja mal jemand mit mehr Plan im den Code schauen. Deswegen habe ich es ja extra nach github geschoben.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 09 August 2014, 13:38:06
Du könntest dir mal das json anzeigen lassen indem du supoxy im Browser hinten mit /raw aufrufst. Dort muss ein valider json string kommen und nicht etwa eine HTML seite. Das wäre beispielsweise der Fall wenn das Login fehlgeschlagen ist.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Klaus Rubik am 10 August 2014, 09:49:00
Hallo,

bei /raw wird auch ein alter JSON String angezeigt, welcher nicht updated wird. Gleich wie bei /actual, hier wird auch ein alter Wert angezeigt.

Gruß

Klaus
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Kenneth am 23 August 2014, 13:05:46
Hi,

ich kenne mich mit Linux leider nicht gut aus. Habe mir einen Fhem-Server mit Ubuntu-Server aufgesetzt und das läuft soweit auch alles.
Jetzt habe ich "SUPOXY" ( https://github.com/Tommy-LSA/supoxy) gefunden und da ich eine Anlage mit SMA-Komponenten habe wollte ich das gern einbinden.

- in FHEM einen Ordner "supoxy" erstellt
- die Dateien aus dem Ordner "Distribution" in den /opt/fhem/supoxy" kopiert
- die "sunny.conf" angepasst
- die "supoxy_init_config" angepasst

wenn ich jetzt über putty versuche die "supoxy-init.sh" auszuführen bekomme ich die Rückmeldung


No such command, see ./supoxy-init.sh help


Ich hab doch  bestimmt was falsch gemacht.. nur was ..

Wäre super wenn mir jemand helfen könnte..

Danke schon mal Vorab für eure Mühe
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: tpn59 am 03 September 2014, 12:04:47
Hi Kenneth,
versuchs mal mit ./supoxy-init.sh start (aufrufen in dem Verzeichnus, in dem supoxy-init.sh gespeichert ist).
Gruss
    Thomas
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Kenneth am 07 September 2014, 14:43:43
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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Kenneth am 08 September 2014, 19:15:45
Problem gelöst..

java installiert und schon:

SuPoxy.jar is running.


Grüße
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Kenneth am 08 September 2014, 20:31:52
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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Kenneth am 13 September 2014, 14:40:51
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




Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Brun am 10 Oktober 2014, 10:12:45
Hallo,

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


Gruß Brun
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 29 Oktober 2014, 07:58:07
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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 16 November 2014, 17:56:56
Ich habe den Supoxy auf https umgebaut und im Git committed. Die Abfrage über http scheint am Sunny Portal nicht mehr möglich.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: hahu01 am 06 Januar 2015, 19:23:56
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



Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Waldmensch am 06 Januar 2015, 20:22:51
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.
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: rbothe am 22 Dezember 2015, 08:56:11
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?
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: Lefdi am 17 Januar 2016, 14:58:43
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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: saschab am 29 April 2019, 07:50:34
Hallo Zusammen,
anbei meinen Lösungsansatz:

Grundlage ist folgende Modul: https://forum.fhem.de/index.php/topic,99859.msg932446.html#msg932446 (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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: DS_Starter am 30 April 2019, 00:13:04
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
Titel: Antw:Sunny Portal Livedaten auslesen
Beitrag von: DS_Starter am 01 Mai 2019, 16:37:12
Hier gibt es weitere Infos: https://forum.fhem.de/index.php/topic,27667.msg935466.html#msg935466