Home Assistant · langkah demi langkah

Bangun dasbor Home Assistant ini dalam waktu sekitar satu jam

Sepuluh langkah, YAML setiap kartu, dan satu tampilan lengkap yang bisa Anda tempel sekaligus. Dibuat dan difoto pada Marantz CINEMA 30 sungguhan. Ubah dua string dan dasbor ini jadi milik Anda.

Dasbor yang sudah jadi: panel sedang diputar, volume dengan preset dB, kisi sumber, mode surround, koreksi ruangan, skenario, dan grafik volume
Yang akan Anda bangun
Sedang terburu-buru? Langsung ke langkah 10, unduh tampilan lengkapnya, ubah dua string, lalu tempel. Langkah-langkah di antaranya menjelaskan fungsi setiap bagian agar Anda bisa mengubahnya.

Sebelum Anda mulai

Dua hal mengisi dasbor ini, dan perbedaannya penting di setiap langkah berikut.

Berasal dariMemberi Anda
Skrip tersinkronisasi dari AVR MaestroSetiap kontrol. Input, mode surround, Audyssey, Dirac, Smart Select, preset, dimmer, eco, Skenario Anda.
Entity media player dari integrasi Denon AVRStatus langsung. Daya, sumber terpilih, mode surround, volume, bisu.
Langkah 1

Pasang empat kartu dari HACS

Keempatnya ada di toko HACS bawaan. Di Home Assistant: HACS › Frontend › Explore & Download Repositories, cari namanya, Download, lalu muat ulang browser Anda.

CariDipakai untukJika dilewati
MushroomSetiap tile kontrol, dan penggeser volumeGunakan kartu button biasa. Tetap berfungsi, tampilannya lebih kaku.
button-cardHeader bagian dengan label langsungGunakan kartu markdown, atau judul biasa.
card-modWarna, dan status menyala pada tile yang aktifSemuanya tetap berfungsi. Hanya saja tidak ada yang menyala.
apexcharts-cardGrafik riwayatGunakan kartu history-graph bawaan.
Tidak satu pun wajib agar dasbor ini berfungsi. Setiap kontrol di bawah berjalan dari kartu tombol Home Assistant standar yang diarahkan ke skrip yang sama. Kartu kustom hanyalah riasan, bukan saluran utamanya.
Langkah 2

Temukan dua entity ID Anda

Setiap cuplikan di halaman ini memakai dua placeholder. Temukan milik Anda satu kali, sisanya tinggal salin dan tempel.

Bagian tengah setiap ID skrip adalah alamat MAC receiver Anda, dua belas karakter huruf kecil, sama pada semuanya. Salin sekali saja. Di mana pun halaman ini menulis MAC, isi dengan milik Anda.

Abaikan yang bertuliskan unavailable. Versi lama menamai skrip berdasarkan nama receiver, bukan MAC-nya. Jika Anda pernah menyinkronkan saat itu, skrip lama tersebut masih terdaftar dan sudah tidak aktif. Yang aktif adalah yang dinamai dengan MAC.
Langkah 3

Buat tampilan

  1. 1. Settings › Dashboards › Add Dashboard › New dashboard from scratch. Beri nama sesuka Anda.
  2. 2. Buka dasbornya, lalu klik ikon pensil di kanan atas untuk mengedit.
  3. 3. Tambahkan tampilan, lalu pilih tata letak Sections. Bukan Masonry. Sections membuatnya menyesuaikan diri dengan benar di ponsel.
  4. 4. Di pengaturan tampilan, atur Max columns ke 3 dan aktifkan Dense section placement.

Mulai sekarang, setiap langkahnya sama: tambahkan satu bagian, lalu tempel kartu ke dalamnya. Untuk menempel YAML, gunakan menu tiga titik pada kartu dan pilih Edit in YAML, atau menu tiga titik pada dasbor untuk Raw configuration editor agar semuanya bisa ditempel sekaligus.

# 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
Langkah 4

Tambahkan satu kontrol

Mulailah dari hal paling sederhana di papan, supaya Anda tahu entity ID Anda sudah benar sebelum membangun yang rumit. Tambahkan bagian, tambahkan kartu, Edit in YAML, tempel:

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 standar. Tidak perlu HACS.

Ketuk tombolnya. Jika receiver bereaksi, ID Anda sudah benar dan semua langkah di bawah akan berfungsi. Jika tidak ada yang terjadi, kembali ke langkah 2.

