Mostrar jogos de futebol com transmissão televisiva

Fiz uma pequena alteração ao card para conter os logos das estações televisivas e destacar os jogos do sporting a verde.
image

type: markdown
content: >
  Futebol na TV: {{state_attr('sensor.today_footbal_games','date') }}
   <font size="1">Atualizado a: {{state_attr('sensor.today_footbal_games','updatedon') }} </font> 
  <hr>


  {% for game in state_attr('sensor.today_footbal_games','games') %}

  {% if game.channel == "SPORT.TV1" %}
    {% set tv = "/local/sport-tv1.png" %}
  {% elif game.channel == "SPORT.TV2" %}
    {% set tv = "/local/sport-tv2.png" %}
  {% elif game.channel == "SPORT.TV3" %}
    {% set tv = "/local/sport-tv3.png" %}
  {% elif game.channel == "SPORT.TV4" %}
    {% set tv = "/local/sport-tv4.png" %}
  {% elif game.channel == "SPORT.TV5" %}
    {% set tv = "/local/sport-tv5.png" %}
  {% elif game.channel == "SPORT.TV6" %}
    {% set tv = "/local/sport-tv6.png" %}
  {% elif game.channel == "ELEVEN 1" %}
    {% set tv = "/local/eleven-1.png" %}
  {% elif game.channel == "ELEVEN 2" %}
    {% set tv = "/local/eleven-2.png" %}
  {% elif game.channel == "ELEVEN 3" %}
    {% set tv = "/local/eleven-3.png" %}
  {% elif game.channel == "ELEVEN 4" %}
    {% set tv = "/local/eleven-4.png" %}
  {% elif game.channel == "ELEVEN 5" %}
    {% set tv = "/local/eleven-5.png" %}
  {% elif game.channel == "ELEVEN 6" %}
    {% set tv = "/local/eleven-6.png" %}
  {% elif game.channel == "BENFICA TV" %}
    {% set tv = "/local/btv-hd.png" %}
  {% else %}
    {% set tv = "/local/c-11.png" %}
  {% endif %} 


  {%- if game.homeTeam == "Sporting" or game.homeTeam == "Sporting S23" or
  game.homeTeam == "Sporting S17" %}

  <img src="{{ tv }}" height="10"></img> &nbsp;**<font color =
  '#04b46b'>{{game.homeTeam}}</font> vs {{game.awayTeam}} [{{game.time}}]**

  {%- elif game.awayTeam == "Sporting" or game.awayTeam == "Sporting S23" or
  game.awayTeam == "Sporting S17"  %}

  <img src="{{ tv }}" height="10"></img> &nbsp;**{{game.homeTeam}} vs <font
  color = '#04b46b'>{{game.awayTeam}}</font> [{{game.time}}]**

  {% else %}
     <img src="{{ tv }}" height="10"></img> &nbsp; {{game.homeTeam}} vs {{game.awayTeam}} [{{game.time}}]
  {%- endif %}

   {% endfor %}

Descarregar os icones para /config/www
icones-tv (dark theme)
icones-tv (light theme)

2 Curtiram

Bom trabalho. Tenho uma segunda versão também com os logos dos canais

1 Curtiu

A ideia está porreira, mas será melhor acrescentar outros canais e imagens.

{% else %}
  {% set tv = "/local/c-11.png" %}
{% endif %} 

Acaba por criar um falso resultado quando um jogo for em canais abertos: RTP, Sic, Tvi, etc.
Por exemplo, hoje, o Varzim-Benfica é na RTP, mas não havendo essa opção no template o ‘else’ define o jogo como no canal 11. :upside_down_face:

1 Curtiu

É preciso mapear todos os nossos canais que costumam dar jogos. Assim não falha.

Sim eu sei, mas não me dei ao trabalho de ver quais os canais que poderiam transmitir jogos. E no meu caso, como não vejo futebol nesses canais, nem me preocupei com isso. Mas posso adicionar mais canais se necessário.

Edit: Estive a ver e vou deixar aqui esta nota para mim, faltam os seguintes canais:

  • Eleven Extra 1
  • Eleven Extra 2
  • Eleven Extra 3
  • Eleven Extra 4
  • Sport TV +
  • RTP 1
  • SIC
  • TVI

Só mapeei os que façam jogos do Sporting :joy::rofl:

