Skript - Kontrolle der Sonne
Um den Sonnen- auf und untergang zu bestimmten, hatte ich zuerst ein Bash Skript benutzt, was ich von einer Seite gefunden hatte.
Nun wurde es in Python ungeschrieben und sieht so aus:
Python:
import math
from datetime import datetime, timezone
# Unsere Position
posLaenge = 10.8
posBreite = 53.8
# Notwendige Vorberechnungen
zoneinfo = int(datetime.now().astimezone().utcoffset().total_seconds() / 3600) # Zeitzone in Stunden
T = datetime.now().timetuple().tm_yday # Tag im Jahr
pi = 3.14159265358979323844
rad = pi / 180
h = -(5/6) * rad # Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion
BreiteRAD = posBreite * rad
# Berechnungen
sonnendekl = 0.409526325277017 * math.sin(0.0169060504029192 * (T - 80.0856919827619))
arccosint = (math.sin(h) - math.sin(BreiteRAD) * math.sin(sonnendekl)) / (math.cos(BreiteRAD) * math.cos(sonnendekl))
arc2cosint = max(min(arccosint ** 2, 1.0), -1.0)
acoszeit = math.acos(math.sqrt(arc2cosint))
zeitdiff = 12 * acoszeit / pi # KORREKT!
zeitgleich = -0.170869921174742 * math.sin(0.0336997028793971 * T + 0.465419984181394) - 0.129890681040717 * math.sin(0.0178674832556871 * T - 0.167936777524864)
aufgang = 12 - zeitdiff - zeitgleich - (posLaenge / 15) + zoneinfo
untergang = 12 + zeitdiff - zeitgleich - (posLaenge / 15) + zoneinfo
# Ausgabe der Zwischenergebnisse
print(f"Sonnendeklination: {sonnendekl}")
print(f"Arccosint: {arccosint}")
print(f"Arc2cosint: {arc2cosint}")
print(f"Acoszeit: {acoszeit}")
print(f"Zeitdiff: {zeitdiff}")
print(f"Zeitgleich: {zeitgleich}")
print(f"Aufgang (vor Formatierung): {aufgang}")
print(f"Untergang (vor Formatierung): {untergang}")
# Formatierung
AufgangStunde, AufgangMinute = divmod(int(aufgang * 60), 60)
UntergangStunde, UntergangMinute = divmod(int(untergang * 60), 60)
# Aktualisierte Korrektur
if AufgangStunde == 24:
AufgangStunde = 0
if UntergangStunde == 24:
UntergangStunde = 0
# Ausgabe der finalen Ergebnisse
print(f"Aufgang (hh:mm): {AufgangStunde:02d}:{AufgangMinute:02d}")
print(f"Untergang (hh:mm): {UntergangStunde:02d}:{UntergangMinute:02d}")
Bash:
# Unsere Position
posLaenge="10.8"
posBreite="53.8"
# Notwendige Vorberechnungen
zoneinfo=$(date +%z) # Zeitzone
T=`date +%j` # Tag im Jahr
pi="3.14159265358979323844" # pi=`echo "4*a(1)" | bc -l`
rad=$(echo "${pi}/180" | bc -l)
h=$(echo "-(5/6)*(${rad})" | bc -l) # Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion
BreiteRAD=$(echo "${posBreite}*${rad}" | bc -l)
# Welcher Tag ist heute?
#echo "Heute ist $(date +%d.%m.%y), der $(date +%j). Tag im Jahr"
#echo -n "Wir nutzen die Zeitzone $(date +%Z), dies entspricht $(date +%z) und damit "
#echo "${zoneinfo:0:3}"
sonnendekl=`echo "0.409526325277017*s(0.0169060504029192*(${T}-80.0856919827619))" | bc -l`
sonnendeklDEG=$(echo "${sonnendekl} / ${rad}" | bc -l)
arccosint=$(echo "(s(${h})-s(${BreiteRAD})*s(${sonnendekl}))/(c(${BreiteRAD})*c(${sonnendekl}))" | bc -l)
arccosintsign=${arccosint:0:1}
if [ ${arccosintsign} == "-" ]; then
usesign="+"
else
usesign="-"
fi
arc2cosint=$(echo "(${arccosint}) * (${arccosint})" | bc -l)
acoszeit=$(echo "${pi}/2 ${usesign} a(sqrt(${arc2cosint} / (1 - (${arc2cosint}) ) ) ) " | bc -l)
zeitdiff=$(echo "12*${acoszeit}/${pi}" | bc -l) # KORREKT!
zeitgleich=$(echo "-0.170869921174742*s(0.0336997028793971 * ${T} + 0.465419984181394) - 0.129890681040717*s(0.0178674832556871*${T} - 0.167936777524864)" >
aufgang=$(echo "12-(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)
untergang=$(echo "12+(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l)
if [ ${aufgang:1:1} == "." ]; then
# Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne
aufgang=$(echo 0${aufgang})
fi
# Fuer unsere Breitengrade ueberfluessig, nur der Vollstaendigkeit halber:
#if [ ${untergang:1:1} == "." ]; then
# Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne
# untergang=$(echo 0${untergang})
#fi
# Umrechnung in Stunden (trivial) und Minuten (runden!)
AufgangMinute=$(echo "(${aufgang} - ${aufgang:0:2}) * 60" | bc | xargs printf "%02.0f\n")
if [ ${AufgangMinute} == "60" ]; then
AufgangMinute="00"
AufgangStunde=$(echo "${aufgang:0:2} + 1" | bc | xargs printf "%02.0f")
else
AufgangStunde=${aufgang:0:2}
fi
echo "Aufgang (hh:mm): ${AufgangStunde}:${AufgangMinute}" # Immer ein zweistelliges Ergebnis
UntergangMinute=$(echo "(${untergang} - ${untergang:0:2}) * 60" | bc | xargs printf "%02.0f\n")
if [ ${UntergangMinute} == "60" ]; then
UntergangMinute="00"
UntergangStunde=$(echo "${untergang:0:2} + 1" | bc | xargs printf "%02.0f")
else
UntergangStunde=${untergang:0:2}
fi
echo "Untergang (hh:mm): ${UntergangStunde}:${UntergangMinute}" # Immer ein zweistelliges Ergebnis
No Comments