Dez passos, o YAML de cada cartão e uma vista completa que pode colar de uma só vez. Criado e fotografado num Marantz CINEMA 30 real. Altere duas cadeias de texto e fica seu.
Este painel é alimentado por duas coisas, e a diferença conta em todos os passos seguintes.
| Origem | O que oferece |
|---|---|
| Os scripts sincronizados do AVR Maestro | Todos os controlos. Entradas, modos surround, Audyssey, Dirac, Smart Selects, predefinições, dimmer, eco, as suas Cenas. |
| A entidade media player da integração Denon AVR | O estado em direto. Alimentação, fonte selecionada, modo surround, volume, silêncio. |
Os quatro estão na loja predefinida do HACS. No Home Assistant: HACS › Frontend › Explore & Download Repositories, procure o nome, clique em Download e recarregue o navegador.
| Procurar por | Serve para | Se o ignorar |
|---|---|---|
| Mushroom | Todos os mosaicos de controlo e o seletor de volume | Use um cartão button simples. Funciona, mas fica mais quadrado. |
| button-card | Cabeçalhos de secção com uma etiqueta em direto | Use um cartão markdown ou títulos simples. |
| card-mod | As cores e o estado iluminado do mosaico ativo | Tudo continua a funcionar. Nada se ilumina. |
| apexcharts-card | Os gráficos de histórico | Use o cartão history-graph incorporado. |
Todos os excertos desta página usam dois marcadores de posição. Encontre os seus uma vez e o resto é copiar e colar.
media_player.your_receiver → Definições › Dispositivos & serviços › o seu recetor › a entidade de leitor multimédia. Algo como media_player.marantz_cinema_30.script.avr_maestro_MAC_... → Ferramentas de programador › Estados, e escreva avr_maestro no filtro de entidades. Aparece toda a sua lista de controlos.O meio de cada ID de script é o endereço MAC do seu recetor, doze caracteres em minúsculas, igual em todos. Copie-o uma vez. Onde esta página escrever MAC, coloque o seu.
unavailable. As versões antigas davam aos scripts o nome do recetor e não o endereço MAC. Se sincronizou nessa altura, esses scripts antigos continuam listados e estão inativos. Os que funcionam são os que têm o nome com o MAC.A partir daqui, cada passo é: adicionar uma secção e colar nela os cartões. Para colar YAML, use o menu de três pontos de um cartão e escolha Edit in YAML, ou o menu de três pontos do painel para abrir o Raw configuration editor e 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 seus IDs de entidade estão certos antes de construir algo complicado. Adicione uma secção, adicione um cartão, Edit in 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 de origem. Não precisa do HACS.
Toque nele. Se o recetor reagir, os seus IDs estão certos e tudo o que se segue vai funcionar. Se não acontecer nada, volte ao passo 2.
Este é o padrão que vale a pena aprender, e todos os mosaicos de fonte e de surround do painel são uma cópia dele. O cartão envia um script e pinta-se a partir da entidade do recetor, de modo que a entrada em que está realmente 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 cadeia de texto com que compara.
Duas coisas a acertar, ou um mosaico nunca se acende:
source_list e sound_mode_list. Essas são as cadeias exatas. Compare em minúsculas, como acima.Xbox, enquanto o controlo do AVR Maestro continua a chamar-se input_game1. Compare com o que o recetor reporta, não com o nome do script.Os modos surround são o mesmo cartão, com sound_mode no lugar de source.
Um título simples é espaço desperdiçado. Ponha o valor em direto por baixo e «Sources» passa a «Sources / Now on 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 grelha de duas linhas é o que coloca a etiqueta por baixo do título, em vez de ao lado.
Troque attributes.source por attributes.sound_mode no cabeçalho de Surround, e assim por diante.
O Home Assistant reporta o volume como uma fração. Ninguém regula um recetor para «0.67». Uma linha de matemática resolve isso e toda a secção passa a ler-se como um recetor.

