Skip to content

Telemetry

Zone pydantic-model

Bases: OtfItemBase

A heart rate zone defined by a BPM range.

Show JSON schema:
{
  "description": "A heart rate zone defined by a BPM range.",
  "properties": {
    "startBpm": {
      "description": "Lower bound BPM for this zone.",
      "title": "Startbpm",
      "type": "integer"
    },
    "endBpm": {
      "description": "Upper bound BPM for this zone.",
      "title": "Endbpm",
      "type": "integer"
    }
  },
  "required": [
    "startBpm",
    "endBpm"
  ],
  "title": "Zone",
  "type": "object"
}

Fields:

start_bpm pydantic-field

start_bpm

Lower bound BPM for this zone.

end_bpm pydantic-field

end_bpm

Upper bound BPM for this zone.

Zones pydantic-model

Bases: OtfItemBase

The five OTF heart rate zones (gray, blue, green, orange, red) with their BPM ranges.

Show JSON schema:
{
  "$defs": {
    "Zone": {
      "description": "A heart rate zone defined by a BPM range.",
      "properties": {
        "startBpm": {
          "description": "Lower bound BPM for this zone.",
          "title": "Startbpm",
          "type": "integer"
        },
        "endBpm": {
          "description": "Upper bound BPM for this zone.",
          "title": "Endbpm",
          "type": "integer"
        }
      },
      "required": [
        "startBpm",
        "endBpm"
      ],
      "title": "Zone",
      "type": "object"
    }
  },
  "description": "The five OTF heart rate zones (gray, blue, green, orange, red) with their BPM ranges.",
  "properties": {
    "gray": {
      "allOf": [
        {
          "$ref": "#/$defs/Zone"
        }
      ],
      "description": "Rest/very light effort zone."
    },
    "blue": {
      "allOf": [
        {
          "$ref": "#/$defs/Zone"
        }
      ],
      "description": "Light effort zone."
    },
    "green": {
      "allOf": [
        {
          "$ref": "#/$defs/Zone"
        }
      ],
      "description": "Moderate effort (base pace) zone."
    },
    "orange": {
      "allOf": [
        {
          "$ref": "#/$defs/Zone"
        }
      ],
      "description": "High effort (push pace) zone, earns splat points."
    },
    "red": {
      "allOf": [
        {
          "$ref": "#/$defs/Zone"
        }
      ],
      "description": "Maximum effort (all-out) zone, earns splat points."
    }
  },
  "required": [
    "gray",
    "blue",
    "green",
    "orange",
    "red"
  ],
  "title": "Zones",
  "type": "object"
}

Fields:

gray pydantic-field

gray

Rest/very light effort zone.

blue pydantic-field

blue

Light effort zone.

green pydantic-field

green

Moderate effort (base pace) zone.

orange pydantic-field

orange

High effort (push pace) zone, earns splat points.

red pydantic-field

red

Maximum effort (all-out) zone, earns splat points.

TreadData pydantic-model

Bases: OtfItemBase

Treadmill telemetry data for a single point in time.

Show JSON schema:
{
  "description": "Treadmill telemetry data for a single point in time.",
  "properties": {
    "treadSpeed": {
      "description": "Current treadmill speed.",
      "title": "Treadspeed",
      "type": "number"
    },
    "treadIncline": {
      "description": "Current treadmill incline.",
      "title": "Treadincline",
      "type": "number"
    },
    "aggTreadDistance": {
      "description": "Cumulative treadmill distance.",
      "title": "Aggtreaddistance",
      "type": "integer"
    }
  },
  "required": [
    "treadSpeed",
    "treadIncline",
    "aggTreadDistance"
  ],
  "title": "TreadData",
  "type": "object"
}

Fields:

tread_speed pydantic-field

tread_speed

Current treadmill speed.

tread_incline pydantic-field

tread_incline

Current treadmill incline.

agg_tread_distance pydantic-field

agg_tread_distance

Cumulative treadmill distance.

RowData pydantic-model

Bases: OtfItemBase

Rower telemetry data for a single point in time.

