10ステップ、各カードのYAML、そしてひとまとめに貼り付けられる完成ビューまで。実機の Marantz CINEMA 30 で構築し、撮影しました。2か所の文字列を書き換えるだけで、あなた専用のダッシュボードになります。
このダッシュボードには2つの情報源があり、以降のすべてのステップでその違いが重要になります。
| 取得元 | 得られるもの |
|---|---|
| AVR Maestro が同期したスクリプト | あらゆるコントロール。入力、サラウンドモード、Audyssey、Dirac、スマートセレクト、プリセット、ディマー、エコ、そしてあなたのシーン。 |
| Denon AVR 統合のメディアプレーヤーエンティティ | ライブの状態。電源、選択中のソース、サラウンドモード、音量、ミュート。 |
4つとも HACS の標準ストアにあります。Home Assistant でHACS › フロントエンド › リポジトリを探す&ダウンロードを開き、名前を検索してダウンロードしたら、ブラウザを再読み込みしてください。
| 検索する名前 | 用途 | 入れない場合 |
|---|---|---|
| Mushroom | すべてのコントロールタイルと音量スライダー | 標準のbuttonカードを使います。動作はしますが、見た目は角ばります。 |
| button-card | ライブラベル付きのセクション見出し | markdownカードを使うか、通常の見出しにします。 |
| card-mod | 色と、アクティブなタイルの点灯表示 | すべて問題なく動作します。ただ、何も点灯しません。 |
| apexcharts-card | 履歴グラフ | 組み込みのhistory-graphカードを使います。 |
このページのすべてのスニペットは2つのプレースホルダーを使います。一度だけ自分のものを調べれば、あとはコピー&ペーストで済みます。
media_player.your_receiver → 設定 › デバイス&サービス › お使いのレシーバー › メディアプレーヤーエンティティ。media_player.marantz_cinema_30 のような名前です。script.avr_maestro_MAC_... → 開発者ツール › 状態 を開き、エンティティのフィルターに avr_maestro と入力します。コントロールの一覧がすべて表示されます。すべてのスクリプトIDの中間部分は、レシーバーのMACアドレスを小文字12文字で表したもので、どのスクリプトでも共通です。一度コピーしておいてください。このページでMACと書かれている箇所には、すべてあなたの値を入れます。
unavailableと表示されているものは無視してください。古いビルドでは、スクリプトの名前にMACではなくレシーバー名が使われていました。その頃に同期した場合、古いスクリプトが一覧に残っていますが、すでに無効です。有効なのはMAC名のものです。ここから先は、セクションを追加してカードを貼り付ける、の繰り返しです。YAMLを貼り付けるには、カードの3点メニューからYAMLで編集を選ぶか、ダッシュボードの3点メニューからRawコンフィグレーションエディターを開いて全体を一度に貼り付けます。
# 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 %}
}
入力ごとに変更するのは3点:スクリプト、アイコン、比較する文字列です。
次の2点を正しく設定しないと、タイルは決して点灯しません:
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
ラベルをタイトルの横ではなく下に置くのは、2行のグリッドの役割です。
サラウンドの見出しなどでは、attributes.sourceをattributes.sound_modeに置き換えます。
Home Assistant は音量を小数で報告します。レシーバーを「0.67」に設定する人はいません。1行の計算で解決し、セクション全体が本物のレシーバーらしい表示になります。

volume_levelをマスター音量を100で割った値として公開し、Denon と Marantz のレシーバーでは MV 80 が 0 dB の基準です。したがってdB = volume_level × 100 − 80となります。volume_levelが 0.67 なら、マスター音量は 67 で、−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
名前は手入力せず、スクリプトから読み取りましょう。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
2つの replace() 呼び出しが、フレンドリー名からプレフィックスとレシーバー名を取り除きます。
2行目を付ける手間は、かける価値があります。凝った名前のボタンがずらりと並んでいても、夜11時にはどれを押せばいいかわかりません。何を復元するかが書いてあれば、すぐに選べます。
レシーバーのメディアプレーヤーエンティティは、ほかのエンティティと同様に Home Assistant に記録されるので、視聴履歴が無料で手に入ります。以下はすべてこの1つのエンティティから作られます。追加のセンサーもヘルパーも不要で、事前の設定も要りません。

シンプルな状態タイムラインはカスタムカードがまったく不要で、最も入れる価値があります:
type: history-graph
hours_to_show: 168
entities:
- entity: media_player.your_receiver
name: Receiver
1週間にわたる、オン、オフ、そして何をしていたか。
dB表示の音量には、ステップ 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'; }"
同じ属性から2つの系列を作り、日ごとにグループ化します。
fill: 'null'を指定すると、データのない日は前日の値が引き継がれず、棒が表示されません。そして「実際に何で、どの方式で観ているのか」に答える2つのグラフ:ソースとサラウンドモードを、どれが選択されていたかのタイムラインとして描画します。
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 配列と2つのフォーマッター配列に入れてください。インデックス 0 は「Other」のままにします。
グラフの軸には数値が必要なので、transformが各ソース名を位置に対応付け、フォーマッターがそれをラベルとツールチップ用に名前へ戻します。この対応付けは全域にしてください。null(レシーバーがオフ)は空白のままになり、リストにないものは「Other」に振り分けられるので、両者が混同されることはありません。同じカードでsound_modeを使えばサラウンドモードになります。文字列は、レシーバーが報告するとおりの大文字で記述してください。
steplineを付けてください。ソースやサラウンドモードは数値ではなくカテゴリです。曲線を滑らかにすると、Shield と Xbox の間の線が、軸上でその間にあるものを経由して大きく曲がり、一度も選択されていない入力を描いてしまいます。音量は実際の量なので滑らかにしても正確ですが、カテゴリはそうではありません。state_class: measurementテンプレートセンサーが必要で、Home Assistant はこれを長期統計として何年も保持します。すべてのセクションとカードを含む完成ビュー。エンティティIDの代わりにプレースホルダーが入っています。
YOUR_RECEIVERはお使いのメディアプレーヤーエンティティの名前に、YOURMACはステップ 2 で調べたレシーバーの12文字に置き換えます。構築を間違えたと考える前に:点灯できないタイルもあります。どれがそうなのかを知っておくと役立ちます。
タイルが状態を表示できるのは、Home Assistant がその状態を読み取れる場合だけで、レシーバーの情報は2か所から取得されます。Denon AVR 統合は、基本的な情報をメディアプレーヤーエンティティに公開します。残りは AVR Maestro が公開します。ステータスブリッジセンサーsensor.avr_maestro_your_receiverを作成し、アプリがすでに保持している読み取り値を属性として書き込みます。
| メディアプレーヤーエンティティ上 | ステータスブリッジセンサー上 |
|---|---|
| 電源 | Audyssey MultEQ カーブ |
| 選択中のソース | Dynamic Volume とリファレンスレベル |
| サラウンドモード | 読み込まれている Dirac スロット |
| 音量とミュート | フロントパネルディマー、エコモード |
| Dynamic EQ(場合による) | スピーカープリセット、トーン、ほかにも多数 |
現在は両方の列を読み取れます。メディアプレーヤーの値はstates['media_player.your_receiver'].attributesから、ステータスブリッジの値はstate_attr('sensor.avr_maestro_your_receiver','dirac_slot')で取得してください。これで、設定を変更するスクリプトを実行するだけでなく、実際に有効な設定のタイルが点灯します。
この構築に使ったレシーバーでの実測:メディアプレーヤーエンティティが持つのは60個のコントロールのうち約20個で、ステータスブリッジセンサーが約40個を追加で公開します。この2つで、ダッシュボードは変更できるもののほぼすべてを読み取れます。ボタンの壁と、本物の操作パネルとの違いはここにあります。
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 %}
2つではなく、3つの状態。
grid_options: {columns: 9}を設定します。6つ並べるなら 6 です。on_offを含むmedia_controlsが原因です。media_controls: []を設定してください。multiline_secondary: trueを追加してください。experimental.color_thresholdです。線を縦方向のグラデーションで描画しますが、完全に水平な線分は高さがゼロでグラデーションをかけられず、見えなくなります。同じ音量での43時間のセッションが、まるごと消えたこともあります。単色のcolorを使ってください。
はじめに · ホーム画面 · シーン · カスタムアイコン · サウンド · グラフィックEQ · スピーカー · コントロールがロックされる理由 · アシスタント · ホームオートメーション · ゾーン · リモコン · ラジオ(FM/AM) · オンスクリーンディスプレイ · 設定 · 言語 · 音量コントロール · バックアップ&復元 · 再生中&HEOS
ホームオートメーションは AVR Maestro で唯一の有料アンロックです。オンデバイスAIアシスタントを含め、そのほかはすべて含まれています。