家里的智能设备是这么堆起来的:前年买了个米家的插座,去年添了两个涂鸦的灯,今年又来了个天猫精灵。结果就是——客厅的灯要用涂鸦 App,卧室的插座要用米家 App,想让它们联动,得靠天猫精灵喊一嗓子。
三个 App,三套账号,谁跟谁都不认识。
我忍了很久,上个月终于决定把这堆东西收到一个界面里。
Home Assistant 是干什么的
一句话:把不同品牌的智能设备统一到一个面板上,然后让它们互相联动。
它不是"又一个 App",是个本地服务。所有设备接入 HA 之后,你在 HA 里看到的是一堆实体(灯、插座、传感器),规则是统一的,自动化也是统一的。
设备品牌、协议、云端,全被它屏蔽在下面。你在上面只操作"客厅灯"这个实体,不管它到底是米家还是涂鸦。
部署:host 网络是硬要求
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
network_mode: host
privileged: true
environment:
- TZ=Asia/Shanghai
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
三个关键点:
network_mode: host——这不是可选项。HA 要靠 mDNS 和 SSDP 在局域网里发现设备,走桥接网络加端口映射,很多设备根本发现不了。
privileged: true——如果后面要接蓝牙或 Zigbee 网关,需要访问宿主机的 USB 设备,这个得开。
TZ=Asia/Shanghai——容器默认 UTC,时区不对,自动化全在半夜触发。我第一次就踩了这个,设置的"晚上七点开灯",结果凌晨三点亮。
启动后访问 http://IP:8123,第一次进去是初始化向导,建账号、选时区、选单位。
目录结构
./config 是 HA 的全部家当——配置、数据库、日志、集成。这个目录必须持久化,删了就全没了。
我一开始没挂 volume,容器重建一次,所有设备配置清零,重新接了半小时。
HACS:社区插件仓库
HA 自带的功能够用,但接国内设备要靠第三方集成。装 HACS(Home Assistant Community Store)相当于给 HA 加了个应用商店。
安装方式:进容器执行脚本。
docker exec -it homeassistant bash
wget -O - https://get.hacs.xyz | bash -
exit
然后重启容器,在 HA 的「设备与服务」里搜索 HACS 添加,按提示走 GitHub 授权。
HACS 装完,在它的「集成」页面搜 Xiaomi Miot Auto,下载,重启。
接米家设备
重启后在「设备与服务」里添加集成,搜 Xiaomi Miot Auto,选「添加账号」。
它会让你登录米家账号。这里有个坑:登录走的是小米的云端,你的账号密码会经过一次 OAuth。介意的话就用局域网模式,但局域网模式只支持同一网段的设备,有些老设备不支持。
登录成功后,它会列出你账号下所有设备。勾选要接的,加进来。
我接了三类:
| 设备 | 接入状态 | 备注 |
|---|---|---|
| 米家智能插座 | 正常,能开关、看功率 | 直接可用 |
| 涂鸦的灯 | 通过 Tuya 集成接入 | 要另外装 Tuya 集成 |
| 天猫精灵 | 不支持直连 | 只能反向:HA 控制它 |
涂鸦的设备要单独装 Tuya 集成,在涂鸦开发者平台注册账号拿 Access ID 和 Secret,稍微麻烦,但能接。
天猫精灵这类语音助手是"反向"的——它不能作为设备接进 HA,但 HA 可以把自己虚拟成一个设备暴露给它,让它来喊。这个后面再说。
做一条自动化
设备接进来之后,HA 的价值才体现出来。
我做的第一条:晚上回家,玄关灯自动亮。
条件:
- 时间在 18:00 之后
- 手机连上家里的 WiFi(用路由器集成或 ping 传感器)
- 玄关灯当前是关的
动作:开灯,亮度 40%。
配置在「自动化」里可视化编辑,也可以直接写 YAML:
alias: 回家开玄关灯
trigger:
- platform: state
entity_id: person.moxiao
to: home
condition:
- condition: time
after: "18:00:00"
action:
- service: light.turn_on
target:
entity_id: light.xuan_guan
data:
brightness_pct: 40
mode: single
第二条:插座功率超过阈值就提醒。米家插座能读功率,洗衣机的插座跑完程序功率会掉到 2W 以下,触发手机通知"衣服洗好了"。
这条特别实用,比洗衣机自带的提示靠谱。
四个坑
坑一:不走 host 网络,设备发现不了
我最开始用的是桥接网络,端口映射了 8123,网页能开,但添加米家设备时一直"未发现设备"。
原因是 HA 靠 mDNS 广播找设备,桥接网络里它收不到广播包。改成 host 模式立刻好了。
坑二:token 过期
米家云端登录的 token 有有效期,大概几个月。过期之后所有设备显示"不可用"。
处理:在集成页面点「重新认证」,重新登录一次。没法彻底避免,除非全走局域网模式。
坑三:数据库膨胀
HA 的 recorder 默认把每个实体的每次状态变化都写进 SQLite。一个带功率的插座,一天能写几千条。两个月后数据库能到几个 G,HA 越来越卡。
处理:在 configuration.yaml 里限制保留天数:
recorder:
purge_keep_days: 10
commit_interval: 30
再定期清理一次:
docker exec homeassistant hass --script db_migrate
不是必须,但数据库小一点跑得顺。
坑四:设备离线但显示在线
有些设备(尤其涂鸦的)掉线之后,HA 里的状态还停在最后一次,看着是"开着",实际早断了。
处理:在自动化里加 for 条件,或者配一个 ping 传感器定时检查。
值不值
对我来说,值。
- 一个面板看所有设备,不用切 App
- 能做跨品牌联动(米家的插座 + 涂鸦的灯)
- 所有数据在本地,不上云
- 后面接传感器、做安防、做电费统计,都在这一个地方
缺点也清楚:
- 学习曲线陡。第一次打开 HA 的界面,会有点懵
- 接国内设备要靠第三方集成,稳定性不如官方 App
- token 过期、设备掉线,偶尔要维护
- 手机 App 体验一般,Web 界面在小屏上偏挤
最后
装完这套,我最大的感受是:智能家居的问题不是设备不够智能,是每个品牌都想当那个唯一的入口。
HA 干的事很简单——把入口收回你自己手里。
设备还是那些设备,插座还是那个插座,但从此它们听你的,不听厂商的。
如果你家里也有三四个品牌的智能设备,又烦透了切 App,可以试试。先从接一个插座开始,别一上来全接,慢慢来。
如果你也在折腾这套东西,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。