Skip to main content

Asynchronous Python client for the Tractive REST API

Project description

aiotractive

Continuous Integration

Unofficial Asynchronous Python client for the Tractive REST API.

This project and its author are not affiliated with Tractive GmbH

This project is a result of reverse engineering of the Tractive web app.

Inspired by home_assistant_tractive.

Initially some code was borrowed from home_assistant_tractive, but in the end all of it was replaced with my own implementations.

The package is in active development. Not all features available in the Tractive web app are implemented.

Important notes:

  • In order to use Tractive devices and their service you need to have an active subscription.
  • Tractive may change their API at any point of time and this project will be broken. Please, report any issues.

Installation

pip install aiotractive

Usage

import asyncio

from aiotractive import Tractive

async def main():
  async with Tractive("email", "password") as client:
    # interact with the client here
    pass

if __name__ == "__main__":
  asyncio.run(main())

Tractive

Tractive is the entrypoint class, it acts as an async context manager and provides access to API endpoints.

Authentication

client.authenticate()

# {'user_id': 'user_id', 'client_id': 'client_id', 'expires_at': 1626821491, 'access_token': 'long access token'}

Trackers

trackers = await client.trackers()
tracker = trackers[0]

# Or

tracker = client.tracker("TRACKER_ID")

# Retrieve details
await tracker.details() # Includes device capabilities, battery status (not level), charging state and so on

await tracker.hw_info() # Includes battery level, firmware version, model and so on

# Retrieve current location
await tracker.pos_report() # Includes coordinates, latitude, speed and so on

# Retrieve history positions
now = datetime.timestamp(datetime.now())
time_from = now - 3600 * LAST_HOURS
time_to = now
fmt = "json_segments"
await tracker.positions(time_from, time_to, fmt)

# Control the buzzer
await tracker.set_buzzer_active(True) # or False

# Control the LED
await tracker.set_led_active(True) # or False

# Control the live tracking
await tracker.set_live_tracking_active(True) # or False

Trackable objects (usually pets)

objects = await client.trackable_objects()
obj = objects[0]

# Or get a specific trackable object by ID
obj = client.trackable_object("TRACKABLE_ID")

# Retrieve details
await obj.details() # Includes pet's name, pet's tracker id and so on

# Retrieve health overview (activity, sleep, rest, and health metrics)
await obj.health_overview()

Events

async for event in client.events():
    pp(event)

After connecting you will immediately receive one tracker_status event per owned tracker. The first event always includes full current status of the tracker including current position, battery level, states of the buzzer, the LED and the live tracking.

All following events will have the same name, but only include one of these: either a position, battery info, or a buzzer/LED/live status.

Exceptions

The library raises the following exceptions:

  • TractiveError - Base exception class
  • UnauthorizedError - When authentication fails or token is invalid
  • NotFoundError - When the requested resource is not found (404)
  • DisconnectedError - When the event channel disconnects

Type Hints

This library is fully typed and includes a py.typed marker for PEP 561 compliance. Type checkers like mypy will recognize the inline type hints.

Creating a development environment

python3 -m venv venv
source venv/bin/activate
pip install pipenv
pipenv install --dev
prek install

Contribution

You know;)

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

aiotractive-1.0.0.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiotractive-1.0.0-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file aiotractive-1.0.0.tar.gz.

File metadata

  • Download URL: aiotractive-1.0.0.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aiotractive-1.0.0.tar.gz
Algorithm Hash digest
SHA256 42eda87b765e2893d757dac006a710233f143df88c8531a7b30263c70c8aaa83
MD5 8cc1956f887eaac47c93f97c8e25a5d6
BLAKE2b-256 288c039910a165cbde508a1bdacc0c9ec9cd917672ff49a656478c8546a8f37b

See more details on using hashes here.

File details

Details for the file aiotractive-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: aiotractive-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aiotractive-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5ed59c5cda395de8ce7c4db88f1adb8a572a5267df07a5b9a791a59aebdfd1f
MD5 9b55b294ad104a8f73c3d05e6c8cca92
BLAKE2b-256 2acf9fe9336a560d6ae10b93ca95e408bbdb7aaef5bb66e6cba42d5bf69bf44e

See more details on using hashes here.

Supported by

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