Guten Morgen,
ich habe mir ein eigenen Skript geschrieben umd die UZSU zu einem Zeitfenster zu bewegen. Im Kern gleiche ich die Sunshine ab und schalte 4 Zeiten ( 2* an und 2* aus)
Jetzt habe ich diverse Lampen, die ich gerne mit dem Skript zu verschiedenen Zeiten ansteuern will.
Da ich im Skript nicht für jede Lampe einen eigenen ITEM hinterlegen will und auch noch diverse Anfangszeiten definiere habe ich mir überlegt, ob aus der LOGIC-Conf noch weitere Parameter wie z.B. Anschaltzeit und Item herausgelesen werden können. Bin aber gescheitert.
In der Plugin geht das, aber ein eigenen Plugin.conf will ich daraus nicht machen.
Wie konkret müsste ich denn weitere Parameter defninieren und abfragen? Any Ideas?
Beispielcode aus Logic.conf:
Der Skript:
ich habe mir ein eigenen Skript geschrieben umd die UZSU zu einem Zeitfenster zu bewegen. Im Kern gleiche ich die Sunshine ab und schalte 4 Zeiten ( 2* an und 2* aus)
Jetzt habe ich diverse Lampen, die ich gerne mit dem Skript zu verschiedenen Zeiten ansteuern will.
Da ich im Skript nicht für jede Lampe einen eigenen ITEM hinterlegen will und auch noch diverse Anfangszeiten definiere habe ich mir überlegt, ob aus der LOGIC-Conf noch weitere Parameter wie z.B. Anschaltzeit und Item herausgelesen werden können. Bin aber gescheitert.
In der Plugin geht das, aber ein eigenen Plugin.conf will ich daraus nicht machen.
Wie konkret müsste ich denn weitere Parameter defninieren und abfragen? Any Ideas?
Beispielcode aus Logic.conf:
Code:
[Aussen_Schriftzug] filename=aussenbeleuchtung_schriftzug.py watch_item=pi|zeit.schriftzug.schalter visu_acl=yes crontab = init | 1 0 * * ## minute stunde tag wochentag
Der Skript:
Code:
#!/usr/bin/env python
## AUSLÖSEN VON CRONJOB
## TRIGGER AUF watch_item=feiertag.valarm ( 0/2/3)
import logging, datetime, time, string
def schaltitem(sh,SCHALTITEMS):
sh.zeit.hqi.schalter.uhr(SCHALTITEMS)
def schaltzeiten():
MORGEN_START = '7:00'
MORGEN_ENDE = '9:00'
ABEND_START = '16:30'
ABEND_ENDE = '21:00'
TIME_OFFSET = '1:00'
return (MORGEN_START, MORGEN_ENDE, ABEND_START, ABEND_ENDE, TIME_OFFSET)
def time2int(eingabe):
if ':' in eingabe:
hour = int(eingabe.split(':')[0])
minute = int(eingabe.split(':')[1])
else:
hour = int(eingabe)
val = hour *60 + minute
return val
def int2dt_object(eingabe, DATUM):
if ':' in eingabe:
hour = int(eingabe.split(':')[0])
minute = int(eingabe.split(':')[1])
else:
hour = int(eingabe)
dt_object = datetime.datetime(int(DATUM.strftime('%Y')),int(DATUM.strftime('%m')),int(DATUM.strftime('%d')),hour,minute,0) #Morgenschaltung
return dt_object
def sun_prf(sun, vglw):
SRISE_TUP=time.mktime((sun.year,sun.month,sun.day,sun.hour,sun.minute,sun.second,0,0,0))
START_TUP=time.mktime((vglw.year,vglw.month,vglw.day,vglw.hour,vglw.minute,0,0,0,0))
DIFF=START_TUP-SRISE_TUP
return DIFF
mylogger = logging.getLogger('')
mylogger.info("Programmstart")
## notwendige DATEN: Feiertag, Feiertag-VA, Dämmerung, morgens an, morgens aus, abens an, abends aus
## morgens an modifizieren,
## abends aus modifizieren
##Daemmerng (4/0/8) aussen.daemmerung
## Logik läuft täglich um 0:01 Uhr
#if sh.pi()== 0: sys.exit() #abbruch wenn pi auf 0, sonst zuviele Zustandsmails
log=''
MORGEN_START, MORGEN_ENDE, ABEND_START, ABEND_ENDE, TIME_OFFSET = schaltzeiten()
MORGEN_ON_ACTIVE =True
ABEND_ON_ACTIVE =True
MORGEN_OFF_ACTIVE =True
ABEND_OFF_ACTIVE =True
#BERECHNEN und FORMATIEREN....
DATUM = datetime.datetime.now()
SRISE = sh.sun.rise().astimezone(sh.tzinfo()) #Sunrse
SSET = sh.sun.set().astimezone(sh.tzinfo()) #SunSet
MORGEN_ZF_START = int2dt_object(MORGEN_START , DATUM)
MORGEN_ZF_ENDE = int2dt_object(MORGEN_ENDE , DATUM)
MORGEN_AUS = int2dt_object(MORGEN_ENDE , DATUM)
ABEND_ZF_START = int2dt_object(ABEND_START , DATUM)
ABEND_ZF_ENDE = int2dt_object(ABEND_ENDE , DATUM)
ABEND_AUS = int2dt_object(ABEND_ENDE , DATUM)
OFFSET = time2int(TIME_OFFSET)
# verschieben um eine Stunde bei Feiertag Voralarm
if sh.feiertag.alarm() == 1:
MORGEN_ZF_START = MORGEN_ZF_START + datetime.timedelta(minutes=OFFSET)
mylogger.debug('Feiertag-ALARM, ANFANG um ' + str(OFFSET) + ' Minuten verschoben auf ' + MORGEN_ZF_START.strftime('%H:%M'))
DIFF = sun_prf(SRISE,MORGEN_ZF_START)
mylogger.debug( 'STARTZeit:' + MORGEN_ZF_START.strftime('%H:%M ') +' SUNRISE ' + SRISE.strftime('%H:%M'))
if DIFF < 0: # von Sonnenaufgang bis STARTZEIT und SUNRISE Start unterdrücken.
mylogger.debug('Morgens Hysterese erreicht oder SunRise zur früh, Logik inaktiv')
MORGEN_ON_ACTIVE=False
#Hier ABEND
if sh.feiertag.valarm() == 1:
ABEND_ZF_ENDE = ABEND_ZF_ENDE + datetime.timedelta(minutes=OFFSET)
ABEND_AUS = ABEND_AUS + datetime.timedelta(minutes=OFFSET)
mylogger.debug('Feiertag-Voralarm, ENDE um ' + str(OFFSET) + ' Minuten verschoben auf ' + ABEND_ZF_ENDE.strftime('%H:%M'))
DIFF = sun_prf(SSET,ABEND_ZF_ENDE)
mylogger.debug( 'Endzeit Abends:' + str(ABEND_ZF_ENDE) +' Sunset ' + str(SSET))
if DIFF < 0:
mylogger.debug('Abend Sunset ausserhalb Zeitfenster, bleibt aus')
#DIFFERENZ Ausschaltzeit(21.00) zu Sunset 2016-05-19 21:04:38.372872+02:00 ist -278.0 in sekunden -- aussenbeleuchtung.py:<module>:61
ABEND_ON_ACTIVE=False
#Werte in den notwendigen String konvertieren....
MORGEN=MORGEN_ZF_START.strftime('%H:%M') + '<sunrise<' + MORGEN_ZF_ENDE.strftime('%H:%M')
mylogger.debug(MORGEN)
ABEND = ABEND_ZF_START.strftime('%H:%M') + '<sunset<' + ABEND_ZF_ENDE.strftime('%H:%M')
mylogger.debug(ABEND)
MORGEN_ENDEE = MORGEN_AUS.strftime('%H:%M')
ABEND_ENDE = ABEND_AUS.strftime('%H:%M')
L1={'active':MORGEN_ON_ACTIVE, 'time':MORGEN, 'value':'on' }
L2={'active':MORGEN_OFF_ACTIVE, 'time':MORGEN_ENDEE, 'value':'off'}
L3={'active':ABEND_ON_ACTIVE, 'time':ABEND, 'value':'on' }
L4={'active':ABEND_OFF_ACTIVE, 'time':ABEND_ENDE, 'value':'off'}
SCHALTITEMS = {'active':True, 'list':[L1,L2,L3,L4]}
log+='Zustand Schalter: ' + str(sh.pi()) + '\n\n'
log=log.replace('False','AUS')
if sh.feiertag.alarm() == 1:
log += 'Feitertag-Alarm' + sh.feiertag.name() + '\n\n'
log += 'Schaltzeit 1:' + str(L1)+ '\nSUNRISE:' + str(SRISE) + '\n\n'
log += 'Schaltzeit 2:' +str(L2) + '\n\n'
if sh.feiertag.valarm() == 1:
log += 'Feiertag-Voralarm ' + sh.feiertag.vname() + '\n'
log += 'Schaltzeit 3:' +str(L3)+ '\nSUNSET:' + str(SSET) + '\n\n'
log += 'Schaltzeit 4:' +str(L4)
log = log.replace('sunrise','sunrise (' + SRISE.strftime('%H:%M') + ')')
log = log.replace('sunset', 'sunset (' + SSET.strftime('%H:%M') + ')')
schaltitem(sh,SCHALTITEMS)
sh.mail("Peter.Hoegg@Allianz.de", "Schaltzeiten-Vorgabe HQI Außen", log)
sh.pi(0)


Kommentar