Knowledge Base ยท Vehicle Sensor Networks

Bus Sensor Networks

What a diesel, CNG, hybrid or electric bus measures, which on-board networks carry it, how it behaves over a service day, how it fails, and how to reproduce all of that in synthetic telemetry. Tags: [S] backed by a cited source, [K] domain knowledge or engineering estimate, [E] bridge-layer estimate, inference = derived by the author from the research notes.

Prepared 12 Oct 2026 Updated 13 Oct 2026 Feeds: Sense simulator data generator

1 Overview and operating context

A bus carries two overlapping sensor families. The first is the powertrain and chassis data shared with heavy trucks, broadcast on SAE J1939 CAN at 250 kbit/s (engine, transmission, brakes, tyres, aftertreatment). The second is passenger-service data specific to buses: per-door open state, automatic passenger counting (APC), kneeling and ramp, stop request, HVAC, GNSS for schedule adherence and, on electric buses, the battery management system (BMS) with a 400-800 V high-voltage pack.

Powertrain variants covered: diesel, CNG, hybrid and battery-electric; service types covered: urban transit (stop every 300-500 m) and intercity (stops every 20-100 km). A telematics gateway reads the buses through a read-only FMS (Fleet Management System) interface (Bus FMS 2007; FMS 3.0 of 2012 harmonised bus and truck) and uploads over cellular. Availability of individual FMS signals varies by vehicle model [S].

Fleet-scale framing from the bridge research [E]: a city bus operating 8-16 h per day produces about 2-10 records per second at the gateway, uploaded as one publish per 10-60 s, roughly 5-40 MB per day as JSON or 1-8 MB per day as binary or compressed payloads, or about 150-1000 MB per month.

2 Sensor inventory

Period values are bus broadcast periods ([K]) unless noted. Telematics export cadence is described in section 7. "Source bus" is the network on which the value normally appears.

Table 2.1 Powertrain, chassis and aftertreatment signals (J1939, shared with trucks)
SignalUnitTypical rangeSample / report rateSource bus
Engine speed (PGN 61444, SPN 190)rpmidle 600-800; cruise 1100-1500; max 2100-250010-20 ms; resolution 0.125 rpm [S]J1939 CAN 250 kbit/s
Actual engine torque (SPN 513)%0-10010-20 msJ1939
Accelerator pedal position (PGN 61443, SPN 91)%0-10050 msJ1939
Engine load (SPN 92)%0-10050 msJ1939
Wheel-based vehicle speed (PGN 65265, SPN 84)km/hurban bus 0-70100 ms; res 1/256 km/hJ1939
Brake / clutch / cruise switches (SPN 597 / 598 / 595)boolon / off100 msJ1939
Engine coolant temperature (SPN 110)degC80-95 normal; alarm above 105-110; offset -401 s; PGN 65262 per J1939-71 (a Garmin list shows 65263), verify [S]J1939
Engine oil temperature / oil pressure (SPN 175 / 100)degC / kPa90-120 / 200-500 (idle 100-200)1 sJ1939
Fuel temperature (SPN 174)degC20-601 sJ1939
Engine fuel rate (PGN 65266, SPN 183)L/hidle 1.5-4; bus urban 15-45100 ms; res 0.05 L/h [S]J1939
Instant fuel economy (SPN 184)km/L0-125100 msJ1939
Fuel level 1 (PGN 65276, SPN 96)%0-100; slosh noise +-2-5% while moving1 s; filter 10-60 sJ1939
Total fuel used (PGN 65257, SPN 250)Lmonotonic1 sJ1939
Total engine hours (PGN 65253, SPN 247)hmonotonic1 sJ1939
High-resolution vehicle distance (PGN 65217, SPN 917)mmonotonic1 sJ1939
Boost pressure / intake temperature (PGN 65270, SPN 102 / 105)kPa / degC100-250 / 30-70500 msJ1939
Exhaust gas temperature (SPN 173)degC200-600; DPF regeneration 550-650500 msJ1939
Battery potential, 24 V system (PGN 65271, SPN 168)V24-28.8 running1 sJ1939
Ambient temperature / barometric pressure (PGN 65269, SPN 171 / 108)degC / kPa-30..45 / 80-1051 sJ1939
DEF tank level (PGN 65110, SPN 3517)%0-100; warn below 15%, derate below 5%1 s [S]J1939
DEF tank volume / temperature (SPN 1761 / 3031)L / degC0-40 L; DEF freezes at -11 degC1 s [S]J1939
DPF soot load / differential pressure (SPN 3719 / 3251)% / kPa0-100 / 0-30; regeneration near 80% soot1 sJ1939
Tyre pressure (PGN 65268, SPN 241)kPa750-900 coldon change / 10 s; res 4 kPa/bit [S]J1939 (or sensor RF gateway)
Tyre temperature (SPN 242)degC20-90; alarm above 90-100on change / 10 s [S]J1939
Tyre location index (SPN 929); leak rate (SPN 1699)index; Pa/s- ; 0-65on change [S] / [K]J1939
Brake pedal position (PGN 61441, SPN 521)%0-100100 msJ1939
ABS active / ASR (SPN 563 / 575)boolon / off100 msJ1939
Brake air pressure (PGN 65274, SPN 116 / 117)kPa700-1000; warn below 5501 sJ1939
Brake lining remaining%100 to 0 over 40-80k km on an urban bus1-60 sOEM / EBS (no standard SPN)
Transmission gear / oil temperature (PGN 61445 / 65272, SPN 523 / 177)gear / degC1-12 / 60-110100 ms / 1 sJ1939
Active DTC (DM1, PGN 65226)SPN + FMI + OC-1 s while active; TP.BAM if more than one DTCJ1939
Vehicle position (PGN 65267, SPN 584 / 585)deg-1 s; usually from telematics GNSSJ1939 or gateway GNSS
Table 2.2 Bus-specific passenger and service signals
SignalUnitTypical rangeSample / report rateSource bus
GNSS lat, lon, speed, heading, HDOP, satellitesdeg, km/hHDOP 0.7-2 open sky; 3-10 urban canyon; 6-18 satellites1 Hz fix; report 5-30 s and at stopsGateway GNSS receiver
Door open, per doorbooldwell 10-40 sevent plus 1 sDigital input / body CAN
APC boardings and alightings per doorcount0-30 each per stop; load 0-100 (articulated 150+)per stopEthernet / PoE camera or sensor to gateway [S]
Occupancypersons0 to about 2x seatsper stopDerived from APC (running sum)
Kneeling, ramp, stop requestbool-eventBody CAN / LIN [K]
HVAC power / cabin temperaturekW / degC5-20 kW (heating up to 25-30) / 20-2410-60 sBody or powertrain CAN
Air pressure circuitskPa700-10001 sJ1939
Retarder / regeneration torque%-100 msJ1939
Fire detection (engine bay), CCTV, validators--eventDigital input, Ethernet, RS-232/485
Table 2.3 Electric bus battery and traction signals (HV 400-800 V)
SignalUnitTypical rangeSample / report rateSource bus
Pack voltageVNMC 540-650; LFP 500-650 nominal; more than 180 series cells [S]CAN 100 ms-1 s; upload 10 s [S Chengdu] to 60 s [S Ruter]CAN 500 kbit/s or J1939
Pack currentA-250 (regen) to +400 (traction); depot charge 150-450sameCAN; sign convention varies
State of charge (SOC)%operating 95 to 20 [S]sameCAN
State of health (SOH)%100 to 80 over 6-10 years, about 2-3%/yrdailyCAN
Cell voltage max / minVNMC 3.0-4.2; LFP 2.5-3.65; spread 10-60 mV healthy1 s [S: min and max recommended]CAN
Cell temperature max / min / avgdegC15-35 normal; alarm above 45-55; no charging below 0-51-10 s [S: redundant sensors]CAN
Battery coolant in / outdegC20-401-10 sCAN
Insulation resistanceohm/Vabove 500; fault below 1001-10 sCAN
Charge / discharge power limitkW150-300; derates when cold and SOC below 10%100 msCAN
Motor speed / torque / temperaturerpm, Nm, degC0-2500; 0-1500; to 15010-100 msCAN
Energy consumptionkWh/km12 m: 0.9-1.8 (Ruter example 1.52 [S]); winter +30-60%; articulated 1.6-2.5; loaded +45% vs empty [S thesis]derivedderived from pack power
Charger powerkWdepot 50-150; opportunity / pantograph 300-600; taper above about 80% SOC1 sCharger link
Regeneration share% of traction energy15-30% urbanderivedderived

