今日开源[第33期] Home Assistant Core - zhang

今日开源[第33期] Home Assistant Core - zhang

Home Assistant Core 项目分析报告

分析日期:2026-07-15


一、项目介绍

1.1 项目概述

Home Assistant Core 是全球最受欢迎的开源家庭自动化平台,以本地控制和隐私优先为核心理念。项目由全球 DIY 爱好者和技术爱好者社区驱动,可完美运行在树莓派或本地服务器上。用户通过它可以统一管理灯光、空调、安防、能源等几乎所有品牌的智能设备,并通过强大的自动化引擎实现场景联动。项目被 GitHub 评为 2025 年贡献者最多的顶级开源项目之一 $TRAE_REF。

1.2 项目信息

项目 详情
项目名称 Home Assistant Core
项目地址 https://github.com/home-assistant/core
项目官网 https://www.home-assistant.io
开发者文档 https://developers.home-assistant.io
PyPI 包名 homeassistant
作者/组织 Open Home Foundation(非营利组织)
创始人 Paulus Schoutsen (balloob)
Stars 81,000+(截至 2026 年 7 月)
Forks 35,000+
当前版本 2026.7.1(2026 年 7 月 3 日发布)
开源协议 Apache License 2.0
主要语言 Python 100%
创建时间 2013 年 9 月 17 日
提交数 112,000+ commits
发布数 1,600+ 个版本

1.3 项目示意图

Home Assistant 项目在 README 和官方文档中提供了丰富的架构示意图:

  • 整体架构分层图:展示 Operating System → Supervisor → Core 三层架构,体现从硬件到应用的完整技术栈
  • Core 核心架构图:展示 Event Bus(事件总线)、State Machine(状态机)、Service Registry(服务注册表)、Timer(定时器)四大核心组件及其交互关系
  • 集成架构图:展示组件(Component)与平台(Platform)的分层关系,以及 Config Flow 的配置流程
  • 精选集成品牌墙:展示 2000+ 支持品牌的 Logo 矩阵
  • 产品生态图:Home Assistant Green/Yellow 硬件、Voice Preview Edition 语音助手、Connect ZBT-2 等官方硬件

二、项目亮点

2.1 完全本地化控制与隐私优先

Home Assistant 的核心设计哲学是"本地优先"——所有数据在本地处理,无需云端,断网仍可正常工作。设备通信优先使用本地协议(Zigbee、Z-Wave、Thread、Matter、MQTT 等),仅在无本地方案时才回退到云端拉取。用户数据不存储于任何第三方云端,充分保障隐私安全 $TRAE_REF。

2.2 超大规模集成生态(2000+ 品牌)

官方支持 2000+ 品牌和设备集成,覆盖领域包括:

领域 典型集成
灯光 Philips Hue、Yeelight、LIFX、IKEA TRÅDFRI
空调 Daikin、Mitsubishi、Gree、Midea
安防 Ring、Amcrest、UniFi Protect、Frigate
能源 Tesla Powerwall、SolarEdge、Enphase
传感器 Aqara、Xiaomi、Shelly、Sonoff
语音助手 Alexa、Google Assistant、HomeKit、内置 Assist
协议 Zigbee、Z-Wave、Thread、Matter、Bluetooth、MQTT

支持的协议涵盖 Zigbee、Z-Wave、Thread、Matter、Bluetooth、MQTT、HomeKit、WiFi 等主流标准 $TRAE_REF。

2.3 事件驱动核心架构

底层由四大核心组件构成的事件驱动系统 $TRAE_REF:

组件 职责 说明
Event Bus 系统通信中枢 所有模块通过事件解耦,支持 state_changedcall_servicetime_changed 等核心事件
State Machine 实体状态管理 跟踪所有实体的当前状态,状态变更自动触发事件,驱动自动化
Service Registry 服务注册与调用 集成注册可被调用的服务,通过事件总线解耦调用方与实现方
Timer 定时驱动 每秒触发 time_changed 事件,驱动定时任务和时间相关自动化

2.4 强大的自动化引擎

  • 触发器(Trigger):时间触发、状态触发、事件触发、设备触发、地理位置触发、MQTT 等
  • 条件(Condition):状态条件、时间条件、模板条件、逻辑组合(and/or/not)
  • 动作(Action):调用服务、延迟、等待、条件分支、循环、并行执行、变量传递
  • 双模式编辑:YAML 配置文件 + 可视化拖拽编辑,满足不同用户习惯
  • Blueprint(蓝图):社区共享的可复用自动化模板,一键导入使用
  • 自然语言自动化:2026.7 版本新增,用自然语言描述自动化场景即可自动生成配置

2.5 内置语音助手 Assist

  • 完全本地运行的私有语音助手,无需云端
  • 支持唤醒词(Wake Words)激活
  • 可集成 AI/LLM 模型进行自然语言对话
  • 支持手机、平板、智能手表、甚至老式电话等多种设备
  • 官方硬件 Home Assistant Voice Preview Edition 开箱即用

2.6 创新的安装模式

提供四种安装方式,覆盖不同用户群体:

模式 说明 适用人群
Home Assistant OS 完整嵌入式操作系统,含 Supervisor + Core + 插件商店 大多数用户
Home Assistant Container Docker 容器,纯 Core 无 Supervisor 熟悉 Docker 的用户
Home Assistant Core pip install 手动安装 开发者
Home Assistant Supervised 现有 Linux 上安装 Supervisor 高级用户

2.7 与同类项目的差异化优势

维度 Home Assistant openHAB Domoticz SmartThings
开发语言 Python Java C++ 商业闭源
Stars 81,000+ ~4,000 ~3,000 N/A
集成数量 2000+ 1000+ 较少 受限于 Samsung 生态
本地控制 完全本地 本地 本地 依赖云端
隐私保护 最优(非营利) 较好 较好 一般
安装难度 简单(HA OS 一键) 复杂 简单 极简(硬件即用)
移动 App 强大(位置追踪、通知) 较弱 基本 完善
仪表盘 现代化、可拖拽 多种但老旧 基础 较封闭
语音助手 内置 Assist 需集成 需集成 内置 Bixby/Google
社区活跃度 极高 中等 较低 中等
更新频率 每月大版本 较慢 较慢 厂商控制
非营利属性 是(Open Home Foundation) 否(Samsung)

Home Assistant 的核心优势在于:集成数量最多、社区最活跃、更新最快、隐私保护最好、完全本地化、由非营利组织运营不可被收购。


三、项目运行环境

3.1 硬件要求

硬件平台 说明
树莓派 Raspberry Pi 4/5(最低 2GB RAM),推荐使用 microSD 卡或 SSD
Odroid Odroid N2+ 等系列设备
x86-64 PC/服务器 通用 PC,需 USB 启动盘或硬盘
Home Assistant Green 官方硬件,开箱即用,性价比之选
Home Assistant Yellow 官方硬件,内置 Zigbee,需自备 CM4 模块
虚拟机 支持 VirtualBox、VMware、Proxmox 等

3.2 操作系统与软件依赖

依赖 版本/说明
Python >= 3.14.2(当前版本要求较激进)
aiohttp 3.14.1 — 异步 HTTP 服务器/客户端
PyYAML 6.0.3 — YAML 配置解析
voluptuous 0.15.2 — 数据验证框架
Jinja2 3.1.6 — 模板引擎(自动化条件/动作)
SQLAlchemy 2.0.51 — 数据库 ORM(历史数据存储)
orjson 3.11.9 — 快速 JSON 序列化
cryptography 48.0.1 — 加密支持
zeroconf 0.150.0 — 设备自动发现(mDNS/Bonjour)
httpx 0.28.1 — HTTP 客户端
Pillow 12.3.0 — 图像处理
ciso8601 2.3.3 — 快速 ISO 8601 时间解析

3.3 安装方式

方式一:Home Assistant OS(推荐)

# 1. 下载 HA OS 镜像
# 2. 使用 Balena Etcher 烧录到 SD 卡 / USB 盘
# 3. 插入设备启动,浏览器访问 http://homeassistant.local:8123
# 4. 按向导完成初始化配置

