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