Skip to main content

Talk to your ECU in plain English — LLM-powered ISO 14229 UDS assistant

Project description

pyudskit · Talk to your ECU in plain English

PyPI Python License Standard

LLM-powered ISO 14229 UDS assistant for automotive diagnostics. Encode, decode, and understand UDS messages using plain English.


Table of Contents

  • Overview
  • Install
  • Quick Start
  • Architecture
  • Methods at a Glance (UDS + AI)
  • Offline Services (No LLM)
  • AI Client (LLM)
  • Examples
  • API Reference
  • License
  • Links

Overview

pyudskit is a production‑quality Python library that wraps the full ISO 14229 UDS protocol and exposes it through plain‑English prompts and structured helpers. It is designed for beginners who want one‑liners and for advanced engineers who need full control over bytes, sessions, and diagnostic flows.


Install

pip install pyudskit
export ANTHROPIC_API_KEY="sk-ant-..."

Quick Start

from pyudskit import UDS

uds = UDS()

# Ask a plain-English question
print(uds.ask("What is UDS?"))

# Encode a request
print(uds.encode("Read the VIN"))  # 22 F1 90

# Decode a response
print(uds.decode("62 F1 90 57 30 4C 41 53 54 31 32 33 34 35 36 37 38"))

# Explain a DTC
print(uds.explain_dtc("P0301"))

Architecture

flowchart LR
    A[Plain-English Request] --> B[LLM Prompting]
    B --> C[UDS Bytes]
    C --> D[ECU]
    D --> E[UDS Response]
    E --> F[Decode + Explain]
pie title UDS Services by Group
    "Session Management" : 11
    "Data Transmission" : 7
    "DTC Management" : 2
    "I/O Control" : 1
    "Routine Control" : 1
    "Upload/Download" : 5

Methods at a Glance (UDS + AI)

UDS Client (Beginner)

  • ask(question)
  • encode(description)
  • decode(hex_bytes)
  • explain_dtc(dtc_code)
  • explain_service(service)
  • explain_session(session)
  • explain_nrc(nrc)
  • decode_dtc_status(status_byte)
  • lookup_did(did)
  • help()

UDS Client (Advanced)

  • encode_request(description)
  • decode_response(hex_bytes)
  • read_did(did)
  • read_dids(dids)
  • write_did(did, data_hex)
  • read_memory(address, length, addr_len=4, size_len=1)
  • write_memory(address, data_hex, addr_len=4)
  • read_scaling_did(did)
  • define_dynamic_did(dynamic_did, source_dids)
  • clear_dynamic_did(dynamic_did)
  • read_dtcs(status_mask=0x08)
  • read_dtc_snapshot(dtc_hex, record_num=0xFF)
  • read_dtc_extended(dtc_hex, record_num=0xFF)
  • read_supported_dtcs()
  • clear_dtcs(group="all")
  • ecu_reset(reset_type="hard")
  • tester_present(suppress=True)
  • communication_control(action="disable")
  • control_dtc_setting(setting="off")
  • io_control(did, option, value_hex="")
  • routine_control(routine_id, action="start", data_hex="")
  • request_download(address, size, compression=0, encrypting=0)
  • request_upload(address, size)
  • transfer_data(block_seq, data_hex)
  • request_transfer_exit()
  • request_file_transfer(mode, file_path)
  • security_access_seed(level=1)
  • security_access_key(level=1, key_hex="")
  • switch_session(session="extended")
  • security_access_flow(level=1)
  • programming_flow()
  • dtc_reading_flow()
  • io_control_flow(did)
  • eol_flow()
  • ota_update_flow()
  • list_services(group=None)
  • list_dids()
  • list_nrcs()
  • list_routines()
  • lookup_nrc(nrc_byte)
  • lookup_service(sid)
  • clear_session()
  • ecu_state (property)

