Hallo,
ich habe ein Python-Skript im Internet gefunden, womit man für einen gewünschten Tag den Sonnenaufgang und den Sonnenuntergang berechnen kann.
Da ich aber für eine Woche gerne diese Zeiten hätte, habe ich das Skript erweitert und die jeweiligen Zeiten in ein Dictionary geschrieben.
Das habe ich dann auf dem Pi umgesetzt und ausgeführt.
Ich habe keine Fehlermeldung bekommen, nur leider wird jedes mal für unterschiedliche Tage unterschiedliche Zeiten berechnet. Das ist naturlich nicht richtig und ich weiß leider nicht woran das liegt.
Ich habe ein RasPi Model B Rev2, worauf Raspbian 9 läuft.
Ich habe das Skript auch nochmal mit Visual Studio ausgeführt und dort hat es immer die richtigen Werte ausgegeben.
Anbei noch Skript und ein Screenshot von ein paar Ausgaben.
Auf dem Screenshot sieht man auch dass die ersten Ausgaben immer die gleichen Zeiten haben, was mich auch zum Stutzen gebracht hat....
Vielen Dank für Hilfe
Gruß
# Formel von Dr. Roland Brodbeck, Calsky
# http://lexikon.astronomie.info/zeitgleichung/neu.html
# Uebertragung auf Python 3 von Alexander Klupp 2014-01-14
import time
from datetime import timedelta , datetime
import math
pi2 = 2*math.pi
pi = math.pi
RAD = math.pi/180
def JulianischesDatum (Jahr, Monat, Tag, Stunde, Minuten, Sekunden):
if (Monat <= 2):
Monat = Monat + 12
Jahr = Jahr - 1
Gregor = (Jahr/400) - (Jahr/100) + (Jahr/4) # Gregorianischer Kalender
return 2400000.5 + 365 * Jahr - 679004 + Gregor \
+ math.floor(30.6001*(Monat + 1)) + Tag + Stunde/24 \
+ Minuten/1440 + Sekunden/86400
def InPi(x):
n = int(x/pi2)
x = x - n*pi2
if (x < 0):
x += pi2
return x
def eps(T): # Neigung der Erdachse
return RAD*(23.43929111 + (-46.8150*T - 0.00059*T**2 + 0.001813*T**3)/3600)
def BerechneZeitgleichung(T):
RA_Mittel = 18.71506921 + 2400.0513369*T +(2.5862e-5 - 1.72e-9*T)*T**2
M = InPi(pi2*(0.993133 + 99.997361*T))
L = InPi(pi2*(0.7859453 + M/pi2 \
+ (6893*math.sin(M) + 72*math.sin(2*M) + 6191.2*T) / 1296e3))
e = eps(T)
RA = math.atan(math.tan(L)*math.cos(e))
if (RA < 0):
RA += pi
if (L > pi):
RA += pi
RA = 24*RA/pi2
DK = math.asin(math.sin(e)*math.sin(L))
#Damit 0 <= RA_Mittel < 24
RA_Mittel = 24.0*InPi(pi2*RA_Mittel/24.0)/pi2
dRA = RA_Mittel - RA
if (dRA < -12.0):
dRA += 24.0
if (dRA > 12.0):
dRA -= 24.0
dRA = dRA* 1.0027379
return dRA, DK
JD2000 = 2451545
h = -50.0/60.0*RAD
B = math.radians(52.194306) # geographische Breite
GeographischeLaenge = 0.134685 # geographische Laenge
def Sonnenauf_untergang (JD, Zeitzone):
# Zeitzone = 0 #Weltzeit
# Zeitzone = 1 #Winterzeit
# Zeitzone = 2 #Sommerzeit
# JD = JulianischesDatum
T = (JD - JD2000)/36525
Zeitgleichung, DK = BerechneZeitgleichung(T)
Minuten = Zeitgleichung*60
Zeitdifferenz = 12*math.acos((math.sin(h) - math.sin(B)*math.sin(DK)) \
/ (math.cos(B)*math.cos(DK)))/pi
AufgangOrtszeit = 12 - Zeitdifferenz - Zeitgleichung
UntergangOrtszeit = 12 + Zeitdifferenz - Zeitgleichung
AufgangWeltzeit = AufgangOrtszeit - GeographischeLaenge/15
UntergangWeltzeit = UntergangOrtszeit - GeographischeLaenge/15
Aufgang = AufgangWeltzeit + Zeitzone
if (Aufgang < 0):
Aufgang += 24
elif (Aufgang >= 24):
Aufgang -= 24
AM = round(Aufgang*60)/60 # minutengenau runden
Untergang = UntergangWeltzeit + Zeitzone
if (Untergang < 0):
Untergang += 24
elif (Untergang >= 24):
Untergang -= 24
UM = round(Untergang*60)/60 # minutengenau runden
return AM, UM
aktuelleZeit = time.localtime() # Aktuelle, lokale Zeit als Tupel
# Entpacken des Tupels
jahr, monat, tag = aktuelleZeit[0:3] # Datum
print(jahr)
print(monat)
print(tag)
dst = aktuelleZeit[8]
if dst == 1:
print("Sommerzeit")
elif dst == 0:
print("Winterzeit")
else:
print("Keine Sommerzeitinformation vorhanden")
dict_Sonnenaufgang = {'Montag':'00:00', 'Dienstag':'00:00', 'Mittwoch':'00:00', 'Donnerstag':'00:00' , 'Freitag':'00:00',
'Samstag':'00:00', 'Sonntag':'00:00', }
dict_Sonnenuntergang = {'Montag':'00:00', 'Dienstag':'00:00', 'Mittwoch':'00:00', 'Donnerstag':'00:00' , 'Freitag':'00:00',
'Samstag':'00:00', 'Sonntag':'00:00', }
print("Heute ist der {0:02d}.{1:02d}.{2:4d}".
format(tag, monat, jahr))
def loadAstrozeit():
i = 0 - aktuelleZeit[6] # Wochentag
for key, value in dict_Sonnenaufgang.items():
print(i)
tag = datetime.now() + timedelta(days = i)
pos = str(tag).find(" ")
datum = str(tag)[0:pos]
jahr, monat, tag = datum.split("-")
r_sonnenaufgang, r_sonnenuntergang = Sonnenauf_untergang (JulianischesDatum(int(jahr), int(monat), int(tag), 12, 0, 0), dst + 1)
sonnenaufgang_Stunden = int(math.floor(r_sonnenaufgang))
sonnenaufgang_Minuten = int((r_sonnenaufgang - sonnenaufgang_Stunden)*60)
sonnenuntergang_Stunde = int(math.floor(r_sonnenuntergang))
sonnenuntergang_Minuten = int((r_sonnenuntergang - sonnenuntergang_Stunde)*60)
sonnenaufgang = str(sonnenaufgang_Stunden) + ":" + str(sonnenaufgang_Minuten)
sonnenuntergang = str(sonnenuntergang_Stunde) + ":" + str(sonnenuntergang_Minuten)
dict_Sonnenaufgang[key] = sonnenaufgang
dict_Sonnenuntergang[key] = sonnenuntergang
i += 1
#Später woander verlagern
loadAstrozeit()
def getAstrozeit(tag):
wochentag = aktuelleZeit[6]
heute = "temp"
morgen = "temp"
if wochentag == 0:
heute = "Montag"
morgen = "Dienstag"
elif wochentag == 1:
heute = "Dienstag"
morgen = "Mittwoch"
elif wochentag == 2:
heute = "Mittwoch"
morgen = "Donnerstag"
elif wochentag == 3:
heute = "Donnerstag"
morgen = "Freitag"
elif wochentag == 4:
heute = "Freitag"
morgen = "Samstag"
elif wochentag == 5:
heute = "Samstag"
morgen = "Sonntag"
else:
heute = "Sonntag"
morgen = "Montag"
if tag == "heute":
sonnenaufgang = dict_Sonnenaufgang[heute]
sonnenuntergang = dict_Sonnenuntergang[heute]
print(sonnenaufgang, sonnenuntergang)
return sonnenaufgang, sonnenuntergang
elif tag == "morgen":
sonnenaufgang = dict_Sonnenaufgang[morgen]
sonnenuntergang = dict_Sonnenuntergang[morgen]
return sonnenaufgang, sonnenuntergang
print(dict_Sonnenaufgang)
print(dict_Sonnenuntergang)
Alles anzeigen