Mas ficou mm “pipoca” aqui no separador.

2 Curtiram

De onde estás a ler a info dos próximos jogos do Sporting e da selecção?

Estou fora de casa, mas mal chegue digo-te.

Usei este post do Marco A., como base.

Depois criei calendários para a seleção e equipa preferida e criei estes sensores

    # Próximo adversário Sporting
  - platform: template
    sensors:
      sporting_opponent:
        friendly_name: Sporting Next Opponent
        value_template: >-
          {{ states.calendar.sporting_portugal.attributes.message }}
    # Próximo jogo Sporting
  - platform: template
    sensors:
      sporting_date:
        friendly_name: Sporting next game
        value_template: >-
          {% if is_state('calendar.sporting_portugal', 'on') %}
            Playing Now
          {% else %}
            {% set st = state_attr('calendar.sporting_portugal', 'start_time') %}
            {% if st != None %}
              {{ as_timestamp(st)  | timestamp_custom("%a, %b %d at %-H:%M") }}
            {% else %}
              No games scheduled
            {% endif %}
          {% endif %}
    # Próximo adversário Portugal
  - platform: template
    sensors:
      portugal_opponent:
        friendly_name: Portugal Next Opponent
        value_template: >-
          {{ states.calendar.portugal.attributes.message }}
    # Próximo jogo Portugal
  - platform: template
    sensors:
      portugal_date:
        friendly_name: Portugal next game
        value_template: >-
          {% if is_state('calendar.portugal', 'on') %}
            Playing Now
          {% else %}
            {% set st = state_attr('calendar.portugal', 'start_time') %}
            {% if st != None %}
              {{ as_timestamp(st)  | timestamp_custom("%a, %b %d at %-H:%M") }}
            {% else %}
              No games scheduled
            {% endif %}
          {% endif %}

Para o card instalei do hacs o custom:multiple-entity-row e criei este card:

type: vertical-stack
cards:
  - type: entities
    entities:
      - type: custom:multiple-entity-row
        entity: sensor.sporting_date
        image: /local/scp_badge.png
        name: Sporting C.P.
        secondary_info:
          entity: sensor.sporting_opponent
          name: false
      - type: divider
      - type: custom:multiple-entity-row
        entity: sensor.portugal_date
        image: /local/icons/portugal_badge.png
        name: Portugal
        secondary_info:
          entity: sensor.portugal_opponent
          name: false
    title: Próximos Jogos

Já agora, partilho um extra que tenho andado a usar: Team Tracker

Exemplo de cards:

É interessante porque apresenta dados em tempo real. E isso permite criar algumas automatizações que transformam tal numa ação não-passiva.

Um bom exemplo disso é ter uma automatização que vai anunciando os golos marcados e o resultado final; quando por alguma razão se está a trabalhar, ou a fazer comida, etc., sem ter de se estar a ver os jogos.

Aqui deixo duas automatizações que me vão relatando os jogos - para os google nest, se estiver em casa, ou para o telemóvel se estiver fora - e o resultado final.

alias: Team - Score
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.team
    attribute: team_score
  - platform: state
    entity_id:
      - sensor.team
    attribute: opponent_score
    enabled: true
condition:
  - condition: or
    conditions:
      - condition: template
        value_template: >-
          {{ trigger.to_state.attributes.team_score | int(0) >
          (trigger.from_state.attributes.team_score | int(0) ) }}
      - condition: template
        value_template: >-
          {{ trigger.to_state.attributes.opponent_score | int(0) >
          (trigger.from_state.attributes.opponent_score | int(0) ) }}
action:
  - service: tts.google_translate_say
    data:
      entity_id: media_player.XXX
      message: >-
        "There was a goal! {{ state_attr('sensor.team', 'team_abbr') }} {{
        state_attr('sensor.team', 'team_score') }} - {{
        state_attr('sensor.team', 'opponent_abbr') }} {{
        state_attr('sensor.team', 'opponent_score') }}"
    enabled: true
  - if:
      - condition: state
        entity_id: person.XXX
        state: not_home
    then:
      - service: notify.mobile_app_XXX
        data:
          message: >-
            "There was a goal!! {{ state_attr('sensor.team', 'team_abbr')
            }} {{ state_attr('sensor.team', 'team_score') }} - {{
            state_attr('sensor.team', 'opponent_score') }} {{
            state_attr('sensor.team', 'opponent_abbr') }}"

