Sports Standings and Scores

Hi there, I have not so much experince with HA but step by step I get this to work but there is one thing that i can’t figure out at the moment and I hope somebody can me explain hoe to solve this.

I get this Error in the Dashboard and I think there something missig but I have no idea.

See the declutterinig-card documentation to see how to install it.

At the bottom of this link GitHub - custom-cards/decluttering-card: :broom: Declutter your lovelace configuration with the help of this card

Thanks for that, you are my hero.

I thought i already installed that, but I didn’t. I’ve installed it and now it works!

1 Like

After a lot of try and error and many readings I have it running with the modifications to my needs. I’ve integrated the German ‘1.Bundesliga’ and ‘2.Bundesliga’.

Now my Question is : Is it possible to colorize the fields that i marked in the above picture?
The first 4 cells are qualified for CL the next 2 cells are for EL and the last cells are going down to second league.

My card :

decluttering_templates:
  nhl_settings:
    card:
      type: custom:flex-table-card
      entities:
        include: sensor.team_tracker_bund2_tabelle
      columns:
        - name: '#'
          data: entries
          modify: x.stats[10].value
        - name: Mannschaft
          data: entries
          modify: |-
            if (typeof x.team.logos !== 'undefined')
              '<div><img src="' + x.team.logos[0].href + '" style="height:20px;vertical-align:middle;">&nbsp;' + x.team.displayName + '</div>'
            else
              '<div><span style="display: inline-block;width: 20px;"></span>&nbsp;' + x.team.displayName + '</div>'
        - name: Sp
          data: entries
          modify: x.stats[0].value
        - name: S
          data: entries
          modify: x.stats[7].value
        - name: U
          data: entries
          modify: x.stats[6].value
        - name: 'N'
          data: entries
          modify: x.stats[1].value
        - name: Tore
          data: entries
          modify: |-
            {
              x.stats[5].value +
              " : " +
              x.stats[4].value
            }
        - name: D
          data: entries
          modify: |-
            {
              x.stats[5].value -
              x.stats[4].value
            }
        - name: Pkt
          data: entries
          modify: x.stats[3].value
      strict: true
      css:
        tbody td:nth-child(8)+: 'width: 40px;'
        tbody tr td:nth-child(9): 'background-color: green; color: white;'	  

any ideas?

Perfect thanks @ehcah

Guessing you could just do an if else else on that ‘#’ column - similar to the rankings up and down code. If ‘#’<=4 do this, if 5-6 do this and if =>16 do this. And the do this is something @kbrown01 worked on last year on the flex-table card here:https://community.home-assistant.io/t/flex-table-card/461173/53

Thanks @kbrown01 that was my error. Moving them around 1 of the files didn’t have sensor: at the top - that fixed it.

I figured it out . I think it’s not the perfect solution but for my needs it’s enough.

type: custom:flex-table-card
entities:
  include: sensor.team_tracker_bund_tabelle
columns:
  - name: Rank
    data: entries
    modify: |-
      if (x.stats[10].value >=16 )
         '<div style="background-color: #ff2c0a;">' + x.stats[10].value + '</div>';
      else if (x.stats[10].value >=5 )
         '<div style="background-color: #202124;">' + x.stats[10].value + '</div>';
      else if (x.stats[10].value <=4 )
         '<div style="background-color: #ea8109;">' + x.stats[10].value + '</div>';         
    align: center
  - name: Logo
    data: entries

Not sure if you were able to add lines to your template per @bburwell 's share? This is what I do. Add more lines, change them, change the color - your choice. I only define the top 4 (nth-child 4) and bottom 2 (nth-child 16).

  bundesliga_settings:
    card:
      type: custom:flex-table-card
      title: '[[title]]'
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;'
        tbody tr td:first-child: 'width: 1%;'
        tbody tr td:nth-child(2): 'width: 9%;'
        tbody tr td:nth-child(n+3): 'width: 3%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
        tbody tr:nth-child(4): 'border-bottom: 1px solid dodgerblue!important;'
        tbody tr:nth-child(16): 'border-bottom: 1px solid crimson!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }

@ehcah nice. Do you have a github page? I was going to start building out MLS and UEFA but it looks like you already have that built. Would love to copy those files, sensors, templates, etc. and pay you with heaps of Kudos :wink:

Thanks and nicely done!!!

@bburwell No github or pastebin. I’m sure I could figure something out though. Happy to share anything I have.

One challenge I’ve run into. With 570 + various sensors for sports alone, my HA server has been slowing down. As a result, I’ve start hashing out some sensors that aren’t required today. As mentioned above, I did update all my multiscrape sensors to rest or template.

Multiscrape: 1
Template: 69
Rest: 148
TeamTracker: 352

I actually pulled all sensors off my server and added them onto a fresh HA install on proxmox where I keep a few machines spun up for other purposes. I thought a dedicated HA Sports Dashboard machine would be the answer. This works well for a few days and then slows. My intention is to add it back as a webpage dashboard on my server.

Yeah I have been noticing the slowdown as well. That was why I asked the question earlier about splitting up the sensors and templates. I plan on streamlining the dashboards and looking to maybe create a seasonal rotation for sports I kind of follow and then keep the main ones year around. I am also going to play around at some point with polling.

Funny thing is that I originally started looking at this because I wanted to have a scrolling marquee that I send updates to a bunch of Hub75’s. Right now I’m just sending Padres updates to a couple WS2812B’s.

