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 thepython-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:
- python-doipclient by Jacob Schaer
- python-udsoncan by Pier-Yves Lessard
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d5413c45526cb280ab31fa61c758b3d6e1048072b5825a7b5426462db12a466
|
|
| MD5 |
8dfcbc2d77da9febadeb1cd0f1ace6b0
|
|
| BLAKE2b-256 |
95a229353e5c8291d20437ae2e79b9fcf87696b04ef97128b80384719d366097
|
Provenance
The following attestation bundles were made for udsonip-0.1.0.tar.gz:
Publisher:
publish.yml on sirius-cc-wu/python-udsonip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
udsonip-0.1.0.tar.gz -
Subject digest:
7d5413c45526cb280ab31fa61c758b3d6e1048072b5825a7b5426462db12a466 - Sigstore transparency entry: 630402515
- Sigstore integration time:
-
Permalink:
sirius-cc-wu/python-udsonip@cebc82818a524b6309856bfef77647cb710ec5f4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sirius-cc-wu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cebc82818a524b6309856bfef77647cb710ec5f4 -
Trigger Event:
workflow_dispatch
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
393adc380f403cc343edbc93e88ec2c77efc6577c460a6a159b4543168dca1dc
|
|
| MD5 |
6edcfae2e9cf11d85e862dd343f131e3
|
|
| BLAKE2b-256 |
4f0185c9a19586152f5ed0708595a135d04841a538c6f59a8c34e7658f0678d5
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
udsonip-0.1.0-py3-none-any.whl -
Subject digest:
393adc380f403cc343edbc93e88ec2c77efc6577c460a6a159b4543168dca1dc - Sigstore transparency entry: 630402519
- Sigstore integration time:
-
Permalink:
sirius-cc-wu/python-udsonip@cebc82818a524b6309856bfef77647cb710ec5f4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sirius-cc-wu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cebc82818a524b6309856bfef77647cb710ec5f4 -
Trigger Event:
workflow_dispatch
-
Statement type: