Note: This is experimental software, proceed at your own risk.
Introduction
The Satellite TLM is a small project inspired by GetKiss+ and the various satellite telemetry decoders from DK3WN. GetKiss+ is an application that interfaces to a TNC (Sound Modem, gr-satellites) and forwards the received data to SatNOGS. The telemetry decoders work very similar in that they receive the data from the TNC over a KISS port and the interface decodes and displays the data into something more coherent.
TLM is an experiment in trying to understand how it all works and try a few ideas. This is very much an experiment and is not a replacement for GetKiss+. A lot of the concepts that I’ve implemented is pretty much the same as GetKiss+, but I wanted to see if I could incorporate the decoder aspect into it as well. There is no real standard format that all satellites use, but if I could implement some kind of plugin system then for each new satellite we can just throw together a small plugin and open it in TLM.
Collecting telemetry from satellites is not only a fun aspect of amateur radio, but also helps the owners of a satellite to collect important data (satellite status, experiment status, etc) and it might also encourage them put Amateur Radio specific hardware on the satellite. The Greencube satellite is a good example of that and has become very popular.
There are projects (for example SatNOGS) that allow you to put up an automated station that will track, receive and decode data from a satellite, but sometimes you want to manually go through the process (especially if its a newly launched satellites). Even if you do this manually then you can still submit the collected data to SatNOGS DB.
The basic idea is to receive the signal via radio or sdr, this signal gets passed along to Soundmodem or gr-satellites which in turn demodulates the data into data which is then made available on a KISS port. Other applications can then receive that information on the KISS port and would maybe forward the data to SatNOGS, or decode and display it directly on your computer.
TLM Overview and Usage
At the core of TLM it connects to a KISS port and waits for data from the TNC. TLM also has a list of satellits based on the TLE file configured. If you select a satellite and you receive data then it has the capability to forward the received data to SatNOGS. If you have a plugin decoder for that satellite loaded then it will also attempt to decode and display the telemetry data in a human readable format.
Since version 0.2 you can now also graph the various telemetry variables decoded by a plugin:
Configuration
Before you can do anything with TLM you need to configure it with the following settings:
TLE Path | The path to a valid TLE file. The expected format of the TLE file is: Satellite Name For example: … GREENCUBE 1 53106U 22080B 22311.41681562 -.00000003 00000-0 00000-0 0 9993 2 53106 70.1748 36.7662 0008898 233.3262 126.6580 6.42557505 7507 … | You can either download a TLE file or make your own by copying and pasting TLE elements from SatNOGS DB. |
Plugins Path | Path to a folder where you store your decoder plugins. Simply copy the dll file into this folder and start (or restart TLM). | See below for available decoders and notes on making your own decoder. |
Observer Settings | Basic information required for satellite predictions and also gets sent along to SatNOGS when you forward data. | |
KISS Settings | Specify the host and port of your TNC. | |
Telemetry Forward Settings | The server, typically SatNOGS where your received data will be forwarded using the SiDS protocol. | Note: Make sure everything is working properly on the test dev instance before changing to the live one. |
If you have configured the above then you should be good to go to use TLM
Quick Start
- First select your satellite you want to track. In the example I have selected Greencube
- If there is a decoder plugin available then it will show the decoder information
- The future passes grid will show calculated passes for the TLE for the next couple of days.
- Take note of the green TNC Connected status in the status bar. Green means it has succesfully connected, red means it is not connected. It will automatically try to connect based on the settings your provided, but you can force a connect by clicking on the status.
- Underneath the Future Passes grid you have the following options:
(a) Filter on visibility: This will only show data received when your station is in the footprint of the selected satellite. This is to prevent noise being decoded into false data packets.
(b) Forward to SatNOGS: If this is enabled then the data packets received will be forwarded to SatNOGS database and stored under your callsign.
(c) Forward decoded frames only: This is only available if there is a decoder plugin for this satellite and if checked it will only forward the data received it if it can be decoded with the decoder. - The debug at the bottom will show various messages on whats happening including the data received. If there is a decoder available it will attempt to decode it and if successful it will populate the grid under the Telemetry tab. You can select a decoded packet and view the properties in the list next to it.
Plugin Information
A plugin is a separate file stored in your plugins folder (see configuration below). A plugin would typically be a dll file and all it does is get the received data from TLM, decode the data into something more readable (mostly the various fields with their values). It will the return a dictionary of the data back to TLM which will display it. The plugin is linked to your satellite you are tracking by the NoradID specified in the plugin. That is how it knows which plugin it needs to use when you select a specific satellite.
Available Plugins
As a proof of concept I currently only have a Greencube decoder plugin available. As I test everything I will develop a few more plugins. If you have specific request then let me know. It will go faster if you have a decent spec and possibly a Kaitai Structure file (*.ksy), although not required. Also see below on making your own decoder plugin.
2022/12/19: Cas-5A (FO-118) (Telemetry)
2022/12/01: Greencube Telemetry Plugin Download (Only Decodes Telemetry Packets, not digipeater)
To use the plugin, create a plugins folder and change your plugin path settings in TLM to point to this folder, it should then detect the plugin and if you select the satellite linked to this plugin and receive data it will try and use the plugin to decode the data.
Make your own Plugin
Requirements: Visual Studio 2022
You only need to care about this section if you want to develop your own decoder plugins for TLM. I still need to do a complete tutorial, but you basically use Visual Studio to create a dll file that has set functions as part of the plugin interface:
{
public interface IPlugin
{
int NoradID { get; }
int Version { get; }
string Name { get; }
string Author { get; }
string Description { get; }
public Hashtable parseFrame(byte[] frame);
}
}
You can find an example greencoder plugin project on github which uses the Kaitai Structure file from SatNOGS to easily decode the telemetry data. You however don’t need to use a Kaitai script and can decode the data in your own code. At the end of the parseFrame function you would return a hashtable with all the fields and data of the decoded telemetry packet.
Download Plugin Interface Project
Download Greencube Plugin Interface Project
To compile the plugin, or make a new one you need to add the Plugin Interface Project in your solution as reference.
TLM Downloads
If you use and enjoy my software and would like to support future projects, then you can buy me a beer or if you prefer donate via Paypal.
Download – 2022/12/20
Changelog
2022/12/20: added telemetry graph functionality. saves .kss files, fixed a few bugs and cleaned up interface
2022/12/01: Initial Proof of Concept
Note: This was developed using .NET framework 6.0 (LTS)
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.