$! File: KIDDY$DKA0:[MICHEL.LGB.AUTO]START_LIGHTS_ON.COM $! Bestimme Sonnenuntergangszeit fuer heute und Sonnenaufgangszeit fuer morgen $! Starte zum entsprechenden Zeitpunkt (Mitte der jeweiligen buergerlichen $! Daemmerung) die Prozeduren zum Licht Ein- und Ausschalten. $! Moegliche Parameter: $! P1 - Datum, DD-MMM-YYYY $! P2 - Laengen und Breitengrad, LL.LL,BB.BB $! $! Initialisierung und gleich wieder in die Q fuer morgen... $! $ OFFCYC = 0 $ SUBMIT/KEEP/RESTART/NOPRINT/QUEUE=LGB$BATCH - /LOG=KIDDY$DKA0:[MICHEL.LGB.AUTO]START_LIGHTS_ON.LOG/AFTER=TOMORROW - 'F$ENVI("PROCEDURE")' $ PURGE/LOG/KEEP=2 KIDDY$DKA0:[MICHEL.LGB.AUTO]*.LOG $! $! Zunaechst Parameter hinsichtlich Datum, Ort und deren Darstellung festlegen $! $ START: $ IF OFFCYC THEN P1 = F$CVT("''DT'+1-","ABSOLUTE","DATE") $ IF P1 .EQS. "?" $ THEN $ WRITE SYS$OUTPUT "P1 = DD-MMM-YYYY - Datum" $ WRITE SYS$OUTPUT "P2 = LL.LL,BB.BB - Laengen-,Breitengrad" $ EXIT $ ENDIF $ YEA = F$CVTIME(P1,,"YEAR") $ MON = F$CVTIME(P1,,"MONTH") $ DAY = F$CVTIME(P1,,"DAY") $ P1 = "''YEA',''MON',''DAY'" $ DST = 0 $ IF P2 .EQS. "" THEN P2 = "9.9948055,54.1111388" $ OL = F$ELEMENT(0,",",P2) $ NB = F$ELEMENT(1,",",P2) $ YEA = F$ELEMENT(0,",",P1) $! $! Ueber julianisches Datum den Tag des Jahres zum Datum festlegen $! $ PIPE ICA CALTOJUL('P1')-CALTOJUL('YEA',01,01)+1 | (READ SYS$INPUT RESULT ; DEFINE/JOB DOY &RESULT) $ DOY = F$INTEGER(F$EDIT(F$TRNLNM("DOY"),"TRIM")) $ DEASS/JOB DOY $! $! Zeitgleichung (Differenz zwischen wahrer und mittlerer Ortszeit $! $ PIPE ICA -0.1752*SIN((0.03343*'DOY')+0.5474)-0.134*SIN((0.018234*'DOY')-0.1939) | (READ SYS$INPUT RESULT ; DEFINE/JOB WMOZ &RESULT) $ WMOZ = F$EDIT(F$TRNLNM("WMOZ"),"TRIM") $ DEASS/JOB WMOZ $! $! Deklination der Sonne $! $ PIPE ICA 0.40954*SIN(0.0172*('DOY'-79.34974)) | (READ SYS$INPUT RESULT ; DEFINE/JOB DECL &RESULT) $ DECL = F$EDIT(F$TRNLNM("DECL"),"TRIM") $ DEASS/JOB DECL $ PI = "3.141592653589" $! $! Zeitdifferenz zwischen wahrem Mittag und dem Erscheinen der Sonne unter $! den Winkeln -50' und -6° (optischer Untergang und buergerliche Daemmerung) $! $ PIPE ICA 12*ACOS((SIN(-0.0145)-SIN(DEGTORAD('NB'))*SIN('DECL'))/(COS(DEGTORAD('NB'))*COS('DECL')))/'PI' | (READ SYS$INPUT RESULT ; DEFINE/JOB DIFF &RESULT) $ PIPE ICA 12*ACOS((SIN(DEGTORAD(-6))-SIN(DEGTORAD('NB'))*SIN('DECL'))/(COS(DEGTORAD('NB'))*COS('DECL')))/'PI' | (READ SYS$INPUT RESULT ; DEFINE/JOB BDIFF &RESULT) $ DIFF = F$EDIT(F$TRNLNM("DIFF"),"TRIM") $ BDIFF = F$EDIT(F$TRNLNM("BDIFF"),"TRIM") $ DEASS/JOB DIFF $ DEASS/JOB BDIFF $! $! Kleine Korrektur der Zeitdifferenz mit Wirkung nur um den 21.09. $! $ COY = 0 $ IF DOY .GE. 182 .AND. DOY .LE. 355 $ THEN $ COY = DOY - 182 $ IF COY .GE. 83 .AND. COY .LE. 97 $ THEN $ PIPE ICA 'COY'*0.5 | (READ SYS$INPUT RESULT ; DEFINE/JOB TMP &RESULT) $ COY = F$EDIT(F$TRNLNM("TMP"),"TRIM") $ DEASS/JOB TMP $ ENDIF $ PIPE ICA SIN(DEGTORAD('COY'))/6 | (READ SYS$INPUT RESULT ; DEFINE/JOB TMP &RESULT) $ COY = F$EDIT(F$TRNLNM("TMP"),"TRIM") $ DEASS/JOB TMP $ ENDIF $! $! Auf- und Untergang in mittlerer Ortszeit $! $ PIPE ICA (12 + 'DIFF' - 'WMOZ' + (15-'OL') *4 / 60) + 'COY' | (READ SYS$INPUT RESULT ; DEFINE/JOB SU &RESULT) $ SU = F$EDIT(F$TRNLNM("SU"),"TRIM") $ DEASS/JOB SU $ PIPE ICA (12 - 'DIFF' - 'WMOZ' + (15-'OL') *4 / 60) - 'COY' | (READ SYS$INPUT RESULT ; DEFINE/JOB SA &RESULT) $ SA = F$EDIT(F$TRNLNM("SA"),"TRIM") $ DEASS/JOB SA $! $! Darstellung der Zeiten in HH:MM $! $ SUH = F$ELEMENT(0,".",SU) $ SUM = F$EXTRACT(0,3,F$ELEMENT(1,".",SU)) $ PIPE ICA 'SUM' / 1000 * 60 | (READ SYS$INPUT RESULT ; DEFINE/JOB SUM &RESULT) $ SUM = F$EXTRACT(0,2,F$EDIT(F$TRNLNM("SUM"),"TRIM")) $ DEASS/JOB SUM $ IF F$LOCATE(".",SUM) .NE. F$LENGTH(SUM) THEN SUM = "0''F$EXTRACT(0,1,SUM)'" $ IF F$LENGTH(SUM) .EQ. 1 THEN SUM = "0''SUM'" $ SAM = F$EXTRACT(0,3,F$ELEMENT(1,".",SA)) $ PIPE ICA 'SAM' / 1000 * 60 | (READ SYS$INPUT RESULT ; DEFINE/JOB SAM &RESULT) $ SAM = F$EXTRACT(0,2,F$EDIT(F$TRNLNM("SAM"),"TRIM")) $ IF F$LOCATE(".",SAM) .NE. F$LENGTH(SAM) THEN SAM = "0''F$EXTRACT(0,1,SAM)'" $ DEASS/JOB SAM $! $! Buergerliche Daemmerungen in mittlerer Ortszeit $! $ PIPE ICA (12 + 'BDIFF' - 'WMOZ') + (15-'OL') *4 / 60 | (READ SYS$INPUT RESULT ; DEFINE/JOB SUD &RESULT) $ SUD = F$EDIT(F$TRNLNM("SUD"),"TRIM") $ DEASS/JOB SUD $ PIPE ICA (12 - 'BDIFF' - 'WMOZ') + (15-'OL') *4 / 60 | (READ SYS$INPUT RESULT ; DEFINE/JOB SAD &RESULT) $ SAD = F$EDIT(F$TRNLNM("SAD"),"TRIM") $ DEASS/JOB SAD $! $! Datum in absolutes Format wandeln $! $ YEA = F$ELEMENT(0,",",P1) $ MON = F$ELEMENT(1,",",P1) $ DAY = F$ELEMENT(2,",",P1) $ MONLIST = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC" $ MON = F$ELEMENT(F$INTEGER(MON)-1,",",MONLIST) $ DT = "''DAY'-''MON'-''YEA'" $ WD = F$CVTIME(DT,,"WEEKDAY") $! $! Beginn und Ende der Sommerzeit berechnen $! $ DCT = 0 $ DOS = "" $ WDL = "Sunday,Saturday,Friday,Thursday,Wednesday,Tuesday,Monday" $ GDL: $ IF F$ELEMENT(DCT,",",WDL) .EQS. F$CVT("25-MAR-''YEA'",,"WEEKDAY") THEN DOS = DCT + 25 $ DCT = DCT + 1 $ IF DOS .EQS. "" THEN GOTO GDL $ DOYSTART = "''YEA',03,''DOS'" $ AUT = 217 $ IF DCT .GE. 5 THEN AUT = 210 $ DOYEND = F$CVT("''DOS'-MAR-''YEA'+''AUT'-",,"DAY") $ DOYEND = "''YEA',10,''DOYEND'" $! $! Tage des Jahres fuer Sommerzeitbeginn und - ende festlegen $! $ PIPE ICA CALTOJUL('DOYSTART') - CALTOJUL('YEA',01,01)+1 | (READ SYS$INPUT RESULT ; DEFINE/JOB DOYS &RESULT) $ DOYS = F$INTEGER(F$EDIT(F$TRNLNM("DOYS"),"TRIM")) $ DEASS/JOB DOYS $ PIPE ICA CALTOJUL('DOYEND') - CALTOJUL('YEA',01,01)+1 | (READ SYS$INPUT RESULT ; DEFINE/JOB DOYE &RESULT) $ DOYE = F$INTEGER(F$EDIT(F$TRNLNM("DOYE"),"TRIM")) $ DEASS/JOB DOYE $! $! Sommerzeit-Offset beruecksichtigen $! $ IF DOY .GE. DOYS .AND. DOY .LT. DOYE THEN DST = 1 $ TZSYM = "MEZ" $ IF DST THEN TZSYM = "MESZ" $ SUH = SUH + DST $ SAH = F$ELEMENT(0,".",SA) $ SAH = SAH + DST $ SAH = "0''SAH'" $! WRITE SYS$OUTPUT "''WD', ''DT'" $ $! Daemmerungszeiten in HH:MM $ $ PIPE ICA ('BDIFF' - 'DIFF') * 60 | (READ SYS$INPUT RESULT ; DEFINE/JOB DAWN &RESULT) $ DAWN = F$INTEGER(F$EXTRACT(0,2,F$EDIT(F$TRNLNM("DAWN"),"TRIM"))) $ DEASS/JOB DAWN $ DR = F$CVT("''SAH':''SAM'-0:''DAWN'",,"TIME") $ DD = F$CVT("''SUH':''SUM'+0:''DAWN'",,"TIME") $! WRITE SYS$OUTPUT "SR ''SAH':''SAM' (''TZSYM') dawn ''DR' (''TZSYM')" $! WRITE SYS$OUTPUT "SD ''SUH':''SUM' (''TZSYM') dusk ''DD' (''TZSYM')" $! $! Mitte der jeweilgen Daemmerung +/-5 Minuten als Startzeit fuer Prozeduren $! $ DIFFON = F$INTEGER(F$CVT("''DD'-''SUH':''SUM'",,"MINUTE"))/2 - 5 $ DIFFOFF = F$INTEGER(F$CVT("''SAH':''SAM'-''DR'",,"MINUTE"))/2 + 5 $ $ ONTIME = F$CVT("''SUH':''SUM'+00:''DIFFON'",,"TIME") $ OFFTIME = F$CVT("''SAH':''SAM'-00:''DIFFOFF'",,"TIME") $! $! Ein- bzw. Aus-Job in die Q, mit Daemmerungslaenge als Parameter (Laufzeit) $! $ IF .NOT. OFFCYC $ THEN $ SUBMIT/KEEP/NOPRINT/QUEUE=LGB$BATCH - /LOG=KIDDY$DKA0:[MICHEL.LGB.AUTO]LIGHTS_ON.LOG - /AFTER='ONTIME'/PARA='DIFFON' - KIDDY$DKA0:[MICHEL.LGB.AUTO]LIGHTS_ON.COM $ OFFCYC = 1 $ GOTO START $ ELSE $ SUBMIT/KEEP/NOPRINT/QUEUE=LGB$BATCH - /LOG=KIDDY$DKA0:[MICHEL.LGB.AUTO]LIGHTS_OFF.LOG - /AFTER="TOMORROW+''OFFTIME'"/PARA='DIFFOFF' - KIDDY$DKA0:[MICHEL.LGB.AUTO]LIGHTS_OFF.COM $ ENDIF