Home Assistant · ステップバイステップ

この Home Assistant ダッシュボードを約1時間で作ろう

10ステップ、各カードのYAML、そしてひとまとめに貼り付けられる完成ビューまで。実機の Marantz CINEMA 30 で構築し、撮影しました。2か所の文字列を書き換えるだけで、あなた専用のダッシュボードになります。

完成したダッシュボード:再生中のヒーロー表示、dBプリセット付きの音量、ソースグリッド、サラウンドモード、ルームコレクション、シーン、音量グラフ
作るもの
お急ぎですか? ステップ 10に進んで完成ビューをダウンロードし、2か所の文字列を書き換えて貼り付けてください。途中のステップでは各パーツの役割を説明しているので、自由にカスタマイズできます。

始める前に

このダッシュボードには2つの情報源があり、以降のすべてのステップでその違いが重要になります。

取得元得られるもの
AVR Maestro が同期したスクリプトあらゆるコントロール。入力、サラウンドモード、Audyssey、Dirac、スマートセレクト、プリセット、ディマー、エコ、そしてあなたのシーン。
Denon AVR 統合のメディアプレーヤーエンティティライブの状態。電源、選択中のソース、サラウンドモード、音量、ミュート。
ステップ 1

HACS から4つのカードをインストール

4つとも HACS の標準ストアにあります。Home Assistant でHACS › フロントエンド › リポジトリを探す&ダウンロードを開き、名前を検索してダウンロードしたら、ブラウザを再読み込みしてください。

検索する名前用途入れない場合
Mushroomすべてのコントロールタイルと音量スライダー標準のbuttonカードを使います。動作はしますが、見た目は角ばります。
button-cardライブラベル付きのセクション見出しmarkdownカードを使うか、通常の見出しにします。
card-mod色と、アクティブなタイルの点灯表示すべて問題なく動作します。ただ、何も点灯しません。
apexcharts-card履歴グラフ組み込みのhistory-graphカードを使います。
どれも動作に必須ではありません。以下のコントロールはすべて、同じスクリプトを指す標準の Home Assistant ボタンカードだけで動きます。カスタムカードは配管ではなく、お化粧です。
ステップ 2

2つのエンティティIDを調べる

このページのすべてのスニペットは2つのプレースホルダーを使います。一度だけ自分のものを調べれば、あとはコピー&ペーストで済みます。

すべてのスクリプトIDの中間部分は、レシーバーのMACアドレスを小文字12文字で表したもので、どのスクリプトでも共通です。一度コピーしておいてください。このページでMACと書かれている箇所には、すべてあなたの値を入れます。

unavailableと表示されているものは無視してください。古いビルドでは、スクリプトの名前にMACではなくレシーバー名が使われていました。その頃に同期した場合、古いスクリプトが一覧に残っていますが、すでに無効です。有効なのはMAC名のものです。
ステップ 3

ビューを作成する

  1. 1. 設定 › ダッシュボード › ダッシュボードを追加 › 最初から新しいダッシュボード。名前は自由に付けてください。
  2. 2. ダッシュボードを開き、右上の鉛筆アイコンで編集モードにします。
  3. 3. ビューを追加し、レイアウトはセクションを選びます。メイソンリーではありません。スマートフォンできちんと折り返されるのはセクションです。
  4. 4. ビューの設定で最大列数を3にし、高密度セクション配置をオンにします。

ここから先は、セクションを追加してカードを貼り付ける、の繰り返しです。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
ステップ 4

コントロールを1つ追加する

複雑なものを作る前に、まず最もシンプルなものから始めて、エンティティ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 に戻ってください。

ステップ 5

現在選択中のものを点灯させる

これは覚える価値のあるパターンで、ボード上のすべてのソースタイルとサラウンドタイルはこのコピーです。カードはスクリプトを送信し、レシーバーのエンティティから自分の色を決めるので、実際に選択中の入力だけが点灯し、ほかは消えたままになります。

ソースグリッド。Nvidia Shield がオレンジに点灯し、ほかの12の入力は暗い状態
点灯するタイルは1つ、暗いタイルは12個
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の代わりにsound_modeを使います。

ステップ 6

各セクションにライブ見出しを付ける

ただのタイトルは無駄なスペースです。その下にライブの値を表示すれば、「ソース」が「ソース / 現在 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に置き換えます。

ステップ 7

音量をdBで表示する

Home Assistant は音量を小数で報告します。レシーバーを「0.67」に設定する人はいません。1行の計算で解決し、セクション全体が本物のレシーバーらしい表示になります。

音量セクション:スライダー、アップ、ダウン、ミュート、4つのdBプリセット
Night、Dialog、Movie、Loud。それぞれ設定されるdBが表示されます
変換方法。Home Assistant は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
最大音量のプリセットは慎重に選んでください。上のセットは −10 dB で止めています。ダッシュボードはリモコンよりずっと誤タップしやすく、大型レシーバーのリファレンスレベルは本当に大音量です。
ステップ 8

シーンを追加する

名前は手入力せず、スクリプトから読み取りましょう。AVR Maestro でシーン名を変更すると、ダッシュボードを編集しなくてもタイルの名前が変わります。

4つのシーンタイル。それぞれ、そのシーンが復元する設定を一覧表示
各タイルに、そのシーンが実際に何を復元するかを表示
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時にはどれを押せばいいかわかりません。何を復元するかが書いてあれば、すぐに選べます。

ステップ 9

履歴を追加する

レシーバーのメディアプレーヤーエンティティは、ほかのエンティティと同様に Home Assistant に記録されるので、視聴履歴が無料で手に入ります。以下はすべてこの1つのエンティティから作られます。追加のセンサーもヘルパーも不要で、事前の設定も要りません。

5つの履歴グラフ:電源とアクティビティ、dB表示のマスター音量、日別の音量、使用したソース、サラウンドモード
5つのグラフ、1つのエンティティ、7日間

シンプルな状態タイムラインはカスタムカードがまったく不要で、最も入れる価値があります:

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つの系列を作り、日ごとにグループ化します。

このグラフがdBで描画せず、0〜80 で描画してdBに整形する理由。棒グラフは軸の下端から伸びます。dBをそのまま描画すると、すべての棒が 0 から下に垂れ下がり、長い棒が小音量という逆の見え方になってしまいます。生のマスター音量の数値を描画し、軸とツールチップのフォーマッターで 80 を引けば、棒は上に伸びたまま、読み手に見えるのはすべてdBになります。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を使えばサラウンドモードになります。文字列は、レシーバーが報告するとおりの大文字で記述してください。

最後の2つにはsteplineを付けてください。ソースやサラウンドモードは数値ではなくカテゴリです。曲線を滑らかにすると、Shield と Xbox の間の線が、軸上でその間にあるものを経由して大きく曲がり、一度も選択されていない入力を描いてしまいます。音量は実際の量なので滑らかにしても正確ですが、カテゴリはそうではありません。
まずレコーダーの保存期間を確認してください。Home Assistant の既定は10日間なので、実用上は7日間程度が上限です。それ以上さかのぼるにはstate_class: measurementテンプレートセンサーが必要で、Home Assistant はこれを長期統計として何年も保持します。
日が抜けているのは、たいてい正常です。Home Assistant が記録するのはサンプルではなく変化です。レシーバーを1つの入力、1つの音量のまま2日間放置すると、何も書き込まれないため、その日の棒はありません。データ欠損に見えますが、実際は逆で、何も起きなかったということです。
ステップ 10

または、まるごと使う

すべてのセクションとカードを含む完成ビュー。エンティティIDの代わりにプレースホルダーが入っています。

  1. 1. ビューのYAMLをダウンロード
  2. 2. 任意のテキストエディターで開き、出現する箇所すべてで2つの文字列を置き換えます:YOUR_RECEIVERはお使いのメディアプレーヤーエンティティの名前に、YOURMACはステップ 2 で調べたレシーバーの12文字に置き換えます。
  3. 3. Home Assistant でダッシュボードを開き、鉛筆アイコン、3点メニュー、Rawコンフィグレーションエディターの順に進んで、ビューとして貼り付けます。
