Seite 2 von 2

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 08 Jan 2023, 21:06
von Wetterfrosch
Noch eine Frage, sehe ich das richtig, dass ich die Uhrzeit initial in UTC erfassen muss, d.h. das Script arbeitet mit der UTC-Zeit?

Und noch eine Frage, beim Zählen des "Tages des Jahres" beginnt diese Zählung mit dem ersten Tag im Jahr mit 1 oder mit 0, denn in PHP ergibt die Ausgabe date(z) als erster Tag im Jahr 0 aus.

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 08 Jan 2023, 21:27
von olicat
Hi!

Ja, es wird UTC genutzt.
Die Zaehlung beginnt bei Python bei 1. Fuer PHP musst Du also eine 1 addieren: date('z') + 1;.

Oliver

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 08 Jan 2023, 22:01
von Wetterfrosch
Perfect, dann habe ich es richtig umgeschrieben, Script scheint nun auf PHP zu laufen, ich werde testen.

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 08 Jan 2023, 22:47
von olicat
Hi!

Ich bin auf Deine Ergebnisse gespannt. Allerdings ist (zumindest hier) gerade keine dankbare Zeit fuer die Berechnung der Sonnenstunden.

Oliver

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 09 Jan 2023, 00:02
von Wetterfrosch
Samstag hätte ich es toll testen können, da hatten wir den ganzen Tag frühlingshaftes Wetter mit strahlend blauem Himmel, doch Sonntag und die kommenden Tage ist durchweg Regen angesagt.
Aber ich hatte zum Testen mal die Schwellenwerte vom Samstag im Script abgerufen, d.h. ab wann würde das Script morgens "Sonne" ausgeben und wann abends das letzte mal und dann mal mit den realen Solarwerten verglichen, da passte das recht gut aber jetzt mal abwarten und dann mal im Realbetrieb testen.

Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?

Verfasst: 11 Jan 2023, 00:51
von Wetterfrosch
Anbei mal mein PHP-Code um den Schwellenwert für die Solarstrahlung zu bestimmen, ab dem ausgegeben wird, dass die Sonne scheint (abhängig vom Standort, der Uhrzeit (Achtung, Script arbeitet mit UTC als Zeit, dies unbedingt beachten, denn verwendet man die locale Zeit, dann berechnet es Mist) und dem Datum, d.h. in Abhängigkeit des Sonnenstandes).
Man muss das Script dann nur über ein Cronjob z.B. alle Minute durchlaufen lassen und dann beim Punkt "Sonne scheint" einen Zähler einbauen, der dann immer 1 Minute dazu zählt (vorausgesetzt Script wird jede Minute aufgerufen), so erhält man dann die Sonnenscheindauer.

Gestern gab es bei mir sporadisch Sonne und ich habe das Script mal mit dem tatsächlichen Sonnenschein draußen verglichen, bei mir passte es recht gut, vorausgesetzt, die Solarwerte die die Station liefert passen.

Code: Alles auswählen

<?php
$solarradiation //Variable die von der Wetterstation den Solarwert aufnimmt
$latitude =  47.8214; //hier muss der Stationsbreitengrad in ° eingegeben werden, in meinem Fall 47.8214°
$longitude = 7.6398; //hier muss der Stationslängengrad in ° eingegeben werden, in meinem Fall 7.6398°
$timestamp = time();
$minutesjour = gmdate("H",$timestamp) * 60 + gmdate("i",$timestamp); //aktuelle UTC-Uhrzeit in Minuten
$dayofyear = date("z",$timestamp)+1; //Tag des Jahres, Zählbeginn am 1. Januar mit 1

$theta = 360 * $dayofyear / 365;

$equatemps = 0.0172 + 0.4281 * cos((pi() / 180) * $theta) - 7.3515 * sin((pi() / 180) * $theta) - 3.3495 * cos(2 * (pi() / 180) * $theta) - 9.3619 * sin(2 * (pi() / 180) * $theta);

$corrtemps = $longitude * 4;

$declinaison = asin(0.006918 - 0.399912 * cos((pi() / 180) * $theta) + 0.070257 * sin((pi() / 180) * $theta) - 0.006758 * cos(2 * (pi() / 180) * $theta) + 0.000908 * sin(2 * (pi() / 180) * $theta)) * (180 / pi());

$tempsolaire = ($minutesjour + $corrtemps + $equatemps) / 60;

$angle_horaire = ($tempsolaire - 12) * 15;

$hauteur_soleil = asin(sin((pi() / 180) * $latitude) * sin((pi() / 180) * $declinaison) + cos((pi() / 180) * $latitude) * cos((pi() / 180) * $declinaison) * cos((pi() / 180) * $angle_horaire)) * (180 / pi());

if ($hauteur_soleil > 3) 
{
$seuil = (0.73 + 0.06 * cos((pi() / 180) * 360 * $dayofyear / 365)) * 1080 * pow((sin(pi() / 180 * $hauteur_soleil)), 1.25);	
$seuil = round($seuil,0);
}
else{
	$seuil=0;
}


if($solarradiation > $seuil && $seuil > 0)
{       
echo "Sonne scheint";
}
else{
echo "kein Sonnenschein";
} 
?>