Skip to content
MisiteQPublic

About

QLoveHome(其爱家)· Home Assistant 全屋大屏面板 — 户型图可视化 · 四季主题 · 可视化编辑器 · 小白也能用,交给 AI 一句话布置

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

44 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏠 QLovehome · 全屋大屏

Home Assistant HACS Custom License GitHub issues GitHub stars

面向门口 / 客厅平板的 Home Assistant 全屋大屏面板。 可作为 HAOS 加载项(Add-on) 或 HACS 集成 安装,零 YAML,零 Webpack——HTML + SVG + JS,源码可读可改。


💬 写在前面

QLovehome(其爱家 哈哈哈)是怎么来的?

新房子装修(开发商的精装房,几乎没啥装修的)之后,有几个灯的开关我老婆说不太好按,让我给她弄个方便操作的方式。当时没有接触过 HAOS,从淘宝上搜了几个蓝牙的还有那种"机器小手指头"的,但都不好用。

因为家里有个米家的摄像头,所以接触到了米家的智能开关,慢慢的就把家里的开关(主要是灯具,没换灯)都换成了米家的。后来又陆陆续续添加了部分米家的小家电,不过空调洗衣机还是用的美的的。

慢慢发现米家和美的不通,操作啥的还得俩 App。后来就接触到了 HAOS。不过对我一个小白来说,布置仪表盘啥的太麻烦了,中间停停弄弄的,一直也没弄成。

头几天在肥牛群里和群友交流,有人推荐了一个仪表盘我挺喜欢的。刚好最近 AI 都很火,我就尝试让 AI 给我布置了一个基础的,发现嘿,比我自己弄好多了!然后就让 AI 参照群友推荐的基础上给我布置了一个——不过这个是 AI 纯代码写出来的,和原来那个可能就在样式上有些相似,其他的都是现写的代码(我自己弄不明白 😅)。

发群里让大伙看,有人提出是不是可以弄成模板,所以就有了现在这个 QLovehome。是一个基础模板,可以手动设置自己家的户型,也可以直接导入平面图。

共享给大家,试试看吧,不会的交给 AI,一句话让他给你布置,哈哈哈! 🎉


✨ 功能

模块 说明
🏠 户型图 矢量 SVG,矩形 / 多边形 / 圆形房间,墙体自动融合一体
🎛️ 中控 灯光 · 插座 · 空调(含扫风模式)· 风扇 · 窗帘统一开关 + 调光调色温
📊 概览 家人在线 · 用电 · 安防 · 温湿度 · 电池 · 摄像头 · 网络 · 天气
📝 最近动态 自动记录设备操控 · 定时设置 · 定时到点执行,JSONL 存服务器,可按事件类型筛选
⏱️ 定时 / 倒计时 服务器端调度,关面板 / 退出账号也照跑,HA 重启自动恢复;支持手动输入分钟数
🔌 子设备绑定 热水器绑水量传感器、灯绑子灯组,子设备自动从户型图剔除
🎨 主题 深/浅色跟随日出日落 · 四季配色自动切换 · 房间色块温度感知
😴 屏保 无操作自动进待机大屏时钟 · 待机时间可配置
🛠️ 编辑器 可视化画户型 · 从 HA 批量导入实体 · 空格平移画布 · 滚轮缩放 · 拖房间名字定位
🔧 个性化 字体大小 · 面板透明度 · 主题深浅 · 待机时间 · 全部存 HA 服务器(换电脑/换浏览器不丢)

📸 截图

首页(浅色主题) 概览面板
home-light overview
编辑器 · 户型绘制 设置面板
editor settings
房间详情(空调中控)
room-detail

🚀 安装

⭐ 方式一:HAOS Add-on(推荐)

Home Assistant → 设置 → 加载项 → 右上角 ⋮ → 添加加载项仓库

URL:

https://github.com/MisiteQ/QLovehome

点 添加(仓库根目录的 repository.yaml 会被自动识别)→ 列表里找到 QLovehome → 安装

  • Supervisor 自动构建(首次约 3-5 分钟)
  • 安装完成后侧边栏自动出现 QLovehome
  • 前端 + 后端独立进程,HA 重启后自动恢复定时任务

💡 详细 Add-on 说明见 qlovehome_addon/README.md

方式二:HACS 自定义存储库(Integration 模式)

如果不想用 Supervisor Add-on,也可以装成标准 HA 集成:

  1. HACS → 集成 → 右上角 ⋮ → 自定义存储库
  2. URL 填:https://github.com/MisiteQ/QLovehome
  3. 类别选:集成
  4. 搜索 QLovehome → 安装 → 重启 HA
  5. 设置 → 设备与服务 → 添加集成 → QLovehome
    • 侧边栏自动出现 QLovehome 入口 → 点进去就是
    • 如果没出现 → Dashboard 添加「网页卡片(iframe)」→ 地址:
      /qlovehome/www/index.html
      

方式三:纯 iframe(最简)

# 复制前端文件到 HA www 目录
cp -r custom_components/qlovehome/www/ /config/www/qlovehome/

Dashboard → 网页卡片(iframe)→ 地址:

/local/qlovehome/index.html

🔌 接线

⭐ 推荐:编辑器「从 HA 批量导入」(v1.1.0+)

不用改任何 Python 脚本!

  1. 主界面左下角铅笔图标 → 进入编辑器 → 设备 tab
  2. 点 🔍 从 HA 批量导入
  3. 弹窗里按 domain 分组列出你 HA 里所有控制类实体(灯 / 开关 / 空调 / 窗帘 / 风扇 / 影音 / 门锁 / 摄像头...)
  4. 勾选你家的设备 → 点「导入 →」
  5. 系统自动:推断 kind(light 实体 → 灯图标)+ 取 friendly_name 当设备名
  6. 继续配房间归属 + 户型图位置 → 保存

已经绑定过的实体会自动灰掉避免重复。超过 30% 设备实体不存在时 tab 头会显示黄色告警。

进阶:改 gen_qlovehome_data.py(适合大量设备 / 自定义房间名)

# 1. 改 gen_qlovehome_data.py 里的实体 ID 和房间
# 2. 生成数据层
python gen_qlovehome_data.py

# 3. 把生成的 qlovehome-data.js 传到 /config/www/qlovehome/
# 4. index.html 里的 ?v=N 加 1(浏览器缓存)

实体 ID 对不上不会报错,只会显示「—」。先用批量导入跑通主要设备,特殊实体(概览里的家人/用电)再手改 gen 脚本。


🗺️ 换户型

方式 怎么做 适合
⭐ A. 编辑器直接画 编辑器 → 户型 tab → 矩形 / 圆形 / 多边形工具直接绘制,拖拽调整 绝大多数人,推荐
B. 现实风照片底板 照片存 www/assets/plan-real.jpg,跑 python calib_real.py 想让照片当底板
C. 重新提取多边形 python extract_rooms.py 标注图.png 户型图.png 户型完全不同

⚠️ B / C 需要仓库里的 Python 脚本,HACS 发布包里不含(见 .hacsignore)。想用就从 GitHub 克隆仓库,或直接用方式 A 在编辑器里画。

rooms_poly.json 是唯一几何源头——墙体、房间色块、标签位置全由它推导。


⌨️ 编辑器快捷键

操作 效果
Space + 拖动 平移画布
滚轮 缩放(以鼠标位置为锚,0.3× ~ 5×)
Ctrl/⌘ + 0 重置缩放和位置
矩形房间 按住从一角拖到对角
圆形房间 按住从圆心拖出半径
多边形 逐点点击画异形
双击房间 改名 / 拖拽房间名字移动
Delete / Backspace 删除选中
Ctrl/⌘ / Shift + 点击 多选
右键 取消当前操作

📂 项目结构

QLovehome/
├── .github/workflows/validate.yaml   # CI: HACS + Python + JS 语法校验
├── .gitignore
├── .hacsignore
│
├── qlovehome_addon/                  # ⭐ HAOS Add-on(推荐)
│   ├── config.yaml                   #   Add-on 元数据(slug/ingress/架构)
│   ├── Dockerfile                    #   HA 基础镜像 + Alpine 预编译 aiohttp
│   ├── run.sh                        #   入口脚本(bashio 自动注入环境变量)
│   ├── README.md                     #   Add-on 专用说明页
│   ├── www/                          #   前端静态文件(自包含)
│   │   ├── index.html · qlovehome.js · qlovehome-editor.js
│   │   ├── qlovehome.css · qlovehome-data.js · QLovehome.png
│   │   └── assets/
│   └── server/                       #   独立 Python 后端(aiohttp)
│       ├── __main__.py               #     python -m server 入口
│       ├── app.py                    #     REST API + 静态文件托管
│       ├── ha.py                     #     HA WebSocket 连接层
│       ├── store.py                  #     配置 / 审计日志 / 版本持久化
│       ├── timer.py                  #     独立 asyncio 定时调度
│       └── manifest.json             #     版本号来源(Dockerfile 拷进容器)
│
├── repository.yaml                   # ⚠️ 必须在仓库根,Supervisor 靠它识别加载项仓库
│
├── custom_components/qlovehome/       # ⭐ HA Integration(备选,和 Add-on 共用前端)
│   ├── __init__.py                    #   integration 注册 + WS/REST API
│   ├── config_flow.py                 #   HA 配置向导
│   ├── const.py                       #   常量
│   ├── manifest.json                  #   集成元信息(version / domain)
│   ├── brand/                         #   HACS brands 校验用图标
│   │   ├── icon.png (256×256) · icon@2x.png (512×512)
│   ├── strings.json
│   ├── translations/
│   └── www/                           #   前端静态文件(和 Add-on/www/ 同步)
│
├── qlovehome/                        # 前端源码(开发用,同步到两个 www/)
│
├── gen_qlovehome_data.py
├── extract_rooms.py
├── calib_real.py
├── templates.yaml
├── hacs.json
├── info.md
├── USER_GUIDE.md
├── LICENSE
└── README.md

🛠️ 开发

# 本地静态服务器(改前端时预览)
py -m http.server 8765 --directory qlovehome/

# 改完要同步到 3 个位置(前端代码三份副本保持一致)
Copy-Item qlovehome\qlovehome.js,qlovehome\qlovehome-editor.js,qlovehome\qlovehome.css,qlovehome\qlovehome-data.js,qlovehome\index.html custom_components\qlovehome\www\ -Force
Copy-Item qlovehome\*.js,qlovehome\*.css,qlovehome\index.html qlovehome_addon\www\ -Force

# CI 自动校验:HACS validation · Python 语法 · JS 语法 · manifest.json

核心几何算法

函数 作用
unionPolys() 多边形并集 + 扩张(扫描线 + Marching Squares)
autoOutlineLoops() 户型自动外轮廓
traceLoops() 无方向端点连接串闭合环
scanlineFill() 每多边形独立扫描线填充
chaikin() Chaikin 算法平滑
roundPath() 带贝塞尔倒角的 SVG path

❓ 常见问题

现象 原因 解决
Supervisor 添加仓库提示「无效的加载项仓库」 仓库里找不到根级 repository.yaml 用最新代码(repository.yaml 已移到仓库根目录)
Add-on 安装卡在构建 / 构建失败 首次构建需拉 HA 基础镜像 + Alpine 包,网络慢 换 HA 的 Docker 镜像源后重试;看「加载项 → QLovehome → 日志」具体报错
Add-on 启动后侧边栏没出现 Ingress 面板未注册 / 浏览器缓存 重启加载项;清缓存;或直接访问 http://<ha-ip>:8123/api/hassio_ingress/ 下对应链接
侧边栏没出现 QLovehome(集成模式) panel 注册可能失败 Dashboard 手动加 iframe 卡片 → /qlovehome/www/index.html
页面空白 iframe 地址错 / 文件没传 / ?v=N 没加 确认 Dashboard 卡片 URL;确认 /config/www/qlovehome/ 下有 index.html
全是「—」 实体 ID 没换成你的 打开开发者工具 → 控制台输 LH.rooms.map(r=>r.lxs) 看实际读的是什么
图标有但点不动 该设备的 HA 服务不存在 HA → 开发者工具 → 服务 → 搜该设备 → 手动触发试试
改了没生效 浏览器缓存 ?v=N 加 1;还不行 Ctrl+Shift+R 硬刷新
手机侧栏不见 正常:≤900px 窄屏模式自动隐藏
墙体太厚 LH.plan.wallW 默认 3px 编辑器里改房间形状后重新生成,或 Console 输 LH.plan.wallW=10
待机时间想调 设置面板 设置 → 待机时间面板
体感温度显示 ≈ 该天气实体没提供 apparent_temperature,用的是公式估算 换和风 / OWM / AccuWeather 等自带体感的集成,或忽略

📝 更新日志

版本 日期 变更
v1.4.1 2026-10-29 🔧 加载项安装修复:repository.yaml 移到仓库根(否则 Supervisor 提示「无效的加载项仓库」);移除 config.yaml 里的 image: 字段(无预构建镜像,改为 Supervisor 本地构建);补 web.get("/") 根路由,修复 Ingress 面板打开显示 404;🧩 补齐 HACS brands 图标(brand/icon.png + icon@2x.png),CI 10/10 通过;📚 README / USER_GUIDE / info.md / 加载项 README 全面校对(修正遗留 lovehome 旧命名、gen_qlovehome_data.py 文件名、路径、localStorage 过时描述等)
v1.4.0 2026-10-28 ⭐ 新增 HAOS Add-on 模式(独立 Python 进程 + HA WebSocket 连接 + Ingress 侧边栏,自包含 qlovehome_addon/ 目录);🗂️ 设备操控统一走后端 /api/qlh/service(两种模式都带审计日志),失败才回落直接 hass.callService();📝 新增 最近动态 面板(底部 tab 栏,自动记录设备操控、定时设置、定时到点执行,JSONL 存服务器,支持事件类型筛选);🔌 子设备绑定(热水器绑水量传感器、灯绑子灯组等,编辑器里可添加,子设备自动从户型图剔除);❄️ 空调面板新增 扫风模式(读 swing_modes 属性,有才显示按钮);🏷️ 版本号改从 manifest.json 动态读取,关于页面实时跟随更新
v1.3.4 2026-10-28 🏠 默认模板补上过道 + 卫生间(6 个房间铺满画布,每房一盏示例灯);🐛 修复 HA 顶栏隐藏时报 getElementById is not a function(逐层扫描 shadow root 时对 Document 兼容取样式节点);🩹 服务器配置只剩 timers 段时不再被误判为「已配置」,可正常回落到默认模板
v1.3.3 2026-10-28 🏠 默认模板改为4 个房间铺满画布 + 每房一盏灯(移除原来开发者自带的户型);🪟 修复隐藏 HA 顶栏按钮无效(兼容 Lovelace .header 与新版 ha-top-app-bar,逐层注入 shadow DOM)
v1.3.2 2026-10-28 👨‍👩‍👧 家人支持一位家人挂多台设备(手机 / 手表 / 平板):编辑器里「+ 设备」逐个添加,任意一台在线即算在家;家人详情页会列出每台在线状态
v1.3.1 2026-10-28 ⏱️ 定时 / 倒计时改由 HA 服务器调度:存在集成自身目录 qlh/qlh-config.json 的 timers 段,关面板 / 退出 HA 账号 / 换电脑都照常执行;支持手动输入分钟数(1~1440)
v1.1.0 2026-10-27 ⭐ 新增编辑器批量导入:从 HA 实际实体列表勾选创建设备(按 domain 分组、自动推断 kind/名字);设备 tab 缺失实体告警;接线方式升级为「批量导入优先」
v1.0.1 2026-10-27 🔴 修复 async_setup_entry 崩溃(panel_custom API → frontend 内置注册);manifest iot_class 改为 calculated
v1.0.0 2026-10-27 首个正式发布:户型图可视化 + 四季主题 + 编辑器 + 房间标签拖拽 + HACS 集成

🤝 贡献

欢迎 PR!提交前请确保:

  1. CI Actions 全绿(HACS validation + Python 语法 + JS 语法)
  2. manifest.json 的 version 同步更新
  3. 改了 gen_qlovehome_data.py 要重新跑一遍确认没 break

📄 许可

MIT License · 可以随便改、随便用。

初始版本来自一套真实家庭面板(脱敏处理),布局与交互逻辑原样保留。

About

QLoveHome(其爱家)· Home Assistant 全屋大屏面板 — 户型图可视化 · 四季主题 · 可视化编辑器 · 小白也能用,交给 AI 一句话布置

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages