Skip to main content

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

Project description

GT Telemetry {version}

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

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 called at the same framerate as the game is running at. This tends to produces a lot of noise, especially when in menus, or even if the race is paused. Here's a more complex example of a telemetry recorder that's hooked into game events.

from gt_telem import TurismoClient, TurismoGame
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:
        tg = TurismoGame(tc)
        mstr = MySimpleTelemetryRecorder(tc)
        tg.on_in_race.append(mstr.start)
        tg.on_race_end.append(mstr.stop)
        tg.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.1.0.tar.gz (51.3 kB view details)

Uploaded Source

Built Distribution

gt_telem-0.1.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gt-telem-0.1.0.tar.gz
  • Upload date:
  • Size: 51.3 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.1.0.tar.gz
Algorithm Hash digest
SHA256 be22662047d12e14f7e6f3df8a25540be7098e6b900c92ced613d9026c540c19
MD5 04b1f3cf5b584e5e73f53a08eb26ac48
BLAKE2b-256 654a43e34bd7ec490ab9aacb29c04b23920d0b95fe4546eb693ab18425f2f7d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gt_telem-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 39.9 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 79507eed0cfe3dfdfe00b60048187d373adb67867566afb718103d1630ff2db2
MD5 f3954325c7c41e159167ddacbfa180d3
BLAKE2b-256 1befeab9b91091a5ebfa9d2cb6d8fe072af84f65195b57058dee08cd389bafeb

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