# ECU Monitor

Syrus 4G IoT Telematics Gateway has a built-in ECU interface, which allows the device to connect to a vehicle's CAN bus and read data.

General Overview

  • The way it works is that you instruct the Syrus to read data at a certain speed for a particular protocol, for example read J1939 data at 250KHz from the PRIMARY CAN wires on the device.
  • Once the corresponding wires are connected to the vehicle's CAN bus, the ECU will parse the parameters found in the corresponding parameter file inside the device.
  • By default Syrus 4G comes loaded with a predefined list of common parameters, but this list is editable by the user, so they can expand or select only the parameters he/she wants.
  • Once the parameters are being read you can use an application like SyrusJS to obtain the engine data and send it to an endpoint or create rules/trigger actions based on the values reported.
  • You can also use the Syrus 4G to log data from the CAN bus and interpret any proprietary parameters found, provided that you know how to interpret them, more details below.

Note that this documentation assumes that the reader has access to the latest official SAE J1939-71 documentation from which they'll find the parameters later defined in order to add them to the parameter file.

# Configuration

The ECU can be configured either using the Syrus Management Tool GUI or the apx-ecu core tool:

$ sudo apx-ecu configure [INTERFACE] [PROTOCOL|CAN_MODE]

Example, configure the Primary CAN (CAN1_H / CAN1_L wires) to read J1939 at 500KHz

$ sudo apx-ecu configure PRIMARY_CAN J1939_500KHZ
Mode Type Description
PRIMARY_CAN String Primary CAN configuration (CAN1_H / CAN1_L wires)
SECONDARY_CAN String Secondary CAN configuration (CAN2_H / CAN2_L wires)
LISTEN_ONLY_MODE String Program the listen only mode

Possible values:

PRIMARY_CAN or SECONDARY_CAN

  • NONE
  • J1939_250KHZ
  • J1939_500KHZ

LISTEN_ONLY_MODE

  • NONE
  • PRIMARY_CAN
  • SECONDARY_CAN
  • PRIMARY_&_SECONDARY
  • ALL

Listen Only Mode

In this mode the ECU Monitor does not request parameters to the vehicle's onboard computer. This is useful in case there's any interferences caused when connecting a diagnostic tool like the ECU to the vehicle's CAN bus.

Once you've configured the ECU, you're ready to connect it to the vehicle's J1939/CAN bus connector, this is usually a 9-pin connector, refer to our support site for more information on the location of this connector.

# Installation

Syrus 4 Datasheet with Pinout

CAN Bus Wiring Pinout (found in 14-pin molex)

Syrus Wire Color Signal Description
Yellow CAN1_H Primary positive signal of the J1939/FMS bus. Connect to the vehicle's CAN_H cable. This cable is twisted together with the green CAN1_L cable.
Green CAN1_L Primary negative signal of the J1939/FMS bus. Connected to the vehicle's CAN_L cable. This cable is twisted together with the yellow CAN1_H cable on the ECU Monitor.
Cyan CAN2_H Secondary positive signal of the J1939/FMS bus. Connect to the vehicle's CAN_H cable. This cable is twisted together with the white/light green CAN2_L cable.
White Light green CAN2_L Secondary negative signal of the J1939/FMS bus. Connect to the vehicle's CAN_L cable. This cable is twisted together with the cyan CAN2_H cable.

# Parameter file

The parameter file is what the Syrus will actual read from the onboard computer, you can include as many parameters as you want on this file.

The name of the file is: j1939_params, and the path of this file is /data/users/syrus4g/j1939_params

⚠️ Note that this file does not have an extension, save it exactly as: j1939_params

This special file treats each new line as a desired parameter to be read. Each line must have the following tokens spelled as shown below:

  • PARAM_NAME
  • PGN
  • TRANSMISSION_RATE
  • PRIORITY
  • DLC
  • LENGTH
  • START_POSITION
  • GROUP
  • MULTIPLIER

The following tokens are optional and can be added or omitted to the lines:

  • OFFSET
  • SOURCE_ADDRESS
  • SOURCE_INTERFACE
  • LOCATION_INDEX

Important Note

  • All of the above tokens are terminated with the : character.
  • All of the above tokens must be spelled exactly the same as shown above.
  • All of the key value pairs for the desired parameter are separated by , character.
  • All of the values must be spelled exactly as shown on the explanation.
  • Make sure to separate different parameters with the ENTER key.
  • Make sure that the last parameter is followed by a new line by pressing the ENTER key.
  • The order of the tokens does not matter, but it's recommended to follow the order as stated above

# Token explanation

PARAM_NAME: This token is simply the full parameter name found in the standard documentation. The valid value for this key is the actual parameter name, it may be useful to put the Acronym in front of the name to easily identify the parameter. The max number of characters is 99.

PGN: This is the PDU format and specific, which is the parameter group number found in the standard documentation. The valid value for this key is the PGN that the parameter belongs to. Example: FEE7 is a valid value for PGN key token.

TRANSMISSION_RATE: This token refers to the transmission repetition rate of the PGN defined by the standard. The following values are the only ones valid for this key token:

  • CONTINUOUS - Used when transmission repetition rate does not describe a time in either seconds or milliseconds.
  • ON_REQUEST - Used when the transmission repetition rate states that the PGN is On request.
  • THE ACTUAL NUMERICAL VALUE - Enter the corresponding numerical value that appears. If 1s appears, then enter 1S. If 100ms, then enter 100MS. If 10s, then enter 10S.

PRIORITY: This token refers to the default priority defined by the standard. The valid values for this key token range from 3 to 7.

DLC: Also known as PGN Data Length. This token contains the value of the data length defined by the standard for the PGN. The valid values for this key token range from 1 to 8, but in most cases it will be 8.

LENGTH: This token contains the length of the of the desired parameter; enter exactly the value that appears under the length column, separating the number from the word by an underscore. Example: If it states 2 bytes, then enter 2_BYTES. If it states 2 bits, then enter 2_BITS If it states 1 byte, then enter 1_BYTE.

Note: pay attention to the plurality, 1 byte vs 2 bytes.

START_POSITION: Also known as SPN Position In PGN. This token will be the start position of the desired parameter. Enter exactly the number that appears in the standard for the Start Position field. If Start Position is 4, then simply enter 4. If the Start Position is 4.7, enter 4.7 for the START_POSITION token. If Start Position is 4-5, enter 4-5. Examples:

  • If the standard states just the start position is the number 4. Then the START_POSITION: 4
  • If the standard states the number 4.7 in the start position column, then the START_POSITION: 4.7
  • If the standard states the number 4-5 in the start position column, then the START_POSITION: 4-5

GROUP: This token refers to what group of parameters is desired. The only valid values for this key token are:

  • SIGNAL - Used when desired parameter uses a binary value between 0 and 3.
  • PERCENT - Used when desired parameter states that it uses a percent value.
  • EXTENDED_SIGNAL - Used when desired parameter uses binary values more than 0 to 3.
  • LOCATION_COMPONENT_1 - Used when desired parameter relates to the location of tire or the location of an axle. Typically used when the PGN where this parameter comes from has a location parameter with a LENGTH of 8 bits.
  • NUMBER_VALUE - Used when none of the above groups apply.

MULTIPLIER: This token refers to the first component of the resolution in the desired parameter definition. Example: The desired parameter defines resolution as 0.0001/bit, 0 offset. The MULTIPLIER is 0.0001.
When the GROUP token value for the parameter is either SIGNAL or EXTENDED_SIGNAL the MULTIPLIER must be set to 1. Another possibility is the GROUP token value is set to LOCATION_COMPONENT_1 and the resolution includes states, then the MULTIPLIER must be set to 1.

The following key tokens are optional:

OFFSET: This token refers to the second component of the resolution in the desired parameter definition. Example: The desired parameter defines resolution as 0.03125 deg C/bit, -273 deg C offset. The OFFSET is -273. If no offset is given, then it is assumed to be 0.

SOURCE_ADDRESS: This token will order the ecumonitor application to only listen to this particular parameter if it is coming from the specified source address. This source address is defined as a hexadecimal value of one byte. If no SOURCE_ADDRESS is given then the application will obtain the parameter from any source. Example: A particular parameter is sent by various sources, but the user only wants to accept parameter information coming from the engine controller. SOURCE_ADDRESS: 00

SOURCE_INTERFACE: This token will order the ecumonitor application to only listen to this particular parameter if it is coming from the desired interface. Either PRIMARY, SECONDARY, or BOTH.

  • PRIMARY - Allows this particular parameter to be read from PRIMARY_CAN.
  • SECONDARY - Allows this particular parameter to be read from SECONDARY_CAN.
  • BOTH - Ecumonitor application will listen to both interfaces for this particular parameter. If this parameter is found in PRIMARY, then it will declare PRIMARY as the prioritized default desired interface even if the parameter also appears in SECONDARY. This is done to avoid data values from the parameter to change constantly if both interfaces report different values for the parameter.

LOCATION_INDEX: This token will be accompanied with the LOCATION_COMPONENT_1 value for GROUP. This lets ecumonitor application know which byte position the the location will be extracted from. By default this value is 1 to represent that the location will be found in start position 1. The max value is 8. Example: If Tire Temperature is a desired parameter, then enter the following string.

PARAM_NAME: TIRE TEMPERATURE, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 3-4, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 0.03125, OFFSET: -273, LOCATION_INDEX: 1

Note: in the sample configuration file this location index is omitted since the values are 1 and this is the default value in case it's not found.

# Message broker interaction

Once ecumonitor application is capturing and processing data, this data will be saved and sent through a message broker in the two following ways:

  • Parameters will be given a unique id which consists of the PGN the parameter comes from and the start position of that parameter. This unique id will be saved in the ecumonitor_parameters hash set with its current value.
  • Finally, once every second, information about all of the parameters that have a TRANSMISSION_RATE of < than 10sec will be published following the format of unique id followed by an equals sign followed by the value and finally followed by an ampersand if there are more parameters after this one. The same is true for parameters that have a transmission rate of 10sec except these are published every 10sec.

Example for publishing Engine Speed along with other parameters:

ecumonitor/parameters

"PUBLISH" "ecumonitor/parameters" "fef1_1.3=0.00&fef1_2-3=86.20&fef1_4.1=1.00&f004_4-5=651.00&fef1_4.3=1.00&fef1_4.7=1.00&fef1_5.1=0.00&fef1_5.5=0.00&fef1_6=17.00&fef1_7.1=1.00&fef1_7.6=4.00&fef1_8.1=1.00"

