Accueil › Guide d'utilisation › Domotique › Tableau de bord
Home Assistant · pas à pas

Créez ce tableau de bord Home Assistant en environ une heure

Dix étapes, le YAML de chaque carte et une vue complète à coller d'un seul coup. Conçu et photographié sur un vrai Marantz CINEMA 30. Changez deux chaînes de texte et il est à vous.

Le tableau de bord terminé : un bandeau de lecture en cours, le volume avec des préréglages en dB, une grille de sources, les modes surround, la correction acoustique, des scènes et un graphique de volume
Ce que vous allez construire
Pressé ? Passez directement à l'étape 10, téléchargez la vue complète, changez deux chaînes de texte et collez-la. Les étapes intermédiaires expliquent le rôle de chaque élément pour que vous puissiez le modifier.

Avant de commencer

Deux sources alimentent ce tableau de bord, et la différence compte à chaque étape ci-dessous.

Provient deVous donne
Les scripts synchronisés d'AVR MaestroChaque contrôle. Entrées, modes surround, Audyssey, Dirac, Smart Selects, préréglages, variateur, mode éco, vos Scènes.
L'entité lecteur multimédia de l'intégration Denon AVRL'état en direct. Alimentation, source sélectionnée, mode surround, volume, sourdine.
Étape 1

Installez quatre cartes depuis HACS

Les quatre se trouvent dans la boutique HACS par défaut. Dans Home Assistant : HACS › Interface › Explorer & télécharger des dépôts, cherchez le nom, cliquez sur Télécharger, puis rechargez votre navigateur.

RechercherSert àSi vous l'ignorez
MushroomChaque tuile de contrôle, et le curseur de volumeUtilisez une carte button simple. Ça fonctionne, c'est juste plus carré.
button-cardLes en-têtes de section avec une étiquette en directUtilisez une carte markdown, ou de simples titres.
card-modLes couleurs, et l'état allumé de la tuile activeTout fonctionne quand même. Rien ne s'allume.
apexcharts-cardLes graphiques d'historiqueUtilisez la carte history-graph intégrée.
Aucune n'est indispensable pour que ça marche. Chaque contrôle ci-dessous fonctionne avec une carte bouton standard de Home Assistant pointant vers le même script. Les cartes personnalisées, c'est du maquillage, pas de la plomberie.
Étape 2

Trouvez vos deux ID d'entités

Chaque extrait de cette page utilise deux paramètres fictifs. Trouvez les vôtres une fois, et le reste n'est plus que du copier-coller.

Le milieu de chaque ID de script est l'adresse MAC de votre récepteur, douze caractères en minuscules, identiques partout. Copiez-la une fois. Partout où cette page écrit MAC, mettez la vôtre.

Ignorez ceux qui contiennent unavailable. Les anciennes versions nommaient les scripts d'après le nom du récepteur plutôt que son adresse MAC. Si vous avez synchronisé à l'époque, ces anciens scripts sont toujours listés et sont morts. Les scripts actifs sont ceux nommés d'après l'adresse MAC.
Étape 3

Créez la vue

  1. 1. Paramètres › Tableaux de bord › Ajouter un tableau de bord › Nouveau tableau de bord à partir de zéro. Donnez-lui le nom que vous voulez.
  2. 2. Ouvrez-le, puis cliquez sur l'icône crayon en haut à droite pour modifier.
  3. 3. Ajoutez une vue et choisissez la disposition Sections. Pas Masonry. C'est Sections qui permet un réagencement correct sur téléphone.
  4. 4. Dans les paramètres de la vue, réglez Colonnes maximales sur 3 et activez Placement dense des sections.

À partir de là, chaque étape consiste à ajouter une section, puis à y coller des cartes. Pour coller du YAML, utilisez le menu à trois points d'une carte et choisissez Modifier en YAML, ou le menu à trois points du tableau de bord pour accéder à l'éditeur de configuration brute et tout coller d'un coup.

# The view's own settings, if you prefer to type them
type: sections
title: AVR Maestro
icon: mdi:audio-video
max_columns: 3
dense_section_placement: true
Étape 4

Ajoutez un contrôle

Commencez par l'élément le plus simple du tableau, pour vérifier que vos ID d'entités sont corrects avant de construire quoi que ce soit de compliqué. Ajoutez une section, ajoutez une carte, Modifier en YAML, collez :

type: button
name: Pure Direct
icon: mdi:speaker
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_mode_pure_direct

Home Assistant standard. Pas besoin de HACS.

