Skip to content

SkippyZA/ibt-telemetry

Repository files navigation

iRacing Telemetry Parser

Yup, that's right, this is a Node.js library for processing iRacing's ibt telemetry files.

This library has been built with memory consumption in mind, and therefore the data is streamed from the file instead of being loaded completely in memory. This is advantageous when needing to deal with back pressure from a slower services consuming the file.

This ibt-telemetry library is a 100% complete Node.js library for the processing of telemetry files. The library has no requirements on any DLL or Windows library making this completely capable of being run on OSX, and *nix too.

Loading up the telemetry

const pathToIbt = '/path/to/telemetry.ibt'
const telemetry = Telemetry.fromFile(pathToIbt)

const telemetryId = telemetry.uniqueId()
// telemetryId = "188953-12312494-123910230"

const sessionInfo = telemetry.sessionInfo
// sessionInfo = {}

Reading telemetry update samples

Generator

foreach (sample in telemetry.samples()) {
  const speed = sample.getParam('speed')
  // speed = {
  //   name: "Speed",
  //   description: "GPS vehicle speed",
  //   value: 200.32943,
  //   unit: "m/s"
  // }
  
  const sampleJson = sample.toJSON()
  // sampleJson = {
  //   "AirTemp": {
  //     "unit": "C",
  //     "value": 25.55555534362793
  //   },
  //   "Alt": {
  //     "unit": "m",
  //     "value": 42.163856506347656
  //   },
  //   "Brake": {
  //     "unit": "%",
  //     "value": 1
  //   },
  //   "BrakeRaw": {
  //     "unit": "%",
  //     "value": 0
  //   },
  //   "CFshockDefl": {
  //     "unit": "m",
  //     "value": 0.04878242313861847
  //   }
  // }

Rx.JS

const samples$ = Rx.Observable.from(telemetry.samples())

samples$
  .subscribe(s => console.log(s.toJSON()))