Parameters that fall under the GROUP of LOCATION_COMPONENT_1 follow a different format for saving and publishing data. This format is broken down into three different values.

  1. Axle position, 2. tire position, and 3. the corresponding value for that location for that particular parameter, followed by a semicolon ; if there are more values with different locations. The parameter is expected to have multiple different values for different locations.

Example with Tire Temperature:

"PUBLISH" "ecumonitor/parameters" "fef4_3-4=0,0,22.41;0,1,23.91;1,0,24.38;1,1,23.24"

In the above example the Tire Temperature is obtained for four different sensors located at; starting from the left,

  • first tire on the left side of the first axle with a value of 22.41°C,
  • second tire on the right side on the first axle with a value of 23.91°C,
  • third tire on the left side on the second axle with a value of 24.38°C,
  • and fourth tire on the right side on the second axle with a value of 23.24°C.

Example with tire temperature and other parameters:

"PUBLISH" "ecumonitor/parameters" "fee5_1-4=14316557.65&fee5_5-8=286331153000.00&feea_2-3=4,1,6810.50&fef4_2=5,4,276.00;2,1,80.00;2,3,80.00&fef4_3-4=0,0,22.41;0,1,23.91;1,0,24.38;1,1,23.24"

Note: The ISO standard indicates that it is recommended to add a value of one to each axle and tire component location so that position number values go from 1 to 15 instead of 0 to 14.

# Capturing raw CAN data

You can capture the raw data that's being read from the CAN interface using the following command:

apx-ecu log [TIME] [INTERFACE] [FILENAME]

Example, log 10 seconds of data from the PRIMARY_CAN interface with the filename logTruck500.log

$ sudo apx-ecu log 10 PRIMARY_CAN logTruck500.log

note that this file is saved to: /data/users/syrus4g/ecu_logs/logTruck500.log

Once you've captured the data and open the file it'll look like this:

interface = can0, family = 29, type = 3, proto = 1
<0x18febf0b> [8] 00 00 fe 7d fe 7d ff ff
<0x0cf00400> [8] 10 7d 86 ec 12 00 04 86
<0x18ff0421> [8] ff ff ff ff cf ff ff ff
<0x18fec100> [8] 75 33 e5 00 94 35 e5 00
<0x18fc9600> [8] 00 00 ff ff ff ff ff ff
<0x18f00e00> [8] ff ff ff ff c0 9f ff ff
<0x0cf00300> [8] d3 08 17 07 ff ff 62 7d
<0x18f0010b> [8] cf ff f0 ff ff 1c ff ff
<0x18fd9400> [8] ff ff ff ff ff ff ff ff

From the log output you can see what PGNs are being read and the payload, the contents can be separated as follow:

header payload-length [bytes] payload
<0x0cf00400> [8] 10 7d 86 ec 12 00 04 86

The PGN can be found in the middle 4 characters of the header, after 0x in between the < & >

f004 and its payload:

<0x0cf00400> [8] 10 7d 86 ec 12 00 04 86

This line contains informatoin on f004 which refers to the pgn61444 - Electronic Engine Controller 1 - EEC1

For example, SPN 190: the Engine Speed can be found in bytes 4-5 (bytes 0, 1, 2, etc.)

<0x0cf00400> [8] 10 7d 86 ec 12 00 04 86

to convert to decimal we use little endian and switch the position of the bytes.

ec 12 => 12ec to dec = 4844

according to SPN: 190, this parameter has a resolution of 0.125 rpm/bit

4844 * 0.125 = 605 rpm

Things to keep in mind:

  • some SPNs may be invalid, you can tell because the payload is full of F's (consult 5.1.5 Tables 1-3 on J1939-71 documentation).
  • at the same time it is useful to organize the candump in alphabetical order to see how the payload changes and confirm which values are indeed being read
  • some parameters may be found in other CAN bus wires of the vehicle's CAN Network
  • make sure to setup the configuration of the CAN interface before doing the capture, failure to do so will render inaccurate log outputs

# Guide to create the parameters file (j1939)

Information about the following parameters is desired:

  • Engine Trip Fuel
  • Engine Speed
  • Service Distance
  • Engine Oil Level
  • Clutch Switch

# Step 1

Identify the location of the parameter in the PGN description section of the standard.
Here, important information required for the parameter file can be found; such as, parameter name, PGN, transmission repetition rate, priority, data length, start position, and length.
DO NOT confuse data length with length. Data length; which will now be renamed DLC, refers to the length of the PGN message where length is the length of the parameter of interest. When inputting information, all of the key and value pairs are in capital letters.

# Step 2

Input the value for the keys based on the Explanation of key tokens section. Make sure that the keys are terminated with the : (colon) character and that key value pairs are separated by the , (comma) character.

# Step 3

Enter the parameter name:

  • For Engine Trip Fuel → PARAMETER_NAME: ENGINE TRIP FUEL
  • For Engine Speed → PARAMETER_NAME: ENGINE SPEED
  • For Service Distance → PARAMETER_NAME: SERVICE DISTANCE
  • For Engine Oil Level → PARAMETER_NAME: ENGINE OIL LEVEL
  • For Clutch Switch → PARAMETER_NAME: CLUTCH SWITCH