Show JSON schema:
{
  "description": "Rower telemetry data for a single point in time.",
  "properties": {
    "rowSpeed": {
      "description": "Current rowing speed.",
      "title": "Rowspeed",
      "type": "number"
    },
    "rowPps": {
      "description": "Rowing power per stroke.",
      "title": "Rowpps",
      "type": "number"
    },
    "rowSpm": {
      "description": "Rowing strokes per minute.",
      "title": "Rowspm",
      "type": "number"
    },
    "aggRowDistance": {
      "description": "Cumulative rowing distance.",
      "title": "Aggrowdistance",
      "type": "integer"
    },
    "rowPace": {
      "description": "Current rowing pace.",
      "title": "Rowpace",
      "type": "integer"
    }
  },
  "required": [
    "rowSpeed",
    "rowPps",
    "rowSpm",
    "aggRowDistance",
    "rowPace"
  ],
  "title": "RowData",
  "type": "object"
}

Fields:

row_speed pydantic-field

row_speed

Current rowing speed.

row_pps pydantic-field

row_pps

Rowing power per stroke.

row_spm pydantic-field

row_spm

Rowing strokes per minute.

agg_row_distance pydantic-field

agg_row_distance

Cumulative rowing distance.

row_pace pydantic-field

row_pace

Current rowing pace.

TelemetryItem pydantic-model

Bases: OtfItemBase

A single telemetry data point captured during a workout.

