Hallo allerseits,
Bei der Kombination Davis VP2 und weatherboxx/meteoplug gibt es leider keine integrierte Möglichkeit, aus der Globalstrahlung (Solar-Sensor) die
Sonnenscheindauer zu ermitteln. Da ich an diesem Wert aber sehr interessiert war, habe ich mir selbst eine Lösung gebaut. Vielleicht ist das auch für andere Personen hier von Interesse, deshalb publiziere ich gerade meine Herangehensweise.
Zuerst möchte ich betonen, dass ich
nicht an einer theoretischen / "offiziell meteorologischen" Definition der Sonnenschein-Dauer interessiert war. D.h. ein Algorithmus "
wenn Solarsensor-Wert > 120W/m2, dann Sonnenschein" war für mich keine Lösung. Ziel war ein Resultat, das näher an dem liegt, was ich selbst im Alltag als Sonnenschein wahrnehme. Für das "Erlebnis Sonnenschein“ brauche ich persönlich einen Schattenwurf und nicht nur helles, diffuses Licht. Dies ist natürlich eine eher subjektive Definition und keine streng wissenschaftliche Herangehensweise, welche somit auch nur schwerlich exakte Daten-Vergleiche zulässt.
Hier der von mir gewählte Algorithmus zur Erkennung von "Sonnenschein":
- Berechne den Sonnenwinkel zu jedem gegebenen Mess-Zeitpunkt für meinen Standort
- Errechne daraus die erwartete Globalstrahlung Gmax in W/m2 bei perfekt wolkenlosem Himmel
- Vergleiche den aktuellen Solar-Sensor-Wert mit Gmax
- Ist der Sensor-Wert über einem empirisch ermittelten Bruchteil von Gmax, dann wird Sonnenschein angenommen
- Den Grenzwert habe ich nach Tests auf 0.5*Gmax festgesetzt
- Für die Morgenstunden und Abendstunden musste ich den Grenzwert anpassen, um das erwünscht Resultat zu erhalten (Ausgleich von Toleranzen und wahrscheinlich der individuellen Topologie meines Standorts)
Das Resultat ist auf meiner Webseite
wetter.isenegger.org
ersichtlich. Die Sonnenschein-Dauer wird erst seit gut 2 Wochen erfasst. Erst in etlichen Monaten werde ich wissen, ob der gewählte Grenzwert auch bei jedem Wetter und in anderen Jahreszeiten gewünschte Resultate liefert. Leichte Anpassungen sind möglich resp. wahrscheinlich.
Nun zu den Details der Berechnung:
Input / Konstanten für Berechnung:
c=aktueller Wert Solar-Sensor in W/m2
lg=7.8 (longitude Ort)
lt=47.45 (latitude Ort)
st=Zeitpunkt Stunde (UTC+1 ganzjährig, 0-23)
mi=Zeitpunkt Minute (0-59)
j=Tage seit 1.Jan (1-365)
d=0.0174533 (pi/180 -> degrees to rad)
Berechnungsschritte:
1. Deklination: x=-23.45*cos(d*360*(j+10)/365)
2. Zeitgleichung: z=60*(-0.171*sin(0.0337*j+0.465)-0.1299*sin(0.01787*j-0.168))
3. Stundenwinkel: w=15*(st+mi/60-(15-lg)/15-12+z/60)
4. sin(Sonnenwinkel): s=sin(d*lt)*sin(d*x)+cos(d*lt)*cos(d*x)*cos(d*w)
5. Sonnenhoehe: s2=atan2(s,sqrt(1-s^2))/d (
entspricht arcsin(s)/d)
6. Theor. Gl.Strahlung: m=1368*sin(s2*d)
7. Dämpfung: a=(1-sin(s2*d))*0.3*m
Max.Globalstrahlung zu gegebenem Ort und Zeitpunkt: (m-a)
Grenzwert zwischen Sonnenschein und kein Sonnenschein: g=(m-a)*0.5
Grenzfaktor -> 0.5 (empirisch bestimmt / grob das Verhältnis Direktstrahlung und diffuser Strahlung)
Korrektur des Grenzwerts für meine individuelle Situation (empirisch bestimmt):
if (st<8 ) g=g*0.8-3 (Grenzwert für frühen Sommermorgen senken, da sonst Sonnenschein nicht erkannt wird)
if (st>14) g=g*1.2+5 (Grenzwert für späten Sommerabend anheben, da sonst Schatten als Sonnenschein erkannt wird; wahrscheinlich geländebedingt)
Bedingung um Output-Datenwert auf 100 (Sonnenschein) oder 0 (Schatten) zu setzen (Datenwert in 1/100 Einheit):
o=0;if ((c>g)&&(g>15)) o=100; ("g>15" notwendig, da bei sehr kleinen Werten keine konsistente Bestimmung möglich ist)
Implementation:
Definiere in meteoplug einen Virtuellen Sensor „data_“ (bei mir data38) mit folgendem gawk Script (Trigger: sol0):
awk '{c=$3;lg=7.8;lt=47.45;d=0.0174533;j=strftime(''%j'');st=strftime(''%H'')--1;mi=strftime(''%M'');}{x=-23.45*cos(d*360*(j--10)/365);z=60*(-0.171*sin(0.0337*j--0.465)-0.1299*sin(0.01787*j-0.168));w=15*(st--mi/60-(15-lg)/15-12--z/60);s=sin(d*lt)*sin(d*x)--cos(d*lt)*cos(d*x)*cos(d*w);s2=atan2(s,sqrt(1-s^2))/d;m=1368*sin(s2*d);a=(1-sin(s2*d))*0.3*m;g=(m-a)*0.5;if (st<8 ) g=g*0.8-3;if (st>14) g=g*1.2--5;o=0;if ((c>g)&&(g>15)) o=100;printf''%d'',o}'
Da die max.Länge der Script-Zeile limitiert ist, ist der Code „scheusslich“ implementiert, aber er funktioniert.
In der Grafik muss noch lediglich der richtige Parameter und Faktor gewählt werden:
Für eine 5min Auflösung (res=5min): sid0=data38 ssel0=val sfactor0=5 (glunit=Min)
Für die Stundengrafik (res=hour1): sid0=data38 ssel0=val sfactor0=60 sprec0=0 (glunit=Min)
Für die Tagesgrafik (res=day1): sid0=data38 ssel0=val sfactor0=24 sprec0=1 (glunit=Std)
Meteoplug rechnet nicht in echten Zeiteinheiten sondern „pro Event“. Sind in einem „5Min Topf“ für „data38“ 3 Events, davon zwei mit Wert 1 und einer mit Wert 0, dann folgt daraus eine Sonnenscheindauer von 2/3 für diesen „Topf“, d.h. 3.3Min.
Fazit:
Die ermittelte Sonnenscheindauer kann mit diesem Algorithmus natürlich nicht absolut exakt sein. Diverse Parameter sind empirisch bestimmt und vom individuellen Standort und dem individuell gewünschten Resultat abhängig. Die korrekte Ermittlung von "Sonnenschein" in der ersten Morgen-/ letzten Abendstunde ist auch nur bedingt möglich. Dazu gibt es eine Unschärfe, da meteoplug nicht in echten Zeiteinheiten rechnet. Trotzdem erscheint mir das ermittelte Resultat erstaunlich realistisch und viel näher an meiner Alltags-Wahrnehmung von "Sonnenschein" zu sein als theoretische Absolut-Grenzwerte von 120W/m2. Auch scheint die ermittelte Sonnenschein-Dauer innerhalb meiner eigenen Messreihe konsistent, nachvollziehbar und sehr nahe an meiner individuellen Wahrnehmung zu sein. Und genau das ist es, was ich erreichen wollte.
Euer Feedback ist natürlich sehr willkommen. Auch würde mich interessieren, ob und wie ihr selbst die Sonnenschein-Dauer ermittelt.
Grüsse
Sammy