Formula 1 Racing sensor

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 :laughing:

1 Like

No problem, customize it the way you want :wink:

1 Like

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 :point_down:

2 Likes

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 :+1:

1 Like

I need to install a LED-list behind the TV :smile:

F1SensorFlag-ezgif.com-video-to-gif-converter (5)

5 Likes

:rocket: Release 2.1.0

This release introduces new live data sensors, extended attributes, and a critical fix for incomplete season results.


:sparkles: 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 under f1_sensor_race_control_event.
    Examples include:

    • Flag changes (CLEAR, YELLOW, RED, SC, VSC)
    • Steward notes
    • Incident reports

:bug: Bug Fixes

  • Fixed #62 — Season results now correctly include all completed races for the current season. Previously, only partial results were shown.

:wrench: 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.

:pushpin: 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! :raising_hands:

6 Likes

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

awtrix (4)
awtrix (3)
awtrix (2)
awtrix (5)

3 Likes

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? :thinking:

I was responding to @Rad-T but i see my quote has failed :wink:

1 Like

Aha, ok :smile:

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!

6 Likes

@EvertJob The blueprint is awesome and makes everything very easy to set up! I can really recommend it!

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

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.

2 Likes

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"
        }
    }
]
2 Likes

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:

  1. Where did you get type: custom:mod-card from? HACS maybe? I can’t seem to find it.
  2. 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.
1 Like