Skip to main content

Library to interface with Gran Turismo's motion rig telemetry service.

Project description

Gran Turismo Telemetry

Python library for interfacing with Polyphony Digital's telemetry service for motion rigs in GT6/GTS/GT7 (maybe older?)

Features

  • Playstation IP Address discovery
  • Asynchronous callbacks
  • Game event observer
  • Telemetry as an object or a dictionary

Installation

Install with pip: pip install gt-telem

Usage

Getting telemetry is fairly straightforward. Here's a simple example:

import json

from gt_telem import TurismoClient
from gt_telem.models import Telemetry

async def print_telem(t: Telemetry):
    print(json.dumps(t.as_dict, indent=4))

tc = TurismoClient()
tc.register_callback(print_telem)
tc.run()

print_telem() is invoked with each frame rendered (60hz). This tends to produces a lot of noise, especially when in menus, or even if the race is paused.

Hooking into game events

Here's a more complex example of a telemetry recorder that hooks into race start, pause, and race end:

from gt_telem import TurismoClient
from gt_telem.events import GameEvents
from gt_telem.errors.playstation_errors import *

class MySimpleTelemetryRecorder():
    def __init__(self, tc: TurismoClient):
        self.tc = tc
        self.storage = []

    def start(self):
        tc.register_callback(MySimpleTelemetryRecorder.receive_telem, [self])

    def stop(self):
        self.deregister_callback(MySimpleTelemetryRecorder.receive_telem)
        # save self.storage somewhere

    @staticmethod
    async def receive_telem(t, context):
        context.storage.append(t)
        print(f"{t.engine_rpm}RPM - {t.boost_pressure}kPa")
        print(f"Best: {t.best_lap_time}\tLast: {t.last_lap_time}")


if __name__ == "__main__":
    try:
        tc = TurismoClient()
    except PlayStatonOnStandbyError as e:
        print("Turn the playstation on")
        print(e)
    except PlayStationNotFoundError:
        print("Maybe I'm on the wrong network")
        print(e)
    else:
        ge = GameEvents(tc)
        mstr = MySimpleTelemetryRecorder(tc)
        ge.on_in_race.append(mstr.start)
        ge.on_race_end.append(mstr.stop)
        ge.on_paused.append(mstr.stop)
        print("Listening for telemetry. CTRL+C to stop")
        tc.run()

TurismoClient.run() is a blocking call, but does shut down gracefully when a keyboard interrupt is issued. It also accepts a cancellation token.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gt-telem-0.2.3.tar.gz (52.5 kB view details)

Uploaded Source

Built Distribution

gt_telem-0.2.3-py3-none-any.whl (42.2 kB view details)

Uploaded Python 3

File details

Details for the file gt-telem-0.2.3.tar.gz.

File metadata

  • Download URL: gt-telem-0.2.3.tar.gz
  • Upload date:
  • Size: 52.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for gt-telem-0.2.3.tar.gz
Algorithm Hash digest
SHA256 ac8fe5bc18546347eaacd5191b19988846b669aeb5a1acf7cbb2cb79f4e88a73
MD5 4fd26a82d5a2907b418dc794d020be61
BLAKE2b-256 f9d6ece4583eff43f324b7f0d0e50530b9047ce7e98f03affed856e01336b8a0

See more details on using hashes here.

File details

Details for the file gt_telem-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: gt_telem-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 42.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for gt_telem-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2ecc9a2e8bba295577fe1e125f0b3008c9f0dd1c7d028ea2911be635287a644d
MD5 4e239c269f0a050ec3f36b4a0e2a236d
BLAKE2b-256 7bb5feab08f24ef52f07b88ac92c331b393d45963002ab66f0ce13e0eaa244e7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page