Amend telemetry data commands to fetch and decode correctly
parent
c5157cd450
commit
3058c0f1f1
|
@ -0,0 +1,32 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from db.base.models import Satellite, Telemetry, DemodData
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Decode Satellite data'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
satellites = Satellite.objects.all()
|
||||
for satellite in satellites:
|
||||
if satellite.has_telemetry_decoders:
|
||||
data = DemodData.objects.filter(satellite=satellite).filter(payload_decoded='')
|
||||
telemetry_decoders = Telemetry.objects.filter(satellite=satellite)
|
||||
|
||||
for obj in data:
|
||||
for option in telemetry_decoders:
|
||||
decoder_module = 'db.base.decoders.{0}'.format(option.decoder)
|
||||
decoder = __import__(decoder_module, fromlist='.')
|
||||
|
||||
with open(obj.payload_frame.path) as fp:
|
||||
frame = fp.read()
|
||||
|
||||
try:
|
||||
payload_decoded = decoder.decode_payload(frame, obj.data_id,
|
||||
obj.timestamp)
|
||||
except:
|
||||
continue
|
||||
|
||||
obj.payload_decoded = payload_decoded
|
||||
obj.payload_telemetry = option
|
||||
obj.save()
|
|
@ -1,6 +1,8 @@
|
|||
import requests
|
||||
from datetime import datetime, timedelta
|
||||
from pytz import timezone
|
||||
|
||||
from django.core.files.base import ContentFile
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.conf import settings
|
||||
|
||||
|
@ -18,11 +20,14 @@ class Command(BaseCommand):
|
|||
params = {'start': start_date}
|
||||
response = requests.get(data_url, params=params)
|
||||
|
||||
satellites = Satellite.objects.exclude(telemetry_decoder__exact='')
|
||||
satellites = Satellite.objects.all()
|
||||
|
||||
for obj in response.json():
|
||||
norad_cat_id = obj['norad_cat_id']
|
||||
data_id = obj['id']
|
||||
station = obj['station_name']
|
||||
lat = obj['station_lat']
|
||||
lng = obj['station_lng']
|
||||
try:
|
||||
satellite = satellites.get(norad_cat_id=norad_cat_id)
|
||||
except Satellite.DoesNotExist:
|
||||
|
@ -30,17 +35,18 @@ class Command(BaseCommand):
|
|||
try:
|
||||
transmitter = Transmitter.objects.get(uuid=obj['transmitter'])
|
||||
except Transmitter.DoesNotExist:
|
||||
continue
|
||||
demoddata = DemodData.objects.filter(data_id=data_id).delete()
|
||||
transmitter = None
|
||||
|
||||
decoder_module = 'db.base.decoders.{0}'.format(satellite.telemetry_decoder)
|
||||
decoder = __import__(decoder_module, fromlist='.')
|
||||
DemodData.objects.filter(data_id=data_id).delete()
|
||||
|
||||
for demoddata in obj['demoddata']:
|
||||
payload_url = demoddata['payload_demod']
|
||||
observation_datetime = payload_url.split('/')[-1]
|
||||
payload = str(requests.get(payload_url).json())
|
||||
telemetry = decoder.decode_payload(payload, observation_datetime, data_id)
|
||||
for item in telemetry:
|
||||
DemodData.objects.create(payload=item, transmitter=transmitter,
|
||||
data_id=data_id)
|
||||
timestamp = datetime.strptime(payload_url.split('/')[-1].split('_')[0],
|
||||
'%Y%m%dT%H%M%SZ').replace(tzinfo=timezone('UTC'))
|
||||
frame = str(requests.get(payload_url).json())
|
||||
payload_frame = ContentFile(frame, name='network')
|
||||
|
||||
DemodData.objects.create(satellite=satellite, transmitter=transmitter,
|
||||
data_id=data_id, payload_frame=payload_frame,
|
||||
timestamp=timestamp, source='network',
|
||||
station=station, lat=lat, lng=lng)
|
||||
|
|
|
@ -19,6 +19,8 @@ dj-database-url==0.4.2 \
|
|||
--hash=sha256:e16d94c382ea0564c48038fa7fe8d9c890ef1ab1a8ec4cb48e732c124b9482fd
|
||||
opbeat==3.5.2 \
|
||||
--hash=sha256:085f42cd2efd8fb4a394ab635fd35d0c270897b6a7303f5d347d7442f0d2bfbd
|
||||
pytz==2016.10 \
|
||||
--hash=sha256:a1ea35e87a63c7825846d5b5c81d23d668e8a102d3b1b465ce95afe1b3a2e065
|
||||
|
||||
# Security
|
||||
django-braces==1.11.0 \
|
||||
|
|
Loading…
Reference in New Issue