1
0
Fork 0
satnogs-network/SatNOGS/base/models.py

73 lines
2.4 KiB
Python

from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from users.models import User
ANTENNA_BANDS = ['HF', 'VHF', 'UHF', 'L', 'S', 'C', 'X', 'KU']
ANTENNA_TYPES = (
('dipole', 'Dipole'),
('yagi', 'Yagi'),
('helical', 'Helical'),
('parabolic', 'Parabolic'),
)
MODE_CHOICES = ['FM', 'AFSK', 'APRS', 'SSTV', 'CW', 'FMN']
class Transponder(models.Model):
"""Model for antennas transponders."""
description = models.TextField()
alive = models.BooleanField()
uplink_low = models.PositiveIntegerField()
uplink_high = models.PositiveIntegerField()
downlink_low = models.PositiveIntegerField()
downlink_high = models.PositiveIntegerField()
mode = models.CharField(choices=zip(MODE_CHOICES, MODE_CHOICES),
max_length=10)
invert = models.BooleanField()
baud = models.FloatField(validators=[MinValueValidator(0)])
class Antenna(models.Model):
"""Model for antennas tracked with SatNOGS."""
frequency = models.FloatField(validators=[MinValueValidator(0)])
band = models.CharField(choices=zip(ANTENNA_BANDS, ANTENNA_BANDS),
max_length=5)
antenna_type = models.CharField(choices=ANTENNA_TYPES, max_length=15)
class Station(models.Model):
"""Model for SatNOGS ground stations."""
owner = models.ForeignKey(User)
name = models.CharField(max_length=45)
image = models.ImageField(upload_to='ground_stations')
alt = models.PositiveIntegerField()
lat = models.FloatField(validators=[MaxValueValidator(90),
MinValueValidator(-90)])
lng = models.FloatField(validators=[MaxValueValidator(180),
MinValueValidator(-180)])
antenna = models.ManyToManyField(Antenna)
class Satellite(models.Model):
"""Model for SatNOGS satellites."""
norad_cat_id = models.PositiveIntegerField()
name = models.CharField(max_length=45)
transponders = models.ManyToManyField(Transponder)
class Observation(models.Model):
"""Model for SatNOGS observations."""
satellite = models.ForeignKey(Satellite)
author = models.ForeignKey(User)
start = models.DateTimeField()
end = models.DateTimeField()
class Data(models.Model):
url = models.URLField()
start = models.DateTimeField()
end = models.DateTimeField()
observation = models.ForeignKey(Observation)
ground_station = models.ForeignKey(Station)