3 On-vehicle networks and protocols

Table 3.1 Buses and protocols found on a bus
Bus / protocolBitrateUse on a busNotes
CAN 2.0B (ISO 11898)250 kbit/s (J1939, FMS); 500 kbit/s (OBD-II, e-bus powertrain and BMS); 125 kbit/s body; up to 1 Mbit/sEngine, transmission, brakes, BMS[S] trackers support 50/100/125/250/500/1000 kbps; FMS 250/500
SAE J1939250 kbit/sHeavy-duty application layer29-bit ID, 8-byte frames, transport protocol (BAM or RTS/CTS) above 8 bytes; PGN 0-65535; 3-bit priority, 8-bit source address
OBD-II / ISO 15765-4 (UDS ISO 14229)500 (or 250) kbit/s CANDiagnostics and DTCPolled request and response, not broadcast
FMS standard (Bus FMS 2007; FMS 3.0 2012)250 kbit/sRead-only gateway for telematics[S] speed, fuel level, total fuel, vehicle weight, axle weight, tachograph data; availability varies by model
J1708 / J15879.6 kbit/sLegacy pre-2010 vehicles[K]; unlikely on a modern bus (inference)
LIN19.2 kbit/sDoors, mirrors, simple sensors[K]; master schedule slots 5-20 ms, bridged via a LIN-CAN node [E]
Ethernet 100BASE-T1 / PoE100 Mbit/sAPC cameras, CCTV, infotainment[S] PoE APC
Modbus RTU/TCP, RS-485 / RS-2329.6-115.2 kbit/sTicketing, destination signs, validatorsModbus RTU polls 100 ms-1 s per register block, CRC16, timeout 100-500 ms, 3-10% retries on noisy power [E]
Tachograph (EU)CAN via FMSDriving and rest state[S] tachograph CAN data may stop with ignition off

Bridge layer between the bus and the cloud

