1
0
Fork 0

Amend telemetry data commands to fetch and decode correctly

merge-requests/138/head
Nikos Roussos 2017-03-02 19:58:01 +02:00
parent c5157cd450
commit 3058c0f1f1
No known key found for this signature in database
GPG Key ID: BADFF1767BA7C8E1
3 changed files with 51 additions and 11 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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 \