Home Assistant · krok po kroku

Zbuduj ten dashboard Home Assistant w około godzinę

Dziesięć kroków, YAML każdej karty i kompletny widok, który wkleisz za jednym razem. Zbudowany i sfotografowany na prawdziwym Marantz CINEMA 30. Zmień dwa ciągi znaków i jest Twój.

Gotowy dashboard: bohater z aktualnie odtwarzanym utworem, głośność z ustawieniami dB, siatka źródeł, tryby surround, korekcja pomieszczenia, sceny i wykres głośności
Co budujesz
Spieszysz się? Przejdź do kroku 10, pobierz kompletny widok, zmień dwa ciągi znaków i wklej go. Kroki pośrednie wyjaśniają, co robi każdy element, abyś mógł go zmienić.

Zanim zaczniesz

Ten dashboard zasilają dwa źródła, a różnica między nimi ma znaczenie na każdym z poniższych kroków.

Pochodzi zDaje Ci
Zsynchronizowane skrypty AVR MaestroKażde sterowanie. Wejścia, tryby surround, Audyssey, Dirac, Smart Selects, ustawienia wstępne, dimmer, eco, Twoje Sceny.
Encja odtwarzacza multimedialnego z integracji Denon AVRStan na żywo. Zasilanie, wybrane źródło, tryb surround, głośność, wyciszenie.
Krok 1

Zainstaluj cztery karty z HACS

Wszystkie cztery są w domyślnym sklepie HACS. W Home Assistant: HACS › Frontend › Przeglądaj & pobieraj repozytoria, wyszukaj nazwę, kliknij Pobierz, a potem odśwież przeglądarkę.

SzukajDo czego służyJeśli pominiesz
MushroomKażdy kafelek sterowania i suwak głośnościUżyj zwykłej karty button. Działa, wygląda bardziej kanciasto.
button-cardNagłówki sekcji z etykietą na żywoUżyj karty markdown albo zwykłych nagłówków.
card-modKolory i podświetlony stan aktywnego kafelkaWszystko nadal działa. Nic się nie podświetla.
apexcharts-cardWykresy historiiUżyj wbudowanej karty history-graph.
Żadna z nich nie jest wymagana do działania. Każde poniższe sterowanie działa ze standardowej karty przycisku Home Assistant wskazującej ten sam skrypt. Karty niestandardowe to makijaż, a nie instalacja.
Krok 2

Znajdź swoje dwa identyfikatory encji

Każdy fragment kodu na tej stronie używa dwóch symboli zastępczych. Znajdź swoje raz, a resztę po prostu skopiujesz.

Środek każdego identyfikatora skryptu to adres MAC Twojego amplitunera, dwanaście małych liter i cyfr, taki sam we wszystkich. Skopiuj go raz. Wszędzie, gdzie ta strona pisze MAC, wstaw swój.

Zignoruj te, które mają w nazwie unavailable. Starsze wersje nazywały skrypty według nazwy amplitunera, a nie jego adresu MAC. Jeśli synchronizowałeś wtedy, te starsze nadal są na liście i nie działają. Aktywne są te nazwane według MAC.
Krok 3

Utwórz widok

  1. 1. Ustawienia › Dashboardy › Dodaj dashboard › Nowy dashboard od zera. Nazwij go, jak chcesz.
  2. 2. Otwórz go, a potem kliknij ikonę ołówka w prawym górnym rogu, aby edytować.
  3. 3. Dodaj widok i wybierz układ Sekcje. Nie Masonry. To właśnie Sekcje sprawiają, że widok poprawnie układa się na telefonie.
  4. 4. W ustawieniach widoku ustaw Maks. liczba kolumn na 3 i włącz Gęste rozmieszczanie sekcji.

Od tej chwili każdy krok wygląda tak samo: dodaj sekcję, a potem wklej do niej karty. Aby wkleić YAML, użyj menu z trzema kropkami na karcie i wybierz Edytuj w YAML, albo menu z trzema kropkami dashboardu i Edytor konfiguracji surowej, aby wkleić wszystko naraz.

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

Dodaj element sterowania

Zacznij od najprostszej rzeczy na tablicy, żeby upewnić się, że identyfikatory encji są poprawne, zanim zbudujesz coś skomplikowanego. Dodaj sekcję, dodaj kartę, Edytuj w YAML i wklej:

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

Standardowy Home Assistant. HACS niepotrzebny.

Dotknij go. Jeśli amplituner zareaguje, Twoje identyfikatory są poprawne i wszystko poniżej zadziała. Jeśli nic się nie stanie, wróć do kroku 2.

Krok 5

Spraw, aby się podświetlał, gdy jest aktywny

To wzorzec, który warto poznać, a każdy kafelek źródła i surround na tablicy jest jego kopią. Karta wysyła skrypt i koloruje się na podstawie encji amplitunera, więc wejście, na którym faktycznie jesteś, jest podświetlone, a pozostałe nie.

Siatka źródeł z Nvidia Shield podświetlonym na pomarańczowo i dwunastoma pozostałymi wejściami w ciemnym kolorze
Jeden podświetlony kafelek, dwanaście ciemnych
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 %}
    }

Zmień trzy rzeczy dla każdego wejścia: skrypt, ikonę i ciąg znaków, z którym porównujesz.

Dwie rzeczy trzeba zrobić dobrze, inaczej kafelek nigdy się nie podświetli:

Tryby surround to ta sama karta z sound_mode zamiast source.

Krok 6

Daj każdej sekcji nagłówek na żywo

Zwykły tytuł to zmarnowane miejsce. Umieść pod nim wartość na żywo, a „Sources” zamieni się w „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

Siatka z dwiema liniami sprawia, że etykieta pojawia się pod tytułem, a nie obok niego.

Zamień attributes.source na attributes.sound_mode w nagłówku Surround i tak dalej.

Krok 7

Pokaż głośność w dB

Home Assistant podaje głośność jako ułamek. Nikt nie ustawia amplitunera na „0.67”. Jedna linijka matematyki to naprawia i cała sekcja zaczyna wyglądać jak amplituner.

Sekcja głośności: suwak, głośniej, ciszej, wyciszenie i cztery ustawienia dB
Night, Dialog, Movie i Loud, każde z etykietą ustawianych dB
Przeliczenie. Home Assistant publikuje volume_level jako głośność główną podzieloną przez 100, a w amplitunerach Denon i Marantz MV 80 to punkt odniesienia 0 dB. Zatem dB = volume_level × 100 − 80. Wartość volume_level 0.67 to głośność główna 67, czyli −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
Najgłośniejsze ustawienie wybierz świadomie. Powyższy zestaw kończy się na −10 dB. W dashboard znacznie łatwiej trafić przypadkiem niż w pilota, a poziom referencyjny na dużym amplitunerze jest naprawdę głośny.
Krok 8

Dodaj swoje Sceny

Odczytaj nazwę ze skryptu zamiast ją wpisywać, a zmiana nazwy Sceny w AVR Maestro zmieni nazwę kafelka bez edycji dashboardu.

Cztery kafelki scen, każdy z listą ustawień, które ta scena przywraca
Każdy kafelek mówi, co jego scena faktycznie przywraca
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

Dwa wywołania replace() obcinają z przyjaznej nazwy prefiks i nazwę amplitunera.

Druga linia jest warta dodatkowej minuty. Ściana przycisków o wymyślnych nazwach nic Ci nie powie o 11 wieczorem; linia mówiąca, co każdy z nich przywraca, podpowie, który nacisnąć.

Krok 9

Dodaj historię

Encja odtwarzacza multimedialnego amplitunera jest rejestrowana przez Home Assistant jak każda inna, więc historię odsłuchu dostajesz za darmo. Wszystko poniżej pochodzi z tej jednej encji: bez dodatkowych sensorów, bez pomocników, bez wcześniejszej konfiguracji.

Pięć wykresów historii: zasilanie i aktywność, głośność główna w dB, głośność według dni, używane źródło i tryb surround
Pięć wykresów, jedna encja, siedem dni

Zwykła oś czasu stanów w ogóle nie potrzebuje kart niestandardowych i jest tą, którą najbardziej warto mieć:

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

Włączony, wyłączony i co robił, w ciągu tygodnia.

Głośność w dB używa tego samego przeliczenia co w kroku 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 z fill: last zamienia rzadkie zdarzenia w ciągłą linię. Oś y musi trafić do apex_config, aby zadziałała.

Dzienna średnia i wartość szczytowa zamieniają postrzępioną linię w coś, co ma kształt:

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

Dwie serie z tego samego atrybutu, grupowane według dni.

Dlaczego ten wykres rysuje zakres 0 do 80 i formatuje do dB, zamiast rysować dB. Słupki rosną od dołu osi. Jeśli narysujesz dB bezpośrednio, każdy słupek zwisa od 0, więc długi słupek oznacza ciszę, co czyta się odwrotnie. Narysuj surową liczbę głośności głównej i odejmij 80 w formatowaniu osi oraz podpowiedzi, a słupki rosną w górę, podczas gdy wszystko, co widzi czytelnik, nadal jest w dB. fill: 'null' oznacza, że dzień bez odczytów nie dostaje słupka, zamiast przenosić wartość z poprzedniego dnia.

I dwa wykresy, które odpowiadają na pytanie „na czym właściwie oglądam i w jakim trybie”: źródło i tryb surround, narysowane jako oś czasu tego, które było wybrane.

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

Wpisz własne źródła do tablicy transform i do obu tablic formatujących. Zostaw indeks 0 jako „Other”.

Oś wykresu potrzebuje liczb, więc transform mapuje każdą nazwę źródła na pozycję, a formatery mapują ją z powrotem na etykiety i podpowiedź. Zrób mapowanie całkowite: null (amplituner wyłączony) pozostaje przerwą, a wszystko, czego nie ma na Twojej liście, trafia do „Other”, więc nigdy nie da się ich pomylić. Ta sama karta z sound_mode da Ci tryb surround, z nazwami wielkimi literami dokładnie tak, jak zgłasza je Twój amplituner.

Zostaw stepline na tych dwóch ostatnich. Źródło czy tryb surround to kategoria, a nie liczba. Wygładź krzywą, a linia przeleci między Shield a Xbox przez wszystko, co leży pomiędzy na osi, rysując wejście, które nigdy nie było wybrane. Głośność to rzeczywista wielkość i wygładza się uczciwie; kategoria nie.
Najpierw sprawdź retencję recordera. Home Assistant domyślnie przechowuje dane przez dziesięć dni, więc siedem dni to mniej więcej maksimum, o jakie sensownie można prosić. Aby sięgnąć dalej, potrzebujesz sensora szablonowego state_class: measurement, który Home Assistant przechowuje jako statystyki długoterminowe przez lata.
Brakujący dzień zwykle jest poprawny. Home Assistant rejestruje zmiany, a nie próbki. Zostaw amplituner na jednym wejściu z jedną głośnością na dwa dni, a nie zapisze nic, więc ten dzień nie ma słupka. Wygląda to na utratę danych, a jest odwrotnie: nic się nie wydarzyło.
Krok 10

Albo weź całość

Kompletny widok, każda sekcja i każda karta, z symbolami zastępczymi zamiast identyfikatorów encji.

  1. 1. Pobierz plik YAML widoku.
  2. 2. Otwórz go w dowolnym edytorze tekstu i zamień dwa ciągi znaków, wszędzie gdzie występują: YOUR_RECEIVER na nazwę encji Twojego odtwarzacza multimedialnego oraz YOURMAC na dwanaście znaków Twojego amplitunera z kroku 2.
  3. 3. W Home Assistant otwórz swój dashboard, ikonę ołówka, menu z trzema kropkami, Edytor konfiguracji surowej i wklej go jako widok.
Identyfikatory Twoich Scen nie będą pasować. Skrypty Scen są nazwane według czasu utworzenia Sceny, więc cztery z pliku nie istnieją w Twoim systemie: te karty się wyświetlą, ale nic nie zrobią. Zamień ich identyfikatory encji na własne z kroku 2 albo usuń sekcję Scen i zbuduj ją na nowo według kroku 8.
Dwie inne rzeczy, których możesz się spodziewać. Wykresy źródeł i surround zawierają nazwy źródeł z amplitunera, na którym to zbudowano, więc edytuj te tablice tak, jak opisuje krok 9. A etykiety kafelków są po angielsku; nic w pliku nie jest tłumaczone.

Jeśli kafelek nigdy się nie podświetla

Zanim uznasz, że zbudowałeś go źle: niektóre z nich nie mogą się podświetlić i warto wiedzieć które.

Kafelek może pokazać swój stan tylko wtedy, gdy Home Assistant potrafi go odczytać, a Twój amplituner odczytuje z dwóch miejsc. Integracja Denon AVR publikuje podstawy na encji odtwarzacza multimedialnego. Resztę publikuje AVR Maestro: tworzy sensor Status Bridge, sensor.avr_maestro_your_receiver, i zapisuje na nim jako atrybuty odczyty, które już posiada.

Na encji odtwarzacza multimedialnegoNa sensorze Status Bridge
ZasilanieKrzywa Audyssey MultEQ
Wybrane źródłoDynamic Volume i poziom referencyjny
Tryb surroundKtóry slot Dirac jest załadowany
Głośność i wyciszeniePrzyciemnianie panelu przedniego, tryb Eco
Dynamic EQ, czasamiProfil głośników, barwa i dziesiątki innych

Obie kolumny można teraz odczytać. Weź wartość odtwarzacza multimedialnego z states['media_player.your_receiver'].attributes, a wartość Status Bridge za pomocą state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), aby kafelek podświetlał się dla ustawienia, które jest faktycznie aktywne, a nie tylko uruchamiał skrypt, który je zmienia.

Zmierzone na amplitunerze, na którym to zbudowano: encja odtwarzacza multimedialnego zawiera około dwudziestu z sześćdziesięciu elementów sterowania, a sensor Status Bridge publikuje mniej więcej czterdzieści kolejnych. Razem dashboard może odczytać prawie wszystko, co potrafi zmienić - różnica między ścianą przycisków a prawdziwym panelem sterowania.

Jeśli wartość może znaczyć dwie rzeczy, powiedz o tym. Dynamic EQ przychodzi jako true, false albo wcale. Traktowanie „wcale” jako „wyłączone” umieszcza na Twojej ścianie pewną siebie, błędną odpowiedź.
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 %}

Trzy stany, nie dwa.

Inne rzeczy, które warto wiedzieć

Ten sam dashboard w szerokości telefonu, ułożony w jedną kolumnę
Ten sam dashboard w szerokości telefonu: trzy kolumny stają się jedną i nic nie trzeba było w tym celu konfigurować
Częste pytania

Dashboard, wyjaśniony

Czy potrzebuję własnych kart z HACS, aby to zbudować?
Nie, żeby to działało. Każdy element sterujący na tej stronie działa na zwykłej karcie przycisku Home Assistant. Mushroom, button-card, card-mod i apexcharts-card sprawiają, że wygląda to tak jak na zrzutach ekranu, a każda sekcja poniżej mówi, której z nich używa i co tracisz bez niej.
Dlaczego niektóre przyciski się podświetlają, a inne nie?
Przycisk się podświetla, gdy Home Assistant potrafi odczytać z Twojego amplitunera odpowiedni stan. Źródło, tryb surround, głośność i wyciszenie wracają z własnej encji odtwarzacza multimedialnego amplitunera, więc te się podświetlają. Krzywa Audyssey, slot Dirac, dimmer, tryb eco i profil głośników nie są publikowane przez integrację Denon, więc Home Assistant nie ma jak wiedzieć, który jest aktywny, a przyciski pozostają niepodświetlone, dopóki jednego nie dotkniesz.
Czy mogę pokazać rzeczywistą głośność w dB zamiast procentów?
Tak. Home Assistant publikuje volume_level jako głośność główną amplitunera podzieloną przez 100, a w amplitunerach Denon i Marantz MV 80 to punkt odniesienia 0 dB. Zatem dB równa się volume_level razy 100, minus 80. Wartość volume_level 0.67 oznacza głośność główną 67, czyli -13.0 dB.
Czy moje identyfikatory encji będą takie same jak w tym poradniku?
Wzorzec tak, środek nie. AVR Maestro nazywa swoje skrypty na podstawie adresu MAC amplitunera, dzięki czemu zmiana nazwy aktualizuje ten sam skrypt zamiast tworzyć jego kopię. Twoje będą wyglądać tak: script.avr_maestro_, potem Twoje dwanaście znaków, a na końcu nazwa elementu sterowania. Otwórz w Home Assistant Narzędzia deweloperskie, a potem Stany, i przefiltruj po avr_maestro, aby zobaczyć własną listę.
Więcej z przewodnika

Inne przewodniki AVR Maestro

Pierwsze kroki · Ekran główny · Sceny · Własne ikony · Dźwięk · Korektor graficzny · Głośniki · Dlaczego element jest zablokowany · Asystent · Automatyka domowa · Strefy · Pilot · Radio (FM/AM) · Wyświetlacz ekranowy · Ustawienia · Języki · Sterowanie głośnością · Kopia zapasowa & przywracanie · Teraz odtwarzane & HEOS

Cały Twój amplituner, na jednej ścianie

Automatyka domowa to jedyne płatne odblokowanie w AVR Maestro. Cała reszta, w tym asystent AI działający na urządzeniu, jest w cenie.

Pobierz z Google Play Pobierz z App Store Pobierz z Mac App Store Pobierz z Microsoft Store

Wróć do Automatyki domowej → · Cały poradnik użytkownika →