Show JSON schema:
{
  "$defs": {
    "RowData": {
      "description": "Rower telemetry data for a single point in time.",
      "properties": {
        "rowSpeed": {
          "description": "Current rowing speed.",
          "title": "Rowspeed",
          "type": "number"
        },
        "rowPps": {
          "description": "Rowing power per stroke.",
          "title": "Rowpps",
          "type": "number"
        },
        "rowSpm": {
          "description": "Rowing strokes per minute.",
          "title": "Rowspm",
          "type": "number"
        },
        "aggRowDistance": {
          "description": "Cumulative rowing distance.",
          "title": "Aggrowdistance",
          "type": "integer"
        },
        "rowPace": {
          "description": "Current rowing pace.",
          "title": "Rowpace",
          "type": "integer"
        }
      },
      "required": [
        "rowSpeed",
        "rowPps",
        "rowSpm",
        "aggRowDistance",
        "rowPace"
      ],
      "title": "RowData",
      "type": "object"
    },
    "TreadData": {
      "description": "Treadmill telemetry data for a single point in time.",
      "properties": {
        "treadSpeed": {
          "description": "Current treadmill speed.",
          "title": "Treadspeed",
          "type": "number"
        },
        "treadIncline": {
          "description": "Current treadmill incline.",
          "title": "Treadincline",
          "type": "number"
        },
        "aggTreadDistance": {
          "description": "Cumulative treadmill distance.",
          "title": "Aggtreaddistance",
          "type": "integer"
        }
      },
      "required": [
        "treadSpeed",
        "treadIncline",
        "aggTreadDistance"
      ],
      "title": "TreadData",
      "type": "object"
    }
  },
  "description": "A single telemetry data point captured during a workout.",
  "properties": {
    "relativeTimestamp": {
      "description": "Seconds since the start of the class.",
      "title": "Relativetimestamp",
      "type": "integer"
    },
    "hr": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Heart rate in BPM at this point in time.",
      "title": "Hr"
    },
    "aggSplats": {
      "description": "Cumulative splat points at this time.",
      "title": "Aggsplats",
      "type": "integer"
    },
    "aggCalories": {
      "description": "Cumulative calories burned at this time.",
      "title": "Aggcalories",
      "type": "integer"
    },
    "timestamp": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The timestamp of the telemetry item, calculated from the class start time and relative timestamp.",
      "title": "Timestamp"
    },
    "treadData": {
      "anyOf": [
        {
          "$ref": "#/$defs/TreadData"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Treadmill data, present when on the treadmill."
    },
    "rowData": {
      "anyOf": [
        {
          "$ref": "#/$defs/RowData"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Rower data, present when on the rower."
    }
  },
  "required": [
    "relativeTimestamp",
    "aggSplats",
    "aggCalories"
  ],
  "title": "TelemetryItem",
  "type": "object"
}

Fields:

relative_timestamp pydantic-field

relative_timestamp

Seconds since the start of the class.

hr pydantic-field

hr = None

Heart rate in BPM at this point in time.

agg_splats pydantic-field

agg_splats

Cumulative splat points at this time.

agg_calories pydantic-field

agg_calories

Cumulative calories burned at this time.

timestamp pydantic-field

timestamp = None

The timestamp of the telemetry item, calculated from the class start time and relative timestamp.

tread_data pydantic-field

tread_data = None

Treadmill data, present when on the treadmill.

row_data pydantic-field

row_data = None

Rower data, present when on the rower.

Telemetry pydantic-model

Bases: OtfItemBase

Full telemetry data for a workout, including time-series heart rate and equipment data.

Show JSON schema:
{
  "$defs": {
    "RowData": {
      "description": "Rower telemetry data for a single point in time.",
      "properties": {
        "rowSpeed": {
          "description": "Current rowing speed.",
          "title": "Rowspeed",
          "type": "number"
        },
        "rowPps": {
          "description": "Rowing power per stroke.",
          "title": "Rowpps",
          "type": "number"
        },
        "rowSpm": {
          "description": "Rowing strokes per minute.",
          "title": "Rowspm",
          "type": "number"
        },
        "aggRowDistance": {
          "description": "Cumulative rowing distance.",
          "title": "Aggrowdistance",
          "type": "integer"
        },
        "rowPace": {
          "description": "Current rowing pace.",
          "title": "Rowpace",
          "type": "integer"
        }
      },
      "required": [
        "rowSpeed",
        "rowPps",
        "rowSpm",
        "aggRowDistance",
        "rowPace"
      ],
      "title": "RowData",
      "type": "object"
    },
    "TelemetryItem": {
      "description": "A single telemetry data point captured during a workout.",
      "properties": {
        "relativeTimestamp": {
          "description": "Seconds since the start of the class.",
          "title": "Relativetimestamp",
          "type": "integer"
        },
        "hr": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Heart rate in BPM at this point in time.",
          "title": "Hr"
        },
        "aggSplats": {
          "description": "Cumulative splat points at this time.",
          "title": "Aggsplats",
          "type": "integer"
        },
        "aggCalories": {
          "description": "Cumulative calories burned at this time.",
          "title": "Aggcalories",
          "type": "integer"
        },
        "timestamp": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The timestamp of the telemetry item, calculated from the class start time and relative timestamp.",
          "title": "Timestamp"
        },
        "treadData": {
          "anyOf": [
            {
              "$ref": "#/$defs/TreadData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Treadmill data, present when on the treadmill."
        },
        "rowData": {
          "anyOf": [
            {
              "$ref": "#/$defs/RowData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Rower data, present when on the rower."
        }
      },
      "required": [
        "relativeTimestamp",
        "aggSplats",
        "aggCalories"
      ],
      "title": "TelemetryItem",
      "type": "object"
    },
    "TreadData": {
      "description": "Treadmill telemetry data for a single point in time.",
      "properties": {
        "treadSpeed": {
          "description": "Current treadmill speed.",
          "title": "Treadspeed",
          "type": "number"
        },
        "treadIncline": {
          "description": "Current treadmill incline.",
          "title": "Treadincline",
          "type": "number"
        },
        "aggTreadDistance": {
          "description": "Cumulative treadmill distance.",
          "title": "Aggtreaddistance",
          "type": "integer"
        }
      },
      "required": [
        "treadSpeed",
        "treadIncline",
        "aggTreadDistance"
      ],
      "title": "TreadData",
      "type": "object"
    },
    "Zone": {
      "description": "A heart rate zone defined by a BPM range.",
      "properties": {
        "startBpm": {
          "description": "Lower bound BPM for this zone.",
          "title": "Startbpm",
          "type": "integer"
        },
        "endBpm": {
          "description": "Upper bound BPM for this zone.",
          "title": "Endbpm",
          "type": "integer"
        }
      },
      "required": [
        "startBpm",
        "endBpm"
      ],
      "title": "Zone",
      "type": "object"
    },
    "Zones": {
      "description": "The five OTF heart rate zones (gray, blue, green, orange, red) with their BPM ranges.",
      "properties": {
        "gray": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Rest/very light effort zone."
        },
        "blue": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Light effort zone."
        },
        "green": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Moderate effort (base pace) zone."
        },
        "orange": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "High effort (push pace) zone, earns splat points."
        },
        "red": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Maximum effort (all-out) zone, earns splat points."
        }
      },
      "required": [
        "gray",
        "blue",
        "green",
        "orange",
        "red"
      ],
      "title": "Zones",
      "type": "object"
    }
  },
  "description": "Full telemetry data for a workout, including time-series heart rate and equipment data.",
  "properties": {
    "memberUuid": {
      "description": "Unique identifier for the member.",
      "title": "Memberuuid",
      "type": "string"
    },
    "classHistoryUuid": {
      "description": "The same as performance_summary_id.",
      "title": "Classhistoryuuid",
      "type": "string"
    },
    "classStartTime": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When the class started.",
      "title": "Classstarttime"
    },
    "maxHr": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Member's max heart rate.",
      "title": "Maxhr"
    },
    "zones": {
      "anyOf": [
        {
          "$ref": "#/$defs/Zones"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The zones associated with the telemetry."
    },
    "windowSize": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Telemetry sampling window size in seconds.",
      "title": "Windowsize"
    },
    "telemetry": {
      "description": "Time-series telemetry data points.",
      "items": {
        "$ref": "#/$defs/TelemetryItem"
      },
      "title": "Telemetry",
      "type": "array"
    }
  },
  "required": [
    "memberUuid",
    "classHistoryUuid",
    "classHistoryUuid"
  ],
  "title": "Telemetry",
  "type": "object"
}

