Skip to content

Heartbeat (Draft) - HdrType=1

Overview

Draft

Heartbeat is draft and subject to change.

This is the structure and behavior of Heartbeat (HdrType=1) in Extended Telemetry

Goals:

  • Gives an "I'm alive" message when gps lock not available
    • Can be (but not only) sent when a GPS lock is not acquired but the tracker is alive and able to send
  • Helps identify flight channel
    • This is a tracker-affirmed statement of intended frequency, which helps condition the search for related data
  • Helps identify flight start/stop time
    • Aids live tracking as well as data mining
  • Gives additional useful status
    • Tracker health, GPS health

Message Structure

The header, as explained in Header Fields, explains the whole message header structure.

The fields below are for when the HdrType=1 indicating a Heartbeat message.

Link to Message Definition

The structure of the Heartbeat fields

Field Unit LowValue HighValue StepSize # Values
TxFreqHz Idx 0 200 1 201
Uptime Minutes 0 1440 10 145
GpsLockType Enum 0 2 1 3
GpsTryLock Seconds 0 1200 5 241
GpsSatsInView Count 0 50 2 26

Field TxFreqHzIdx

TxFreqHzIdx - Intended TX frequency

Values

Value = Which of the 201 frequencies making up the WSPR band is the intended TX frequency?

eg:

  • 20m band has 201 frequencies making up the WSPR band:
    • 14,095,600 Hz notional Dial frequency
    • 14,097,000 Hz Low end frequency
    • 14,097,200 Hz High end frequency
  • For a given WSPR Encoded message (where id13 set to, say, Q5):
    • You know you are looking at channels 500-519
    • You can determine Lane by the FreqHz value falling into that Lane
    • You can determine Channel by combination of the HdrSlot and minute of reception

With the above, you can definitively identify the Channel of the transmitter.

Encoding

The TxFreqHzIdx value is an "index" into the list of 201 frequencies possible to transmit on for the given band.

Using the above example:

  • 14,097,000 is TxFreqHzIdx = 0
  • 14,097,001 is TxFreqHzIdx = 1
  • ...
  • 14,097,200 is TxFreqHzIdx = 200

Intended purpose

Lets receivers:

  • Match up transmitter to intended channel definitively.
  • Better understand relationship between TX frequency and RX reports.

Rationale

Q: What channel is a data stream attempting to transmit on?
A: At the moment, we have to infer

Q: Should we pack in the Channel then to identify?
A: No, we can do better, cheaper.

When you have data in the WSPR Encoded format, the id13=Q/0/1 already tells you a "column" in the Channel Map, so actually we only have to identify "Lane."

However, "Lane" may later change/expand, and we don't think "Lane" or even the strict concept of "Channels" are a hard requirement, and may change quantity in the future.

What will remain, though, is the WSPR Encoded format. And, also remaining, the fact that you're in a band with only 200Hz of possible intended frequencies to transmit on.

So ... indicate a value 0-200 inclusive, the literal intended Hz of transmission as an index offset from the lowest frequency to the highest within the given band.

This tells you: The channel (because today, sites can interpret the FreqHzIdx as being within one of the "Lanes" Later, if the scheme changes, the tracker is still going to intend to transmit on a given Hz, this identifies it

Field UptimeMinutes

Values

Uptime is in minutes since last reboot.

Max value is 24 hours.

Granularity at 10 minute intervals because that's the interval of transmission windows, so not much point having finer than that.

Intended purpose

Help diagnose health of tracker by being able to determin reboots during periods where that may not be expected.

Field GpsLockTypeEnum

GpsLockTypeEnum - Whether GPS is locked at this moment or not

Values

Distinguish between 3 states:

  • 0 = NoLock
  • 1 = TimeLock
  • 2 = LocationLock

Intended purpose

Trackers are not always dependent on GPS to know the current time, and to therefore know when to transmit data.

It is possible that a tracker has achieved some amount of GPS data (time, position), or none at all.

This field distinguishes.

Field GpsTryLockSeconds

GpsTryLockSeconds - Latest GPS lock attempt duration so far

Values

Number of seconds that the most current GPS lock attempt took to get to the stated GpsLockTypeEnum state.

Field GpsSatsInViewCount

GpsSatsInViewCount - Latest GPS lock attempt duration so far

Values

Just a count of the number of satellites in view.

This does not distinguish by constellation type. Meant to be sum total of satellites that contribute to the ability to get a GPS lock.

When this message can be sent

Send whenever

Suitable to replace Slot 0 Type1 Callsign message when no GPS lock available.

Suitable to use as a frequency reference for fingerprinting.

Can send in any window, any slot, in as many slots as you want (all 5 is valid).

Ok to send in Slot 2 in one window and Slot 3 in another. Or any combination.

Example Use Cases

When What
No GPS Location lock Send to indicate proof of life.
Periodically Send to establish frequency linking, stats, start/end of flight.
eg 1-5 times per day.