Skip to content

Extended Telemetry Milestone - First Send!

Overview

A happy milestone, the first Extended Telemetry message was published over-the-air and decoded successfully!

Transmission

A modified Jetpack tracker was set up to transmit the test message using the WsprEncoded library implementing Extended Telemetry, making use of the UserDefined type.

The message "HI_MOM" was encoded, sent over the air, received, and decoded.

The WSJT-X reception was in slot 2, immediately following Basic Telemetry.

WSJT text output:

0126  -17  -0.1   14.097034    0   KD2KDD        FN20     13     50
0126   16  -0.1   14.097154    0   KD2KDD        FN20     13     50
0128  -17  -0.1   14.097034    0   QY0OZA        NI18     43   9375
0128   16  -0.1   14.097154    0   QY0OZA        NI18     43   9375
0130  -17  -0.1   14.097034    0   QA0NPI        BM19     50   4214
0130   15  -0.0   14.097154    0   QA0NPI        BM19     50   4214

Steps

The message field definition was first mocked up in the online Extended Telemetry Playground.

Field defs:

{ "name": "C1", "unit": "Char", "lowValue": 0, "highValue": 25, "stepSize": 1 },
{ "name": "C2", "unit": "Char", "lowValue": 0, "highValue": 25, "stepSize": 1 },
{ "name": "C3", "unit": "Char", "lowValue": 0, "highValue": 30, "stepSize": 1 },
{ "name": "C4", "unit": "Char", "lowValue": 0, "highValue": 25, "stepSize": 1 },
{ "name": "C5", "unit": "Char", "lowValue": 0, "highValue": 25, "stepSize": 1 },
{ "name": "C6", "unit": "Char", "lowValue": 0, "highValue": 25, "stepSize": 1 },

Since I wanted a fun test message, but ASCII fields aren't really a thing in Extended Telemetry, I defined the fields as integer offsets from the letter A. (In normal messages you wouldn't do a thing like this, it's just for fun.)

Each field can hold letters A-Z, but I defined the C3 field is defined as going all the way up to the underscore _ just for demo purposes.

Once that was seen working, I coded it up, using the UserDefined API Encoding Example as a reference.

#include "WsprEncoded.h"

// ...

void SendTestUserDefinedMessage(const char *id13, uint8_t slot)
{
    WsprMessageTelemetryExtendedUserDefined<6> msg;

    // set up field defs
    msg.DefineField("C1", 0, 25, 1);
    msg.DefineField("C2", 0, 25, 1);
    msg.DefineField("C3", 0, 30, 1);
    msg.DefineField("C4", 0, 25, 1);
    msg.DefineField("C5", 0, 25, 1);
    msg.DefineField("C6", 0, 25, 1);

    // set values
    msg.Set("C1", 'H' - 'A');
    msg.Set("C2", 'I' - 'A');
    msg.Set("C3", '_' - 'A');
    msg.Set("C4", 'M' - 'A');
    msg.Set("C5", 'O' - 'A');
    msg.Set("C6", 'M' - 'A');

    // encode
    msg.SetId13(id13);
    msg.SetHdrSlot(slot);
    msg.Encode();

    // send
    // ...
}

Once WSJT-X received the data, I was able to manually decode the data using the Playground link above.

==========================
QA0NPI BM19 50
==========================
ExtTel (HdrRESERVED 0, HdrSlot 2, HdrType 0)
id13: Q0
C1  : 7
C2  : 8
C3  : 30
C4  : 12
C5  : 14
C6  : 12

Working out the above, it's "HI_MOM" as expected!

Next Milestones

The search dashboard is undergoing a complete re-write to fully support Extended Telemetry.

This will mean the ability for users to:

  • Define their own UserDefined telemetry
  • Send it
  • Have the dashboard decode it, tabulate the extracted values, and graph the values
  • No coordination between that user and anyone else necessary

Further ahead, Jetpack will be extended to:

  • Send Extended Telemetry on a regular basis (eg Enhanced Basic Telemetry, etc)
    • Automatically, that is
  • Take configuration which allows non-programmers to send data from sensors they attach to Jetpack (UserDefined telemetry)
  • And more!

Stay tuned!