Sonnenstunden forecast nächsten Tag

Hallo zusammen,

hat jemand eine Möglichkeit gefunden, den forecast von den Sonnenstunden zumindest für den nächsten Tag irgendwie auszulesen?

Ich habe mir jetzt schon einige API’s angesehen, die Sonnenstunden fehlen hier jedoch immer.
Auf den einschlägigen Wetterseiten sind diese allerdings meistens mit eingebettet.

Ich würde das gerne zur Heizungsunterstützung und zum managen des Solarspeichers nutzen.
Es geht mir eigentlich auch nur um die Sonnenstunden, alle anderen Wetterdaten liegen schon vor.

Hat hier jemand die Daten irgendwie vorliegen, sei es über eine API oder das parsen einer Webseite und kann seine Erfahrung und ggf. Scripte teilen?

Danke u. viele Grüße,
Doc

1 „Gefällt mir“

Ich werte die Bewölkung unter OpenWeatherMap aus, weil die Sonnenstunden nicht vorliegen. Funktioniert aber auch nicht immer, weil die Vorhersage doch nicht so zuverlässig ist.:slight_smile:

OpenWeatherMap habe ich auch laufen, aber die Sonnenstunden fehlen leider auch hier.
Über den Bedeckungsgrad möchte ich das eigentlich nicht machen, das passt dafür leider gar nicht.

Die Sonnenstunden wäre hier halt eine gute Basis.
Ich brauche auch nicht exakt die Stunden, aber ob 1-2 o. 5-6 Stunden wäre schon mal ein Anfang.

Viele Grüße,
Doc

… und wie liesst du die aus?

Habe ich noch nicht probiert

Ich hatte schon vor längerer Zeit intensiv danach gesucht und heute bin ich per Zufall auf diese Seite gestoßen. Hier ist eine HTML Tabelle mit stündlicher Angabe der Strahlung in J/cm2 oder W/m2.

Hallo Klaus,

kannst du den Link noch mal prüfen?

Danke u. Grüße,
Doc

Du musst nur das falsche „http://“ entfernen ;).

Danke, der Link funktioniert.

Mir ist aber immer noch nicht klar, wie ich die Seite für morgen mit dem ensprechenden Ort aufrufen kann um die Sonnenstunden zu parsen?
Das sind doch alles Java-Scripts, oder?

Wurde hier schon behandelt Gibt es Prognosedaten für die tägl.Erzeugungsmenge einer PV Anlage? - Seite 2

forecast.solar hatte ich heute schon mal getestet.
Da komme ich aber nicht mal Ansatzweise an die heutigen Werte bei komplett bedenktem Himmel.
Wenn ich mir aber die Sonnenstunden 0-1h ansehe auf den wetterseiten, kommt das schon eher hin.

Doc

Hier findet man die Daten. In den Daten nach <radwm2> (W/m²) suchen. Wie man dies aufbereitet weiß ich noch nicht.

… und hier noch ein paar Zeilen:

<?php
$url = 'https://..........'; 
$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."
<br>";
  }
  else
  {
    echo 'url:  '.$url." does not exist 
<br>";
    return;
  }
/* Ende - prüfen ob Seite existiert */

$file = file_get_contents($url);
$json = json_decode($file, TRUE);

foreach($json['days'] as $key => $data){
	echo $json['days'][$key]['wd'].' '.$json['days'][$key]['date']."
";
	echo " Temperatur (min/max): ".$json['days'][$key]['tmin']."/".$json['days'][$key]['tmax']." °C"."
";
	echo " Sonnenschein: ".$json['days'][$key]['sdur']." h"."
";
	echo " Strahlung:    ".$json['days'][$key]['radWm2']." W/m²"."
";	
	}

// print_r($json ); 

Die URL vom vorherigen Beitrag anpassen (latitude & longitude) und in das Script einfügen.

Moin Klaus,

ja super, da stehen ja auch die täglichen Sonnestunden mit drin.
Wie ich das weiter verarbeiten kann, da muss ich mich die nächsten Tage auch mal reinfuchsen, mit JSON und XML habe ich mich noch sehr wenig beschäftigt.
Wenn du da schon weiter gekommen bist, lass es mich bitte mal wissen.

Viele Grüße,
Doc

Code um foreach Schleife zwecks Auswertung der Daten ergänzt.
Berichte mal bitte später ob die Vorhersage der Realität entspricht und ob du wirklich einen Nutzen daraus ziehen kannst. Natürlich geht das vermutlich erst wieder wenn die Tage länger sind.

Hatte dein Script mal so ergänzt, um die Sonnenstunden der nächsten Tage auszulesen.

Die Solarstrahlung könnte man bestimmt auch noch berechnen, wobei man das dann mit dem Winkel und Wirkungsgrad der PV Module verrechnen müsste, je nach Uhrzeit.
Im Moment reichen mir aber die Sonnenstunden um den min. SoC der Batterie in der Nacht anzuheben oder zu senken.

VG,
Doc

$url = 'https://www.agrar.basf.de/api/weather/weatherDetails?lang=de&latitude=x.xxxx&longitude=x.xxxx';
$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."
<br>";
  }
  else
  {
    echo 'url:  '.$url." does not exist 
<br>";
    return;
  }
/* Ende - prüfen ob Seite existiert */
$file = file_get_contents($url);
$json = json_decode($file, TRUE);

SetValueFloat(20502,(time_convert($json['days'][0]['sdur'])));                  // Sonnenstunden heute
SetValueFloat(30733,(time_convert($json['days'][1]['sdur'])));                  // Sonnenstunden morgen
SetValueFloat(52325,(time_convert($json['days'][2]['sdur'])));                  // Sonnenstunden übermorgen
SetValueFloat(43074,(time_convert($json['days'][3]['sdur'])));                  // Sonnenstunden überübermorgen


// --- Funktionen ---

function time_convert($Zeit) {
    $d = explode(':', $Zeit);
    $d2 = 100 / 60 * $d[1];
    $d2 = round(($d[0].'.'.$d2), 1);
    return $d2; 
}

1 „Gefällt mir“

Moin,
ich muss mal eben nen Danke da lassen. Wollte gerade einen Post absetzen mit den Betreff „Sonnenstunden“.
Dann kam dieser Thread als Vorschlag.
copy/paste, 4 Variablen erstellt, läuft. geil, danke.

Und falls du das ggf. zur Berechnung des Ertrages für die nächsten Tage für deine PV benötigst,
hier noch das erweiterte Script, welches keine Angaben zur installierten Leistung oder Ausrichtung der PV benötigt, nur 2 gelogte Variablen über mehr als 10 Tage.
Das Ergebniss ist recht zuverlässlich.

// Script zum Abrufen des BASF Agrar-Wetters mit Ausgabe der Sonnenstunden und der prognostizierten Solarstrahlung
// mit Berechnung des zu erwartenden PV-Ertrags durch Berechnung des Faktors der letzten 10 Tage
// ===================================================================================================

// Berechnung des Faktors für die PV Leistungs-Vorhersage als Mittelwert der letzten 10 Tage
// zur Anpassung an die verschiedenen Anlagen und Winkel der Sonneneinstrahlung und Verschattungen über die Jahreszeiten

$IDArchiveHandler = 10204;
$varId_PV = 40993;
$varId_Einstrahlung_morgen = 34860;

$PV = AC_GetAggregatedValues($IDArchiveHandler, $varId_PV, 1 /* Täglich */, strtotime("-11 day"), strtotime("-1 day")-1, 0); 
$Mittelwert_PV = CalcConsumption($PV) / 10;

$Einstrahlung = AC_GetAggregatedValues($IDArchiveHandler, $varId_Einstrahlung_morgen, 1 /* Täglich */, strtotime("-12 day"), strtotime("-2 day")-1, 0); 
$Mittelwert_Einstrahlung = CalcConsumption($Einstrahlung) / 10;

$Faktor = round(($Mittelwert_PV * 1000) / ($Mittelwert_Einstrahlung * 24),2);

SetValue(27648, $Faktor);
// ===================================================================================================

// Abrufen und berechnen des BASF Agrarwetters

$url = 'https://www.agrar.basf.de/api/weather/weatherDetails?lang=de&latitude=x.xxxx&longitude=x.xxxx';
$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(20502,(time_convert($json['days'][0]['sdur'])));                              // Sonnenstunden heute
SetValueFloat(30733,(time_convert($json['days'][1]['sdur'])));                              // Sonnenstunden morgen
SetValueFloat(52325,(time_convert($json['days'][2]['sdur'])));                              // Sonnenstunden übermorgen
SetValueFloat(43074,(time_convert($json['days'][3]['sdur'])));                              // Sonnenstunden überübermorgen

//$Faktor = 15.0;                                                                           // beobachteter, geschätzter Faktor zur Umrechnug der Einstrahlung in PV Ertrag bei aktueller Anzahl und Ausrichtung der Module
SetValueFloat(30036,(($json['days'][0]['radWm2']) * 24 * $Faktor / 1000));                  // Erwartung PV Ertrag heute
SetValueFloat(38038,(($json['days'][1]['radWm2']) * 24 * $Faktor / 1000));                  // Erwartung PV Ertrag morgen
SetValueFloat(45208,(($json['days'][2]['radWm2']) * 24 * $Faktor / 1000));                  // Erwartung PV Ertrag übermorgen
SetValueFloat(21892,(($json['days'][3]['radWm2']) * 24 * $Faktor / 1000));                  // Erwartung PV Ertrag überübermorgen

SetValueFloat($varId_Einstrahlung_morgen,($json['days'][1]['radWm2']));                     // Einstahlung von morgen für Faktor Berechnung (ins Archive)


// --- Funktionen ---

function time_convert($Zeit) {
    $d = explode(':', $Zeit);
    $d2 = 100 / 60 * $d[1];
    $d2 = round(($d[0].'.'.$d2), 1);
    return $d2; 
}

function CalcConsumption($values) 
{
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption += $value['Avg'];
    }
    return round($consumption, 2);
} 

2 „Gefällt mir“