Langkah 5

Buat menyala saat sedang aktif

Inilah pola yang layak dipelajari, dan setiap tile sumber maupun surround di papan adalah salinannya. Kartu mengirim sebuah skrip, lalu mewarnai dirinya dari entity receiver, sehingga input yang sedang Anda pakai menyala dan yang lain tidak.

Kisi sumber dengan Nvidia Shield menyala oranye dan dua belas input lainnya gelap
Satu tile menyala, dua belas gelap
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 %}
    }

Ubah tiga hal untuk setiap input: skripnya, ikonnya, dan string yang dibandingkan.

Dua hal yang harus benar, jika tidak tile tidak akan pernah menyala:

Mode surround memakai kartu yang sama dengan sound_mode sebagai pengganti source.

Langkah 6

Beri setiap bagian header yang hidup

Judul biasa hanya membuang ruang. Taruh nilai langsungnya di bawah judul dan "Sumber" berubah menjadi "Sumber / Sekarang di 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

Kisi dua baris inilah yang menaruh label di bawah judul, bukan di sampingnya.

Ganti attributes.source dengan attributes.sound_mode pada header Surround, dan seterusnya.

Langkah 7

Tampilkan volume dalam dB

Home Assistant melaporkan volume sebagai pecahan. Tidak ada yang mengatur receiver ke "0.67". Satu baris matematika memperbaikinya dan seluruh bagian ini mulai terbaca seperti receiver sungguhan.

Bagian volume: penggeser, naik, turun, bisu, dan empat preset dB
Night, Dialog, Movie, dan Loud, masing-masing berlabel dB yang diaturnya
Konversinya. Home Assistant menampilkan volume_level sebagai volume utama dibagi 100, dan pada receiver Denon dan Marantz, MV 80 adalah acuan 0 dB. Jadi dB = volume_level × 100 − 80. Nilai volume_level 0.67 berarti volume utama 67, yaitu −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
Pilih preset terkeras Anda dengan sengaja. Set di atas berhenti di −10 dB. Dasbor jauh lebih mudah tersentuh tidak sengaja dibanding remote, dan level referensi pada receiver besar benar-benar keras.
Langkah 8

Tambahkan Skenario Anda

Baca namanya dari skrip alih-alih mengetiknya, dan saat Skenario diganti namanya di AVR Maestro, tile ikut berganti nama tanpa perlu mengedit dasbor.

Empat tile skenario, masing-masing mencantumkan pengaturan yang dipulihkan skenario itu
Setiap tile menyebutkan apa yang sebenarnya dipulihkan skenarionya
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

Dua pemanggilan replace() memangkas awalan dan nama receiver dari nama yang ditampilkan.

Baris kedua layak dibuat. Deretan tombol bernama puitis tidak memberi tahu apa pun pukul 11 malam; satu baris yang menyebutkan apa yang dipulihkan masing-masing memberi tahu mana yang harus ditekan.

Langkah 9

Tambahkan riwayat

Entity media player receiver dicatat oleh Home Assistant seperti entity lainnya, jadi Anda mendapatkan riwayat mendengarkan secara gratis. Semua di bawah ini berasal dari satu entity itu: tanpa sensor tambahan, tanpa helper, tanpa perlu mengonfigurasi apa pun lebih dulu.

Lima grafik riwayat: daya dan aktivitas, volume utama dalam dB, volume per hari, sumber yang dipakai, dan mode surround
Lima grafik, satu entity, tujuh hari

Timeline status biasa tidak memerlukan kartu kustom sama sekali, dan itulah yang paling layak dimiliki:

type: history-graph
hours_to_show: 168
entities:
  - entity: media_player.your_receiver
    name: Receiver

Menyala, mati, dan apa yang sedang dilakukan, selama seminggu.

Volume dalam dB memakai konversi yang sama seperti di langkah 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 dengan fill: last mengubah kejadian yang jarang menjadi garis yang kontinu. Sumbu y harus ditaruh di apex_config agar berlaku.

Rata-rata dan puncak harian mengubah garis yang naik turun menjadi sesuatu yang berbentuk:

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'; }"

Dua seri dari atribut yang sama, dikelompokkan per hari.

Mengapa grafik ini memplot 0 sampai 80 dan memformat ke dB, bukan memplot dB. Batang tumbuh dari dasar sumbu. Jika dB diplot langsung, setiap batang menggantung ke bawah dari 0, sehingga batang panjang berarti pelan, dan itu terbaca terbalik. Plot angka volume utama mentah lalu kurangi 80 di formatter sumbu dan tooltip, maka batang tumbuh ke atas sementara semua yang dilihat pembaca tetap dB. fill: 'null' berarti hari tanpa data tidak mendapat batang, alih-alih membawa nilai kemarin.

Dan dua grafik yang menjawab "saya sebenarnya menonton lewat apa, dan dalam mode apa": sumber dan mode surround, diplot sebagai timeline mana yang terpilih.

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'; }

Masukkan sumber Anda sendiri ke array transform dan ke kedua array formatter. Biarkan indeks 0 sebagai "Other".

Sumbu grafik membutuhkan angka, jadi transform memetakan setiap nama sumber ke sebuah posisi dan formatter memetakannya kembali untuk label dan tooltip. Buat pemetaannya total: null (receiver mati) tetap menjadi celah, dan apa pun yang tidak ada dalam daftar Anda masuk ke "Other", sehingga keduanya tidak pernah tertukar. Kartu yang sama dengan sound_mode memberi Anda mode surround, dengan string dalam huruf besar persis seperti yang dilaporkan receiver Anda.

Pertahankan stepline pada dua yang terakhir itu. Sumber atau mode surround adalah kategori, bukan angka. Haluskan kurvanya dan garis akan meliuk antara Shield dan Xbox melewati apa pun yang ada di antaranya pada sumbu, menggambar input yang tidak pernah dipilih. Volume adalah besaran nyata dan boleh dihaluskan dengan jujur; kategori tidak.
Periksa dulu retensi recorder Anda. Home Assistant menyimpan sepuluh hari secara default, jadi tujuh hari adalah batas yang masuk akal. Untuk melihat lebih jauh, Anda memerlukan sensor template state_class: measurement, yang disimpan Home Assistant sebagai statistik jangka panjang selama bertahun-tahun.
Hari yang hilang biasanya memang benar. Home Assistant mencatat perubahan, bukan sampel. Biarkan receiver di satu input pada satu volume selama dua hari dan tidak ada yang ditulis sama sekali, sehingga hari itu tidak punya batang. Terlihat seperti data hilang padahal kebalikannya: tidak ada yang terjadi.
Langkah 10

Atau ambil semuanya

Tampilan lengkap, setiap bagian dan setiap kartu, dengan placeholder sebagai pengganti entity ID.

  1. 1. Unduh YAML tampilan.
  2. 2. Buka dengan editor teks apa pun dan ganti dua string, di mana pun muncul: YOUR_RECEIVER dengan nama entity media player Anda, dan YOURMAC dengan dua belas karakter receiver Anda dari langkah 2.
  3. 3. Di Home Assistant, buka dasbor Anda, ikon pensil, menu tiga titik, Raw configuration editor, lalu tempel sebagai sebuah tampilan.
ID Skenario Anda tidak akan cocok. Skrip Skenario dinamai menurut waktu Skenario dibuat, jadi keempat yang ada di file tidak ada di sistem Anda: kartu-kartu itu akan tampil tetapi tidak berbuat apa-apa. Ganti entity ID-nya dengan milik Anda dari langkah 2, atau hapus bagian Skenario dan bangun ulang dengan langkah 8.
Dua hal lain yang perlu diperkirakan. Grafik sumber dan surround membawa nama sumber dari receiver tempat ini dibuat, jadi edit array tersebut seperti dijelaskan di langkah 9. Dan label tile berbahasa Inggris; tidak ada yang diterjemahkan di dalam file.

Jika sebuah tile tidak pernah menyala

Sebelum menyimpulkan Anda salah membangunnya: sebagian memang tidak bisa menyala, dan ada baiknya tahu yang mana.

Sebuah tile hanya bisa menampilkan statusnya jika Home Assistant dapat membacanya, dan Home Assistant membaca receiver Anda dari dua tempat. Integrasi Denon AVR menampilkan hal-hal dasar pada entity media player. AVR Maestro menampilkan sisanya: aplikasi membuat sensor Status Bridge, sensor.avr_maestro_your_receiver, dan menuliskan pembacaan yang sudah dimilikinya ke sensor itu sebagai atribut.