Com esses templates a mensagem vem no seguinte formato, para o tlm: “There was a goal! EquipaX 1-0 AdversárioX” & para os google nest: “There was a goal! EquipaX 1 - AdversárioX 0”

alias: Team - Game Over
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.team
    to: POST
    from: IN
condition:
  - condition: template
    value_template: "{{ trigger.to_state.state | int(0)> (trigger.from_state.state | int(0)) }}"
    enabled: false
action:
  - service: tts.google_translate_say
    data:
      entity_id: media_player.XXX
      message: >-
        "The game is over! {{ state_attr('sensor.team', 'team_abbr') }} {{
        state_attr('sensor.team', 'team_score') }} - {{
        state_attr('sensor.team', 'opponent_abbr') }} {{
        state_attr('sensor.team', 'opponent_score') }}"
  - if:
      - condition: state
        entity_id: person.XXX
        state: not_home
    then:
      - service: notify.mobile_app_XXX
        data:
          message: >-
            "The game is over. {{ state_attr('sensor.team', 'team_abbr') }}
            {{ state_attr('sensor.team', 'team_score') }} - {{
            state_attr('sensor.team', 'opponent_score') }} {{
            state_attr('sensor.team', 'opponent_abbr') }}"
        enabled: true
mode: single

Ps. Uma boa idea é criar um input boolean, como condição, para activar ou não, as automatizações, se estiverem a ver os jogos.

1 Curtiu

Também utilizo esse, mas acho que n tenho os templates tão avançados. :slight_smile:

Para completar essa info, só falta mostrar o canal da transmissão e o nome da competição. A ideia de alertar o golo pelo speaker está porreira!

1 Curtiu

