Home Assistant · passo a passo

Monte este dashboard do Home Assistant em cerca de uma hora

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.

O dashboard pronto: um destaque do que está tocando, volume com predefinições em dB, uma grade de fontes, modos surround, correção acústica, cenas e um gráfico de volume
O que você vai montar
Com pressa? Vá direto ao passo 10, baixe a visualização completa, troque duas strings e cole. Os passos intermediários explicam o que cada peça faz, para você poder alterá-la.

Antes de começar

Duas coisas alimentam este dashboard, e a diferença importa em todos os passos abaixo.

Vem deFornece
Os scripts sincronizados do AVR MaestroTodos os controles. Entradas, modos surround, Audyssey, Dirac, Smart Selects, predefinições, dimmer, eco e suas Cenas.
A entidade media player da integração Denon AVRO estado em tempo real. Energia, fonte selecionada, modo surround, volume, mudo.
Passo 1

Instale quatro cards pelo HACS

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 porUsado paraSe você pular
MushroomTodos os blocos de controle e o controle deslizante de volumeUse um card button simples. Funciona, mas fica mais quadrado.
button-cardCabeçalhos de seção com um rótulo em tempo realUse um card markdown ou títulos simples.
card-modAs cores e o estado aceso do bloco ativoTudo continua funcionando. Nada acende.
apexcharts-cardOs gráficos de históricoUse o card history-graph nativo.
Nenhum deles é obrigatório para funcionar. Todos os controles abaixo rodam com um card de botão padrão do Home Assistant apontado para o mesmo script. Os cards personalizados são maquiagem, não encanamento.
Passo 2

Encontre os IDs das suas duas entidades

Todos os trechos desta página usam dois marcadores. Encontre os seus uma vez e o resto é copiar e colar.

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.

Ignore qualquer um que diga 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.
Passo 3

Crie a visualização

  1. 1. Configurações › Dashboards › Adicionar Dashboard › Novo dashboard do zero. Dê o nome que quiser.
  2. 2. Abra-o e clique no ícone de lápis no canto superior direito para editar.
  3. 3. Adicione uma visualização e escolha o layout Seções. Não Masonry. É o layout Seções que faz o conteúdo se reorganizar direito no celular.
  4. 4. Nas configurações da visualização, defina Máximo de colunas como 3 e ative Posicionamento denso de seções.

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
Passo 4

Adicione um controle

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.

Passo 5

Faça acender quando for o que está ativo

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.

A grade de fontes com o Nvidia Shield aceso em laranja e as outras doze entradas apagadas
Um bloco aceso, doze 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 %}
    }

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:

Os modos surround usam o mesmo card, com sound_mode no lugar de source.

Passo 6

Dê a cada seção um cabeçalho em tempo real

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.

Passo 7

Mostre o volume em dB

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.

A seção de volume: um controle deslizante, aumentar, diminuir, mudo e quatro predefinições em dB
Night, Dialog, Movie e Loud, cada uma indicando os dB que define
A conversão. O Home Assistant publica 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
Escolha seu preset mais alto com cuidado. O conjunto acima para em −10 dB. É muito mais fácil acertar um dashboard sem querer do que um controle remoto, e o nível de referência em um receptor grande é muito alto de verdade.
Passo 8

Adicione suas Cenas

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.

Quatro blocos de cena, cada um listando as configurações que aquela cena restaura
Cada bloco diz o que a sua cena realmente restaura
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.

Passo 9

Adicione o histórico

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.

Cinco gráficos de histórico: energia e atividade, volume principal em dB, volume por dia, fonte em uso e modo surround
Cinco gráficos, uma entidade, sete dias

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.

Por que este gráfico plota de 0 a 80 e formata para dB, em vez de plotar dB. As barras crescem a partir da base do eixo. Se você plotar dB diretamente, todas as barras pendem do 0, então uma barra longa significa silêncio, o que parece ao contrário. Plote o número bruto do volume principal e subtraia 80 nos formatadores do eixo e da dica, e as barras crescem para cima enquanto tudo o que o leitor vê continua sendo dB. 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.

Mantenha 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.
Confira antes a retenção do seu recorder. O Home Assistant guarda dez dias por padrão, então sete dias é mais ou menos o máximo útil que você pode pedir. Para voltar mais no tempo, você precisa de um sensor de template state_class: measurement, que o Home Assistant mantém como estatísticas de longo prazo por anos.
Um dia faltando geralmente está correto. O Home Assistant registra mudanças, não amostras. Deixe o receptor em uma entrada, em um volume, por dois dias e ele não grava nada, então aquele dia fica sem barra. Parece perda de dados e é o contrário: nada aconteceu.
Passo 10

Ou leve tudo pronto

A visualização completa, com todas as seções e todos os cards, com marcadores no lugar dos IDs de entidade.

  1. 1. Baixe o YAML da view.
  2. 2. Abra-o em qualquer editor de texto e troque duas strings, em todos os lugares onde aparecem: YOUR_RECEIVER pelo nome da sua entidade media player e YOURMAC pelos doze caracteres do seu receptor, do passo 2.
  3. 3. No Home Assistant, abra o seu dashboard, o ícone de lápis, o menu de três pontos, Editor de configuração bruta, e cole como uma visualização.
Os IDs das suas Cenas não vão coincidir. Os scripts de cena são nomeados conforme o momento em que a Cena foi criada, então as quatro do arquivo não existem no seu sistema: esses cards vão aparecer e não fazer nada. Troque os IDs de entidade deles pelos seus, do passo 2, ou exclua a seção de Cenas e refaça com o passo 8.
Mais duas coisas a esperar. Os gráficos de fonte e de surround trazem os nomes de fonte do receptor em que isto foi montado, então edite esses arrays como o passo 9 descreve. E os rótulos dos blocos estão em inglês; nada no arquivo é traduzido.

Se um bloco nunca acender

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 playerNo sensor Status Bridge
EnergiaCurva Audyssey MultEQ
Fonte selecionadaDynamic Volume e nível de referência
Modo surroundQual slot do Dirac está carregado
Volume e mudoDimmer do painel frontal, modo Eco
Dynamic EQ, às vezesPredefiniçã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.

Se um valor pode significar duas coisas, diga isso. O Dynamic EQ chega como 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.

Outras coisas que vale saber

O mesmo dashboard na largura de um celular, reorganizado em uma única coluna
O mesmo dashboard na largura de um celular: as três colunas viram uma, e nada foi configurado para isso acontecer
Perguntas frequentes

O dashboard, respondido

Preciso de cartões personalizados do HACS para montar isto?
Não para fazer funcionar. Todos os controles desta página rodam a partir de um cartão de botão simples do Home Assistant. Mushroom, button-card, card-mod e apexcharts-card são o que dá a aparência das capturas de tela, e cada seção abaixo diz qual deles usa e o que você perde sem ele.
Por que alguns botões acendem e outros não?
Um botão acende quando o Home Assistant consegue ler o estado correspondente do seu receptor. Fonte, modo surround, volume e mudo vêm da própria entidade media player do receptor, então esses ficam destacados. Curva Audyssey, slot Dirac, dimmer, modo eco e predefinição de alto-falantes não são publicados pela integração Denon, então o Home Assistant não tem como saber qual está ativo e os botões ficam apagados até você tocar em um.
Posso mostrar o volume real em dB em vez de uma porcentagem?
Sim. O Home Assistant publica volume_level como o volume principal do receptor dividido por 100, e nos receptores Denon e Marantz MV 80 é a referência de 0 dB. Então dB é igual a volume_level vezes 100, menos 80. Um volume_level de 0.67 corresponde ao volume principal 67, que é -13.0 dB.
Os IDs das minhas entidades serão iguais aos deste guia?
O padrão será, mas o trecho do meio não. O AVR Maestro nomeia seus scripts com o endereço MAC do receptor, para que uma renomeação atualize o mesmo script em vez de criar uma cópia. O seu ficará assim: script.avr_maestro_ seguido dos seus próprios doze caracteres e, depois, o nome do controle. Abra Ferramentas do Desenvolvedor e depois Estados no Home Assistant e filtre por avr_maestro para ver a sua própria lista.
Mais do guia

Outros guias do AVR Maestro

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

Todo o seu receptor, em uma única parede

A Automação Residencial é o único recurso pago do AVR Maestro. Todo o resto, inclusive o assistente de IA no dispositivo, está incluído.

Disponível no Google Play Baixe na App Store Baixe na Mac App Store Disponível na Microsoft Store

Voltar para Automação Residencial → · Guia do Usuário completo →