シーンのIDは一致しません。シーンのスクリプトは、シーンを作成した日時にちなんで名前が付くため、ファイル内の4つはお使いの環境に存在しません。そのカードは表示されますが、何も実行しません。ステップ 2 で調べた自分のエンティティIDに置き換えるか、シーンのセクションを削除して、ステップ 8 で作り直してください。
ほかにも2点ご注意ください。ソースとサラウンドのグラフには、これを作成したレシーバーのソース名が入っているので、ステップ 9 の説明に従って配列を編集してください。また、タイルのラベルは英語で、ファイル内に翻訳されているものはありません。

タイルが点灯しない場合

構築を間違えたと考える前に:点灯できないタイルもあります。どれがそうなのかを知っておくと役立ちます。

タイルが状態を表示できるのは、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つで、ダッシュボードは変更できるもののほぼすべてを読み取れます。ボタンの壁と、本物の操作パネルとの違いはここにあります。

値が2通りの意味を持ちうるなら、そのことを明示してください。Dynamic EQ は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つの状態。

知っておくと役立つこと

同じダッシュボードをスマートフォンの幅で表示。1列に折り返されている
スマートフォン幅の同じダッシュボード:3列が1列になり、そのための設定は何もしていません
よくある質問

ダッシュボードのよくある質問

これを作るのにHACSのカスタムカードは必要ですか?
動かすだけなら不要です。このページのすべてのコントロールは、標準のHome Assistantボタンカードで動作します。スクリーンショットのような見た目にしているのは、Mushroom、button-card、card-mod、apexcharts-cardです。各セクションに、どれを使っているか、使わない場合に何が失われるかを記載しています。
光るボタンと光らないボタンがあるのはなぜですか?
Home Assistant がレシーバーから対応する状態を読み取れると、ボタンが点灯します。ソース、サラウンドモード、音量、ミュートは、レシーバーのメディアプレーヤーエンティティから取得されるので、点灯します。Audyssey カーブ、Dirac スロット、ディマー、エコモード、スピーカープリセットは Denon 統合では公開されないため、Home Assistant にはどれが有効か知る手段がなく、タップするまでボタンは点灯しません。
パーセントの代わりに実際のdB音量を表示できますか?
はい。Home Assistant は volume_level を、マスター音量'を100で割った値として公開し、Denon と Marantz のレシーバーでは MV 80 が 0 dB の基準です。したがって dB は volume_level に 100 を掛けて 80 を引いた値になります。volume_level が 0.67 なら、マスター音量は 67 で、-13.0 dB です。
このガイドのエンティティIDと同じになりますか?
パターンは同じですが、中間部分は異なります。AVR Maestro はスクリプトにMACアドレス'に基づく名前を付けるため、名前を変更しても新しいスクリプトが増えず、同じスクリプトが更新されます。お使いの環境では、script.avr_maestro_ に続いて、あなた自身の12文字、そしてコントロール名が並びます。Home Assistant で開発者ツール、状態の順に開き、avr_maestro で絞り込むと、ご自身の一覧が表示されます。
ガイドをもっと見る

AVR Maestroのその他のガイド

はじめに · ホーム画面 · シーン · カスタムアイコン · サウンド · グラフィックEQ · スピーカー · コントロールがロックされる理由 · アシスタント · ホームオートメーション · ゾーン · リモコン · ラジオ(FM/AM) · オンスクリーンディスプレイ · 設定 · 言語 · 音量コントロール · バックアップ&復元 · 再生中&HEOS

レシーバーのすべてを、1つの壁に

ホームオートメーションは AVR Maestro で唯一の有料アンロックです。オンデバイスAIアシスタントを含め、そのほかはすべて含まれています。

Google Playで手に入れよう App Storeからダウンロード Mac App Storeからダウンロード Microsoft Storeで入手

ホームオートメーションに戻る → · ユーザーガイド全文 →