在云服务器上搭建 Home Assistant 接入米家设备
最近把 Home Assistant(HA)从本地迁移到了云端服务器,通过小米云端 API 接入家里的米家设备。这篇文章记录了完整的踩坑过程,如果你也有类似需求,照着做就行。
为什么选择云端方案
米家设备在家里,服务器在云上——不在同一个局域网。传统 HA 需要局域网直连设备,但用 Xiaomi Miot Auto 云端模式就不需要,所有通信走小米云 API。
优点:
- 设备不需要在家,随时随地可控
- 不依赖家里网络稳定性
- 外出也能看家里状态
缺点:
- 依赖小米云服务(小米挂了你也挂了)
- 有轻微延迟(几百毫秒级)
环境准备
我用的是一台 2 核 4G 的腾讯云服务器(Ubuntu 24.04),上面已经跑了 nginx、宝塔面板、EMLOG 博客等。
最低配置建议:1 核 2G 就能跑,但 2 核 4G 更舒服。
第一步:安装 Python 3.13
HA 最新版(2026.x)要求 Python ≥ 3.13.2。服务器自带的是 3.12,不够。
用 uv 装 Python 3.13 是最省心的方式:
# 安装 uv(如果没有)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装 Python 3.13
uv python install 3.13
第二步:创建虚拟环境并安装 HA
# 创建 venv
uv venv /opt/homeassistant/venv --python 3.13
# 安装 Home Assistant
source /opt/homeassistant/venv/bin/activate
uv pip install homeassistant
安装过程大概 2-3 分钟,会自动解析 90+ 个依赖包。
第三步:初始化并启动
# 创建配置目录
mkdir -p /opt/homeassistant/config
# 启动 HA(首次启动会初始化数据库,比较慢)
source /opt/homeassistant/venv/bin/activate
hass --config /opt/homeassistant/config
启动后访问 http://服务器IP:8123,进入 onboarding 页面创建管理员账号。
第四步:配置 systemd 自启
创建 /etc/systemd/system/homeassistant.service:
[Unit]
Description=Home Assistant
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/homeassistant
ExecStart=/opt/homeassistant/venv/bin/hass --config /opt/homeassistant/config
Restart=on-failure
RestartSec=5
Environment=PATH=/opt/homeassistant/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable homeassistant
systemctl start homeassistant
第五步:安装 HACS
HACS 是 HA 的第三方插件市场,Xiaomi Miot Auto 需要通过它安装。
由于 GitHub 在国内访问不稳定,建议:
- 在电脑浏览器打开 https://github.com/hacs/integration/releases/latest/download/hacs.zip
- 下载后上传到服务器
/opt/homeassistant/config/custom_components/hacs.zip - 解压:
unzip hacs.zip -d . - 确保文件结构是
custom_components/hacs/__init__.py这样的
重启 HA 后生效。
第六步:安装 Xiaomi Miot Auto
同样需要手动下载:
https://github.com/al-one/hass-xiaomi-miot/releases
下载 xiaomi_miot.zip,解压到 custom_components/xiaomi_miot/。
重启 HA。
第七步:配置小米云端接入
- HA 前台 → 配置 → 设备与服务 → 添加集成
- 搜索 Xiaomi Miot Auto
- 选择小米账号登录(云端模式)
- 输入小米账号密码
- 设备自动同步,完成
踩坑记录
1. aiodns 报错
症状:TypeError: Channel.getaddrinfo() takes 3 positional arguments
原因:aiodns 3.2.0 与 Python 3.12+ 不兼容
解决:升级到 Python 3.13 + HA 最新版,彻底解决
2. ffmpeg 缺失
症状:FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg'
apt-get install -y ffmpeg
3. nginx 反代后 400 错误
HA 默认会校验 Host header,反代需要在 configuration.yaml 里加:
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- ::1
4. 设备删了又自动回来
云端模式下,删除的设备会在下次同步时自动恢复。需要在 Xiaomi Miot Auto 的集成配置里排除不需要的设备。
效果
目前接入了 20 个设备,覆盖卧室和客厅:
- 空调控制(开关、模式、温度、摆风)
- 落地扇(开关、档位、摆风、转向)
- 插座(开关、功率监测)
- 温湿度计(温度、湿度、电池)
- 门窗传感器(开合状态)
- 网关(灯光、报警、人体感应)
- 夜灯、遥控器、手环、体脂秤等
后续计划
- 写个 AI 助手 skill,语音/文字控制所有设备
- 做自动化场景(比如温度高于 28°C 自动开空调)
- 接入更多品牌设备
有问题欢迎留言讨论 👇