spdxl/www-sq7br/SONDY/predict_to_map.py

172 wiersze
6.0 KiB
Python
Executable File

#!/usr/bin/python
import sys
import math
import os
from collections import namedtuple
import time
import datetime
import optparse
import logging
scriptPath = os.path.realpath(os.path.dirname(sys.argv[0]))
os.chdir(scriptPath)
sys.path.append("py")
from libhabhub import HabHub
posTuple=namedtuple('pos','lat lon alt')
flyTuple=namedtuple('fly','burstAlt asc desc')
predictParamTuple=namedtuple('predictParam','pos fly1 fly2 fly3')
spaHourStartTuple=namedtuple('SpaHourStart','hour spaName predictParam')
wroclawPos =posTuple(51.114, 16.882, 120)
legionowoPos =posTuple(52.408, 20.956, 100)
lindenbergPos =posTuple(52.209, 14.122, 115)
prosciejowPos =posTuple(49.452, 17.135, 216)
greifswaldPos =posTuple(54.097, 13.406, 0)
pragaPos =posTuple(50.008, 14.448, 420)
glinnikPos =posTuple(49.452, 17.135, 216)
powidzPos =posTuple(49.452, 17.135, 216)
rudniki =posTuple(49.452, 17.135, 216)
maxFly =flyTuple(33500, 5.6, 10)
stdFly =flyTuple(32000, 5.6, 10)
lowFly =flyTuple(28000, 5.6, 10)
chuteMaxFly =flyTuple(33500, 5.2, 4)
chuteStdFly =flyTuple(32000, 5.2, 4)
chuteLowFly =flyTuple(28000, 5.2, 4)
maxOzoneFly =flyTuple(33500, 5.6, 10)
stdOzoneFly =flyTuple(32000, 5.6, 10)
lowOzoneFly =flyTuple(28000, 5.6, 10)
chuteOzoneMaxFly =flyTuple(33500, 5.2, 4)
chuteOzoneStdFly =flyTuple(32000, 5.2, 4)
chuteOzoneLowFly =flyTuple(28000, 5.2, 4)
flightList=[
spaHourStartTuple('11:20', 'Wroclaw_12z', predictParamTuple(wroclawPos, maxFly, stdFly, lowFly))
,spaHourStartTuple('23:20', 'Wroclaw_0z', predictParamTuple(wroclawPos, maxFly, stdFly, lowFly))
,spaHourStartTuple('11:20', 'Legionowo_12z', predictParamTuple(legionowoPos, maxFly, stdFly, lowFly))
,spaHourStartTuple('23:20', 'Legionowo_0z', predictParamTuple(legionowoPos, maxFly, stdFly, lowFly))
,spaHourStartTuple('23:50', 'Lindenberg_0z', predictParamTuple(lindenbergPos, chuteMaxFly, chuteStdFly, chuteLowFly))
,spaHourStartTuple('05:50', 'Lindenberg_6z', predictParamTuple(lindenbergPos, chuteMaxFly, chuteStdFly, chuteLowFly))
,spaHourStartTuple('12:50', 'Lindenberg_12z', predictParamTuple(lindenbergPos, chuteMaxFly, chuteStdFly, chuteLowFly))
,spaHourStartTuple('17:50', 'Lindenberg_18z', predictParamTuple(lindenbergPos, chuteMaxFly, chuteStdFly, chuteLowFly))
#,spaHourStartTuple('22:07', 'test', predictParamTuple(prosciejowPos, maxFly, stdFly, lowFly))
]
def predictFlight(spaName, lat, lon, alt, burstAlt, asc, desc):
logging.debug('predictFlight {} {} {} m. burst {} m. asc. {} desc -{}'.format(lat, lon, alt, burstAlt, asc, desc))
tekst=""
predict=HabHub(lat, lon, alt, burstAlt, asc, desc)
predict.getPredictPath();
tekst+= 'burst,{},{},{},{},{},{}\n'.format(
spaName,
burstAlt,
predict.burstPoint.t,
predict.burstPoint.lt,
predict.burstPoint.ln,
predict.burstPoint.at
)
tekst+= 'land,{},{},{},{},{},{}\n'.format(
spaName,
burstAlt,
predict.landPoint.t,
predict.landPoint.lt,
predict.landPoint.ln,
predict.landPoint.at
)
return tekst
def cyclicPredict(predictParam,spaName):
### first predict
tekst= predictFlight(spaName, predictParam.pos.lat, predictParam.pos.lon, predictParam.pos.alt, predictParam.fly1.burstAlt, predictParam.fly1.asc, predictParam.fly1.desc)
tekst+=predictFlight(spaName, predictParam.pos.lat, predictParam.pos.lon, predictParam.pos.alt, predictParam.fly2.burstAlt, predictParam.fly2.asc, predictParam.fly2.desc)
tekst+=predictFlight(spaName, predictParam.pos.lat, predictParam.pos.lon, predictParam.pos.alt, predictParam.fly3.burstAlt, predictParam.fly3.asc, predictParam.fly3.desc)
return tekst
def cyclicClean(f):
czas=format(datetime.datetime.now()+datetime.timedelta(hours=-3),"%Y-%m-%d %H:%M:%S")
tekstn=""
new_f=f.readlines()
f.seek(0)
for linia in new_f:
dane=linia.split(",")
if (dane[3] > czas):
f.write(linia)
f.truncate()
return tekstn
def loopPredict(fileName):
#print "loop"
logging.debug('loopPredict: fileName {}'.format(fileName))
tekst=""
czasold=""
if not os.path.isfile(fileName):
logging.debug('loopPredict: fileName {} - not exists - create'.format(fileName))
with open(fileName, 'w+') as f:
f.closed
while True:
czas= datetime.datetime.fromtimestamp(time.time()).strftime("%H:%M")
if ( czas <> czasold):
logging.info('czas: {}'.format(czas))
with open(fileName, 'r+') as f:
cyclicClean(f)
for flight in flightList:
if ( flight.hour == czas ):
logging.debug('start predict for point: {}/{}'.format(flight.predictParam.pos.lat,flight.predictParam.pos.lon))
linia=cyclicPredict(flight.predictParam,flight.spaName)
logging.debug('linia: {}'.format(linia))
f.write(str(linia))
tekst+=linia
f.closed
czasold=czas
return
LOGGING_LEVELS = {'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG}
def main(args):
#print "main"
file=args[1]
#if not os.path.isfile(file):
parser = optparse.OptionParser()
parser.add_option('-l', '--logging-level', help='Logging level')
parser.add_option('-f', '--logging-file', help='Logging file name')
(options, args) = parser.parse_args()
logging_level = LOGGING_LEVELS.get(options.logging_level, logging.NOTSET)
logging.basicConfig(level=logging_level, filename=options.logging_file,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
loopPredict(file)
return
if __name__ == '__main__':
main(sys.argv)