Because of @kbrown01 great work this has kind of turned into something akin to eating potato chips - you think you can stop after a couple but there is always another tempting option to chose

2 Likes

Do we have any MLB playoff views yet?

I was looking at what @mandolin did last year but I haven’t tried the code yet. Maybe give it a try - https://community.home-assistant.io/t/sports-standings-and-scores/547094/443

1 Like

Figured I would ask here. I am trying to create a simple template like I use for conferences but for the top 25. My conferences that are almost identical work fine and when I put the code below in the template editor it returns exactly how I expect. But when the code is in the template.yaml I keep getting no entities found.

Here is the code in the template.yaml

########
##NCAA Top 25 Football Teams
#### Weekly Top 25
- name: ncaaf.ap_poll_T25
  unique_id: sensor.ncaaf_ap_poll_T25
  state: "{{ now() }}"
  attributes:
    team_names: >
      {% set cteams = namespace(cteam=[]) %}
      {% for team in state_attr('sensor.ncaaf_rank','rankings')[0]['ranks'] %}
        {% set cteams.cteam = cteams.cteam + [team['team']['abbreviation']] %}
      {% endfor %}
      {{ cteams.cteam | join(', ') }}

Here is the code in Template editor

      {% set cteams = namespace(cteam=[]) %}
      {% for team in state_attr('sensor.ncaaf_rank','rankings')[0]['ranks'] %}
        {% set cteams.cteam = cteams.cteam + [team['team']['abbreviation']] %}
      {% endfor %}
      {{ cteams.cteam | join(', ') }}

Which gives me this:

So when code is in template.yaml it won’t populate the sensor. But when the code is in the template editor it returns the values as expected.

Any ideas are appreciated.

It looks like you are defining cteam as an array and then using join. Just use

{{ cteams.cteam }}

On output.

Note this one from my templates for red zone (no join):

          {% set hteams = namespace(hteam=[]) %}
          {% for team in state_attr('sensor.nhl_wildcard','children')[0]['standings']['entries'][2:] %}
            {% for stat in team['stats'] | selectattr('name','eq','clincher') %}
            {% else %}
                  {% set hteams.hteam = hteams.hteam + [team] %}
            {% endfor %}
          {% endfor %}
          {{ hteams.hteam }}

Good evening, I would like to arrange table A3 correctly but I can’t do it myself. Does anyone have an idea?

type: custom:flex-table-card
sort_by: Platz
title: Gruppe A3
entities:
  include: sensor.nations_league_a3
  exclude: zwave.unknown_node*
columns:
  - name: Platz
    data: entries
    modify: |-
      if (x.stats[10].value >=4 )
         '<div style="background-color: #cd0000;">' + x.stats[10].value + '</div>';
      else if (x.stats[10].value >=3 )
         '<div style="background-color: #ea8109;">' + x.stats[10].value + '</div>';
      else if (x.stats[10].value <=2 )
         '<div style="background-color: #228b22;">' + x.stats[10].value + '</div>';                            
      else if (x.stats[10].value >=1 )
         '<div style="background-color: #228b22;">' + x.stats[10].value + '</div>';              
    align: center
  - name: Mannschaft
    data: entries
    modify: |-
      if (typeof x.team.logos !== 'undefined')
        '<div><img src="' + x.team.logos[0].href + '" style="height:20px;vertical-align:middle;">&nbsp;' + x.team.displayName + '</div>'
      else
        '<div><span style="display: inline-block;width: 20px;"></span>&nbsp;' + x.team.displayName + '</div>'
  - name: Spiele
    data: entries
    modify: x.stats[0].value
  - name: Siege
    data: entries
    modify: x.stats[7].value
  - name: Unentschieden
    data: entries
    modify: x.stats[6].value
  - name: Niederlagen
    data: entries
    modify: x.stats[1].value
  - name: Tor- Verhältniss
    data: entries
    modify: |-
      {
        x.stats[5].value +
            " : " +
        x.stats[4].value
      }
  - name: Differenz
    data: entries
    modify: x.stats[2].value
  - name: Punkte
    data: entries
    modify: x.stats[3].value
strict: false
css:
  tbody td:nth-child(0)+: "width: 250px;"
  tbody tr td:nth-child(9): "background-color: green; color: white;"
  tbody tr td:nth-child(4): "color: green;"
  tbody tr td:nth-child(6): "color: red;"
  table+: "padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;"
  tbody tr td:first-child: "width: 1%;"
  tbody tr td:nth-child(2): "width: 9%;"
  tbody tr td:nth-child(n+3): "width: 3%;"
  tbody tr:hover: "background-color: dimgrey!important; color:white!important;"
  tbody tr:nth-child(2): "border-bottom: 1px solid green!important;"
  tbody tr:nth-child(3): "border-bottom: 1px solid crimson!important;"
card_mod:
  style:
    .: |
      ha-card {
        overflow: auto;
        }
    $: |
      .card-header {
         padding-top: 6px!important;
         padding-bottom: 4px!important;
         font-size: 14px!important;
         line-height: 14px!important;
         font-weight: bold!important;
       }
       

Not sure what correctly means, but if those above are you only columns then maybe increase column two to maybe 59% and make the last three 10% each. Even though you have table set to 100%, it is not going to fill 100% because you are placing explicit width on all the columns.

Not Working.With two colors ist good and with tree colors is bad.

You rules are >=4, >=3, <=2, >=1, anything 2 or less will always match the third if. You should flop that rule to >=2 and likely just use else and not elseif for the last rule.