Skip to main content

A Diagnostic over IP (DoIP) client implementing ISO-13400-2.

Project description

https://github.com/jacobschaer/python-doipclient/actions/workflows/tests.yml/badge.svg?branch=main

doipclient is a pure Python 3 Diagnostic over IP (DoIP) client which can be used for communicating with modern ECU’s over automotive ethernet. It implements the majority of ISO-13400 (2019) from the perspective of a short-lived synchronous client. The primary use case is to serve as a transport layer implementation for the udsoncan library. The code is published under MIT license on GitHub (jacobschaer/python-doipclient).

Documentation

The documentation is available here : https://python-doipclient.readthedocs.io/

Requirements

  • Python 3.6+

Installation

using pip:

pip install doipclient

Running Tests from source

using pytest:

pip install pytest pytest-mock
pytest

Example

Updated version of udsoncan’s example using python_doip instead of IsoTPSocketConnection

import SomeLib.SomeCar.SomeModel as MyCar

import udsoncan
from doipclient import DoIPClient
from doipclient.connectors import DoIPClientUDSConnector
from udsoncan.client import Client
from udsoncan.exceptions import *
from udsoncan.services import *

udsoncan.setup_logging()

ecu_ip = '127.0.0.1'
ecu_logical_address = 0x00E0
doip_client = DoIPClient(ecu_ip, ecu_logical_address)
conn = DoIPClientUDSConnector(doip_client)
with Client(conn, request_timeout=2, config=MyCar.config) as client:
   try:
      client.change_session(DiagnosticSessionControl.Session.extendedDiagnosticSession)  # integer with value of 3
      client.unlock_security_access(MyCar.debug_level)                                   # Fictive security level. Integer coming from fictive lib, let's say its value is 5
      client.write_data_by_identifier(udsoncan.DataIdentifier.VIN, 'ABC123456789')       # Standard ID for VIN is 0xF190. Codec is set in the client configuration
      print('Vehicle Identification Number successfully changed.')
      client.ecu_reset(ECUReset.ResetType.hardReset)                                     # HardReset = 0x01
   except NegativeResponseException as e:
      print('Server refused our request for service %s with code "%s" (0x%02x)' % (e.response.service.get_name(), e.response.code_name, e.response.code))
   except (InvalidResponseException, UnexpectedResponseException) as e:
      print('Server sent an invalid payload : %s' % e.response.original_payload)

   # Because we reset our UDS server, we must also reconnect/reactivate the DoIP socket
   # Alternatively, we could have used the auto_reconnect_tcp flag on the DoIPClient
   # Note: ECU's do not restart instantly, so you may need a sleep() before moving on
   doip_client.reconnect()
   client.tester_present()

# Cleanup the DoIP Socket when we're done. Alternatively, we could have used the
# close_connection flag on conn so that the udsoncan client would clean it up
doip_client.close()

python-uds Support

The python-uds can also be used but requires a fork until the owner merges this PR Doip #63. For now, to use the port:

using pip:

git clone https://github.com/jacobschaer/python-uds
git checkout doip
cd python-uds
pip install .

Example:

from uds import Uds

ecu = Uds(transportProtocol="DoIP", ecu_ip="192.168.1.1", ecu_logical_address=1)
try:
    response = ecu.send([0x3E, 0x00])
    print(response)  # This should be [0x7E, 0x00]
except:
    print("Send did not complete")

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

doipclient-1.1.1.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

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

doipclient-1.1.1-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file doipclient-1.1.1.tar.gz.

File metadata

  • Download URL: doipclient-1.1.1.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for doipclient-1.1.1.tar.gz
Algorithm Hash digest
SHA256 53d02d941f13d77fb0ad83e2e01f1063e2c1be26f495710e9a255c0fad045b86
MD5 3479957c6d15a8fa215a225f87fabf5b
BLAKE2b-256 9d2259fdfc934c4117cd7b9e2341ca629b4a5614f1f3f564c128630fff350290

See more details on using hashes here.

File details

Details for the file doipclient-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: doipclient-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for doipclient-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 753b648115e9c28b5c57e72b8b700e34b65c296f770925b6673fc9bd7d17375c
MD5 80b9b26313417efe38a849db76cb9d1f
BLAKE2b-256 f31df3747d76c658b87a41dc3a271f6ce8951cd0f601e99c9bca8b97b86588d1

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