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
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 Color | Signal | Description | |
|---|---|---|---|
| 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. |
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 pressureproCommand-line utility
| Command | Result |
|---|---|
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 --unit | Print the configured unit, or 0 if no value is set. -u is also accepted. |
apx-serial-pp state | Print the latest state JSON. status is an alias. |
apx-serial-pp version | Print the utility version. |
apx-serial-pp help | Print command help. |
For example:
apx-serial-pp get --unit
apx-serial-pp stateIf 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:
- Send Get ID and confirm the response identifies a TPMS unit.
- Send Get Version for the configured unit and log the returned version.
- Request Get Sensor Data using command
0x83and subcommand0x13.
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:
| Field | Meaning |
|---|---|
system_epoch | Snapshot creation time as Unix epoch seconds. |
last_contact | Minutes since the gateway last received contact from any tire sensor. |
connected | Whether the driver has recently received valid communication from the gateway. |
wheels | Number of populated tire locations. |
axles | Highest axle number derived from the tire location codes. |
sensor_id | Tire sensor identifier. |
location | Raw PressurePro tire-position code; the driver does not translate this into a human-readable position. |
temperature | Tire temperature in degrees Celsius. The raw invalid sentinel -128 is preserved. |
psi | Tire pressure in PSI; -1 means the gateway reported an invalid value. |
reference_psi | Stored reference pressure in PSI; -1 means invalid. |
rf_quality | RF quality value with the new_air marker removed. |
new_air | Whether the gateway marked the reading as new air since the previous upload. |
timeout | Minutes since the tire sensor last communicated. |
alarm_flags | Raw alarm bitmask; see below. |
The alarm_flags bit meanings are:
| Bit | Mask | Meaning |
|---|---|---|
| D0 | 0x01 | Missing sensor |
| D1 | 0x02 | Missing sensor (additional missing indication) |
| D2 | 0x04 | Low battery |
| D3 | 0x08 | Over temperature |
| D4 | 0x10 | Under pressure |
| D5 | 0x20 | Extreme under pressure |
| D6 | 0x40 | Over pressure |
| D7 | 0x80 | Delta pressure |
To test a flag, apply its mask to alarm_flags; for example, under-pressure is set when alarm_flags & 0x10 is nonzero.
Troubleshooting
| Symptom | Check |
|---|---|
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 false | Check 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 invalid | Check 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 effect | Run apx-serial-pp set --unit=<value> so the utility publishes the configuration-reload notification. |
Updated 15 days ago

