DomoLab

Documentation de recherche en domotique

#30/10/2025

Dynamic Dashboard

Introduction

L'objectif est de passer d'un graphique "statique" à un graphique où l'on peut modifier l'affichage. L'idée est de découvrir les possibilités offerte par HomeAssistant sans aller vers une solutions trop compliquée.

Pour résumer comment passer de ce graphique:

...

A ceci, ici par exemple je peux modifier l'axe des abscisses:

...

Pour cela, il faut créer une entité qui représentera la valeur pour la mesure de l'axe des abscisses.

Autrement dit, dans le code yaml nous avons une valeur en "dur":

...

Il faut donc ici remplacer cette valeur par l'entité que l'on aura créer préalablement.

Il faut donc dans un premier temps créer une entrée, puis utiliser l'entité correspondante, c'est à dire l'ajouter à une carte, pour finalement l'utiliser via du Templating.

Voici une vidéo explicative:

Ajoutons une entrée

Rendez-vous sur Paramètres/Appareils et services

...

Au niveau du menu (en haut), on clique sur Entrées (Helpers en anglais - la traduction est moyenne ici):

...

Cliquer sur le bouton (en bas de page).

Ici, nous on souhaite une liste de valeur, on selection donc Liste Déroulante:

...

On indique un Nome, une icone, on indique toutes les valeurs souhaitée (bouton Ajouter) et on clique sur le bouton Créer:

...

On retrouve bien notre Entre dans la liste:

...

Cliquons sur les trois petits points , puis sur Paramètres

...

On retrouve nos valeurs et surtout l'ID de l'entité, c'est cette valeur que l'on va utiliser ensuite: input_select.abcisse_time.

...

Remarque: si on modifie les options de la liste, il est conseillé de redémarrer la config. d'HomeAssistant.

Ajoutons une carte entité

Aller sur votre dashboard puis cliquer sur pour l'éditer. On va ajouter une Entité:

...

Cliquer sur Afficher l'éditeur de code:

...

Et copier/coller le YAML suivant:

type: entity
entity: input_select.abcisse_time
icon: mdi:chart-timeline-variant-shimmer
grid_options:
  rows: 2
name: Sur...

Soit le résultat ci-dessous, et cliquer sur enregistrer:

...

Extension Config Template Card

Comme expliqué dans la vidéo, nous avons deux types de templating, un pour le frontend (Lovelace) et l'autre backend (jinja2).

Le problème ici est que nous utilisons Apexcharts-card qui ne comprend pas ce templating. Il faut donc passer par un wrapper (enveloppe) qui fera le lien entre les deux.

Pour l'installer on passe par HACS:

... ...

Cliquer sur le bouton (en bas de page).

Puis, cliquer sur TÉLÉCHARGER:

...

Enfin, cliquer sur RECHARGER:

...

Il faut ensuite redémarrer HomeAssistant.

Edition du graphique

Il faut donc "envelopper" notre apexcharts-card dans un custom:config-template-card.

On indique qu'on utilisera notre entité comme variable.
Et on l'implémente. On remplace graph_span: 24h par graph_span: ${ states['input_select.abcisse_time'].state }

Ci-après le code yaml complet:

type: custom:config-template-card
entities:
  - input_select.abcisse_time
card:
  type: custom:apexcharts-card
  graph_span: ${ states['input_select.abcisse_time'].state }
  header:
    show: true
    title: Climat Intérieur
    show_states: true
    colorize_states: true
  update_interval: 5min
  apex_config:
    chart:
      height: 400
      toolbar:
        show: false
    grid:
      show: true
      borderColor: "#e0e0e0"
      strokeDashArray: 0
    stroke:
      curve: smooth
    markers:
      size: 0
      hover:
        size: 6
        sizeOffset: 3
    tooltip:
      enabled: true
      shared: true
      intersect: false
      x:
        format: HH:mm
  yaxis:
    - id: temperature
      min: 15
      max: 30
      decimals: 1
      apex_config:
        title:
          text: Température (°C)
          style:
            fontSize: 12px
            color: "#ff6b6b"
        labels:
          style:
            colors: "#ff6b6b"
            fontSize: 11px
    - id: humidity
      opposite: true
      min: 20
      max: 80
      decimals: 0
      apex_config:
        title:
          text: Humidité (%)
          style:
            fontSize: 12px
            color: "#4dabf7"
        labels:
          style:
            colors: "#4dabf7"
            fontSize: 11px
  series:
    - entity: sensor.temperature_humidity_sensor_8e2a_temperature
      name: Température
      yaxis_id: temperature
      color: "#ff6b6b"
      type: line
      stroke_width: 3
      float_precision: 1
      group_by:
        func: avg
        duration: 20min
    - entity: sensor.temperature_humidity_sensor_8e2a_humidite
      name: Humidité
      yaxis_id: humidity
      color: "#4dabf7"
      type: line
      stroke_width: 2
      float_precision: 0
      group_by:
        func: avg
        duration: 20min

Ce qui nous donne l'exemple suivant

Conclusion

Cette approche demande un peu de temps pour la mise en place, mais elle permet de créer des dashboards dynamiques avec un minimum de code. L'utilisation du templating combinée aux entrées personnalisées offre une flexibilité intéressante pour adapter l'affichage des graphiques selon vos besoins, sans multiplier les cartes.