Pada entity media playerPada sensor Status Bridge
DayaKurva Audyssey MultEQ
Sumber terpilihDynamic Volume dan level referensi
Mode surroundSlot Dirac mana yang dimuat
Volume dan bisuDimmer panel depan, mode Eco
Dynamic EQ, kadang-kadangPreset speaker, nada, dan puluhan lainnya

Kedua kolom kini bisa dibaca. Ambil nilai media player dari states['media_player.your_receiver'].attributes, dan nilai Status Bridge dengan state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), sehingga sebuah tile menyala untuk pengaturan yang benar-benar aktif, bukan hanya menjalankan skrip yang mengubahnya.

Diukur pada receiver tempat ini dibuat: entity media player membawa sekitar dua puluh dari enam puluh kontrol, dan sensor Status Bridge menampilkan kira-kira empat puluh lagi. Dari keduanya, dasbor dapat membaca hampir semua yang bisa diubahnya - perbedaan antara deretan tombol dan panel kontrol sungguhan.

Jika sebuah nilai bisa bermakna dua hal, katakan. Dynamic EQ datang sebagai true, false, atau tidak datang sama sekali. Menganggap "tidak datang sama sekali" sebagai "mati" memajang jawaban salah yang meyakinkan di dinding Anda.
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 %}

Tiga status, bukan dua.

Hal lain yang perlu diketahui

Dasbor yang sama pada lebar ponsel, tersusun menjadi satu kolom
Dasbor yang sama pada lebar ponsel: tiga kolom menjadi satu, dan tidak ada yang dikonfigurasi untuk itu
Pertanyaan umum

Dasbor, terjawab

Apakah saya perlu kartu kustom dari HACS untuk membangun ini?
Tidak untuk membuatnya berfungsi. Setiap kontrol di halaman ini berjalan dari kartu tombol Home Assistant biasa. Mushroom, button-card, card-mod, dan apexcharts-card-lah yang membuatnya tampil seperti di tangkapan layar, dan setiap bagian di bawah menyebutkan mana yang dipakai serta apa yang hilang tanpanya.
Mengapa sebagian tombol menyala dan yang lain tidak?
Tombol menyala saat Home Assistant dapat membaca status yang sesuai dari receiver Anda. Sumber, mode surround, volume, dan bisu datang dari entity media player milik receiver itu sendiri, sehingga semuanya tersorot. Kurva Audyssey, slot Dirac, dimmer, mode eco, dan preset speaker tidak dipublikasikan oleh integrasi Denon, jadi Home Assistant tidak punya cara untuk tahu mana yang aktif dan tombolnya tetap tidak menyala sampai Anda mengetuk salah satunya.
Bisakah saya menampilkan volume dB yang sebenarnya, bukan persentase?
Ya. Home Assistant menampilkan volume_level sebagai volume utama receiver dibagi 100, dan pada receiver Denon dan Marantz, MV 80 adalah acuan 0 dB. Jadi dB sama dengan volume_level dikali 100, dikurangi 80. Nilai volume_level 0.67 berarti volume utama 67, yaitu -13.0 dB.
Apakah entity ID saya akan sama dengan yang ada di panduan ini?
Polanya sama, bagian tengahnya tidak. AVR Maestro menamai skripnya berdasarkan alamat MAC receiver, sehingga mengganti nama akan memperbarui skrip yang sama, bukan membuat salinan baru. Milik Anda akan berbentuk script.avr_maestro_ lalu dua belas karakter milik Anda sendiri, lalu nama kontrolnya. Buka Developer Tools lalu States di Home Assistant dan filter dengan avr_maestro untuk melihat daftar milik Anda.
Lainnya dari panduan

Panduan AVR Maestro lainnya

Memulai · Layar Utama · Skenario · Ikon Kustom · Suara · Graphic EQ · Speaker · Mengapa kontrol terkunci · Asisten · Otomasi Rumah · Zona · Remote · Radio (FM/AM) · Tampilan Layar · Pengaturan · Bahasa · Kontrol Volume · Cadangkan & Pulihkan · Sedang Diputar & HEOS

Seluruh receiver Anda, dalam satu dinding

Otomasi Rumah adalah satu-satunya fitur berbayar di AVR Maestro. Semua yang lain, termasuk asisten AI di perangkat, sudah termasuk.

Dapatkan di Google Play Unduh di App Store Unduh di Mac App Store Dapatkan di Microsoft Store

Kembali ke Otomasi Rumah → · Panduan Pengguna Lengkap →