Table 3.2 Bridge facts relevant to buses
TopicFactTag
CAN classic frame8 B payload, about 130 bits with stuffing; at 250 kbps about 0.5 ms wire time, 1.3-1.6 ms effective[E]
J1939 TP.CM_BAMUp to 1785 B (255 packets x 7 B); PGN 0xEC00 (CM) / 0xEB00 (DT); inter-packet gap 50-200 ms, 50 ms typical; no retry, so one lost frame drops the whole message[S-partial] numbers [E]
J1939 TP RTS/CTSRTS, CTS(n), DT x n, EndOfMsgACK; timers T1 750 ms, T2 1250 ms, T3 1250 ms, T4 1050 ms[E]
Typical PGNsEEC1 (61444) 20 ms; CCVS (65265) 100 ms; ET1 (65262) 1 s; DM1 (65226) 1 s while active (BAM if more than one DTC); VIN (65260) multi-frame on request[E]
Telematics gateway classCAN-to-MQTT/TCP box (Teltonika FMC/FMB, CalAmp, Geotab GO, Samsara, Webfleet, Digital Matter): 1-2 CAN, J1939/OBD, GNSS, accelerometer; 4G Cat-1/Cat-4 or LTE-M; records every 1-10 s, batched 30-300 s[E]
Binary AVL recordAbout 40-120 B per record, up to 255 records per packet[E]
4G LTE linkRTT 30-60 ms (p95 150), loss 0.1-1%, handover blips 50-500 ms, weak-cell stalls 2-10 s[E]
Urban bus coverage99%+ coverage; dead spots 5-30 s at depots and underpasses; handover glitch every 1-5 km; tunnels 30 s-10 min full loss with GNSS also lost[E]
Wi-Fi offloadDepot Wi-Fi, 5-30 ms RTT, used for backfill, OTA and high-rate logs; association 1-5 s[E]
TPMS / BLETPMS is one-way 315/433 MHz; assume 60-300 s parked, 3-30 s moving or on pressure change; BLE gateway scan misses 5-20% of adverts[E]
MQTT QoSQoS0 loses data on link drop; QoS1 default for telemetry, duplicates 0.1-2% on lossy cell and 5-15% of in-flight messages around reconnects; QoS2 for alarms, rare on cellular. Resend needs Clean Start=0. Keepalive at most 60 s on cellular[S] semantics, rates [E]
Cloud dedupe key(device_id, boot_id, seq); a sequence reset on reboot is a classic false duplicate or gap source[S]

Telematics reporting from the research notes: 1-30 s while moving, 1-15 min heartbeat while parked, store-and-forward on cellular loss [K].

4 Duty cycles and operating profiles

Table 4.1 Service-day parameters by bus type
ParameterUrban transitIntercity
Pull-out / pull-in04:30-06:30 / 00:00-01:00same range (inference)
Peaks07-09 and 16-19-
Block length8-16 h8-16 h
Stop spacing / dwell300-500 m / 15-40 severy 20-100 km
Commercial speed12-22 km/h60-85 km/h average, limit 100 km/h
Daily distance150-250 km (e-bus examples 200-250 km)300-500 km
Time at speed 0 while engine on40-60% (lights, stops)not stated; expect much lower (inference)
Driver breaks / layover10-30 min / 3-15 min at terminus-
  • Diesel: idle 600-800 rpm, 1.5-3 L/h, 20-35% of engine hours; tank 250-350 L refuelled nightly; DEF 20-40 L.
  • Electric: SOC 95% at 05:00 falling to 20-30% by evening over 200-250 km; optional midday opportunity charge; overnight depot charge 3-6 h at 50-150 kW; battery pre-heat at depot; winter HVAC drains SOC faster.
  • Weekend service is 60-70% of weekday. Passenger load follows the peaks, spikes at hubs, and is zero at the end of line.
  • GNSS dropouts occur in tunnels, depots and urban canyons.
  • Power: key-off sleep with CAN or accelerometer wake; cranking brownout below 6 V reboots 0.1-1 per day on weak-battery vehicles [E].

5 Faults and anomaly signatures

All injection rates are [K] estimates unless noted; bridge-layer rates are [E].

Table 5.1 Sensor and vehicle fault modes
ModeSignatureApprox. frequencyApplies to
Stuck-atZero variance over N samples while related signals move (fuel level, coolant)0.1-1% of sensor-daysall
DriftBias growth 0.1-1% per month; RTD offset +0.5-2 degC; IMU bias 0.02-0.05 g1-3% per year of sensorsfuel, temps, tyres, cells, IMU
Spike / outlierSingle sample 3-10 sigma1e-4 to 1e-3 of samplesall
J1939 not-available / errorRaw 0xFF / 0xFE at ignition or after a DTC1-5 s per startupJ1939 signals
Cellular dropoutGaps 30 s-30 min; store-and-forward bursts with old timestamps1-5% of timeall
CAN dropout / ECU reset / bus-offAll signals from one source address vanish 1-60 sabout 1 per 1e5 hall
GPS multipath / urban canyonJumps 20-100+ m, HDOP above 3, fewer than 5 satellites, speed noise; tunnel loss5-15% of fixes in a dense city; below 1% on highwaybuses more than trucks
GPS cold start / teleportWrong fix km away for 30-60 s after power-up; rare jumpsper power-upall
Time skew, duplicates, out of orderDevice vs server skew 0-30 s; retransmitted duplicates0.1-2%all
Quantisation1 degC/bit, 1/256 km/h, 0.05 L/halwaysJ1939
TPMSSlow leak 5-20 kPa/day; sensor battery deathleak about 1%/yr/tyrebuses (lower than trucks)
Fuel levelSlosh noise; step up on refuel; sudden drop (theft)per eventdiesel
Odometer / hours resetDecrease or jump after ECU swapvery rareall
E-bus BMSSOC step 2-10% on recalibration at rest; cell spread growth; temperature sensor reads -40 or 215 degC when offline; comms dropouts [S PowerUp]about 1% of buses per monthe-buses
Engine overtemp / derateCoolant above 105 degC with torque cutrareall
APC miscountDrift, negative occupancy, stuck zero, double count at wide doors1-5% error; sensor failure about 1-2%/yrbuses
Door switch stuckOpen for hours or neverrarebuses
Table 5.2 Bridge-layer failure modes affecting bus data [E]
FailureSignatureRate
CAN bus-offAll signals vanish 0.1-5 s, or until power cycle0.05-0.5 episodes per vehicle per day; 1% of devices chronic
Wrong bitrateError frames, no data0.5% of installs
Dropped framesGaps in cyclic PGNs, alive-counter skips0.01-0.5%; up to 5% on an overloaded gateway
Duplicate framesIdentical timestamp and value0.1-1%
TP session failureDM1 or VIN missing, abort codes0.5-3% of multi-frame messages
Buffer overflowSequence gap, oldest dropped (after 6-72 h offline at 1 Hz)0.5-2% of outages longer than 6 h
Timestamp skewFuture timestamps, 1970 dates; 0.5-2% of devices offset above 5 s; 0.05% above 1 h0.5-2% of devices
Encoding errorsScaling x10 or x100, signed/unsigned, endianness, 0xFF/0xFFFF sentinels; impossible values such as 6553.5 km/h0.1-1% of records
Firmware / schema mismatchUnknown IDs, shifted signals, dropped fields2-10% of fleet on old firmware for 1-4 weeks after rollout
Frozen valueFlatline with valid timestamp0.1-1% of signals
Reconnect stormMass reconnect, burst replay, duplicatesevent-based
Clock jumpTimestamp step of seconds after NTP or GNSS correctionfew per month

