Team Radio
Latest team radio clip and rolling history (Replay Mode or F1TV Auth live timing). Use sensor.f1_team_radio 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.
Team radio transcription is experimental. It is tested with a Google Gemini AI Task entity, may change without notice, and sends audio to the AI provider only when you manually run the action. You are responsible for the provider API key, its terms, and any charges.
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
This entity stays registered in Home Assistant. It updates in Replay Mode and can update during live sessions when F1TV Auth is paired with a valid token and live team radio data is available.
Latest curated team radio clip with a rolling history. This is not the full raw driver radio feed; it follows the Team Radio clips Formula 1 publishes for the session.
State
- ISO-8601 timestamp of the most recent radio clip, or
unknownwhen none are available.
Example
2026-07-05T14:01:01+00:00
Attributes
| Attribute | Type | Description |
|---|---|---|
| utc | string | ISO-8601 timestamp of the radio clip |
| received_at | string | ISO-8601 timestamp when Home Assistant received the message |
| racing_number | string | Car number for the driver |
| path | string | Relative path to the audio file |
| clip_url | string | Full URL to the audio clip when available |
| sequence | number | Message counter for deduplication |
| transcription_status | string | processing, completed, or failed after the transcription action is used |
| transcription_text | string | Complete English transcript when available |
| transcription_segments | list | Spoken turns labeled anonymously as speaker A, B, or unknown |
| transcription_ai_task_entity_id | string | AI Task entity that produced the transcript |
| transcription_generated_at | string | ISO-8601 timestamp when transcription completed or failed |
| transcription_error | string | Short error message when transcription failed |
| raw_message | object | Raw team radio capture from the timing feed |
| history | list | Rolling list of recent radio clips, up to 20 items |
Each entry in history contains:
| Field | Type | Description |
|---|---|---|
| utc | string | ISO-8601 timestamp of the radio clip |
| racing_number | string | Car number for the driver |
| path | string | Relative path to the audio file |
| clip_url | string | Full URL to the audio clip when available |
Experimental transcription
The experimental f1_sensor.transcribe_team_radio action sends the latest published clip to an AI Task entity. It keeps the original English language and separates distinct voices into anonymous speakers A and B. It does not identify the driver or engineer.
Before you start
- Create a Gemini API key in Google AI Studio.
- In Home Assistant, open Settings > Devices & services > Add integration and add Google Gemini.
- Keep the recommended setup or create an AI Task subentry. Home Assistant then creates an entity similar to
ai_task.google_ai_task. - Wait for a live or replay team radio clip. Your team radio entity must have a
clip_urlattribute before it can be transcribed.
Only Google Gemini AI Task is supported for this experimental implementation. Other AI Task providers can be selected in the interface, but they have not been validated for MP3 transcription.
Transcribe the latest clip
Open Developer Tools > Actions, select Experimental: Transcribe team radio, and enter your own entity IDs:
action: f1_sensor.transcribe_team_radio
data:
entity_id: sensor.f1_team_radio
ai_task_entity_id: ai_task.google_ai_task
The status changes to processing while the request runs and then to completed or failed. If it fails, read transcription_error on the team radio entity.
View the result
The complete transcript is stored in transcription_text. Individual speaker turns are available in transcription_segments, where speakers are labeled A, B, or unknown.
The structured speaker turns can be displayed in a Markdown card:
type: markdown
content: |-
{% for segment in state_attr('sensor.f1_team_radio', 'transcription_segments') or [] %}
**{{ segment.speaker }}:** {{ segment.text }}
{% endfor %}
Cost, privacy, and limitations
The action is manual. F1 Sensor never sends team radio audio to an AI provider automatically. When you run it, the MP3 file is sent to the selected provider and may incur charges. Temporary local audio files are removed after the request.
A completed result is cached for the current clip while F1 Sensor remains loaded. Running the action again with force: false does not create another AI request for that clip. force: true deliberately sends a new request. The cache resets when the integration reloads or Home Assistant restarts.
Troubleshooting
- No team radio clip is currently available: wait for a new live or replay radio clip and confirm that
clip_urlis present. - Select an AI Task entity: choose the Google Gemini AI Task entity, not its conversation or speech-to-text entity.
- Transcription failed: check
transcription_error, then confirm that the Gemini API key is valid and that the configured account can use the selected model.