Custom:mushroom-template-card et Timestamp unknown

Bonjour.
Je cherche à me créer une carte perso sur la base d’une mushroom template card pour afficher le niveau de batterie de mes capteurs ou boutons à pile.

J’obtiens le rendu souhaité avec le code ci-dessous (surement pas optimal, je débute) mais je rencontre un problème dans le cas ou la pile n’a pas encore été remplacée et ou le sensor à un état « unknown » au lieu d’une date (sensor issu de l’intégration Battery Notes).
Dans les outils de dev, j’ai l’erreur suivante :

ValueError: Template error: as_timestamp got invalid input ‹ unknown › when rendering template ‹ {{ states(‹ sensor.t_aqara_ma_chambre_batterie ›) }}% / Remplacée : {{ as_timestamp(states(‹ sensor.lumi_lumi_weather_battery_last_replaced_2 ›)) | int | timestamp_custom( ›%d/%m/%Y’, true) }}’ but no default was specified

Je pourrais laisser l’info du sensor en brut sans la transformer mais c’est peu lisible. Si quelqu’un à une piste pour gérer ces cas de figure. Merci

type: custom:mushroom-template-card
primary: T.Ext Batterie
secondary: >-
  {{ states('sensor.t_ali_1_batterie') }}% / Remplacée : {{
  as_timestamp(states('sensor.t_ext_battery_last_replaced')) | int |
  timestamp_custom('%d/%m/%Y', true) }}
icon: |-
  {% set var=states('sensor.t_ali_1_batterie') | float %}
  {% if var<=10 %} 
    mdi:battery-10
  {% elif var <=20 %}
    mdi:battery-20
  {% elif var <=30 %}
    mdi:battery-30
  {% elif var <=40 %}
    mdi:battery-40
  {% elif var <=50 %}
    mdi:battery-50
  {% elif var <=60 %}
    mdi:battery-60
  {% elif var <=70 %}
    mdi:battery-70
  {% elif var <=80 %}
    mdi:battery-80
  {% elif var <=90 %}
    mdi:battery-90
  {% else %}
    mdi:battery
  {% endif %}
entity: sensor.t_ali_1_batterie
fill_container: true
icon_color: |-
  {% set var=states('sensor.t_ali_1_batterie') | float %}
  {% if var<=15 %} 
    red
  {% elif var >=70 %}
    green
  {% else %}
    orange
  {% endif %}
layout: horizontal

Ma configuration


System Information

version core-2024.5.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.29-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4995
Installed Version 1.34.0
Stage running
Available Repositories 1463
Downloaded Repositories 20
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.3
update_channel stable
supervisor_version supervisor-2024.05.1
agent_version 1.6.0
docker_version 25.0.5
disk_total 30.8 GB
disk_used 6.4 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.14.0), Samba share (12.3.1), File editor (5.8.0), Mosquitto broker (6.4.0), Samba Backup (5.2.0), teleinfo2mqtt (9.0.3), ZeroTier One (0.18.0)
Dashboards
dashboards 4
resources 15
views 27
mode storage
Recorder
oldest_recorder_run 24 mai 2024 à 17:13
current_recorder_run 26 mai 2024 à 01:04
estimated_db_size 460.87 MiB
database_engine sqlite
database_version 3.44.2
___

Salut
tu peux placer des valeur par defaut

en mettant un float(0) su tu n’as pas de valeur numérique tu aura la valeur par defaut définie (ici 0)

Et merci pour l’idée bien sympa

1 « J'aime »

Tu as la card auto entities qui fait cela très bien

