资讯动态

剖析Home Information架构:Django、SVG与SQLite如何构建Local-First的家庭数据中枢

发布时间:2026/10/23 1:45:28 来源:尧图企业网站定制
【免费下载链接】home-informationHome Information - Your home, your data, organized.项目地址https://gitcode.com/gh_mirrors/ho/home-information点击查看免费下载Home Information是一个 Local-First本地优先的开源家庭数据中枢它用Django做后端、SVG做空间化界面、SQLite做本地存储把家中散落在抽屉、邮箱和笔记里的手册、保修单、设备控制和摄像头状态全部组织在一张你家的平面图上。下面带你完整剖析它的技术架构看看这三项技术是如何协同构建出一个完全运行在家庭局域网里的数据中心的。上图是项目的架构总览可以把它分成三层浏览器层JavaScript一类是同步的 UI 编辑脚本svg-utils.js、svg-icon.js、edit-dragdrop.js等负责平面图的拖拽、缩放、编辑另一类是异步的状态轮询脚本watchdog.js、status.js定时向服务器询问家里发生了什么。Django 服务端层Python由一组单例 Manager 组成包括 Settings Manager、Sensor Response Manager、Event Manager、Alert Manager、Security Manager 等分别负责配置、传感响应、事件触发、告警和安全模式。外部系统层Home Assistant、Frigate、ZoneMinder 等通过 API 与 Integration Manager 双向同步。设计哲学Local-First 如何落地Local-First 听起来是口号但 Home Information 在架构文档 architecture-overview.md 中把它写成了硬约束整个应用必须能在没有任何外部依赖、没有互联网连接的环境中完整运行。落到实现上有三条原则数据完全本地化数据库是本地一个 SQLite 文件上传的手册、照片、SVG 平面图都存在本地媒体目录配置存在本地环境变量文件里environment-variables.md 详细规定了这一套。本地集成优先API 集成只对接运行在局域网内的服务本机 Home Assistant 的 8123 端口、本机 Frigate 等天然适合家庭网络。优雅降级外部 API 不可用时核心功能信息查阅、平面图浏览、设备记录不受影响只有对应的集成能力暂时不可用。对普通用户的实际收益是数据主权完全在自己手里。Docker 部署时见 docker-compose.example.yml只需要挂载两个卷——/data/databaseSQLite 数据库和/data/media文件备份你的家只需要拷贝两个目录。Django 多应用架构把家拆成 20 个模块打开 src/hi/apps/ 目录你会发现整个系统被拆分成职责单一的 Django 应用。核心应用的分工如下应用职责目录entity核心模型一切物理/逻辑对象设备、设施、区域src/hi/apps/entity/location空间管理带 SVG 平面图的物理空间与视图src/hi/apps/location/sense传感器数据采集与历史持久化src/hi/apps/sense/control设备控制与操作历史src/hi/apps/control/event多条件触发器、时间窗口与自动化响应src/hi/apps/event/alert告警管理单例 队列化处理src/hi/apps/alert/collection跨位置的逻辑分组如动力工具src/hi/apps/collection/weather可插拔的天气数据源NWS 等src/hi/apps/weather/这种拆分背后是一套清晰的数据模型分层详见 />在编程模式上项目大量使用单例 Manager如AlertManager、WeatherManager承载核心状态并用MixinSecurityMixins、NotifyMixins复用横切能力。这些约定都沉淀在 backend-guidelines.md 中是新贡献者理解代码的最佳入口。SVG 空间化引擎把平面图变成可编程的画布Home Information 最有辨识度的设计是用SVG作为整个空间的坐标系。每个Location都有一张背景 SVG 平面图实体图标通过x, y坐标、缩放和旋转参数精确钉在图上svg-background-system.md。它的 SVG 处理是一条完整的工程化流水线统一处理管道无论 SVG 来自上传、模板还是编辑器都经过 svg_utils.py 的process_svg_content()校验结构、提取viewBox、剥离外层svg、扫描危险元素后以唯一时间戳文件名写入媒体目录。画板调色板系统编辑器内置一个调色板svg_edit_palette.svg墙、门、地面、设备图标都是可拖拽的预定义图元每个图元带data-bg-edit-type闭合路径 / 开放路径 / 图标和图层号保证地面在墙后面、墙在门后面的正确渲染顺序。路径型定位除了图标坐标系统还支持SVG 路径EntityPath来表达线性或面状特征——地下管线、围栏边界、安防区域都能画出来。前端核心库src/hi/static/js/ 下的svg-icon-core.js拖拽/缩放/镜像、svg-path-core.js顶点编辑、svg-pan-zoom-core.jsviewBox 平移缩放共同支撑起一个纯前端的平面图编辑器。这种SVG 即数据的设计让空间信息既可视化又可查询安防区域的覆盖范围、管线走向本质都是 SVG 路径数据可以参与事件规则判断而不只是好看的背景图。SQLite 单文件存储零运维的数据底座在 base.py 中数据库配置只有寥寥几行DATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: os.path.join( ENV.DATABASES_NAME_PATH, hi.sqlite3 ), } }对家庭场景来说这是恰到好处的选择零运维不需要单独部署 MySQL/PostgreSQL 容器hi.sqlite3一个文件就是全部数据数据可移植所有关系都是标准 SQLite 外键可以用标准 SQL 查询、导出为其他格式甚至可以脱离应用直接读取data-model.md 专门强调了这一点缓存补位需要性能热路径的地方如状态显示用cachetools的 TTL 缓存Redis 可选而非依赖数据库扩展。这也呼应了 Local-First 的备份故事数据库文件 媒体目录就是你的全部家当。集成层连接 Home Assistant 等外部系统Local-First 不等于封闭。项目的集成架构集中在 src/hi/integrations/每个外部服务有独立的应用目录Home Assistantsrc/hi/services/hass/完整双向同步——实体映射、状态同步、控制指令下发Frigate / ZoneMindersrc/hi/services/frigate/、src/hi/services/zoneminder/摄像头与录像事件HomeBox / Paperless-ngx / Immich物品清单、文档与照片归档。统一的入口是 integration_gateway.py 中的IntegrationGateway它负责 API 轮询、状态更新推送和控制动作下发。所有外部实体通过integration key集成键映射到本系统的Entity——你在 Home Assistant 里的传感器进入 Home Information 后就成为一个标准的、可以放在平面图上的实体。想新增一个集成遵循 integration-guidelines.md 的既有模式把服务代码放进src/hi/services/对应目录即可不需要改动核心模型。架构小结技术承担的角色关键收益Django模块化后端框架20 应用各司其职成熟的 ORM/迁移/安全体系单例 Manager 模式清晰SVG平面图坐标系 可视化引擎空间信息既好看又可查询、可参与规则判断SQLite单文件本地数据库零运维、可迁移、备份即拷贝文件Home Information 用这套组合回答了一个有意思的问题家庭数据中枢不需要云端。Django 保证了工程化质量SVG 让家第一次以空间形态进入软件SQLite 让数据真正属于用户自己。想深入了解推荐阅读架构总览docs/dev/shared/architecture-overview.md数据模型详解docs/dev/shared/data-model.mdSVG 背景系统docs/dev/domain/svg-background-system.md集成指南docs/dev/integrations/integration-guidelines.md项目目录结构说明docs/dev/shared/project-structure.md赞分享【免费下载链接】home-informationHome Information - Your home, your data, organized.项目地址https://gitcode.com/gh_mirrors/ho/home-information点击查看免费下载相关推荐Slide架构深度剖析理解这款Android Reddit客户端的设计原理Slide架构深度剖析理解这款Android Reddit客户端的设计原理 Slide是一款 开源的Android Reddit客户端 以其简洁的界面和强大SwiftPlate开源贡献指南如何参与项目开发和模板维护SwiftPlate开源贡献指南如何参与项目开发和模板维护 SwiftPlate是一个强大的命令行工具能够帮助开发者轻松生成跨平台的Swift框架项目。作为如何用AdGuard Home构建家庭网络广告拦截系统如何用AdGuard Home构建家庭网络广告拦截系统 还在为家庭网络中的广告弹窗和隐私追踪感到困扰吗作为家庭网络的医生AdGuard Home能帮助你数据集上一篇SmoothScroll 项目推荐下一篇CANN/asc-devkit asc_pair_reduce_sum向量归约和函数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