TPMS

Tire Pressure Monitoring System

ECU TPMS

TPMS or Tire Pressure Monitoring Systems can be connected to the Syrus 4 in order to monitor tire pressures and alerts.

Doran's 360 System and Continental's ContiPressureCheck both make use of standard J1939 PGNs so all we need to do is install the sensor on the vehicle, and connect the Primary or Secondary CAN interfaces from the Syrus to the CAN Bus to start reading data.

Installation

Syrus 4 Datasheet with Pinout

Doran 360

Manufacturer's installation guide


Note that installing a terminating resistor may be needed depending on what accessories you connect to the Syrus over the CAN bus. For more informationclick here .

Continental CPC

Manufacturer's installation guide


Guide: Doran 360 System

For this example we'll connect the Doran 360 System to the Syrus. After following the manufacturer's installation guide above, connect the Syrus to the CAN bus via the secondary CAN interface:

ECU Wiring Pinout (found in 14-pin molex)

Syrus Wire ColorSignalDescription
CyanCAN2_HSecondary 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.
WhiteLight greenCAN2_LSecondary 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.

Configuration

The TPMS configuration can be achieved by adding the FEF4 PGN parameters to the ecumonitor.conf file

START_SECTION: CONFIGURATION
PRIMARY_CAN: J1939_250KHZ
END_SECTION

START_SECTION: J1939
PARAM_NAME: TIRE1 - EXTENDED TIRE PRESSURE SUPPORT, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 5.7, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
PARAM_NAME: TIRE1 - TIRE LOCATION, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 8_BITS, START_POSITION: 1, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
PARAM_NAME: TIRE1 - TIRE PRESSURE THRESHOLD DETECTION, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 3_BITS, START_POSITION: 8.6, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
PARAM_NAME: TIRE1 - 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: TIRE1 - TIRE SENSOR ENABLE STATUS, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 5.1, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
PARAM_NAME: TIRE1 - TIRE STATUS, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 5.3, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
PARAM_NAME: TIRE1 - 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
PARAM_NAME: TIRE1 - TRAILER FLAG, PGN: FEF4, TRANSMISSION_RATE: 10S, PRIORITY: 6, DLC: 8, LENGTH: 2_BITS, START_POSITION: 8.1, GROUP: LOCATION_COMPONENT_1, MULTIPLIER: 1
END_SECTION

Once the Syrus has the configuration file, and you install the TPMS sensor on the vehicle you can trigger messages using Syruslang - sample snippet.

You can also use the apx-ecu tool to view the parameters.

# List ECU parameters, indicating tpms data from 6 tires
$ sudo apx-ecu list_parameters
{
fef4_8.1: "0,2,1.00;0,1,1.00;1,3,1.00;1,2,1.00;1,1,1.00;1,0,1.00",
fef4_8.6: "0,2,0.00;0,1,0.00;1,3,0.00;1,2,0.00;1,1,0.00;1,0,0.00",
fef4_2: "0,2,860.00;0,1,965.00;1,3,825.00;1,1,890.00;1,0,825.00;1,2,885.00",
fef4_5.1: "0,3,1.00;0,0,1.00",
fef4_3-4: "0,2,30.00;0,1,36.00;1,3,34.00;1,1,34.00;1,0,36.00;1,2,30.00",
fef4_1: "0,2,2.00;0,1,1.00;1,3,19.00;1,2,18.00;1,1,17.00;1,0,16.00",
fef4_5.3: "0,2,3.00;0,1,3.00;1,3,3.00;1,2,3.00;1,1,3.00;1,0,3.00",
fef4_5.7: "0,2,0.00;0,1,0.00;1,3,0.00;1,2,0.00;1,1,0.00;1,0,0.00"
}

SERIAL TPMS

PressurePro is a Tire Pressure Monitoring Systems (TPMS) designed to provide real-time tire performance data for safety and efficiency. The system consists of sealed sensors that screw directly onto tire valve stems and a display monitor.

The syrus PressurePro driver communicates with a PressurePro TPMS gateway over the FlexIO protocol. The gateway receives data from the tire sensors; syrus reads that data and exposes the latest decoded snapshot through Redis.

