Skip to content

Releases: brendan-w/python-OBD

v0.7.2

10 Jul 03:29
Compare
Choose a tag to compare

Changes

  • Updated pint dependency for compatibility with python >= 3.10
  • Support for Mode 9 PIDs
  • Added 1 second read-retry loop for unresponsive dongles

v0.7.1

15 May 04:29
Compare
Choose a tag to compare

New Features

  • Added the header field to all OBDCommand objects, allowing the user set custom headers on their queires.
  • Added voltage check enabled by default, to handle cases where the vehicle is not powered.
  • Added lower-power-mode support
  • Added new check_voltage and start_low_power options to the OBD constructor.
  • Added __repr__ implementation for OBDCommands, containing more information than the normal __str__ function.
  • Async connections now support an optional force parameter, like the main OBD API.
  • Added delay_cmds argument to the Async connection, used for rate-limiting updates.

Bugfixes

  • Handle voltage responses that include a 'v' unit
  • Handle "UNABLE TO CONNECT" responses explicitely, rather than blindly continuing

New/Breaking Changes

  • Async connections will no longer throw exceptions when the underlying transport is disconnected. They will instead terminate gracefully. Async status is observable via the Async.running parameter.

Internal Changes

  • Removed newline from all queries, in favor of a single \r
  • Renamed async.py to asynchronous.py to avoid conflict with python's async implementation
  • Better debug logging in various error cases
  • Better PEP8 compliance

v0.7.0

05 Nov 05:53
Compare
Choose a tag to compare

New Features

  • Added timeout argument to OBD and Async constructors that controls the timeout used during initial adapter handshakes.

Bugfixes

  • Various python 3 compatibility fixes.
  • Repaired fuel_type and obd_compliance decoders. These were left in an inoperative state following the 6.0 decoder interface changes.

New/Breaking Changes

  • OBDCommand decoders are now given the mode and pid bytes at the head of each message. It is the duty of the decoder to ignore and/or use these bytes. This was done to facilitate modes where there are no PIDs.
  • OBDCommands now return None instead of zero for unknown or un-parsable mode/pid values.

Internal Changes

  • Fast mode now dynamically learns the number of responses to each query, rather than blindly asking for the len(ecus) responses for everything.

v0.6.1

02 Aug 01:07
Compare
Choose a tag to compare

Bugfixes

  • pinned source files as UTF-8 to avoid problems when the parser encounters unicode characters.
  • fixed readme link to command tables

v0.6.0

27 Jul 22:10
Compare
Choose a tag to compare

New Features

  • added auto baud-rate detection system
  • implemented mode 06 commands for CAN
  • implemented more mode 01 commands that were listed as unsupported

New/Breaking Changes

  • using Pint for values and units. OBDResponse.value now holds Pint Quantities
    • for backwards compatibility, use response.value.magnitude
  • new decoder format, thanks to Pint quantities
  • obd.Unit is now a Pint unit registry. All unit names have changed
  • using pyserial 3.0 API
  • using python logging module, disposed with debug system
  • using bytestrings for commands
  • FUEL_STATUS now returns a tuple for denoting first and second fuel systems
  • descriptions for unknown DTCs are now empty strings
  • changed name and description of lone Mode 07 command
  • removed deprecated commands
    • OBD.get_port_name() --> OBD.port_name()
    • OBDCommand.supported --> OBD.supports()
    • obd.scanSerial() --> obd.scan_serial()

Internal Changes

  • retrieving serial data in blocks, rather than single characters (serial reading is faster)
  • renamed OBD.port --> OBD.interface
  • using new "Units And Scaling" entries (built for Mode 06) for a few of the standard decoders as well

v0.5.1

04 Jul 01:52
Compare
Choose a tag to compare
  • fixed syntax error causing crash during auto port finding
  • detect and filter out invalid message sizes

v0.5.0

14 Jun 01:08
Compare
Choose a tag to compare
  • Performance increases exposed as "fast mode":
    • appends ECU count to the end of each fast-capable command
    • re-runs previous commands with "\r\n" returns
  • Manual protocol selection via the protocol kwarg in OBD constructor
  • OBD.get_port_name() has been deprecated, use OBD.port_name() instead
  • Added internal ECU map and message filtering
  • Decoders may now process multiple messages per OBDResponse. New decoder format:
def <name>(messages):
    # process message(s)
    return (<value>, <unit>)
  • Replaced Message.raw with Message.raw()
  • Added Message.hex() for compatability with old decoder format
  • Changed behavior of the noop() decoder to pass raw data.
  • Added drop() decoder to return None and trigger null OBDResponses
  • OBDResponse.message --> .messages, now carries a list of Message objects
  • OBDCommands no longer carry a supported flag. Use OBD.supported_commands or OBD.supports() instead.
  • obd.scanSerial() is deprecated, use obd.scan_serial() instead

v0.4.1

05 Jul 19:31
Compare
Choose a tag to compare
  • Fixed problem where multiple Async.start() calls would spawn multiple update threads.
  • Using a blocking serial.flush() call, rather than an aborting one
  • Added context manager support for pausing the Async update loop
  • Using name mangling for internal Async variables
  • Made internal baudrate params required (no default value)
  • Docs are under version control

v0.4.0

05 May 00:42
Compare
Choose a tag to compare
  • Added protocol abstraction system to support 11 and 29 bit CAN headers
  • Parses engine DTCs
  • Supports python 3

v0.3.0

07 Feb 23:04
Compare
Choose a tag to compare
  • enables header information on ELM327 adapters
  • includes basic handling for cars with multiple ECUs
  • added more comprehensive debug output
  • async start() and stop() must now be called explicitly before watching commands
  • added better scanSerial support with globbing