Dez passos, o YAML de cada card e uma visualização completa que você cola de uma só vez. Montado e fotografado em um Marantz CINEMA 30 de verdade. Troque duas strings e ele é seu.
Duas coisas alimentam este dashboard, e a diferença importa em todos os passos abaixo.
| Vem de | Fornece |
|---|---|
| Os scripts sincronizados do AVR Maestro | Todos os controles. Entradas, modos surround, Audyssey, Dirac, Smart Selects, predefinições, dimmer, eco e suas Cenas. |
| A entidade media player da integração Denon AVR | O estado em tempo real. Energia, fonte selecionada, modo surround, volume, mudo. |
Os quatro estão na loja padrão do HACS. No Home Assistant: HACS › Frontend › Explorar & Baixar Repositórios, busque o nome, clique em Baixar e depois recarregue o navegador.
| Procure por | Usado para | Se você pular |
|---|---|---|
| Mushroom | Todos os blocos de controle e o controle deslizante de volume | Use um card button simples. Funciona, mas fica mais quadrado. |
| button-card | Cabeçalhos de seção com um rótulo em tempo real | Use um card markdown ou títulos simples. |
| card-mod | As cores e o estado aceso do bloco ativo | Tudo continua funcionando. Nada acende. |
| apexcharts-card | Os gráficos de histórico | Use o card history-graph nativo. |
Todos os trechos desta página usam dois marcadores. Encontre os seus uma vez e o resto é copiar e colar.
media_player.your_receiver → Configurações › Dispositivos & Serviços › seu receptor › a entidade de media player. Algo como media_player.marantz_cinema_30.script.avr_maestro_MAC_... → Ferramentas do Desenvolvedor › Estados, e digite avr_maestro no filtro de entidades. Toda a sua lista de controles aparece.O trecho do meio de cada ID de script é o endereço MAC do seu receptor, doze caracteres minúsculos, igual em todos eles. Copie uma vez. Em todo lugar onde esta página escreve MAC, coloque o seu.
unavailable. Versões antigas nomeavam os scripts com o nome do receptor em vez do MAC. Se você sincronizou naquela época, esses scripts antigos ainda aparecem na lista e estão inativos. Os que valem são os nomeados com o MAC.A partir daqui, todo passo é: adicionar uma seção e colar cards nela. Para colar YAML, use o menu de três pontos de um card e escolha Editar em YAML, ou o menu de três pontos do dashboard e Editor de configuração bruta para colar tudo de uma 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
Comece pela coisa mais simples do painel, para saber que os IDs das suas entidades estão certos antes de construir algo complicado. Adicione uma seção, adicione um card, Editar em YAML e cole:
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 padrão. Sem HACS.
Toque nele. Se o receptor mudar, seus IDs estão certos e tudo abaixo vai funcionar. Se nada acontecer, volte ao passo 2.
Este é o padrão que vale aprender, e todo bloco de fonte e de surround do painel é uma cópia dele. O card envia um script e se colore a partir da entidade do receptor, de modo que a entrada em uso fica acesa e as outras não.

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 %}
}
Altere três coisas por entrada: o script, o ícone e a string usada na comparação.
Acerte duas coisas, ou um bloco nunca vai acender:
source_list e sound_mode_list. Essas são as strings exatas. Compare em minúsculas, como acima.Xbox, enquanto o controle do AVR Maestro continua se chamando input_game1. Compare com o que o receptor informa, não com o nome do script.Os modos surround usam o mesmo card, com sound_mode no lugar de source.
Um título simples é espaço desperdiçado. Coloque o valor em tempo real embaixo dele e “Fontes” vira “Fontes / Agora no 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
A grade de duas linhas é o que coloca o rótulo embaixo do título em vez de ao lado.
Troque attributes.source por attributes.sound_mode no cabeçalho Surround, e assim por diante.
O Home Assistant informa o volume como uma fração. Ninguém ajusta um receptor para “0.67”. Uma linha de matemática resolve, e a seção inteira passa a parecer um receptor.

volume_level como o volume principal dividido por 100, e nos receptores Denon e Marantz MV 80 é a referência de 0 dB. Então dB = volume_level × 100 − 80. Um volume_level de 0.67 corresponde ao volume principal 67, que é −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
Leia o nome a partir do script em vez de digitá-lo, e renomear uma Cena no AVR Maestro renomeia o bloco sem precisar editar o dashboard.

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
As duas chamadas replace() removem o prefixo e o nome do receptor do nome amigável.
Vale gastar um minuto a mais numa segunda linha. Uma parede de botões com nomes sugestivos não diz nada às 11 da noite; uma linha dizendo o que cada um restaura diz qual apertar.
A entidade media player do receptor é registrada pelo Home Assistant como qualquer outra, então você ganha um histórico de uso de graça. Tudo abaixo vem dessa única entidade: sem sensores extras, sem helpers, nada para configurar antes.

