summaryrefslogtreecommitdiff
path: root/tools/mmd
diff options
context:
space:
mode:
authorJogi Hofmüller <jogi@mur.at>2011-08-11 12:31:16 +0000
committerJogi Hofmüller <jogi@mur.at>2011-08-11 12:31:16 +0000
commitabcb8f300a44b67e2c75330627b690944ed769cf (patch)
treedb80179ea87e63072e7e62f5ed2c45ff59d95aa3 /tools/mmd
parent- fixed Bug in call to getTrajectoryAsJavaArray in osmWidget () (diff)
- fixed Bug in call to getTrajectoryAsJavaArray in osmWidget ()
- included real satellite data in dataWidget () - added comment to map git-svn-id: https://svn.spreadspace.org/mur.sat@123 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'tools/mmd')
-rw-r--r--tools/mmd/MmdCommands.py38
-rw-r--r--tools/mmd/MmdLocation.py1
-rw-r--r--tools/mmd/MmdSatellite.py21
-rw-r--r--tools/mmd/MmdWidgets.py23
-rw-r--r--tools/mmd/mmd.css4
5 files changed, 58 insertions, 29 deletions
diff --git a/tools/mmd/MmdCommands.py b/tools/mmd/MmdCommands.py
index 410acfe..45f66af 100644
--- a/tools/mmd/MmdCommands.py
+++ b/tools/mmd/MmdCommands.py
@@ -10,7 +10,7 @@ def loginForm (session):
"""
display the login form
"""
- return indexWidget (dataWidget (), loginFormWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), loginFormWidget (), statusWidget (session), session)
def login (session):
"""
@@ -18,23 +18,23 @@ def login (session):
"""
if not session.user.load (session.getQsEmail ()):
error_message = {'error': 'Login', 'description': 'Login failed.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
if not session.user.checkPassword (session.getQsPassword ()):
error_message = {'error': 'Login', 'description': 'Login failed.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
session.setStatus ('auth')
- return indexWidget (dataWidget (), loginWidget (session.user), statusWidget (session), session)
+ return indexWidget (dataWidget (session), loginWidget (session.user), statusWidget (session), session)
def logout (session):
session.user.email = 'Anonymous'
session.setStatus ()
- return indexWidget (dataWidget (), logoutWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), logoutWidget (), statusWidget (session), session)
def registerForm (session):
"""
display the register form
"""
- return indexWidget (dataWidget (), registerFormWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), registerFormWidget (), statusWidget (session), session)
def register (session):
"""
@@ -52,7 +52,7 @@ def register (session):
if password != confirm:
error_message = {'error': 'Password', 'description': 'Passwords do not match.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
user = User ()
code = user.create (session.session_id, firstname, lastname, email, callsign, password)
@@ -79,58 +79,58 @@ MURSAT1 team
if not user.sendEmail (message):
error_message = {'error': 'Email', 'description': 'Email could not be sent.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
- return indexWidget (dataWidget (), registerWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), registerWidget (), statusWidget (session), session)
def completeRegistration (session):
code = session.getQsCode ()
if not session.user.findPending (code):
error_message = {'error': 'Registration', 'description': 'Registration Failed.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
- return indexWidget (dataWidget (), completeRegistrationWidget (code), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), completeRegistrationWidget (code), statusWidget (session), session)
def confirmRegistration (session):
code = session.getQsCode ()
if not session.user.findPending (code):
error_message = {'error': 'Registration', 'description': 'Registration Failed.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
session.user.confirm (code)
session.setStatus ('auth')
- return indexWidget (dataWidget (), confirmRegistrationWidget (session.user), statusWidget (session), session)
+ return indexWidget (dataWidget (session), confirmRegistrationWidget (session.user), statusWidget (session), session)
def cancelRegistration (session):
code = session.getQsCode ()
if not session.user.findPending (code):
error_message = {'error': 'Registration', 'description': 'Canceling failed.'}
- return indexWidget (dataWidget (), errorWidget (error_message), statusWidget (session), session)
+ return indexWidget (dataWidget (session), errorWidget (error_message), statusWidget (session), session)
session.user.cancel (code)
- return indexWidget (dataWidget (), cancelRegistrationWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), cancelRegistrationWidget (), statusWidget (session), session)
def submitForm (session):
"""
display the form for data submission
"""
- return indexWidget (dataWidget (), submitFormWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), submitFormWidget (), statusWidget (session), session)
def submit (session):
"""
evaluate data from submitForm
"""
- return indexWidget (dataWidget (), submitWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), submitWidget (), statusWidget (session), session)
def viewlog (session):
"""
show latest log entries/submissions
"""
- return indexWidget (dataWidget (), logWidget (), statusWidget (session), session)
+ return indexWidget (dataWidget (session), logWidget (), statusWidget (session), session)
def index (session):
"""
display the index page
"""
satellite = {'longitude': 15.4426, 'latitude': 47.06576}
- return indexWidget (dataWidget (), osmWidget (session), statusWidget (session), session)
+ return indexWidget (dataWidget (session), osmWidget (session), statusWidget (session), session)
def mmdtest (env, cookie):
body = ''
diff --git a/tools/mmd/MmdLocation.py b/tools/mmd/MmdLocation.py
index e3212bb..7a51618 100644
--- a/tools/mmd/MmdLocation.py
+++ b/tools/mmd/MmdLocation.py
@@ -23,6 +23,7 @@ class Location:
self.name = 'Graz/Austria'
self.longitude = 15.44226
self.latitude = 47.06576
+ self.altitude = 376
def create (self, name, longitude, latitude, is_default, user_id):
self.name = name
diff --git a/tools/mmd/MmdSatellite.py b/tools/mmd/MmdSatellite.py
index 67a9052..a148f30 100644
--- a/tools/mmd/MmdSatellite.py
+++ b/tools/mmd/MmdSatellite.py
@@ -4,6 +4,7 @@ import ephem
import time
import os
from MmdDb import Db
+from MmdLocation import Location
def createJavaArray (point_list, name):
astring = '''var {0} = new Array (\n'''.format (name)
@@ -41,10 +42,11 @@ def dms2degdec (lonlat):
class Satellite:
- def __init__ (self):
+ def __init__ (self, location = False):
self.name = 'RADIOSCAF-B/ARISSAT-1'
self.tle_filename = '/usr/local/mmd/tles/current'
self.db = Db ()
+ self.initSatellite (location)
def getCurrentSSP (self):
ssp = self._loadCurrentSSP ()
@@ -77,6 +79,22 @@ class Satellite:
def _loadCurrentSSP (self):
return self.db.satelliteLoadCurrentSSP (time.strftime ('%s'))
+ def initSatellite (self, location = False):
+ if not self._loadTLE ():
+ return False
+ if location:
+ loc = location
+ else:
+ loc = Location ()
+
+ sat = ephem.readtle (self._tle[0], self._tle[1], self._tle[2])
+ obs = ephem.Observer ()
+ obs.long, obs.lat, obs.elevation = loc.longitude, loc.latitude, loc.altitude
+ sat.compute (obs)
+ self.longitude = dms2degdec (sat.sublong.__str__ ())
+ self.latitude = dms2degdec (sat.sublat.__str__ ())
+ self.altitude = round (float (sat.elevation.__str__ ()), 1)
+
def computeTrajectory (self):
'''
computes 5 hours of future trajectory data, starting at the
@@ -129,6 +147,7 @@ if __name__ == "__main__":
t, lon, lat = satellite.getCurrentSSP ()
assert t, 'loading current SSP failed'
print lon, lat, time.strftime ('%c', time.gmtime (t))
+ print satellite.longitude, satellite.latitude, satellite.altitude
except AssertionError as e:
print 'Error: {0}'.format (e)
diff --git a/tools/mmd/MmdWidgets.py b/tools/mmd/MmdWidgets.py
index 4a4a7b0..37c997f 100644
--- a/tools/mmd/MmdWidgets.py
+++ b/tools/mmd/MmdWidgets.py
@@ -212,6 +212,7 @@ def osmWidget (session):
if not user_location:
user_location = Location ()
timestamp, longitude, latitude = session.satellite.getCurrentSSP ()
+ minutes_preview = 180
html = '''
<div id="osm"></div>
@@ -264,12 +265,16 @@ def osmWidget (session):
map.zoomTo (1);
</script>
+ <div class="info">
+ The map shows the satellite's expected ground track for the next {5} minutes.
+ </div>
'''.format (
longitude,
latitude,
user_location.longitude,
user_location.latitude,
- session.satellite.getTrajectoryAsJavaArray ('curves', 30)
+ session.satellite.getTrajectoryAsJavaArray ('curves', minutes_preview),
+ minutes_preview
)
return html
@@ -284,7 +289,7 @@ def statusWidget (session):
<img src="http://sat.mur.at/pics/sat-logo-notext.png" alt="mur.sat logo" />
</a>
MURSAT1 Mission Dashboard
- <div id="info">
+ <div class="info">
{0}. Local time is {1}.
</div>
'''.format (inout, time.strftime ('%c'))
@@ -353,20 +358,24 @@ def indexWidget (lcol, rcol, status, debug_info = False):
return html
-def dataWidget (longitude = 15.44226, latitude = 47.06576):
+def dataWidget (session):
+ timestamp, longitude, latitude = session.satellite.getCurrentSSP ()
+
html = '''
<div id="datahead">
- Current Satellite Data
+ {0}
</div>
+ <hr />
<div>Time: 00 D 00 H 00 M 00 S</div>
- <div>Longitude: {0}</div>
- <div>Latitude: {1}</div>
+ <div>SSP Longitude: {1}</div>
+ <div>SSP Latitude: {2}</div>
+ <div>Altitude: {3}m</div>
<hr />
<div><a href="?cmd=submitForm">Submit</a> a report</div>
<div>View <a href="?cmd=viewlog">Log</a> of reports</div>
<hr />
<div>Checkout the <a href="http://sat.mur.at/">project page</a>!</div>
- '''.format (longitude, latitude)
+ '''.format (session.satellite.name, session.satellite.longitude, session.satellite.latitude, session.satellite.altitude)
return html
diff --git a/tools/mmd/mmd.css b/tools/mmd/mmd.css
index 0a19385..f72ab30 100644
--- a/tools/mmd/mmd.css
+++ b/tools/mmd/mmd.css
@@ -43,7 +43,7 @@ html, body
#lcol
{
font: 10pt courier, monospace;
- width: 280px;
+ max-width: 30%;
height: auto;
margin: 1px;
padding: 2px;
@@ -52,7 +52,7 @@ html, body
background-color: white;
}
-#info
+.info
{
font: 10pt courier, monospace;
color: black;