Appuyez dessus. Si le récepteur réagit, vos ID sont corrects et tout ce qui suit fonctionnera. Si rien ne se passe, retournez à l'étape 2.

Étape 5

Faites-la s'allumer quand elle est active

C'est le modèle qui vaut la peine d'être appris, et chaque tuile de source et de surround du tableau en est une copie. La carte envoie un script et se colore d'après l'entité du récepteur, de sorte que l'entrée sur laquelle vous êtes vraiment est allumée et les autres ne le sont pas.

La grille de sources avec Nvidia Shield allumée en orange et les douze autres entrées éteintes
Une tuile allumée, douze éteintes
type: custom:mushroom-template-card
entity: script.avr_maestro_MAC_input_cd
icon: mdi:disc
primary: CD
icon_color: >-
  {{ 'orange' if (state_attr('media_player.your_receiver','source') or '')|lower
     == 'cd' else 'grey' }}
layout: vertical
fill_container: true
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_input_cd
card_mod:
  style: |
    ha-card {
      border-radius: 14px;
    {% if (state_attr('media_player.your_receiver','source') or '')|lower == 'cd' %}
      background: linear-gradient(160deg, rgba(226,86,10,0.34), rgba(15,15,17,0.88));
      border: 1px solid rgba(255,122,24,0.80);
    {% else %}
      background: rgba(15,15,17,0.72);
      border: 1px solid rgba(255,122,24,0.14);
    {% endif %}
    }

Modifiez trois choses par entrée : le script, l'icône et la chaîne de comparaison.

Deux points à soigner, sinon une tuile ne s'allumera jamais :

Les modes surround utilisent la même carte, avec sound_mode à la place de source.

Étape 6

Donnez à chaque section un en-tête en direct

Un simple titre est de l'espace perdu. Placez la valeur en direct dessous et « Sources » devient « Sources / Actuellement sur Nvidia Shield ».

type: custom:button-card
name: Sources
icon: mdi:video-input-hdmi
color_type: label-card
entity: media_player.your_receiver
show_label: true
label: >-
  [[[ var v = states["media_player.your_receiver"].attributes.source;
      return v ? ("Now on " + v) : "Receiver in standby"; ]]]
tap_action:
  action: none
styles:
  grid:
    - grid-template-areas: '"i n" "i l"'
    - grid-template-columns: min-content auto
  name:
    - font-size: 13px
    - letter-spacing: 3px
    - text-transform: uppercase
    - justify-self: start
  label:
    - font-size: 11px
    - justify-self: start

C'est la grille à deux lignes qui place l'étiquette sous le titre plutôt qu'à côté.

Remplacez attributes.source par attributes.sound_mode dans l'en-tête Surround, et ainsi de suite.

Étape 7

Affichez le volume en dB

Home Assistant indique le volume sous forme de fraction. Personne ne règle un récepteur sur « 0.67 ». Une ligne de calcul règle le problème et toute la section se met à ressembler à un vrai récepteur.

La section volume : un curseur, plus, moins, sourdine et quatre préréglages en dB
Night, Dialog, Movie et Loud, chacun étiqueté avec les dB qu'il applique
La conversion. Home Assistant publie volume_level sous la forme du volume principal divisé par 100, et sur les récepteurs Denon et Marantz, MV 80 correspond à la référence 0 dB. Donc dB = volume_level × 100 − 80. Un volume_level de 0.67 correspond à un volume principal de 67, soit −13.0 dB.
# The readout
type: custom:mushroom-template-card
entity: media_player.your_receiver
icon: mdi:volume-high
primary: >-
  {% set v = state_attr('media_player.your_receiver','volume_level') %}
  {% if v is not none %}{{ (v * 100 - 80) | round(1) }} dB{% else %}Standby{% endif %}
secondary: Master volume
layout: vertical
# The slider. media_controls must be empty or the bar becomes a power button
type: custom:mushroom-media-player-card
entity: media_player.your_receiver
volume_controls:
  - volume_set
media_controls: []
show_volume_level: true
# A preset. 0.50 is master volume 50, which is -30 dB
type: custom:mushroom-template-card
entity: media_player.your_receiver
icon: mdi:weather-night
primary: Night
secondary: "-30 dB"
tap_action:
  action: perform-action
  perform_action: media_player.volume_set
  target:
    entity_id: media_player.your_receiver
  data:
    volume_level: 0.50
