Overview

P6 (or Protocol 6) is the proprietary communication protocol used by all Ground Control tracking devices (including RockSTAR, RockFLEET and RockAIR). This two-way protocol encompasses all device functionality including: tracking, messaging, alerting and configuration.

Given the bandwidth constrained nature of satellite communication, P6 messages are highly optimised and compressed. As such, the decoding (and encoding) process is inherently more complex than other messaging protocols; to minimise the development effort associated with integration, we expose a simple API to retrieve the decoded messages from the "raw" message payloads.

Additionally, for integrators consuming from the Data (MO) endpoints - decodable P6 messages will be automatically decoded; the decoded P6 messages will be included in the response.

Regardless of method, all decoded P6 messages follow a standard format, as described below.

Anatomy of a P6 Message Response

The snippet below shows the response from DataMo/GetMessages - whereby the "raw" payload of the message received from the tracking device was "06006dd0782270586e100c90818c004664120d" - this has been automatically interpreted as a P6 message into the "decoded" attribute; as a standard position report.

{
  "messages": [
    {
      "txAt": "2023-03-15T18:54:07",
      "latitude": 22.32,
      "rxAt": "2023-03-15T18:54:07",
      "cdrReference": 3095383920,
      "momsn": 1234,
      "size": 19,
      "payload": "06006dd0782270586e100c90818c004664120d",
      "decoded": {
        "status": true,
        "messages": [
          {
            "mo": {
              "position": {
                "standard": {
                  "at": {
                    "year": 2023,
                    "month": 1,
                    "day": 18,
                    "hour": 16
                  },
                  "timeDelta": 57600,
                  "dayOfYear": 18,
                  "latlng": {
                    "latitude": 53.93584000000001,
                    "longitude": 0.5587500000000034
                  },
                  "altitude": 4,
                  "course": 264,
                  "speed": 4.9,
                  "navigationMode": "NAVIGATION_MODE_3D",
                  "battery": 100,
                  "pdop": 3.25,
                  "temperature": 11
                }
              }
            }
          }
        ]
      },
      "cepRadius": null,
      "id": "zolNGxekOvAKmanjxERdpyLgXjMbVPZq",
      "hardware": "zolNGxekOvAKmanjxERdpyLgXjMbVPZq",
      "longitude": -123.0,
      "status": "SBD_SESSION_SUCCESSFUL"
    }
  ]
}

Example 1 - Routine Position Report

This is the standard position report - it's the most common message that you're likely to encounter

{
  "mo": {
    "position": {
      "standard": {
        "at": {
          "year": 2023,
          "month": 1,
          "day": 18,
          "hour": 16
        },
        "timeDelta": 57600,
        "dayOfYear": 18,
        "latlng": {
          "latitude": 53.93584000000001,
          "longitude": 0.5587500000000034
        },
        "altitude": 4,
        "course": 264,
        "speed": 4.9,
        "navigationMode": "NAVIGATION_MODE_3D",
        "battery": 100,
        "pdop": 3.25,
        "temperature": 11
      }
    }
  }
}

Example 2 - Burst Position Report

"Burst" Position Reports include multiple positions in a single transmission - it comprises of a "base position" and multiple "delta positions" which are internally referenced from the base position.

{
  "mo": {
    "encrypted": false,
    "alertStatus": false,
    "powerStatus": true,
    "watchStatus": false,
    "type": "MO_MESSAGE_BURST_POSITION_REPORT",
    "burstPosition": {
      "basePosition": {
        "standard": {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 8,
            "hour": 13,
            "minute": 25,
            "second": 0
          },
          "timeDelta": 48300,
          "dayOfYear": 8,
          "latlng": {
            "latitude": -19.975980000000007,
            "longitude": 23.42394999999999
          },
          "altitude": 952,
          "course": 0,
          "speed": 0.1,
          "navigationMode": "NAVIGATION_MODE_3D",
          "battery": 72,
          "pdop": 1.25,
          "temperature": 30
        }
      },
      "interval": "BURST_FIX_FREQUENCY_MINUTES_1",
      "deltas": [
        {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 8,
            "hour": 13,
            "minute": 24,
            "second": 0
          },
          "latitudeDelta": -1.0E-5,
          "longitudeDelta": -1.0E-5,
          "latLng": {
            "latitude": -19.975990000000007,
            "longitude": 23.42393999999999
          },
          "altitudeDelta": -1,
          "altitude": 951
        },
        {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 8,
            "hour": 13,
            "minute": 23,
            "second": 0
          },
          "latitudeDelta": 0.0,
          "longitudeDelta": -1.0E-5,
          "latLng": {
            "latitude": -19.975990000000007,
            "longitude": 23.42392999999999
          },
          "altitudeDelta": 0,
          "altitude": 951
        },
        {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 8,
            "hour": 13,
            "minute": 22,
            "second": 0
          },
          "latitudeDelta": -1.0E-5,
          "longitudeDelta": -1.0E-5,
          "latLng": {
            "latitude": -19.976000000000006,
            "longitude": 23.423919999999992
          },
          "altitudeDelta": -1,
          "altitude": 950
        },
        {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 8,
            "hour": 13,
            "minute": 21,
            "second": 0
          },
          "latitudeDelta": -1.0E-5,
          "longitudeDelta": -1.0E-5,
          "latLng": {
            "latitude": -19.976010000000006,
            "longitude": 23.423909999999992
          },
          "altitudeDelta": -2,
          "altitude": 948
        }
      ]
    }
  }
}

