rtlsdr-automated-wxsat-capture/noaacapture.py

71 lines
2.1 KiB
Python
Executable File

import time
import pypredict
import subprocess
satellites = ['NOAA-18','NOAA-19','NOAA-15']
freqs = [137912500, 137100000, 137620000]
sample = '44100'
wavrate='11025'
def runForDuration(cmdline, duration):
try:
child = subprocess.Popen(cmdline)
time.sleep(duration)
child.terminate()
except OSError as e:
print "OS Error during command: "+" ".join(cmdline)
print "OS Error: "+e.strerror
def recordFM(freq, fname, duration):
# still experimenting with options - unsure as to best settings
cmdline = ['rtl_fm',\
'-f',str(freq),\
'-s',sample,\
'-g','43',\
'-F','9',\
'-A','fast',\
'-E','dc',\
fname+'.raw']
runForDuration(cmdline, duration)
def transcode(fname):
cmdline = ['sox','-t','raw','-r',sample,'-es','-b','16','-c','1','-V1',fname+'.raw',fname+'.wav','rate',wavrate]
subprocess.call(cmdline)
def decode(fname):
cmdline = ['/root/atpdec-1.7/atpdec',fname+'.wav']
subprocess.call(cmdline)
def recordWAV(freq,fname,duration):
recordFM(freq,fname,duration)
transcode(fname)
def spectrum(fname,duration):
cmdline = ['rtl_power','-f','137000000:138000000:1000','-i','1m','-g','40',fname+'.csv']
runForDuration(cmdline,duration)
def findNextPass():
predictions = [pypredict.aoslos(s) for s in satellites]
aoses = [p[0] for p in predictions]
nextIndex = aoses.index(min(aoses))
return (satellites[nextIndex],\
freqs[nextIndex],\
predictions[nextIndex])
while True:
(satName, freq, (aosTime, losTime)) = findNextPass()
now = time.time()
towait = aosTime-now
if towait>0:
print "waiting "+str(towait)+" seconds for "+satName
time.sleep(towait)
# dir= sat name and filename = start time
fname='./'+satName+'/'+str(aosTime)
print "beginning pass "+fname+" predicted end "+str(losTime)
recordWAV(freq,fname,losTime-aosTime)
decode(fname) # make picture
# spectrum(fname,losTime-aosTime)
print "finished pass "+fname+" at "+str(time.time())
time.sleep(60.0)