Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

PyPI version Python Version from PEP 621 TOML PyTest CI status Documentation Status (ReadTheDocs) Discord Support Server invite

Overview

Connect to any vehicle through its OBDII port and start reading real-time data from Python in a few lines of code.

Plug in a USB, Bluetooth, WiFi or Ethernet adapter, then query engine speed, fault codes, fuel level, VIN, and much more.

Whether you’re building a diagnostic tool, a performance data logger, a custom dashboard, a smart home integration, or just learning how vehicles communicate, this library handles the complexity of vehicle communication, so you don’t have to.

Installation

Python 3.8 or higher is required.

Install from PyPI using pip:

pip install py-obdii

For more installation options, see the Installation Guide.

Usage Example

from obdii import Connection, at_commands, commands
from obdii.utils.scan import scan_ports

# Find first available OBDII device connected via serial
ports = scan_ports(return_first=True)
if not ports:
    raise ValueError("No OBDII devices found.")

# Connect to the adapter
with Connection(ports[0]) as conn:
    # Query adapter firmware version
    version = conn.query(at_commands.VERSION_ID)
    print(f"Version: {version.value}")

    # Query vehicle's engine speed (rpm)
    response = conn.query(commands.ENGINE_SPEED)
    print(f"Engine Speed: {response.value} {response.units}")

More examples in the examples folder and Usage Guide.

Emulator Support

You don’t need a physical OBDII device to start developing.

You can use the ELM327-Emulator library to simulate an OBDII adapter and vehicle responses.

Setting Up the ELM327-Emulator

  1. Install the library with the sim extra options:

    pip install py-obdii[sim]
  2. Start the ELM327-Emulator:

    python -m elm -p "REPLACE_WITH_PORT" -s car --baudrate 38400

For platform-specific instructions, see the Emulating a Vehicle guide.

Hardware Requirements

For real-world usage, an ELM327-compatible OBDII adapter is required to connect to your vehicle.

  • USB: reliable, plug and play

  • Ethernet: reliable, low latency

  • Bluetooth: wireless, convenient

  • WiFi: wireless, mobile compatible

More information on connecting to different adapter types can be found in the Connection Guide.

Compatibility

All ELM327 protocols are supported, covering vehicles from the mid-1990s through today.

Protocol Support

ID

Protocol

Specifications

0x01

SAE J1850 PWM

41.6 Kbaud

0x02

SAE J1850 VPW

10.4 Kbaud

0x03

ISO 9141-2

5 baud init, 10.4 Kbaud

0x04

ISO 14230-4 KWP

5 baud init, 10.4 Kbaud

0x05

ISO 14230-4 KWP

fast init, 10.4 Kbaud

0x06

ISO 15765-4 CAN

11 bit ID, 500 Kbaud

0x07

ISO 15765-4 CAN

29 bit ID, 500 Kbaud

0x08

ISO 15765-4 CAN

11 bit ID, 250 Kbaud

0x09

ISO 15765-4 CAN

29 bit ID, 250 Kbaud

0x0A

SAE J1939 CAN

29 bit ID, 250 Kbaud

0x0B

USER1 CAN

11 bit ID, 125 Kbaud

0x0C

USER2 CAN

11 bit ID, 50 Kbaud

Support & Contact

Found a bug?

Have a question?

Your feedback is greatly appreciated and helps improve this project.


Follow our updates by leaving a star to this repository!

Download files

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

Source Distribution

py_obdii-0.10.5b0.tar.gz (655.1 kB view details)

Uploaded Source

Built Distribution

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

py_obdii-0.10.5b0-py3-none-any.whl (54.2 kB view details)

Uploaded Python 3

File details

Details for the file py_obdii-0.10.5b0.tar.gz.

File metadata

  • Download URL: py_obdii-0.10.5b0.tar.gz
  • Upload date:
  • Size: 655.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for py_obdii-0.10.5b0.tar.gz
Algorithm Hash digest
SHA256 ad4e1ba1a56119e447bd82462e98908d3abb12a67edc14f7d503331d5c25e889
MD5 9c736b74cab30081dcf8bdc46d51db14
BLAKE2b-256 9d1c07583f8eac9b294efea7c4635865fcb652e2d2cb9e89dc7912a2e3f823b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_obdii-0.10.5b0.tar.gz:

Publisher: publish-to-pypi.yml on PaulMarisOUMary/OBDII

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file py_obdii-0.10.5b0-py3-none-any.whl.

File metadata

  • Download URL: py_obdii-0.10.5b0-py3-none-any.whl
  • Upload date:
  • Size: 54.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for py_obdii-0.10.5b0-py3-none-any.whl
Algorithm Hash digest
SHA256 67430d28645fbe805f874ed9b76cae78bba7ed961445e51e6958b647ca6e25fd
MD5 25e64342c79e81aae3ae7d922fc8c32d
BLAKE2b-256 e25159ee8956ac903a0527a4be8cedaea11c6cf152bc7712699eca5e91b1609e

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_obdii-0.10.5b0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on PaulMarisOUMary/OBDII

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page