6 Events, alerts and thresholds

Table 6.1 Event thresholds for buses
EventThresholdBasis
Harsh braking0.30-0.45 g[S] GPS Insight 0.29-0.38 g by weight class (device default 0.367 g); Digital Matter 4.4 m/s2 (about 0.45 g); transit often 0.25-0.3 g for standing passengers [K]
Harsh acceleration0.30-0.45 g; buses rarely above 0.2 g[S] 0.337 g GPS Insight; 4.4 m/s2 Digital Matter
Harsh cornering0.35-0.56 g; buses 0.2-0.3 g[S] 0.357 g; 5.5 m/s2 Digital Matter; bus values [K]
Minimum speed for GPS-based event10 km/h accel and brake; 30 km/h cornering[S] Teltonika; accelerometer preferred [S]
Overspeedlimit +5-10 km/h[K]
Excess idlingabove 3-5 min; alarm above 10 min[K]
Door open while movingspeed above 5 km/h[K]
Overloadpassengers above rated (80-100 for 12 m)[K]
Low tyrebelow 85% nominal or below 700 kPa[K]
Coolantabove 105 degC[K]
DEFbelow 15% warn; below 5% derate[K]
Air pressurebelow 550 kPa[K]
Battery cell temperatureabove 50-55 degC[K]
Low SOCbelow 20% warn; below 10% limp[K]
Cell imbalancespread above 100-150 mV[K]
Schedule / routemore than 1-3 min late; more than 100-200 m off route; skipped stop[K]
Impactabove 2.5-4 g[K]
Active DTC (DM1)any active amber or red lamp DTC[K]

Note on door signals: door switches distinguish holding time from dwell, and some fleets drive with doors open, making that signal useless on those fleets [S TCRP].

7 Generator guidance for the simulator

Export cadence

1 Hz for kinematics, engine rpm, speed and fuel rate; 10 s for battery, temperatures, DEF and TPMS; event-driven for doors, APC, DTC, harsh events and geofence; 5-15 min parked heartbeat. Apply +-10% report jitter and batched uploads after connectivity loss [K]. Typical gateway batch: 60 s (10 s live, 300 s eco), flush on ignition-off or at 70-80% buffer fill [E].

State machine and couplings

Drive every signal from a duty-cycle state machine with states: depot/parked, driving, stop dwell, layover, idle, charging/refuelling, rest break.

  • Fuel rate = f(speed, grade, load): idle 1.5-3 L/h; urban 15-45 L/h at speed.
  • Coolant: first-order lag of engine load, tau 120-300 s, normal band 80-95 degC.
  • E-bus SOC(t) = SOC(0) - integral of pack power dt / usable energy, regen negative, 15-30% of traction energy recovered in urban service.
  • Passenger load: occupancy(t) = sum(in - out) per door, clamp at 0, reset at terminus; boardings 0-30 per stop with peak scaling.
  • Stop cycle: stop every 300-500 m, dwell 15-40 s drawn from a right-skewed distribution (inference: lognormal), door open during dwell.
Sensor noise and quantisation
  • Quantise to J1939 resolutions: speed 1/256 km/h, rpm 0.125, fuel rate 0.05 L/h, temperatures 1 degC with -40 offset, tyre pressure 4 kPa/bit.
  • Fuel level: add +-2-5% slosh noise while moving, filter 10-60 s, step up 200-300 L-scale on nightly refuel (tank 250-350 L).
  • GNSS: HDOP 0.7-2 open sky, 3-10 urban canyon; urban canyon position error 10-50 m, tails 100+ m.
  • Counts: APC accuracy 97.5-99.5% vendor, 90-98% real world at crowded wide doors.
Fault injection

