راهکار حل مشکل تنظیم داشبورد پیش‌فرض برای هر دستگاه در Home Assistant

راهکار حل مشکل تنظیم داشبورد پیش‌فرض برای هر دستگاه در Home Assistant

پلتفرم Home Assistant یکی از محبوب‌ترین ابزارهای مدیریت خانه هوشمند است، اما گاهی اوقات به‌روزرسانی‌های جدید آن تغییراتی ایجاد می‌کنند که برای برخی کاربران دردسرساز می‌شود. در به‌روزرسانی نسخه 2025.12، این پلتفرم قابلیت تنظیم داشبورد پیش‌فرض مجزا برای هر دستگاه (Device) را حذف کرد و آن را با داشبوردهای پیش‌فرض سیستمی و در سطح کاربر جایگزین نمود. این تغییر برای کسانی که از چندین دستگاه مختلف در خانه با داشبوردهای متفاوت استفاده می‌کنند، مشکل‌ساز شد.

راهکار جامعه کاربری و چالش‌های آن

یک راهکار موقت در انجمن کاربری Home Assistant ارائه شده بود که از یک اسکریپت سفارشی جاوااسکریپت به نام device-default-dashboard.js در مسیر config/www/dashboard/ استفاده می‌کرد. این اسکریپت با ذخیره انتخاب کاربر در حافظه محلی (local storage) مرورگر، سیستم پیش‌فرض جدید را دور می‌زد. با این حال، این اسکریپت دارای چهار باگ اساسی بود که مانع از کارکرد صحیح آن می‌شد.

رفع باگ‌های چهارگانه اسکریپت

برای اجرای بدون نقص این راهکار، باید چهار مشکل فنی زیر برطرف شوند:

۱. باقی ماندن تنظیمات پیش‌فرض سیستمی قدیمی: Home Assistant ابتدا تنظیمات سیستمی را بررسی می‌کند و سپس به سراغ حافظه محلی مرورگر می‌رود. برای حل این مشکل، باید مقدار قدیمی default_panel را با یک فراخوانی مستقیم WebSocket به frontend/set_system_data پاک کرد.

۲. عدم لود شدن اسکریپت در تب‌های جدید (مشکل Bootstrap): اسکریپت اولیه LitElement را از طریق ha-panel-lovelace فراخوانی می‌کرد که تنها پس از باز کردن یک داشبورد Lovelace واقعی لود می‌شد. برای حل این مشکل، مرجع فراخوانی به home-assistant-main تغییر داده شد که همواره در پوسته اصلی برنامه در دسترس است.

۳. کار نکردن منوی کشویی (Dropdown): به دلیل تغییرات در کامپوننت ha-select و استفاده از کامپوننت‌های جدید Web Awesome، منوی کشویی اسکریپت کار نمی‌کرد. با بازنویسی کد و ارسال داشبوردهای موجود به ویژگی .options کامپوننت و خواندن مقدار انتخابی از طریق ev.detail.value، این مشکل برطرف شد.

۴. مشکل کش شدن شدید فایل‌ها در Home Assistant: این پلتفرم فایل‌های پوشه /local/ را به شدت کش می‌کند. برای اعمال تغییرات جدید، باید یک کوئری استرینگ مانند ?v=2 به انتهای آدرس ماژول (module_url) در فایل configuration.yaml اضافه شود تا مرورگر مجبور به بارگذاری نسخه جدید اسکریپت شود.