Home Assistant · צעד אחר צעד

בנו את לוח הבקרה הזה ב-Home Assistant בערך בשעה

עשרה שלבים, ה-YAML של כל כרטיס, ותצוגה מלאה שאפשר להדביק בבת אחת. נבנה וצולם על Marantz CINEMA 30 אמיתי. מחליפים שתי מחרוזות והוא שלכם.

לוח הבקרה המוגמר: כרטיס ״מתנגן כעת״ ראשי, עוצמת קול עם פריסטים ב-dB, רשת מקורות, מצבי סראונד, תיקון חדר, סצנות וגרף עוצמת קול
מה אתם בונים
ממהרים? קפצו לשלב 10, הורידו את התצוגה המלאה, החליפו שתי מחרוזות והדביקו. השלבים שביניהם מסבירים מה כל חלק עושה, כדי שתוכלו לשנות אותו.

לפני שמתחילים

שני דברים מזינים את לוח הבקרה הזה, וההבדל ביניהם חשוב בכל שלב להלן.

מגיע מנותן לכם
הסקריפטים המסונכרנים של AVR Maestroכל פקד. קלטים, מצבי סראונד, Audyssey, Dirac, Smart Select, פריסטים, עמעום, אקו, והסצנות שלכם.
ישות נגן המדיה של האינטגרציה Denon AVRמצב חי. הפעלה, מקור נבחר, מצב סראונד, עוצמת קול, השתקה.
שלב 1

התקינו ארבעה כרטיסים מ-HACS

כולם נמצאים בחנות ברירת המחדל של HACS. ב-Home Assistant: HACS › Frontend › Explore & Download Repositories, חפשו את השם, לחצו Download, ואז רעננו את הדפדפן.

מחפשיםמשמש לאם מדלגים
Mushroomכל אריחי הפקדים וסליידר עוצמת הקולמשתמשים בכרטיס button רגיל. עובד, אבל נראה יותר מרובע.
button-cardכותרות מדורים עם תווית חיהמשתמשים בכרטיס markdown, או בכותרות פשוטות.
card-modהצבעים והמצב הדלוק של האריח הפעילהכול עדיין עובד. פשוט שום דבר לא נדלק.
apexcharts-cardגרפי ההיסטוריהמשתמשים בכרטיס history-graph המובנה.
אף אחד מהם לא חובה כדי שזה יעבוד. כל פקד להלן רץ מכרטיס כפתור רגיל של Home Assistant שמצביע על אותו סקריפט. הכרטיסים המותאמים הם איפור, לא אינסטלציה.
שלב 2

מצאו את שני מזהי הישויות שלכם

כל קטע קוד בעמוד הזה משתמש בשני מציינים. מוצאים את שלכם פעם אחת, והשאר זה העתק-הדבק.

האמצע של כל מזהה סקריפט הוא כתובת ה-MAC של המקלט שלכם, שנים-עשר תווים באותיות קטנות, זהה בכולם. מעתיקים אותו פעם אחת. בכל מקום שבו העמוד הזה כותב MAC, שימו את שלכם.

התעלמו מכל מזהה שאומר unavailable. גרסאות ישנות נתנו לסקריפטים שמות לפי שם המקלט ולא לפי ה-MAC. אם סנכרנתם אז, הישנים עדיין ברשימה והם מתים. החיים הם אלה שנקראים לפי ה-MAC.
שלב 3

צרו את התצוגה

  1. 1. Settings › Dashboards › Add Dashboard › New dashboard from scratch. תנו לו כל שם שתרצו.
  2. 2. פתחו אותו, ואז לחצו על סמל העיפרון למעלה בצד ימין כדי לערוך.
  3. 3. הוסיפו תצוגה ובחרו בפריסת Sections. לא Masonry. Sections היא מה שגורם לה להסתדר נכון בטלפון.
  4. 4. בהגדרות התצוגה, הגדירו Max columns ל-3 והפעילו את Dense section placement.

מכאן והלאה כל שלב הוא: מוסיפים מדור, ואז מדביקים בו כרטיסים. כדי להדביק YAML, השתמשו בתפריט שלוש הנקודות של כרטיס ובחרו Edit in YAML, או בתפריט שלוש הנקודות של לוח הבקרה ובחרו Raw configuration editor כדי להדביק את הכול בבת אחת.

# 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

הוסיפו פקד

מתחילים עם הדבר הכי פשוט בלוח, כדי לוודא שמזהי הישויות נכונים לפני שבונים משהו מסובך. מוסיפים מדור, מוסיפים כרטיס, Edit in 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.

לחצו עליו. אם המקלט משתנה, המזהים שלכם נכונים והכול להלן יעבוד. אם שום דבר לא קורה, חזרו לשלב 2.

שלב 5

גרמו לו להידלק כשהוא הפעיל

זו התבנית שכדאי ללמוד, וכל אריח מקור וסראונד בלוח הוא עותק שלה. הכרטיס שולח סקריפט וצובע את עצמו לפי ישות המקלט, כך שהקלט שאתם באמת עליו דלוק והשאר לא.

רשת המקורות עם Nvidia Shield דלוק בכתום ושנים-עשר הקלטים האחרים כהים
אריח אחד דלוק, שנים-עשר כהים
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 %}
    }

משנים שלושה דברים לכל קלט: הסקריפט, האייקון, והמחרוזת שמולה משווים.

שני דברים חייבים להיות נכונים, אחרת אריח לעולם לא ידלק:

מצבי סראונד הם אותו כרטיס, עם sound_mode במקום source.

שלב 6

תנו לכל מדור כותרת חיה

כותרת פשוטה היא שטח מת. שימו מתחתיה את הערך החי, ו"Sources" הופך ל"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

הרשת בת שתי השורות היא מה שמציב את התווית מתחת לכותרת ולא לצדה.

החליפו את attributes.source ב-attributes.sound_mode בכותרת הסראונד, וכן הלאה.

שלב 7

הציגו עוצמת קול ב-dB

Home Assistant מדווח עוצמת קול כשבר. אף אחד לא מכוון מקלט ל"0.67". שורה אחת של חשבון מתקנת את זה, וכל המדור מתחיל להיראות כמו מקלט.

מדור עוצמת הקול: סליידר, העלאה, הנמכה, השתקה וארבעה פריסטים ב-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 משנה את שם האריח בלי שום עריכה בלוח הבקרה.

ארבעה אריחי סצנה, כל אחד מפרט את ההגדרות שהסצנה משחזרת
כל אריח אומר מה הסצנה שלו משחזרת בפועל
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

שתי קריאות replace() מקצצות את הקידומת ואת שם המקלט משם הידידותי.

שורה שנייה שווה את הדקה הנוספת. קיר של כפתורים בשמות מליציים לא אומר לכם כלום ב-11 בלילה; שורה שאומרת מה כל אחד משחזר אומרת לכם על איזה ללחוץ.

שלב 9

הוסיפו היסטוריה

ישות נגן המדיה של המקלט נרשמת ב-Home Assistant כמו כל ישות אחרת, ולכן אתם מקבלים היסטוריית האזנה בחינם. כל מה שלהלן מגיע מישות אחת: בלי חיישנים נוספים, בלי עוזרים, בלי שום הגדרה מוקדמת.

חמישה גרפי היסטוריה: הפעלה ופעילות, עוצמה ראשית ב-dB, עוצמה לפי יום, מקור בשימוש ומצב סראונד
חמישה גרפים, ישות אחת, שבעה ימים

ציר הזמן הפשוט של המצבים לא צריך שום כרטיס מותאם, והוא זה ששווה הכי הרבה שיהיה לכם:

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

דלוק, כבוי, ומה עשה, לאורך שבוע.

עוצמת קול ב-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'; }"

שתי סדרות מאותו מאפיין, מקובצות לפי יום.

למה הגרף הזה משרטט 0 עד 80 ומעצב ל-dB, במקום לשרטט dB. עמודות גדלות מתחתית הציר. משרטטים dB ישירות וכל עמודה תלויה למטה מ-0, כך שעמודה ארוכה אומרת שקט, וזה נקרא הפוך. משרטטים את מספר העוצמה הראשית הגולמי ומחסירים 80 במעצבי הציר וה-tooltip, והעמודות גדלות כלפי מעלה בעוד שכל מה שהקורא רואה עדיין ב-dB. fill: 'null' אומר שליום בלי קריאות אין עמודה, במקום שיועבר אליו הערך של אתמול.

ושני אלה עונים על "על מה ובאיזה פורמט אני באמת צופה": מקור ומצב סראונד, משורטטים כציר זמן של מה שנבחר.

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 ובשני מערכי המעצבים. השאירו את אינדקס 0 כ-"Other".

ציר גרף צריך מספרים, ולכן transform ממפה כל שם מקור למיקום, והמעצבים ממפים בחזרה לתוויות ול-tooltip. עשו את המיפוי שלם: null (המקלט כבוי) נשאר רווח, וכל מה שלא ברשימה שלכם נופל ל-"Other", כך שאי אפשר לבלבל ביניהם. אותו כרטיס שוב עם sound_mode נותן לכם את מצב הסראונד, עם המחרוזות באותיות גדולות בדיוק כפי שהמקלט מדווח.

השאירו את stepline על שני האחרונים. מקור או מצב סראונד הם קטגוריה, לא מספר. מחליקים את העקומה והקו מתנדנד בין Shield ל-Xbox דרך כל מה שיושב ביניהם על הציר, ומצייר קלט שמעולם לא נבחר. עוצמת קול היא כמות אמיתית ומחליקה ביושר; קטגוריה לא.
בדקו קודם את תקופת השמירה של ה-recorder. Home Assistant שומר עשרה ימים כברירת מחדל, ולכן שבעה ימים הם בערך המקסימום שאפשר לבקש. כדי ללכת אחורה יותר צריך חיישן תבנית state_class: measurement, ש-Home Assistant שומר כסטטיסטיקות לטווח ארוך במשך שנים.
יום חסר הוא בדרך כלל נכון. Home Assistant רושם שינויים, לא דגימות. משאירים את המקלט על קלט אחד בעוצמה אחת יומיים והוא לא כותב כלום, ולכן אין עמודה לאותו יום. זה נראה כמו אובדן נתונים וזה בדיוק ההפך: שום דבר לא קרה.
שלב 10

או קחו את הכול

התצוגה המלאה, כל מדור וכל כרטיס, עם מציינים במקום מזהי ישויות.

  1. 1. הורידו את קובץ ה-YAML של התצוגה.
  2. 2. פתחו אותו בכל עורך טקסט והחליפו שתי מחרוזות, בכל מקום שבו הן מופיעות: YOUR_RECEIVER בשם ישות נגן המדיה שלכם, ו-YOURMAC בשנים-עשר התווים של המקלט שלכם משלב 2.
  3. 3. ב-Home Assistant פתחו את לוח הבקרה, סמל העיפרון, תפריט שלוש הנקודות, Raw configuration editor, והדביקו אותו כתצוגה.
מזהי הסצנות שלכם לא יתאימו. סקריפטי סצנות נקראים לפי הזמן שבו הסצנה נוצרה, ולכן ארבעת אלה שבקובץ לא קיימים במערכת שלכם: הכרטיסים האלה יוצגו ולא יעשו כלום. החליפו את מזהי הישויות שלהם במזהים שלכם משלב 2, או מחקו את מדור הסצנות ובנו אותו מחדש לפי שלב 8.
עוד שני דברים לצפות להם. גרפי המקורות והסראונד נושאים את שמות המקורות מהמקלט שעליו זה נבנה, ולכן ערכו את המערכים האלה כמתואר בשלב 9. והתוויות באריחים באנגלית; שום דבר בקובץ לא מתורגם.

