AzWindow
parent
d7f9f09018
commit
5df8a2fcbb
|
@ -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!")
|
||||
|
||||
|
||||
|
|
5
utils.py
5
utils.py
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue