Access to create telemetry dashboard for PEGASUS satellite

Hello together,

as the developer and maintainer of our PEGASUS SatNOGS ground station in Austria, I would like to ask for access to create a telemetry dashboard.

I am part of the ground station team among some other students which support my work. The PEGASUS mission will soon come to an end, but we would like to learn as much as possible from it. Therefore, we are in a hurry concerning the full implementation of our satellite. Our next CubeSat mission CLIMB is planed to be launch next year, it shall be fully integrated into SatNOGS. :slight_smile:

As a starting point for the SatNOGS Dashboard, we have developed a satnogs-decoder parser with the support of @DL4PD. The merge request is currently still open. I have pushed the last changes today, I hope it gets merged soon :wink:

@fredy: If you will give us access to the dashboard, please contact me via DM, i will provide you with the accounts of the team.

Many thanks from Austria,
Alex, OE3ALA


Thanks for your work! I just merged the decoder and tagged the decoder for a release to SatNOGS-DB, awaiting the deployment soon!

Gimme a message about your accounts on


@fh_wienerneustadt decoders have been deployed and the one for Pegasus has already been assigned to the satellite. In the next minutes all data will pass through the decoder and will be ready to be used in the dashboards site.

1 Like

I have a question concerning booleans in SatNOGS Dashboards. PEGASUS has many status bits, which I have implemented using booleans in the Kaitai satnogs-decoder (e.g. b1 = true / false).

According to the Grafana description there is the possibility to map special values (e.g. booleans) with a user-defined text. Nevertheless, within SatNOGS Dashboards, I am only able to visualize “true” or “false”, but I am not able to map “true” = enabled or “false” = disabled. E.g.:

I have also tried to map “1 = enabled” and “0 = disabled”, but it still shows only “true” or “false”:

Am I doing something wrong, or aren’t there all Grafana features available within SatNOGS Dashboards? :slight_smile: Looking into other boards didn’t help much, since they provide those status bits as a number (0 or 1) and map the text to it.

This seems to be a limitation in the (ancient) Grafana version we use.


Within SatNOGS DB - PEGASUS I am able to see all decoder fields. Within SatNOGS Dashboard I am not able to select some of them, especially those of not frequently or only on request sent beacons:

  • A-Beacon
  • S-Beacon
  • E-Beacon (Not sure about that, since most of the fields are the same as within the O-Beacons)
  • HKD-Beacon (Not sure about that, since most of the fields are the same as within the O-Beacons)

O1-Beacon and O2-Beacon are sent every 30 Seconds and work perfectly fine. :slight_smile: Is there a reason, why the other fields are missing / not selectable in the dashboard? The S-Beacon was received around 5 times since the decoder was implemented.

Did you validate that your decoder decodes everything? And did you ensure that there’s no binary data in one of those fields?

1 Like

As @DL4PD says, this sounds like they are not decoded, in order to confirm it, is it possible to point me to them in one or more Network observations?

Here are the last observations with data in Network for the last week. After pointing me to the beacons in the observations I can check if they are decoded when sent in DB.

Hello together,

when I download the pegasus.ksy from the respository (ksy/pegasus.ksy · master · librespacefoundation / SatNOGS / satnogs-decoders · GitLab) and take the binary file of the S-beacon (data_obs/2023/11/27/6/8590598/data_8590598_2023-11-27T06-55-30_g0) starting with 0xC0 from the last PEGASUS observation (SatNOGS Network - Observation 8590598) of our SatNOGS ground station, it works perfectly fine using the Kaitai Web IDE:

@DL4PD What do you mean with “no binary data in one of those fields”?

One Note (not sure if it is relevant): I left the last 18 bytes untouched, since these contain the CRC and FEC bytes. But I did that for all beacons, where this isn’t a problem - also according to Kaitai Doc thats perfectly fine. Only our station uploades this last 18 bytes due to a gr-satellites modification, since we need them for our local data base.

