Ich habe dir das Script mal auf Open-Meteo.com umgebaut.
Aktuell bin ich mit Solorprognose & Co. auch nicht wirklich zufrieden.
Mal sehen, wie sich das hier nach 6 Tagen wieder eingependelt hat, das hatte früher immer gut funktioniert.
Die Sonnenstunden kamen mir hier am Anfang etwas hoch vor, diese sind hier aber mit > 120W/m² definiert, ich weiss nicht genau, wo der Schnitt da beim BASF Agrarwetter genau war.
Wolkenlos ist normal bis zu 1000W/m².
Kannst ja mal testen … (ID’s und Lat/Lon anpassen)
Viele Grüße,
Doc
// Script zum Abrufen des Open-Meteo-Wetters mit Ausgabe der Sonnenstunden und der prognostizierten Solarstrahlung
// mit Berechnung des zu erwartenden PV-Ertrags durch Berechnung des Faktors der letzten 5 Tage
// ===================================================================================================
// Berechnung des Faktors für die PV Leistungs-Vorhersage als Mittelwert der letzten 5 Tage
// zur Anpassung an die verschiedenen Anlagen und Winkel der Sonneneinstrahlung und Verschattungen über die Jahreszeiten
//ID des ArchiveHandler ermitteln
$instances = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
$IDArchiveHandler = $instances[0];
$varId_PV = 40993; // geloggte PV Zähler Variable in kWh
$varId_Einstrahlung_morgen = 31116;
$PV = AC_GetAggregatedValues($IDArchiveHandler, $varId_PV, 1 /* Täglich */, strtotime("-6 day"), strtotime("-1 day")-1, 0);
$Mittelwert_PV = CalcConsumption($PV) / 5;
$Einstrahlung = AC_GetAggregatedValues($IDArchiveHandler, $varId_Einstrahlung_morgen, 1 /* Täglich */, strtotime("-7 day"), strtotime("-2 day")-1, 0);
$Mittelwert_Einstrahlung = CalcConsumption($Einstrahlung) / 5;
$Faktor = round($Mittelwert_PV / $Mittelwert_Einstrahlung ,2);
SetValue(40462, $Faktor);
// ===================================================================================================
// Abrufen und berechnen des Open-Meteo Wetters
$url = 'https://api.open-meteo.com/v1/forecast?latitude=xx.xxxx&longitude=x.xxxx&daily=sunshine_duration,shortwave_radiation_sum&timeformat=unixtime&timezone=Europe%2FBerlin';
$stream = stream_context_create(array(
"ssl"=>array(
"verify_peer"=> false,
"verify_peer_name"=> false, ),
'http' => array(
'timeout' => 30 ) ) );
$array = get_headers($url, 0, $stream);
$string = $array[0];
if(strpos($string,"200"))
{
//echo 'url exists '.$url."\n<br>";
}
else
{
echo 'url: '.$url." does not exist \n<br>";
return;
}
/* Ende - prüfen ob Seite existiert */
$file = file_get_contents($url);
$json = json_decode($file, TRUE);
SetValueFloat(29481, ($json['daily']['sunshine_duration'][0])/3600); // Sonnenstunden heute
SetValueFloat(46325, ($json['daily']['sunshine_duration'][1])/3600); // Sonnenstunden morgen
SetValueFloat(56523, ($json['daily']['sunshine_duration'][2])/3600); // Sonnenstunden übermorgen
SetValueFloat(51034, ($json['daily']['sunshine_duration'][3])/3600); // Sonnenstunden überübermorgen
//$Faktor = 2; // beobachteter, geschätzter Faktor zur Umrechnug der Einstrahlung in PV Ertrag bei aktueller Anzahl und Ausrichtung der Module
SetValueFloat(21880,(($json['daily']['shortwave_radiation_sum'][0]) * $Faktor)); // Erwartung PV Ertrag heute
SetValueFloat(11768,(($json['daily']['shortwave_radiation_sum'][1]) * $Faktor)); // Erwartung PV Ertrag morgen
SetValueFloat(27785,(($json['daily']['shortwave_radiation_sum'][2]) * $Faktor)); // Erwartung PV Ertrag übermorgen
SetValueFloat(30909,(($json['daily']['shortwave_radiation_sum'][3]) * $Faktor)); // Erwartung PV Ertrag überübermorgen
SetValueFloat($varId_Einstrahlung_morgen,($json['daily']['shortwave_radiation_sum'][1])); // Einstahlung von morgen für Faktor Berechnung (ins Archive in MJ/m²)
// --- Funktionen ---
function CalcConsumption($values)
{
$consumption = 0;
foreach($values as $value)
{
$consumption += $value['Avg'];
}
return round($consumption, 2);
}