Metadata-Version: 2.1
Name: ELM327-emulator
Version: 3.0.3.post30
Summary: ELM327 Emulator for testing software interfacing OBDII via ELM327 adapter
Home-page: https://github.com/Ircama/ELM327-emulator
Author: Ircama
License: CC-BY-NC-SA-4.0
Keywords: elm327 emulator obdii obd2 torque simulation simulator can-bus automotive
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX
Classifier: Operating System :: POSIX :: BSD
Classifier: Operating System :: Microsoft :: Windows
Classifier: License :: Other/Proprietary License
Classifier: Topic :: Communications
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Manufacturing
Classifier: Intended Audience :: Telecommunications Industry
Classifier: Topic :: System :: Emulators
Classifier: Intended Audience :: Developers
Requires-Python: >3.5
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: python-daemon
Requires-Dist: pyyaml
Requires-Dist: obd
Requires-Dist: pyreadline3; platform_system == "Windows"

ELM327-emulator
===============

[![PyPI](https://img.shields.io/pypi/v/ELM327-emulator.svg?maxAge=2592000)](https://pypi.org/project/ELM327-emulator)
[![Python Versions](https://img.shields.io/pypi/pyversions/ELM327-emulator.svg)](https://pypi.org/project/ELM327-emulator/)
[![PyPI download month](https://img.shields.io/pypi/dm/ELM327-emulator.svg)](https://pypi.python.org/pypi/ELM327-emulator/)
[![GitHub license](https://img.shields.io/badge/license-CC--BY--NC--SA--4.0-blue)](https://raw.githubusercontent.com/ircama/ELM327-emulator/master/LICENSE)

__A Python emulator of the ELM327 OBD-II adapter connected to a vehicle supporting multi-ECU simulation.__

*ELM327-emulator* connects client applications to multiple emulated [ECU](https://en.wikipedia.org/wiki/Engine_control_unit)s via [OBD-II](https://en.wikipedia.org/wiki/On-board_diagnostics) interface through different networking systems, including serial communication (where [pseudo-terminals](https://en.wikipedia.org/wiki/Pseudoterminal) are used if supported by the operating systems), or direct interaction with communication devices, or TCP/IP, or Bluetooth. The software simulates an [ELM327](https://en.wikipedia.org/wiki/ELM327) adapter connected to a vehicle, includes a command-line interface for extensive monitoring and offers a documented Python development framework to implement ECU emulation objects.

*ELM327-emulator* is able to support basic ELM327 commands and OBD service requests through stateless request/response method via OBD-II, but can also handle stateful [UDS](https://en.wikipedia.org/wiki/Unified_Diagnostic_Services) communication with [ISO-TP](https://en.wikipedia.org/wiki/ISO_15765-2) Flow Control and [Keyword Protocol 2000](https://en.wikipedia.org/wiki/Keyword_Protocol_2000), concurrently emulating multiple ECUs. It is designed to be extended via a plugin architecture to allow easy development of specific tasks implementing workflows, including the possibility to simulate anomalies for testing purposes. Many AT commands are supported, as well as some [OBDLink](https://www.obdlink.com/) AT/ST [commands](https://www.scantool.net/scantool/downloads/98/stn1100-frpm.pdf).

*ELM327-emulator* supports different operating systems including Windows, macOS and UNIX/Linux; it is agnostic of the client application and has been tested with [python-OBD](https://github.com/brendan-w/python-OBD) as well as with many applications on Windows, Linux and on smartphone devices.

An internal dictionary (named *ObdMessage*) allows configuring the emulation, which is currently set to reproduce the message flow generated by more ECUs, including the basic communication of a Toyota Auris Hybrid car (through the `scenario car` option) and can be easily extended to simulate communication produced by other vehicles or ECUs. In case of more complex interactions (e.g., entering privileged diagnostic sessions and performing reset or flash upload operations), the dictionary can instance tasks, which are implemented through plugins, very simple to be developed by users extending the software. Some example of plugins is already included.

*ELM327-emulator* also offers a feature that compares the emulation with the direct connection of an OBD-II adapter to allow extending the dictionary by reporting unmatched requests. In addition, it provides an auxiliary scanning tool (*obd_dictionary*) that builds the ObdMessage dictionary of a specific vehicle by automatically querying all standard OBD service requests one by one (as well as querying additional custom PIDs specified by the user via CSV file); the dictionary can then be used to emulate stateless request/responses of a specific car or ECU.


Full information and usage details at the [ELM327-emulator GitHub repository](https://github.com/Ircama/ELM327-emulator).