Example 3 - Red Button Alert

When a user presses the red distress button on the tracker, a button alert message will be generated

{
  "mo": {
    "encrypted": false,
    "alertStatus": true,
    "powerStatus": false,
    "watchStatus": false,
    "type": "MO_MESSAGE_ALERT_HIGH_PRIORITY",
    "genericAlert": {
      "position": {
        "standard": {
          "at": {
            "year": 2023,
            "month": 3,
            "day": 1,
            "hour": 21,
            "minute": 38,
            "second": 16
          },
          "timeDelta": 77896,
          "dayOfYear": 1,
          "latlng": {
            "latitude": 53.58412000000001,
            "longitude": -116.74485
          },
          "altitude": 1019,
          "course": 0,
          "speed": 0.1,
          "navigationMode": "NAVIGATION_MODE_3D",
          "battery": 100,
          "pdop": 3.0,
          "temperature": 16
        }
      },
      "eventId": "ALERT_EVENT_BUTTON_ALERT",
      "deltaTime": 5,
      "at": {
        "year": 2023,
        "month": 3,
        "day": 1,
        "hour": 21,
        "minute": 38,
        "second": 21
      }
    }
  }
}

🚧

Further information

In addition to the common examples above, please consult the P6 packet specification for more information about the other types of messages that the tracking devices can generate.

Supported Message Types:

MO_MESSAGE_AUTO_POSITION_REPORT
MO_MESSAGE_POWER_POSITION_REPORT
MO_MESSAGE_MANUAL_POSITION_REPORT
MO_MESSAGE_ALERT_HIGH_PRIORITY
MO_MESSAGE_POWER_POSITION_REPORT_NO_FIX
MO_MESSAGE_AUTO_POSITION_REPORT_NO_FIX
MO_MESSAGE_ALERT_HIGH_PRIORITY_NO_FIX
MO_MESSAGE_MANUAL_POSITION_REPORT_NO_FIX
MO_MESSAGE_ALERT_POWER_LOSS
MO_MESSAGE_ALERT_BLUETOOTH_LOSS
MO_MESSAGE_ALERT_COUNTDOWN_TIMER
MO_MESSAGE_ALERT_DEAD_MAN
MO_MESSAGE_ALERT_TEMPERATURE
MO_MESSAGE_ALERT_OUTSIDE_GEOFENCE
MO_MESSAGE_ALERT_COLLISION
MO_MESSAGE_ALERT_GENERIC
MO_MESSAGE_ALERT_POLYFENCE
MO_MESSAGE_AUTO_POSITION_REPORT_COMPACT
MO_MESSAGE_AUTO_POSITION_REPORT_AES
MO_MESSAGE_ALERT_POWER_LOSS_NO_FIX
MO_MESSAGE_ALERT_BLUETOOTH_LOSS_NO_FIX
MO_MESSAGE_ALERT_COUNTDOWN_TIMER_NO_FIX
MO_MESSAGE_ALERT_DEAD_MAN_NO_FIX
MO_MESSAGE_ALERT_TEMPERATURE_NO_FIX
MO_MESSAGE_ALERT_OUTSIDE_GEOFENCE_NO_FIX
MO_MESSAGE_ALERT_COLLISION_NO_FIX
MO_MESSAGE_ALERT_GENERIC_NO_FIX
MO_MESSAGE_BEACON_SEEN
MO_MESSAGE_BEACON_SEEN_NO_FIX
MO_MESSAGE_BURST_POSITION_REPORT
MO_MESSAGE_BURST_POSITION_REPORT_COMPACT
MO_MESSAGE_BURST_POSITION_REPORT_AES
MO_MESSAGE_TEXT_MESSAGE_MO
MO_MESSAGE_TEXT_MESSAGE_MO_NO_FIX
MO_MESSAGE_CONNECT_MESSAGE_MO
MO_MESSAGE_WAYPOINT_REPORT
MO_MESSAGE_START_WATCHING_ME
MO_MESSAGE_START_WATCHING_ME_NO_FIX
MO_MESSAGE_STOP_WATCHING_ME
MO_MESSAGE_RAW_MESSAGE_MO
MO_MESSAGE_ACKNOWLEDGEMENT_MO
MO_MESSAGE_ACKNOWLEDGEMENT_MO_AUTO
MO_MESSAGE_MULTIPLE_MESSAGE_WRAPPER
MO_MESSAGE_DEACTIVATION_NO_FIX
MO_MESSAGE_DEACTIVATION
MO_MESSAGE_SERIAL_MESSAGE_MO
MO_MESSAGE_SERIAL_MESSAGE_MO_NO_POSITION
MO_MESSAGE_STOP_WATCHING_ME_NO_FIX
MO_MESSAGE_CONFIG_SEND
MO_MESSAGE_SEND_PROPERTIES