Skip to main content

Static Data

Information that rarely changes, such as schedules, drivers, circuits, and championship standings.

Entities Summary

EntityInfo
sensor.f1_next_raceNext race info
sensor.f1_track_timeCurrent local time at the next race circuit
sensor.f1_current_seasonFull race schedule
sensor.f1_driver_standingsCurrent driver championship standings
sensor.f1_constructor_standingsCurrent constructor standings
sensor.f1_weatherWeather forecast at next race circuit
sensor.f1_last_race_resultsMost recent race results
sensor.f1_season_resultsAll season race results
sensor.f1_driver_points_progressionDrivers Point Progression
sensor.f1_constructor_points_progressionConstructors Point Progression
binary_sensor.f1_race_weekon during race week
sensor.f1_sprint_resultsSprint classification results
sensor.f1_fia_documentsFIA decisions and documents for the current weekend
calendar.f1_race_season_calendarFull season calendar with all sessions
info

Many schedule timestamps are provided in three variants: an explicit UTC value (for example race_start_utc), a Home Assistant local-time value (for example race_start), and a circuit-local value (for example race_start_local). The circuit-local timestamps use the circuit's timezone so you can build automations against local session times.


Next Race

sensor.f1_next_race - Schedule for the next race; state is the race start timestamp (ISO‑8601).

State

  • ISO‑8601 timestamp (UTC) of the race start, or unknown if not available.

Attributes

AttributeTypeDescription
seasonstringSeason year
roundstringRound number
race_namestringGrand Prix name
race_urlstringErgast race URL
circuit_idstringCircuit identifier
circuit_namestringCircuit name
circuit_urlstringCircuit URL
circuit_latstringLatitude
circuit_longstringLongitude
circuit_localitystringCity/area
circuit_countrystringCountry
country_codestringISO country code (e.g., "GB", "IT", "US")
country_flag_urlstringURL to country flag image
circuit_map_urlstringURL to official circuit map image
circuit_timezonestringLocal timezone (best effort)
race_start_utcstringRace start (UTC ISO‑8601)
race_startstringRace start in Home Assistant local time
race_start_localstringRace start in circuit local time
first_practice_start_utcstringFP1 start (UTC ISO‑8601)
first_practice_startstringFP1 start in Home Assistant local time
first_practice_start_localstringFP1 start in circuit local time
second_practice_start_utcstringFP2 start (UTC ISO‑8601)
second_practice_startstringFP2 start in Home Assistant local time
second_practice_start_localstringFP2 start in circuit local time
third_practice_start_utcstringFP3 start (UTC ISO‑8601)
third_practice_startstringFP3 start in Home Assistant local time
third_practice_start_localstringFP3 start in circuit local time
qualifying_start_utcstringQualifying start (UTC ISO‑8601)
qualifying_startstringQualifying start in Home Assistant local time
qualifying_start_localstringQualifying start in circuit local time
sprint_qualifying_start_utcstringSprint Qualifying/Shootout start (UTC ISO‑8601)
sprint_qualifying_startstringSprint Qualifying/Shootout start in Home Assistant local time
sprint_qualifying_start_localstringSprint Qualifying/Shootout start in circuit local time
sprint_start_utcstringSprint start (UTC ISO‑8601)
sprint_startstringSprint start in Home Assistant local time
sprint_start_localstringSprint start in circuit local time

Track Time

sensor.f1_track_time - Current local time at the next race circuit.

State

  • String: local time at the circuit, formatted as HH:MM, or unknown.

Example

14:05

Attributes

AttributeTypeDescription
timezonestringCircuit timezone (IANA, best effort)
utc_offsetstringUTC offset at the circuit, formatted as +HHMM
offset_from_homestringDifference between circuit time and Home Assistant time (best effort)
circuit_namestringCircuit name
circuit_localitystringCity/area
circuit_countrystringCountry

Current Season

sensor.f1_current_season - Number of races in the current season.

State

  • Integer: count of races in the season.

Example

24

Attributes

AttributeTypeDescription
seasonstringSeason year
raceslistEnriched races array for the season

Each entry in races contains the standard Ergast race data plus:

FieldTypeDescription
country_codestringISO country code (e.g., "GB", "IT", "US")
country_flag_urlstringURL to country flag image
circuit_map_urlstringURL to official circuit map image

Driver Standings

sensor.f1_driver_standings - Driver standings snapshot from Ergast.

State

  • Integer: number of drivers in the standings list.

Example

20

Attributes

AttributeTypeDescription
seasonstringSeason year
roundstringRound of the standings snapshot
driver_standingslistErgast "DriverStandings" array

Each entry in driver_standings contains:

FieldTypeDescription
positionstringChampionship position
positionTextstringPosition as display text
pointsstringTotal points
winsstringNumber of wins
DriverobjectDriver information
ConstructorslistList of constructor(s) the driver has raced for

The Driver object contains:

FieldTypeDescription
driverIdstringDriver identifier (e.g., "max_verstappen")
permanentNumberstringPermanent car number
codestringThree-letter driver code (TLA)
urlstringWikipedia URL
givenNamestringFirst name
familyNamestringLast name
dateOfBirthstringDate of birth (YYYY-MM-DD)
nationalitystringNationality

Each entry in Constructors contains:

FieldTypeDescription
constructorIdstringConstructor identifier
urlstringWikipedia URL
namestringTeam name
nationalitystringTeam nationality
JSON Structure Example
{
"season": "2025",
"round": "12",
"driver_standings": [
{
"position": "1",
"positionText": "1",
"points": "255",
"wins": "7",
"Driver": {
"driverId": "max_verstappen",
"permanentNumber": "1",
"code": "VER",
"url": "http://en.wikipedia.org/wiki/Max_Verstappen",
"givenName": "Max",
"familyName": "Verstappen",
"dateOfBirth": "1997-09-30",
"nationality": "Dutch"
},
"Constructors": [
{
"constructorId": "red_bull",
"url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
"name": "Red Bull",
"nationality": "Austrian"
}
]
},
{
"position": "2",
"positionText": "2",
"points": "180",
"wins": "2",
"Driver": {
"driverId": "lewis_hamilton",
"permanentNumber": "44",
"code": "HAM",
"url": "http://en.wikipedia.org/wiki/Lewis_Hamilton",
"givenName": "Lewis",
"familyName": "Hamilton",
"dateOfBirth": "1985-01-07",
"nationality": "British"
},
"Constructors": [
{
"constructorId": "ferrari",
"url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
"name": "Ferrari",
"nationality": "Italian"
}
]
}
]
}
Jinja2 Template Examples

Get championship leader:

{% set standings = state_attr('sensor.f1_driver_standings', 'driver_standings') %}
{% if standings and standings | length > 0 %}
{% set leader = standings[0] %}
Leader: {{ leader.Driver.givenName }} {{ leader.Driver.familyName }} ({{ leader.points }} pts)
{% endif %}

Get a specific driver's position:

{% set standings = state_attr('sensor.f1_driver_standings', 'driver_standings') %}
{% set ver = standings | selectattr('Driver.code', 'eq', 'VER') | first %}
{% if ver %}
VER is P{{ ver.position }} with {{ ver.points }} points and {{ ver.wins }} wins
{% endif %}

Calculate points gap to leader:

{% set standings = state_attr('sensor.f1_driver_standings', 'driver_standings') %}
{% if standings and standings | length > 1 %}
{% set leader_pts = standings[0].points | int %}
{% set second_pts = standings[1].points | int %}
Gap: {{ leader_pts - second_pts }} points
{% endif %}

List top 5 drivers:

{% set standings = state_attr('sensor.f1_driver_standings', 'driver_standings') %}
{% for d in standings[:5] %}
P{{ d.position }}: {{ d.Driver.code }} - {{ d.points }} pts
{% endfor %}

Get driver by car number:

{% set standings = state_attr('sensor.f1_driver_standings', 'driver_standings') %}
{% set driver = standings | selectattr('Driver.permanentNumber', 'eq', '44') | first %}
{% if driver %}
#44 {{ driver.Driver.familyName }} is P{{ driver.position }}
{% endif %}

Constructor Standings

sensor.f1_constructor_standings - Constructor standings snapshot from Ergast.

State

  • Integer: number of constructors in the standings list.

Example

10

Attributes

AttributeTypeDescription
seasonstringSeason year
roundstringRound of the standings snapshot
constructor_standingslistErgast “ConstructorStandings” array (positions, points, wins, constructor info)

Weather (Summary)

sensor.f1_weather - Compact weather for the circuit location: current and projected at race start.

State

  • Number: current air temperature (°C), or unknown.

Example

18.6

Attributes

AttributeTypeDescription
seasonstringSeason year for the next race
roundstringRound number for the next race
race_namestringGrand Prix name
race_urlstringErgast race URL
circuit_idstringCircuit identifier
circuit_namestringCircuit name
circuit_urlstringCircuit URL
circuit_latstringLatitude
circuit_longstringLongitude
circuit_localitystringCity/area
circuit_countrystringCountry
current_temperaturenumberCurrent air temperature (°C)
current_temperature_unitstring“celsius”
current_humiditynumber% RH
current_humidity_unitstring“%”
current_cloud_covernumber% cloud cover
current_cloud_cover_unitstring“%”
current_precipitationnumberSelected precipitation amount (mm, best effort)
current_precipitation_amount_minnumberMin precip amount (mm) if provided
current_precipitation_amount_maxnumberMax precip amount (mm) if provided
current_precipitation_probabilitynumberProbability of precipitation (%) when provided
current_precipitation_probability_unitstring“%”
current_precipitation_unitstring“mm”
current_wind_speednumberWind speed (m/s)
current_wind_speed_unitstring“m/s”
current_wind_directionstringCardinal abbreviation (e.g., "NW")
current_wind_from_direction_degreesnumberWind direction (degrees)
current_wind_from_direction_unitstring"degrees"
current_wind_gustsnumberWind gust speed (m/s)
current_wind_gusts_unitstring"m/s"
current_visibilitynumberVisibility (m)
current_visibility_unitstring"m"
current_weather_codenumberWMO weather interpretation code
current_weather_sourcestring"open-meteo"
race_temperaturenumberProjected air temperature at race start (°C)
race_temperature_unitstring“celsius”
race_humiditynumber% RH at race start
race_humidity_unitstring“%”
race_cloud_covernumber% at race start
race_cloud_cover_unitstring“%”
race_precipitationnumberSelected precipitation at race start (mm)
race_precipitation_amount_minnumberMin precip amount (mm) if provided
race_precipitation_amount_maxnumberMax precip amount (mm) if provided
race_precipitation_probabilitynumberProbability of precipitation (%) when provided
race_precipitation_probability_unitstring“%”
race_precipitation_unitstring“mm”
race_wind_speednumberWind speed at race start (m/s)
race_wind_speed_unitstring“m/s”
race_wind_directionstringCardinal abbreviation
race_wind_from_direction_degreesnumberWind direction (degrees)
race_wind_from_direction_unitstring"degrees"
race_wind_gustsnumberProjected wind gust speed at race start (m/s)
race_wind_gusts_unitstring"m/s"
race_visibilitynumberProjected visibility at race start (m)
race_visibility_unitstring"m"
race_weather_codenumberWMO weather interpretation code at race start
race_weather_sourcestring"open-meteo"
race_weather_iconstringMDI icon name matching weather symbol

Last Race Results

sensor.f1_last_race_results - Results of the most recent race; state is the winner’s family name.

State

  • String: winner surname, or unknown.

Example

Verstappen

Attributes

AttributeTypeDescription
roundstringRound number
race_namestringGrand Prix name
race_urlstringErgast URL
circuit_idstringCircuit identifier
circuit_namestringCircuit name
circuit_urlstringCircuit URL
circuit_latstringLatitude
circuit_longstringLongitude
circuit_localitystringCity/area
circuit_countrystringCountry
circuit_timezonestringLocal timezone (best effort)
race_start_utcstringRace start (UTC ISO‑8601)
race_startstringRace start in Home Assistant local time
race_start_localstringRace start in circuit local time
resultslistCleaned results array: {number, position, points, status, driver{permanentNumber, code, givenName, familyName}, constructor{constructorId, name}}

Season Results

sensor.f1_season_results - All results across the current season.

State

  • Integer: number of races with results.

Example

22

Attributes

AttributeTypeDescription
raceslistFor each race: {round, race_name, results:[…]} where each result has same shape as in “Last Race Results”
Known Issue

sensor.f1_season_results may trigger a warning in the Home Assistant logs:

Logger: homeassistant.components.recorder.db_schema
Source: components/recorder/db_schema.py:663
Integration: Recorder
State attributes for sensor.f1_season_results exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored

Despite the warning, the sensor should still work fine for display in the frontend. However, to avoid any database load/performance issues, it is recommended to exclude this sensor from being recorded in your recorder: config:

recorder:
exclude:
entities:
- sensor.f1_season_results

Driver Points Progression

sensor.f1_driver_points_progression - Per‑round driver points (including sprint) with cumulative series, suitable for charts.

State

  • Integer: number of rounds covered.

Example

12

Attributes

AttributeTypeDescription
seasonstringSeason year
roundslistList of rounds with metadata
driversobjectMap of driver codes to their progression data
seriesobjectPre-formatted data for charting libraries

Each entry in rounds contains:

FieldTypeDescription
roundstringRound number
race_namestringGrand Prix name
datestringRace date (YYYY-MM-DD)

Each entry in drivers (keyed by driver code) contains:

FieldTypeDescription
namestringDriver's full name
codestringThree-letter driver code
driverIdstringDriver identifier
points_by_roundlistPoints scored in each round
cumulative_pointslistRunning total of points after each round
wins_by_roundlistWins per round (1 or 0)
totalsobject{ points, wins } - season totals

The series object contains:

FieldTypeDescription
labelslistRound labels for chart X-axis (e.g., ["R1", "R2", ...])
serieslistArray of series objects for charting

Each entry in series.series contains:

FieldTypeDescription
keystringDriver code
namestringDriver's full name
datalistPoints per round
cumulativelistCumulative points per round
JSON Structure Example
{
"season": "2025",
"rounds": [
{ "round": "1", "race_name": "Bahrain Grand Prix", "date": "2025-03-02" },
{ "round": "2", "race_name": "Saudi Arabian Grand Prix", "date": "2025-03-09" },
{ "round": "3", "race_name": "Australian Grand Prix", "date": "2025-03-23" }
],
"drivers": {
"VER": {
"name": "Max Verstappen",
"code": "VER",
"driverId": "max_verstappen",
"points_by_round": [25, 18, 25],
"cumulative_points": [25, 43, 68],
"wins_by_round": [1, 0, 1],
"totals": {
"points": 68,
"wins": 2
}
},
"HAM": {
"name": "Lewis Hamilton",
"code": "HAM",
"driverId": "lewis_hamilton",
"points_by_round": [18, 25, 15],
"cumulative_points": [18, 43, 58],
"wins_by_round": [0, 1, 0],
"totals": {
"points": 58,
"wins": 1
}
}
},
"series": {
"labels": ["R1", "R2", "R3"],
"series": [
{
"key": "VER",
"name": "Max Verstappen",
"data": [25, 18, 25],
"cumulative": [25, 43, 68]
},
{
"key": "HAM",
"name": "Lewis Hamilton",
"data": [18, 25, 15],
"cumulative": [18, 43, 58]
}
]
}
}
Jinja2 Template Examples

Get a driver's total points:

{% set drivers = state_attr('sensor.f1_driver_points_progression', 'drivers') %}
{% if drivers and drivers.VER %}
VER total: {{ drivers.VER.totals.points }} points, {{ drivers.VER.totals.wins }} wins
{% endif %}

Get points scored in the last round:

{% set drivers = state_attr('sensor.f1_driver_points_progression', 'drivers') %}
{% if drivers and drivers.VER %}
{% set pts = drivers.VER.points_by_round %}
Last round: {{ pts[-1] if pts else 0 }} points
{% endif %}

List rounds with names:

{% set rounds = state_attr('sensor.f1_driver_points_progression', 'rounds') %}
{% for r in rounds %}
R{{ r.round }}: {{ r.race_name }} ({{ r.date }})
{% endfor %}

Calculate points gained in last 3 rounds:

{% set drivers = state_attr('sensor.f1_driver_points_progression', 'drivers') %}
{% set ver = drivers.VER %}
{% if ver %}
{% set last_3 = ver.points_by_round[-3:] | sum %}
VER last 3 rounds: {{ last_3 }} points
{% endif %}

Get driver with most wins:

{% set drivers = state_attr('sensor.f1_driver_points_progression', 'drivers') %}
{% set winner = drivers.values() | sort(attribute='totals.wins', reverse=true) | first %}
{% if winner %}
Most wins: {{ winner.code }} with {{ winner.totals.wins }}
{% endif %}
Chart Integration

The series attribute is pre-formatted for use with charting libraries like ApexCharts. See the Season Progression Charts example for a complete implementation.


Constructor Points Progression

sensor.f1_constructor_points_progression - Per‑round constructor points (including sprint) with cumulative series, suitable for charts.

State

  • Integer: number of rounds covered.

Example

12

Attributes

AttributeTypeDescription
seasonstringSeason year
roundslistList of rounds with metadata
constructorsobjectMap of constructor IDs to their progression data
seriesobjectPre-formatted data for charting libraries

Each entry in rounds contains:

FieldTypeDescription
roundstringRound number
race_namestringGrand Prix name
datestringRace date (YYYY-MM-DD)

Each entry in constructors (keyed by constructor ID) contains:

FieldTypeDescription
namestringTeam name
constructorIdstringConstructor identifier
points_by_roundlistPoints scored in each round
cumulative_pointslistRunning total of points after each round
wins_by_roundlistWins per round
totalsobject{ points, wins } - season totals

The series object contains:

FieldTypeDescription
labelslistRound labels for chart X-axis (e.g., ["R1", "R2", ...])
serieslistArray of series objects for charting

Each entry in series.series contains:

FieldTypeDescription
keystringConstructor ID
namestringTeam name
datalistPoints per round
cumulativelistCumulative points per round
JSON Structure Example
{
"season": "2025",
"rounds": [
{ "round": "1", "race_name": "Bahrain Grand Prix", "date": "2025-03-02" },
{ "round": "2", "race_name": "Saudi Arabian Grand Prix", "date": "2025-03-09" },
{ "round": "3", "race_name": "Australian Grand Prix", "date": "2025-03-23" }
],
"constructors": {
"red_bull": {
"name": "Red Bull Racing",
"constructorId": "red_bull",
"points_by_round": [44, 33, 40],
"cumulative_points": [44, 77, 117],
"wins_by_round": [1, 0, 1],
"totals": {
"points": 117,
"wins": 2
}
},
"ferrari": {
"name": "Ferrari",
"constructorId": "ferrari",
"points_by_round": [33, 44, 28],
"cumulative_points": [33, 77, 105],
"wins_by_round": [0, 1, 0],
"totals": {
"points": 105,
"wins": 1
}
},
"mclaren": {
"name": "McLaren",
"constructorId": "mclaren",
"points_by_round": [28, 25, 33],
"cumulative_points": [28, 53, 86],
"wins_by_round": [0, 0, 0],
"totals": {
"points": 86,
"wins": 0
}
}
},
"series": {
"labels": ["R1", "R2", "R3"],
"series": [
{
"key": "red_bull",
"name": "Red Bull Racing",
"data": [44, 33, 40],
"cumulative": [44, 77, 117]
},
{
"key": "ferrari",
"name": "Ferrari",
"data": [33, 44, 28],
"cumulative": [33, 77, 105]
}
]
}
}
Jinja2 Template Examples

Get a team's total points:

{% set constructors = state_attr('sensor.f1_constructor_points_progression', 'constructors') %}
{% if constructors and constructors.red_bull %}
Red Bull total: {{ constructors.red_bull.totals.points }} points
{% endif %}

Get points scored in the last round:

{% set constructors = state_attr('sensor.f1_constructor_points_progression', 'constructors') %}
{% set ferrari = constructors.ferrari %}
{% if ferrari %}
{% set pts = ferrari.points_by_round %}
Ferrari last round: {{ pts[-1] if pts else 0 }} points
{% endif %}

Calculate gap between two teams:

{% set c = state_attr('sensor.f1_constructor_points_progression', 'constructors') %}
{% if c.red_bull and c.ferrari %}
{% set gap = c.red_bull.totals.points - c.ferrari.totals.points %}
Red Bull leads Ferrari by {{ gap }} points
{% endif %}

Get team with most wins:

{% set constructors = state_attr('sensor.f1_constructor_points_progression', 'constructors') %}
{% set winner = constructors.values() | sort(attribute='totals.wins', reverse=true) | first %}
{% if winner %}
Most wins: {{ winner.name }} with {{ winner.totals.wins }}
{% endif %}

List all teams by points:

{% set constructors = state_attr('sensor.f1_constructor_points_progression', 'constructors') %}
{% for c in constructors.values() | sort(attribute='totals.points', reverse=true) %}
{{ c.name }}: {{ c.totals.points }} pts
{% endfor %}
Chart Integration

The series attribute is pre-formatted for use with charting libraries like ApexCharts. See the Season Progression Charts example for a complete implementation.

Race Week

binary_sensor.f1_race_week - True when the next race is scheduled in the current calendar week.

State (on/off)

  • on during weeks containing the next race date; otherwise off.

Example

on

Attributes

AttributeTypeDescription
days_until_next_racenumberDays from today to the next race date
next_race_namestringGrand Prix name of the next race

Sprint Results

Classification results for all sprint sessions in the current season.

State

  • Integer: number of sprint races with results, or 0 when none are available.

Example

6

Attributes

AttributeTypeDescription
raceslistList of sprint races with results

Each entry in races contains:

FieldTypeDescription
roundstringRound number
race_namestringGrand Prix name
resultslistList of classification results

Each entry in results contains:

FieldTypeDescription
numberstringCar number
positionstringFinal position
pointsstringPoints awarded
statusstringFinish status
driverobject{ permanentNumber, code, givenName, familyName }
constructorobject{ name }

FIA Decision Documents

BETA

This sensor is in BETA. Data structure and availability may change as the upstream feed and parsing are refined.

Collects FIA decisions and official documents for the current race weekend.

State

  • Integer: latest document number (e.g., 27 for "Doc 27"), or 0 when none are available.

Example

27

Attributes

AttributeTypeDescription
namestringDocument title (e.g., "Doc 27 - Penalty Decision")
urlstringURL to the FIA document
publishedstringISO‑8601 timestamp when the document was published

The sensor maintains a history of up to 100 documents internally. When a new race weekend starts (detected by "Document 1"), the history is reset.


Season Calendar

calendar.f1_race_season_calendar - Native Home Assistant calendar showing every session of the current Formula 1 season.

The calendar appears in the Home Assistant calendar panel and shows each session as a separate event: Practice 1, Practice 2, Practice 3, Qualifying, Sprint Qualifying, Sprint, and Race. On sprint weekends, Practice 3 is replaced by Sprint Qualifying and Sprint.

State

  • on when a session is currently in progress; otherwise off.

Event fields

FieldDescription
summarySession name, e.g. "Monaco Grand Prix - Qualifying"
descriptionRound context, e.g. "Round 7 of the 2025 Formula 1 Season"
locationCircuit name, city, and country
startSession start time (UTC)
endEstimated session end time (UTC)

Estimated session durations

SessionDuration
Practice 160 min
Practice 260 min
Practice 360 min
Qualifying60 min
Sprint Qualifying45 min
Sprint35 min
Race120 min
info

Session end times are estimated based on standard session lengths. Actual sessions may run shorter or longer due to red flags or delays.

Automation example

Trigger an automation 30 minutes before any F1 session starts:

alias: F1 - Session Starting Soon
description: Notify before any F1 session begins
trigger:
- platform: calendar
event: start
entity_id: calendar.f1_season
offset: "-00:30:00"
action:
- service: notify.persistent_notification
data:
title: "F1 Session Starting Soon"
message: "{{ trigger.calendar_event.summary }} starts in 30 minutes"
mode: single
tip

The calendar entity complements sensor.f1_current_season. Use the sensor when you need race data in templates and attributes. Use the calendar when you want a visual schedule or calendar-based automations.