Sunny Portal Livedaten auslesen

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

Vorheriges Thema - Nächstes Thema

Waldmensch

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.

Waldmensch

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.

SpenZerX

Wozu soll das gut sein?  Kann man doch vom Wechselrichter viel einfacher holen.

Klaus Rubik

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
FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

Waldmensch

#4
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.

Klaus Rubik

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) 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
FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

Waldmensch

So, HTTP ist implementiert

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


Waldmensch

#7
@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.

Waldmensch

#8
Also zusammen mit dem HTTPMOD funktioniert es schonmal einwandfrei. Interessante Werte sind

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


Regengott

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

Waldmensch

#10
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.

Waldmensch

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\.]+)

Waldmensch

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


Regengott

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

Regengott

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?