前言

作为智能家居玩家,你是否想过:用自然语言控制家里的设备?

“帮我打开客厅的灯”
“看看空调开没开”
“卧室温度多少?”

这篇文章教你如何用 OpenClaw + Home Assistant + 小米官方插件 打造一个 AI 智能家居控制中心。

架构概览

flowchart LR
    A[用户] -->|自然语言| B[OpenClaw]
    B -->|REST API| C[Home Assistant]
    C -->|Mi Cloud| D[小米云端]
    D -->|控制| E[米家设备]

核心组件说明:

组件 作用 官方地址
Home Assistant 智能家居控制中枢 home-assistant.io
Xiaomi Home 小米官方 HA 插件 github.com/XiaoMi/ha_xiaomi_home
OpenClaw AI Agent 平台 openclaw.ai
homeassistant-skill OpenClaw 控制技能 内置 Skill

一、Home Assistant 部署

1.1 部署方式选择

flowchart TD
    A[部署 Home Assistant] --> B{选择方式}
    B -->|推荐| C[Docker 部署]
    B -->|小白友好| D[HAOS 虚拟机]
    B -->|NAS用户| E[群晖/飞牛套件]

1.2 Docker 部署(推荐)

1
2
3
4
5
6
7
docker run -d \
--name homeassistant \
--restart=always \
--network=host \
-v /path/to/config:/config \
-e TZ=Asia/Shanghai \
homeassistant/home-assistant:stable

NAS 用户推荐: 使用飞牛 NAS / 群晖 / 威联通的 Docker 套件,图形化部署更方便。

1.3 初始化配置

  1. 访问 http://你的IP:8123
  2. 创建管理员账号
  3. 跳过设备发现(稍后通过 HACS 安装小米插件)

1.4 配置外网访问(可选但推荐)

flowchart LR
    A[用户] -->|HTTPS| B[反向代理<br/>Nginx/Caddy]
    B -->|HTTP| C[Home Assistant<br/>:8123]

Nginx 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl;
server_name ha.yourdomain.com;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

location / {
proxy_pass http://127.0.0.1:8123;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

二、HACS 安装与配置

HACS (Home Assistant Community Store) 是 HA 的第三方插件商店,小米官方插件需要通过 HACS 安装。

2.1 安装 HACS

1
2
3
4
5
6
7
8
# 进入 HA 配置目录
cd /path/to/config

# 下载 HACS
wget -O - https://get.hacs.xyz | bash -

# 重启 Home Assistant
docker restart homeassistant

2.2 配置 HACS

  1. 重启后访问 Home Assistant
  2. 进入 设置 → 设备与服务 → 添加集成
  3. 搜索 “HACS” 并添加
  4. 按提示完成 GitHub 授权
sequenceDiagram
    participant U as 用户
    participant HA as Home Assistant
    participant HACS as HACS
    participant GH as GitHub
    
    U->>HA: 添加 HACS 集成
    HA->>HACS: 初始化
    HACS->>GH: 请求授权
    GH->>U: 显示授权页面
    U->>GH: 确认授权
    GH->>HACS: 返回 Token
    HACS->>HA: 安装完成

三、安装小米官方插件

3.1 为什么选择官方插件?

对比项 Xiaomi Home (官方) Xiaomi Miot Auto (第三方)
维护方 小米官方 社区开发者
稳定性 ✅ 高 ⚠️ 中等
新设备支持 ✅ 及时 ⚠️ 可能延迟
推荐度 ⭐⭐⭐⭐⭐ ⭐⭐⭐

3.2 通过 HACS 安装

  1. 打开 HACS(左侧菜单)
  2. 点击 集成
  3. 点击 探索并下载存储库
  4. 搜索 Xiaomi Home
  5. 点击 下载
flowchart LR
    A[HACS] --> B[探索存储库]
    B --> C[搜索 Xiaomi Home]
    C --> D[下载安装]
    D --> E[重启 HA]
    E --> F[配置集成]

3.3 配置小米账号

  1. 重启 Home Assistant
  2. 进入 设置 → 设备与服务 → 添加集成
  3. 搜索 “Xiaomi Home”
  4. 选择登录方式:
    • 账号登录:输入小米账号密码
    • 扫码登录:用米家 APP 扫码
sequenceDiagram
    participant U as 用户
    participant HA as Home Assistant
    participant X as Xiaomi Home
    participant MC as 小米云端
    
    U->>HA: 添加 Xiaomi Home 集成
    HA->>X: 启动配置
    X->>U: 选择登录方式
    alt 账号登录
        U->>X: 输入账号密码
    else 扫码登录
        X->>U: 显示二维码
        U->>MC: 米家APP扫码
    end
    X->>MC: 获取设备列表
    MC->>X: 返回设备数据
    X->>HA: 创建实体

3.4 支持的设备类型

设备类型 示例 支持功能
灯具 智能灯泡、灯带、吸顶灯 开关、亮度、色温、颜色
空调 米家空调、空调伴侣 开关、温度、模式、风速
插座 智能插座、功率计 开关、电量统计
传感器 温湿度、人体感应、门窗传感器 状态读取
空气净化器 米家空气净化器 开关、风速、模式
扫地机器人 米家扫地机 开始清扫、回充
热水器 米家电热水器 开关、温度
风扇 米家风扇 开关、风速、摆风

四、OpenClaw 部署

4.1 部署架构

flowchart TD
    subgraph 宿主机
        A[Docker]
    end
    
    subgraph A
        B[OpenClaw 容器]
        C[Home Assistant 容器]
    end
    
    B -->|REST API| C
    B -->|挂载卷| D[~/.openclaw/]
    D --> E[skills/]
    D --> F[workspace/]

4.2 Docker 部署

1
2
3
4
5
6
7
docker run -d \
--name openclaw \
--restart=always \
--network=host \
-v ./data:/root/.openclaw \
-e NODE_OPTIONS=--max-old-space-size=4096 \
openclaw/openclaw:latest

4.3 创建 Home Assistant Token

flowchart LR
    A[HA 左下角头像] --> B[滚动到底部]
    B --> C[长期访问令牌]
    C --> D[创建令牌]
    D --> E[命名: OpenClaw]
    E --> F[复制 Token]

步骤:

  1. 打开 Home Assistant
  2. 点击左下角用户头像
  3. 滚动到底部 长期访问令牌
  4. 点击 创建令牌,命名 “OpenClaw”
  5. 复制 Token(只显示一次!)

五、配置 OpenClaw Skill

5.1 Skill 文件位置

OpenClaw 的 Skill 文件位于:~/.openclaw/skills/home-assistant/SKILL.md

flowchart TD
    A[~/.openclaw/] --> B[skills/]
    B --> C[home-assistant/]
    C --> D[SKILL.md]
    
    A --> E[workspace/]
    E --> F[TOOLS.md]

5.2 配置凭证

TOOLS.md 中添加 Home Assistant 凭证:

1
2
3
4
5
## API 凭证

### HomeAssistant
- **URL:** https://ha.ooml.net
- **Token:** `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`

5.3 Skill 工作原理

sequenceDiagram
    participant U as 用户
    participant O as OpenClaw
    participant S as homeassistant-skill
    participant HA as Home Assistant
    participant D as 米家设备
    
    U->>O: "打开客厅的灯"
    O->>O: 理解意图
    O->>S: 调用 Skill
    S->>S: 查找设备实体
    S->>HA: POST /api/services/light/turn_on
    HA->>D: 控制设备
    D->>HA: 返回状态
    HA->>S: 返回结果
    S->>O: 返回响应
    O->>U: "已打开客厅灯"

5.4 验证配置

1
2
3
4
5
# 测试 API 连接
curl -s "https://ha.ooml.net/api/" \
-H "Authorization: Bearer YOUR_TOKEN"

# 返回: {"message": "API running."}

六、实际使用示例

6.1 查询设备状态

flowchart LR
    A["用户: 看看我家设备状态"] --> B[OpenClaw]
    B --> C["GET /api/states"]
    C --> D[Home Assistant]
    D --> E[返回所有实体]

用户: “看看我家的智能设备状态”

OpenClaw 执行:

1
2
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \
| jq -r '.[] | select(.entity_id | startswith("switch.")) | "\(.entity_id): \(.state)"'

返回示例:

设备 状态 功率
电脑插座 ✅ 开 156W
热水器 ✅ 开 0W
风扇 ❌ 离线 -

6.2 控制灯光

flowchart LR
    A["用户: 打开客厅灯"] --> B[OpenClaw]
    B --> C["POST /api/services/light/turn_on"]
    C --> D[Home Assistant]
    D --> E[客厅灯开]

用户: “打开客厅的灯”

OpenClaw 执行:

1
2
3
4
curl -s -X POST "$HA_URL/api/services/light/turn_on" \
-H "Authorization: Bearer $HA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity_id": "light.living_room"}'

6.3 查询温湿度

用户: “卧室温度多少?”

OpenClaw 执行:

1
2
3
curl -s "$HA_URL/api/states/sensor.bedroom_temperature" \
-H "Authorization: Bearer $HA_TOKEN" \
| jq '{temperature: .state, unit: .attributes.unit_of_measurement}'

返回:

1
2
3
4
{
"temperature": "26.5",
"unit": "°C"
}

6.4 控制空调

flowchart LR
    A["用户: 空调开到26度"] --> B[OpenClaw]
    B --> C["POST /api/services/climate/set_temperature"]
    C --> D[Home Assistant]
    D --> E[空调设置26°C]

用户: “把空调开到 26 度”

OpenClaw 执行:

1
2
3
4
curl -s -X POST "$HA_URL/api/services/climate/set_temperature" \
-H "Authorization: Bearer $HA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity_id": "climate.air_conditioner", "temperature": 26}'

6.5 常用命令速查表

场景 用户指令 API 调用
开灯 “打开客厅灯” POST /api/services/light/turn_on
关灯 “关掉卧室灯” POST /api/services/light/turn_off
调亮度 “客厅灯亮度50%” POST .../light/turn_on {"brightness_pct": 50}
开插座 “打开电脑插座” POST /api/services/switch/turn_on
查温度 “卧室多少度” GET /api/states/sensor.xxx_temperature
控制空调 “空调开到26度” POST /api/services/climate/set_temperature

七、进阶玩法

7.1 场景联动

flowchart TD
    A["用户: 我要出门了"] --> B[OpenClaw]
    B --> C[触发离家场景]
    C --> D[关闭所有灯]
    C --> E[关闭插座]
    C --> F[关闭空调]

在 Home Assistant 中创建场景:

1
2
3
4
5
6
7
# configuration.yaml
scene:
- name: 离家模式
entities:
light.all: off
switch.computer_outlet: off
climate.air_conditioner: off

用户: “我要出门了” → OpenClaw 触发 scene.li_jia_mo_shi

7.2 自动化联动

flowchart LR
    A[时间: 23:00] --> B[触发自动化]
    B --> C[关闭所有灯]
    B --> D[降低空调温度]
    B --> E[发送通知]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 自动化示例
automation:
- alias: "深夜模式"
trigger:
- platform: time
at: "23:00:00"
action:
- service: light.turn_off
target:
entity_id: light.all
- service: climate.set_temperature
target:
entity_id: climate.air_conditioner
data:
temperature: 26

7.3 多平台接入

flowchart TD
    A[用户] --> B[微信]
    A --> C[Telegram]
    A --> D[网页聊天]
    A --> E[钉钉]
    
    B --> F[OpenClaw]
    C --> F
    D --> F
    E --> F
    
    F --> G[Home Assistant]
    G --> H[米家设备]

OpenClaw 支持多种接入方式,详见 官方文档


八、完整配置示例

8.1 目录结构

1
2
3
4
5
6
7
8
~/.openclaw/
├── skills/
│ └── home-assistant/
│ └── SKILL.md # Skill 定义文件
├── workspace/
│ ├── TOOLS.md # 凭证配置
│ └── MEMORY.md # 记忆文件
└── config.json # OpenClaw 配置

8.2 TOOLS.md 完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# TOOLS.md - 本地配置笔记

## 容器环境

- **宿主系统:** 飞牛NAS
- **容器名:** `openclaw-node`
- **网络模式:** host

## API 凭证

### HomeAssistant
- **URL:** https://ha.ooml.net
- **Token:** `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`

九、常见问题

Q1: Token 无效或过期?

flowchart TD
    A[Token 失效] --> B[HA 设置]
    B --> C[用户头像]
    C --> D[长期访问令牌]
    D --> E[删除旧 Token]
    E --> F[创建新 Token]
    F --> G[更新 TOOLS.md]

Q2: 设备显示 unavailable?

flowchart TD
    A[设备离线] --> B{检查原因}
    B -->|网络问题| C[检查设备网络]
    B -->|登录过期| D[重新登录小米账号]
    B -->|设备故障| E[检查设备状态]
    
    D --> F[设置 → 设备与服务]
    F --> G[Xiaomi Home]
    G --> H[配置 → 重新登录]

Q3: 外网访问不了?

  1. 确认反向代理配置正确
  2. 检查防火墙端口开放
  3. 使用 HTTPS 确保 Token 传输安全

Q4: OpenClaw 无法控制设备?

排查步骤 检查内容
1 Token 是否正确
2 URL 是否可达
3 实体 ID 是否正确
4 HA 日志是否有报错

十、安全建议

⚠️ 重要安全提示:

风险 防护措施
Token 泄露 定期轮换,不要提交到 Git
中间人攻击 使用 HTTPS 加密传输
误操作 门锁/安防设备需要二次确认
暴力破解 启用 HA 双因素认证

总结

通过这套方案,你可以:

  • ✅ 用自然语言控制所有米家智能设备
  • ✅ 查询设备状态、传感器数据
  • ✅ 创建场景和自动化联动
  • ✅ 接入微信、Telegram 等多平台

这不仅仅是语音助手,而是真正理解你意图的 AI 管家。智能家居的未来,就是用最自然的方式与设备交互。


参考资料