# Step 4

Enter the PGN:

Note: This is the hexadecimal representation of the PGN ignoring the leading 0x00.

  • For Engine Trip Fuel → PGN: FEE9
  • For Engine Speed → PGN: F004
  • For Service Distance → PGN: FEC0
  • For Engine Oil Level → PGN: FEEF
  • For Clutch Switch → PGN: FEF1

# Step 5

Enter the transmission repetition rate:

Note: Some cases state a number followed by a unit of time, other cases state 'On request', and finally some cases state neither. When neither, a number, or the words “On request” appear, then enter the transmission repetition rate as CONTINUOUS.

  • For Engine Trip Fuel → TRANSMISSION_RATE: ON_REQUEST
  • For Engine Speed → TRANSMISSION_RATE: CONTINUOUS
  • For Service Distance → TRANSMISSION_RATE: ON_REQUEST
  • For Engine Oil Level → TRANSMISSION_RATE: 0.5S
  • For Clutch Switch → TRANSMISSION_RATE: 100MS

# Step 6

Enter the priority:

  • For Engine Trip Fuel → PRIORITY: 6
  • For Engine Speed → PRIORITY: 3
  • For Service Distance → PRIORITY: 6
  • For Engine Oil Level → PRIORITY: 6
  • For Clutch Switch → PRIORITY: 6

# Step 7

Enter the data length (DLC):

Note: In some cases the Data Length will state VARIABLE, be sure to enter VARIABLE when it is mentioned.

  • For Engine Trip Fuel → DLC: 8
  • For Engine Speed → DLC: 8
  • For Service Distance → DLC: 8
  • For Engine Oil Level → DLC: 8
  • For Clutch Switch → DLC: 8

# Step 8

Enter the start position:

Note: Input exactly the number that appears under the Start Position column.

  • For Engine Trip Fuel → START_POSITION: 1-4
  • For Engine Speed → START_POSITION: 4-5
  • For Service Distance → START_POSITION: 2-3
  • For Engine Oil Level → START_POSITION: 3
  • For Clutch Switch → START_POSITION: 4.7

# Step 9

Enter the length:

Note: This is the length of the parameter and the unit is either bits or bytes.

  • For Engine Trip Fuel → LENGTH: 4_BYTES
  • For Engine Speed → LENGTH: 2_BYTES
  • For Service Distance → LENGTH: 2_BYTES
  • For Engine Oil Level →LENGTH: 1_BYTE
  • For Clutch Switch → LENGTH: 2_BITS

# Step 10

Find the detailed description of the parameter and this section can be used to fill the group, multiplier, and offset of the parameter.

# Step 11

Enter the group:

Note: The group refers to whether the parameter uses states, has a percentage symbol, is part of a PGN that reports tire and axle locations, or is simply a numerical value.

  • For Engine Trip Fuel → GROUP: NUMBER_VALUE
  • For Engine Speed → GROUP: NUMBER_VALUE
  • For Service Distance → GROUP: NUMBER_VALUE
  • For Engine Oil Level → GROUP: PERCENT
  • For Clutch Switch → GROUP: SIGNAL

# Step 12

Enter the multiplier:

Note: This value refers to the first number found next to the resolution field. The value for multiplier is required for all parameters. SIGNALS (refers to states), EXTENDED_SIGNALS, and LOCATION_COMPONENT_1S must have a multiplier of 1.

  • For Engine Trip Fuel → MULTIPLIER: 0.5
  • For Engine Speed → MULTIPLIER: 0.125
  • For Service Distance → MULTIPLIER: 5
  • For Engine Oil Level → MULTIPLIER: 0.4
  • For Clutch Switch → MULTIPLIER: 1

# Step 13

Enter the offset:

Note: This key is not required and can be left omitted when the value is 0. IMPORTANT: IF THE OFFSET IS NEGATIVE, MAKE SURE TO PUT A SPACE BETWEEN THE : AND THE NEGATIVE VALUE

For Service Distance → OFFSET: -160635

# Step 14

Put all of the key value pairs together.

Note: Be sure to separate each parameter by a singular press of the enter key to create a new line for each.

For Engine Trip Fuel

PARAM_NAME: ENGINE TRIP FUEL, PGN: FEE9, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 1-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.5

For Engine Speed

PARAM_NAME: ENGINE SPEED, PGN: F004, TRANSMISSION_RATE: CONTINUOUS, PRIORITY: 3, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 4-5, GROUP: NUMBER_VALUE, MULTIPLIER: 0.125

For Service Distance

PARAM_NAME: SERVICE DISTANCE, PGN: FEC0, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 2-3, GROUP: NUMBER_VALUE, MULTIPLIER: 5, OFFSET: -160635

For Engine Oil Level

PARAM_NAME: ENGINE OIL LEVEL, PGN: FEEF, TRANSMISSION_RATE: 0.5S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 3, GROUP: PERCENT, MULTIPLIER: 0.4

For Clutch Switch

PARAM_NAME: CLUTCH SWITCH, PGN: FEF1, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 4.7, GROUP: SIGNAL, MULTIPLIER: 1

# Sample Configuration File

Filename: j1939_params - Download sample file

⚠️ Note that there's no extension on the filename

PARAM_NAME: FUEL LEVEL 1, PGN: FEFC, TRANSMISSION_RATE: 1S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 2, GROUP: PERCENT, MULTIPLIER: 0.4
PARAM_NAME: ENGINE SPEED, PGN: F004, TRANSMISSION_RATE: CONTINUOUS, PRIORITY: 3, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 4-5, GROUP: NUMBER_VALUE, MULTIPLIER: 0.125
PARAM_NAME: WHEEL-BASED VEHICLE SPEED, PGN: FEF1, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 2-3, GROUP: NUMBER_VALUE, MULTIPLIER: 0.00390625
PARAM_NAME: CLUTCH SWITCH, PGN: FEF1, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 4.7, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: PARKING BRAKE SWITCH, PGN: FEF1, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 1.3, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: BRAKE SWITCH, PGN: FEF1, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 4.5, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: ENGINE OIL LEVEL, PGN: FEEF, TRANSMISSION_RATE: 0.5S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 3, GROUP: PERCENT, MULTIPLIER: 0.4
PARAM_NAME: ENGINE OIL PRESSURE, PGN: FEEF, TRANSMISSION_RATE: 0.5S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 4, GROUP: NUMBER_VALUE, MULTIPLIER: 4
PARAM_NAME: ENGINE COOLANT PRESSURE, PGN: FEEF, TRANSMISSION_RATE: 0.5S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 7, GROUP: NUMBER_VALUE, MULTIPLIER: 2
PARAM_NAME: ENGINE COOLANT LEVEL, PGN: FEEF, TRANSMISSION_RATE: 0.5S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 8, GROUP: PERCENT, MULTIPLIER: 0.4
PARAM_NAME: BRAKE PEDAL POSITION, PGN: F001, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 2, GROUP: PERCENT, MULTIPLIER: 0.4
PARAM_NAME: RETARDER TORQUE MODE, PGN: F000, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 4_BITS, START_POSITION: 1.1, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: RETARDER ENABLE - BRAKE ASSIST SWITCH, PGN: F000, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 1.5, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: RETARDER ENABLE - SHIFT ASSIST SWITCH, PGN: F000, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 1.7, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: ENGINE TOTAL HOURS OF OPERATION, PGN: FEE5, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 1-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.05
PARAM_NAME: TRIP DISTACE, PGN: FEE0, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 1-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.125
PARAM_NAME: TOTAL VEHICLE DISTANCE, PGN: FEE0, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 5-8, GROUP: NUMBER_VALUE, MULTIPLIER: 0.125
PARAM_NAME: SERVICE DISTANCE, PGN: FEC0, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 2-3, GROUP: NUMBER_VALUE, MULTIPLIER: 5, OFFSET: -160635
PARAM_NAME: ENGINE TOTAL IDLE FUEL USED, PGN: FEDC, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 1-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.5
PARAM_NAME: ENGINE TOTAL IDLE HOURS, PGN: FEDC, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 5-8, GROUP: NUMBER_VALUE, MULTIPLIER: 0.05
PARAM_NAME: ENGINE TRIP FUEL, PGN: FEE9, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 1-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.5
PARAM_NAME: ENGINE TOTAL FUEL USED, PGN: FEE9, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 5-8, GROUP: NUMBER_VALUE, MULTIPLIER: 0.5
PARAM_NAME: POWERED VEHICLE WEIGHT, PGN: FE70, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: VARIABLE, LENGTH: 2_BYTES, START_POSITION: 1-2, GROUP: NUMBER_VALUE, MULTIPLIER: 10
PARAM_NAME: GROSS COMBINATION VEHICLE WEIGHT, PGN: FE70, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: VARIABLE, LENGTH: 2_BYTES, START_POSITION: 3-4, GROUP: NUMBER_VALUE, MULTIPLIER: 10
PARAM_NAME: AFTERTREATMENT 1 DIESEL PARTICULATE FILTER SOOT LOAD REGENERATION THRESHOLD, PGN: FD7B, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 7, GROUP: NUMBER_VALUE, MULTIPLIER: 0.0025
PARAM_NAME: DIESEL PARTICULATE FILTER 1 SOOT LOAD PERCENT, PGN: FD7B, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 1, GROUP: PERCENT, MULTIPLIER: 1
PARAM_NAME: ENGINE EXHAUST GAS RECIRCULATION 1 VALVE CONTROL, PGN: FDD5, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 5-6, GROUP: PERCENT, MULTIPLIER: 0.0025
PARAM_NAME: ENGINE VARIABLE GEOMETRY TURBOCHARGER 1 ACTUATOR POSITION, PGN: FDD5, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 8, GROUP: PERCENT, MULTIPLIER: 0.04
PARAM_NAME: ENGINE VARIABLE GEOMETRY TURBOCHARGER 1 CONTROL MODE, PGN: FDD5, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 7.3, GROUP: SIGNAL, MULTIPLIER: 1
PARAM_NAME: TOTAL ECU RUN TIME, PGN: FEB1, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 7, DLC: 8, LENGTH: 4_BYTES, START_POSITION: 5-8, GROUP: NUMBER_VALUE, MULTIPLIER: 0.05
PARAM_NAME: AXLE WEIGHT, PGN: FEEA, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 2-3, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 0.5
PARAM_NAME: TRAILER WEIGHT, PGN: FEEA, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 4-5, GROUP: NUMBER_VALUE, MULTIPLIER: 2
PARAM_NAME: CARGO WEIGHT, PGN: FEEA, TRANSMISSION_RATE: ON_REQUEST, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 6-7, GROUP: NUMBER_VALUE, MULTIPLIER: 2
PARAM_NAME: ENGINE FUEL RATE, PGN: FEF2, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 1-2, GROUP: NUMBER_VALUE, MULTIPLIER: 0.05
PARAM_NAME: ENGINE INSTANTANEOUS FUEL ECONOMY, PGN: FEF2, TRANSMISSION_RATE: 100MS, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 3-4, GROUP: NUMBER_VALUE, MULTIPLIER: 0.001953125
PARAM_NAME: TIRE PRESSURE, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 1_BYTE, START_POSITION: 2, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 4
PARAM_NAME: TIRE TEMPERATURE, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BYTES, START_POSITION: 3-4, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 0.03125, OFFSET:  -273