Inject faults per Tables 5.1 and 5.2 with a ground-truth label on every injected imperfection. Suggested per-vehicle latent traits: clock ppm (20-50 typical; cheap RTC up to 100 ppm, i.e. 1.7-4.3 s/day and 8.6 s/day), firmware version, buffer size, link type, chronic-fault flag. Pipeline order: truth signals, bus layer (frame loss, TP aborts, bus-off, sentinels), gateway (clock, deadband, batch, codec, finite buffer), link state machine, broker semantics (QoS1 duplicates, reorder on replay), cloud record with received_at, boot_id, seq, batch_id, fw_version, schema_version, tenant [E].

Deadband and payload

Optional edge filters [E]: speed 1 km/h, coolant 1 degC, fuel 0.5%, GPS 10-50 m or 15-30 degrees heading; removes 60-90% of samples. Size vs JSON: CBOR 0.5-0.8, Protobuf 0.2-0.5, vendor binary 0.1-0.3; JSON record of 10 signals is 250-600 B.

Per-tenant variant knobs
Table 7.1 Suggested tenant profiles (values from sections 3-5; combinations are inference)
KnobCity transitIntercityElectric fleet
Mean speed12-22 km/h60-85 km/h12-22 km/h urban
Daily km150-250300-500200-250
Stop spacing300-500 m20-100 km300-500 m
Dwell15-40 sminutes (inference)15-40 s
Share of engine-on time at speed 040-60%low (inference)not applicable to idle fuel; motor idle (inference)
Energy / fuelidle 1.5-3 L/h; 15-45 L/hsame signal set, lower stop-go load (inference)0.9-1.8 kWh/km; winter +30-60%; loaded +45%
APC / doors0-30 per door per stopfewer, larger boarding groups at stops (inference)as city transit
Powertrain-only signalsrpm, coolant, DEF, DPF, fuelsamereplace with pack V/I, SOC, cell V/T, charger
GNSS quality5-15% degraded fixesbelow 1% degraded5-15% degraded
Charging / refuelnightly refuel 250-350 Lrefuel at depot (inference)3-6 h overnight at 50-150 kW; optional opportunity 300-600 kW
Connectivity99%+, 5-30 s dead spotsrural gaps 3-10% of drive time (truck figure, inference)99%+, depot Wi-Fi backfill
Harsh thresholdsbrake 0.25-0.3 gvendor default 0.3-0.45 gvendor default
Cadence1 Hz GPS, report 10-60 sreport 10-60 sBMS upload 10-60 s
Schemadoors and pax presentdoors, pax; tachograph via FMSBMS block present

Further tenant-level knobs from the bridge research [E]: unit and key naming (km/h, degC, camel vs snake case), timestamp format (epoch ms vs ISO-8601), missing values as null vs sentinel, sampling policy pushed via retained config (config lag leaves 1-10% of devices on the old policy for hours), retention (raw 7-30 days, 1-min rollups 13 months, driver GPS trails shortened or anonymised for GDPR), and topic pattern t/{tenantId}/v1/{vehicleClass}/{deviceId}/{telemetry|event|status|cmd|ack}.

8 How the Sense simulator implements this

Source and status. This section restates the simulator document BUS_POINTS.md (verification dated 12 Oct 2026) and the Sense documents layout-v1.md and BUILD.md (checked against the code on 12 Oct 2026). Everything below was built and run in the simulator and fed through Sense's own protocol handler; none of it is a field measurement. Where the Sense side is described, it is the working copy of Sense, which at the time of writing carries uncommitted changes; the released listener build of 12 Oct 2026 (20:50) is older than part of them, and the places where that matters are marked.

8.1 Scenario codes (tenant subvariant)

The Fleet tenant has the variant bus and a subvariant that selects the scenario. The codes are the ones the Controller and the platform use. A tenant with another subvariant (or none) runs no bus; the simulator's own selector (default staff-shuttle) is used only when the tenant's subvariant is empty. Table 7.1 above covers city transit, intercity and electric fleet; the hospital staff shuttle is a fourth scenario that Table 7.1 does not list.

Table 8.1 Bus scenario codes and what differs between them
CodeStands forRouteHow it is generated
staff-shuttleHospital staff shuttleClosed loop of 6 stops in Bengaluru (stops 301-306), about 9 kmStop, doors, one alights a second, one boards every 2 s with a card tap; more boarding at shift changes (06:30-08:00, 13:30-15:00, 20:30-22:00 IST); every third loop a 10-minute layover at the main gate with engine off, driver change and refuel; runs all day
city-transitDiesel city busMajestic - MG Road - Indiranagar - Marathahalli - Whitefield, about 23 km, out and backBlock of 12-16 h from 04:30-06:30 (70%) or 8-14 h ending 00:00-01:00 (30%); stop every 300-500 m; dwell lognormal (median 23 s, 14-60 s); 0-30 boardings per door per stop with peak scaling (07-09, 16-19), hubs x3, weekend x0.65; traffic signals; terminus layover 3-15 min with passengers zero at the end of line; nightly refuel after pull-in; 5-15% degraded GNSS; dead spots
intercity-coachDiesel coachBengaluru - Nelamangala - Kunigal - Channarayapatna - Hassan, about 188 km, stops 26-79 km apart78-96 km/h cruise, 50 km/h near towns; dwell in minutes (lognormal, median 6 min); rest break of 15-25 min after 1.5 h of driving; terminus layover 60-100 min; block of 8-11 h (300-500 km a day); rural dead zones (3 km cells, 6.5% of the route); GNSS degraded below 1%
electric-fleetBattery-electric city busMajestic - Jayanagar - Silk Board - Bommanahalli - Electronic City, about 22 kmLike city transit without engine groups: 180-cell LFP pack (400 kWh usable), SOC 95% at pull-out falling to 25-30%, regeneration 15-20% of traction energy, 1.2-1.7 kWh/km, cell temperatures, overnight depot charge of 3-6 h at 55-120 kW (taper above 80%)

8.2 Protocols emitted and the one-vehicle-per-tenant model

One tenant, one bus, one Sense

One Fleet tenant is one bus, and every bus tenant has its own Bhairava Sense. The desktop simulator starts one bus for the tenant's subvariant and gives the tenant a slot 0-23 (tenant id modulo 24, moved up to the next free slot when another running vehicle tenant holds it; one allocator serves buses, trucks and ambulances). Slot s sends UDP to 127.0.0.1 ports 49001+5s (CAN gateway), 49002+5s (NMEA) and 49003+5s (tracker) from source address 127.0.(1+s).20; for example slot 5 sends to 49026, 49027, 49028 from 127.0.6.20. The card shows the matching Ports text to type into the Ports setting of that tenant's Sense (socket mode). Two Sense instances on one PC cannot share a UDP port, which is why each tenant has its own triple. The bus identity (bus id, IMEI with a valid Luhn digit, VIN with a valid check digit, driver cards, J1939 address-claim identity number) is drawn from an FNV-1a hash of tenant:<id>, so the same tenant is the same bus in every run. The multi-bus options (:N) remain for tests and load runs only.

Table 8.2 Equipment, wire protocol and how Sense names the device
EquipmentProtocol on the wire (all UDP)Default portSense device name
GNSS receiver (ignition on)NMEA 0183 $GNGGA and $GNRMC, 1 Hz10110talker GN at <source ip>
Powertrain and body CAN through a CAN-to-Ethernet gateway (13-octet frames, one datagram a second, ignition on)SAE J1939 (29-bit) and OBD-II (VIN)20001unit <SA> on CAN gateway <source ip> (SA 0 powertrain, 11 brakes, 23 cluster, 33 body); control unit 7E8 on CAN gateway <source ip>
Telematics unitWialon IPS 1.1 text: login line, then data lines with date, time, position, speed, course, altitude, satellites, HDOP, inputs, outputs, ADC, iButton and params20332tracker <imei>

Wialon input bits: 0 ignition, 1 front door, 2 rear door, 3 panic (shuttle), stop request (city, coach) or plugged in (electric). Params are name:type:value (1 integer, 2 decimal). J1939 values are quantised to the J1939-71 resolutions listed in section 7. NMEA and CAN are sent only while the ignition is on; CAN slow groups every 10 s and the VIN every 600 s in all four scenarios.

Table 8.3 Wialon report cadence by scenario (+-10% jitter; also at once on door, stop, APC, tap, fault, charge and link events and on a turn over 25 degrees)
ScenarioMovingStandingIgnition off
staff-shuttle10 s30 s120 s
city-transit15 s30 s600 s
intercity-coach30 s60 s600 s
electric-fleet20 s30 s300 s (60 s while charging)

8.3 Signals actually emitted

"Diesel" means staff-shuttle, city-transit and intercity-coach; "all" includes electric-fleet. Sense makes one reading per J1939 signal and per Wialon param, named as in the table.

Table 8.4 NMEA, J1939 and OBD-II points (name and unit as Sense shows them)
SourceSense point (unit)ScenariosRate
NMEA GGAGGA latitude, GGA longitude (degrees); GGA fix quality; GGA satellites; GGA altitude (m)all1 s
NMEA RMCRMC status (valid or warning); RMC latitude, RMC longitude (degrees); RMC speed (knots); RMC course (degrees)all1 s
J1939 EEC1 (PGN 61444)Driver demand torque, Engine torque, Engine demand torque (%); Engine speed (rpm)diesel1 s
J1939 EEC2 (61443)Accelerator pedal position, Engine load (%)diesel1 s
J1939 CCVS (65265)Vehicle speed (km/h); Parking brake; Brake pedal; Cruise control; Clutch pedalall1 s
J1939 LFE (65266)Fuel rate (L/h); Instantaneous fuel economy, Average fuel economy (km/L); Throttle position (%)diesel1 s
J1939 ET1 (65262)Coolant temperature, Fuel temperature, Engine oil temperature (degC)diesel10 s
J1939 EFL/P1 (65263)Fuel delivery pressure, Engine oil pressure, Coolant pressure (kPa); Engine oil level, Coolant level (%)diesel10 s
J1939 DD (65276, SA 23)Fuel level (%)diesel10 s
J1939 VEP1 (65271)Battery current, Alternator current (A); Charging system voltage, Battery voltage, Key switch battery voltage (V, 24 V system)all10 s
J1939 AMB (65269, SA 33)Barometric pressure (kPa); Cab interior temperature, Ambient air temperature, Air inlet temperature (degC)all10 s
J1939 HOURS, LFC, VD, VDHR, AT1T1IEngine hours (h), Engine revolutions; Trip fuel, Total fuel used (L); Trip distance, Total vehicle distance (km) and the high-resolution pair; Exhaust fluid tank level (%, diesel only)all (fuel, hours and DEF: diesel)10 s
J1939 DM1 (65226)Event "fault SPN n FMI m", or "no active fault codes"all1 s while active, else 10 s
J1939 address claim (60928)Presence "unit claims address 0 / 23 / 33"allat ignition on
OBD-II service 09 PID 02Presence "vehicle identification number" with the VINallat ignition on and every 600 s

DM1 codes sent (amber lamp): diesel SPN 110 FMI 16 (coolant over 102 degC), SPN 1761 FMI 18 (DEF under 10%), SPN 117 FMI 1 (air pressure under 600 kPa); electric SPN 520193 FMI 0 (cell over 50 degC), SPN 520192 FMI 1 (SOC under 10%), SPN 117 FMI 1. Degraded GNSS is sent as 3-4 satellites, HDOP 3-10, 10-50 m position error with jumps over 100 m; a tunnel gives fix quality 0 and RMC status warning.

Table 8.5 Wialon params (Sense point = the param name; unit says what the number means)
ScenarioParams (unit)
allign (0/1); seq (report counter, resets at reboot); boot_id (counts reboots); pwr_ext (V); odometer (km); hdop; gps_sats; gsm_lvl (0-5); gsm_rsrp (dBm); gsm_rsrq (dB); gsm_sinr (dB); net_type (3, 4, 5); link_down_s (s, length of the outage just ended); door_front, door_rear (0/1); stop_id; cabin_temp (degC); plus Latitude, Longitude (degrees), Speed (km/h), Heading (degrees), Altitude (m)
staff-shuttlepax (persons, max 42); pax_in, pax_out (this stop); card_id (card UID as decimal); card_taps (count); ac (0/1); ac_setpoint (degC); ac_fault; driver_card; panic; cam1 to cam4 (1 ok, 0 fault); dvr_rec
city-transitpax (APC occupancy estimate); apc_in_1, apc_out_1, apc_in_2, apc_out_2 (counted this stop, per door); stop_req (0/1); hvac_kw (kW)
intercity-coachpax; apc_in_1, apc_out_1; hvac_kw (kW); drv_state (0 rest, 1 available, 2 work, 3 driving; tachograph via FMS); drive_min (minutes driving since the last break); overspeed (over 100 km/h)
electric-fleetAs city-transit plus the battery block: charge_state (0 driving, 1 parked, 2 charging); soc, soh (%); pack_v (V); pack_i (A, discharge positive); cell_vmax, cell_vmin (V); cell_tmax, cell_tmin, cell_tavg (degC); coolant_in, coolant_out (degC); iso_res (ohm/V); chg_limit_kw, dis_limit_kw (kW); motor_rpm; motor_nm (Nm); motor_temp (degC); kwh_km (kWh/km, windowed); regen_pct (share of traction energy recovered); charger_kw (kW)

8.4 What Sense can and cannot read yet

The simulator document lists these as Sense-side gaps; Sense itself was not changed by the simulator work. The state below follows BUS_POINTS.md section 8, the later TRUCK_POINTS.md section 8 and Sense's BUILD.md.

  • Read by the working copy of Sense, not by the released build of 12 Oct 2026: J1939 TIRE1 (65268, one point per tyre) and B1 (65274, brake pressures); NMEA GGA HDOP and the RMC time; the Wialon record date and time (kept as the source time); a Wialon unit for the names in Table 8.5 through a name table (unknown names stay without a unit). The setting common.use_source_time is off by default.
  • Electric bus battery, motor and charger: no J1939 high-voltage energy-storage group and no OBD-II PID 5B in Sense, so these travel only as Wialon params.
  • Not read at all: APC, HVAC and door-control signals (no standard group; carried as Wialon params), the tachograph state beyond speed, string params and the iButton field of Wialon IPS, the native UDP form of Wialon IPS 2.0 (only the session form, login plus data lines in each datagram, is read), Teltonika over UDP, and the J1939 vehicle number (65260). Sense also does not use seq or boot_id, so duplicates and replayed old records count as new readings.
  • Not reachable from the simulator: MQTT, HTTP JSON, HL7 and TCP trackers; the simulator sends UDP only.
  • Vehicle profiles: the Fleet compatibility check compares what is heard with a profile chosen by the tenant variant and, for a bus, by the subvariant (profiles exist for staff-shuttle, city-transit, intercity-coach and electric-fleet; an empty or unknown subvariant uses the plain Bus profile).

8.5 Faults and the ground-truth file

Each bus carries latent traits (device clock error in ppm, a chronic flag in 1% of buses with 5% frame loss and bus-off 5 a day, frame loss 0.01-0.5%, bus-off 0.05-0.5 a day, a weak battery in 5% with a reboot on 40% of ignition-on events, APC miss rate 1-5%). Fault rates are those of Tables 5.1 and 5.2, scaled by --bus-faults (100 = as in the report). Injected faults include the J1939 not-available block after ignition on, spikes, x10 encoding errors, dropped and duplicated CAN frames, bus-off, VIN transport aborts, stuck-at and drift, GNSS episodes, jumps and cold-start teleport, link outages with store-and-forward replay, reboots (seq restarts, boot_id +1), door stuck, APC miscount and stuck at zero, fuel theft, TPMS leak, engine overtemperature, and for electric buses SOC steps, cell temperature sensors reading -40 or 215 and BMS dropouts.

With --truth FILE the simulator writes one JSON object per line. Every line has t (simulated seconds since start), utc, vehicle and type; the first lines are run (seed, clock, options) and one vehicle per bus (scenario, IMEI, VIN, source, clock error, block hours). Then one line per event, for example stop (true in and out, dwell), apc_error, link_down and link_up (cause dead_zone, tunnel or dropout), replayed, buffer_overflow, frame_dropped, bus_off, tp_abort, j1939_na, spike, encoding_error, stuck_at, drift, gps_jump, reboot, door_stuck_start, fuel_theft, engine_overtemp_start, soc_recalibration_step, bms_comms_dropout and end. The file is the ground truth against which a detector can be scored. Not simulated: multi-code DM1 transport failures, wrong CAN bit rate, firmware or schema mismatch, clock jump, odometer reset, reconnect storms from many buses, and signals absent by tenant.

8.6 Measured differences between the scenarios

Headless runs of 12 Oct 2026 with a fixed seed and simulated clock 60 (staff-shuttle 2 buses for 3 simulated hours, city-transit 4 buses for 4 h, intercity-coach 2 buses for 9 h, electric-fleet 3 buses for 4 h). Every datagram (41,057 / 86,949 / 74,848 / 57,681 / 106,035 over the runs including a night run) was identified by Sense's protocol handler as NMEA 0183, OBD-II, J1939 or Wialon IPS, with none unknown or unreadable. The table is taken from NMEA and the truth file.

Table 8.6 Measured scenario differences (simulator output, not field data)
Measurestaff-shuttlecity-transitintercity-coachelectric-fleet
Mean speed, ignition on / moving (km/h)23.3 / 29.414.0 / 23.767.7 / 80.213.4 / 23.2
Share of engine-on time at speed 021%41%16%42%
Stop spacing, mean (m)1,509 (loop)408 (303-498)53,898 (37-79 km)392 (302-689)
Dwell, mean / median / range (s)22 / 19 / 11-7325 / 24 / 14-55387 / 315 / 126-91725 / 24 / 14-60
Terminus layover630-670 s (every third loop)281-890 s71-91 min483-647 s
Degraded GNSS fixes (HDOP over 3, fewer than 5 satellites or no fix)0.8%7.9%0.6%6.8%
Link down, share of time1.1%2.3%4.0% of all time (about 6% of driving)1.5%
Outage length (s)24-5131-418119-14229-80
Fuel (L/100 km)284931-
Energy---1.6-1.7 kWh/km (SOC drop over odometer), regeneration 15.6-16.3%

Night run: three electric buses charged 4.4-5.5 h at 71-92 kW (266-342 kWh); the diesel buses pulled in and refuelled; no NMEA datagram was heard inside any outage interval of the truth file. The coach covered about 340 km per bus in 9 h. Two tenants at once (staff-shuttle and city-transit on separate Sense instances and port triples) each heard only their own IMEI and address.

One result sits at the low end of this report: Table 4.1 asks for 40-60% of engine-on time at speed 0 in city service, and the simulation gives 41-42%. These are simulator outputs; they show the generator follows the report, not that real buses do.

9 Uncertainty and assumptions

  • The fetched sources did not give J1939 scaling; verify against SAE J1939-71 and J1939DA before decoding any raw frame. The coolant PGN is listed as 65262 in J1939-71 and 65263 on one Garmin list.
  • Most ranges, periods, thresholds and fault frequencies are [K] or [E] estimates, not measured data; use them as priors with wide jitter.
  • Cited bus-specific facts are narrow: the Chengdu e-bus dataset (10 s logging), Ruter (1/min SOC, current, Wh/km), PowerUp (min/max cell V and T, BMS errors), APC vendor accuracy, and vendor harsh-driving defaults, which target light vehicles and need bus tuning.
  • Intercity numbers are thinner than urban ones; intercity columns in Table 7.1 that say inference are not from the research files.
  • J1708/J1587 and ISO 11992 are included from domain knowledge only; ISO 11992 is a truck-trailer link and was omitted as irrelevant to rigid buses (inference).
  • Bridge-layer numbers are largely [E]; link and gateway behaviour on a specific operator network will differ.
  • Many telematics suppliers expose only a subset of FMS signals for buses; the generator should allow signals to be absent by tenant.

10 Sources

  1. J1939 PGN 61444 EEC1 (isobus.net, from SAE J1939DA)
  2. J1939 PGN 65110 DEF tank (isobus.net)
  3. Garmin J1939 PGN list (coolant, fuel rate)
  4. Tyre PGN 65268 (TIRE1)
  5. Chengdu e-bus CAN dataset
  6. Ruter (Oslo) bus telemetry concept
  7. PowerUp e-bus battery analytics
  8. Route One e-fleet data access
  9. FMS standard overview (DigiKey)
  10. Teltonika FMC650 CAN IO
  11. Wialon FMS gateway
  12. GPS Insight harsh driving thresholds
  13. Digital Matter harsh driving event setup
  14. Teltonika FMB150 features and settings
  15. Navixy harsh driving settings
  16. Infodev APC solutions for transit
  17. Thoreb APC module
  18. TCRP report 13907, chapter 5 (door switch vs dwell)
  19. AUTOSAR SAE J1939 transport layer specification
  20. Transport protocol vulnerabilities on SAE J1939 networks (Colorado State)
  21. J1939 RTS/CTS session walkthrough (Copperhill)
  22. NDSS VehicleSec 2023 slides (TP failure modes)
  23. TPMS sensor signals (Tomorrow's Technician)
  24. AWS IoT FleetWise
  25. EMQX MQTT QoS introduction
  26. ThingsBoard MQTT QoS
  27. Digital Matter data usage
  28. JSON vs CBOR for IoT payloads (Hubble)
  29. Beating JSON performance with Protobuf (Auth0)
  30. AWS IoT connect and publish
  31. HiveMQ MQTT topic namespace