NFL game sensor (scores, possession, etc)

GOT IT. It works with just human color name. RGB value isnt working. Thanks for all your help though !

How did you pass the human color name into the automation?

Is there anyway to have the script converty the array of hex values into something the automation can read or successfully pass along?

I too am using LIFX bulbs.

Using @gonzotek’s work above, you can set the r, g, b values using templates:

red: '{{ state_attr(team,''team_colors'')[1][1:3] |int(0,base=16)}}'
green: '{{ state_attr(team,''team_colors'')[1][3:5] |int(0,base=16)}}'
blue: '{{ state_attr(team,''team_colors'')[1][5:7] |int(0,base=16)}}'

So using @D34DC3N73R’s pulse service call as an example, you could do:

- service: lifx.effect_pulse
    data_template:
      mode: strobe
      brightness: 255
      rgb_color:
      - {{ state_attr(sensor.nfl,'team_colors')[0][1:3] |int(0,base=16)}}
      - {{ state_attr(sensor.nfl,'team_colors')[0][3:5] |int(0,base=16)}}
      - {{ state_attr(sensor.nfl,'team_colors')[0][5:7] |int(0,base=16)}}
      period: 0.5
      cycles: 20
    target:
      entity_id: light.family_room_lamp

I haven’t tested that, but it should work. If you wanted to flash your team’s secondary color you would change the [0] to [1] on all three lines.

I believe the attribute is team_colors_rbg correct? It should actually be RGB and not RBG. Meaning the middle value is green, not blue and the attribute is named incorrectly.

Also, you can use the RGB color array by itself without splitting the values.

service: lifx.effect_pulse
data:
  power_on: true
  mode: strobe
  brightness: 255
  cycles: 20
  period: 0.5
  rgb_color: "{{ states.sensor.nfl.attributes.team_colors_rbg[0] }}"
target:
  entity_id: light.lamp

With all that said, I find the color accuracy of the lifx bulbs a little off, and prefer to set the color for my team manually. But if you want it to dynamically change this would be the easiest way.

1 Like

Ah - Unfortunately, neither of the Superbowl teams are my team! I’m just looking to have the lights flash the primary colors of whichever team scores.

In this case, I was trying to use the blueprint found here:

After updating it to use the “teamtracker” integration as opposed to the original “nfl” integration, it throws the error:

Stopped because an error was encountered at February 11, 2023 at 4:05:20 PM (runtime: 0.01 seconds)

None for dictionary value @ data[‘rgb_color’]

I’d originally thought it was because the teamtracker integration uses the attributes “team_colors” and “opponents_colors” as opposed to team_colors_rgb and opponent_colors_rgb, but correcting those to reflect the proper attribute names didn’t seem to resolve anything.

The RGB color options were added to this integration after team tracker forked it, and it doesn’t look like team tracker has included those. TT only has hex values for the colors. The LIFX integration doesn’t allow hex values so rgb and color_name are your only options.

Here’s an example of a score automation that uses CSS color names.

- alias: NFL - Team Score
  trigger:
  - platform: state
    entity_id:
    - sensor.nfl
    attribute: team_score
  condition:
  - condition: state
    entity_id: sensor.nfl
    state: IN
  - condition: template
    value_template: '{{ (trigger.to_state.attributes.team_score | int) >= (trigger.from_state.attributes.team_score
      | int + 1) }}'
  - condition: template
    value_template: '{{ (trigger.to_state.attributes.team_score | int) <= (trigger.from_state.attributes.team_score
      | int + 6) }}'
  - condition: template
    value_template: '{{ (trigger.to_state.attributes.team_score | int) != (trigger.from_state.attributes.team_score
      | int)}}'
  action:
  - service: lifx.effect_pulse
    data:
      mode: strobe
      brightness: 255
      color_name: red #CSS COLOR NAME HERE
      period: 0.5
      cycles: 20
    target:
      entity_id: light.lamp
  mode: parallel

The conditions are just added to cut down on false positives if the integration drops for a moment. For the lights to flash with either team, you could add either one of the teams as the integration sensor and then a second automation similar to this, but use opponent_score in place of team_score.

If anyone else is running Hyperion, I set something up to display team (and opponent) colors in an effect using the RGB colors from the sensor.

in configuration.yaml (replace ip with the ip of your hyperion instance)

shell_command:
  hyperion_team_score: curl "http://192.168.0.231:8090/json-rpc" -X POST -d '{"command":"effect", "effect":{"name":"Police Lights Single", "args":{"color_one":'"{{ color_1 }}"', "color_two":'"{{ color_2 }}"', "colors_count":'"{{ color_length }}"'}}, "duration":10000, "priority":1, "origin":"Home Assistant"}'

and this is an automation that’s set up to flash a lifx bulb and trigger that shell script with the colors from each team

- id: '1676166925172'
  alias: Super Bowl Score Flash
  description: ''
  trigger:
  - platform: state
    entity_id:
    - sensor.super_bowl
    attribute: team_score
    id: '0'
  - platform: state
    entity_id:
    - sensor.super_bowl
    attribute: opponent_score
    id: '1'
  condition:
  - condition: or
    conditions:
    - condition: and
      conditions:
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.team_score | int) >= (trigger.from_state.attributes.team_score | int + 1) }}'
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.team_score | int) <= (trigger.from_state.attributes.team_score | int + 6) }}'
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.team_score | int) != (trigger.from_state.attributes.team_score | int)}}'
    - condition: and
      conditions:
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.opponent_score | int) >= (trigger.from_state.attributes.opponent_score | int + 1) }}'
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.opponent_score | int) <= (trigger.from_state.attributes.opponent_score | int + 6) }}'
      - condition: template
        value_template: '{{ (trigger.to_state.attributes.opponent_score | int) != (trigger.from_state.attributes.opponent_score | int)}}'
  - condition: state
    entity_id: sensor.super_bowl
    state: IN
  action:
  - service: lifx.effect_pulse
    data:
      period: 0.5
      cycles: 20
      power_on: true
      mode: strobe
      brightness_pct: 100
      rgb_color: >
        {% if (trigger.id == '0') %}
          {{ states.sensor.super_bowl.attributes.team_colors_rbg[0] }}
        {% else %}
          {{ states.sensor.super_bowl.attributes.opponent_colors_rgb[0] }}
        {% endif %}
    target:
      entity_id: light.lamp
  - if:
    - condition: trigger
      id: '0'
    then:
    - service: shell_command.hyperion_team_score
      data_template:
        color_1: '{{ trigger.to_state.attributes.team_colors_rbg[0] }}'
        color_2: '{{ trigger.to_state.attributes.team_colors_rbg[1] }}'
        color_length: 120
    else:
    - service: shell_command.hyperion_team_score
      data_template:
        color_1: '{{ trigger.to_state.attributes.opponent_colors_rgb[0] }}'
        color_2: '{{ trigger.to_state.attributes.opponent_colors_rgb[1] }}'
        color_length: 120
  mode: parallel

The colors spin around the screen, but you could adapt the command to work with any effect that accepts colors.

2 Likes

the attribute is named incorrectly

Guess that slipped through the code review :grimacing:

My NFL Integration started erroring out recently. If I try to follow the link for documentation or known issues on github, it fails. The best I can tell is that it is trying to get to ha_nfl instead of ha-nfl (underscore vs. a dash). Would this also lead to the integration not loading with the following log entry? Or is this just normal at this point in between seasons?

Error setting up entry Green Bay Packers for nfl
Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 387, in async_setup
result = await component.async_setup_entry(hass, self)
File “/config/custom_components/nfl/init.py”, line 66, in async_setup_entry
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
AttributeError: ‘ConfigEntries’ object has no attribute ‘async_setup_platforms’

Some work needs to happen on the integration. See this for details. hass.config_entries.async_setup_platforms is scheduled to be removed in 2023.03 · Issue #37 · zacs/ha-nfl · GitHub

Should be fixed now, thanks for the PR @D34DC3N73R! I’ll cut a release shortly.

I’m not sure why the pytest is failing. Ran out of time to work on it today, but the actual async issue is resolved with that PR.

No worries. If you have time to look into it that’s appreciated. Otherwise I can take a look one night this week.

If anyone’s interested, I made a dashboard with dynamic cards for the whole league to follow all the games.
In addition to ha-nfl and ha-nfl-card, the custom card auto-entities is also needed.

2 Likes

I have a issue setup the NFL Game Score Light Color Flasher
I ran a test via the Automation and got a error of :
Stopped because an error was encountered Error rendering data template: UndefinedError: 'dict object' has no attribute 'entity_id'

here are some of the screenshots

Can someone please assist me on what I am doing wrong
thank you

You can’t test via the automation editor because the automation depends on trigger data that has to come from actual entity changes. Once it’s set up, it’s possible to manipulate the entity attributes via the States tab in Developer Tools to test. The sensor state has to be set to IN first (it is most likely PRE at the moment of writing this). Then you can change the team_score attribute of the nfl entity (and opponent_score if you’re also activating on it).

Thank you!

I see this error occasionally in my logs:

This causes the entity to show as offline when it occurs. Anyone else run into this?

Leads me to think maybe the ESPN JSON went away temporarily. It shows up now for me. Did it fix itself for you?

Yes, it’s intermittent. Looking at the logs it’s happened 75 times in the past 2 weeks. I first noticed when I went to view the score in my dashboard and it wasn’t available. I wasn’t sure if it’s something in my system or the ESPN API.