Code
type: custom:auto-entities
card:
  type: custom:bar-card
  title_position: inside
  positions:
    icon: inside
  unit_of_measurement: '%'
  severity:
    - color: '#d11e1e'
      from: 0
      to: 5
    - color: '#cf2d11'
      from: 6
      to: 10
    - color: '#cc3900'
      from: 11
      to: 15
    - color: '#c84400'
      from: 16
      to: 20
    - color: '#c44d00'
      from: 21
      to: 25
    - color: '#bf5600'
      from: 26
      to: 30
    - color: '#b95f00'
      from: 31
      to: 35
    - color: '#b36600'
      from: 36
      to: 40
    - color: '#ac6e00'
      from: 41
      to: 45
    - color: '#a57500'
      from: 46
      to: 50
    - color: '#9d7b00'
      from: 51
      to: 55
    - color: '#948100'
      from: 56
      to: 60
    - color: '#8b8700'
      from: 61
      to: 65
    - color: '#818d00'
      from: 66
      to: 70
    - color: '#769200'
      from: 71
      to: 75
    - color: '#6a9700'
      from: 76
      to: 80
    - color: '#5d9c00'
      from: 81
      to: 85
    - color: '#4da100'
      from: 86
      to: 90
    - color: '#39a500'
      from: 91
      to: 95
    - color: '#15a911'
      from: 96
      to: 100
filter:
  exclude:
    - entity_id: ^sensor.robonect*$
    - entity_id: ^*browser_battery*$
  include:
    - entity_id: ^sensor.*_battery$
    - entity_id: ^sensor.*_battery_level$
sort:
  method: state
  numeric: true

1 « J'aime »

@ddfdom Ca marcherai aussi sur la partie timestamp car c’est celle-ci qui me pose souci ?

en mettant un float(0) su tu n’as pas de valeur numérique tu aura la valeur par defaut définie (ici 0)

{{ as_timestamp(states('sensor.t_ext_battery_last_replaced')) | int | timestamp_custom('%d/%m/%Y', true) }}

Les sensors en questions sont sous cette forme.

@Jeffodilo Merci pour la proposition mais ce n’est pas tout à fait ce que je cherche car je souhaite y inclure la date de dernier remplacement de la pile

Aaah zut j’ai cru que c’était sur la valeur du % de batterie, mais pas impossible que ça fonctionne sur le timestamp mais du coup cela n’a pas vraiment de sens ?

Salut @EMqA

Dans ton secondary, tu peux très bien faire du if comme tu le fait pour l’icon ou l’icon_color

du coup if sensor_last replaced = unknow alors blabla sinon blablablabla

1 « J'aime »

@Tochy Bingo

type: custom:mushroom-template-card
primary: T.Aqara Ma chambre
secondary: >-
  {{ states('sensor.t_aqara_ma_chambre_batterie') }}% / Remplacée : 

  {% if is_state('sensor.lumi_lumi_weather_battery_last_replaced_2', 'unknown')
  %} 
    ----
  {% else %}
    {{ as_timestamp(states('sensor.lumi_lumi_weather_battery_last_replaced_2')) | float(default=0) | timestamp_custom('%d/%m/%Y', true) }}
  {% endif %}
icon: |-
  {% set var=states('sensor.t_aqara_ma_chambre_batterie') | float %}
  {% if var<=10 %} 
    mdi:battery-10
  {% elif var <=20 %}
    mdi:battery-20
  {% elif var <=30 %}
    mdi:battery-30
  {% elif var <=40 %}
    mdi:battery-40
  {% elif var <=50 %}
    mdi:battery-50
  {% elif var <=60 %}
    mdi:battery-60
  {% elif var <=70 %}
    mdi:battery-70
  {% elif var <=80 %}
    mdi:battery-80
  {% elif var <=90 %}
    mdi:battery-90
  {% else %}
    mdi:battery
  {% endif %}
entity: sensor.t_aqara_ma_chambre_batterie
fill_container: true
icon_color: |-
  {% set var=states('sensor.t_aqara_ma_chambre_batterie') | float %}
  {% if var<=15 %} 
    red
  {% elif var >=70 %}
    green
  {% else %}
    orange
  {% endif %}
layout: horizontal

Les 2 petites vont pouvoir êre replacées par la grande.

1 « J'aime »