浅入 Home Assistant
技术 2024年1月13日

浅入 Home Assistant

一篇面向入门者的 Home Assistant 指南,介绍这个开源智能家居平台的核心价值、安装方式和基本概念。

#智能家居#Home Assistant#IoT

家中五花八门的智能设备,各自都需要依赖自己的 App 或云端才能完成控制?米家的灯、涂鸦的窗帘、Aqara 的传感器……品牌林林总总,却无法彼此联动,只能在不同 App 间频繁切换。

Home Assistant(HA) 正是为解决这个痛点而生。它是一个开源、免费、可本地部署的智能家居控制平台,目标是为家庭中所有智能设备提供一个「中央大脑」。不论是 Wi-Fi、Zigbee、Z-Wave 等协议,还是国内外各大品牌,都能通过「集成(Integration)」汇聚到同一个界面里统一调度。

Home Assistant 最早于 2013 年在 GitHub 上发布,经过十余年发展,已成为 GitHub 上 Star 数量最多的智能家居项目。开发者社区异常活跃,保持着一到两周更新一次的频率,衍生出丰富的官方/社区插件。这种高度的模块化与可扩展性,让许多玩家视它为搭建「私有智能家居中枢」的首选。

为什么选择 Home Assistant?

优势说明
跨品牌整合米家、涂鸦、Aqara、飞利浦等设备纳入同一面板,告别多 App 切换
数据本地化数据存储在本地,无需担心隐私泄露或广告推送
灵活自动化图形化或 YAML 配置即可实现复杂的跨品牌联动场景
社区生态HACS 提供海量第三方扩展和主题,功能持续扩展
界面友好现代化 Lovelace UI,零基础用户也能快速上手

三个核心亮点:开源免费、社区活跃、简单易用

它到底能做什么?

很多人对智能家居的印象停留在「语音开灯」,但 Home Assistant 能做的远不止于此:

离家模式 当最后一人离开家(手机 GPS 检测),自动关闭所有灯光、停止音乐、空调切换到节能模式。如果有窗户忘关,还会推送提醒。

智能起床 不用刺耳的闹钟。起床前 15 分钟,卧室窗帘缓缓打开,咖啡机开始预热,智能音箱播报今天第一个日程。

能耗监控 开着空调却忘关窗?HA 检测到后自动关闭空调并通知你。熨斗开了超过 2 小时?立即报警。

紧急联系人 手机静音但家人急事找你?设定「紧急联系人连续拨打 2 次」时,HA 会闪烁客厅灯光或播放提示音。

人体感应灯 深夜起床,走廊灯以 10% 亮度自动亮起,2 分钟无人后熄灭。白天则不触发。

想象空间

这些只是冰山一角。接入日历后,出差期间可以自动模拟有人在家;接入天气 API,下雨前自动关窗、收衣服。你的想象力是唯一的限制。

安装方式

Home Assistant 现在提供 两种安装类型(已从之前的四种简化):

Home Assistant Operating System(推荐)

一个专为智能家居优化的嵌入式操作系统,适合单板计算机(如树莓派)或虚拟机。

  • 开箱即用:安装即可使用全部功能
  • 支持 Apps:可安装 Node-RED、ESPHome、MQTT 等附加应用
  • 一键更新:系统和核心服务自动维护
  • 完整备份:图形化备份和恢复

适合人群:绝大多数用户,尤其是不想折腾底层系统的人。

Home Assistant Container

基于 Docker 容器的安装方式,需要自行准备 Linux 系统和容器编排环境。

  • 轻量灵活:可与其他容器化服务协作
  • 手动维护:需自行处理更新
  • 无 Apps 支持:Thread、Z-Wave 等需要 Apps 的集成不可用

适合人群:熟悉 Docker、有特定部署需求的高级用户。

功能Operating SystemContainer
自动化✓✓
仪表盘✓✓
集成✓✓
Apps (Add-ons)✓✗
一键更新✓✗
备份✓✗

建议:作为普通玩家,选择 Operating System 即可,更稳定省心。

快速开始

Step 1:安装系统

对于国内用户,推荐使用 冬瓜 HAOS——基于官方 HAOS 的分支,内置下载加速和常用集成,从烧录到访问页面一般不超过 20 分钟。

详情:冬瓜 HAOS - Hassbian

常用镜像:

Step 2:连接设备

系统启动后,浏览器访问 homeassistant.local:8123 即可进入管理界面。

也可通过手机 App 自动发现并连接:iOS / Android

Step 3:添加设备

HA 内置 3000+ 集成,常见品牌和协议都可接入。

添加小米设备:默认小米集成功能有限,建议安装专用组件:

两者可同时安装,按需使用。

核心概念

理解以下概念,是掌握 Home Assistant 的关键。

集成 (Integrations)

通过「集成」支持各种品牌和协议的设备或云服务。在「设置 → 设备与服务 → 添加集成」中搜索安装。

设备 (Devices) 与 实体 (Entities)

  • 设备:现实中的智能硬件在 HA 中的映射
  • 实体:设备的具体功能点,如传感器读数、开关状态

要发现设备,必须先有对应的集成;实际控制针对的是实体。

状态与属性 (States & Attributes)

这是 HA 数据模型的核心:

  • 状态 (State):实体的主要值,如灯的 on / off,温度传感器的 23.5
  • 属性 (Attributes):附加信息,如灯的亮度 brightness: 255、色温 color_temp: 2700K
# 查看任意实体的状态和属性
# 开发者工具 → 状态 → 搜索实体
light.living_room:
state: "on"
attributes:
brightness: 200
color_temp: 3000
friendly_name: "客厅主灯"

事件与事件总线 (Events & Event Bus)

HA 的「心跳」。所有动作——按钮按下、状态变化、定时器触发——都会在事件总线上发布事件。自动化通过「监听」这些事件来触发。

常见事件类型:

  • state_changed:实体状态变化
  • call_service:服务被调用
  • homeassistant_start:HA 启动完成

服务 (Services,现称 Actions)

如果状态是「设备是什么样」,服务就是「让设备做什么」。

# 调用服务示例
service: light.turn_on
target:
entity_id: light.bedroom
data:
brightness: 128
color_temp: 2700

常用服务:

  • light.turn_on / light.turn_off
  • switch.toggle
  • notify.mobile_app_xxx(推送通知)
  • script.xxx(执行脚本)

YAML vs UI 配置

方式适用场景优势
UI 配置90% 的日常使用可视化、即时反馈、新手友好
YAML 配置复杂模板、版本控制精细控制、可 Git 管理、批量编辑
建议

从 UI 开始,熟悉后再学 YAML。两者可以混用——UI 创建的自动化也可以导出为 YAML。

区域管理 (Organization)

  • 区域 (Area):按房间分组,如「客厅」「卧室」
  • 楼层 (Floor):多层房屋的上层划分
  • 标签 (Labels):自定义分类检索

Apps (Add-ons)

Operating System 专属的功能扩展,常用的有:

App用途
File Editor编辑配置文件
Terminal & SSH终端访问
Node-RED可视化自动化编程
ESPHomeDIY 硬件开发
MosquittoMQTT Broker

自动化 (Automations)

三要素:

  1. 触发器 (Triggers):什么事件启动自动化
  2. 条件 (Conditions):是否满足执行条件
  3. 动作 (Actions):要执行的操作

例:门锁打开 + 晚上 7 点后 → 自动亮灯 + 播放音乐

实战示例:人体感应灯

深夜起床,走廊自动亮起柔光,2 分钟无人后熄灭:

alias: "走廊: 夜间感应灯"
description: "检测到人后亮灯,2分钟无人熄灭"
triggers:
- trigger: state
entity_id: binary_sensor.hallway_motion
from: "off"
to: "on"
conditions:
- condition: time
after: "22:00:00"
before: "06:00:00"
actions:
- action: light.turn_on
target:
entity_id: light.hallway
data:
brightness_pct: 10 # 10% 亮度,不刺眼
color_temp: 2700 # 暖光
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.hallway_motion
from: "on"
to: "off"
for: "00:02:00" # 等待 2 分钟无人
- action: light.turn_off
target:
entity_id: light.hallway

实战示例:日落自动开灯

利用 HA 内置的 sun 实体,日落时自动开启客厅灯:

alias: "客厅: 日落开灯"
triggers:
- trigger: sun
event: sunset
offset: "-00:15:00" # 日落前 15 分钟
conditions:
- condition: state
entity_id: person.me
state: "home" # 只有在家时触发
actions:
- action: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 70

实战示例:离家模式

最后一人离家时,自动关闭所有设备:

alias: "全屋: 离家模式"
triggers:
- trigger: state
entity_id: zone.home
to: "0" # 家中人数变为 0
conditions: []
actions:
- action: light.turn_off
target:
entity_id: all
- action: climate.set_preset_mode
target:
entity_id: climate.living_room_ac
data:
preset_mode: "eco"
- action: notify.mobile_app_my_phone
data:
title: "离家模式已启动"
message: "所有灯光已关闭,空调已切换节能"
蓝图 (Blueprints)

不想从零写 YAML?社区有大量现成的 蓝图,导入即用。比如「人体感应灯」有几十种变体可选。

场景 (Scenes):一键切换多个设备到预设状态

脚本 (Scripts):可复用的动作集合

常见误区

新手容易踩的坑

硬件选择不当

问题:用树莓派 + SD 卡运行 HA,几个月后频繁崩溃。

原因:SD 卡读写寿命有限,HA 的数据库写入会快速消耗它。

建议:

  • 入门:Home Assistant Green(官方硬件)
  • 进阶:N100 小主机 + SSD,性能强劲且稳定
  • 树莓派用户:务必使用 SSD 或移动硬盘,不要用 SD 卡

实体命名混乱

问题:添加设备后不改名,留着 light.bulb_01、switch.shelly_abc123。

后果:自动化越写越乱,三个月后自己都看不懂。

建议:立即重命名为语义化名称,如 light.living_room_ceiling、switch.bedroom_fan

依赖云服务

问题:买了「仅限云端控制」的设备,断网后完全无法使用。

建议:优先选择支持本地控制的协议:

  • Zigbee:通过 Zigbee2MQTT 或 ZHA 本地控制
  • Z-Wave:原生本地协议
  • Matter:新标准,本地优先
  • Wi-Fi 设备:选择支持本地 API 的(如 Shelly、ESPHome)

忽视安全

问题:HA 暴露在公网,未启用双因素认证。

后果:HA 里有你的位置、门锁密码、家庭成员信息……

建议:

  • 启用双因素认证 (2FA)
  • 使用 Nabu Casa(官方云服务)或 Cloudflare Tunnel 安全远程访问
  • 永远不要直接暴露 8123 端口到公网

延伸阅读

参考