Choisissez votre préréglage le plus fort avec discernement. Celui ci-dessus s'arrête à −10 dB. Il est bien plus facile de toucher un tableau de bord par accident qu'une télécommande, et le niveau de référence sur un gros récepteur est vraiment fort.
Étape 8

Ajoutez vos Scènes

Lisez le nom depuis le script au lieu de le saisir, et renommer une Scène dans AVR Maestro renomme la tuile sans aucune modification du tableau de bord.

Quatre tuiles de scène, chacune listant les réglages que cette scène restaure
Chaque tuile indique ce que sa scène restaure réellement
type: custom:mushroom-template-card
entity: script.avr_maestro_MAC_scene_1234567890123
icon: mdi:theater
primary: >-
  {{ state_attr('script.avr_maestro_MAC_scene_1234567890123','friendly_name')
     | replace('AVR Maestro - ', '') | replace(' (Your Receiver)', '') }}
secondary: >-
  {% set t = states.script['avr_maestro_MAC_scene_1234567890123'].attributes.last_triggered %}
  {{ 'recalled ' ~ relative_time(t) ~ ' ago' if t else 'not run yet' }}
multiline_secondary: true
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_scene_1234567890123

Les deux appels replace() retirent le préfixe et le nom du récepteur du nom convivial.

Une deuxième ligne vaut la minute supplémentaire. Un mur de boutons aux noms évocateurs ne vous dit rien à 11 heures du soir ; une ligne indiquant ce que chacun restaure vous dit lequel presser.

Étape 9

Ajoutez l'historique

L'entité lecteur multimédia du récepteur est enregistrée par Home Assistant comme n'importe quelle autre, vous obtenez donc un historique d'écoute gratuitement. Tout ce qui suit provient de cette seule entité : aucun capteur supplémentaire, aucun assistant, rien à configurer au préalable.

Cinq graphiques d'historique : alimentation et activité, volume principal en dB, volume par jour, source utilisée et mode surround
Cinq graphiques, une entité, sept jours

La simple chronologie d'états n'a besoin d'aucune carte personnalisée, et c'est celle qui vaut le plus la peine d'être installée :

type: history-graph
hours_to_show: 168
entities:
  - entity: media_player.your_receiver
    name: Receiver

Allumé, éteint, et ce qu'il faisait, sur une semaine.

Le volume en dB utilise la même conversion qu'à l'étape 7 :

type: custom:apexcharts-card
graph_span: 7d
header:
  show: true
  title: Master volume, last 7 days
series:
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Master volume
    type: line
    curve: smooth
    unit: dB
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100 - 80;"
    extend_to: now
    group_by:
      duration: 1h
      func: last
      fill: last
apex_config:
  chart:
    height: 240
  yaxis:
    min: -60
    max: 0

group_by avec fill: last transforme des événements espacés en une ligne continue. L'axe des ordonnées doit être placé dans apex_config pour être pris en compte.

Une moyenne et un pic quotidiens donnent une forme à une courbe en dents de scie :

type: custom:apexcharts-card
graph_span: 7d
span:
  end: day
header:
  show: true
  title: Master volume by day in dB, average and peak
series:
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Day average
    type: column
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100;"
    group_by: {duration: 1d, func: avg, fill: 'null'}
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Day peak
    type: line
    curve: smooth
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100;"
    group_by: {duration: 1d, func: max, fill: 'null'}
apex_config:
  yaxis:
    min: 0
    max: 80
    labels:
      formatter: "EVAL:function (v) { return (v - 80).toFixed(0); }"
  tooltip:
    y:
      formatter: "EVAL:function (v) { return v == null ? '' : (v - 80).toFixed(1) + ' dB'; }"

Deux séries issues du même attribut, regroupées par jour.

Pourquoi celui-ci trace de 0 à 80 et met en forme en dB, au lieu de tracer les dB. Les barres partent du plancher de l'axe. Tracez directement les dB et chaque barre pend depuis 0, si bien qu'une longue barre signifie un volume faible, ce qui se lit à l'envers. Tracez le nombre brut du volume principal et soustrayez 80 dans les formateurs de l'axe et de l'infobulle, et les barres montent vers le haut alors que tout ce que le lecteur voit reste en dB. fill: 'null' signifie qu'un jour sans mesure n'a pas de barre, au lieu de reprendre celle de la veille.

Et les deux qui répondent à « sur quoi est-ce que je regarde vraiment, et dans quel mode » : la source et le mode surround, tracés sous forme de chronologie de celui qui était sélectionné.

type: custom:apexcharts-card
graph_span: 7d
span:
  end: day
