Skip to main content

Investigations

Active steward investigations and pending penalties. Use sensor.f1_investigations in dashboards, templates, and automations.

See live data availability for session and data-source requirements. The details below describe any additional conditions for this entity.

Find your entity

These are standard entity IDs. If Home Assistant assigned a different ID, or you renamed an entity, use your existing ID in the examples.

State and attributes

sensor.f1_investigations - Active steward investigations and pending penalties. Shows only currently relevant information with automatic lifecycle management.

State

  • Integer: count of actionable items (noted incidents + under investigation + pending penalties).

Example

3

Attributes

AttributeTypeDescription
notedlistIncidents noted but not yet under investigation
under_investigationlistActive steward investigations
no_further_actionlistRecent NFI decisions (auto-expire after 5 minutes)
penaltieslistPenalties issued but not yet served
last_updatestringISO-8601 timestamp of last update

Each entry in noted and under_investigation contains:

FieldTypeDescription
utcstringISO-8601 timestamp when the incident was noted
lapnumberLap number when the incident occurred
driverslistDriver TLAs involved (sorted alphabetically)
racing_numberslistCar numbers involved
locationstringLocation such as "TURN 7", "PIT LANE" (or null)
reasonstringReason such as "CAUSING A COLLISION", "LEAVING THE TRACK AND GAINING AN ADVANTAGE" (or null)
after_racebooleanWhether the investigation will happen after the race (only in under_investigation)

Each entry in no_further_action contains the same fields plus:

FieldTypeDescription
nfi_utcstringISO-8601 timestamp when NFI was decided (used for auto-expiry)

Each entry in penalties contains:

FieldTypeDescription
driverstringDriver TLA who received the penalty
racing_numberstringCar number
penaltystringPenalty type (e.g., "5 SECOND TIME PENALTY", "DRIVE THROUGH PENALTY")
reasonstringReason for the penalty
utcstringISO-8601 timestamp when penalty was issued
lapnumberLap number when penalty was issued
JSON Structure Example
{
"noted": [
{
"utc": "2025-12-07T13:30:57Z",
"lap": 19,
"drivers": ["LEC", "RUS"],
"racing_numbers": ["16", "63"],
"location": "TURN 9",
"reason": "MOVING UNDER BRAKING"
}
],
"under_investigation": [
{
"utc": "2025-12-07T13:40:46Z",
"lap": 25,
"drivers": ["NOR", "TSU"],
"racing_numbers": ["4", "22"],
"location": "TURN 5",
"reason": "FORCING ANOTHER DRIVER OFF THE TRACK",
"after_race": false
}
],
"no_further_action": [
{
"utc": "2025-12-07T13:06:50Z",
"lap": 3,
"drivers": ["ALB", "HAM"],
"racing_numbers": ["23", "44"],
"location": "TURN 7",
"reason": "LEAVING THE TRACK AND GAINING AN ADVANTAGE",
"nfi_utc": "2025-12-07T13:12:53Z"
}
],
"penalties": [
{
"driver": "TSU",
"racing_number": "22",
"penalty": "5 SECOND TIME PENALTY",
"reason": "MORE THAN ONE CHANGE OF DIRECTION",
"utc": "2025-12-07T13:46:38Z",
"lap": 29
},
{
"driver": "ALB",
"racing_number": "23",
"penalty": "5 SECOND TIME PENALTY",
"reason": "SPEEDING IN THE PIT LANE",
"utc": "2025-12-07T14:00:05Z",
"lap": 38
}
],
"last_update": "2025-12-07T14:00:05Z"
}
Jinja2 Template Examples

Check if a driver is under investigation:

{% set investigations = state_attr('sensor.f1_investigations', 'under_investigation') %}
{% set ver_involved = investigations | selectattr('drivers', 'contains', 'VER') | list %}
{% if ver_involved | length > 0 %}
VER is under investigation!
{% endif %}

List all pending penalties:

{% set penalties = state_attr('sensor.f1_investigations', 'penalties') %}
{% for p in penalties %}
{{ p.driver }}: {{ p.penalty }} ({{ p.reason }})
{% endfor %}

Count active investigations:

{% set noted = state_attr('sensor.f1_investigations', 'noted') | length %}
{% set investigating = state_attr('sensor.f1_investigations', 'under_investigation') | length %}
Noted: {{ noted }}, Under Investigation: {{ investigating }}

Get post-race investigations:

{% set investigations = state_attr('sensor.f1_investigations', 'under_investigation') %}
{% for inv in investigations if inv.after_race %}
{{ inv.drivers | join(' vs ') }} - {{ inv.reason }} (after race)
{% endfor %}

Show recent NFI decisions:

{% set nfi = state_attr('sensor.f1_investigations', 'no_further_action') %}
{% for item in nfi %}
{{ item.drivers | join('/') }}: No Further Action ({{ item.reason }})
{% endfor %}

Create investigation summary:

{% set sensor = 'sensor.f1_investigations' %}
{% set total = states(sensor) | int %}
{% if total > 0 %}
{{ total }} active matter{{ 's' if total > 1 else '' }}:
{% set penalties = state_attr(sensor, 'penalties') %}
{% for p in penalties %}
- {{ p.driver }}: {{ p.penalty }}
{% endfor %}
{% else %}
No active investigations
{% endif %}
Incident Lifecycle
  • NOTED → Stays until escalated to UNDER INVESTIGATION, resolved as NFI, or penalized
  • UNDER INVESTIGATION → Stays until resolved as NFI or penalty issued
  • NO FURTHER ACTION → Auto-expires after 5 minutes of session time
  • PENALTY → Stays until PENALTY SERVED message received

Next steps