a set of script to predict passes and make automated recordings of satellites. Intended to be run headless on an SoC. Original forked from https://github.com/va7eex/Pi_WXRX Improvements made for https://keet.space
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.5 KiB

8 years ago
import predict
import json
import sys
import datetime
frequencies = {'NOAA-15':'137.620M', 'NOAA-18':'137.9125M', 'NOAA-19':'137.10M', 'METEOR-M2':'137.925M', 'ISS':'145.80M' } #Meteor M2 is also on 137.1M
tle_data = json.load(open('sat_tle.txt'))
default_predictions = 1
default_min_elevation = 30
suppress_low_passes = False
pass_elevation = default_min_elevation
if( len(sys.argv) > 1 ):
pass_elevation = int(sys.argv[1])
if( pass_elevation == '' ):
pass_elevation = default_min_elevation
predictions = default_predictions
if( len(sys.argv) > 2):
predictions = int(sys.argv[2])
if( predictions == '' ):
predictions = default_predictions
if( len(sys.argv) > 3 ):
suppress_low_passes = True
def convert_time( unixtime ):
return datetime.datetime.fromtimestamp(
int(unixtime)
).strftime('%H:%M %Y-%m-%d')
def convert_time_short( unixtime ):
return datetime.datetime.fromtimestamp(
int(unixtime)
).strftime('%M')
def get_sat( sat ):
return sat + '\n' + tle_data[sat]
qth = (49.32, 123.42, 49) # lat (N), long (W), alt (meters)
qth_nw = (51.32, 125.42, 49)
qth_se = (47.32, 121.42, 49)
data = {}
for sat, freq in frequencies.iteritems():
name = predict.observe(get_sat(sat), qth)['name'].strip()
t = predict.transits(get_sat(sat), qth)
t_nw = predict.transits(get_sat(sat), qth_nw)
t_se = predict.transits(get_sat(sat), qth_se)
count = 0
while ( count < predictions ):
p = t.next()
p_nw = t_nw.next()
p_se = t_se.next()
while (p.peak()['elevation'] < default_min_elevation):
p = t.next()
p_nw = t_nw.next()
p_se = t_se.next()
if( not suppress_low_passes ):
print name, "pass too low, recalculating"
data[name] = {}
data[name]['frequency'] = freq
data[name]['start_unix'] = p.start
data[name]['start'] = convert_time(data[name]['start_unix'])
data[name]['duration_seconds'] = int(p.duration())
data[name]['duration_minutes'] = convert_time_short(data[name]['duration_seconds'])
data[name]['elevation'] = p.peak()['elevation']
#This actually means nothing, feel free to ignore it
8 years ago
data[name]['direction'] = 'S' #Assume northbound
if( int(p_nw.start) > int(p.start) and int(p.start) > int(p_se.start) ): #This is the direction the satellite is travelling TO, not from.
data[name]['direction'] = 'N'
print name, 'next pass at:', data[name]['start'], 'at', data[name]['elevation'], 'degrees.', data[name]['direction'] + '-bound'
count = count + 1
import json
with open('satpredict.txt', 'w') as fp:
json.dump(data, fp, indent=4)