Keep TLE historical data
parent
833439246b
commit
d620b95197
|
@ -1,7 +1,7 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from network.base.models import (Antenna, Satellite, Station, Transmitter,
|
||||
Observation, Data, Mode)
|
||||
Observation, Data, Mode, Tle)
|
||||
|
||||
|
||||
@admin.register(Mode)
|
||||
|
@ -28,7 +28,16 @@ class StationAdmin(admin.ModelAdmin):
|
|||
@admin.register(Satellite)
|
||||
class SatelliteAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'norad_cat_id', 'updated_date')
|
||||
readonly_fields = ('name', 'names', 'image', 'tle0', 'tle1', 'tle2')
|
||||
readonly_fields = ('name', 'names', 'image')
|
||||
|
||||
def updated_date(self, obj):
|
||||
return obj.updated.strftime('%d.%m.%Y, %H:%M')
|
||||
|
||||
|
||||
@admin.register(Tle)
|
||||
class TleAdmin(admin.ModelAdmin):
|
||||
list_display = ('tle0', 'tle1', 'updated_date')
|
||||
readonly_fields = ('tle0', 'tle1', 'tle2')
|
||||
|
||||
def updated_date(self, obj):
|
||||
return obj.updated.strftime('%d.%m.%Y, %H:%M')
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
from network.base.models import Satellite, Tle
|
||||
|
||||
|
||||
def get_latest_tle(satellite):
|
||||
latest_tle = Tle.objects.filter(satellite=satellite).latest('updated')
|
||||
return latest_tle
|
|
@ -2,7 +2,8 @@ from orbit import satellite
|
|||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from network.base.models import Satellite
|
||||
from network.base.models import Satellite, Tle
|
||||
from network.base.helpers import get_latest_tle
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
@ -21,10 +22,20 @@ class Command(BaseCommand):
|
|||
continue
|
||||
|
||||
obj.name = sat.name()
|
||||
tle = sat.tle()
|
||||
obj.tle0 = tle[0]
|
||||
obj.tle1 = tle[1]
|
||||
obj.tle2 = tle[2]
|
||||
obj.save()
|
||||
|
||||
# Get latest satellite TLE and check if it changed
|
||||
tle = sat.tle()
|
||||
try:
|
||||
latest_tle = get_latest_tle
|
||||
if latest_tle.tle1 == tle[1]:
|
||||
self.stdout.write(('Satellite {} with Identifier {} '
|
||||
'found [defer]').format(obj.name, obj.norad_cat_id))
|
||||
continue
|
||||
except Tle.DoesNotExist:
|
||||
pass
|
||||
|
||||
Tle.objects.create(tle0=tle[0], tle1=tle[1], tle2=tle[2], satellite=obj)
|
||||
|
||||
self.stdout.write(('Satellite {} with Identifier {} '
|
||||
'found [updated]').format(obj.name, obj.norad_cat_id))
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('base', '0002_auto_20151011_1406'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Tle',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('tle0', models.CharField(max_length=100, blank=True)),
|
||||
('tle1', models.CharField(max_length=200, blank=True)),
|
||||
('tle2', models.CharField(max_length=200, blank=True)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['tle0'],
|
||||
},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='satellite',
|
||||
name='tle0',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='satellite',
|
||||
name='tle1',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='satellite',
|
||||
name='tle2',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='satellite',
|
||||
name='updated',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tle',
|
||||
name='satellite',
|
||||
field=models.ForeignKey(related_name='tles', to='base.Satellite', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='observation',
|
||||
name='tle',
|
||||
field=models.ForeignKey(to='base.Tle', null=True),
|
||||
),
|
||||
]
|
|
@ -100,10 +100,6 @@ class Satellite(models.Model):
|
|||
name = models.CharField(max_length=45)
|
||||
names = models.TextField(blank=True)
|
||||
image = models.ImageField(upload_to='satellites', blank=True)
|
||||
tle0 = models.CharField(max_length=100, blank=True)
|
||||
tle1 = models.CharField(max_length=200, blank=True)
|
||||
tle2 = models.CharField(max_length=200, blank=True)
|
||||
updated = models.DateTimeField(auto_now=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ['norad_cat_id']
|
||||
|
@ -118,6 +114,20 @@ class Satellite(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
class Tle(models.Model):
|
||||
tle0 = models.CharField(max_length=100, blank=True)
|
||||
tle1 = models.CharField(max_length=200, blank=True)
|
||||
tle2 = models.CharField(max_length=200, blank=True)
|
||||
updated = models.DateTimeField(auto_now=True, blank=True)
|
||||
satellite = models.ForeignKey(Satellite, related_name='tles', null=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ['tle0']
|
||||
|
||||
def __unicode__(self):
|
||||
return self.tle0
|
||||
|
||||
|
||||
class Transmitter(models.Model):
|
||||
"""Model for antennas transponders."""
|
||||
uuid = ShortUUIDField(db_index=True)
|
||||
|
@ -141,6 +151,7 @@ class Observation(models.Model):
|
|||
"""Model for SatNOGS observations."""
|
||||
satellite = models.ForeignKey(Satellite)
|
||||
transmitter = models.ForeignKey(Transmitter, null=True, related_name='observations')
|
||||
tle = models.ForeignKey(Tle, null=True)
|
||||
author = models.ForeignKey(User)
|
||||
start = models.DateTimeField()
|
||||
end = models.DateTimeField()
|
||||
|
|
|
@ -22,6 +22,7 @@ from network.base.models import (Station, Transmitter, Observation,
|
|||
Data, Satellite, Antenna)
|
||||
from network.base.forms import StationForm
|
||||
from network.base.decorators import admin_required
|
||||
from network.base.helpers import get_latest_tle
|
||||
|
||||
|
||||
class StationSerializer(serializers.ModelSerializer):
|
||||
|
@ -173,7 +174,11 @@ def prediction_windows(request, sat_id, start_date, end_date):
|
|||
'error': 'You should select a Satellite first.'
|
||||
}
|
||||
return JsonResponse(data, safe=False)
|
||||
satellite = ephem.readtle(str(sat.tle0), str(sat.tle1), str(sat.tle2))
|
||||
|
||||
latest_tle = get_latest_tle(sat)
|
||||
satellite = ephem.readtle(str(latest_tle.tle0),
|
||||
str(latest_tle.tle1),
|
||||
str(latest_tle.tle2))
|
||||
|
||||
end_date = datetime.strptime(end_date, '%Y-%m-%d %H:%M')
|
||||
|
||||
|
@ -325,11 +330,12 @@ def station_view(request, id):
|
|||
|
||||
for satellite in satellites:
|
||||
observer.date = ephem.date(datetime.today())
|
||||
latest_tle = get_latest_tle(satellite)
|
||||
|
||||
try:
|
||||
sat_ephem = ephem.readtle(str(satellite.tle0),
|
||||
str(satellite.tle1),
|
||||
str(satellite.tle2))
|
||||
sat_ephem = ephem.readtle(str(latest_tle.tle0),
|
||||
str(latest_tle.tle1),
|
||||
str(latest_tle.tle2))
|
||||
|
||||
# Here we are going to iterate over each satellite to
|
||||
# find its appropriate passes within a given time constraint
|
||||
|
|
Loading…
Reference in New Issue