Note 2: In some beacons I forgot to remove some padding bytes within the doc-strings fields. I specified padding bytes with following notation:

      - id: padding_a1
        size: 11

But I did that also within the O2-beacon. Here I can see all relevant fields.

Oh, you should always check the whole decoding process as described in the readme.

That’s installing the package and run one of the decoder CLI commands. It should produce a JSON output with all fields present that are filled with data.

1 Like

I have overseen this … thought it is enough to check it within Kaitai Web IDE and passing the pipeline after commiting the changes within the MR. :slight_smile: I will have a look on how to check it correctly.


I can help with that but most probably not today :smirk:

1 Like

I confirm that this frame isn’t decoded in DB, from the API:

        "sat_id": "ODVU-9534-1482-5519-1606",
        "norad_cat_id": 42784,
        "transmitter": "",
        "app_source": "network",
        "decoded": "",
        "frame": "C04F4E303341549E02091C00000001220001061C00C0A6FFFFC0A6B6A600FF0098600B00000195028B02FFFFFFFFBB7D7399142956E6C15FE2FAB02CE0C871D2",
        "observer": "FHWN UHF-JN87cu",
        "timestamp": "2023-11-27T06:58:12Z",
        "version": "",
        "observation_id": 8590598,
        "station_id": 3045,
        "associated_satellites": []

If it was decoded, the decoded field would have the value influxdb.

❯ decode_multiple --hex_frame C04F4E303341549E02091C00000001220001061C00C0A6FFFFC0A6B6A600FF0098600B00000195028B02FFFFFFFFBB7D7399142956E6C15FE2FAB02CE0C871D2 Pegasus
Traceback (most recent call last):
  File "/Users/pd/Documents/software/.decoders-venv/bin/decode_multiple", line 33, in <module>
    sys.exit(load_entry_point('satnogs-decoders', 'console_scripts', 'decode_multiple')())
  File "/Users/pd/Documents/software/satnogs-decoders/satnogsdecoders/", line 63, in main
    print(decode_multiple(args.decoder_name, parms, args.v))
  File "/Users/pd/Documents/software/satnogs-decoders/satnogsdecoders/", line 180, in decode_multiple
    return json.dumps(json_obj, indent=4, sort_keys=False)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 234, in dumps
    return cls(
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 201, in encode
    chunks = list(chunks)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 429, in _iterencode
    yield from _iterencode_list(o, _current_indent_level)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 325, in _iterencode_list
    yield from chunks
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 405, in _iterencode_dict
    yield from chunks
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 405, in _iterencode_dict
    yield from chunks
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 438, in _iterencode
    o = _default(o)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable
1 Like

Only HKD, O1 and O2 are JSON serialisable. All others most probably contain binary data in the JSON output (JSON doesn’t support binary data).


  :field ant_deploy_status: tt64_frame.beacon.ant_deploy_status
  :field padding_a1: tt64_frame.beacon.padding_a1


  :field padding_e1: tt64_frame.beacon.padding_e1


  :field tan: tt64_frame.beacon.tan

All those fields contain binary data and they are of no value. Simply remove them and check for any more unused fields.

1 Like

Many thanks for pointing that out! :slight_smile: I will perform some changes. Since I am not very into GIT, how are changes to an already merged branch performed?

Do I only need to fork the master branch, adopt it + commit & push?

I have found that in the merged “Merge Request”, is this the way to got?

When the MR is merged then it is part of the code, so what you need is to get the updated code and start from the beginning to apply your changes/fixes with new commit(s) and new MR.

So, in your local repo, you get the changes from the remote repo of LSF. Then you perform the commits, push to your own remote repo (in a new branch or in your master branch) and then you create the new MR.

Let me know if you need any additional help.

1 Like

Thanks for your support! I have adjusted the decoder and opened up a merge request to fix the PEGASUS decoder:

All relevant changes are applied and pipeline passed. :slight_smile:

1 Like

Did you test that decoder?