header:
  show: true
  title: Source in use, last 7 days
series:
  - entity: media_player.your_receiver
    attribute: source
    name: Source
    type: line
    curve: stepline
    stroke_width: 3
    extend_to: now
    float_precision: 0
    transform: |
      if (x == null) return null;
      var m = ["Phono", "NET", "Xbox", "Nvidia Shield"];
      var i = m.indexOf(x);
      return i < 0 ? 0 : i + 1;
apex_config:
  yaxis:
    min: 0
    max: 4
    tickAmount: 4
    labels:
      formatter: >-
        EVAL:function (v) { return ["Other", "Phono", "HEOS Net", "Xbox",
        "Shield"][Math.round(v)] || ''; }
  tooltip:
    y:
      formatter: >-
        EVAL:function (v) { return v == null ? 'off' : ["Other", "Phono",
        "HEOS Net", "Xbox", "Shield"][Math.round(v)] || 'Other'; }

Mettez vos propres sources dans le tableau transform et dans les deux tableaux de formateurs. Gardez l'indice 0 sur « Other ».

Un axe de graphique a besoin de nombres, donc transform associe chaque nom de source à une position et les formateurs refont la correspondance inverse pour les étiquettes et l'infobulle. Rendez la correspondance totale : null (récepteur éteint) reste un trou, et tout ce qui n'est pas dans votre liste tombe dans « Other », si bien que les deux ne peuvent jamais être confondus. La même carte avec sound_mode vous donne le mode surround, avec les chaînes en majuscules exactement comme votre récepteur les indique.

Gardez stepline sur ces deux derniers. Une source ou un mode surround est une catégorie, pas un nombre. Lissez la courbe et la ligne glisse de Shield à Xbox en passant par tout ce qui se trouve entre les deux sur l'axe, dessinant une entrée qui n'a jamais été sélectionnée. Le volume est une vraie quantité et se lisse honnêtement ; une catégorie, non.
Vérifiez d'abord la rétention de votre recorder. Home Assistant conserve dix jours par défaut, donc sept jours est à peu près le maximum utile. Pour remonter plus loin, il vous faut un capteur modèle state_class: measurement, que Home Assistant conserve en statistiques à long terme pendant des années.
Un jour manquant est généralement normal. Home Assistant enregistre les changements, pas des échantillons. Laissez le récepteur sur une entrée à un volume pendant deux jours et il n'écrit rien du tout, donc ce jour n'a pas de barre. On dirait une perte de données, c'est l'inverse : il ne s'est rien passé.
Étape 10

Ou prenez le tout

La vue complète, chaque section et chaque carte, avec des paramètres fictifs à la place des ID d'entités.

  1. 1. Téléchargez le YAML de la vue.
  2. 2. Ouvrez-le dans n'importe quel éditeur de texte et remplacez deux chaînes, partout où elles apparaissent : YOUR_RECEIVER par le nom de votre entité lecteur multimédia, et YOURMAC par les douze caractères de votre récepteur relevés à l'étape 2.
  3. 3. Dans Home Assistant, ouvrez votre tableau de bord, l'icône crayon, le menu à trois points, l'éditeur de configuration brute, et collez-le comme une vue.
Vos ID de scènes ne correspondront pas. Les scripts de scène sont nommés d'après le moment où la Scène a été créée, donc les quatre du fichier n'existent pas sur votre système : ces cartes s'afficheront sans rien faire. Remplacez leurs ID d'entités par les vôtres relevés à l'étape 2, ou supprimez la section Scènes et reconstruisez-la avec l'étape 8.
Deux autres points à prévoir. Les graphiques de source et de surround reprennent les noms de sources du récepteur sur lequel ceci a été conçu, modifiez donc ces tableaux comme l'explique l'étape 9. Et les étiquettes des tuiles sont en anglais ; rien dans le fichier n'est traduit.

Si une tuile ne s'allume jamais

Avant de croire que vous vous êtes trompé : certaines ne peuvent pas s'allumer, et mieux vaut savoir lesquelles.

Une tuile ne peut afficher son état que si Home Assistant peut le lire, et il lit votre récepteur à deux endroits. L'intégration Denon AVR publie l'essentiel sur l'entité lecteur multimédia. AVR Maestro publie le reste : il crée un capteur Status Bridge, sensor.avr_maestro_your_receiver, et y écrit sous forme d'attributs les valeurs qu'il connaît déjà.

Sur l'entité lecteur multimédiaSur le capteur Status Bridge
AlimentationCourbe Audyssey MultEQ
Source sélectionnéeDynamic Volume et niveau de référence
Mode surroundQuel emplacement Dirac est chargé
Volume et sourdineVariateur de la façade, mode Éco
Dynamic EQ, parfoisPréréglage d'enceintes, tonalité, et des dizaines d'autres

Les deux colonnes sont désormais lisibles. Prenez une valeur du lecteur multimédia depuis states['media_player.your_receiver'].attributes, et une valeur du Status Bridge avec state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), pour qu'une tuile s'allume pour le réglage réellement actif au lieu de seulement lancer le script qui le modifie.

Mesuré sur le récepteur utilisé pour ce guide : l'entité lecteur multimédia porte environ vingt des soixante contrôles, et le capteur Status Bridge en publie environ quarante de plus. À eux deux, un tableau de bord peut lire presque tout ce qu'il peut modifier - la différence entre un mur de boutons et une vraie surface de contrôle.

Si une valeur peut avoir deux sens, dites-le. Dynamic EQ arrive sous la forme true, false, ou pas du tout. Traiter « pas du tout » comme « désactivé » affiche sur votre mur une réponse fausse mais pleine d'assurance.
icon_color: >-
  {% set d = state_attr('media_player.your_receiver','dynamic_eq') %}
  {{ 'orange' if d is true else 'grey' }}
secondary: >-
  {% set d = state_attr('media_player.your_receiver','dynamic_eq') %}
  {% if d is none %}state not published{% elif d %}on{% else %}off{% endif %}

Trois états, pas deux.

Autres points à connaître

Le même tableau de bord en largeur de téléphone, réagencé sur une seule colonne
Même tableau de bord en largeur de téléphone : les trois colonnes n'en font plus qu'une, et rien n'a été configuré pour cela
Questions fréquentes

Le tableau de bord, vos questions

Ai-je besoin de cartes personnalisées HACS pour le construire ?
Pas pour qu'il fonctionne. Chaque commande de cette page repose sur une simple carte bouton de Home Assistant. Mushroom, button-card, card-mod et apexcharts-card lui donnent l'apparence des captures d'écran, et chaque section ci-dessous indique laquelle elle utilise et ce que vous perdez sans elle.
Pourquoi certains boutons s'allument-ils et d'autres non ?
Un bouton s'allume quand Home Assistant peut lire l'état correspondant sur votre récepteur. La source, le mode surround, le volume et la sourdine remontent de l'entité lecteur multimédia du récepteur lui-même, donc ceux-là s'allument. La courbe Audyssey, l'emplacement Dirac, le variateur, le mode éco et le préréglage d'enceintes ne sont pas publiés par l'intégration Denon, donc Home Assistant ne peut pas savoir lequel est actif et les boutons restent éteints tant que vous n'en touchez pas un.
Puis-je afficher le vrai volume en dB plutôt qu'un pourcentage ?
Oui. Home Assistant publie volume_level sous la forme du volume principal de l'ampli divisé par 100, et sur les récepteurs Denon et Marantz, MV 80 correspond à la référence 0 dB. Donc les dB valent volume_level multiplié par 100, moins 80. Un volume_level de 0.67 correspond à un volume principal de 67, soit -13.0 dB.
Mes ID d'entités seront-ils identiques à ceux de ce guide ?
Le début et la fin, oui, mais pas le milieu. AVR Maestro nomme ses scripts d'après l'adresse MAC du récepteur, de sorte qu'un renommage met à jour le même script au lieu d'en créer un second. Les vôtres s'écriront script.avr_maestro_ suivi de vos douze caractères, puis du nom du contrôle. Ouvrez Outils de développement puis États dans Home Assistant et filtrez sur avr_maestro pour voir votre propre liste.
La suite du guide

Autres guides AVR Maestro

Prise en main · Écran d'accueil · Scènes · Icônes personnalisées · Son · Égaliseur graphique · Enceintes · Pourquoi une commande est verrouillée · L'assistant · Domotique · Zones · Télécommande · Radio (FM/AM) · Affichage à l'écran · Paramètres · Langues · Contrôles de volume · Sauvegarde & restauration · Lecture en cours & HEOS

Tout votre récepteur, sur un seul mur

Domotique est le seul déverrouillage payant d'AVR Maestro. Tout le reste, y compris l'assistant IA embarqué, est inclus.

Disponible sur Google Play Télécharger dans l'App Store Télécharger dans le Mac App Store Disponible sur le Microsoft Store

Retour à la domotique → · Guide d'utilisation complet →