Home Assistant · steg for steg

Bygg dette Home Assistant-dashbordet på omtrent en time

Ti steg, YAML for hvert eneste kort og en komplett visning du kan lime inn i én omgang. Bygget og fotografert på en ekte Marantz CINEMA 30. Bytt ut to tekststrenger, så er det ditt.

Det ferdige dashbordet: et hovedkort for det som spilles nå, volum med dB-presets, et kilderutenett, surroundmoduser, romkorrigering, scener og en volumgraf
Hva du bygger
Har du det travelt? Hopp til steg 10, last ned den komplette visningen, bytt ut to tekststrenger og lim den inn. Stegene imellom forklarer hva hver del gjør, slik at du kan endre den.

Før du begynner

To ting mater dette dashbordet, og forskjellen har betydning i hvert eneste steg nedenfor.

Kommer fraGir deg
AVR Maestros synkroniserte skriptHver eneste kontroll. Innganger, surroundmoduser, Audyssey, Dirac, Smart Selects, presets, dimmer, eco og scenene dine.
Mediespiller-entiteten til Denon AVR-integrasjonenLive-status. Strøm, valgt kilde, surroundmodus, volum, demping.
Steg 1

Installer fire kort fra HACS

Alle fire finnes i standard HACS-butikken. I Home Assistant: HACS › Frontend › Explore & Download Repositories, søk etter navnet, trykk Download, og last deretter nettleseren på nytt.

Søk etterBrukes tilHvis du hopper over det
MushroomAlle kontrollfliser og volumglidebryterenBruk et vanlig button-kort. Fungerer, men ser mer kantete ut.
button-cardSeksjonsoverskrifter med en live-etikettBruk et markdown-kort, eller vanlige overskrifter.
card-modFargene og den opplyste tilstanden på den aktive flisenAlt fungerer fortsatt. Ingenting lyser.
apexcharts-cardHistorikkgrafeneBruk det innebygde history-graph-kortet.
Ingen av dem er nødvendige for at det skal fungere. Hver kontroll nedenfor kjører fra et standard Home Assistant-knappekort som peker på samme skript. De egendefinerte kortene er sminke, ikke rørleggerarbeid.
Steg 2

Finn dine to entitets-ID-er

Hvert utdrag på denne siden bruker to plassholdere. Finn dine én gang, så er resten kopier og lim inn.

Midtdelen av hver skript-ID er mottakerens MAC-adresse, tolv små bokstaver, lik på alle. Kopier den én gang. Overalt der denne siden skriver MAC, setter du inn din.

Ignorer alle som sier unavailable. Eldre versjoner ga skriptene navn etter mottakerens navn i stedet for MAC-adressen. Hvis du synkroniserte den gangen, står de eldre fortsatt i listen og er døde. De levende er de som er oppkalt etter MAC-adressen.
Steg 3

Opprett visningen

  1. 1. Settings › Dashboards › Add Dashboard › New dashboard from scratch. Kall det hva du vil.
  2. 2. Åpne det, og trykk deretter på blyantikonet øverst til høyre for å redigere.
  3. 3. Legg til en visning, og velg oppsettet Sections. Ikke Masonry. Sections er det som gjør at det flyter riktig om på en telefon.
  4. 4. I visningsinnstillingene setter du Max columns til 3 og slår på Dense section placement.

Fra nå av er hvert steg slik: legg til en seksjon, og lim deretter kort inn i den. For å lime inn YAML bruker du trepunktsmenyen på et kort og velger Edit in YAML, eller trepunktsmenyen på dashbordet for Raw configuration editor for å lime inn alt på én gang.

# 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

Legg til en kontroll

Begynn med det enkleste på brettet, slik at du vet at entitets-ID-ene dine er riktige før du bygger noe komplisert. Legg til en seksjon, legg til et kort, Edit in YAML, lim inn:

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

Standard Home Assistant. Ingen HACS nødvendig.

