Skip to content

LiveMetrics

Defined in: console-sdk/src/protocol/realtime.ts:114

The realtime frame — one normalized snapshot of everything a console reports at 2 Hz, as consumed via useLiveMetrics(deviceId) (SDK_PLAN.md §3.3.3: the verified ~45-field census, curated core plus a typed extended block for the V2-firmware tail).

All firmware quirks are pre-normalized: deciseconds arrive as fractional seconds; native per-mile/per-1000m bike paces are carried alongside normalized per-500m; the −5 decisecond BLE-latency compensation on rest countdowns is applied internally; the UNDEFINED_REST_SENTINEL never appears (§3.3.4).

batteryPercent: number

Defined in: console-sdk/src/protocol/realtime.ts:179

Console battery level, percent.


cadence: object

Defined in: console-sdk/src/protocol/realtime.ts:167

Cadence block — SPM (rower/ski) or RPM (bike).

averageRate: number

rate: number

strokeCount: number


distance: object

Defined in: console-sdk/src/protocol/realtime.ts:152

Distance block, all meters.

splitMeters: number

stageMeters: number

totalMeters: number


energy: object

Defined in: console-sdk/src/protocol/realtime.ts:169

Energy block, calories and calories-per-hour.

averageCaloriesPerHour: number | null

calories: number

caloriesPerHour: number

segmentCalories: number

workoutCalories: number


extended: { dragFactor: number | null; linearSpeedMps: number | null; singleStrokeMeters: number | null; singleStrokeSeconds: number | null; strokeStatus: StrokeStatus | null; torqueCurve: readonly number[] | null; } | null

Defined in: console-sdk/src/protocol/realtime.ts:183

V2.0+ firmware tail; null on older consoles.


heartRateBpm: number | null

Defined in: console-sdk/src/protocol/realtime.ts:177

Heart rate from a connected monitor, or null when none.


lastSplit: LastSplit | null

Defined in: console-sdk/src/protocol/realtime.ts:181

Last completed split, or null until one completes (V2.0+).


pace: object

Defined in: console-sdk/src/protocol/realtime.ts:154

Pace block.

average: number

Always normalized seconds-per-500m.

current: number

Always normalized seconds-per-500m.

native: object

Native firmware paces (bikes, fw 0209+/0210+) — match the console display exactly (RM-621).

per1000m: PaceTriple | null

perMile: PaceTriple | null

segment: number

Always normalized seconds-per-500m.


power: object

Defined in: console-sdk/src/protocol/realtime.ts:165

Power block, all watts.

averageWatts: number

segmentWatts: number

watts: number


receivedAt: number

Defined in: console-sdk/src/protocol/realtime.ts:116

Epoch milliseconds at host receive time.


state: object

Defined in: console-sdk/src/protocol/realtime.ts:118

Workout-state block, unpacked from the firmware status byte.

isInRest: boolean

Whether the console is currently in a rest period.

round: number

Current interval/round number.

workout: "idle" | "working" | "resting" | "finished"

Typed workout state — no FINISH = 0 magic numbers. The firmware’s idle and finished screens share one raw state; a frame with zero elapsed time and zero distance is 'idle', otherwise 'finished'.

workoutType: ConsoleWorkoutType

Type of workout configured on the console.


time: object

Defined in: console-sdk/src/protocol/realtime.ts:133

Time block — decisecond precision as fractional seconds.

elapsedSeconds: number

Total elapsed time in seconds.

estimatedFinishSeconds: number | null

Estimated time to finish the workout; null when not reported.

restRemainingSeconds: number

Rest countdown in seconds, with the −5 decisecond BLE-latency compensation already applied. 0 outside rest — and 0 for the whole of an until-user-continues rest (the 3600 s firmware sentinel is normalized away here; the session snapshot’s typed rest carries the kind, §3.3.4).

splitSeconds: number

Time in the current split/interval in seconds.

totalWithRestSeconds: number | null

Total time including rest periods; null below firmware V2.0.