Десять шагов, YAML каждой карточки и готовое представление, которое можно вставить целиком. Собрано и сфотографировано на настоящем Marantz CINEMA 30. Поменяйте две строки - и он ваш.
Этот дашборд питают два источника, и на каждом шаге ниже разница между ними важна.
| Источник | Что даёт |
|---|---|
| Синхронизированные скрипты AVR Maestro | Все элементы управления. Входы, режимы объёмного звука, Audyssey, Dirac, Smart Selects, пресеты, диммер, эко-режим, ваши сцены. |
| Объект медиаплеера интеграции Denon AVR | Текущее состояние. Питание, выбранный источник, режим объёмного звука, громкость, отключение звука. |
Все четыре есть в стандартном магазине HACS. В Home Assistant откройте HACS › Интерфейс › Обзор & загрузка репозиториев, найдите по названию, нажмите «Загрузить», затем перезагрузите браузер.
| Что искать | Для чего | Если пропустить |
|---|---|---|
| Mushroom | Все плитки управления и ползунок громкости | Используйте обычную карточку button. Работает, но выглядит угловатее. |
| button-card | Заголовки разделов с текущей подписью | Используйте карточку markdown или простые заголовки. |
| card-mod | Цвета и подсветка активной плитки | Всё по-прежнему работает. Просто ничего не подсвечивается. |
| apexcharts-card | Графики истории | Используйте встроенную карточку history-graph. |
В каждом фрагменте на этой странице используются два заполнителя. Найдите свои один раз, а дальше просто копируйте и вставляйте.
media_player.your_receiver → Настройки › Устройства & службы › ваш ресивер › сущность медиаплеера. Примерно такая: media_player.marantz_cinema_30.script.avr_maestro_MAC_... → Инструменты разработчика › Состояния, и введите avr_maestro в фильтре сущностей. Появится весь список ваших элементов управления.Середина каждого ID скрипта - это MAC-адрес вашего ресивера, двенадцать символов в нижнем регистре, одинаковые во всех. Скопируйте его один раз. Везде, где на этой странице написано MAC, подставьте свой.
unavailable. Старые сборки называли скрипты по имени ресивера, а не по MAC-адресу. Если вы синхронизировались тогда, старые скрипты всё ещё в списке и не работают. Рабочие - те, что названы по MAC-адресу.Дальше каждый шаг выглядит так: добавьте раздел, затем вставьте в него карточки. Чтобы вставить YAML, откройте меню из трёх точек на карточке и выберите Редактировать в YAML, либо меню из трёх точек на дашборде и Редактор необработанной конфигурации, чтобы вставить всё сразу.
# 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
Начните с самого простого, чтобы убедиться в правильности ID объектов до того, как строить что-то сложное. Добавьте раздел, добавьте карточку, откройте «Редактировать в YAML» и вставьте:
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. HACS не нужен.
Нажмите на неё. Если ресивер отреагировал, ваши ID верны и всё ниже будет работать. Если ничего не произошло, вернитесь к шагу 2.
Этот шаблон стоит выучить: каждая плитка источника и объёмного звука на дашборде - его копия. Карточка отправляет скрипт и окрашивается по состоянию объекта ресивера, поэтому вход, на котором вы сейчас находитесь, горит, а остальные нет.

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 %}
}
Для каждого входа меняются три вещи: скрипт, значок и строка, с которой идёт сравнение.
Две вещи нужно сделать правильно, иначе плитка никогда не загорится:
source_list и sound_mode_list. Это точные строки. Сравнивайте в нижнем регистре, как выше.Xbox, тогда как элемент управления AVR Maestro по-прежнему называется input_game1. Ориентируйтесь на то, что сообщает ресивер, а не на название скрипта.Режимы объёмного звука - та же карточка, только вместо source стоит sound_mode.
Простой заголовок - это пустое место. Добавьте под него текущее значение, и «Источники» превратятся в «Источники / Сейчас: 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
Именно двухстрочная сетка ставит подпись под заголовком, а не рядом с ним.
В заголовке раздела «Объёмный звук» замените attributes.source на attributes.sound_mode, и так далее.
Home Assistant сообщает громкость в виде доли. Никто не выставляет на ресивере «0.67». Одна строка математики это исправляет, и весь раздел начинает читаться как ресивер.

volume_level как основную громкость, делённую на 100, а на ресиверах Denon и Marantz MV 80 - это опорный уровень 0 дБ. Значит, дБ = volume_level × 100 − 80. Значение volume_level 0.67 - это основная громкость 67, то есть −13.0 дБ.# 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
Считывайте название из скрипта, а не вводите вручную, и переименование сцены в AVR Maestro переименует плитку без правки дашборда.

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
Два вызова replace() убирают из понятного имени префикс и название ресивера.
Вторая строка стоит лишней минуты. Стена из красиво названных кнопок в 11 вечера ничего вам не скажет, а строка с описанием того, что каждая восстанавливает, подскажет, какую нажать.
Объект медиаплеера ресивера записывается Home Assistant как любой другой, так что история прослушивания достаётся бесплатно. Всё ниже берётся из этого одного объекта: никаких дополнительных датчиков, помощников и предварительной настройки.

Простая временная шкала состояний вообще не требует пользовательских карточек и полезнее всего:
type: history-graph
hours_to_show: 168
entities:
- entity: media_player.your_receiver
name: Receiver
Включён, выключен и чем занимался - за неделю.
Громкость в дБ использует то же преобразование, что и шаг 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 с fill: last превращает редкие события в непрерывную линию. Ось Y нужно указывать в apex_config, иначе она не сработает.
Среднее и пиковое значение за день превращают рваную линию в нечто с формой:
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'; }"
Два ряда по одному атрибуту, сгруппированные по дням.
fill: 'null' означает, что у дня без показаний не будет столбца, а не значение, перенесённое со вчера.И два графика, которые отвечают на вопрос «что я на самом деле смотрю и в каком режиме»: источник и режим объёмного звука, построенные как временная шкала выбранного значения.
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'; }
Впишите свои источники в массив transform и в оба массива форматирования. Индекс 0 оставьте как «Other».
Оси графика нужны числа, поэтому transform сопоставляет каждому названию источника позицию, а форматирование переводит её обратно для подписей и подсказки. Сделайте сопоставление полным: null (ресивер выключен) остаётся пропуском, а всё, чего нет в вашем списке, попадает в «Other», так что их невозможно перепутать. Та же карточка с sound_mode даёт режим объёмного звука, со строками в верхнем регистре ровно так, как их сообщает ваш ресивер.
stepline на этих двух последних. Источник и режим объёмного звука - это категории, а не числа. Если сгладить кривую, линия будет метаться между Shield и Xbox через всё, что лежит между ними на оси, и рисовать вход, который никогда не выбирали. Громкость - реальная величина, и сглаживание для неё честно; для категории - нет.state_class: measurement, который Home Assistant хранит как долгосрочную статистику годами.Готовое представление целиком, каждый раздел и каждая карточка, с заполнителями вместо ID объектов.
YOUR_RECEIVER на имя вашего объекта медиаплеера и YOURMAC на двенадцать символов вашего ресивера из шага 2.Прежде чем решить, что вы собрали что-то не так: некоторые плитки не могут загореться, и стоит знать, какие именно.
Плитка может показать состояние, только если Home Assistant способен его прочитать, а ваш ресивер он читает из двух мест. Интеграция Denon AVR публикует основное на объекте медиаплеера. Остальное публикует AVR Maestro: он создаёт датчик Status Bridge, sensor.avr_maestro_your_receiver, и записывает на него как атрибуты те показания, которые у него уже есть.
| На объекте медиаплеера | На датчике Status Bridge |
|---|---|
| Питание | Кривая Audyssey MultEQ |
| Выбранный источник | Dynamic Volume и референсный уровень |
| Режим объёмного звука | Какой слот Dirac загружен |
| Громкость и отключение звука | Диммер передней панели, эко-режим |
| Dynamic EQ, иногда | Пресет колонок, тембр и ещё десятки значений |
Теперь читаются оба столбца. Берите значение медиаплеера из states['media_player.your_receiver'].attributes, а значение Status Bridge через state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), и плитка загорится для настройки, которая действительно активна, а не только запустит скрипт, который её меняет.
Замерено на ресивере, для которого это собиралось: объект медиаплеера несёт около двадцати из шестидесяти элементов управления, а датчик Status Bridge публикует примерно сорок остальных. Вместе они позволяют дашборду прочитать почти всё, что он может изменить - это разница между стеной кнопок и панелью управления.
true, false или не приходит вовсе. Если считать «не приходит» значением «выключено», на вашей стене появится уверенный неверный ответ.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 %}
Три состояния, а не два.
grid_options: {columns: 9}. Для шести в ряд - 6.media_controls с on_off внутри. Задайте media_controls: [].multiline_secondary: true.experimental.color_threshold. Он рисует линию вертикальным градиентом, а у строго горизонтального отрезка нулевая высота, по которой можно строить градиент, поэтому он становится невидимым. 43-часовой сеанс на одной громкости исчез полностью. Используйте сплошной color.
Начало работы · Главный экран · Сцены · Пользовательские значки · Звук · Графический эквалайзер · Колонки · Почему элемент заблокирован · Помощник · Автоматизация дома · Зоны · Пульт · Радио (FM/AM) · Экранное меню · Настройки · Языки · Управление громкостью · Резервное копирование & восстановление · Сейчас играет & HEOS
Автоматизация дома - единственная платная разблокировка в AVR Maestro. Всё остальное, включая AI-помощника на устройстве, входит в приложение.
Назад к автоматизации дома → · Полное руководство пользователя →