Hem › Användarguide › Hemautomation › Instrumentpanel
Home Assistant · steg för steg

Bygg den här Home Assistant-dashboarden på ungefär en timme

Tio steg, YAML för varje kort och en komplett vy som du kan klistra in i ett svep. Byggd och fotograferad på en riktig Marantz CINEMA 30. Ändra två strängar så är den din.

Den färdiga dashboarden: ett hjältekort för det som spelas nu, volym med dB-förval, ett källrutnät, surroundlägen, rumskorrigering, scener och en volymgraf
Vad du bygger
Har du bråttom? Hoppa till steg 10, ladda ner den kompletta vyn, ändra två strängar och klistra in den. Stegen emellan förklarar vad varje del gör så att du kan ändra den.

Innan du börjar

Två saker matar den här dashboarden, och skillnaden spelar roll i varje steg nedan.

Kommer frånGer dig
AVR Maestros synkade skriptVarje kontroll. Ingångar, surroundlägen, Audyssey, Dirac, Smart Selects, förval, dimmer, eco, dina scener.
Mediaspelarentiteten från Denon AVR-integrationenLive-status. Ström, vald källa, surroundläge, volym, ljud av.
Steg 1

Installera fyra kort från HACS

Alla fyra finns i HACS standardbutik. I Home Assistant: HACS › Frontend › Explore & Download Repositories, sök på namnet, välj Download och ladda sedan om webbläsaren.

Sök efterAnvänds tillOm du hoppar över det
MushroomVarje kontrollbricka och volymreglagetAnvänd ett vanligt button-kort. Fungerar, ser kantigare ut.
button-cardSektionsrubriker med en live-etikettAnvänd ett markdown-kort eller vanliga rubriker.
card-modFärgerna och det tända läget på den aktiva brickanAllt fungerar fortfarande. Ingenting lyser.
apexcharts-cardHistorikgrafernaAnvänd det inbyggda history-graph-kortet.
Inget av dem krävs för att det ska fungera. Varje kontroll nedan körs från ett vanligt knappkort i Home Assistant som pekar på samma skript. De anpassade korten är smink, inte rörmokeri.
Steg 2

Hitta dina två entitets-ID:n

Varje kodavsnitt på den här sidan använder två platshållare. Hitta dina en gång, så är resten bara kopiera och klistra in.

Mitten av varje skript-ID är mottagarens MAC-adress, tolv gemena tecken, likadana på alla. Kopiera den en gång. Överallt där den här sidan skriver MAC, sätt in din egen.

Ignorera alla som säger unavailable. Äldre versioner döpte skripten efter mottagarens namn i stället för dess MAC-adress. Om du synkade då finns de äldre fortfarande kvar i listan och är döda. De som gäller är de MAC-namngivna.
Steg 3

Skapa vyn

  1. 1. Inställningar › Dashboards › Lägg till dashboard › Ny dashboard från grunden. Döp den till vad du vill.
  2. 2. Öppna den och tryck på pennikonen uppe till höger för att redigera.
  3. 3. Lägg till en vy och välj layouten Sections. Inte Masonry. Det är Sections som gör att den flödar om ordentligt på en telefon.
  4. 4. Ställ in Max columns på 3 i vyinställningarna och slå på Dense section placement.

Härifrån och framåt är varje steg detsamma: lägg till en sektion och klistra sedan in kort i den. För att klistra in YAML använder du trepricksmenyn på ett kort och väljer Edit in YAML, eller trepricksmenyn på dashboarden för Raw configuration editor för att klistra in allt på en gång.

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

Lägg till en kontroll

Börja med det enklaste på tavlan, så att du vet att dina entitets-ID:n stämmer innan du bygger något krångligt. Lägg till en sektion, lägg till ett kort, Edit in YAML och klistra in:

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

Vanliga Home Assistant. Ingen HACS behövs.

Tryck på den. Om mottagaren reagerar stämmer dina ID:n och allt nedan kommer att fungera. Om ingenting händer, gå tillbaka till steg 2.

Steg 5

Få den att lysa när den är den aktiva

Det här är mönstret värt att lära sig, och varje käll- och surroundbricka på tavlan är en kopia av det. Kortet skickar ett skript och färgar sig själv utifrån mottagarentiteten, så att ingången du faktiskt står på lyser och de andra inte gör det.

Källrutnätet med Nvidia Shield tänd i orange och de andra tolv ingångarna mörka
En tänd bricka, tolv mörka
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 %}
    }

Ändra tre saker per ingång: skriptet, ikonen och strängen den jämförs med.

Två saker måste bli rätt, annars lyser en bricka aldrig:

Surroundlägen är samma kort med sound_mode i stället för source.

Steg 6

Ge varje sektion en live-rubrik

En vanlig rubrik är bortkastad yta. Sätt det aktuella värdet under den så blir ”Källor” till ”Källor / Nu på 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

Rutnätet med två rader är det som placerar etiketten under rubriken i stället för bredvid.

Byt ut attributes.source mot attributes.sound_mode i Surround-rubriken, och så vidare.

Steg 7

Visa volymen i dB

Home Assistant rapporterar volymen som ett bråktal. Ingen ställer in en mottagare på ”0.67”. En rad matematik fixar det, och hela sektionen börjar kännas som en mottagare.

Volymsektionen: ett reglage, upp, ner, ljud av och fyra dB-förval
Natt, Dialog, Film och Högt, vart och ett märkt med de dB det ställer in
Omräkningen. Home Assistant publicerar volume_level som huvudvolym delat med 100, och på Denon- och Marantz-mottagare är MV 80 referensen för 0 dB. Alltså dB = volume_level × 100 − 80. Ett volume_level på 0.67 motsvarar huvudvolym 67, vilket är −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
Välj ditt högsta förval med omsorg. Uppsättningen ovan stannar vid −10 dB. En dashboard är mycket lättare att trycka fel på än en fjärrkontroll, och referensnivå på en stor mottagare är verkligen högt.
Steg 8

Lägg till dina scener

Läs namnet från skriptet i stället för att skriva det, så byter brickan namn utan någon dashboardändring när du byter namn på en scen i AVR Maestro.

Fyra scenbrickor, var och en med en lista över de inställningar scenen återställer
Varje bricka säger vad dess scen faktiskt återställer
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

De två replace()-anropen klipper bort prefixet och mottagarens namn från det visningsnamnet.

En andra rad är värd den extra minuten. En vägg av knappar med fantasifulla namn säger ingenting klockan 11 på kvällen; en rad som beskriver vad var och en återställer visar vilken du ska trycka på.

Steg 9

Lägg till historik

Mottagarens mediaspelarentitet registreras av Home Assistant som vilken annan som helst, så du får en lyssningshistorik på köpet. Allt nedan kommer från den enda entiteten: inga extra sensorer, inga hjälpare, ingenting att konfigurera först.

Fem historikgrafer: ström och aktivitet, huvudvolym i dB, volym per dag, använd källa och surroundläge
Fem grafer, en entitet, sju dagar

Den enkla tillståndstidslinjen kräver inga anpassade kort alls och är den som är mest värd att ha:

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

På, av och vad den höll på med, över en vecka.

Volym i dB använder samma omräkning som i steg 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 med fill: last förvandlar glesa händelser till en sammanhängande linje. Y-axeln måste läggas i apex_config för att gälla.

Ett dagligt medelvärde och en topp gör en taggig linje till något med form:

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

Två serier från samma attribut, grupperade per dag.

Varför den här ritar 0 till 80 och formaterar till dB, i stället för att rita dB. Staplar växer från axelns botten. Ritar du dB direkt hänger varje stapel ner från 0, så en lång stapel betyder tyst, vilket läses bakvänt. Rita det råa huvudvolymvärdet och dra bort 80 i axelns och tooltipens formaterare, så växer staplarna uppåt medan allt läsaren ser fortfarande är dB. fill: 'null' betyder att en dag utan avläsningar får ingen stapel i stället för gårdagens värde framskrivet.

Och de två som svarar på ”vad tittar jag egentligen på, och i vad”: källa och surroundläge, ritade som en tidslinje över vilket som var valt.

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

Lägg in dina egna källor i transform-arrayen och i båda formaterar-arrayerna. Behåll index 0 som ”Övrigt”.

En diagramaxel behöver siffror, så transform mappar varje källnamn till en position och formateraren mappar tillbaka det för etiketterna och tooltipen. Gör mappningen total: null (mottagaren av) förblir ett glapp, och allt som inte finns i din lista hamnar under ”Övrigt”, så de två kan aldrig förväxlas. Samma kort igen med sound_mode ger dig surroundläge, med strängarna i versaler exakt som din mottagare rapporterar dem.

Behåll stepline på de två sista. En källa eller ett surroundläge är en kategori, inte ett tal. Släta ut kurvan och linjen svänger mellan Shield och Xbox genom allt som ligger mellan dem på axeln och ritar en ingång som aldrig var vald. Volym är en verklig storhet och kan slätas ut på ett ärligt sätt; en kategori kan det inte.
Kontrollera din recorder-retention först. Home Assistant sparar tio dagar som standard, så sju dagar är ungefär det mesta du rimligen kan be om. Vill du gå längre tillbaka behöver du en state_class: measurement-mallsensor, som Home Assistant behåller som långtidsstatistik i flera år.
En saknad dag är oftast korrekt. Home Assistant registrerar ändringar, inte stickprov. Låt mottagaren stå på en ingång med en volym i två dagar så skrivs ingenting alls, och då får den dagen ingen stapel. Det ser ut som dataförlust och är raka motsatsen: ingenting hände.
Steg 10

Eller ta hela paketet

Den kompletta vyn, varje sektion och varje kort, med platshållare i stället för entitets-ID:n.

  1. 1. Ladda ner vyns YAML.
  2. 2. Öppna den i valfri textredigerare och byt ut två strängar överallt där de förekommer: YOUR_RECEIVER mot namnet på din mediaspelarentitet och YOURMAC mot mottagarens tolv tecken från steg 2.
  3. 3. Öppna din dashboard i Home Assistant, välj pennikonen, trepricksmenyn, Raw configuration editor och klistra in den som en vy.
Dina scen-ID:n kommer inte att stämma. Scenskript döps efter när scenen skapades, så de fyra i filen finns inte i ditt system: de korten visas men gör ingenting. Byt ut deras entitets-ID:n mot dina egna från steg 2, eller ta bort scensektionen och bygg om den med steg 8.
Två andra saker att räkna med. Käll- och surroundgraferna innehåller källnamnen från mottagaren som den här byggdes på, så redigera de arrayerna som steg 9 beskriver. Och brickornas etiketter är på engelska; ingenting i filen är översatt.

Om en bricka aldrig lyser

Innan du tror att du byggde fel: en del av dem kan inte lysa, och det är bra att veta vilka.

En bricka kan bara visa sitt läge om Home Assistant kan läsa det, och den läser din mottagare från två ställen. Denon AVR-integrationen publicerar grunderna på mediaspelarentiteten. AVR Maestro publicerar resten: den skapar en Status Bridge-sensor, sensor.avr_maestro_your_receiver, och skriver de avläsningar den redan har dit som attribut.

På mediaspelarentitetenPå Status Bridge-sensorn
StrömAudyssey MultEQ-kurva
Vald källaDynamic Volume och referensnivå
SurroundlägeVilken Dirac-plats som är inläst
Volym och ljud avFrontpanelsdimmer, Eco-läge
Dynamic EQ, iblandHögtalarförval, ton och dussintals till

Båda kolumnerna går att läsa nu. Hämta ett mediaspelarvärde från states['media_player.your_receiver'].attributes och ett Status Bridge-värde med state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), så att en bricka lyser för den inställning som faktiskt är aktiv i stället för att bara köra skriptet som ändrar den.

Uppmätt på mottagaren som den här byggdes på: mediaspelarentiteten bär ungefär tjugo av de sextio kontrollerna, och Status Bridge-sensorn publicerar ungefär fyrtio till. Tillsammans kan en dashboard läsa nästan allt den kan ändra - skillnaden mellan en vägg av knappar och en kontrollyta.

Om ett värde kan betyda två saker, säg det. Dynamic EQ kommer som true, false eller inte alls. Att behandla ”inte alls” som ”av” sätter ett självsäkert felaktigt svar på din vägg.
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 %}

Tre lägen, inte två.

Annat värt att veta

Samma dashboard i telefonbredd, omflödad till en enda kolumn
Samma dashboard i telefonbredd: de tre kolumnerna blir en, och ingenting konfigurerades för att få det att hända
Vanliga frågor

Dashboarden, besvarad

Behöver jag anpassade kort från HACS för att bygga det här?
Inte för att få det att fungera. Varje kontroll på den här sidan körs från ett vanligt knappkort i Home Assistant. Mushroom, button-card, card-mod och apexcharts-card är det som får det att se ut som på skärmbilderna, och varje avsnitt nedan säger vilket det använder och vad du går miste om utan det.
Varför lyser vissa knappar och andra inte?
En knapp lyser när Home Assistant kan läsa motsvarande status från din mottagare. Källa, surroundläge, volym och ljud av kommer tillbaka från mottagarens egen mediaspelarentitet, så de markeras. Audyssey-kurva, Dirac-plats, dimmer, eco-läge och högtalarförval publiceras inte av Denon-integrationen, så Home Assistant har inget sätt att veta vilket som är aktivt och knapparna förblir släckta tills du trycker på en.
Kan jag visa den riktiga dB-volymen i stället för en procentsats?
Ja. Home Assistant publicerar volume_level som mottagarens huvudvolym delat med 100, och på Denon- och Marantz-mottagare är MV 80 referensen för 0 dB. Alltså är dB lika med volume_level gånger 100, minus 80. Ett volume_level på 0.67 motsvarar huvudvolym 67, vilket är -13.0 dB.
Stämmer mina entitets-ID:n med dem i den här guiden?
Mönstret stämmer, mittendelen gör det inte. AVR Maestro döper sina skript efter mottagarens MAC-adress, så att ett namnbyte uppdaterar samma skript i stället för att skapa en kopia. Ditt ID ser ut som script.avr_maestro_ följt av dina egna tolv tecken och sedan kontrollens namn. Öppna Developer Tools och sedan States i Home Assistant och filtrera på avr_maestro för att se din egen lista.
Mer av guiden

Andra guider för AVR Maestro

Kom igång · Hemskärm · Scener · Anpassade ikoner · Ljud · Grafisk EQ · Högtalare · Varför en kontroll är låst · Assistenten · Hemautomation · Zoner · Fjärrkontroll · Radio (FM/AM) · Bildskärmsvisning · Inställningar · Språk · Volymkontroller · Säkerhetskopiering och återställning · Spelas nu och HEOS

Hela din mottagare, på en enda vägg

Hemautomation är den enda betalda upplåsningen i AVR Maestro. Allt annat, inklusive AI-assistenten på enheten, ingår.

Hämta på Google Play Ladda ner från App Store Ladda ner från Mac App Store Hämta från Microsoft Store

Tillbaka till Hemautomation → · Hela användarguiden →