Por acaso n vi se a APi da espn tinha essa info da liga, visto que temos que atribuir o league_id como XXX.

  # Custom Integration -
  - platform: teamtracker
    league_id: XXX
    team_id: SCP
    sport_path: soccer
    league_path: por.1
    name: sporting_cp`

Os atributos do sensor, não têm referencia ao nome da liga:

attribution: Data provided by ESPN
sport: soccer
league: XXX
league_logo: https://a.espncdn.com/i/leaguelogos/soccer/500/14.png
team_abbr: SCP
opponent_abbr: null
event_name: null
date: null
kickoff_in: null
venue: null
location: null
tv_network: null
odds: null
overunder: null
team_name: null
team_id: null
team_record: null
team_rank: null
team_homeaway: null
team_logo: null
team_colors: null
team_score: null
team_win_probability: null
team_timeouts: null
opponent_name: null
opponent_id: null
opponent_record: null
opponent_rank: null
opponent_homeaway: null
opponent_logo: null
opponent_colors: null
opponent_score: null
opponent_win_probability: null
opponent_timeouts: null
quarter: null
clock: null
possession: null
last_play: null
down_distance_text: null
outs: null
balls: null
strikes: null
on_first: null
on_second: null
on_third: null
team_shots_on_target: null
team_total_shots: null
opponent_shots_on_target: null
opponent_total_shots: null
team_sets_won: null
opponent_sets_won: null
last_update: 2023-01-23 09:15:12-01:00
api_message: No competition scheduled for 'SCP' between 2023-01-22T00:00Z and 2023-01-28T00:00Z
icon: mdi:soccer
friendly_name: sporting_cp

Editei o código para o caso de não ter o logo do canal, meter o texto.

type: markdown
content: >
  Futebol na TV: {{state_attr('sensor.today_footbal_games','date') }}
   <font size="1">Atualizado a: {{state_attr('sensor.today_footbal_games','updatedon') }} </font> 
  <hr>


  {% for game in state_attr('sensor.today_footbal_games','games') %}

  {% if game.channel == "SPORT.TV1" %}
    {% set tv = "/local/sport-tv1.png" %}
  {% elif game.channel == "SPORT.TV2" %}
    {% set tv = "/local/sport-tv2.png" %}
  {% elif game.channel == "SPORT.TV3" %}
    {% set tv = "/local/sport-tv3.png" %}
  {% elif game.channel == "SPORT.TV4" %}
    {% set tv = "/local/sport-tv4.png" %}
  {% elif game.channel == "SPORT.TV5" %}
    {% set tv = "/local/sport-tv5.png" %}
  {% elif game.channel == "SPORT.TV6" %}
    {% set tv = "/local/sport-tv6.png" %}
  {% elif game.channel == "ELEVEN 1" %}
    {% set tv = "/local/eleven-1.png" %}
  {% elif game.channel == "ELEVEN 2" %}
    {% set tv = "/local/eleven-2.png" %}
  {% elif game.channel == "ELEVEN 3" %}
    {% set tv = "/local/eleven-3.png" %}
  {% elif game.channel == "ELEVEN 4" %}
    {% set tv = "/local/eleven-4.png" %}
  {% elif game.channel == "ELEVEN 5" %}
    {% set tv = "/local/eleven-5.png" %}
  {% elif game.channel == "ELEVEN 6" %}
    {% set tv = "/local/eleven-6.png" %}
  {% elif game.channel == "BENFICA TV" %}
    {% set tv = "/local/btv-hd.png" %}
  {% elif game.channel == "CANAL 11" %}
    {% set tv = "/local/c-11.png" %}
  {% else %}
    {% set tv = "null" %}
  {% endif %} 


  {%- if game.homeTeam == "Sporting" or game.homeTeam == "Sporting S23" or
  game.homeTeam == "Sporting S17" %}

   {% if tv == "null" %}
      {{game.channel}} &nbsp;**<font color = '#04b46b'>{{game.homeTeam}}</font> vs {{game.awayTeam}} [{{game.time}}]**
  {% else %}
    <img src="{{ tv }}" height="10"></img> &nbsp;**<font color = '#04b46b'>{{game.homeTeam}}</font> vs {{game.awayTeam}} [{{game.time}}]**
  {% endif %}

  {%- elif game.awayTeam == "Sporting" or game.awayTeam == "Sporting S23" or
  game.awayTeam == "Sporting S17"  %}

  {% if tv == "null" %}
      {{game.channel}} &nbsp;**{{game.homeTeam}} vs <font color = '#04b46b'>{{game.awayTeam}}</font> [{{game.time}}]**
    {% else %}
      <img src="{{ tv }}" height="10"></img> &nbsp;**{{game.homeTeam}} vs <font color = '#04b46b'>{{game.awayTeam}}</font> [{{game.time}}]**
    {% endif %}

  {% else %} {% if tv == "null" %}
     {{game.channel}} &nbsp; {{game.homeTeam}} vs {{game.awayTeam}} [{{game.time}}]
  {% else %}
     <img src="{{ tv }}" height="10"></img> &nbsp; {{game.homeTeam}} vs {{game.awayTeam}} [{{game.time}}]
   {% endif %}
  {%- endif %}

   {% endfor %}

image

PS: Estou-me a passar com essa identação maluca, mas sempre que corrijo isso, ele perde o aspeto visual :frowning:

boas,
como conseguem identificar a liga? só tenho a funcionar a liga dos campeões a portuguesa quer ponha por.1 quer xxx nao da nada . . .

  # Custom Integration -
  - platform: teamtracker
    league_id: XXX
    team_id: SCP
    sport_path: soccer
    league_path: por.1
    name: sporting_cp

Eu tenho assim no teamtracker

obrigado.
copiei igual e da sempre not_found.
onde se mete o código? no cartão teamtracker-card? ou no configuration.yaml?

Boas,
Como posso criar só um scrape sem usar o nodred só com a informação do canal onde vai dar o próximo jogo do Porto. A ideia é ter um sensor onde o estado aparece o canal.
Obrigado

Terás de encontrar um site que mostre esses mesmo jogos e em que canal é transmitido o próximo jogo.

O exemplo inicial é baseado nos resultados (diários) encontrados em: https://www.futebol365.pt/jogos-na-tv/


Dando uma vista de olhos pela net encontrei um site que é capaz de funcionar.

  1. Vais a integrações e adicionas integração: “Scrape”
  2. Em “Resource:”, adicionas: “https://www.futebolnatv.pt/equipe/oporto
  3. Next
  4. Em “Name:”, põe o que quiseres, exemplo: “FC Porto”
  5. Em “Select*”, adiciona: “div#utcRelativeContent table:nth-child(2) > tbody > tr:nth-child(2) > td.canales > ul > li > a”
  6. Submeter.

Dará algo assim:
sensorfc

Era mesmo isto :grin: muito obrigado :+1:


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade