ensz.py

python-script zum Berechnen der Schaltzeiten aus einem pascal-programm

text/x-python 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))

"""