Hi @Braakie .
Thanks so much for sharing your code.
The cards are great.
I’ve added some into my dashboard.
I’ve aligned them to the left , just for personal preference I hope you don’t mind ![]()
No problem, customize it the way you want ![]()
Looks good!
This a great add-on especially with the track status flags, I have it to trigger my govee lights but for some reason the govee lights change before the flags come up on the screen, watching via f1.tv on shield tv app
Hi @wints
All TV broadcasts and streaming services introduce a delay compared to live track data, typically anywhere between 15–90 seconds. That’s why your lights change before you see the flag appear on screen.
You probably haven’t configured the delay in the setup yet, which aligns the integration with your specific broadcast. You can adjust this in seconds under Live update delay.
For reference:
- Broadcast TV (satellite/cable/terrestrial): ~5–10s delay
- Streaming services (like F1 TV, Viaplay, etc.): ~20–45s delay, sometimes more
- Sports cable/OTT providers: 45–60s or more depending on provider
Tip: You can easily measure your own delay. A session always starts exactly at its scheduled time (e.g. FP3 at 10:30). If you check a reference clock (like an atomic clock) and compare it to when the session actually starts on your TV/stream, you’ll see the difference. For me, Viaplay in Sweden shows the session about 30 seconds later, so I set 30 seconds in the config and now my lights match the broadcast perfectly.
Se the Live data setup in the documentation ![]()
Brilliant, thanks for the reply I’m pretty new to all this Home Assistant stuff lol. I did try setting the delay before posting here (should have said that in my first post) but can’t have set it enough, i’ll try again but i@ll miss the quily today as i’m at work. This automation will only work on live streams and not on watch later stuff? Thanks again
It’s only for live sessions
Many thanks for your help and this great Automationv ![]()
I need to install a LED-list behind the TV ![]()

Release 2.1.0
This release introduces new live data sensors, extended attributes, and a critical fix for incomplete season results.
New Features
Live Data Enhancements
-
Added
sensor.f1_track_weather
Provides current on-track weather during an active session. Updates approximately every minute with attributes such as:- Air temperature
- Track temperature
- Rainfall
- Wind speed
-
Added
sensor.f1_race_lap_count
Shows the current lap number during an active race.
(Note: does not update during practice or qualifying sessions) -
Added Race Control messages as events
Published underf1_sensor_race_control_event.
Examples include:- Flag changes (CLEAR, YELLOW, RED, SC, VSC)
- Steward notes
- Incident reports
Bug Fixes
- Fixed #62 — Season results now correctly include all completed races for the current season. Previously, only partial results were shown.
Improvements
- Extended attributes for
sensor.f1_last_race_results(#92)
Now includes more detailed race result information, making it easier to build automations and dashboards.
Notes
- Live sensors only update shortly before, during, and shortly after a session (practice, qualifying, sprint, race). Outside of these times, they will not update.
- Race Control is currently only available as events, but will in the future also be published to a sensor.
Thanks to everyone who tested, reported, and contributed! ![]()
Hey guys, thanks for the work on this. I’m using this with hue light and my awtrix clock. Didn’t test it live so i can’t wait for the next race.
alias: 🏁🏎F1 live sensor - AWTRIX/HUE
description: >-
Deze automatisering past de kleur van het sfeerlicht achter de TV aan op basis
van de F1 track status, zoals gele, rode en groene vlaggen, tijdens een
actieve Formule 1 sessie wanneer de TV aanstaat. Daarnaast wordt de status van de baan weergegeven op een AWTRIX klok.
triggers:
- trigger: state
entity_id:
- sensor.f1_track_status
to: CLEAR
id: CLEAR
- trigger: state
entity_id:
- sensor.f1_track_status
to: YELLOW
id: YELLOW
- trigger: state
entity_id:
- sensor.f1_track_status
to: VSC
id: VSC
- trigger: state
entity_id:
- sensor.f1_track_status
to: VSC_ENDING
id: VSC_ENDING
- trigger: state
entity_id:
- sensor.f1_track_status
to: SC
id: SC
- trigger: state
entity_id:
- sensor.f1_track_status
to: RED
id: RED
conditions:
- condition: and
conditions:
- condition: state
entity_id: media_player.lg_webos_tv_oled55a16la
state: "on"
enabled: true
- condition: not
conditions:
- condition: state
entity_id: sensor.f1_session_status
state: ended
enabled: true
enabled: true
actions:
- choose:
- conditions:
- condition: trigger
id:
- YELLOW
sequence:
- action: light.turn_on
metadata: {}
data:
rgb_color:
- 250
- 209
- 5
brightness_pct: 100
target:
entity_id:
- light.lamp_tv
- action: awtrix.notification
metadata: {}
data:
text: YELLOW
device: 79b852140a7d9f4a718e10be3170dcba
hold: true
center: true
effect: PlasmaCloud
effectSettings:
speed: 3
palette: Pal001y
blend: true
color:
- 255
- 255
- 255
fadeText: 2000
- delay:
hours: 0
minutes: 0
seconds: 20
milliseconds: 0
- action: button.press
target:
entity_id:
- button.awtrix_f4d14c_dismiss_notification
device_id: []
area_id: []
data: {}
- conditions:
- condition: trigger
id:
- VSC
- SC
sequence:
- action: light.turn_on
metadata: {}
data:
rgb_color:
- 250
- 209
- 5
brightness_pct: 100
target:
entity_id: light.lamp_tv
- action: awtrix.notification
metadata: {}
data:
text: SC
device: 79b852140a7d9f4a718e10be3170dcba
hold: true
center: true
effect: PlasmaCloud
effectSettings:
speed: 3
palette: Pal001y
blend: true
color:
- 255
- 255
- 255
fadeText: 2000
- delay:
hours: 0
minutes: 0
seconds: 20
milliseconds: 0
- action: button.press
target:
entity_id:
- button.awtrix_f4d14c_dismiss_notification
device_id: []
area_id: []
data: {}
- conditions:
- condition: trigger
id:
- VSC_ENDING
sequence:
- action: light.turn_on
metadata: {}
data:
rgb_color:
- 250
- 209
- 5
brightness_pct: 100
target:
entity_id: light.lamp_tv
- action: awtrix.notification
metadata: {}
data:
text: VSC-END
device: 79b852140a7d9f4a718e10be3170dcba
hold: true
center: true
effect: PlasmaCloud
effectSettings:
speed: 3
palette: Pal001y
blend: true
color:
- 255
- 255
- 255
fadeText: 2000
- delay:
hours: 0
minutes: 0
seconds: 20
milliseconds: 0
- action: button.press
target:
entity_id:
- button.awtrix_f4d14c_dismiss_notification
device_id: []
area_id: []
data: {}
- conditions:
- condition: trigger
id:
- RED
sequence:
- action: light.turn_on
metadata: {}
data:
rgb_color:
- 255
- 0
- 0
brightness_pct: 100
target:
entity_id: light.lamp_tv
- action: awtrix.notification
metadata: {}
data:
text: RED
device: 79b852140a7d9f4a718e10be3170dcba
hold: true
center: true
effect: PlasmaCloud
effectSettings:
speed: 3
palette: Pal001r
blend: true
color:
- 255
- 255
- 255
fadeText: 2000
- delay:
hours: 0
minutes: 0
seconds: 20
milliseconds: 0
- action: button.press
target:
entity_id:
- button.awtrix_f4d14c_dismiss_notification
device_id: []
area_id: []
data: {}
- conditions:
- condition: trigger
id:
- CLEAR
sequence:
- action: light.turn_on
metadata: {}
data:
rgb_color:
- 4
- 255
- 0
brightness_pct: 100
target:
entity_id: light.lamp_tv
- action: awtrix.notification
metadata: {}
data:
text: CLEAR
device: 79b852140a7d9f4a718e10be3170dcba
hold: true
center: true
effect: PlasmaCloud
effectSettings:
speed: 3
palette: Pal001g
blend: true
color:
- 255
- 255
- 255
fadeText: 2000
- delay:
hours: 0
minutes: 0
seconds: 20
milliseconds: 0
- action: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.lamp_tv
- action: button.press
target:
entity_id:
- button.awtrix_f4d14c_dismiss_notification
device_id: []
area_id: []
data: {}
mode: single




It would be amazing to combine this integration with iDotMatrix 32x32 - cheap 32px dot screen (Help getting idotmatrix working in HA - #4 by jonaseymour).
I can already picture those pixel messages – VSC, SC, or even a flashing yellow flag and a glowing red one.
The intergration itself is only providing sensor data…?
Yes, what els should it provide? ![]()
I was responding to @Rad-T but i see my quote has failed ![]()
Aha, ok ![]()
You nere yo post info about your blueprint here @EvertJob
Yeah people, I’ve created a simple blueprint that can be setup in less than 15 seconds and it will control you’re lights based on the data that @Stimo is delivering with his addon!
Check it here!
@Stimo thanks for this plugin and for approving the pull requests so the blueprint can be shared with other users!
@EvertJob The blueprint is awesome and makes everything very easy to set up! I can really recommend it!
The only thing I’m missing is the ability to add a condition that a media player or TV is on/playing. That way, it only works when I am actually watching. If I’m home but not watching, the lights won’t reveal what’s happening.
NodeRed version of just that
[
{
"id": "state_node",
"type": "server-state-changed",
"z": "f1_track_status_flow",
"name": "F1 Track Status Changed",
"server": "fe680f5f50c63f40",
"version": 6,
"outputs": 1,
"exposeAsEntityConfig": "",
"entities": {
"entity": [
"sensor.f1_track_status"
],
"substring": [],
"regex": []
},
"outputInitially": true,
"stateType": "str",
"ifState": "",
"ifStateType": "str",
"ifStateOperator": "is",
"outputOnlyOnStateChange": true,
"for": 0,
"forType": "num",
"forUnits": "seconds",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": false,
"ignorePrevStateUnavailable": false,
"ignoreCurrentStateUnknown": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
}
],
"x": 140,
"y": 160,
"wires": [
[
"c0642fb4d64b507a"
]
]
},
{
"id": "4ca86985efe01874",
"type": "api-call-service",
"z": "f1_track_status_flow",
"name": "YELLOW",
"server": "fe680f5f50c63f40",
"version": 7,
"debugenabled": false,
"action": "light.turn_on",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"light.living_room_left",
"light.living_room_right"
],
"labelId": [],
"data": "{\"rgb_color\":[255,240,0]}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"blockInputOverrides": false,
"domain": "light",
"service": "turn_on",
"x": 740,
"y": 186.66666666666669,
"wires": [
[]
]
},
{
"id": "8b2bc8873432140f",
"type": "api-call-service",
"z": "f1_track_status_flow",
"name": "GREEN",
"server": "fe680f5f50c63f40",
"version": 7,
"debugenabled": false,
"action": "light.turn_on",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"light.living_room_left",
"light.living_room_right"
],
"labelId": [],
"data": "{\"rgb_color\":[0,255,0]}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"blockInputOverrides": false,
"domain": "light",
"service": "turn_on",
"x": 730,
"y": 133.33333333333334,
"wires": [
[]
]
},
{
"id": "5d8ceb72e28a6db9",
"type": "api-call-service",
"z": "f1_track_status_flow",
"name": "RED",
"server": "fe680f5f50c63f40",
"version": 7,
"debugenabled": false,
"action": "light.turn_on",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"light.living_room_left",
"light.living_room_right"
],
"labelId": [],
"data": "{\"rgb_color\":[255,0,0]}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"blockInputOverrides": false,
"domain": "light",
"service": "turn_on",
"x": 730,
"y": 240,
"wires": [
[]
]
},
{
"id": "edfb046c62ad054d",
"type": "api-call-service",
"z": "f1_track_status_flow",
"name": "CLEAR",
"server": "fe680f5f50c63f40",
"version": 7,
"debugenabled": false,
"action": "light.turn_on",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"light.living_room_left",
"light.living_room_right"
],
"labelId": [],
"data": "{\"rgb_color\":[255,255,255]}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"blockInputOverrides": false,
"domain": "light",
"service": "turn_on",
"x": 730,
"y": 80,
"wires": [
[]
]
},
{
"id": "9484f93ba614c795",
"type": "switch",
"z": "f1_track_status_flow",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "CLEAR",
"vt": "str"
},
{
"t": "eq",
"v": "GREEN",
"vt": "str"
},
{
"t": "eq",
"v": "YELLOW",
"vt": "str"
},
{
"t": "eq",
"v": "RED",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 4,
"x": 490,
"y": 160,
"wires": [
[
"edfb046c62ad054d"
],
[
"8b2bc8873432140f"
],
[
"4ca86985efe01874"
],
[
"5d8ceb72e28a6db9"
]
]
},
{
"id": "c0642fb4d64b507a",
"type": "api-current-state",
"z": "f1_track_status_flow",
"name": "Check",
"server": "fe680f5f50c63f40",
"version": 3,
"outputs": 2,
"halt_if": "on",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "media_player.apple_tv",
"state_type": "str",
"blockInputOverrides": true,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "entity"
}
],
"for": "0",
"forType": "num",
"forUnits": "minutes",
"override_topic": false,
"state_location": "payload",
"override_payload": "msg",
"entity_location": "data",
"override_data": "msg",
"x": 330,
"y": 160,
"wires": [
[
"9484f93ba614c795"
],
[]
]
},
{
"id": "fe680f5f50c63f40",
"type": "server",
"name": "Home Assistant",
"version": 5,
"addon": false,
"rejectUnauthorizedCerts": true,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30",
"areaSelector": "friendlyName",
"deviceSelector": "friendlyName",
"entitySelector": "friendlyName",
"statusSeparator": "at: ",
"statusYear": "hidden",
"statusMonth": "short",
"statusDay": "numeric",
"statusHourCycle": "h12",
"statusTimeFormat": "h:m",
"enableGlobalContextStore": true
},
{
"id": "fe42f2812f93a0ef",
"type": "global-config",
"env": [],
"modules": {
"node-red-contrib-home-assistant-websocket": "0.77.2"
}
}
]
This is awesome work!
I am very new to cards, etc. and got almost everything working, but I have some problems with the “Next Grand Prix” code:
- Where did you get type: custom:mod-card from? HACS maybe? I can’t seem to find it.
- Where is “sensor.f1_circuit_locatie” defined. I don’t find it in the F1 integration. How to fix this?
Many thanks for the great work.