# ECU Parameters (j1939)

List parameters read by the ECU

$ sudo apx-ecu list_parameters
{"f003_1.1":1,"f003_1.3":0,"f003_1.5":1,"f003_2":0,"f003_3":0,"f003_7":26.4,"f003_8":0,"f004_1.1":14,"f004_1.5":0,"f004_2":0,"f004_3":0,"f004_4-5":0,"f001_3.1":0,"f001_3.3":0,"f001_4.7":0,"f001_6.1":1,"f001_6.5":0,"fcdc_5-6":99.78,"fcdc_7-8":0,"febf_1-2":0,"febf_3":0.81,"febf_4":0.81,"febf_5":0.81,"febf_6":0.81,"fedf_1":0,"fedf_2-3":1300,"fef1_1.3":1,"fef1_2-3":0,"fef1_6":99,"fef1_7.1":0,"fef1_7.6":0,"fef1_8.1":0,"fef1_8.3":0,"fef1_8.5":0,"fcfd_5-6":65,"f00e_5.1":1,"f00e_5.3":1,"f00e_5.5":1,"f00e_6.6":0,"fee0_1-4":289242.12,"fee0_5-8":289241.5,"fef0_4-5":700,"fef2_1-2":0,"fef2_3-4":0,"fef2_5-6":1.8,"fd92_1.1":0,"feca_1.3":0,"feca_1.5":0,"feca_1.7":0,"feca_5.1":0,"feca_6.1":0,"feca_6.8":0,"fec1_1-4":289167795,"fef7_5-6":12.45,"fefc_2":56.4,"fdc6_2.1":4,"fdc6_2.5":0,"fedb_3-4":51.72,"feef_4":0,"fee4_2.7":0,"fee4_5.1":0,"fee4_5.3":0,"fee4_5.5":0,"fee4_5.7":0,"fee4_6.7":1,"fec1_5-8":289242145,"fef6_2":0,"fef6_3":53,"fea4_3-4":31.28,"feee_1":62,"fdd5_7.3":0,"fdd5_7.5":1,"fdd5_8":23.6,"fe56_1":81.6,"fe56_2":16,"fe56_5.6":0,"fe56_7":0,"fedc_1-4":30482,"fedc_5-8":6484.7,"fef5_4-5":9.09,"fee5_1-4":13919.65,"fee5_5-8":109582000,"fee9_1-4":160535,"fee9_5-8":164860,"feb1_5-8":14068.65,"0_1.1":0,"0_2-3":8016.88,"f004_6":0,"f004_7.1":15,"f004_8":0,"e0ff_1":0,"febd_1":0,"fce7_1":3,"fce7_2":7,"fce7_3":4,"fce7_4":5,"fce7_5":5,"fce7_6":8,"fce7_7":8}

This JSON response is composed of the PGN & start position described earlier, and the value. For example: "fe56_1":81.6 corresponds to: AFTERTREATMENT 1 DIESEL EXHAUST FLUID TANK 1 LEVEL value of 81.6%

The following is a list of the most common parameters, also compatible with TAIP protocol, which means they can be sent to Pegasus. To integrate them with SyrusJS you can define fieldsets and signals using the param_name or id from the ECU directory in the SDK.

SyrusJS

Fieldsets

define fieldset pegasus fields=$ecu
define fieldset id_mqtt fields=accel_pedal:$ecu.f003_2,...
define fieldset param_name_mqtt fields=pedal:$ecu.accel_pedal_position,...
define fieldset mqtt_example_all fields=$ecu

Signals

# using id
define signal pedal_full_press_id $ecu.f003_2 >= 99

# using param_name
define signal pedal_full_press_param_name $ecu.accel_pedal_position >= 99

For a full list of all SPNs and their start positions you can view the following table: 🌎 SPN & Start Position List

