Sonnenstunden forecast nächsten Tag

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);
}