A linha do tempo de estados simples não precisa de nenhum card personalizado e é a que mais vale a pena ter:
type: history-graph
hours_to_show: 168
entities:
- entity: media_player.your_receiver
name: Receiver
Ligado, desligado e o que ele estava fazendo, ao longo de uma semana.
O volume em dB usa a mesma conversão do passo 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 com fill: last transforma eventos esparsos em uma linha contínua. O eixo y precisa ir em apex_config para ter efeito.
Uma média e um pico diários transformam uma linha irregular em algo com 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'; }"
Duas séries do mesmo atributo, agrupadas por dia.
fill: 'null' significa que um dia sem leituras fica sem barra, em vez de repetir o dia anterior.E os dois que respondem “em que eu realmente assisto, e em qual modo”: fonte e modo surround, plotados como uma linha do tempo de qual estava selecionado.
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'; }
Coloque suas próprias fontes no array transform e nos dois arrays de formatadores. Mantenha o índice 0 como “Other”.
Um eixo de gráfico precisa de números, então o transform mapeia cada nome de fonte para uma posição e os formatadores fazem o caminho inverso para os rótulos e a dica. Faça o mapeamento total: null (receptor desligado) continua sendo uma lacuna, e tudo o que não estiver na sua lista cai em “Other”, de modo que os dois nunca se confundem. O mesmo card de novo com sound_mode dá o modo surround, com as strings em maiúsculas exatamente como o seu receptor informa.
stepline nesses dois últimos. Uma fonte ou um modo surround é uma categoria, não um número. Se você suavizar a curva, a linha oscila entre Shield e Xbox passando por tudo o que estiver entre eles no eixo, desenhando uma entrada que nunca foi selecionada. O volume é uma grandeza real e se suaviza com honestidade; uma categoria não.state_class: measurement, que o Home Assistant mantém como estatísticas de longo prazo por anos.A visualização completa, com todas as seções e todos os cards, com marcadores no lugar dos IDs de entidade.
YOUR_RECEIVER pelo nome da sua entidade media player e YOURMAC pelos doze caracteres do seu receptor, do passo 2.Antes de achar que você montou errado: alguns não conseguem acender, e vale saber quais.
Um bloco só mostra seu estado se o Home Assistant consegue lê-lo, e ele lê o seu receptor de dois lugares. A integração Denon AVR publica o básico na entidade media player. O AVR Maestro publica o resto: ele cria um sensor Status Bridge, sensor.avr_maestro_your_receiver, e grava nele, como atributos, as leituras que já tem.
| Na entidade media player | No sensor Status Bridge |
|---|---|
| Energia | Curva Audyssey MultEQ |
| Fonte selecionada | Dynamic Volume e nível de referência |
| Modo surround | Qual slot do Dirac está carregado |
| Volume e mudo | Dimmer do painel frontal, modo Eco |
| Dynamic EQ, às vezes | Predefinição de alto-falantes, tom e dezenas de outros |
Agora as duas colunas são legíveis. Pegue um valor do media player em states['media_player.your_receiver'].attributes e um valor do Status Bridge com state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), para que um bloco acenda para a configuração que está realmente ativa, em vez de apenas disparar o script que a altera.
Medido no receptor em que isto foi montado: a entidade media player traz cerca de vinte dos sessenta controles, e o sensor Status Bridge publica aproximadamente outros quarenta. Juntos, permitem que um dashboard leia quase tudo o que consegue alterar - a diferença entre uma parede de botões e uma superfície de controle.
true, false ou simplesmente não chega. Tratar “não chega” como “desligado” coloca uma resposta errada e confiante na sua parede.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 %}
Três estados, não dois.
grid_options: {columns: 9}. Para seis por linha, 6.media_controls com on_off dentro. Defina media_controls: [].multiline_secondary: true.experimental.color_threshold. Ele desenha o traço como um gradiente vertical, e um segmento perfeitamente horizontal tem altura zero para aplicar o gradiente, então fica invisível. Uma sessão de 43 horas em um único volume desapareceu por completo. Use um color sólido.
Primeiros passos · Tela Inicial · Cenas · Ícones Personalizados · Som · Graphic EQ · Alto-falantes · Por que um controle está bloqueado · O Assistente · Automação Residencial · Zonas · Remoto · Rádio (FM/AM) · Exibição em Tela (OSD) · Configurações · Idiomas · Controles de Volume · Backup & Restauração · Reproduzindo agora & HEOS
A Automação Residencial é o único recurso pago do AVR Maestro. Todo o resto, inclusive o assistente de IA no dispositivo, está incluído.
Voltar para Automação Residencial → · Guia do Usuário completo →