Skip to main content

Enhanced DoIP-UDS integration library providing seamless multi-ECU support

Project description

python-udsonip

Enhanced DoIP-UDS Integration Library

Note: Install via pip install udsonip (package name without the python- prefix)

udsonip is a high-level Python library that seamlessly integrates python-doipclient and python-udsoncan to provide enhanced multi-ECU support, improved ergonomics, and advanced features for automotive diagnostics over DoIP (Diagnostics over Internet Protocol).

Features

  • ๐ŸŽฏ Dynamic Target Address Support - Runtime switching between ECU addresses
  • ๐Ÿ”„ Multi-ECU Management - Single connection managing multiple ECUs with context managers
  • ๐Ÿ” Auto-Discovery - Automatic ECU enumeration and discovery
  • ๐Ÿ“ก Enhanced Session Management - Per-ECU session tracking and persistence
  • ๐Ÿ› ๏ธ Simplified API - Less boilerplate, sensible defaults

Installation

pip install udsonip

Quick Start

Single ECU Communication

from udsonip import DoIPUDSClient

# Simple single-ECU client
client = DoIPUDSClient('192.168.1.10', 0x00E0)
response = client.read_data_by_identifier(0xF190)  # Read VIN
print(f"VIN: {response.data.decode()}")
client.close()

Multi-ECU Communication

from udsonip import DoIPMultiECUClient

# Multi-ECU manager
manager = DoIPMultiECUClient('192.168.1.10')
manager.add_ecu('engine', 0x00E0)
manager.add_ecu('transmission', 0x00E1)

# Switch between ECUs seamlessly
with manager.ecu('engine') as ecu:
    vin = ecu.read_data_by_identifier(0xF190)

with manager.ecu('transmission') as ecu:
    status = ecu.read_data_by_identifier(0x1234)

Auto-Discovery

from udsonip import discover_ecus

# Discover all ECUs on the network
ecus = discover_ecus(timeout=5.0)
for ecu in ecus:
    print(f"Found ECU: {ecu.ip} @ {ecu.logical_address:#x}")
    
# Connect to discovered ECU
client = ecus[0].connect()

Advanced Usage - Dynamic Target Switching

from udsonip import DoIPUDSClient

client = DoIPUDSClient(
    ecu_ip='192.168.1.10',
    ecu_address=0x00E0,
    auto_reconnect=True,
    keep_alive=True,
)

# Dynamic target address switching
client.target_address = 0x00E1
response = client.tester_present()

client.target_address = 0x00E2
response = client.read_data_by_identifier(0xF190)

Architecture

udsonip integrates:
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  python-udsoncanโ”‚  (UDS protocol)
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚    udsonip      โ”‚  (Enhanced integration layer)
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚python-doipclientโ”‚  (DoIP transport)
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key Components

  • DoIPUDSConnection - Enhanced connector with dynamic address support
  • DoIPUDSClient - Unified client wrapping both libraries
  • DoIPMultiECUClient - Multi-ECU manager with context switching
  • discover_ecus() - ECU discovery utilities

Comparison with Plain Usage

Before (using libraries separately):

from doipclient import DoIPClient
from udsoncan.client import Client
from udsoncan.connections import BaseConnection

# Manual setup required
doip_client = DoIPClient('192.168.1.10', 0x00E0)
doip_client.connect()

class DoIPConnection(BaseConnection):
    def __init__(self, doip_client):
        self._doip = doip_client
    
    def send(self, data):
        self._doip.send_diagnostic(data)
    
    def wait_frame(self, timeout=None):
        return self._doip.receive_diagnostic(timeout)

connection = DoIPConnection(doip_client)
uds_client = Client(connection)

# Use UDS client
response = uds_client.read_data_by_identifier(0xF190)

After (using udsonip):

from udsonip import DoIPUDSClient

client = DoIPUDSClient('192.168.1.10', 0x00E0)
response = client.read_data_by_identifier(0xF190)

Documentation

Full documentation available at: https://udsonip.readthedocs.io

Requirements

  • Python >= 3.7
  • python-doipclient >= 1.1.7
  • python-udsoncan >= 1.21

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

License

MIT License - see LICENSE file for details.

Acknowledgments

Built on top of:

Roadmap

  • Async/await support
  • DTC helpers
  • Flash/bootloader utilities
  • Configuration file support (YAML/JSON)
  • Enhanced logging
  • Protocol validation
  • Performance metrics

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

udsonip-0.1.0.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

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

udsonip-0.1.0-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file udsonip-0.1.0.tar.gz.

File metadata

  • Download URL: udsonip-0.1.0.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for udsonip-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7d5413c45526cb280ab31fa61c758b3d6e1048072b5825a7b5426462db12a466
MD5 8dfcbc2d77da9febadeb1cd0f1ace6b0
BLAKE2b-256 95a229353e5c8291d20437ae2e79b9fcf87696b04ef97128b80384719d366097

See more details on using hashes here.

Provenance

The following attestation bundles were made for udsonip-0.1.0.tar.gz:

Publisher: publish.yml on sirius-cc-wu/python-udsonip

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

File details

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

File metadata

  • Download URL: udsonip-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for udsonip-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 393adc380f403cc343edbc93e88ec2c77efc6577c460a6a159b4543168dca1dc
MD5 6edcfae2e9cf11d85e862dd343f131e3
BLAKE2b-256 4f0185c9a19586152f5ed0708595a135d04841a538c6f59a8c34e7658f0678d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for udsonip-0.1.0-py3-none-any.whl:

Publisher: publish.yml on sirius-cc-wu/python-udsonip

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

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