Skip to main content

No project description provided

Project description

PSA Connected Car API Client

API client for PSA group connected car service.

This is a rework of the wonderful PSA Car Controller by @flobz.

The goal is to extract the core functionality and provide it as a library to be used by systems like Home Assistant directly, without the need to run a separate server.

It builds upon some great libraries:

  • httpx for the asynchronous REST API requests
  • authlib to handle the Oauth2 authentication
  • msgspec for the decoding of the API response into python classes
  • pyaxmlparser, a lighter alternative to androguard, to get the needed information from the PSA android app

Installation

pip install psa-connected-car-client

Usage

A basic usage of the library can be found at tests/demo_cli.py.

Simple version

You can create the PSAClient using the create_psa_client function.

from psa_ccc import create_psa_client


async def main():
    client = await create_psa_client(brand, country_code, email, password)

The arguments are self-explanatory, but just in case:

  • brand is the car brand; possible values are:
    • Peugeot
    • Citroen
    • DS
    • Opel
    • Vauxhall
  • country_code is your 2 letter uppercase country code
  • email is the address you used to register to the "MyBrand" app
  • password is - you guessed it - the password for the app

Behind the scenes, this function will download the APK of the mobile app, extract the data needed to establish a connection to the PSA servers and save it in a config file. Subsequent runs of the function will read from that config file, if it exists.

You're now ready to use the client to talk to the PSA connected car service!

    user = await client.get_user()
    print("User:", user)
    vehicles = await client.get_vehicles()
    print("Vehicles:", vehicles)
    vehicle_id = vehicles[0].id
    vehicle = await client.get_vehicle(vehicle_id)
    print("First vehicle:", vehicle)
    alerts = await client.get_vehicle_alerts(vehicle_id)
    print("Vehicle alerts:", alerts)
    status = await client.get_vehicle_status(vehicle_id)
    print("Vehicle status:", status)
    maintenance = await client.get_vehicle_maintenance(vehicle_id)
    print("Vehicle maintenance:", maintenance)
    print(
        "Vehicle position:",
        status.last_position.geometry.coordinates,
        "last updated at",
        status.last_position.properties.updated_at,
    )

Customizable storage

the create_psa_client function accepts two optional parameters for choosing where to store the configuration and the auth tokens:

  • cache_storage accepts any implementation of the CacheStorage protocol. The library comes with the SimpleCacheStorage class that stores the files inside the given directory. This is the storage used in the simple version above, and uses the current working directory as storage.
  • token_storage accepts any implementation of the TokenStorage protocol. Again, the library has a MemoryTokenStorage class that keeps the token in memory (it is never written to disk). This is the default token storage for the simple version above.
from pathlib import Path
from psa_ccc import SimpleCacheStorage
from psa_ccc import MemoryTokenStorage
from psa_ccc import create_psa_client


async def main():
    storage = SimpleCacheStorage(Path(__file__).parent)
    token_storage = MemoryTokenStorage()
    client = await create_psa_client(
        brand, country_code, email, password, storage, token_storage
    )
    # do whatever you want with client...

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

psa_connected_car_client-0.1.2.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

psa_connected_car_client-0.1.2-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file psa_connected_car_client-0.1.2.tar.gz.

File metadata

  • Download URL: psa_connected_car_client-0.1.2.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.2.0-1015-azure

File hashes

Hashes for psa_connected_car_client-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1bae1f4a3cfe779788740ccd3987f8d8595d312e5178a4770b2219e70428901e
MD5 50379c7245a1f250414444eff91ea94c
BLAKE2b-256 21e79f17f18aac05029395bb4e36c0487dda6a8c47e2d83104d744086af59158

See more details on using hashes here.

File details

Details for the file psa_connected_car_client-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for psa_connected_car_client-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7d43d36b8efcc2a54c213a9f579ddb8326e5108d3c1a63c54f1cce4b0214a96e
MD5 987385bcb61268fe335f5d53708c2513
BLAKE2b-256 83dcda6071a37312d5728d51270380dc0ba883581234b6a35285f1674c95cd02

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