ID                   syruslang param_name UNITS
f001_1.5 abs_active Count (0 to 3)
fee4_3.1 ac_high_pressure_fan_switch Count (0 to 3)
f001_4.7 accel_enable_switch Count (0 to 3)
f003_2 accel_pedal_position Percentage (%)
f004_3 actual_engine_torque Percentage (%)
fd3e_1-2 aftmt_catalyst_intake_gas_temp Temperature (°C)
fd3e_4-5 aftmt_catalyst_outlet_gas_temp Temperature (°C)
fe56_1 aftmt_def_level Percentage (%)
fe56_5.6 aftmt_def_low_level Count (0 to 3)
fe56_2 aftmt_def_temp Temperature (°C)
fd20_1-2 aftmt_doc_intake_gas_temp Temperature (°C)
fdb2_5-6 aftmt_dpf_diff_pressure Pressure (kPa)
fdb4_3-4 aftmt_dpf_intake_gas_temp Temperature (°C)
fdb3_3-4 aftmt_dpf_outlet_gas_temp Temperature (°C)
fd7b_7 aftmt_dpf_soot_load_threshold Percentage (%)
f00e_1-2 aftmt_intake_nox Parts per million (ppm)
f00f_1-2 aftmt_outlet_nox Parts per million (ppm)
fd9f_8.5 aftmt_purge_air_actuator Count (0 to 3)
feca_1.3 amber_warning_lamp Count (0 to 3)
fef5_4-5 ambient_air_temp Temperature (°C)
feea_1 axle_location Count (0 to 255)
fef5_1 barometric_pressure Count (kpa)
fef7_5-6 battery_power Electrical voltage (V)
f001_2 brake_pedal Percentage (%)
fef1_4.5 brake_switch Count (0 to 3)
fef1_4.7 clutch_switch Count (0 to 3)
feef_8 coolant_level Percentage (%)
feef_7 coolant_pressure Pressure (kPa)
feee_1 coolant_temp Temperature (°C)
feef_5-6 crankcase_pressure Pressure (kPa)
fef1_6 cruise_control_set_speed Velocity, linear (km/h)
fef1_7.6 cruise_control_states Count (0 to 7)
f004_2 demand_engine_torque Percentage (%)
fec0_2-3 distance_service Distance, km (km)
fee0_5-8 distance_total Distance, km (km)
fec1_1-4 distance_total_high_res Distance, km (km)
fee0_1-4 distance_trip Distance, km (km)
fec1_5-8 distance_trip_high_res Distance, km (km)
fd7c_2.3 dpf_active_regen_status Count (0 to 3)
fd8c_1-2 dpf_intake_pressure Pressure (kPa)
fd7b_1 dpf_soot_load Percentage (%)
f004_8 engine_demand_percent_torque Percentage (%)
febd_1 engine_fan_1_estimated_percent_speed Percentage (%)
f003_3 engine_load Percentage (%)
fee4_5.3 engine_protection_system_has_approaching_shutdown Count (0 to 3)
fee4_5.1 engine_protection_system_has_shutdown_engine Count (0 to 3)
f004_1.1 engine_torque_mode Count (0 to 15)
fee4_4.1 engine_wait_to_start_lamp Count (0 to 3)
fedf_2-3 engines_desired_operating_speed Velocity, rotational (rpm)
fedf_4 engines_desired_operating_speed_asymmetry_adjustment count (0 to 250)
fedf_5 estimated_engine_parasitic_losses Percentage (%)
fe92_2-3 exhaust_gas_pressure Pressure (kPa)
fea4_5-6 exhaust_gas_recirculation_diff_pressure Presure (kPa)
f00a_1-2 exhaust_gas_recirculation_mass_flow_rate Flow rate, gaseous (kg/h)
fea4_7-8 exhaust_gas_recirculation_temp Temperature (°C)
fdd5_5-6 exhaust_gas_recirculation_valve_control Percentage (%)
fd94_1-2 exhaust_gas_recirculation_valve_position Percentage (%)
fef6_6-7 exhaust_gas_temp Temperature (°C)
feca_5.1 failure_mode_identifier Count (0 to 31)
febd_2.1 fan_drive_state Count (0 to 15)
fedc_1-4 fuel_idle Fuel used, liquid (L)
fef2_3-4 fuel_ins_economy Economy, liquid (km/L)
fefc_2 fuel_level Percentage (%)
fef2_1-2 fuel_rate Flow rate, liquid (L/h)
feee_2 fuel_temp Temperature (°C)
fee9_5-8 fuel_total Fuel used, liquid (L)
fee9_1-4 fuel_trip Fuel used, liquid (L)
fedc_5-8 hours_idle Time, hr (hr)
fee5_1-4 hours_total Time, hr (hr)
fe68_3 hydraulic_oil_level Percentage (%)
f008_1-2 hydraulic_pressure Pressure (kPa)
fe68_1 hydraulic_temp Temperature (°C)
f00a_3-4 intake_air_mass_flow_rate Flow rate, gaseous (kg/h)
fef6_2 intake_manif_pressure Pressure (kPa)
fef6_3 intake_manif_temp Temperature (°C)
fef7_7-8 key_switch_battery_potential Electrical voltage (V)
feca_1.7 malfunction_indicator_lamp Count (0 to 3)
fedf_1 nominal_friction_torque Percentage (%)
feca_6.1 occurrence_count Count (0 to 127)
feef_3 oil_level Percentage (%)
feef_4 oil_pressure Pressure (kPa)
feee_3-4 oil_temp Temperature (°C)
fef1_1.3 parking_brake_switch Count (0 to 3)
feca_1.1 protect_lamp Count (0 to 3)
fef0_6.1 pto_enable_switch Count (0 to 3)
fef0_6.3 pto_speed_control_switch Count (0 to 3)
fef1_7.1 pto_state Count (0 to 31)
feca_1.5 red_stop_lamp Count (0 to 3)
fee3_20-21 reference_torque Torque (Nm)
f003_4 remote_accel_pedal_position Percentage (%)
f000_1.5 retarder_brake_assist Count (0 to 3)
f004_4-5 rpm Velocity, rotational (rpm)
e000_4.7 seat_belt Count (0 to 3)
f004_6 source_address_controling_device Count (0 to 253)
fef1_2-3 speed Velocity, linear (km/h)
feca_6.8 spn_conversion_method Count (0 to 1)
fef4_5.3 tires_air_leak_status string (count)
fef4_2 tires_pressure string (kpa)
fef4_8.6 tires_pressure_state string (count)
fef4_1 tires_provisioning string (count)
fef4_5.1 tires_sensor_enable_status string (count)
fef4_3-4 tires_temperature string (°C)
fef4_5.7 tires_temperature_state string (count)
fef4_8.1 tires_trailer_flag string (count)
feb1_5-8 total_ecu_run_time Time, hr (hr)
fef8_2 trans_oil_level Percentage (%)
fef8_4 trans_oil_pressure Pressure (kPa)
fef8_5-6 trans_oil_temp Temperature (°C)
fe99_1-2 turbo_compressor_intake_pressure Pressure (kPa)
fe9a_1-2 turbo_compressor_intake_temp Temperature (°C)
fedd_2-3 turbo_speed Velocity, rotational (rpm)
fda3_3 vgt_actuator Percentage (%)
fdd5_8 vgt_actuator_position Percentage (%)
fdd5_7.3 vgt_control_mode Count (0 to 3)
feff_1.1 water_in_fuel Count (0 to 3)
feea_2-3 weight_axle Mass, cargo (kg)
feea_6-7 weight_cargo Mass, cargo (kg)
fe70_3-4 weight_gross_combination Mass, cargo (kg)
fe70_1-2 weight_powered_vehicle Mass, cargo (kg)
feea_4-5 weight_trailer Mass, cargo (kg)

