Hoe het invertervermogen aanpassen met een oude Sunny Boy en zijn Webbox ?
Deze post beschrijft hoe ik er met mijn oude inverter (SB3300 uit 2008) in slaag om het vermogen van de inverter dynamisch te reduceren ingeval van negatieve injectieprijzen (eigenlijk enkel nuttig voor de lezers die een dynamisch contract hebben. Via-via kwam ik in deze thread terecht waarvan ik denk dat dit de meest aangewezen is om mijn bevindingen te documenteren. Dit zijn nog maar mijn eerste (werkende!) bevindingen, allicht kan het nog minder "verbose" in de scripts, daar ben ik nog aan 't achterkomen.
Eerst even
mijn oude
configuratie schetsen, want ik heb er geen goed idee van of er nog vaak gelijkaardige configuraties worden gebruikt. Het is alleszins een oud beestje, en recentere inverter-uitvoeringen hebben, als ik het goed begreep, standaard een netwerkinterface beschikbaar...
Mijn SB3300 stuurt al jaren trouw alle gegevens naar het SMA portaal. De gegevensstroom:
SB3300 inverter --> piggyback RS485 print (in de inverterkast toegevoegd) -->
Sunny Webbox --> portal. De Sunny Webbox doet hierbij 2 dingen: enerzijds de (verwerkte) modbus-inverter gegevens doorsturen naar het portaal, en anderzijds draait er een webservertje op dat toelaat om bepaalde van mijn installatieparameters aan te passen.
Wie weet legt mijn SB3300 al binnenkort het loodje. Dus mijn overwegingen waren vooral dat ik liefst geen extra hardware aanschafte, en ook de bestaande flow naar het portaal (met al mijn historiek) liefst niet wou verstoren. De modbus-over-RS485-weg was daardoor dus minder voor de hand liggend. En ook al lijkt de Sunny Webbox ook modbus servertje te spelen (zijn poort 502 staat open), ook dan nog weet ik het te wijzigen modbus register niet. Want SMA Benelux laat het afweten als het op enige support aankomt, en tot op vandaag wacht ik nog altijd op het modbus registernummer van die ene luttele modbus parameter, en ze achtten het nog niet eens de moeite om hun klanten van het eerste uur te ondersteunen. Dus bij deze aan SMA Benelux: een gefrustreerde klant geeft jullie een "thanks for nothing", en jullie mogen dan nog zelf kiezen welke vinger jullie er het liefst bij opgestoken zien.
Dus ging ik zoeken of ik het inverter-vermogen via het webservertje op de Sunny Webbox kon aansturen. En ik kwam erachter dat dit met de systeemparameter "
Pmax" inderdaad kon. Alleen: dit was manueel, dmv klikken op een loze webpagina. Dus hoe verander je die op een manier die automatisering toelaat? Na enig zoeken, stootte ik in deze thread al op eerdere frustraties van @
Wim Leers en @
jobr,
hier en
hier. Maar ! Ik kreeg het eindelijk aan de praat. Na urenlang wireshark captures analyseren en met puzzelen wat er dan wel "ánders" is tussen mijn nagebootste curl commando's en de gecapturede Webbox frames, kwam ik tot een aantal curl commando's die werken. Opgelet: die werken ... in
mijn configuratie. Dus ik schat dat iedereen die dit bij zich thuis werkend wil krijgen nog enig getweak te wachten staat, maar de grondslagen zijn mijns inziens hier alleszins gelegd.
Gebruik makend van curl (dus niet manueel) komt het neer op
- simuleer dat je inlogt op de Webbox (je moet het paswoord van de Sunny Webbox dus wel kennen)
- simuleer dat je de Webbox pagina met de systeemparameters oproept
- haal uit die pagina de relevante gegevens om in de volgende stap te versturen; wijzig hierbij de Pmax waarde
- simuleer het versturen, naar de Webbox, van een gewijzigde Webbox systeemparameters pagina
Klaar! Uiteraard is dat sneller gezegd dan gedaan. Maar hier volgt hoe je dit doet, samen met de curl scripts (enige bash kennis verondersteld).
DISCLAIMER: weet wat je doet! Gebruik én/of aanpassing voor (eigen gebruik) is op eigen risico!
stap 1 (simulatie van inloggen) :
--> noteer dat
- ik mijn waardes hier en nu vanuit mijn script(s) "on the spot" verving met bash omgevingsvariabelen (dus mogelijk kleine syntaxfoutjes)
- Language en Password moeten worden aangepast
- IP het IP adres van de Webbox is
- sommige header waardes én referer values misschien nog overbodig zullen blijken te zijn (daar ben ik nog mee aan het experimenteren)
code:
1
2
3
4
5
| export language=nl
export password=jouw_paswoord
export IP=192.168.10.10
export standard_headers="-H \"User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0\" -H \"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\" -H \"Accept-Language: nl,en-US;q=0.7,en;q=0.3\" -H \"Accept-Encoding: gzip, deflate\" -H \"DNT: 1\" -H \"Connection: keep-alive\" -H \"Upgrade-Insecure-Requests: 1\" -H \"Sec-GPC: 1\""
curl -s -X POST $standard_headers -H "Content-Type: application/x-www-form-urlencoded" -H "Priority: u=4" --referer http://$IP/home.htm --data "Language=$language&Password=$password" http://$IP/login |
stap 2 (simulatie van de opgeroepen systeemparameter-pagina) :
--> noteer dat er een ander bestand moet zijn met het curl command. Hier weggelaten voor de leesbaarheid, hierover hieronder nog meer
code:
1
| read -r E_Total h_Total <<< $(./fetch_data | egrep '_tbody_r8c4|_tbody_r16c4' | sed -e 's/value="/|/g' -e 's/"><\/td/|/g' | cut -d\| -f2,4 | tr '\n' ' ' | sed -e 's/,/%2C/g') |
stap 3 (wijzigen van de relevante waarde):
--> noteer dat
- er ook in deze stap een ander bestand moet zijn met de "raw" parameter waardes. Ook hier weggelaten voor de leesbaarheid en hieronder nog meer
- de waardes "urlencoded" zullen moeten zijn - ook hierover hieronder meer
- de nieuw in te stellen waarde van Pmax hier moet worden gezet
- noteer dat er een databestand wordt aangemaakt dat in stap 4 zal worden gebruikt
code:
1
2
| export Pmax=de_nieuwe_Pmax_waarde
cat data_contents_raw.txt | sed -e "s/XXXX/$E_Total/g" -e "s/YYYY/h_Total/g" -e "s/ZZZZ/$Pmax/g" > data_contents.txt |
stap 4 (versturen van de gewijzigde waardes):
--> noteer dat
- de NNNNNN hieronder de 6 in te vullen cijfers van jouw inverter moeten zijn
- dit TWEE commando's zijn, dus dat
- ENKEL het eerste het niet zal doen (tegen-intuitief!)
- het eerder aangemaakte databestand hier wordt gebruikt
code:
1
2
3
4
| export your_sunny_boy-devkey=WR33-008:2000NNNNNN
curl -s -X POST $standard_headers -H "Content-Type: application/x-www-form-urlencoded" -H "Priority: u=4" --referer "http://$IP/plant_parameter.htm?DevKey=$your_sunny_boy-devkey&DevClass=Sunny%20Boy" --data @data_contents.txt http://$IP/plant_on_param_set_frameset.htm
curl -s -X GET $standard_headers -H "Priority: u=4" --referer "http://$IP/plant_on_param_set_frameset.htm" --data @data_contents.txt http://$IP/plant_on_param_set_topframe.htm |
Voor stap 2 ziet het bestand "fetch_data" er als volgt uit:
--> noteer dat
- de NNNNNN hieronder de 6 in te vullen cijfers van jouw inverter moeten zijn
- er ook (waardes van) omgevingsvariabelen die eerder voorkwamen worden gebruikt
- ik de headers (nog) niet heb proberen te "reduceren", bijvb. naar dezelfde set als die die ik hierboven in de omgevingsvariabele $standard_headers zette
code:
1
2
3
| export your_sunny_boy-devkey=WR33-008:2000NNNNNN
curl -s -X GET -H "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: nl,en-US;q=0.7,en;q=0.3" -H "Accept-Encoding: gzip, deflate" -H "Content-Type: application/x-www-form-urlencoded" -H "Origin: http://$IP" -H "DNT: 1" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1" -H "Sec-GPC: 1" -H "Priority: u=0, 1" --referer "http://$IP/plant_parameter.htm?DevKey=$your_sunny_boy-devkey&DevClass=Sunny%20Boy" http://$IP/plant_parameter.htm?DevKey=WR33-008:2000603025&DevClass=Sunny%20Boy |
Voor stap 3 ziet het gebruikte bestand 'data_contents_raw.txt' er (bij mij) als volgt uit:
--> ! noteer dat
- die waardes afkomstig zijn uit mijn systeem
- IK die waardes uit de "echte" pagina haalde
- die waardes allemaal "urlencoded" zijn (vb: een ',' is er '%2C')
- XXXX, YYYY, en ZZZZ er vervangen worden door de waardes die ik in stap 2 bekwam of zelf bepaalde (Pmax, in dat geval)
- JOUW eigen waardes er helemaal anders uit kunnen zien (en misschien doe je wel schade wanneer je die van hieruit klakkeloos kopieert !)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| ACVtgRPro=253&
AntiIsland-Ampl=0&
AntiIsland-Freq=500&
Betriebsart=Mpp-Betrieb&
Control=Auto&
Default=trimmed&
dFac-Max=0%2C25&
dZac-Max=350&
E_Total=XXXX&
Fac-delta-=0%2C19&
Fac-delta%2B=0%2C19&
Fac-Limit+delta=2&
Fac-Start+delta=1&
Fan-Test=0&
h_Total=YYYY&
I-NiTest=10000&
Inst.-Code=0&
KI-Wind-Reg=0%2C005&
KP-Wind-Reg=0%2C117&
LDVtgC=50&
Netzanschluss=-----&
Pmax=ZZZZ&
P-Wind-Mid=670&
P-Wind-Ramp=600&
Ripple-Ctl-Frq=1605&
Ripple-Ctl-Lev=8&
Ripple-Ctl-Rcvr=auto&
Speicherfunkt.=Keine+Funktion&
T-Max-Fan=90&
T-Start=10&
T-Start-Fan=60&
T-Stop=2&
T-Stop-Fan=50&
Uac-Max=252&
Uac-Min=198&
UdcWindMax=450&
UdcWindMid=315&
UdcWindStart=200&
Upv-Start=250&
Usoll-Konst=500&
BSave=Opslaan |