Data visualization for NASA's DSNNow public data

Overview

DSN Monitor

Data visualization for NASA's DSNNow public data. A live version of the project can be accessed at http://dsnmonitor.ddns.net.

Description

NASA publishes real-time data about its Deep Space Network and current radio links with deep space missions, in the form of the website DSNNow. However, a historical visualization of its real-time data is missing. This project is about giving this fascinating data an alternative presentation, from which different patterns and meaning can be visually understood.

Python scripts are used to:

  • fetch data from DSNNow website (available in XML format)
  • store them in a MySQL database
  • generate JSON data as input for the graphs

Graphic visualization of data is provided through Google Charts library, and the graphs are placed together in a Bootstrap webpage.

The entire project (Python scripts through cronjobs, data visualization and website front-end hosting) runs 24/7 on a Raspberry Pi Zero.

Data Visualization

Timelines

The upper part of the page shows the last 3 days of DSN activity as a timeline, which is organized either by station or by spacecraft. Times shown are UTC.

By Station

Each row is the activity of one of the DSN stations, showing also concurrent links to multiple missions served by a single antenna.
This visualization should mimic DSN operators' console screens, where a detailed time scheduling for each of the stations' links is presented.
Some patterns are clearly visible, for example when missions need continuous coverage the link is handed over among the three DSN sites around the world, according to when they come in visibility of the spacecraft due to Earth's rotation (DSS 14-26 are located in the USA, DSS 34-43 in Australia, DSN 54-65 in Spain).

By Spacecraft

In this visualization, each row of the timeline is a mission, so it's possible to see the coverage over time each spacecraft is getting from the Deep Space Network.
See the example below, where it's interesting to note the 24/7 coverage reserved for James Webb Space Telescope (JWST), which at the time of writing is in its initial deployment phase, or the pattern in subsequent links with the four satellites of the Magnetospheric Multiscale Mission (MMS).

Link Details

Time slots in timelines visualizations are hyperlink which, when selected, show additional information of that particular link in the lower half of the page.
Together with information about the selected slot in particular, a historical view of characteristics such as range from Earth, data rate and received power is shown for the selected spacecraft.

Spacecraft Range

In this visualization, for all the tracked spacecraft the current distance from Earth is shown.

Three plots are generated with different scales, in order to be clearly visible:

  • Earth orbit, meaning HEO and L1-L2 Lagrange Points (DSN is not involved with LEO, MEO and GEO satellites)
  • Solar System, Neptune's orbit being at about 4.5 billion km from the Sun (the fleet of spacecraft in Mars orbit is clearly visible)
  • Beyond Solar System, where we only find New Horizons and the two Voyager probes

Dependencies

  • Python modules
    • pymysql
    • xml.etree
    • pytz
    • gviz_api
    • operator
    • datetime
    • pprint, argparse, subprocess (for debugging purposes)
  • a MySQL database
  • Google Charts library
  • Bootstrap installation (Gentelella template has been used in this project)