# Units

Unit description Unit Range
Acceleration m/s -15.687 to +15.687 m/s
Angle/Direction deg -210 to 211 deg
Brake applications appl 0 to 4,227,858,431 appl
Calendar, days days 0 to 62.5 days
Calendar, months months 0 to 250 months
Calendar, weeks weeks -125 to 125 weeks
Calendar, years years 1985 to 2235 years
Capacity, Battery mAhr 0 to 64255 mAhr
Count count 0 to 4,294,967,295 counts
Distance, m m 0 to 526,385,151,900 m
Distance, km km 0 to 526,385,151.9 km
Economy, gaseous km/kg 0 to 125.5 km/kg
Economy, liquid km/L 0 to 125.5 km/L
Electrical current A -125 to 125 A
Electrical voltage V 0 to 64,255 V
Energy kWh 0 to 4,211,081,215 kWh
Flow rate, gaseous kg/h 0 to 3212.75 kg/h
Flow rate, liquid L/h 0 to 3,212.75 L/h
Flow rate, volumetric m^3/h 0 to 6425.5 m^3/h
Force N -100,000 N to 150,000 N
Frequency Hz 0 to 501.9921875 Hz
Fuel Used,gaseous kg 0 to 2,105,540,607.5 kg
Fuel Used,liquid L 0 to 2,105,540,607.5 L
Governor gain %/rpm 0 to 50.2 %/rpm
Inertia kg-m^2 0 to 257.02 kg-m^2
Intensity, optical mW/cm^2 0 to 100 mW/cm^2
Kinematic viscosity mm^2/s 0 to 250 mm^2/s
Mass,cargo kg 0 to 642,550 kg
Parts per million ppm -200 to 3012.75 ppm
Percent,position/level % -125 to 250 %
Power, apparent VA -2,000,000,000 to +2,211,081,215 VA
Power, reactive VAr -2,000,000,000 to +2,211,081,215 VAr
Power, real W -2,000,000,000 to +2,211,081,215 W
Pressure kPa 0 to 321,275 kPa
Pressure rate change Pa/s 0 to 6425.5 Pa/s
Revolutions r 0 to 4,211,081,215,000 r
Road Curvature 1/km -250 to 251.992 1/km
Specific Resistance Mohm*m 0 to 25 Mohm*m
Temperature C -273 to 1735 C
Time, ms ms 0 to 64,255 ms
Time, s s 0 to 4,211,081,215 s
Time, min min -125 to 250 min
Time, hr hr -32,127 to 210,554,060.75 hr
Torque Nm -32,000 to 128,510 Nm
Velocity, linear m/s 0 to 64.255 m/s
Velocity, linear km/h -250 to 251.992 km/h
Velocity, rotational rpm 0 to 257,020 rpm
Velocity, angular rad/s -3.92 to 3.92 rad/s
Volume L 0 to 2,105,540,607.5 L
Last Updated: 3/18/2021, 2:32:31 PM