方式二:Docker Container

docker run -d \--name homeassistant \--privileged \--restart=unless-stopped \-e TZ=Asia/Shanghai \-v /path/to/config:/config \-v /run/dbus:/run/dbus:ro \--network=host \ghcr.io/home-assistant/home-assistant:stable

方式三:Core 手动安装(开发者)

pip install homeassistant
hass
# 浏览器访问 http://localhost:8123

方式四:Home Assistant Supervised

# 在现有 Debian Linux 上安装 Supervisor
curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh
bash installer.sh

四、项目代码介绍

4.1 代码架构图

home-assistant/core/
├── homeassistant/                    # 核心代码
│   ├── __init__.py                   # 包初始化
│   ├── __main__.py                   # 入口点 (hass 命令)
│   ├── core.py                       # 核心类 HomeAssistant(104KB,最大核心文件)
│   ├── bootstrap.py                  # 启动引导流程(39KB)
│   ├── config.py                     # 配置管理(47KB)
│   ├── config_entries.py             # 集成配置入口(155KB,最大单文件)
│   ├── const.py                      # 全局常量定义(31KB)
│   ├── loader.py                     # 集成加载器(62KB)
│   ├── setup.py                      # 集成设置逻辑(30KB)
│   ├── data_entry_flow.py            # 数据输入流程(33KB)
│   ├── exceptions.py                 # 异常定义(14KB)
│   ├── requirements.py               # 依赖管理与安装(14KB)
│   ├── runner.py                     # 运行器(11KB)
│   │
│   ├── components/                   # 数千个集成目录
│   │   ├── automation/               # 自动化引擎
│   │   ├── light/                    # 灯光领域定义(通用接口)
│   │   ├── switch/                   # 开关领域定义
│   │   ├── sensor/                   # 传感器领域定义
│   │   ├── climate/                  # 空调/温控领域定义
│   │   ├── http/                     # HTTP API 服务
│   │   ├── websocket_api/            # WebSocket API 服务
│   │   ├── frontend/                 # 前端面板托管
│   │   ├── recorder/                 # 历史数据记录
│   │   ├── mqtt/                     # MQTT 协议集成
│   │   ├── homekit/                  # HomeKit 桥接
│   │   ├── alexa/                    # Alexa 智能家居集成
│   │   ├── google_assistant/         # Google Assistant 集成
│   │   ├── script/                   # 脚本引擎集成
│   │   ├── template/                 # 模板实体
│   │   ├── conversation/             # 对话/意图处理
│   │   ├── assist_pipeline/          # 语音助手流水线
│   │   ├── hue/                      # Philips Hue 集成
│   │   ├── xiaomi_miio/              # 小米设备集成
│   │   └── ...                       # 数千个品牌/设备/协议集成
│   │
│   ├── helpers/                      # 辅助工具模块
│   │   ├── entity.py                 # 实体基类(65KB)
│   │   ├── entity_registry.py        # 实体注册表(100KB)
│   │   ├── device_registry.py        # 设备注册表(79KB)
│   │   ├── area_registry.py          # 区域注册表
│   │   ├── floor_registry.py         # 楼层注册表
│   │   ├── label_registry.py         # 标签注册表
│   │   ├── event.py                  # 事件辅助(65KB)
│   │   ├── condition.py              # 条件判断引擎(83KB)
│   │   ├── script.py                 # 脚本引擎(87KB)
│   │   ├── service.py                # 服务注册/调用(47KB)
│   │   ├── config_validation.py      # 配置验证(66KB)
│   │   ├── storage.py                # 存储抽象(24KB)
│   │   ├── intent.py                 # 意图处理(48KB)
│   │   ├── llm.py                    # LLM 辅助(22KB)
│   │   ├── selector.py               # UI 选择器(68KB)
│   │   ├── dispatcher.py             # 信号分发器
│   │   ├── discovery.py              # 设备发现
│   │   └── restore_state.py          # 状态恢复
│   │
│   ├── auth/                         # 认证模块
│   │   ├── __init__.py               # 认证管理器
│   │   ├── providers/                # 认证提供者(HomeAssistant、Trusted Networks 等)
│   │   └── mfa_modules/              # 多因素认证模块
│   │
│   ├── util/                         # 工具函数库
│   │   ├── dt.py                     # 日期时间工具
│   │   ├── color.py                  # 颜色处理
│   │   ├── yaml/                     # YAML 增强工具
│   │   └── ...
│   │
│   ├── generated/                    # 自动生成的代码
│   ├── scripts/                      # 维护脚本
│   └── brands/                       # 品牌资源
│
├── tests/                            # 测试代码
│   ├── components/                   # 各集成测试
│   ├── helpers/                      # 辅助模块测试
│   └── ...
│
├── pyproject.toml                    # 项目配置与依赖
├── requirements.txt                  # 核心依赖
├── requirements_all.txt              # 全部集成依赖
├── Dockerfile                        # Docker 多阶段构建
└── README.md                         # 项目说明

4.2 三层架构

┌──────────────────────────────────────────────────┐
│                   用户交互层                        │
│  Web UI (React) │ Mobile App │ Voice Assist │ API │
└───────────────────────┬──────────────────────────┘│
┌───────────────────────┴──────────────────────────┐
│                  Supervisor 层                     │
│  插件商店 │ 快照/备份 │ 系统健康 │ 更新管理         │
└───────────────────────┬──────────────────────────┘│
┌───────────────────────┴──────────────────────────┐
│                 Core 核心层                        │
│  ┌──────────────────────────────────────────┐    │
│  │        Event Bus(事件总线)               │    │
│  │    State Machine │ Service Registry       │    │
│  │              Timer                        │    │
│  └──────────────────────────────────────────┘    │
│  ┌──────────┐ ┌──────────┐ ┌────────────────┐   │
│  │ 集成加载器 │ │ 自动化引擎 │ │ HTTP/WS API   │   │
│  └──────────┘ └──────────┘ └────────────────┘   │
│  ┌──────────────────────────────────────────┐    │
│  │          2000+ 集成 (components/)         │    │
│  └──────────────────────────────────────────┘    │
└──────────────────────────────────────────────────┘

4.3 核心模块介绍

模块 路径 功能
HomeAssistant 核心类 core.py (104KB) 系统主循环,管理事件总线、状态机、服务注册表、定时器
启动引导 bootstrap.py (39KB) 系统初始化流程,加载集成、配置、认证等
集成加载器 loader.py (62KB) 动态加载集成组件,解析 manifest.json,管理依赖
配置入口 config_entries.py (155KB) UI 配置流程管理,Config Flow 的生命周期管理
自动化引擎 components/automation/ 触发器→条件→动作流水线,事件驱动自动化执行
脚本引擎 helpers/script.py (87KB) 顺序/并行执行、条件分支、循环、等待、变量传递
条件判断 helpers/condition.py (83KB) 状态条件、时间条件、模板条件、逻辑组合
实体注册表 helpers/entity_registry.py (100KB) 实体唯一 ID 管理、属性存储、实体启用/禁用
设备注册表 helpers/device_registry.py (79KB) 设备统一管理,关联实体与区域
HTTP API components/http/ REST API + WebSocket 双通道,前端与外部通信
Recorder components/recorder/ 历史数据持久化,基于 SQLAlchemy,支持 MariaDB/PostgreSQL
语音流水线 components/assist_pipeline/ 语音识别→意图处理→语音合成端到端流水线

4.4 核心代码解析

4.4.1 事件总线(Event Bus)—— 系统通信中枢

事件总线是 Home Assistant 最核心的通信机制,位于 core.py

# core.py 中的核心实现
class HomeAssistant:def __init__(self):self.bus = EventBus(self)  # 事件总线实例def async_fire(self, event_type: str, event_data: dict = None) -> None:"""向事件总线发送事件,所有监听器异步收到通知"""self.bus.async_fire(event_type, event_data)def async_listen(self, event_type: str, listener: Callable) -> CALLBACK_TYPE:"""注册事件监听器,返回取消监听的回调函数"""return self.bus.async_listen(event_type, listener)

核心事件类型:

事件 触发时机 用途
state_changed 实体状态变更 驱动自动化、更新 UI
call_service 服务被调用 服务注册表监听并分发
time_changed 每秒触发 定时任务、时间条件
homeassistant_start 系统启动完成 初始化集成
homeassistant_stop 系统关闭 清理资源
component_loaded 集成加载完成 依赖协调

事件总线使得所有模块可以完全解耦——发送方不需要知道谁在监听,接收方不需要知道谁在发送。

4.4.2 状态机(State Machine)—— 实体状态追踪

# 状态变更的标准流程
class StateMachine:def async_set(self, entity_id: str, new_state: str, attributes: dict = None) -> None:"""设置实体状态,若变化则触发 state_changed 事件"""old_state = self._states.get(entity_id)if old_state and old_state.state == new_state:return  # 状态未变化,不触发事件state = State(entity_id, new_state, attributes)self._states[entity_id] = state# 触发 state_changed 事件,驱动自动化self.hass.bus.async_fire("state_changed", {"entity_id": entity_id,"old_state": old_state,"new_state": state,})# 使用示例
hass.states.async_set("light.living_room", "on", {"brightness": 255,"color_temp": 370,
})

状态机是自动化引擎的数据基础——当传感器检测到有人移动时,状态变更触发 state_changed 事件,自动化引擎监听到该事件后检查条件并执行动作。

4.4.3 服务注册表(Service Registry)—— 操作抽象

# 注册服务
@hass.services.async_register("light", "turn_on", schema=vol.Schema({vol.Required("entity_id"): cv.entity_id}))
async def handle_light_turn_on(call):"""处理灯光开启服务"""entity_id = call.data["entity_id"]# ... 具体控制逻辑# 调用服务(通过事件总线解耦)
hass.services.async_call("light", "turn_on", {"entity_id": "light.living_room","brightness": 200,
})

服务注册表监听 call_service 事件,找到对应的处理函数并执行。调用方无需知道服务由哪个集成实现,实现了领域与实现解耦

4.4.4 集成加载机制

# loader.py 中的集成加载流程
class Integration:def __init__(self, hass, domain: str, pkg_path: str):self.domain = domain  # 如 "hue", "mqtt"self.manifest = self._load_manifest()  # 读取 manifest.jsonself.dependencies = self.manifest.get("dependencies", [])self.requirements = self.manifest.get("requirements", [])async def async_setup(self, config: dict) -> bool:"""加载集成:安装依赖 → 加载依赖集成 → 调用 setup()"""await self._async_process_dependencies()await self._async_process_requirements()return await self._async_setup_component(config)

集成与平台的关系:

Integration(集成) = Component(组件,领域逻辑) + Platforms(平台,设备对接)示例:light(组件)—— 定义灯光通用行为(开关、亮度、颜色)├── hue(平台)—— 将 Philips Hue 灯映射为 light 实体├── yeelight(平台)—— 将 Yeelight 灯映射为 light 实体└── mqtt(平台)—— 通过 MQTT 协议控制灯光

每个集成目录下包含 manifest.json 声明元信息:

{"domain": "hue","name": "Philips Hue","dependencies": ["http"],"requirements": ["aiohue"],"codeowners": ["@balloob"],"config_flow": true,"iot_class": "local_polling","version": "1.0.0"
}

4.4.5 自动化引擎

自动化引擎位于 components/automation/helpers/script.py

# YAML 自动化配置示例
automation:- alias: "日落后自动开灯"description: "当检测到有人在家且日落时,自动打开客厅灯"trigger:- platform: sunevent: sunsetoffset: "-00:30:00"  # 日落前30分钟触发condition:- condition: stateentity_id: binary_sensor.home_occupiedstate: "on"action:- service: light.turn_ontarget:entity_id: light.living_roomdata:brightness: 200transition: 30  # 30秒渐变

自动化执行流程:

事件触发(trigger)→ 条件检查(condition)→ 动作执行(action)│                    │                    ││                    ├─ and/or/not 逻辑组合│                    ├─ 状态条件:某设备是否处于特定状态│                    ├─ 时间条件:是否在指定时间段│                    └─ 模板条件:Jinja2 渲染判断│└─ 支持多触发器:任一触发即执行

脚本引擎(helpers/script.py)支持:

  • 顺序执行:按步骤依次执行
  • 并行执行parallel 关键字同时执行多个动作
  • 条件分支if/then/else 逻辑
  • 循环repeat 按次数循环,while 按条件循环
  • 等待wait_template 等待某个条件满足
  • 变量传递:在动作间传递数据

五、项目应用与评价

5.1 应用场景

场景 说明
全屋智能控制 统一管理灯光、窗帘、空调、安防等所有品牌设备,打破品牌壁垒
能源管理 监控家庭能源消耗、太阳能生产、动态电价优化,实现削峰填谷
安防自动化 摄像头联动、门磁传感器、烟雾报警、入侵检测、模拟有人在家
语音控制 通过内置 Assist 或集成 Alexa/Google Assistant 实现全屋语音控制
场景自动化 离家模式(关灯关空调启动安防)、回家模式(开灯开空调)、睡眠模式、观影模式
NFC 标签触发 通过 NFC 标签贴在特定位置,手机触碰触发场景
仪表盘大屏展示 在电视、平板、手机上展示家庭状态,支持 Home Assistant Cast
企业/商业应用 小型办公室、商店、餐厅的智能设备集中管理

5.2 项目优点

  1. 隐私至上:数据完全本地化,不依赖云端,由非营利组织运营,不会被商业公司收购或改变方向。
  2. 集成最广:2000+ 品牌和设备支持,覆盖几乎所有主流智能家居品牌和协议,远超所有竞品。
  3. 社区极活跃:GitHub 81,000+ Stars,2025 年贡献者最多的开源项目,论坛和 Discord 响应迅速。
  4. 更新迅速:每月发布一个大版本,持续迭代新功能和改进,保持技术领先。
  5. 安装灵活:从开箱即用的官方硬件(Green/Yellow)到 Docker 容器、pip 手动安装,满足不同技术水平的用户。
  6. 强大的自动化引擎:YAML + 可视化编辑 + Blueprint 蓝图 + 自然语言自动化,从极客到小白都能用。
  7. 内置语音助手:Assist 支持完全本地运行的语音控制,可集成 LLM 实现智能对话。
  8. 官方硬件生态:Green、Yellow、Connect ZBT-2、Voice Preview Edition 等,降低入门门槛。
  9. 移动 App 强大:支持位置追踪(地理围栏自动化)、可操作通知、NFC 标签等高级功能。

5.3 项目不足

  1. 学习曲线存在:YAML 配置对完全新手有一定门槛,虽然 UI 配置越来越完善,但复杂自动化仍需理解 YAML 语法。
  2. Python 版本要求激进:当前要求 Python 3.14+,可能不兼容较旧的操作系统发行版。
  3. 资源消耗:完整安装(尤其是包含大量集成和 Recorder 历史数据)对硬件有一定要求,树莓派 3 及以下性能吃紧。
  4. 版本升级风险:每月大版本升级可能引入 breaking changes,需要关注 release notes 并及时调整配置。
  5. 部分集成依赖云端:某些品牌(如 Xiaomi Home)在固件更新后可能出现兼容性问题,需要社区适配。
  6. Container 模式功能受限:Docker 容器方式不支持 Add-on 商店,Thread/Z-Wave 等需要 Supervisor 的功能无法使用。
  7. 文档分散:核心文档完善,但部分社区集成文档质量参差不齐,排错可能需要深入论坛搜索。
  8. 中文资源相对较少:虽然官方支持中文,但社区教程和视频仍以英文为主。

参考来源

  • Home Assistant Core GitHub 仓库
  • Home Assistant 官方网站
  • Home Assistant 开发者文档 - Core 架构
  • Home Assistant 开发者文档 - 集成架构
  • Home Assistant 安装指南
  • Home Assistant 2026.7 版本更新