ensz.py
python-script zum Berechnen der Schaltzeiten aus einem pascal-programm
ensz.py
— 3.3 KB
Dateiinhalt
#!/usr/bin/python3
import sys
#print ('Number of arguments:', len(sys.argv), 'arguments.')
#print ('Argument List:', str(sys.argv))
if len(sys.argv) >= 2:
einaus = sys.argv[1]
else:
einaus = False
# wir wollen deutsche tagesnamen in der ausgabe:
# das setzt aber voraus, dass wir systemweit de.DE als locale installiert haben
import locale
locale.setlocale(locale.LC_ALL, '')
import datetime
import pytz
tzberlin = pytz.timezone("Europe/Berlin")
tzmet=pytz.timezone("Etc/GMT-1")
heute=datetime.datetime.now()
# als test beliebiges Datum:
#heute=datetime.datetime(2022,1,4)
# zeitzone berlin
heute_berlin=tzberlin.localize(heute)
heute_met = heute_berlin.astimezone(tzmet)
if not einaus:
print(heute_met.tzinfo,heute_berlin.tzinfo)
print(heute_berlin,heute_met)
# das pascal braucht eine zeichenkette als parameter:
pasyear=str(heute.year)
pasmonth=str(heute.month)
## startzeit ist heute 12:00 Uhr
ENSZDATE=heute_met
## letzten Tag im aktuellen Monat berechnen
lastday = ( datetime.date(ENSZDATE.year, 1 if ENSZDATE.month==12
else ENSZDATE.month+1, 1)
- datetime.timedelta(days=1)
).day
if not einaus:
print(lastday)
## daten aus pascal programm einlesen, zeiten sind in MEZ
nights=[]
import subprocess
enszproc = subprocess.Popen(['./ensz015a',pasyear,pasmonth],stdout=subprocess.PIPE)
for line in enszproc.stdout:
eintag=int(line[3:5])
austag=int(line[7:9])
ausstunde=int(line[65:67])
ausminute=int(line[68:70])
einstunde=int(line[59:61])
einminute=int(line[62:64])
nights.append([eintag,einstunde,einminute,austag,ausstunde,ausminute])
#print(nights)
for day in range(0,lastday):
# print(nights[day])
stunde_ein = nights[day][1]
stunde_aus = nights[day][4]
minute_ein = nights[day][2]
minute_aus = nights[day][5]
tag_ein = nights[day][0]
tag_aus = nights[day][3]
EIN=datetime.datetime(heute.year,heute.month,tag_ein,stunde_ein,minute_ein)
if stunde_ein == 0 and minute_ein == 0:
EIN = EIN + datetime.timedelta(days=1)
elif stunde_ein < stunde_aus and stunde_ein < 12:
EIN = EIN + datetime.timedelta(days=1)
if day+1 == lastday:
nextmonth = 1 if heute.month == 12 else heute.month + 1
nextyear = heute.year + 1 if nextmonth == 1 else heute.year
AUS=datetime.datetime(nextyear,nextmonth,tag_aus,stunde_aus,minute_aus)
else:
AUS=datetime.datetime(heute.year,heute.month,tag_aus,stunde_aus,minute_aus)
if stunde_aus > stunde_ein and stunde_ein > 16:
AUS = AUS - datetime.timedelta(days=1)
AUS_MET = tzmet.localize(AUS)
EIN_MET = tzmet.localize(EIN)
EIN_BERLIN = EIN_MET.astimezone(tzberlin)
AUS_BERLIN = AUS_MET.astimezone(tzberlin)
if einaus == 'einaus':
if EIN_BERLIN > heute_berlin:
print(EIN_BERLIN.strftime("EIN: %H:%M %Y-%m-%d,"))
if AUS_BERLIN > heute_berlin:
print(AUS_BERLIN.strftime("AUS: %H:%M %Y-%m-%d,"))
else:
print(EIN_BERLIN.strftime("EIN: %a %d. %B %H:%M"),AUS_BERLIN.strftime("AUS: %a %d. %B %H:%M"))
"""
import datetime
import pytz
d = datetime.datetime.now()
timezone = pytz.timezone("America/Los_Angeles")
d_aware = timezone.localize(d)
d_aware.tzinfo
> <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
"""
Suhler Sternfreunde