AI Client (LLM)

  • encode(description)
  • decode(hex_bytes)
  • explain_service_result(service, result)
  • verify_service_result(service, result)
  • explain_response(service, response_hex)
  • explain_dtc(dtc_code)
  • explain_dtc_status(dtc_code, status_byte)
  • explain_service(service_name_or_sid)
  • explain_nrc(nrc)
  • explain_session(session)
  • get_flow(flow_name)
  • analyze(hex_bytes)
  • compare(expected_hex, actual_hex)
  • suggest_next_step(last_request, last_response)
  • chat(message)
  • clear_history()
  • reset()

Offline Services (No LLM)

Each service class supports build_request, parse_response, and validate.

Session Management

  • DiagnosticSessionControl
  • ECUReset
  • SecurityAccess
  • CommunicationControl
  • Authentication
  • TesterPresent
  • AccessTimingParameter
  • SecuredDataTransmission
  • ControlDTCSetting
  • ResponseOnEvent
  • LinkControl

Data Transmission

  • ReadDataByIdentifier
  • ReadMemoryByAddress
  • ReadScalingDataByIdentifier
  • ReadDataByPeriodicIdentifier
  • DynamicallyDefineDataIdentifier
  • WriteDataByIdentifier
  • WriteMemoryByAddress

DTC Management

  • ClearDiagnosticInformation
  • ReadDTCInformation

I/O Control

  • InputOutputControlByIdentifier

Routine Control

  • RoutineControl

Upload / Download

  • RequestDownload
  • RequestUpload
  • TransferData
  • RequestTransferExit
  • RequestFileTransfer

AI Client (LLM)

from pyudskit.ai import AIClient
from pyudskit.services import ReadDataByIdentifier

ai = AIClient()
svc = ReadDataByIdentifier()
req = svc.build_request([0xF190])

print(ai.explain_service_result(svc, req))
print(ai.verify_service_result(svc, req))
print(ai.decode("7F 22 31"))

Examples

Workshop DTC Scan

from pyudskit import UDS

uds = UDS()

result = uds.read_dtcs(0x08)
print(result["uds_bytes"])  # 19 02 08

for code in ["P0301", "U0100", "B0020"]:
    print(uds.explain_dtc(code))

print(uds.clear_dtcs())

ECU Flash Programming

from pyudskit import UDS

uds = UDS()

uds.switch_session("extended")
uds.communication_control("disable")
uds.control_dtc_setting("off")
uds.security_access_flow(level=1)
uds.switch_session("programming")
uds.routine_control(0xFF00, "start")
uds.request_download(0x08000000, 0x10000)
uds.transfer_data(0x01, "AA BB CC ...")
uds.request_transfer_exit()
uds.ecu_reset("hard")

API Reference

https://pyudskit.readthedocs.io


License

MIT


Links

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

pyudskit-0.2.0.tar.gz (54.1 kB view details)

Uploaded Source

Built Distribution

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

pyudskit-0.2.0-py3-none-any.whl (61.5 kB view details)

Uploaded Python 3

File details

Details for the file pyudskit-0.2.0.tar.gz.

File metadata

  • Download URL: pyudskit-0.2.0.tar.gz
  • Upload date:
  • Size: 54.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for pyudskit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 8729235e5b2af7b6bd6a325c82de63d43c3332a974f7fb1fbd67d83f860ce252
MD5 8c008f242eb1caefb228fea55c2c9b50
BLAKE2b-256 e4abe8ed948430818772eb0864e2ab0a4824dd6a2b30c94b2f31fa4b07a624d3

See more details on using hashes here.

File details

Details for the file pyudskit-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pyudskit-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 61.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for pyudskit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60365c73f7b24b9236675f3fcb789fe55fb32a84c64aaaf51d6ba42e75922dcf
MD5 b66d1e5c5a0f1f68a1e860e2c0d352b2
BLAKE2b-256 de0161739918eaa3837646009e1460b70a817442b84cca9f08fb9a18b24e9c80

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