volume_level como o volume principal dividido por 100, e nos recetores Denon e Marantz o MV 80 é a referência de 0 dB. Portanto 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 o escrever, e ao mudar o nome de uma Cena no AVR Maestro o mosaico muda de nome sem qualquer edição no painel.

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() retiram o prefixo e o nome do recetor do nome amigável.
Vale a pena gastar mais um minuto numa segunda linha. Uma parede de botões com nomes evocativos não diz nada às 11 da noite; uma linha a dizer o que cada um repõe diz qual deve carregar.
A entidade media player do recetor é registada pelo Home Assistant como qualquer outra, por isso obtém um histórico de audição sem esforço. Tudo o que se segue vem dessa única entidade: sem sensores extra, sem helpers, sem nada para configurar antes.

A linha cronológica de estados simples não precisa de nenhum cartão 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 estava a fazer, 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 numa linha contínua. O eixo y tem de ir em apex_config para ter efeito.
Uma média diária e um pico 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 herdar a do dia anterior.E os dois que respondem a «em que é que eu realmente vejo e ouço»: a fonte e o modo surround, representados como uma linha cronológica do que 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'; }
Ponha as suas próprias fontes no array transform e nos dois arrays de formatadores. Mantenha o índice 0 como «Other».
O eixo de um gráfico precisa de números, por isso o transform associa cada nome de fonte a uma posição e os formatadores fazem o caminho inverso para as etiquetas e a dica. Faça o mapeamento total: null (recetor desligado) continua a ser 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 cartão com sound_mode dá-lhe o modo surround, com as cadeias em maiúsculas exatamente como o seu recetor as reporta.
stepline nestes dois últimos. Uma fonte ou um modo surround é uma categoria, não um número. Se suavizar a curva, a linha oscila entre Shield e Xbox por tudo o que estiver entre elas no eixo, desenhando uma entrada que nunca foi selecionada. O volume é uma quantidade real e suaviza-se com honestidade; uma categoria não.state_class: measurement, que o Home Assistant guarda como estatísticas de longo prazo durante anos.A vista completa, todas as secções e todos os cartões, com marcadores de posição em vez de IDs de entidade.
YOUR_RECEIVER pelo nome da sua entidade media player e YOURMAC pelos doze caracteres do seu recetor do passo 2.Antes de assumir que construiu mal: alguns não se podem acender, e vale a pena saber quais.
Um mosaico só mostra o seu estado se o Home Assistant o conseguir ler, e o Home Assistant lê o seu recetor a partir de dois sítios. A integração Denon AVR publica o essencial na entidade media player. O AVR Maestro publica o resto: cria um sensor Status Bridge, sensor.avr_maestro_your_receiver, e escreve nele, como atributos, as leituras que já tem.
| Na entidade media player | No sensor Status Bridge |
|---|---|
| Alimentação | Curva Audyssey MultEQ |
| Fonte selecionada | Dynamic Volume e nível de referência |
| Modo surround | Qual o slot Dirac carregado |
| Volume e silêncio | Dimmer do painel frontal, modo Eco |
| Dynamic EQ, às vezes | Predefinição de colunas, tom e dezenas de outros |
Agora as duas colunas são legíveis. Tire um valor do media player de 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 mosaico se acenda com a definição que está realmente ativa, em vez de apenas disparar o script que a altera.
Medido no recetor onde isto foi criado: a entidade media player traz cerca de vinte dos sessenta controlos e o sensor Status Bridge publica mais ou menos quarenta. Entre os dois, um painel consegue ler quase tudo o que consegue alterar - a diferença entre uma parede de botões e uma superfície de controlo.
true, false ou simplesmente não chega. Tratar «não chega» como «desligado» põe 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 em linha, 6.media_controls com on_off lá dentro. Defina media_controls: [].multiline_secondary: true.experimental.color_threshold. Desenha o traço como um gradiente vertical, e um segmento perfeitamente horizontal tem altura zero para aplicar o gradiente, pelo que fica invisível. Uma sessão de 43 horas a um só volume desapareceu por completo. Use um color sólido.
Primeiros passos · Ecrã inicial · Cenas · Ícones personalizados · Som · EQ gráfico · Colunas · Porque está um controlo bloqueado · O assistente · Domótica · Zonas · Comando · Rádio (FM/AM) · Visualização no ecrã · Definições · Idiomas · Controlos de volume · Cópia de segurança & restauro · A reproduzir & HEOS
A Home Automation é o único desbloqueio pago do AVR Maestro. Tudo o resto, incluindo o assistente AI no dispositivo, está incluído.