Isro SSLV-D3 - 2024-08-16 03:47 UTC

The Team in India behind SR-0 DemoSAT is just amazing…

While work continues to finalize both downlink & uplink documentation (as well as coding a conventional, stand-alone telemetry decoder), these guys have provided the steps to use ChatGPT (https://chatgpt.com/)

… to decode the downlink HEX bytes into human-readable telemetry values!

I can’t do this justice as it’s my first time on that site, so it’s easier just to try it and see for yourself.

After the free login, on the Message ChatGPT line at the bottom, you simply paste in the ENTIRE instruction below:

Decode the following byte array using the satellite_info structure. The data is in little-endian order. The structure is as follows:

struct satellite_info {
    char call_sign[6];
    uint16_t frame_number;
    uint8_t message_type;
    uint8_t transmission_power;
    unsigned long satellite_unix_time;
    int16_t obc_temperature; 
    int16_t battery_temperature;
    int16_t external_temperature;
    int16_t base_plate_temperature;
    int16_t solar_panel_temperature;
    int16_t radiation;
    uint16_t bus_voltage; 
    int16_t bus_current; 
    uint16_t battery_maximum_capacity; 
    uint16_t battery_remaining_capacity; 
    uint16_t solar_bus_voltage;
    uint16_t solar_bus_current; 
    uint16_t boot_counter;
    uint8_t checksum; 
};

The temperature readings are in Celsius, the current readings are in milliamps (mA), and the radiation readings are in µSv/h.

If transmission_power = 0, display as "100 mW"

If transmission_power = 1, display as "1 watt" 

The values for obc_temperature, battery_temperature, external_temperature, base_plate_temperature, and solar_panel_temperature need to be divided by 10. 

The values for solar_bus_voltage and bus_current need to be divided by 1000. The radiation value should be divided by 100. give only summary

… after that, you can paste in HEX decodes and watch the parsing of the data flow up the screen. A summary appears at the end.

The damn thing even tells you what it intends to do based on your instructions. And if you’d like to add to how it should behave (as I did to clarify the meaning of the ‘transmission_power’ byte), you can add that in separately.

The decode below was generated by pasting in one of last night’s decodes: (screen shot just shows the summary at the end)

53 52 30 53 41 54 FC 19 01 00 24 B4 C1 66 A4 00 E5 00 F6 FF 71 00 45 00 B8 01 23 10 DC FF 7A 0A 03 0C 2C 10 24 00 01 00 17

… so, I’m looking forward to updated documentation, especially the how-to for uplinking LoRa packets to SR-0’s ‘mailbox slot’ style store-and-forward message relay capability! In the meantime, I guess I can stop using my abacus and slide-rule to decode these telemetry packets thanks to the instructions that the Team has kindly provided for the ChatGPT site.

7 Likes