Home Assistant · passo a passo

Crie este painel do Home Assistant em cerca de uma hora

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.

O painel terminado: um cartão principal de reprodução, volume com predefinições em dB, uma grelha de fontes, modos surround, correção de sala, cenas e um gráfico de volume
O que vai construir
Com pressa? Salte para o passo 10, transfira a vista completa, altere duas cadeias de texto e cole-a. Os passos intermédios explicam o que cada peça faz, para que a possa adaptar.

Antes de começar

Este painel é alimentado por duas coisas, e a diferença conta em todos os passos seguintes.

OrigemO que oferece
Os scripts sincronizados do AVR MaestroTodos os controlos. Entradas, modos surround, Audyssey, Dirac, Smart Selects, predefinições, dimmer, eco, as suas Cenas.
A entidade media player da integração Denon AVRO estado em direto. Alimentação, fonte selecionada, modo surround, volume, silêncio.
Passo 1

Instale quatro cartões a partir do HACS

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 porServe paraSe o ignorar
MushroomTodos os mosaicos de controlo e o seletor de volumeUse um cartão button simples. Funciona, mas fica mais quadrado.
button-cardCabeçalhos de secção com uma etiqueta em diretoUse um cartão markdown ou títulos simples.
card-modAs cores e o estado iluminado do mosaico ativoTudo continua a funcionar. Nada se ilumina.
apexcharts-cardOs gráficos de históricoUse o cartão history-graph incorporado.
Nenhum deles é obrigatório para que funcione. Todos os controlos abaixo funcionam com um cartão de botão normal do Home Assistant apontado para o mesmo script. Os cartões personalizados são maquilhagem, não canalização.
Passo 2

Encontre os seus dois IDs de entidade

Todos os excertos desta página usam dois marcadores de posição. Encontre os seus uma vez e o resto é copiar e colar.

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.

Ignore os que dizem 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.
Passo 3

Crie a vista

  1. 1. Settings › Dashboards › Add Dashboard › New dashboard from scratch. Dê-lhe o nome que quiser.
  2. 2. Abra-o e clique no ícone do lápis, no canto superior direito, para editar.
  3. 3. Adicione uma vista e escolha o esquema Sections. Não Masonry. O Sections é o que faz com que se reorganize corretamente num telemóvel.
  4. 4. Nas definições da vista, defina Max columns como 3 e ative Dense section placement.

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

Adicione um controlo

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.

Passo 5

Faça-o acender quando for o que está ativo

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.

A grelha de fontes com a Nvidia Shield acesa a laranja e as outras doze entradas apagadas
Um mosaico 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 cadeia de texto com que compara.

Duas coisas a acertar, ou um mosaico nunca se acende:

Os modos surround são o mesmo cartão, com sound_mode no lugar de source.

Passo 6

Dê a cada secção um cabeçalho em direto

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.

Passo 7

Mostre o volume em dB

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.

A secção de volume: um seletor, subir, descer, silêncio e quatro predefinições em dB
Night, Dialog, Movie e Loud, cada um com a indicação dos dB que define
A conversão. O Home Assistant publica 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
Escolha a sua predefinição mais alta com critério. O conjunto acima fica nos −10 dB. É muito mais fácil acertar sem querer num painel do que num telecomando, e o nível de referência num recetor grande é mesmo muito alto.
Passo 8

Adicione as suas Cenas

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.

Quatro mosaicos de cenas, cada um com a lista das definições que essa cena repõe
Cada mosaico diz o que a sua cena realmente repõe
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.

Passo 9

Adicione o histórico

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.

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

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.

Porque é que este gráfico representa de 0 a 80 e formata em dB, em vez de representar dB. As barras crescem a partir da base do eixo. Se representar diretamente os dB, todas as barras pendem de 0, pelo que uma barra longa significa silêncio, o que se lê ao contrário. Se representar o número bruto do volume principal e subtrair 80 nos formatadores do eixo e da dica, as barras crescem para cima e tudo o que o leitor vê continua a ser dB. 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.

Mantenha 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.
Verifique primeiro a retenção do recorder. O Home Assistant guarda dez dias por predefinição, pelo que sete dias é o máximo útil que pode pedir. Para recuar mais precisa de um sensor de template state_class: measurement, que o Home Assistant guarda como estatísticas de longo prazo durante anos.
Um dia em falta está normalmente certo. O Home Assistant regista alterações, não amostras. Deixe o recetor numa entrada com um volume durante dois dias e não escreve rigorosamente nada, por isso esse dia fica sem barra. Parece perda de dados e é o oposto: não aconteceu nada.
Passo 10

Ou leve tudo

A vista completa, todas as secções e todos os cartões, com marcadores de posição em vez de IDs de entidade.

  1. 1. Transfira o YAML da vista.
  2. 2. Abra-o em qualquer editor de texto e substitua duas cadeias de texto, em todo o lado onde aparecem: YOUR_RECEIVER pelo nome da sua entidade media player e YOURMAC pelos doze caracteres do seu recetor do passo 2.
  3. 3. No Home Assistant, abra o seu painel, o ícone do lápis, o menu de três pontos, Raw configuration editor, e cole-o como uma vista.
Os IDs das suas Cenas não vão coincidir. Os scripts das Cenas têm o nome da altura em que a Cena foi criada, por isso as quatro do ficheiro não existem no seu sistema: esses cartões aparecem e não fazem nada. Substitua os respetivos IDs de entidade pelos seus, do passo 2, ou apague a secção de Cenas e reconstrua-a com o passo 8.
Mais duas coisas a esperar. Os gráficos de fonte e de surround trazem os nomes das fontes do recetor onde isto foi criado, por isso edite esses arrays como o passo 9 descreve. E as etiquetas dos mosaicos estão em inglês; nada no ficheiro está traduzido.

Se um mosaico nunca se acende

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

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

Outras coisas que vale a pena saber

O mesmo painel na largura de um telemóvel, reorganizado numa única coluna
O mesmo painel na largura de um telemóvel: as três colunas passam a uma só, e nada foi configurado para isso acontecer
Perguntas frequentes

O painel, esclarecido

Preciso de cartões personalizados do HACS para o criar?
Não para funcionar. Todos os controlos desta página funcionam com um simples cartão de botão do Home Assistant. Mushroom, button-card, card-mod e apexcharts-card são o que lhe dá o aspeto das capturas de ecrã, e cada secção abaixo indica qual usa e o que perde sem ele.
Porque é que alguns botões se acendem e outros não?
Um botão acende-se quando o Home Assistant consegue ler do seu recetor o estado correspondente. A fonte, o modo surround, o volume e o silêncio vêm da própria entidade media player do recetor, por isso esses ficam destacados. A curva Audyssey, o slot Dirac, o dimmer, o modo eco e a predefinição de colunas não são publicados pela integração Denon, pelo que o Home Assistant não tem como saber qual está ativo e os botões ficam apagados até tocar num.
Posso mostrar o volume real em dB em vez de uma percentagem?
Sim. O Home Assistant publica volume_level como o volume principal do recetor dividido por 100, e nos recetores Denon e Marantz o MV 80 é a referência de 0 dB. Ou seja, 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 meus IDs de entidade vão coincidir com os deste guia?
O padrão coincide, o meio não. O AVR Maestro dá aos scripts o nome do endereço MAC do recetor, para que mudar o nome atualize o mesmo script em vez de o duplicar. O seu terá o formato script.avr_maestro_ seguido dos seus doze caracteres e, depois, do nome do controlo. Abra Developer Tools e depois States no Home Assistant e filtre por avr_maestro para ver a sua própria lista.
Mais sobre o guia

Outros guias do AVR Maestro

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

Todo o seu recetor, numa só parede

A Home Automation é o único desbloqueio pago do AVR Maestro. Tudo o resto, incluindo o assistente AI no dispositivo, está incluído.

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

Voltar a Domótica → · Guia do utilizador completo →