אם אריח אף פעם לא נדלק

לפני שאתם מניחים שבניתם לא נכון: חלקם לא יכולים להידלק, וכדאי לדעת אילו.

אריח יכול להציג מצב רק אם Home Assistant יכול לקרוא אותו, והוא קורא את המקלט שלכם משני מקומות. האינטגרציה Denon AVR מפרסמת את הבסיס בישות נגן המדיה. AVR Maestro מפרסם את השאר: הוא יוצר חיישן Status Bridge, sensor.avr_maestro_your_receiver, וכותב עליו כמאפיינים את הקריאות שכבר יש לו.

בישות נגן המדיהבחיישן Status Bridge
הפעלהעקומת Audyssey MultEQ
מקור נבחרDynamic Volume ורמת הייחוס
מצב סראונדאיזה חריץ Dirac נטען
עוצמת קול והשתקהעמעום הפאנל הקדמי, מצב אקו
Dynamic EQ, לפעמיםפריסט רמקולים, טון, ועוד עשרות

שני העמודים קריאים עכשיו. קחו ערך של נגן מדיה מ-states['media_player.your_receiver'].attributes, וערך של Status Bridge עם state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), כך שאריח נדלק עבור ההגדרה הפעילה בפועל ולא רק מפעיל את הסקריפט ששנה אותה.

נמדד במקלט שעליו זה נבנה: ישות נגן המדיה נושאת כעשרים מתוך שישים הפקדים, וחיישן Status Bridge מפרסם עוד בערך ארבעים. בין השניים, לוח בקרה יכול לקרוא כמעט כל מה שהוא יכול לשנות - ההבדל בין קיר של כפתורים לבין משטח בקרה.

אם ערך יכול לסמן שני דברים, אמרו את זה. 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 %}

שלושה מצבים, לא שניים.

עוד דברים שכדאי לדעת

אותו לוח בקרה ברוחב טלפון, מסודר מחדש בעמודה אחת
אותו לוח בקרה ברוחב טלפון: שלוש העמודות הופכות לאחת, ושום דבר לא הוגדר כדי שזה יקרה
שאלות נפוצות

לוח הבקרה, בשאלות ותשובות

צריך כרטיסים מותאמים אישית מ-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.
האם מזהי הישויות שלי יהיו זהים לאלה שבמדריך?
התבנית כן, האמצע לא. AVR Maestro נותן לסקריפטים שלו שמות לפי כתובת ה-MAC של המקלט, כך ששינוי שם מעדכן את אותו סקריפט ולא יוצר עותק נוסף. אצלכם זה ייראה כך: script.avr_maestro_ ואחריו שנים-עשר התווים שלכם, ואז שם הפקד. פתחו ב-Home Assistant את Developer Tools ואז States, וסננו לפי avr_maestro כדי לראות את הרשימה שלכם.
עוד מהמדריך

מדריכים נוספים של AVR Maestro

תחילת העבודה · מסך הבית · סצנות · אייקונים מותאמים אישית · צליל · אקולייזר גרפי · רמקולים · למה פקד נעול · העוזר · אוטומציה ביתית · אזורים · שלט · רדיו (FM/AM) · תצוגה על המסך · הגדרות · שפות · פקדי עוצמת קול · גיבוי & שחזור · מתנגן כעת & HEOS

כל המקלט שלכם, על קיר אחד

אוטומציה ביתית היא הפתיחה בתשלום היחידה ב-AVR Maestro. כל השאר, כולל העוזר החכם שרץ במכשיר, כלול.

להורדה ב-Google Play להורדה ב-App Store להורדה ב-Mac App Store להורדה ב-Microsoft Store

חזרה לאוטומציה ביתית → · המדריך המלא למשתמש →