Fields:

member_uuid pydantic-field

member_uuid

Unique identifier for the member.

performance_summary_id pydantic-field

performance_summary_id

The ID of the performance summary this telemetry item belongs to.

class_history_uuid pydantic-field

class_history_uuid

The same as performance_summary_id.

class_start_time pydantic-field

class_start_time = None

When the class started.

max_hr pydantic-field

max_hr = None

Member's max heart rate.

zones pydantic-field

zones = None

The zones associated with the telemetry.

window_size pydantic-field

window_size = None

Telemetry sampling window size in seconds.

telemetry pydantic-field

telemetry

Time-series telemetry data points.

reduce_telemetry_list

reduce_telemetry_list(value)

Reduces the telemetry list to first and last 5 items when serializing to JSON.

TelemetryHistoryItem pydantic-model

Bases: OtfItemBase

A historical record of a member's max heart rate zone configuration changes.

Show JSON schema:
{
  "$defs": {
    "Zone": {
      "description": "A heart rate zone defined by a BPM range.",
      "properties": {
        "startBpm": {
          "description": "Lower bound BPM for this zone.",
          "title": "Startbpm",
          "type": "integer"
        },
        "endBpm": {
          "description": "Upper bound BPM for this zone.",
          "title": "Endbpm",
          "type": "integer"
        }
      },
      "required": [
        "startBpm",
        "endBpm"
      ],
      "title": "Zone",
      "type": "object"
    },
    "Zones": {
      "description": "The five OTF heart rate zones (gray, blue, green, orange, red) with their BPM ranges.",
      "properties": {
        "gray": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Rest/very light effort zone."
        },
        "blue": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Light effort zone."
        },
        "green": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Moderate effort (base pace) zone."
        },
        "orange": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "High effort (push pace) zone, earns splat points."
        },
        "red": {
          "allOf": [
            {
              "$ref": "#/$defs/Zone"
            }
          ],
          "description": "Maximum effort (all-out) zone, earns splat points."
        }
      },
      "required": [
        "gray",
        "blue",
        "green",
        "orange",
        "red"
      ],
      "title": "Zones",
      "type": "object"
    }
  },
  "description": "A historical record of a member's max heart rate zone configuration changes.",
  "properties": {
    "max_hr_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Method used to determine max HR.",
      "title": "Max Hr Type"
    },
    "max_hr_value": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Max heart rate value.",
      "title": "Max Hr Value"
    },
    "zones": {
      "anyOf": [
        {
          "$ref": "#/$defs/Zones"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Heart rate zone boundaries at this point in time."
    },
    "changeFromPrevious": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "BPM change from the previous max HR value.",
      "title": "Changefromprevious"
    },
    "changeBucket": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Category of the change (e.g. increase, decrease).",
      "title": "Changebucket"
    },
    "assignedAt": {
      "anyOf": [
        {
          "format": "date-time",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When this max HR configuration was assigned.",
      "title": "Assignedat"
    }
  },
  "title": "TelemetryHistoryItem",
  "type": "object"
}

Fields:

max_hr_type pydantic-field

max_hr_type = None

Method used to determine max HR.

max_hr_value pydantic-field

max_hr_value = None

Max heart rate value.

zones pydantic-field

zones = None

Heart rate zone boundaries at this point in time.

change_from_previous pydantic-field

change_from_previous = None

BPM change from the previous max HR value.

change_bucket pydantic-field

change_bucket = None

Category of the change (e.g. increase, decrease).

assigned_at pydantic-field

assigned_at = None

When this max HR configuration was assigned.