Use transmitter success rate
parent
83cbe108f8
commit
665a5fc603
|
@ -34,7 +34,7 @@ class twolineelement:
|
||||||
class satellite:
|
class satellite:
|
||||||
"""Satellite class"""
|
"""Satellite class"""
|
||||||
|
|
||||||
def __init__(self, tle, transmitter):
|
def __init__(self, tle, transmitter, success_rate, good_count, data_count):
|
||||||
"""Define a satellite"""
|
"""Define a satellite"""
|
||||||
|
|
||||||
self.tle0 = tle.tle0
|
self.tle0 = tle.tle0
|
||||||
|
@ -43,6 +43,9 @@ class satellite:
|
||||||
self.id = tle.id
|
self.id = tle.id
|
||||||
self.name = tle.name
|
self.name = tle.name
|
||||||
self.transmitter = transmitter
|
self.transmitter = transmitter
|
||||||
|
self.success_rate = success_rate
|
||||||
|
self.good_count = good_count
|
||||||
|
self.data_count = data_count
|
||||||
|
|
||||||
def get_scheduled_passes_from_network(ground_station, tmin, tmax):
|
def get_scheduled_passes_from_network(ground_station, tmin, tmax):
|
||||||
# Get first page
|
# Get first page
|
||||||
|
@ -195,6 +198,9 @@ def find_passes(satellites, observer, tmin, tmax, minimum_altitude):
|
||||||
'azs': azimuth_s, # Set azimuth
|
'azs': azimuth_s, # Set azimuth
|
||||||
'valid': valid,
|
'valid': valid,
|
||||||
'uuid': satellite.transmitter,
|
'uuid': satellite.transmitter,
|
||||||
|
'success_rate': satellite.success_rate,
|
||||||
|
'good_count': satellite.good_count,
|
||||||
|
'data_count': satellite.data_count,
|
||||||
'scheduled': False}
|
'scheduled': False}
|
||||||
passes.append(satpass)
|
passes.append(satpass)
|
||||||
observer.date = ephem.Date(ts).datetime() + timedelta(minutes=1)
|
observer.date = ephem.Date(ts).datetime() + timedelta(minutes=1)
|
||||||
|
@ -285,10 +291,24 @@ def schedule_observation(username, password, norad_cat_id, uuid, ground_station_
|
||||||
form["0-station"] = ground_station_id
|
form["0-station"] = ground_station_id
|
||||||
form["total"] = str(1)
|
form["total"] = str(1)
|
||||||
session.post(obsURL, data=form, headers={'referer':obsURL})
|
session.post(obsURL, data=form, headers={'referer':obsURL})
|
||||||
|
|
||||||
|
def get_transmitter_success_rate(norad, uuid):
|
||||||
|
transmitters = requests.get("https://network.satnogs.org/transmitters/"+str(norad)).json()["transmitters"]
|
||||||
|
success_rate = 0
|
||||||
|
good_count = 0
|
||||||
|
data_count = 0
|
||||||
|
for transmitter in transmitters:
|
||||||
|
if transmitter["uuid"]==uuid:
|
||||||
|
success_rate = transmitter["success_rate"]
|
||||||
|
good_count = transmitter["good_count"]
|
||||||
|
data_count = transmitter["data_count"]
|
||||||
|
break
|
||||||
|
|
||||||
|
return success_rate, good_count, data_count
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# Settings
|
# Settings
|
||||||
ground_station_id = 40
|
ground_station_id = 39
|
||||||
length_hours = 2
|
length_hours = 2
|
||||||
data_age_hours = 24
|
data_age_hours = 24
|
||||||
cache_dir = "/tmp/cache"
|
cache_dir = "/tmp/cache"
|
||||||
|
@ -311,8 +331,17 @@ if __name__ == "__main__":
|
||||||
# Get last update
|
# Get last update
|
||||||
tlast = get_last_update(os.path.join(cache_dir, "last_update_%d.txt"%ground_station_id))
|
tlast = get_last_update(os.path.join(cache_dir, "last_update_%d.txt"%ground_station_id))
|
||||||
|
|
||||||
# Update
|
# Update logic
|
||||||
|
update = False
|
||||||
if tlast==None or (tnow-tlast).total_seconds()>data_age_hours*3600:
|
if tlast==None or (tnow-tlast).total_seconds()>data_age_hours*3600:
|
||||||
|
update = True
|
||||||
|
if not os.path.isfile(os.path.join(cache_dir, "transmitters_%d.txt"%ground_station_id)):
|
||||||
|
update = True
|
||||||
|
if not os.path.isfile(os.path.join(cache_dir, "tles_%d.txt"%ground_station_id)):
|
||||||
|
update = True
|
||||||
|
|
||||||
|
# Update
|
||||||
|
if update:
|
||||||
# Store current time
|
# Store current time
|
||||||
with open(os.path.join(cache_dir, "last_update_%d.txt"%ground_station_id), "w") as fp:
|
with open(os.path.join(cache_dir, "last_update_%d.txt"%ground_station_id), "w") as fp:
|
||||||
fp.write(tnow.strftime("%Y-%m-%dT%H:%M:%S")+"\n")
|
fp.write(tnow.strftime("%Y-%m-%dT%H:%M:%S")+"\n")
|
||||||
|
@ -326,7 +355,9 @@ if __name__ == "__main__":
|
||||||
# Store transmitters
|
# Store transmitters
|
||||||
fp = open(os.path.join(cache_dir, "transmitters_%d.txt"%ground_station_id), "w")
|
fp = open(os.path.join(cache_dir, "transmitters_%d.txt"%ground_station_id), "w")
|
||||||
for transmitter in transmitters:
|
for transmitter in transmitters:
|
||||||
fp.write("%05d %s\n"%(transmitter["norad_cat_id"], transmitter["uuid"]))
|
success_rate, good_count, data_count = get_transmitter_success_rate(
|
||||||
|
transmitter["norad_cat_id"], transmitter["uuid"])
|
||||||
|
fp.write("%05d %s %d %d %d\n"%(transmitter["norad_cat_id"], transmitter["uuid"], success_rate, good_count, data_count))
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
# Get NORAD IDs
|
# Get NORAD IDs
|
||||||
|
@ -359,16 +390,18 @@ if __name__ == "__main__":
|
||||||
with open(os.path.join(cache_dir, "transmitters_%d.txt"%ground_station_id), "r") as f:
|
with open(os.path.join(cache_dir, "transmitters_%d.txt"%ground_station_id), "r") as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
for line in lines:
|
for line in lines:
|
||||||
norad_cat_id, uuid = int(line.split()[0]), line.split()[1]
|
item = line.split()
|
||||||
|
norad_cat_id, uuid, success_rate, good_count, data_count = int(item[0]), item[1], float(item[2])/100.0, int(item[3]), int(item[4])
|
||||||
for tle in tles:
|
for tle in tles:
|
||||||
if tle.id == norad_cat_id:
|
if tle.id == norad_cat_id:
|
||||||
satellites.append(satellite(tle, uuid))
|
satellites.append(satellite(tle, uuid, success_rate, good_count, data_count))
|
||||||
|
|
||||||
# Find passes
|
# Find passes
|
||||||
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
|
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
|
||||||
|
|
||||||
# Priorities
|
# Priorities
|
||||||
priorities = {"40069": 1.000, "25338": 0.990, "28654": 0.990, "33591": 0.990}
|
# priorities = {"40069": 1.000, "25338": 0.990, "28654": 0.990, "33591": 0.990}
|
||||||
|
priorities = {}
|
||||||
|
|
||||||
# List of scheduled passes
|
# List of scheduled passes
|
||||||
scheduledpasses = get_scheduled_passes_from_network(ground_station_id, tmin, tmax)
|
scheduledpasses = get_scheduled_passes_from_network(ground_station_id, tmin, tmax)
|
||||||
|
@ -383,7 +416,7 @@ if __name__ == "__main__":
|
||||||
satpass['priority'] = priorities[satpass['id']]
|
satpass['priority'] = priorities[satpass['id']]
|
||||||
prioritypasses.append(satpass)
|
prioritypasses.append(satpass)
|
||||||
else:
|
else:
|
||||||
satpass['priority'] = float(satpass['altt'])/90.0
|
satpass['priority'] = (float(satpass['altt'])/90.0)*satpass['success_rate']
|
||||||
normalpasses.append(satpass)
|
normalpasses.append(satpass)
|
||||||
|
|
||||||
# Priority scheduler
|
# Priority scheduler
|
||||||
|
@ -436,7 +469,7 @@ if __name__ == "__main__":
|
||||||
# for satpass in scheduledpasses:
|
# for satpass in scheduledpasses:
|
||||||
for satpass in sorted(scheduledpasses, key=lambda satpass: satpass['tr']):
|
for satpass in sorted(scheduledpasses, key=lambda satpass: satpass['tr']):
|
||||||
if satpass['scheduled']==False:
|
if satpass['scheduled']==False:
|
||||||
print("%s %s %3d %3d %3d %5.2f | %s %s %s"%(satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['azr']), float(satpass['altt']), float(satpass['azs']),satpass['priority'], satpass['uuid'], satpass['id'], satpass['name'].rstrip()))
|
print("%s %s %3d %3d %3d %5.2f %5.2f %d %d | %s %s %s"%(satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['azr']), float(satpass['altt']), float(satpass['azs']),satpass['priority'], satpass['success_rate'], satpass['good_count'], satpass['data_count'], satpass['uuid'], satpass['id'], satpass['name'].rstrip()))
|
||||||
else:
|
else:
|
||||||
print("%s %s %3d %3d %3d %5.2f | %s %s %s"%(satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), 0.0, 0.0, 0.0, 0.0, "", satpass['id'], ""))
|
print("%s %s %3d %3d %3d %5.2f | %s %s %s"%(satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), 0.0, 0.0, 0.0, 0.0, "", satpass['id'], ""))
|
||||||
|
|
||||||
|
@ -459,3 +492,4 @@ if __name__ == "__main__":
|
||||||
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S")+".000",
|
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S")+".000",
|
||||||
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S")+".000")
|
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S")+".000")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue