Poll a heavy-duty vehicle's total engine hours over J1939 using an on-request PGN instead of waiting for a broadcast
domain: csselectronics.com · 5 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Build a J1939 request message using PGN 59904, the only J1939 PGN with a 3-byte payload
Set the 3 data bytes to the requested PGN in Intel byte order — e.g. 0xE5FE00 to request PGN 65253 (0xFEE5, HOURS)
Choose destination address 0xFF for a global request (all ECUs respond) or a specific ECU's source address for a targeted request
Use a source address in the upper range (0xFA-0xFF) for the requesting tool per industry convention, since J1939 does not mandate a specific value
Parse the ECU's response frame for SPN 'Engine Total Hours of Operation' using the responding PGN's normal decode rules
Known gotchas
Some J1939 loggers/scan tools are required to stay contactless (listen-only) for warranty-compliance reasons and physically cannot transmit request frames — confirm the interface supports active transmission first
A global request (0xFF) can trigger multiple ECUs to respond with identical or overlapping data, bloating bus load; switch to a specific-address request once the responding ECU's source address is known
The request payload must be byte-order-reversed (Intel/little-endian) the same way normal SPN data is — sending the PGN in big-endian order is a common decode-then-encode mistake
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?