Finalement j’ai quand même fait la carte des updates disponibles, ça donne ça dans un pop-up bubble-card
:
sensor
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# -------------------------------------------------------------------- available
- name: tplt_available_updates_system
state: |
{% set var = states.update
|selectattr('state', 'equalto', 'on')
|select('search', 'home_assistant')
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
- name: tplt_available_updates_addon
state: |
{% set var = states.update
|selectattr('state', 'equalto', 'on')
|selectattr('attributes.supported_features', 'equalto', 25)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
- name: tplt_available_updates_hacs
state: |
{% set var = states.update
|selectattr('state', 'equalto', 'on')
|selectattr('attributes.supported_features', 'equalto', 23)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# ---------------------------------------------------------------------- skipped
- name: tplt_skipped_updates_system
state: |
{% set var = states.update
|select('search', 'home_assistant')
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
- name: tplt_skipped_updates_addon
state: |
{% set var = states.update
|selectattr('attributes.supported_features', 'equalto', 25)
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
- name: tplt_skipped_updates_hacs
state: |
{% set var = states.update
|selectattr('attributes.supported_features', 'equalto', 23)
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
binary_sensor
# ======================================================================================
# ======================================================================================
# ============================================================================== UPDATES
- name: tplt_update_restart
icon: mdi:restart-alert
device_class: update
state: |
{% set var = states.update
|selectattr('attributes.release_summary', 'search', 'Restart of Home Assistant required')
|map(attribute='entity_id')
|list %}
{% set nr_count = var |length %}
{% if nr_count == 0 %}
off
{% else %}
on
{% endif %}
attributes:
list: |
{% set var = states.update
|selectattr('attributes.release_summary', 'search', 'Restart of Home Assistant required')
|map(attribute='attributes.friendly_name')
|map('replace', 'Update', '')
|map('replace', 'update', '')
|list %}
{% set nr_count = var | length %}
{% if nr_count == 0 %}
null
{% else %}
{{ var | join('et ') }}{{ 'nécessite' if nr_count == 1 else 'nécessitent' }} un redémarrage.
{% endif %}
# {% set var = states.update
# |selectattr('attributes.release_summary', 'search', 'Restart of Home Assistant required')
# |map(attribute='attributes.friendly_name')
# |map('replace', 'Update', '')
# |map('replace', 'update', '')
# |list %}
# {% set nr_count = var |length %}
# {% if nr_count == 0 %}
# null
# {% else %}
# {% set nr_joined = var |join('\n'+' ') %}
# {{" "}}{{ nr_joined }}
# {% endif %}
- name: tplt_available_updates
icon: mdi:update
device_class: update
state: |
{% set var = states.update
|selectattr('state', 'equalto', 'on')
|reject('search','Swiss Army Knife custom card')
|map(attribute='attributes.friendly_name')
|map('replace', 'Update', '')
|map('replace', 'update', '')
|list %}
{% set result = var |length %}
{% if result == 0 %}
off
{% else %}
on
{% endif %}
- name: tplt_skipped_updates
icon: mdi:debug-step-over
device_class: update
state: |
{% set var = states.update
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{% if result == 0 %}
off
{% else %}
on
{% endif %}
attributes:
count_all: |
{% set var = states.update
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
count_system: |
{% set var = states.update
|select('search', 'home_assistant')
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
count_addon: |
{% set var = states.update
|selectattr('attributes.supported_features', 'equalto', 25)
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
count_hacs: |
{% set var = states.update
|selectattr('attributes.supported_features', 'equalto', 23)
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='entity_id')
|list %}
{% set result = var |length %}
{{ result }}
list: |
{% set var = states.update
|selectattr('attributes.skipped_version', 'ne', none)
|map(attribute='attributes.friendly_name')
|map('replace', 'Update', '')
|map('replace', 'update', '')
|list %}
{% set result = var |join('\n'+' ') %}
{{ result }}
pop-up
### ================================================================== UPDATES
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: "#update"
name: Mises à jour
icon: mdi:update
close_on_click: false
sub_button:
- entity: switch.hacs_pre_release
name: Beta
show_name: false
icon: ''
show_state: true
show_last_changed: false
show_attribute: false
tap_action:
action: toggle
show_icon: false
show_background: true
# ------------------------------------------ cards
- type: conditional
conditions:
- condition: state
entity: binary_sensor.tplt_available_updates
state: 'on'
card:
type: vertical-stack
cards:
- type: custom:bubble-card
card_type: separator
name: "Mise(s) à jour disponible(s):"
<<: &separator
styles: |-
ha-card { color: var(--primary-background-color); }
.bubble-line {
background: var(--primary-background-color);
opacity: 0.2;
}
- !include ../cards/card_update_available.yaml
# ------------------------------------------ cards
- type: conditional
conditions:
- condition: state
entity: binary_sensor.tplt_skipped_updates
state: 'on'
card:
type: vertical-stack
cards:
- type: custom:bubble-card
card_type: separator
name: "Mise(s) à jour ignorée(s):"
<<: *separator
- !include ../cards/card_update_skipped.yaml
card_update_available.yaml
type: custom:stack-in-card
card_mod:
class: stock
cards:
# ===================================================================== SYSTEM UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_available_updates_system
state_not: '0'
card:
type: custom:auto-entities
filter:
include: &include
- entity_id: update.*
state: 'on'
exclude:
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 23
- entity_id: update.*
attributes:
supported_features: 25
card:
<<: &card
type: custom:flex-table-card
card_mod:
class: stock
style: |
table {
padding: 4px;
}
sort_by: friendly_name+
clickable: true
columns:
- <<: &col1
data: entity_picture
align: center
name: ''
modify: '''<img src="'' + x + ''"style="height:30px;width:30px">'''
- <<: &col2
name: ''
data: friendly_name
align: left
modify: |-
x = x.replace('Update', '');
x;
name: Système
- <<: &col3
data: installed_version
name: Actuelle
align: right
- <<: &col4
data: latest_version
name: Disponible
align: right
css: &css
thead th: 'color: var(--text);'
tbody tr: 'background-color: transparent !important;'
tbody tr td:nth-child(1): 'width: 32px;'
tbody tr td:nth-child(3): 'width: 64px; font-weight: bold;'
tbody tr td:nth-child(4): 'width: 64px; color: var(--success-color); font-weight: bold;'
# ===================================================================== ADD-ON UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_available_updates_addon
state_not: '0'
card:
type: custom:auto-entities
filter:
include: *include
exclude:
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 23
- entity_id: update.home_assistant_core_update
- entity_id: update.home_assistant_operating_system_update
- entity_id: update.home_assistant_supervisor_update
card:
<<: *card
columns:
- <<: *col1
- <<: *col2
name: Module comp.
- <<: *col3
- <<: *col4
css: *css
# ======================================================================= HACS UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_available_updates_hacs
state_not: '0'
card:
type: custom:auto-entities
filter:
include: *include
exclude:
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 25
- entity_id: update.swiss_army_knife_custom_card_update
- entity_id: update.home_assistant_core_update
- entity_id: update.home_assistant_operating_system_update
- entity_id: update.home_assistant_supervisor_update
card:
<<: *card
columns:
- <<: *col1
- <<: *col2
name: HACS
modify: |-
x = x.replace('update', '');
x;
- <<: *col3
- <<: *col4
css: *css
card_update_skipped.yaml
type: custom:stack-in-card
card_mod:
class: stock
cards:
# ===================================================================== SYSTEM UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_skipped_updates_system
state_not: '0'
card:
type: custom:auto-entities
filter:
include: &include
- entity_id: update.*
state: 'off'
exclude:
- entity_id: update.*
attributes:
skipped_version: null
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 23
- entity_id: update.*
attributes:
supported_features: 25
card:
<<: &card
type: custom:flex-table-card
card_mod:
class: stock
style: |
table {
padding: 4px;
}
sort_by: friendly_name+
clickable: true
columns:
- <<: &col1
data: entity_picture
align: center
name: ''
modify: '''<img src="'' + x + ''"style="height:30px;width:30px">'''
- <<: &col2
name: ''
data: friendly_name
align: left
modify: |-
x = x.replace('Update', '');
x;
name: Système
- <<: &col3
data: installed_version
name: Actuelle
align: right
- <<: &col4
data: skipped_version
name: Ignorée
align: right
css: &css
thead th: 'color: var(--text);'
tbody tr: 'background-color: transparent !important;'
tbody tr td:nth-child(1): 'width: 32px;'
tbody tr td:nth-child(3): 'width: 64px; font-weight: bold;'
tbody tr td:nth-child(4): 'width: 64px; color: var(--nova-color); font-weight: bold;'
# ===================================================================== ADD-ON UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_skipped_updates_addon
state_not: '0'
card:
type: custom:auto-entities
filter:
include: *include
exclude:
- entity_id: update.*
attributes:
skipped_version: null
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 23
- entity_id: update.home_assistant_core_update
- entity_id: update.home_assistant_operating_system_update
- entity_id: update.home_assistant_supervisor_update
card:
<<: *card
columns:
- <<: *col1
- <<: *col2
name: Module comp.
- <<: *col3
- <<: *col4
css: *css
# ======================================================================= HACS UPDATES
- type: conditional
conditions:
- condition: state
entity: sensor.tplt_skipped_updates_hacs
state_not: '0'
card:
type: custom:auto-entities
filter:
include: *include
exclude:
- entity_id: update.*
attributes:
skipped_version: null
- entity_id: update.*
attributes:
device_class: firmware
- entity_id: update.*
attributes:
supported_features: 25
- entity_id: update.home_assistant_core_update
- entity_id: update.home_assistant_operating_system_update
- entity_id: update.home_assistant_supervisor_update
card:
<<: *card
columns:
- <<: *col1
- <<: *col2
name: HACS
modify: |-
x = x.replace('update', '');
x;
- <<: *col3
- <<: *col4
css: *css