عشر خطوات، وكود YAML لكل بطاقة، وعرض كامل يمكنك لصقه دفعة واحدة. بُنيت والتُقطت صورها على جهاز Marantz CINEMA 30 حقيقي. غيّر نصّين فقط وتصبح لوحتك.
هناك مصدران يغذّيان لوحة التحكم هذه، والفرق بينهما مهم في كل خطوة أدناه.
| المصدر | ما يوفّره لك |
|---|---|
| النصوص البرمجية المزامَنة من AVR Maestro | كل عناصر التحكم: المدخلات، وأوضاع الصوت المحيطي، وAudyssey، وDirac، وSmart Selects، والإعدادات المسبقة، والإضاءة الخافتة، ووضع توفير الطاقة، ومشاهدك. |
| كيان مشغّل الوسائط في تكامل Denon AVR | الحالة المباشرة: الطاقة، والمصدر المحدد، ووضع الصوت المحيطي، ومستوى الصوت، والكتم. |
الأربع كلها موجودة في متجر HACS الافتراضي. في Home Assistant: HACS › الواجهة الأمامية › استكشاف & تنزيل المستودعات، ابحث عن الاسم، ثم نزّل، ثم أعد تحميل المتصفح.
| ابحث عن | يُستخدم من أجل | إن تخطيته |
|---|---|---|
| Mushroom | كل بلاطات التحكم، ومنزلق مستوى الصوت | استخدم بطاقة button عادية. تعمل، لكن شكلها أكثر تربيعًا. |
| button-card | عناوين الأقسام مع تسمية مباشرة | استخدم بطاقة markdown، أو عناوين عادية. |
| card-mod | الألوان، والحالة المضاءة للبلاطة النشطة | كل شيء يعمل كما هو. لكن لا شيء يُضاء. |
| apexcharts-card | الرسوم البيانية للسجل | استخدم بطاقة history-graph المدمجة. |
كل مقطع في هذه الصفحة يستخدم عنصرَين نائبَين. اعثر على قيمتيك مرة واحدة، والباقي نسخ ولصق.
media_player.your_receiver → الإعدادات › الأجهزة & الخدمات › مستقبلك › كيان مشغّل الوسائط. شيء مثل media_player.marantz_cinema_30.script.avr_maestro_MAC_... → أدوات المطوّر › الحالات، واكتب avr_maestro في مرشح الكيانات. ستظهر قائمة التحكم بالكامل.الجزء الأوسط من كل معرّف نص برمجي هو عنوان MAC لمستقبلك، اثنا عشر حرفًا صغيرًا، وهو نفسه في جميعها. انسخه مرة واحدة. وفي كل موضع تكتب فيه هذه الصفحة MAC، ضع قيمتك.
unavailable. كانت الإصدارات الأقدم تسمّي النصوص البرمجية باسم المستقبل بدل عنوان MAC. إن أجريت المزامنة حينها، فتلك النصوص القديمة لا تزال مدرجة لكنها معطّلة. أما العاملة فهي التي تحمل اسم MAC.من هنا فصاعدًا كل خطوة هي: أضف قسمًا، ثم الصق بطاقات فيه. للصق YAML، استخدم قائمة النقاط الثلاث في البطاقة واختر التعديل بصيغة YAML، أو قائمة النقاط الثلاث في لوحة التحكم لاختيار محرر الإعدادات الخام للصق كل شيء دفعة واحدة.
# 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
ابدأ بأبسط شيء في اللوحة، لتتأكد من صحة معرّفات الكيانات قبل أن تبني أي شيء معقّد. أضف قسمًا، ثم بطاقة، ثم التعديل بصيغة 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.
هذا هو النمط الذي يستحق التعلّم، وكل بلاطة مصدر وصوت محيطي في اللوحة نسخة منه. تُرسل البطاقة نصًا برمجيًا وتلوّن نفسها بحسب كيان المستقبل، فيُضاء المدخل الذي تستخدمه فعلًا وتبقى البقية مطفأة.

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 %}
}
غيّر ثلاثة أشياء لكل مدخل: النص البرمجي، والأيقونة، والنص الذي تُجرى المقارنة معه.
أمران يجب ضبطهما وإلا فلن تُضاء البلاطة أبدًا:
source_list وsound_mode_list. هذه هي النصوص الدقيقة. قارن بأحرف صغيرة كما في المثال أعلاه.Xbox، بينما يظل عنصر التحكم في AVR Maestro يحمل اسم input_game1. طابِق ما يُبلغ عنه المستقبل، لا اسم النص البرمجي.أوضاع الصوت المحيطي هي البطاقة نفسها مع sound_mode بدلًا من source.
العنوان العادي مساحة ميتة. ضع القيمة المباشرة تحته فيصبح «المصادر» هو «المصادر / يعمل الآن: 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 في عنوان قسم الصوت المحيطي، وهكذا.
يُبلغ Home Assistant عن مستوى الصوت ككسر. لا أحد يضبط مستقبله على «0.67». سطر واحد من الحساب يحل المشكلة ويبدو القسم كله كأنه مستقبل حقيقي.

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
اقرأ الاسم من النص البرمجي بدل كتابته، وعندما تعيد تسمية مشهد في 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 مساءً، أما سطر يذكر ما يستعيده كل منها فيدلّك على الزر الذي تضغطه.
يسجّل Home Assistant كيان مشغّل الوسائط في المستقبل مثل أي كيان آخر، فيتوفر لك سجل استماع مجانًا. كل ما يلي يأتي من كيان واحد: دون مستشعرات إضافية، ودون مساعدات، ودون أي إعداد مسبق.

الخط الزمني للحالة العادي لا يحتاج إلى أي بطاقات مخصصة، وهو الأجدر بالاقتناء:
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 يحوّل الأحداث المتفرقة إلى خط متصل. ويجب وضع المحور الرأسي في 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'; }"
سلسلتان من السمة نفسها، مجمّعتان حسب اليوم.
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 كل اسم مصدر بموضع، وتعيده المنسّقات إلى الاسم في التسميات والتلميح. اجعل الربط شاملًا: يبقى null (المستقبل متوقف) فجوة، وأي شيء ليس في قائمتك يقع في «Other»، فلا يختلط الأمران أبدًا. والبطاقة نفسها مع sound_mode تعطيك وضع الصوت المحيطي، بنصوص بأحرف كبيرة تمامًا كما يبلّغ عنها مستقبلك.
stepline على هذين الأخيرين. المصدر ووضع الصوت المحيطي فئتان لا رقمان. إن نعّمت المنحنى فسينحرف الخط بين Shield وXbox مارًّا بما يقع بينهما على المحور، راسمًا مدخلًا لم يُحدَّد قط. مستوى الصوت كمية حقيقية ويقبل التنعيم بأمانة، أما الفئة فلا.state_class: measurement، يحتفظ به Home Assistant كإحصاءات طويلة الأمد لسنوات.العرض الكامل، بكل أقسامه وبطاقاته، مع عناصر نائبة بدل معرّفات الكيانات.
YOUR_RECEIVER باسم كيان مشغّل الوسائط لديك، وYOURMAC بالأحرف الاثني عشر الخاصة بمستقبلك من الخطوة 2.قبل أن تفترض أنك بنيتها خطأ: بعضها لا يمكن أن يُضاء، ومن المفيد أن تعرف أيها.
لا تستطيع البلاطة عرض حالتها إلا إذا استطاع Home Assistant قراءتها، وهو يقرأ مستقبلك من مكانين. يتولى تكامل Denon AVR نشر الأساسيات على كيان مشغّل الوسائط. ويتولى AVR Maestro نشر الباقي: فهو ينشئ مستشعر Status Bridge، sensor.avr_maestro_your_receiver، ويكتب عليه القراءات التي يحتفظ بها أصلًا كسمات.
| على كيان مشغّل الوسائط | على مستشعر Status Bridge |
|---|---|
| الطاقة | منحنى Audyssey MultEQ |
| المصدر المحدد | Dynamic Volume والمستوى المرجعي |
| وضع الصوت المحيطي | أي خانة Dirac محمّلة |
| مستوى الصوت والكتم | إضاءة اللوحة الأمامية الخافتة، ووضع توفير الطاقة |
| Dynamic EQ، أحيانًا | Speaker Preset، وجرس الصوت، وعشرات غيرها |
العمودان قابلان للقراءة الآن. خذ قيمة مشغّل الوسائط من states['media_player.your_receiver'].attributes، وقيمة Status Bridge بـ state_attr('sensor.avr_maestro_your_receiver','dirac_slot')، لتُضاء البلاطة للإعداد الفعّال فعلًا بدل أن تكتفي بتشغيل النص البرمجي الذي يغيّره.
قيس على المستقبل الذي بُنيت عليه اللوحة: يحمل كيان مشغّل الوسائط نحو عشرين من أصل ستين عنصر تحكم، وينشر مستشعر Status Bridge نحو أربعين أخرى. وبالاثنين معًا تستطيع لوحة التحكم قراءة كل ما تستطيع تغييره تقريبًا - وهذا هو الفرق بين جدار من الأزرار وسطح تحكم حقيقي.
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 %}
ثلاث حالات، لا اثنتان.
grid_options: {columns: 9}. ولست بلاطات في الصف، 6.media_controls وفيه on_off. اضبط media_controls: [].multiline_secondary: true.experimental.color_threshold. فهو يرسم الخط بتدرج رأسي، والمقطع الأفقي تمامًا ارتفاعه صفر فلا يوجد ما يتدرج عبره، فيظهر غير مرئي. جلسة مدتها 43 ساعة بمستوى صوت واحد اختفت كليًا. استخدم color صلبًا.
البدء · الشاشة الرئيسية · المشاهد · الأيقونات المخصصة · الصوت · المعادِل الرسومي · مكبرات الصوت · لماذا يكون عنصر التحكم مقفلًا · المساعد · أتمتة المنزل · المناطق · التحكم عن بُعد · الراديو (FM/AM) · العرض على الشاشة · الإعدادات · اللغات · عناصر التحكم في مستوى الصوت · النسخ الاحتياطي & الاستعادة · قيد التشغيل الآن & HEOS
أتمتة المنزل هي الميزة المدفوعة الوحيدة في AVR Maestro. كل ما عداها، بما في ذلك المساعد الذكي على الجهاز، مشمول.