229d796cfd
Decision 30: CAN feeds displays, OBD-II (K-line via the ELM) calibrates, so every obd2 signal carries the obd_ prefix and the plain names are left for decoded ones. yukart/gnss/<signal> gives displays the fix as single values; gnss/fix stays for navigation. Boundary: reboot beside poweroff, same guards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
640 lines
15 KiB
JSON
640 lines
15 KiB
JSON
{
|
||
"$comment": "Single source for signal identity. Topic name and envelope unit are both derived from these entries and are never authored separately. source=obd2 is standardised (OBD-II mode 01 over the K-line, through the ELM327): calibration references, every name prefixed obd_ (project-yukart decision 30); source=host is the Orin itself (orin-status), not the car. source=gnss is the receiver (svc-core gnss), on yukart/gnss/<signal>. source=z27ag is reverse-engineered from the car's own broadcast frames, and its 'can' block is the only place its layout is written down: id (11-bit, hex string), byte (first data byte, 0-7), length in bits (1, 8 or 16), bit (length 1 only: 0 = LSB of that byte), order (length 16: big = byte first is most significant, little = the reverse), scale and offset (value = raw * scale + offset; booleans are raw != 0). 'evidence' names the contracts report that found it.",
|
||
"signals": {
|
||
"obd_vehicle_speed_kph": {
|
||
"unit": "kph",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Road speed",
|
||
"range": [
|
||
0,
|
||
255
|
||
]
|
||
},
|
||
"obd_coolant_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Engine coolant temperature",
|
||
"range": [
|
||
-40,
|
||
215
|
||
]
|
||
},
|
||
"obd_intake_air_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Intake air temperature",
|
||
"range": [
|
||
-40,
|
||
215
|
||
]
|
||
},
|
||
"obd_throttle_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Throttle position",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"obd_engine_load_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Calculated engine load",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"obd_fuel_level_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Fuel tank level",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"obd_intake_pressure_kpa": {
|
||
"unit": "kpa",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Intake manifold absolute pressure",
|
||
"range": [
|
||
0,
|
||
255
|
||
]
|
||
},
|
||
"obd_maf_gps": {
|
||
"unit": "g/s",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Mass air flow rate",
|
||
"range": [
|
||
0,
|
||
656
|
||
]
|
||
},
|
||
"obd_engine_rpm": {
|
||
"unit": "rpm",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Engine speed (OBD-II 0C): the reference for the decoded engine_rpm",
|
||
"range": [
|
||
0,
|
||
8000
|
||
]
|
||
},
|
||
"obd_timing_advance_deg": {
|
||
"unit": "degree",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Ignition timing advance before TDC, cylinder 1",
|
||
"range": [
|
||
-64,
|
||
64
|
||
]
|
||
},
|
||
"obd_stft_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Short-term fuel trim, bank 1: positive adds fuel",
|
||
"range": [
|
||
-100,
|
||
100
|
||
]
|
||
},
|
||
"obd_ltft_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Long-term fuel trim, bank 1: positive adds fuel",
|
||
"range": [
|
||
-100,
|
||
100
|
||
]
|
||
},
|
||
"obd_o2_b1s1_v": {
|
||
"unit": "V",
|
||
"type": "number",
|
||
"source": "obd2",
|
||
"description": "Upstream oxygen sensor voltage (narrowband: ~0.1 lean … ~0.9 rich)",
|
||
"range": [
|
||
0,
|
||
1.275
|
||
]
|
||
},
|
||
"engine_rpm": {
|
||
"unit": "rpm",
|
||
"type": "number",
|
||
"source": "z27ag",
|
||
"description": "Engine speed",
|
||
"range": [
|
||
0,
|
||
8000
|
||
],
|
||
"can": {
|
||
"id": "0x210",
|
||
"byte": 4,
|
||
"length": 16,
|
||
"order": "big",
|
||
"scale": 1,
|
||
"offset": 0,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"accel_pedal_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "z27ag",
|
||
"description": "Accelerator pedal position (0x00 at rest, 0xFA flat)",
|
||
"range": [
|
||
0,
|
||
100
|
||
],
|
||
"can": {
|
||
"id": "0x210",
|
||
"byte": 0,
|
||
"length": 8,
|
||
"scale": 0.4,
|
||
"offset": 0,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"brake_pedal": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Brake pedal switch: pressed",
|
||
"can": {
|
||
"id": "0x231",
|
||
"byte": 4,
|
||
"bit": 1,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"handbrake": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Handbrake applied",
|
||
"can": {
|
||
"id": "0x239",
|
||
"byte": 0,
|
||
"bit": 2,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"indicator_left": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Left indicator lamp, as it flashes (on and off at the flasher's rate)",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 2,
|
||
"bit": 6,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"indicator_right": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Right indicator lamp, as it flashes. Hazards were seen on the left bit only: open",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 2,
|
||
"bit": 5,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"side_lights": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Side (position) lights on; also on with dipped beam",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 2,
|
||
"bit": 2,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"dipped_beam": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Dipped headlights on",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 3,
|
||
"bit": 1,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"door_open": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Any door open",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 2,
|
||
"bit": 1,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"driver_door_open": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "Driver's door open",
|
||
"can": {
|
||
"id": "0x423",
|
||
"byte": 0,
|
||
"bit": 4,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"ac_compressor": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "z27ag",
|
||
"description": "A/C compressor engaged (engine running)",
|
||
"can": {
|
||
"id": "0x13D",
|
||
"byte": 6,
|
||
"bit": 7,
|
||
"length": 1,
|
||
"evidence": "Z27AG-DECODE-1"
|
||
}
|
||
},
|
||
"orin_cpu_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Orin CPU cluster temperature",
|
||
"range": [
|
||
-40,
|
||
110
|
||
]
|
||
},
|
||
"orin_gpu_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Orin GPU temperature",
|
||
"range": [
|
||
-40,
|
||
110
|
||
]
|
||
},
|
||
"orin_soc_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Orin SoC temperature, hottest of its sensors",
|
||
"range": [
|
||
-40,
|
||
110
|
||
]
|
||
},
|
||
"orin_tj_temp_c": {
|
||
"unit": "celsius",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Orin junction temperature: the hottest point on the die, which throttling acts on",
|
||
"range": [
|
||
-40,
|
||
110
|
||
]
|
||
},
|
||
"orin_cpu_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "CPU utilisation, all cores",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"orin_gpu_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "GPU utilisation",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"orin_ram_used_mb": {
|
||
"unit": "MB",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Memory in use, CPU and GPU together (one shared pool): total minus available",
|
||
"range": [
|
||
0,
|
||
8192
|
||
]
|
||
},
|
||
"orin_ram_used_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Memory in use as a share of the total",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"orin_swap_used_mb": {
|
||
"unit": "MB",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Swap in use",
|
||
"range": [
|
||
0,
|
||
16384
|
||
]
|
||
},
|
||
"orin_power_w": {
|
||
"unit": "W",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Orin module input power (VDD_IN), from the onboard INA3221",
|
||
"range": [
|
||
0,
|
||
30
|
||
]
|
||
},
|
||
"orin_fan_rpm": {
|
||
"unit": "rpm",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Cooling fan speed",
|
||
"range": [
|
||
0,
|
||
10000
|
||
]
|
||
},
|
||
"net_wifi_up": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "host",
|
||
"description": "WiFi associated and up"
|
||
},
|
||
"net_wifi_ssid": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "host",
|
||
"description": "Network name (SSID) of the WiFi the Orin is associated with; not sent while WiFi is down"
|
||
},
|
||
"net_wifi_signal_dbm": {
|
||
"unit": "dBm",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "WiFi signal level",
|
||
"range": [
|
||
-100,
|
||
0
|
||
]
|
||
},
|
||
"net_wifi_rx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "WiFi receive rate (into the Orin)",
|
||
"range": [
|
||
0,
|
||
1000000
|
||
]
|
||
},
|
||
"net_wifi_tx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "WiFi transmit rate (out of the Orin)",
|
||
"range": [
|
||
0,
|
||
1000000
|
||
]
|
||
},
|
||
"net_lte_state": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "host",
|
||
"description": "Modem state as ModemManager reports it (connected, registered, searching, disabled, …), or absent with no modem"
|
||
},
|
||
"net_lte_tech": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "host",
|
||
"description": "Access technology in use (lte, umts, …); empty when not registered"
|
||
},
|
||
"net_lte_signal_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "Modem signal quality",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"net_lte_rx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "LTE receive rate (into the Orin)",
|
||
"range": [
|
||
0,
|
||
150000
|
||
]
|
||
},
|
||
"net_lte_tx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "LTE transmit rate (out of the Orin)",
|
||
"range": [
|
||
0,
|
||
50000
|
||
]
|
||
},
|
||
"net_tablet_up": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "host",
|
||
"description": "USB link to the tablet has carrier"
|
||
},
|
||
"net_tablet_rx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "USB tablet link, tablet to Orin",
|
||
"range": [
|
||
0,
|
||
480000
|
||
]
|
||
},
|
||
"net_tablet_tx_kbps": {
|
||
"unit": "kbit/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "USB tablet link, Orin to tablet",
|
||
"range": [
|
||
0,
|
||
480000
|
||
]
|
||
},
|
||
"can_up": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "host",
|
||
"description": "The recorder's CAN interface (the PEAK, can_pcan) is present and up; false when absent or down"
|
||
},
|
||
"can_bus_state": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "host",
|
||
"description": "CAN controller state: ERROR-ACTIVE (normal), ERROR-WARNING, ERROR-PASSIVE, BUS-OFF, STOPPED (down), or absent with no adapter"
|
||
},
|
||
"can_rx_fps": {
|
||
"unit": "frames/s",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "CAN frames received per second on that interface",
|
||
"range": [
|
||
0,
|
||
10000
|
||
]
|
||
},
|
||
"elm_connected": {
|
||
"unit": "",
|
||
"type": "boolean",
|
||
"source": "host",
|
||
"description": "Bluetooth link to the OBD-II adapter (the ELM327 on the K-line) is up: obd-poller holds it while the ECU answers"
|
||
},
|
||
"ups_battery_v": {
|
||
"unit": "V",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "UPS battery pack voltage (3S Li-ion, 9.0–12.6 V)",
|
||
"range": [
|
||
0,
|
||
16
|
||
]
|
||
},
|
||
"ups_current_a": {
|
||
"unit": "A",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "UPS battery current: positive charging, negative discharging",
|
||
"range": [
|
||
-5,
|
||
5
|
||
]
|
||
},
|
||
"ups_battery_pct": {
|
||
"unit": "percent",
|
||
"type": "number",
|
||
"source": "host",
|
||
"description": "UPS charge estimate from cell voltage, corrected for load. An estimate, steadiest at rest",
|
||
"range": [
|
||
0,
|
||
100
|
||
]
|
||
},
|
||
"ups_state": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "host",
|
||
"description": "charging, discharging (running on battery) or idle (on input power, not charging)"
|
||
},
|
||
"gnss_fix": {
|
||
"unit": "",
|
||
"type": "string",
|
||
"source": "gnss",
|
||
"description": "Fix quality: none, 2d or 3d (gpsd TPV mode)"
|
||
},
|
||
"gnss_speed_kph": {
|
||
"unit": "kph",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Speed over ground; null without a fix",
|
||
"range": [
|
||
0,
|
||
300
|
||
]
|
||
},
|
||
"gnss_heading_deg": {
|
||
"unit": "degree",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Course over ground, true north; null without a fix or at a standstill",
|
||
"range": [
|
||
0,
|
||
360
|
||
]
|
||
},
|
||
"gnss_lat": {
|
||
"unit": "degree",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Latitude, WGS84",
|
||
"range": [
|
||
-90,
|
||
90
|
||
]
|
||
},
|
||
"gnss_lon": {
|
||
"unit": "degree",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Longitude, WGS84",
|
||
"range": [
|
||
-180,
|
||
180
|
||
]
|
||
},
|
||
"gnss_alt_m": {
|
||
"unit": "m",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Altitude above mean sea level; null without a 3D fix",
|
||
"range": [
|
||
-500,
|
||
9000
|
||
]
|
||
},
|
||
"gnss_satellites": {
|
||
"unit": "",
|
||
"type": "number",
|
||
"source": "gnss",
|
||
"description": "Satellites used in the fix",
|
||
"range": [
|
||
0,
|
||
64
|
||
]
|
||
}
|
||
}
|
||
}
|