Flow Details
NFL Team Scoreboard for AWTRIX Light
Prerequisites
Before using this blueprint, ensure that you have HACS installed. You also need the ha-teamtracker integration here.
Special Thanks to RobG This would not be possible without him
Get the Awtrix Light Companion App for iOS/Android
blueprint:
name: "AWTRIX - NFL Team Scoreboard"
author: Hank_the_Tank
description: >
# NFL Team Scoreboard for AWTRIX Light
## Screenshots
![](https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/screenshot.svg) - ![](https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/screenshot2.svg) - ![](https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/screenshot3.svg)
## Prerequisites
**Before** using this blueprint, ensure that you have **HACS** installed. You also need the ha-teamtracker integration [here](https://github.com/vasqued2/ha-teamtracker).
## Credits
to Blueforcer for Awtrix Light
If you want to support his hard work in developing awtrix light, please consider to buy your Ulanzi clock with his affiliate links
[EU] [link](https://www.ulanzi.de/products/ulanzi-pixel-smart-uhr-2882?ref=28e02dxl)
[US] [link](https://www.ulanzi.com/products/ulanzi-pixel-smart-clock-2882?ref=28e02dxl)
If you already have hundreds of clocks, there are more ways to support him.
[Github](https://github.com/Blueforcer/awtrix-light#support)
wanna join the [Darkside](https://discord.gg/a3n8spsn)?
## Get the Awtrix Light Companion App for iOS/Android
<a href='https://play.google.com/store/apps/details?id=de.awtrix.light&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'>
<img style="width: 20%; height: auto;" alt='Get it on Google Play' src='https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/playstore_button.png'/>
</a>
<a href='https://apps.apple.com/de/app/awtrix-light/id6459478110'>
<img style="width: 20%; height: auto;" alt='Get it on Google Play' src='https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/appstore_button.png'/>
</a>
**Special Thanks to RobG** This would not be possible without him
**Thanks in advance**
domain: automation
input:
awtrix:
name: AWTRIX Device
description: Select the Awtrix 3
selector:
device:
integration: mqtt
manufacturer: Blueforcer
model: AWTRIX 3
multiple: true
appname:
name: Awtrix Application name
description: >-
This is the app name listed in the MQTT topic - it should be unique
default: "nflteamscore"
selector:
text:
message_duration:
name: Message Duration ⏱️
description: >-
How long should the message remain on the screen (in seconds).
selector:
number:
min: 0
max: 300
unit_of_measurement: "sec"
default: 15
my_sensor:
name: Football Sensor
description: Select your Football Team Sensor
selector:
entity:
filter:
- integration: teamtracker
source_url: https://raw.githubusercontent.com/fettesb/Homeassistant_blueprints/main/Awtrix%20NFL%20Team%20Scoreboard/awtrix_nfl_team_scoreboard.yaml
variables:
device_ids: !input awtrix
devices: >-
{% macro get_device(device_id) %}
{{ states((device_entities(device_id) | select('search','device_topic') | list)[0] | default('unknown')) }}
{% endmacro %}
{% set ns = namespace(devices=[]) %}
{% for device_id in device_ids %}
{% set device=get_device(device_id)|replace(' ','')|replace('\n','') %}
{% set ns.devices = ns.devices + [ device ] %}
{% endfor %}
{{ ns.devices | reject('match','unavailable|unknown') | list }}
appname: !input appname
my_sensor: !input my_sensor
message_duration: !input message_duration
team_colors_0: "{{ state_attr(my_sensor, 'team_colors')[0] }}"
team_colors_1: "{{ state_attr(my_sensor, 'team_colors')[1] }}"
opponent_colors_0: "{{ state_attr(my_sensor, 'opponent_colors')[0] }}"
opponent_colors_1: "{{ state_attr(my_sensor, 'opponent_colors')[1] }}"
team_score: >-
{% set raw_team_score = state_attr(my_sensor, 'team_score') %}
{% if raw_team_score|int < 10 %}
{{ "0" + raw_team_score|string }}
{% else %}
{{ raw_team_score|string }}
{% endif %}
opponent_score: >-
{% set raw_opponent_score = state_attr(my_sensor, 'opponent_score') %}
{% if raw_opponent_score|int < 10 %}
{{ "0" + raw_opponent_score|string }}
{% else %}
{{ raw_opponent_score|string }}
{% endif %}
first_quarter: >-
{"dp":[12,7,"#ffffff"]},
{"dp":[14,7,"#5F5F5F"]},
{"dp":[17,7,"#5F5F5F]},
{"dp":[19,7,"#5F5F5F]},
second_quarter: >-
{"dp":[12,7,"#ffffff"]},
{"dp":[14,7,"#ffffff"]},
{"dp":[17,7,"#5F5F5F]},
{"dp":[19,7,"#5F5F5F]},
third_quarter: >-
{"dp":[12,7,"#ffffff"]},
{"dp":[14,7,"#ffffff"]},
{"dp":[17,7,"#ffffff"]},
{"dp":[19,7,"#5F5F5F"]},
fourth_quarter: >-
{"dp":[12,7,"#ffffff"]},
{"dp":[14,7,"#ffffff"]},
{"dp":[17,7,"#ffffff"]},
{"dp":[19,7,"#ffffff"]},
payload_switch: >-
{
"name" : "{{ appname }}"
}
payload_game_start: >-
{
"draw":[
{"df":[0,0,16,8,"{{ team_colors_0 }}"]},
{"df":[16,0,16,8,"{{ opponent_colors_0 }}"]},
{"dl":[1,0,1,7,"{{ team_colors_1 }}"]},
{"dl":[3,0,3,7,"{{ team_colors_1 }}"]},
{"dl":[28,0,28,7,"{{ opponent_colors_1 }}"]},
{"dl":[30,0,30,7,"{{ opponent_colors_1 }}"]},
{{ first_quarter }}
{"dt":[7, 1, "{{ team_score }}",[255,255,255]]},
{"dt":[18, 1, "{{ opponent_score }}",[255,255,255]]},
{"dl":[15,3,16,3,"#ffffff"]}
],
"duration": {{ message_duration }}
}
payload_second_quarter: >-
{
"draw":[
{"df":[0,0,16,8,"{{ team_colors_0 }}"]},
{"df":[16,0,16,8,"{{ opponent_colors_0 }}"]},
{"dl":[1,0,1,7,"{{ team_colors_1 }}"]},
{"dl":[3,0,3,7,"{{ team_colors_1 }}"]},
{"dl":[28,0,28,7,"{{ opponent_colors_1 }}"]},
{"dl":[30,0,30,7,"{{ opponent_colors_1 }}"]},
{{ second_quarter }}
{"dt":[7, 1, "{{ team_score }}",[255,255,255]]},
{"dt":[18, 1, "{{ opponent_score }}",[255,255,255]]},
{"dl":[15,3,16,3,"#ffffff"]}
],
"duration": {{ message_duration }}
}
payload_third_quarter: >-
{
"draw":[
{"df":[0,0,16,8,"{{ team_colors_0 }}"]},
{"df":[16,0,16,8,"{{ opponent_colors_0 }}"]},
{"dl":[1,0,1,7,"{{ team_colors_1 }}"]},
{"dl":[3,0,3,7,"{{ team_colors_1 }}"]},
{"dl":[28,0,28,7,"{{ opponent_colors_1 }}"]},
{"dl":[30,0,30,7,"{{ opponent_colors_1 }}"]},
{{ third_quarter }}
{"dt":[7, 1, "{{ team_score }}",[255,255,255]]},
{"dt":[18, 1, "{{ opponent_score }}",[255,255,255]]},
{"dl":[15,3,16,3,"#ffffff"]}
],
"duration": {{ message_duration }}
}
payload_fourth_quarter: >-
{
"draw":[
{"df":[0,0,16,8,"{{ team_colors_0 }}"]},
{"df":[16,0,16,8,"{{ opponent_colors_0 }}"]},
{"dl":[1,0,1,7,"{{ team_colors_1 }}"]},
{"dl":[3,0,3,7,"{{ team_colors_1 }}"]},
{"dl":[28,0,28,7,"{{ opponent_colors_1 }}"]},
{"dl":[30,0,30,7,"{{ opponent_colors_1 }}"]},
{{ fourth_quarter }}
{"dt":[7, 1, "{{ team_score }}",[255,255,255]]},
{"dt":[18, 1, "{{ opponent_score }}",[255,255,255]]},
{"dl":[15,3,16,3,"#ffffff"]}
],
"duration": {{ message_duration }}
}
trigger:
- platform: state
entity_id:
- !input my_sensor
to: IN
id: Game Start
- platform: state
entity_id:
- !input my_sensor
to: POST
id: Game End
- platform: state
entity_id:
- !input my_sensor
attribute: team_score
id: Team Score Change
- platform: state
entity_id:
- !input my_sensor
attribute: opponent_score
id: Opponent Score Change
- platform: state
entity_id:
- !input my_sensor
attribute: quarter
id: Quarter Change
condition: []
action:
- repeat:
for_each: "{{ devices }}"
sequence:
- choose:
- conditions:
- condition: trigger
id:
- Game Start
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_game_start }}"
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/switch"
payload: "{{ payload_switch }}"
- conditions:
- condition: trigger
id:
- Quarter Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 1
below: 3
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_second_quarter }}"
- conditions:
- condition: trigger
id:
- Quarter Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 2
below: 4
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_third_quarter }}"
- conditions:
- condition: trigger
id:
- Quarter Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 3
below: 5
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_fourth_quarter }}"
- conditions:
- condition: trigger
id:
- Team Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 0
below: 2
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_game_start }}"
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/switch"
payload: "{{ payload_switch }}"
- conditions:
- condition: trigger
id:
- Team Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 1
below: 3
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_second_quarter }}"
- conditions:
- condition: trigger
id:
- Team Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 2
below: 4
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_third_quarter }}"
- conditions:
- condition: trigger
id:
- Team Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 3
below: 5
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_fourth_quarter }}"
- conditions:
- condition: trigger
id:
- Opponent Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 0
below: 2
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_game_start }}"
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/switch"
payload: "{{ payload_switch }}"
- conditions:
- condition: trigger
id:
- Opponent Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 1
below: 3
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_second_quarter }}"
- conditions:
- condition: trigger
id:
- Opponent Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 2
below: 4
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_third_quarter }}"
- conditions:
- condition: trigger
id:
- Opponent Score Change
- condition: numeric_state
entity_id: !input my_sensor
attribute: quarter
above: 3
below: 5
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
payload: "{{ payload_fourth_quarter }}"
- repeat:
for_each: "{{ devices }}"
sequence:
- choose:
- conditions:
- condition: trigger
id:
- Game End
sequence:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: "{{ repeat.item }}/custom/{{ appname }}"
mode: restart
-- Flow first published on August 19, 2023, last updated on March 13, 2024 at 08:43.