Hallo zusammen.
Ich habe mir mal ein kleines Programm für solcast.com geschrieben.
Man kann sich für eine Anlage(leider kann man nur eine Ausrtichtung angeben. Falls man zwei Solarfelder hat muss man sich anders zu helfen wissen) mit der API 20 mal am Tag die Vorhersage holen(ändert sich im Laufe des Tages aber eigentlich eh nur minimal) und hat dann für die nächsten drei Tage den Ertrag im halbe Stunden Raster. Hab ihn dann für die nächsten sechs halbe Stunden Raster ausgelesen. Ebenso für die nächste neun Stunden jeweile den drei Stunden Ertrag und natürlich den Tagesertrag der nächsten drei Tage.
Bisher (ca zwei Monate) hat die Vorhersage ganz gut den Ertrag vorhergesagt(klar Nebel und Schnee auf den Panelen war schwierig) und ich kann damit dann super den Wasserboiler nicht mehr mit Nachtstrom erwärmen wenn die Vorhersage für den nächsten Tag viel Ertrag vorhersagt, sodas ich weniger zukaufen und einspeisen muss.
Auch den Akku Speicher kann ich morgends von 40% vorhalten für Notbetrieb auf 10% runter setzten und so den Speicher besser ausnutze wenn sie Sonne es zulässt.
Jetzt aber hier mal mein Script zum auslesen.
<?php
$APIkey = "xxxxxxxxx"; // Hier den API Key eintragen
$content = Sys_GetURLContent("https://api.solcast.com.au/rooftop_sites/Resource Id/forecasts?format=json&api_key=".$APIkey); // Resource Id ersetzen
$json = json_decode($content,true);
$forecasts=$json['forecasts'];
$ids30min=array(46825,
27333,
10895,
26866,
29462,
19677,
14775);
for ($i = 0; $i <= 6; $i++)
{
setvalue($ids30min[$i],$forecasts[$i]["pv_estimate"]);
IPS_SetName($ids30min[$i],"Ertrag 30m bis ".date("H:i",strtotime($forecasts[$i]["period_end"])));
}
$ids3h=array(53895,
15120,
43420,
40218,
46389);
for ($j = 0; $j < 5; $j++) {
$ertrag=0;
for ($i = 0; $i <= 5; $i++) {
$ertrag+=($forecasts[($i+$j*6)]["pv_estimate"])/2;
}
IPS_SetName($ids3h[$j],"Ertrag bis ".date("H:i",strtotime($forecasts[($i+$j*5)]["period_end"])));
setvalue($ids3h[$j],$ertrag);
}
$ids1d=array(54081,
41849,
56109);
$datum=date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
$needle=$datum."T00:00:00.0000000Z";
for ($i = 0; $i <= 100; $i++) {
if(in_array($needle,$forecasts[$i]))
{
$ergebniss=$i;
$i=101;
}
}
for ($j = 0; $j <= 2; $j++)
{
$ertrag=0;
for ($i =0; $i <48 ; $i++)
{
$ertrag+=($forecasts[($ergebniss+$i+$j*48)]["pv_estimate"])/2;
}
setvalue($ids1d[$j],$ertrag);
if ($j==0)
setvalue(34404,date("D d.m ",strtotime($forecasts[($ergebniss+$j*48)]["period_end"])).number_format($ertrag,2)."kwh");
IPS_SetName($ids1d[$j],date("D d.m",strtotime($forecasts[($ergebniss+$j*48)]["period_end"])));
}
switch ($_IPS['EVENT'])
{
case '33032': //Um 23.45 Ertrag für nächsten Tag abspeichern
Setvalue(43402,intval(getvalue(54081)));
break;
}
Das Script lasse ich einmal um 23.45 laufen, damit ich den Ertrag für den nächsten Tag habe, um 2:45 und dann von 7uhr bis 16 uhr alle halbe Stunde damit ich die 20 abrufe am Tag nicht überschreite.
Eigentlich bräuchte ich die halben Stunden vorhersagen garnicht aber sieht halt schön aus wenn man die Vorhersage und den tatsächliche Ertrag nebeneinander sieht.
Vielleicht kann ja jemand das Script als Anregung gebrauchen.
Als zusätzliche json Daten bekommt man immer auch noch die pessimistischste und die optimistischste Vorhersage („pv_estimate“:0.4946,„pv_estimate10“:0.0501,„pv_estimate90“:1.32) mitgeliefert. Falls also jemand auf nummer Sicher gehen muss/will was seine Anlage schaffen kann könnte man auch die nehmen.
Mfg
Jannis Duffner