Trykk på den. Hvis mottakeren endrer seg, er ID-ene dine riktige og alt nedenfor kommer til å fungere. Hvis ingenting skjer, gå tilbake til steg 2.

Steg 5

Få den til å lyse når den er den aktive

Dette er mønsteret det er verdt å lære, og hver kilde- og surroundflis på brettet er en kopi av det. Kortet sender et skript og farger seg selv ut fra mottakerentiteten, slik at inngangen du faktisk står på lyser, og de andre ikke gjør det.

Kilderutenettet med Nvidia Shield lyst opp i oransje og de tolv andre inngangene mørke
Én opplyst flis, tolv mørke
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 %}
    }

Endre tre ting per inngang: skriptet, ikonet og tekststrengen den sammenlignes med.

To ting må være riktige, ellers lyser aldri flisen:

Surroundmoduser er det samme kortet med sound_mode i stedet for source.

Steg 6

Gi hver seksjon en live-overskrift

En vanlig tittel er bortkastet plass. Sett den levende verdien under den, så blir «Kilder» til «Kilder / Nå 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

Totrinnsrutenettet er det som plasserer etiketten under tittelen i stedet for ved siden av.

Bytt attributes.source med attributes.sound_mode i Surround-overskriften, og så videre.

Steg 7

Vis volum i dB

Home Assistant rapporterer volum som en brøk. Ingen setter en mottaker til «0.67». Én linje med matte fikser det, og hele seksjonen begynner å se ut som en mottaker.

Volumseksjonen: en glidebryter, opp, ned, demping og fire dB-presets
Night, Dialog, Movie og Loud, hver merket med dB-verdien den setter
Omregningen. Home Assistant publiserer volume_level som hovedvolum delt på 100, og på Denon- og Marantz-mottakere er MV 80 referansen for 0 dB. Altså er dB = volume_level × 100 − 80. Et volume_level på 0.67 er hovedvolum 67, som er −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
Velg det høyeste presetet ditt med omhu. Settet ovenfor stopper på −10 dB. Et dashbord er mye lettere å treffe ved et uhell enn en fjernkontroll, og referansenivå på en stor mottaker er virkelig høyt.
Steg 8

Legg til scenene dine

Les navnet fra skriptet i stedet for å skrive det inn, så endrer flisen navn automatisk når du gir en scene nytt navn i AVR Maestro, uten at dashbordet må redigeres.

Fire scenefliser, hver med en liste over innstillingene scenen gjenoppretter
Hver flis sier hva scenen faktisk gjenoppretter
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 to replace()-kallene fjerner prefikset og mottakernavnet fra det vennlige navnet.

En andre linje er verdt det ekstra minuttet. En vegg av knapper med fargerike navn sier deg ingenting klokken 11 om kvelden; en linje som sier hva hver enkelt gjenoppretter, forteller deg hvilken du skal trykke på.

Steg 9

Legg til historikk

Mottakerens mediespiller-entitet registreres av Home Assistant som alle andre, så du får en lyttehistorikk gratis. Alt nedenfor kommer fra den ene entiteten: ingen ekstra sensorer, ingen hjelpere, ingenting som må konfigureres først.

Fem historikkgrafer: strøm og aktivitet, hovedvolum i dB, volum per dag, kilde i bruk og surroundmodus
Fem grafer, én entitet, sju dager

Den vanlige tilstandstidslinjen trenger ingen egendefinerte kort i det hele tatt, og er den som er mest verdt å ha:

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

På, av og hva den holdt på med, over en uke.

Volum i dB bruker samme omregning 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 gjør spredte hendelser om til en sammenhengende linje. Y-aksen må settes i apex_config for å få effekt.

Et daglig gjennomsnitt og en topp gjør en takkete linje om til noe 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'; }"

To serier fra samme attributt, gruppert per dag.

Hvorfor denne plotter 0 til 80 og formaterer til dB, i stedet for å plotte dB. Søyler vokser fra aksens bunn. Plott dB direkte, så henger hver søyle ned fra 0, slik at en lang søyle betyr stille, noe som leses bakvendt. Plott det rå hovedvolumtallet og trekk fra 80 i akse- og verktøytipsformaterne, så vokser søylene oppover mens alt leseren ser fortsatt er dB. fill: 'null' betyr at en dag uten målinger ikke får noen søyle, i stedet for gårsdagens verdi videreført.

Og de to som svarer på «hva ser jeg faktisk på, og i hva»: kilde og surroundmodus, plottet som en tidslinje over hvilken som var valgt.

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

Sett inn dine egne kilder i transform-arrayen og i begge formatter-arrayene. Behold indeks 0 som «Other».

En diagramakse trenger tall, så transform tilordner hvert kildenavn en posisjon, og formaterne tilordner det tilbake for etikettene og verktøytipset. Gjør tilordningen total: null (mottaker av) forblir et hull, og alt som ikke står i listen din havner i «Other», slik at de to aldri kan forveksles. Det samme kortet igjen med sound_mode gir deg surroundmodus, med tekststrengene i store bokstaver nøyaktig slik mottakeren din rapporterer dem.

Behold stepline på de to siste. En kilde eller en surroundmodus er en kategori, ikke et tall. Glatt ut kurven, så svinger linjen mellom Shield og Xbox gjennom det som ligger mellom dem på aksen, og tegner en inngang som aldri ble valgt. Volum er en reell størrelse og kan glattes ærlig; en kategori kan ikke.
Sjekk lagringstiden for recorder først. Home Assistant beholder ti dager som standard, så sju dager er omtrent det mest du kan be om med nytte. For å gå lenger tilbake trenger du en state_class: measurement-malsensor, som Home Assistant beholder som langtidsstatistikk i årevis.
En manglende dag er som regel riktig. Home Assistant registrerer endringer, ikke målinger. La mottakeren stå på én inngang med ett volum i to dager, så skrives det ingenting i det hele tatt, og den dagen har da ingen søyle. Det ser ut som datatap, og det er det motsatte: ingenting skjedde.
Steg 10

Eller ta hele greia

Den komplette visningen, hver seksjon og hvert kort, med plassholdere i stedet for entitets-ID-er.

  1. 1. Last ned visnings-YAML.
  2. 2. Åpne den i et hvilket som helst tekstredigeringsprogram og erstatt to tekststrenger, overalt der de forekommer: YOUR_RECEIVER med navnet på mediespiller-entiteten din, og YOURMAC med mottakerens tolv tegn fra steg 2.
  3. 3. I Home Assistant åpner du dashbordet ditt, blyantikonet, trepunktsmenyen, Raw configuration editor, og limer den inn som en visning.
Scene-ID-ene dine vil ikke samsvare. Sceneskript er oppkalt etter tidspunktet scenen ble opprettet, så de fire i filen finnes ikke på systemet ditt: de kortene vises, men gjør ingenting. Bytt ut entitets-ID-ene deres med dine egne fra steg 2, eller slett Scener-seksjonen og bygg den på nytt med steg 8.
To andre ting å forvente. Kilde- og surroundgrafene har kildenavnene fra mottakeren dette ble bygget på, så rediger de arrayene slik steg 9 beskriver. Og flisetikettene er på engelsk; ingenting i filen er oversatt.

Hvis en flis aldri lyser

Før du antar at du har bygget feil: noen av dem kan ikke lyse, og det er verdt å vite hvilke.

En flis kan bare vise tilstanden sin hvis Home Assistant kan lese den, og den leser mottakeren din fra to steder. Denon AVR-integrasjonen publiserer grunnleggende ting på mediespiller-entiteten. AVR Maestro publiserer resten: den oppretter en Status Bridge-sensor, sensor.avr_maestro_your_receiver, og skriver målingene den allerede har til den som attributter.

På mediespiller-entitetenPå Status Bridge-sensoren
StrømAudyssey MultEQ-kurve
Valgt kildeDynamic Volume og referansenivå
SurroundmodusHvilken Dirac-plass som er lastet
Volum og dempingDimmer for frontpanel, Eco-modus
Dynamic EQ, noen gangerHøyttalerpreset, tone og dusinvis til

Begge kolonnene kan leses nå. Hent en mediespillerverdi fra states['media_player.your_receiver'].attributes, og en Status Bridge-verdi med state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), slik at en flis lyser for innstillingen som faktisk er aktiv i stedet for bare å kjøre skriptet som endrer den.

Målt på mottakeren dette ble bygget på: mediespiller-entiteten har omtrent tjue av de seksti kontrollene, og Status Bridge-sensoren publiserer omtrent førti til. Mellom de to kan et dashbord lese nesten alt det kan endre - forskjellen mellom en vegg av knapper og en kontrollflate.

Hvis en verdi kan bety to ting, si det. Dynamic EQ kommer som true, false, eller ikke i det hele tatt. Å behandle «ikke i det hele tatt» som «av» setter et selvsikkert, feil svar på veggen din.
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 tilstander, ikke to.

Andre ting som er verdt å vite

Det samme dashbordet i telefonbredde, omflytet til én enkelt kolonne
Samme dashbord i telefonbredde: de tre kolonnene blir til én, og ingenting ble konfigurert for å få det til
Vanlige spørsmål

Dashbordet, besvart

Trenger jeg egendefinerte kort fra HACS for å bygge dette?
Ikke for å få det til å fungere. Hver kontroll på denne siden kjører fra et vanlig knappekort i Home Assistant. Mushroom, button-card, card-mod og apexcharts-card er det som får det til å se ut som på skjermbildene, og hver seksjon nedenfor sier hvilket den bruker og hva du mister uten det.
Hvorfor lyser noen knapper opp og andre ikke?
En knapp lyser når Home Assistant kan lese den tilhørende tilstanden fra mottakeren din. Kilde, surroundmodus, volum og demping kommer tilbake fra mottakerens egen mediespiller-entitet, så de utheves. Audyssey-kurve, Dirac-plass, dimmer, eco-modus og høyttalerpreset publiseres ikke av Denon-integrasjonen, så Home Assistant har ingen måte å vite hvilken som er aktiv på, og knappene forblir uten lys til du trykker på en.
Kan jeg vise det ekte dB-volumet i stedet for en prosentandel?
Ja. Home Assistant publiserer volume_level som mottakerens hovedvolum delt på 100, og på Denon- og Marantz-mottakere er MV 80 referansen for 0 dB. Altså er dB lik volume_level ganger 100, minus 80. Et volume_level på 0.67 er hovedvolum 67, som er -13.0 dB.
Vil entitets-ID-ene mine være like de i denne guiden?
Mønsteret vil være likt, men midtdelen vil ikke. AVR Maestro gir skriptene navn etter mottakerens MAC-adresse, slik at et nytt navn oppdaterer det samme skriptet i stedet for å lage en kopi. Dine vil se ut som script.avr_maestro_ etterfulgt av dine egne tolv tegn, og deretter kontrollens navn. Åpne Developer Tools og deretter States i Home Assistant, og filtrer på avr_maestro for å se din egen liste.
Mer av guiden

Andre AVR Maestro-guider

Kom i gang · Startskjerm · Scener · Egendefinerte ikoner · Lyd · Grafisk EQ · Høyttalere · Hvorfor en kontroll er låst · Assistenten · Hjemmeautomatisering · Soner · Fjernkontroll · Radio (FM/AM) · Skjermmeny · Innstillinger · Språk · Volumkontroller · Sikkerhetskopi & gjenoppretting · Spilles nå & HEOS

Hele mottakeren din, på én vegg

Hjemmeautomatisering er den eneste betalte opplåsingen i AVR Maestro. Alt annet, inkludert AI-assistenten på enheten, er inkludert.

Hent den på Google Play Last ned på App Store Last ned på Mac App Store Hent den på Microsoft Store

Tilbake til Hjemmeautomatisering → · Hele brukerveiledningen →