pyneovi is a wrapper around the API provided by Intrepid Control Systems for communicating with their NeoVI range of devices. In the course of my research work with Cogent I had to use the NeoVI Fire to interface to an ECU in a vehicle. While the Vehicle Spy 3 software provided by Intrepid offers an impressive range of features, including several methods of scripting, our requirements called for a much more lightweight option that could be integrated directly with our existing code. I had already been writing this wrapper library in my spare time, so all that was needed at that point was to create the vehicle-specific configuration (proprietary to the vehicle manufacturer we were working with) and speed up the implementation of some additional features that were pending.

The focus of the library is on communicating with the ECU in the context of a diagnostic session. Currently, authentication via Security Access commands (usually required for setting output values) is not handled and must be performed by a separate tool.

You can find pyneovi on BitBucket under the MIT license and the documentation is hosted on Read the Docs.

Usage example

Example script to print the ambient temperature obtained from the HVAC ECU:

import neovi.neodevice as neodevice
import neovi.ecu as ecu
import neovi.spec as spec
import neovi.neovi as neovi
import json

dev = neodevice.find_devices(neovi.NEODEVICE_FIRE)[0]

input_file = open('vehicle.spec', 'rt')
data = json.load(input_file, object_hook=spec.from_json)

hvac = ecu.ECU(data['ECUs']['HVAC'], dev)

result = hvac.read_data_by_id('External Ambient Temperature')['value']
print("Value = %.1f %s" % (result[0], result[1]))


Example output:

$ python
Value = 34.5 Deg C


The Python module dependencies are minimal and will usually be satisfied by the modules provided with your Python distribution: ctypes, platform, json, and threading.

Additionally, the library requires icsneo40.dll (supplied with the Vehicle Spy 3 software) to be present, as this handles the low-level details of communicating with the hardware.