Configuration#

Usually this library is used with a particular CAN interface, this can be specified in code, read from configuration files or environment variables.

See can.util.load_config() for implementation.

In Code#

The can object exposes an rc dictionary which can be used to set the interface and channel.

import can
can.rc['interface'] = 'socketcan'
can.rc['channel'] = 'vcan0'
can.rc['bitrate'] = 500000
from can.interface import Bus

bus = Bus()

You can also specify the interface and channel for each Bus instance:

import can

bus = can.interface.Bus(bustype='socketcan', channel='vcan0', bitrate=500000)

Configuration File#

On Linux systems the config file is searched in the following paths:

  1. ~/can.conf

  2. /etc/can.conf

  3. $HOME/.can

  4. $HOME/.canrc

On Windows systems the config file is searched in the following paths:

  1. %USERPROFILE%/can.conf

  2. can.ini (current working directory)

  3. %APPDATA%/can.ini

The configuration file sets the default interface and channel:

[default]
interface = <the name of the interface to use>
channel = <the channel to use by default>
bitrate = <the bitrate in bits/s to use by default>

The configuration can also contain additional sections (or context):

[default]
interface = <the name of the interface to use>
channel = <the channel to use by default>
bitrate = <the bitrate in bits/s to use by default>

[HS]
# All the values from the 'default' section are inherited
channel = <the channel to use>
bitrate = <the bitrate in bits/s to use. i.e. 500000>

[MS]
# All the values from the 'default' section are inherited
channel = <the channel to use>
bitrate = <the bitrate in bits/s to use. i.e. 125000>
from can.interface import Bus

hs_bus = Bus(context='HS')
ms_bus = Bus(context='MS')

Environment Variables#

Configuration can be pulled from these environmental variables:

  • CAN_INTERFACE

  • CAN_CHANNEL

  • CAN_BITRATE

  • CAN_CONFIG

The CAN_CONFIG environment variable allows to set any bus configuration using JSON.

For example:

CAN_INTERFACE=socketcan CAN_CONFIG={"receive_own_messages": true, "fd": true}

Interface Names#

Lookup table of interface names:

Additional interface types can be added via the Plugin Interface.