Setup

  • Install a MySQL database, and import the sample SQL dump provided in this repository
  • Install the Gentelella Bootstrap template (in my case it is hosted at a separate path in the Raspberry Pi, and it's accessible online)
  • Update the config.py file with your database login information and the URL pointing at your Bootstrap installation

Usage

In order to periodically fetch the data from DSNNow and to generate the data to be visualized by Google Charts, the following Python scripts have to be called at regular intervals, for example with cronjobs:

  • DSNMonitor_fetchDSNNow.py to fetch DSNNow public data (fetching interval, i.e. the cronjob period, should match the FETCH_INTERVAL constant in config.py)
  • DSNMonitor_generateDashboardData.py to generate JSON data as chart inputs (its cronjob period only affects the front-end update)
  • DSNMonitor_generateHistoryData.py to generate historical table in database, with a single record per day (can be ran daily)

Example usage:

*/5 * * * * python3 DSNMonitor_fetchDSNNow.py
*/15 * * * * python3 DSNMonitor_generateDashboardData.py
@daily python3 DSNMonitor_generateHistoryData.py

The argument --debug can be used for debug purposes.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

Acknowledgments

This project is an alternative visualization of public real-time data released by NASA at the website DSNNow, which has to be acknowledged for its policy regarding public data releasing and general audience outreaching.

You might also like...
PHP demo application showing how to access the Hubstaff Public API

Public API PHP Demo This repository contains a simple sample cli tool that shows off how to access the Hubstaff public api via PHP. The core access is

https://trapscan.slab.com/public/topics/phase-3-branding-and-optimisation-r3vhj61l

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Melek Berita Backend is a service for crawling data from various websites and processing the data to be used for news data needs.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Import data from and export data to a range of different file formats and media

Ddeboer Data Import library This library has been renamed to PortPHP and will be deprecated. Please use PortPHP instead. Introduction This PHP library

:globe_with_meridians: List of all countries with names and ISO 3166-1 codes in all languages and data formats.
:globe_with_meridians: List of all countries with names and ISO 3166-1 codes in all languages and data formats.

symfony upgrade fixer • twig gettext extractor • wisdom • centipede • permissions handler • extraload • gravatar • locurro • country list • transliter

The easiest way to match data structures like JSON/PlainText/XML against readable patterns. Sandbox:

PHP Matcher Library created for testing all kinds of JSON/XML/TXT/Scalar values against patterns. API: PHPMatcher::match($value = '{"foo": "bar"}', $p

AnsibleBoy aims to use the Asnible `facts` as data, which can then be visualized in a table format
AnsibleBoy aims to use the Asnible `facts` as data, which can then be visualized in a table format

AnsibleBoy - Ansible Frontend Hub About AnsibleBoy aims to use the Ansible facts as data, which can then be visualized as a table ToDo (note that this

Get mobile app version and other related data from Google Play Store, Apple App Store and Huawei AppGallery

Mobile App Version Get mobile app version and other related data from Google Play Store, Apple App Store and Huawei AppGallery. Installation Add to co

RRR makes structured data for WordPress really rich, and really easy.
RRR makes structured data for WordPress really rich, and really easy.

Really Rich Results - JSON-LD Structured Data (Google Rich Results) for WordPress Search engines are putting more weight on structured data than ever

Owner
Vinz
Vinz
Allows reflection of object attributes, including inherited and non-public ones

sebastian/object-reflector Allows reflection of object attributes, including inherited and non-public ones. Installation You can add this library as a

Sebastian Bergmann 6k Jan 4, 2023
Add information about PGP public keys on upload in Kirby v3

Kirby3 GnuPG This plugin adds information about PGP public keys on upload, using gpg binary (which needs to be installed for this to work). Getting st

Fundevogel 2 Oct 11, 2021
Here is an Instagram Guest API. Gather all public information as JSON format without logging yourself.

Here is an Instagram Guest API. Gather all public information as JSON format without logging yourself. It's all automation and time saving.

Quatrecentquatre 1 Nov 2, 2021
Public solutions and challenges from sinf ctf 2021

SINFCTF2021 CTF Challenges (and official solutions) created for SINFCTF2021, a companion CTF for Semana de Informática 2021. There's a folder for each

NIAEFEUP 5 Sep 30, 2022
A Laravel Wrapper for the Binance API. Now easily connect and consume the Binance Public & Private API in your Laravel apps without any hassle.

This package provides a Laravel Wrapper for the Binance API and allows you to easily communicate with it. Important Note This package is in early deve

Moinuddin S. Khaja 7 Dec 7, 2022
This is a public repository developed to Mooven for test.

How to start First Step: Clone repository to your PC Second Step: Run the command: composer dumpautoload Third Step: IMPORTANT STEP! Now you have to c

Jakson Fischer 2 Dec 22, 2021
Starless Sky is a network protocol for secure identities, providing the use of assymetric identities, public information, end-to-end messaging and smart contracts

Descentralized network protocol providing smart identity over an secure layer. What is the Starless Sky Protocol? Starless Sky is a network protocol f

Starless Sky Protocol 3 Jun 19, 2022
Echo your public IP address with a very simple cURL request

Echo your public IP address with a very simple cURL request

Lucas Burlingham 13 Apr 10, 2022
A list of documentation and example code to access the University of Florida's public (undocumented) API

uf_api A list of documentation and example code to access the University of Florida's public (undocumented) API Courses Gym Common Data (admissions an

Rob Olsthoorn 49 Oct 6, 2022
Initiated by me, enhanced by us, created for us. This is the fork (public) version separated from my private diary repository.

diary public repository Initiated by me, enhanced by us, created for us. This is the fork (public) version separated from my private diary repository.

Weicheng Ao 3 Jul 30, 2022