Home Assistant · paso a paso

Construye este panel de Home Assistant en aproximadamente una hora

Diez pasos, el YAML de cada tarjeta y una vista completa que puedes pegar de una sola vez. Creado y fotografiado con un Marantz CINEMA 30 real. Cambia dos cadenas y será tuyo.

El panel terminado: una tarjeta principal de reproducción, volumen con preajustes en dB, una cuadrícula de fuentes, modos surround, corrección de sala, escenas y un gráfico de volumen
Lo que vas a construir
¿Tienes prisa? Salta al paso 10, descarga la vista completa, cambia dos cadenas y pégala. Los pasos intermedios explican qué hace cada pieza para que puedas modificarla.

Antes de empezar

Este panel se alimenta de dos fuentes, y la diferencia importa en cada paso que sigue.

Procede deTe da
Los scripts sincronizados de AVR MaestroCada control. Entradas, modos surround, Audyssey, Dirac, Smart Selects, preajustes, atenuador, eco y tus Escenas.
La entidad de reproductor de medios de la integración Denon AVREstado en vivo. Encendido, fuente seleccionada, modo surround, volumen y silencio.
Paso 1

Instala cuatro tarjetas desde HACS

Las cuatro están en la tienda HACS predeterminada. En Home Assistant: HACS › Frontend › Explorar & descargar repositorios, busca el nombre, pulsa Descargar y recarga el navegador.

BuscaSe usa paraSi te la saltas
MushroomTodos los botones de control y el control deslizante de volumenUsa una tarjeta button normal. Funciona, pero queda más cuadrada.
button-cardEncabezados de sección con una etiqueta en vivoUsa una tarjeta markdown o encabezados normales.
card-modLos colores y el estado iluminado del botón activoTodo sigue funcionando. Nada se ilumina.
apexcharts-cardLos gráficos de historialUsa la tarjeta history-graph integrada.
Ninguna es imprescindible para que funcione. Cada control de abajo funciona con una tarjeta de botón estándar de Home Assistant que apunta al mismo script. Las tarjetas personalizadas son maquillaje, no fontanería.
Paso 2

Encuentra tus dos ID de entidad

Cada fragmento de esta página usa dos marcadores de posición. Búscalos una sola vez y el resto es copiar y pegar.

La parte central de cada ID de script es la dirección MAC de tu receptor, doce caracteres en minúscula, la misma en todos. Cópiala una vez. Donde esta página escribe MAC, pon la tuya.

Ignora los que digan unavailable. Las versiones antiguas daban nombre a los scripts según el nombre del receptor en lugar de su MAC. Si sincronizaste entonces, esos scripts antiguos siguen apareciendo en la lista y están muertos. Los activos son los que llevan la MAC en el nombre.
Paso 3

Crea la vista

  1. 1. Ajustes › Paneles › Añadir panel › Nuevo panel desde cero. Ponle el nombre que quieras.
  2. 2. Ábrelo y pulsa el icono del lápiz, arriba a la derecha, para editar.
  3. 3. Añade una vista y elige el diseño Secciones. No Masonry. Secciones es lo que hace que se reorganice correctamente en el teléfono.
  4. 4. En los ajustes de la vista, establece Columnas máximas en 3 y activa Colocación densa de secciones.

A partir de aquí, cada paso consiste en añadir una sección y pegar tarjetas en ella. Para pegar YAML, usa el menú de tres puntos de una tarjeta y elige Editar en YAML, o el menú de tres puntos del panel para abrir el Editor de configuración en bruto y pegarlo todo de una vez.

# 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
Paso 4

Añade un control

Empieza por lo más sencillo del tablero, para saber que tus ID de entidad son correctos antes de construir nada complicado. Añade una sección, añade una tarjeta, Editar en YAML y pega:

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 estándar. No hace falta HACS.

Púlsalo. Si el receptor cambia, tus ID son correctos y todo lo que sigue funcionará. Si no pasa nada, vuelve al paso 2.

Paso 5

Haz que se ilumine cuando sea el activo

Este es el patrón que merece la pena aprender, y cada botón de fuente y de surround del tablero es una copia suya. La tarjeta envía un script y se colorea a partir de la entidad del receptor, de modo que la entrada en la que estás se ilumina y las demás no.

La cuadrícula de fuentes con Nvidia Shield iluminada en naranja y las otras doce entradas apagadas
Un botón iluminado, doce apagados
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 %}
    }

Cambia tres cosas por entrada: el script, el icono y la cadena con la que se compara.

Dos cosas que debes hacer bien, o un botón nunca se iluminará:

Los modos surround usan la misma tarjeta con sound_mode en lugar de source.

Paso 6

Da a cada sección un encabezado en vivo

Un título sin más es espacio desaprovechado. Pon el valor en vivo debajo y «Fuentes» pasa a ser «Fuentes / Ahora en 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

La cuadrícula de dos líneas es lo que coloca la etiqueta debajo del título en lugar de al lado.

Cambia attributes.source por attributes.sound_mode en el encabezado de Surround, y así con el resto.

Paso 7

Muestra el volumen en dB

Home Assistant reporta el volumen como una fracción. Nadie pone un receptor a «0.67». Una línea de matemáticas lo arregla y toda la sección empieza a parecerse a un receptor.

La sección de volumen: un control deslizante, subir, bajar, silencio y cuatro preajustes en dB
Night, Dialog, Movie y Loud, cada uno etiquetado con los dB que establece
La conversión. Home Assistant publica volume_level como el volumen principal dividido por 100, y en los receptores Denon y Marantz MV 80 es la referencia de 0 dB. Así que dB = volume_level × 100 − 80. Un volume_level de 0.67 es un volumen principal de 67, que son −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
Elige tu preajuste más alto con criterio. El conjunto de arriba se detiene en −10 dB. Es mucho más fácil pulsar un panel por accidente que un mando, y el nivel de referencia en un receptor grande es realmente fuerte.
Paso 8

Añade tus Escenas

Lee el nombre del script en lugar de escribirlo, y al renombrar una Escena en AVR Maestro el botón cambia de nombre sin tocar el panel.

Cuatro botones de escena, cada uno con la lista de ajustes que esa escena restaura
Cada botón indica lo que su escena restaura realmente
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

Las dos llamadas a replace() recortan el prefijo y el nombre del receptor del nombre descriptivo.

Merece la pena dedicar un minuto extra a la segunda línea. Un muro de botones con nombres evocadores no te dice nada a las 11 de la noche; una línea que indique qué restaura cada uno te dice cuál pulsar.

Paso 9

Añade historial

Home Assistant registra la entidad de reproductor de medios del receptor como cualquier otra, así que obtienes un historial de escucha gratis. Todo lo que sigue sale de esa única entidad: sin sensores adicionales, sin ayudantes, sin nada que configurar antes.

Cinco gráficos de historial: encendido y actividad, volumen principal en dB, volumen por día, fuente en uso y modo surround
Cinco gráficos, una entidad, siete días

La línea de tiempo de estados simple no necesita ninguna tarjeta personalizada y es la que más merece la pena tener:

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

Encendido, apagado y qué estaba haciendo, a lo largo de una semana.

El volumen en dB usa la misma conversión que el paso 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 con fill: last convierte eventos dispersos en una línea continua. El eje y tiene que ir en apex_config para que surta efecto.

Un promedio diario y un pico convierten una línea con picos en algo con forma:

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'; }"

Dos series del mismo atributo, agrupadas por día.

Por qué este gráfico traza de 0 a 80 y da formato a dB, en lugar de trazar dB. Las barras crecen desde la base del eje. Si trazas dB directamente, todas las barras cuelgan desde 0, así que una barra larga significa silencio, lo cual se lee al revés. Traza el número bruto del volumen principal y resta 80 en los formateadores del eje y de la información emergente, y las barras crecen hacia arriba mientras todo lo que ve el lector sigue siendo dB. fill: 'null' significa que un día sin lecturas no recibe barra, en lugar de arrastrar la de ayer.

Y los dos que responden a «qué veo realmente y con qué»: la fuente y el modo surround, trazados como una línea de tiempo de cuál estaba seleccionado.

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'; }

Pon tus propias fuentes en el array transform y en los dos arrays de formateadores. Mantén el índice 0 como «Other».

Un eje de gráfico necesita números, así que transform asigna una posición a cada nombre de fuente y los formateadores la traducen de vuelta para las etiquetas y la información emergente. Haz que la asignación sea total: null (receptor apagado) sigue siendo un hueco, y todo lo que no esté en tu lista cae en «Other», de modo que nunca se puedan confundir. La misma tarjeta con sound_mode te da el modo surround, con las cadenas en mayúsculas exactamente como las reporta tu receptor.

Mantén stepline en estos dos últimos. Una fuente o un modo surround es una categoría, no un número. Si suavizas la curva, la línea oscila entre Shield y Xbox pasando por lo que haya entre ellos en el eje, dibujando una entrada que nunca se seleccionó. El volumen es una cantidad real y se suaviza con honestidad; una categoría no.
Comprueba primero la retención de tu recorder. Home Assistant conserva diez días de forma predeterminada, así que siete días es lo máximo útil que puedes pedir. Para ir más atrás necesitas un sensor de plantilla state_class: measurement, que Home Assistant guarda como estadísticas a largo plazo durante años.
Un día que falta suele ser lo correcto. Home Assistant registra cambios, no muestras. Deja el receptor en una entrada y a un volumen durante dos días y no escribe nada en absoluto, así que ese día no tiene barra. Parece una pérdida de datos y es justo lo contrario: no pasó nada.
Paso 10

O llévatelo todo

La vista completa, con cada sección y cada tarjeta, con marcadores de posición en lugar de ID de entidad.

  1. 1. Descarga el YAML de la vista.
  2. 2. Ábrelo en cualquier editor de texto y sustituye dos cadenas, en todos los lugares donde aparezcan: YOUR_RECEIVER por el nombre de tu entidad de reproductor de medios, y YOURMAC por los doce caracteres de tu receptor del paso 2.
  3. 3. En Home Assistant, abre tu panel, el icono del lápiz, el menú de tres puntos, el Editor de configuración en bruto, y pégalo como una vista.
Tus ID de escena no coincidirán. Los scripts de Escena se nombran según cuándo se creó la Escena, así que las cuatro del archivo no existen en tu sistema: esas tarjetas se mostrarán pero no harán nada. Sustituye sus ID de entidad por los tuyos del paso 2, o elimina la sección de Escenas y reconstrúyela con el paso 8.
Otras dos cosas que debes esperar. Los gráficos de fuente y de surround llevan los nombres de fuente del receptor con el que se construyó esto, así que edita esos arrays como describe el paso 9. Y las etiquetas de los botones están en inglés; nada del archivo está traducido.

Si un botón nunca se ilumina

Antes de pensar que lo has construido mal: algunos no pueden iluminarse, y conviene saber cuáles.

Un botón solo puede mostrar su estado si Home Assistant puede leerlo, y lee tu receptor desde dos lugares. La integración Denon AVR publica lo básico en la entidad de reproductor de medios. AVR Maestro publica el resto: crea un sensor Status Bridge, sensor.avr_maestro_your_receiver, y escribe en él como atributos las lecturas que ya tiene.

En la entidad de reproductor de mediosEn el sensor Status Bridge
EncendidoCurva de Audyssey MultEQ
Fuente seleccionadaDynamic Volume y nivel de referencia
Modo surroundQué ranura de Dirac está cargada
Volumen y silencioAtenuador del panel frontal, modo Eco
Dynamic EQ, a vecesPreajuste de altavoces, tono y decenas más

Ahora se pueden leer ambas columnas. Toma un valor del reproductor de medios de states['media_player.your_receiver'].attributes y un valor de Status Bridge con state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), para que un botón se ilumine por el ajuste que realmente está activo en lugar de limitarse a lanzar el script que lo cambia.

Medido en el receptor con el que se construyó esto: la entidad de reproductor de medios incluye unos veinte de los sesenta controles, y el sensor Status Bridge publica unos cuarenta más. Entre los dos, un panel puede leer casi todo lo que puede cambiar - la diferencia entre un muro de botones y una superficie de control.

Si un valor puede significar dos cosas, dilo. Dynamic EQ llega como true, false o no llega. Tratar «no llega» como «apagado» pone una respuesta equivocada y muy segura de sí misma en tu pared.
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 %}

Tres estados, no dos.

Otras cosas que conviene saber

El mismo panel con ancho de teléfono, reorganizado en una sola columna
El mismo panel con ancho de teléfono: las tres columnas pasan a ser una, y no se configuró nada para que ocurriera
Preguntas frecuentes

El panel, respondido

¿Necesito tarjetas personalizadas de HACS para crearlo?
No para que funcione. Todos los controles de esta página funcionan con una tarjeta de botón normal de Home Assistant. Mushroom, button-card, card-mod y apexcharts-card son lo que le da el aspecto que ves en las capturas, y cada sección de abajo indica cuál usa y qué pierdes sin ella.
¿Por qué algunos botones se iluminan y otros no?
Un botón se ilumina cuando Home Assistant puede leer el estado correspondiente de tu receptor. La fuente, el modo surround, el volumen y el silencio proceden de la entidad 'reproductor de medios' del propio receptor, así que esos se resaltan. La curva de Audyssey, la ranura de Dirac, el atenuador, el modo eco y el preajuste de altavoces no los publica la integración Denon, por lo que Home Assistant no tiene forma de saber cuál está activo y los botones permanecen apagados hasta que pulsas uno.
¿Puedo mostrar el volumen real en dB en lugar de un porcentaje?
Sí. Home Assistant publica volume_level como el 'volumen principal' del receptor dividido por 100, y en los receptores Denon y Marantz MV 80 es la referencia de 0 dB. Así que dB es igual a volume_level por 100, menos 80. Un volume_level de 0.67 es un volumen principal de 67, que son -13.0 dB.
¿Mis ID de entidad coincidirán con los de esta guía?
El patrón sí, la parte central no. AVR Maestro da nombre a sus scripts a partir de la 'dirección MAC' del receptor, de modo que al renombrar se actualiza el mismo script en lugar de crear otro. El tuyo será script.avr_maestro_ seguido de tus propios doce caracteres y, después, el nombre del control. Abre Herramientas para desarrolladores y luego Estados en Home Assistant y filtra por avr_maestro para ver tu propia lista.
Más de la guía

Otras guías de AVR Maestro

Primeros pasos · Pantalla de inicio · Escenas · Iconos personalizados · Sonido · Ecualizador gráfico · Altavoces · Por qué un control está bloqueado · El Asistente · Domótica · Zonas · Mando · Radio (FM/AM) · Visualización en pantalla · Ajustes · Idiomas · Controles de volumen · Copia de seguridad & restauración · Reproduciendo ahora & HEOS

Todo tu receptor, en una sola pared

Domótica es el único desbloqueo de pago de AVR Maestro. Todo lo demás, incluido el asistente de AI en el dispositivo, está incluido.

Disponible en Google Play Descárgalo en el App Store Descárgalo en el Mac App Store Consíguelo en Microsoft Store

Volver a Domótica → · Guía de usuario completa →