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.
mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
- Wetterfrosch
- Beiträge: 470
- Registriert: 08 Dez 2020, 11:49
- Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
- Hat sich bedankt: 128 mal
- Danksagung erhalten: 37 mal
- Kontaktdaten:
- olicat
- Beiträge: 2361
- Registriert: 07 Dez 2020, 20:33
- Wohnort: Hohen Neuendorf
- Hat sich bedankt: 41 mal
- Danksagung erhalten: 477 mal
- Kontaktdaten:
Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
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
Ja, es wird UTC genutzt.
Die Zaehlung beginnt bei Python bei 1. Fuer PHP musst Du also eine 1 addieren: date('z') + 1;.
Oliver
- Wetterfrosch
- Beiträge: 470
- Registriert: 08 Dez 2020, 11:49
- Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
- Hat sich bedankt: 128 mal
- Danksagung erhalten: 37 mal
- Kontaktdaten:
Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
Perfect, dann habe ich es richtig umgeschrieben, Script scheint nun auf PHP zu laufen, ich werde testen.
- olicat
- Beiträge: 2361
- Registriert: 07 Dez 2020, 20:33
- Wohnort: Hohen Neuendorf
- Hat sich bedankt: 41 mal
- Danksagung erhalten: 477 mal
- Kontaktdaten:
Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
Hi!
Ich bin auf Deine Ergebnisse gespannt. Allerdings ist (zumindest hier) gerade keine dankbare Zeit fuer die Berechnung der Sonnenstunden.
Oliver
Ich bin auf Deine Ergebnisse gespannt. Allerdings ist (zumindest hier) gerade keine dankbare Zeit fuer die Berechnung der Sonnenstunden.
Oliver
- Wetterfrosch
- Beiträge: 470
- Registriert: 08 Dez 2020, 11:49
- Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
- Hat sich bedankt: 128 mal
- Danksagung erhalten: 37 mal
- Kontaktdaten:
Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
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.
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.
- Wetterfrosch
- Beiträge: 470
- Registriert: 08 Dez 2020, 11:49
- Wohnort: 79410 Badenweiler (350mNN) / Breisgau-Hochschwarzwald
- Hat sich bedankt: 128 mal
- Danksagung erhalten: 37 mal
- Kontaktdaten:
Re: mit Solarstrahlung ungefähre Sonnenscheindauer bestimmen?
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.
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";
}
?>