merge-requests/42/head
lu7did 2019-08-15 14:31:55 -03:00
parent d7f9f09018
commit 5df8a2fcbb
2 changed files with 96 additions and 14 deletions

View File

@ -72,8 +72,28 @@ def _log_level_string_to_int(log_level_string):
return log_level_int
#*-----------------------------------------------------------------------------------
#* checkAz
#* Function to compute if Az is within a given Azimuth window
#*-----------------------------------------------------------------------------------
def checkAz(Az,Azmin,Azmax):
if Az == 0:
return True
if Azmin>Azmax:
if(Az>=Azmin) or (Az<=Azmax):
return True
else:
return False
else:
if (Az>=Azmin) and (Az<=Azmax):
return True
else:
return False
#*-------------------------------------------------------------------------------
def main():
# Parse arguments
parser = argparse.ArgumentParser(
description="Automatically schedule observations on a SatNOGS station.")
@ -97,6 +117,20 @@ def main():
help="Minimum rise/set elevation [degrees; ground station default, minimum: 0, maximum: 90]",
type=float,
default=None)
#*-------------------------------------------------------------------------------------------------
#* define two new arguments to specify Az (min,max) window
#*-------------------------------------------------------------------------------------------------
parser.add_argument("-a",
"--azmin",
help="Minimum Az window [degrees; ground station default=0,maximum: 359]",
type=float,
default=None)
parser.add_argument("-A",
"--azmax",
help="Maximum Az window [degrees; ground station default=0,maximum: 359]",
type=float,
default=None)
#*--------------------------------------------------------------------------------------------------
parser.add_argument("-z",
"--horizon",
help="Force rise/set elevation to 0 degrees (overrided -r).",
@ -157,6 +191,7 @@ def main():
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# Settings
ground_station_id = args.station
if args.duration > 0.0:
length_hours = args.duration
@ -174,6 +209,18 @@ def main():
min_priority = 1.0
else:
min_priority = args.min_priority
if (args.azmin >= 0) and (args.azmin <= 360):
azmin=args.azmin
else:
azmin=0
if (args.azmax>=0) and (args.azmax<=360):
azmax=args.azmax
else:
azmax=365
cache_dir = "/tmp/cache"
schedule = not args.dryrun
only_priority = args.only_priority
@ -193,6 +240,9 @@ def main():
if not os.path.isdir(cache_dir):
os.mkdir(cache_dir)
# Printing Az window
logging.info('Az window set as Min(%3.0f) Max(%3.0f)' % (azmin,azmax))
# Update logic
update = update_needed(tnow, ground_station_id, cache_dir)
@ -322,6 +372,7 @@ def main():
# Priority scheduler
prioritypasses = sorted(prioritypasses, key=lambda satpass: -satpass['priority'])
scheduledpasses = ordered_scheduler(prioritypasses, scheduledpasses, wait_time_seconds)
for satpass in passes:
logging.debug(satpass)
@ -337,15 +388,20 @@ def main():
schedule_needed = False
logging.info("GS | Sch | NORAD | Start time | End time | El | " +
"Priority | Transmitter UUID | Mode | Satellite name ")
#*----- Modify to add AzR and AzS
logging.info("GS | Sch | NORAD | Start time | End time | El | AzR | AzS | Priority | Transmitter UUID | Mode | Satellite name ")
for satpass in sorted(scheduledpasses, key=lambda satpass: satpass['tr']):
logging.info(
"%3d | %3.d | %05d | %s | %s | %3.0f | %4.6f | %s | %-10s | %s" %
(ground_station_id, satpass['scheduled'], int(
satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']) if satpass['altt']
else 0., satpass['priority'], satpass['uuid'], satpass['mode'], satpass['name'].rstrip()))
#*----- Modify to add AzR and AzS
logging.info("%3d | %3.d | %05d | %s | %s | %3.0f | %3.0f | %3.0f | %4.6f | %s | %-10s | %s" %
(ground_station_id, satpass['scheduled'], int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']),float(satpass['azr']),float(satpass['azs']),
float(satpass['priority']), satpass['uuid'], satpass['mode'], satpass['name'].rstrip()))
#Aqui es la intervencion para evitar scheduling, se le pasa schedule_needed=False y a otra cosa
if not satpass['scheduled']:
schedule_needed = True
@ -379,15 +435,38 @@ def main():
logging.info('Checking and scheduling passes as needed.')
for satpass in tqdm(scheduledpasses_sorted):
if not satpass['scheduled']:
logging.debug("Scheduling %05d %s %s %3.0f %4.3f %s %s" %
(int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']),
satpass['priority'], satpass['uuid'], satpass['name'].rstrip()))
schedule_observation(session, int(satpass['id']), satpass['uuid'],
#logging.debug("Scheduling %05d %s %s %3.0f %4.3f %s %s" %
#logging.info("Scheduling %05d %s %s %3.0f %4.3f %s %s" %
# (int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
# satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']),
# satpass['priority'], satpass['uuid'], satpass['name'].rstrip()))
#*------ Filter passes based on Az Window
if (checkAz(float(satpass['azr']),azmin,azmax)) or (checkAz(float(satpass['azs']),azmin,azmax)):
logging.info("\n")
logging.info("scheduling Sat(%d) UUID(%s) Rise(%s) Set(%s)" % (int(satpass['id']),satpass['uuid'],
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000",
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000"))
schedule_observation(session, int(satpass['id']), satpass['uuid'],
ground_station_id,
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000",
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000")
logging.info("\n")
else:
logging.info("\n")
logging.info("rejecting Sat(%d) UUID(%s) Rise(%s) Set(%s)" % (int(satpass['id']),satpass['uuid'],
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000",
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000"))
logging.info("\n")
#*------------------------------------------------------------------------------------------------------------------------
logging.info("All passes are scheduled. Exiting!")

View File

@ -116,6 +116,7 @@ def get_scheduled_passes_from_network(ground_station, tmin, tmax):
break
# r.json() is a list of dicts/observations
# added empty azr and azs keys in order to properly merge later with values from computed pass and be able to filter based on az window
for o in r.json():
satpass = {
"id": o['norad_cat_id'],
@ -126,7 +127,9 @@ def get_scheduled_passes_from_network(ground_station, tmin, tmax):
"priority": 1,
"uuid": o['transmitter'],
"name": '',
"mode": ''
"mode": '',
"azr":0,
"azs":0
}
if satpass['ts'] > tmin and satpass['tr'] < tmax: