Skip to main content

Python hardware API for Nissan Leaf OBD BLE dongles (BLE + ELM327 over CAN), extracted from the Home Assistant integration.

Project description

py-nissan-leaf-obd-ble

Python hardware API for Nissan Leaf OBD-II over BLE dongles.

This library encapsulates the low-level BLE, ELM327 and CAN protocol handling used by the Home Assistant nissan_leaf_obd_ble integration, and exposes a simple async API for querying vehicle data from a BLEDevice.

It has no Home Assistant dependency and can be used in other Python applications that talk to the same BLE OBD dongle.

Installation

Once published on PyPI:

pip install py-nissan-leaf-obd-ble

Quickstart

import asyncio
from bleak import BleakScanner

from py_nissan_leaf_obd_ble import NissanLeafObdBleApiClient


async def main() -> None:
    # Discover your OBDBLE device with bleak, or obtain a BLEDevice from elsewhere
    device = await BleakScanner.find_device_by_address("AA:BB:CC:DD:EE:FF", timeout=10.0)
    if device is None:
        raise RuntimeError("Could not find OBDBLE device")

    client = NissanLeafObdBleApiClient(device)
    data = await client.async_get_data()
    print(data)


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

Configurable BLE UUIDs

The default GATT service and characteristic UUIDs match the LeLink OBD BLE dongle. When used with the Home Assistant integration, the service and read/write characteristic UUIDs are configurable per device in the UI. For custom use, async_get_data(options=None) accepts an optional options dict with keys service_uuid, characteristic_uuid_read, and characteristic_uuid_write; omit keys to use the library defaults.

Custom commands

async_get_data() accepts two optional parameters for adapting to different Leaf generations or adding new PIDs without modifying this package:

  • extra_commands — a dict[str, OBDCommand] that is merged with the default leaf_commands. Keys matching existing commands replace them; new keys are appended.
  • disabled_commands — a set[str] of command names to skip entirely.
from py_nissan_leaf_obd_ble import NissanLeafObdBleApiClient
from py_nissan_leaf_obd_ble.OBDCommand import OBDCommand

def my_decoder(messages):
    d = messages[0].data
    return {"ambient_temp": (d[3] - 40) * 0.5}

custom = {
    "ambient_temp": OBDCommand(
        "ambient_temp", "Ambient temperature", b"0322115e", 4, my_decoder, header=b"797"
    )
}

data = await client.async_get_data(extra_commands=custom, disabled_commands={"unknown"})

When called from the Home Assistant integration, extra_commands and disabled_commands are populated automatically from the user's overrides.yaml; see the integration README for details.

License

This package includes code derived from python-OBD (a derivative of pyOBD), licensed under the GNU General Public License, version 2 or later.

See LICENSE for full terms.

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

py_nissan_leaf_obd_ble-0.1.2.tar.gz (26.7 kB view details)

Uploaded Source

Built Distribution

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

py_nissan_leaf_obd_ble-0.1.2-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: py_nissan_leaf_obd_ble-0.1.2.tar.gz
  • Upload date:
  • Size: 26.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.1 Darwin/25.3.0

File hashes

Hashes for py_nissan_leaf_obd_ble-0.1.2.tar.gz
Algorithm Hash digest
SHA256 604af73c7faa6e1173dce7f0ec61ea8730dd15528bb36d435a8d0e6a726d7ef8
MD5 9fc9fccb26633ac313c4087a67aaff9e
BLAKE2b-256 d237cac8d0f61a43a762f6b0d40f5cb139edfcb8e88baa913319b2873f8682bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_nissan_leaf_obd_ble-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 12369f55d8a97e36b19828835bfbb4034a79fc0990a23a25794596afb6603b29
MD5 c938d0c039f688361fb10f5ceb051ce3
BLAKE2b-256 8ba3efaa59fddd45d31bad88273ffa8e821a5cc2ad9c383acdc5c841286b0402

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