The implementation uses the serial port at 9600 baud, 8 data bits, no parity, 1 stop bit (8N1). Connect the gateway's RS232 interface to the user serial port.

Enable the driver

Set the serial manager mode:

apx-serial mode pressurepro

Command-line utility

CommandResult
apx-serial-pp set --unit=<0-255>Store the unit and notify the driver to reload configuration. -u and --unit <value> are also accepted.
apx-serial-pp get --unitPrint the configured unit, or 0 if no value is set. -u is also accepted.
apx-serial-pp statePrint the latest state JSON. status is an alias.
apx-serial-pp versionPrint the utility version.
apx-serial-pp helpPrint command help.

For example:

apx-serial-pp get --unit
apx-serial-pp state

If no state has been written to Redis yet, state prints []. Invalid command options return exit status 95.

Driver behavior

On startup, the driver reads the configured unit and performs this sequence:

  1. Send Get ID and confirm the response identifies a TPMS unit.
  2. Send Get Version for the configured unit and log the returned version.
  3. Request Get Sensor Data using command 0x83 and subcommand 0x13.

The driver requests data when it has not received automatic sensor data recently. The fallback polling interval is 10 seconds; incoming automatic sensor-data frames (response 0x93) are also accepted and refresh that timer. The driver retries unanswered commands up to three times. If no valid frame is received for 30 seconds, it marks the link disconnected and republishes the last cached snapshot with connected: false.

FlexIO frames use STX/ETX delimiters, a little-endian length, and an 8-bit additive checksum. The driver validates frames before processing them and ignores malformed or checksum-invalid frames.

Redis state

The latest snapshot is stored at serial_tpms_state and published on serial/notification/tpms/state. The state utility reads the stored value.

Example:

{
  "system_epoch": 1780000000,
  "last_contact": 2,
  "connected": true,
  "wheels": 1,
  "axles": 1,
  "tires": [
    {
      "sensor_id": 66051,
      "location": 17,
      "temperature": 32,
      "psi": 95,
      "reference_psi": 100,
      "rf_quality": 72,
      "new_air": false,
      "timeout": 1,
      "alarm_flags": 0
    }
  ]
}

The example is illustrative; the driver includes one tires entry per populated location. Fields are:

FieldMeaning
system_epochSnapshot creation time as Unix epoch seconds.
last_contactMinutes since the gateway last received contact from any tire sensor.
connectedWhether the driver has recently received valid communication from the gateway.
wheelsNumber of populated tire locations.
axlesHighest axle number derived from the tire location codes.
sensor_idTire sensor identifier.
locationRaw PressurePro tire-position code; the driver does not translate this into a human-readable position.
temperatureTire temperature in degrees Celsius. The raw invalid sentinel -128 is preserved.
psiTire pressure in PSI; -1 means the gateway reported an invalid value.
reference_psiStored reference pressure in PSI; -1 means invalid.
rf_qualityRF quality value with the new_air marker removed.
new_airWhether the gateway marked the reading as new air since the previous upload.
timeoutMinutes since the tire sensor last communicated.
alarm_flagsRaw alarm bitmask; see below.

The alarm_flags bit meanings are:

BitMaskMeaning
D00x01Missing sensor
D10x02Missing sensor (additional missing indication)
D20x04Low battery
D30x08Over temperature
D40x10Under pressure
D50x20Extreme under pressure
D60x40Over pressure
D70x80Delta pressure

To test a flag, apply its mask to alarm_flags; for example, under-pressure is set when alarm_flags & 0x10 is nonzero.

Troubleshooting

SymptomCheck
state prints []Confirm the manager is running in pressurepro mode, the gateway is powered and wired correctly, and the configured serial port is connected to its RS232 interface.
connected is falseCheck RS232 wiring and 9600 8N1 settings, then verify the unit number with apx-serial-pp get --unit. The driver marks the link disconnected after 30 seconds without a valid frame.
Tire list is empty or tire values are invalidCheck sensor pairing and gateway reception. Empty locations are omitted; invalid pressure/reference and temperature sentinels are passed through as documented above.
Unit change does not take effectRun apx-serial-pp set --unit=<value> so the utility publishes the configuration-reload notification.

Did this page help you?