关于 homeassistant-dashboard-designer
Home Assistant Dashboard Designer 是用于设计和更新 Lovelace 仪表盘的技能,强调可复用模板与一致的布局规则。它引导用户验证实体、编写 YAML 并运行检查;仅在用户提出时将 Stitch 用作视觉灵感。
主要功能
- 01将自然语言请求转为仪表盘意图
- 02遵循网格布局与卡片约束
- 03复用现有模板和代码片段
- 04可用时通过 Home Assistant MCP 验证实体与服务
- 05运行仪表盘和 Lovelace 验证
适用场景
- 01重构现有仪表盘视图
- 02设计响应式磁贴布局
- 03在修改 YAML 前检查实体和服务引用
- 04按需使用 Stitch 探索视觉层次
MCP 相关
可用时,它会在修改 YAML 前通过 Home Assistant MCP 验证实体、服务及仪表盘引用。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ccostan/ home-assistantconfig --skill homeassistant-dashboard-designer安装后在 Claude Code 中输入/homeassistant-dashboard-designer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdagents/openai.yamlreferences/dashboard_rules.mdscripts/validate_lovelace_view.pytests/test_validate_lovelace_view.py详细介绍
Home Assistant 仪表盘设计器
将仪表盘设计成系统:结构可预测、模板可复用、偏差最小化。仅将 Stitch 视为灵感来源;请将设计转换为安全的 Lovelace YAML。
主要输入:自然语言(默认)
你可以用自然语言提供指导。此技能必须在内部推断结构化意图(仪表盘意图、视图名称、实体映射、约束),同时遵循设计系统,并在 Home Assistant MCP 可用时验证实体和服务。
自然语言中建议至少包含以下信息:
- 要更改什么(添加/移除/重构)以及原因(目标)。
- 要在哪里更改:
config/dashboards/**下的确切视图/局部文件路径。 - 你关心的任何约束:桌面端/移动端列数、图表时间范围偏好、“不要改动”的模板/区域。
如果缺少上述任何信息,请提出有针对性的澄清问题(不要要求提供完整的“意图块”)。
自然语言请求示例:
- “重构
config/dashboards/infrastructure/views/06_mariadb.yaml,使其符合其他 Infrastructure 视图使用的 button-card 优先系统。保留相同实体,不添加新模板;桌面端 4 列/移动端 2 列。”
可选输入:结构化意图(允许,但非必需)
如果用户提供结构化意图,请接受。不要要求用户提供。
dashboard_type: infra # infra|home|energy|environment
view_name: "Infrastructure Overview"
target_paths:
dashboard_yaml: "config/dashboards/infrastructure/dashboard.yaml"
view_yaml: "config/dashboards/infrastructure/views/07_docker_containers.yaml"
entities:
- name: "Proxmox01"
cpu: "sensor.proxmox01_cpu"
memory: "sensor.proxmox01_mem"
constraints:
desktop_columns: 4
mobile_columns: 2
notes:
- "Preserve existing templates; minimize diff."
如果要更新现有视图,且上下文中无法明确判断,请询问:
- 哪个视图文件(单个视图字典)是事实来源?
- 有没有“不要改动”的区域/模板?
- 有没有必须保留的备用卡片?
输出约定(始终遵守)
- 一个有效的 Lovelace 视图(单个视图字典)
- 确定性的排序(卡片/区域顺序稳定)
- 区域注释(简短且一致)
- 卡片样式差异为零(不使用一次性样式;使用模板/片段)
- 明确说明使用备用卡片的理由(在备用卡片旁的 YAML 注释中说明)
卡片优先级模型
优先尝试第 1 层。只有在第 1 层无法安全实现需求时,才使用第 2 层。
第 1 层(主要):
custom:button-card(结构+图块+标题+容器)card-mod(仅用于共享/全局润色;可使用共享片段)custom:flex-horseshoe-card(单指标径向遥测)custom:mini-graph-card(单指标趋势)
第 2 层(备用,必须在注释中说明理由):
entities、markdown、history-graph、conditionaliframe(最后手段)
布局规则(硬性约束)
- 允许的布局容器:
grid、vertical-stack - 最大嵌套深度:2(示例:
grid->vertical-stack-> 卡片) - 网格单元格内不得使用
horizontal-stack(优先增加网格列数,或使用vertical-stack) - 不得自由定位
- 不得在
card-mod中嵌入布局逻辑 - 对于
type: sections视图中的密集图块列表,外层面板应保持全宽(column_span: 4),并使用custom:layout-card使内层图块网格能够响应式布局(除非用户另有要求,否则桌面端为4列/移动端为2列)。 - 在
type: sections视图中,紧接顶部芯片/徽标下方的第一个区域必须是全宽容器(column_span: 4),且只包含一个包装卡片;该卡片还需设置grid_options.columns: full,以避免出现狭窄列的空白。 - 移除/移动内容后,向上整合布局:不得留下空白区域、空占位符或刻意稀疏的行,除非用户明确要求留白。
注意:如果仓库/视图使用 Home Assistant type: sections,请将 sections 视为顶层结构,并在每个区域内遵循相同的容器规则(区域中只能包含 grid/vertical-stack 卡片及其子项)。
设计系统规则(实现规范)
Button Card(主要渲染器)
- 使用
custom:button-card作为结构基元。 - 必须使用模板。不得内联各卡片的
styles:;样式应放在集中管理的模板/片段中。 - 通过变量或模板 JS 实现逻辑(避免在各卡片中重复逻辑)。
card-mod(样式约束层)
- 仅用于共享/全局的细节优化:
- 统一内边距
- 控制边框圆角
- 去除阴影
- 统一排版
- 不得设置特定实体的样式
- 不得逐卡片尝试不同的视觉效果
Flex Horseshoe Card
- 每张卡片仅展示一个主要指标。
- 明确设置颜色阈值。
- 不得混用单位。
Mini Graph Card
- 每个图表仅展示一个指标。
- 每个仪表板使用一致的时间范围。
- 图例应尽量精简(仅在必要时显示)。
模板架构(必需)
- 视图只能引用模板(对于
custom:button-card:每个实例都必须指定template:)。 - 模板接受变量;视图传入变量。
- 除非有明确指示,否则不得创建新模板。
检查仓库实际情况(重要):
- 如果仓库已有成熟模板(例如,Infrastructure 使用
bearstone_*),则使用现有模板。 - 如果规范要求的“必需模板类别”不存在,请映射到最接近的现有模板并指出差距,或请求明确许可后再添加模板。
Stitch MCP(仅用于获取灵感)
仅将 Stitch 用于了解:
- 视觉层级(标题、分组、密度)
- 间距节奏(内边距/间隙)
- 分组模式(面板、区块)
切勿将 Stitch 的输出视为实现代码。
向 Stitch 提示时,须原样包含以下约束:
Grid-only layout. No absolute positioning. No JS frameworks. No custom HTML/CSS outside card-mod.
Card types limited to: custom:button-card, card-mod, custom:flex-horseshoe-card, custom:mini-graph-card, and HA core fallback cards only if unavoidable.
Max layout nesting depth: 2. No horizontal-stack inside grid cells.
可选 Stitch 交接(轻量桥接)
仅当用户明确要求视觉构思、布局探索或多个方案时使用。
- 触发 Stitch 流程:
- 用户要求获取重新设计灵感、多个方案或多个视觉方向。
- 跳过 Stitch 流程:
- 用户要求直接重构/更新仪表板,且无需构思。
- 前提条件:
- Stitch 仅用于构思层级/间距/分组。
- 切勿将 Stitch 输出复制为实现代码。
- 最终实现仍须遵循此技能中所有允许使用的卡片/布局规则。
交接产物(仅限摘要,不导出代码):
stitch_intent:
layout_pattern: "<grid and grouping pattern to translate>"
section_hierarchy: "<header/panel/section ordering>"
density_target: "<compact|balanced|spacious>"
cards_to_translate:
- "<visual card concept mapped to allowed Lovelace card types>"
翻译要求:
- 仅将
stitch_intent转换为获准使用的 Lovelace 结构(grid、vertical-stack,优先使用 Tier 1 卡片)。 - 将任何不受支持的 Stitch 概念重新映射到符合要求的卡片/容器;需要使用 Tier 2 时,须在文中说明回退选择。
Stitch 不可用时的回退行为:
- 使用此技能的设计系统和规则继续手动构思。
- 明确说明降级模式(“Stitch 不可用;继续手动规划层级/密度”)。
- 不得因 Stitch 不可用而阻碍仪表板工作。
工作流(按此顺序执行)
- 对此仓库使用直接更新模式:
- 直接编辑生产 YAML(此技能工作流中不使用暂存的仪表盘副本)。
- 尽量减少差异,并在重启/重新加载 HA 前完成验证,以确保回滚安全。
- 编辑前,读取目标仪表盘/视图/局部文件/模板及其包含的目标:
- 确认确切的源视图/局部文件/模板文件。
- 确认引用的
!include文件/目录存在且属于处理范围。
- 根据用户请求和现有仪表盘上下文确定意图:
infra(NOC)、home、energy或environment。每个视图只保留一种意图。 - 编辑前验证实体和服务:
- 优先使用 Home Assistant MCP 验证实时实体/服务(若可用则必须使用)。
- 写入 YAML 前,在工作笔记中记录 MCP 验证步骤。
- 如果 MCP 不可用,请用户确认实体 ID 和服务(不要猜测)。
- 在约束下拟定布局:顶层使用
grid,可选用vertical-stack分组。- 如果使用 Stitch,先概述
stitch_intent,并将其视为此步骤的参考输入。 - 移除内容后,将卡片/区块向上重排,消除空隙并减少空行。
- 如果使用 Stitch,先概述
- 优先使用 Tier 1 卡片;复用现有模板;避免一次性样式。
- 如果必须使用后备卡片,添加行内注释,说明 Tier 1 无法满足要求的原因。
- 按以下顺序验证:
- 运行
pwsh -NoProfile -File tools/validate_dashboards.ps1。 - 运行
pwsh -NoProfile -File tools/ha_ui_smoke.ps1。 - 如果可用,运行 Home Assistant 配置验证(
ha core check或homeassistant --script check_config)。 - 对每个已更改的视图文件,运行此技能中的
scripts/validate_lovelace_view.py。
- 运行
- 失败处理:
- 如果无法满足要求:说明违反的规则,并提出符合要求的替代方案。
- 如果验证失败:停止,展示错误输出,并提出修正后的 YAML。不要留下无效配置。
示例流程:
- 用户请求重新设计灵感 -> 使用所需约束进行 Stitch 构思 -> 概述
stitch_intent-> 转换为 Lovelace 安全的 YAML -> 运行验证检查。
参考资料
- 需要完整约束集和仓库特定映射说明时,请阅读
references/dashboard_rules.md。
Home Assistant MCP 验证(可用时必须执行)
编写 Lovelace YAML 前,确认:
- 每个
entity:(以及通过变量引用的任何实体)均存在。 - 计划调用的每项服务均存在,且负载结构正确(尤其是
service_data)。
启用 Home Assistant MCP 时,请使用它来:
- 列出/确认实体(避免
sensor.foo_bar与sensor.foobar之类的拼写错误)。 - 确认仪表盘卡片引用的实体确实存在。
- 在提交 YAML 更改前验证服务名称和字段。
如果 MCP 未启用或无法访问,请停止并询问缺少的实体/服务 ID,不要凭空编造。