乐于分享
好东西不私藏

OpenClaw 与智能家居联动

OpenClaw 与智能家居联动

OpenClaw 与智能家居联动

「小渝,帮我把卧室灯关一下」——这不是语音助手的专利,OpenClaw 也能做到。这篇讲如何让 AI 助手真正控制你家的灯、空调、门锁。


痛点:App 太多,想用一个对话控制所有设备

智能家居的现状是:米家用米家 App,空调用遥控器或格力 App,门锁用另一个 App……设备一多,光是找到对应的 App 就很烦。

理想状态:一个对话界面,说句话就能控制家里所有设备。

OpenClaw + Home Assistant = 这个组合可以实现。


架构:OpenClaw 是大脑,Home Assistant 是神经

你(飞书/QQ/微信)
    ↓ 发送消息
OpenClaw AI 助手
    ↓ 理解意图,调用 API
Home Assistant
    ↓ 控制设备
米家/小米设备
(门锁、灯、空调、加湿器、摄像头、温湿度计)

Home Assistant 是目前最强大的开源智能家居平台,支持 2000+ 设备品牌,包括小米全系。

OpenClaw 充当大脑,理解你的自然语言指令,然后通过 Home Assistant 的 REST API 去实际控制设备。


第一步:连接 Home Assistant

准备 Home Assistant

确保 Home Assistant 已经安装并在内网运行,地址如 http://192.168.x.x:8123

获取访问令牌

在 Home Assistant 网页端:

  1. 点击左下角用户名
  2. 向下滚动,找到 Long-Lived Access Tokens
  3. 点击「创建令牌」,输入名字(如 openclaw
  4. 复制生成的 token

在 OpenClaw 中配置

把 HA 地址和 token 记录到 TOOLS.md 中:

# Home Assistant 连接信息
HA_URL=http://192.168.5.20:8123
# token 保存在 ~/.openclaw/workspace/.ha_token

第二步:学会看设备状态

在动手控制之前,先学会查询设备状态。

获取所有设备

curl -s -H "Authorization: Bearer $HA_TOKEN" \
  "http://192.168.5.20:8123/api/states" | \
  python3 -m json.tool | head -100

返回的是一个 JSON 数组,每个设备一条记录,包含 entity_idstateattributes 等信息。

查询单个设备

# 查询卧室灯状态
curl -s -H "Authorization: Bearer $HA_TOKEN" \
  "http://192.168.5.20:8123/api/states/light.yeelink_cn_873937596_bslamp2_s_2_light"

返回示例:

{
  "entity_id": "light.yeelink_cn_873937596_bslamp2_s_2_light",
  "state": "on",
  "attributes": {
    "brightness": 255,
    "color_temp": 368,
    "friendly_name": "卧室床头灯"
  }
}

第三步:控制设备

开灯/关灯

# 开灯
curl -s -X POST -H "Authorization: Bearer $HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id": "light.yeelink_cn_873937596_bslamp2_s_2_light"}' \
  "http://192.168.5.20:8123/api/services/light/turn_on"

# 关灯
curl -s -X POST -H "Authorization: Bearer $HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id": "light.yeelink_cn_873937596_bslamp2_s_2_light"}' \
  "http://192.168.5.20:8123/api/services/light/turn_off"

设置空调温度

# 设定为 26 度,制冷模式
curl -s -X POST -H "Authorization: Bearer $HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id": "climate.xiaomi_ac", "temperature": 26, "hvac_mode": "cool"}' \
  "http://192.168.5.20:8123/api/services/climate/set_temperature"

查看门锁状态

curl -s -H "Authorization: Bearer $HA_TOKEN" \
  "http://192.168.5.20:8123/api/states/lock.xiaomi_lock_e30"

控制加湿器

# 打开加湿器
curl -s -X POST -H "Authorization: Bearer $HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id": "switch.xiaomi_humidifier_s"}' \
  "http://192.168.5.20:8123/api/services/switch/turn_on"

第四步:用自然语言控制(OpenClaw 作为大脑)

上面的 curl 命令,普通用户不可能记住。这时候 OpenClaw 的价值就体现出来了——你只需要说人话,AI 来转成 API 调用。

在 OpenClaw 中封装 HA 控制

创建一个 Home Assistant 技能(SKILL.md),教 AI 怎么用 HA 的 API:

---
name: home-assistant
description: 通过 Home Assistant 控制智能家居设备
---


# Home Assistant 控制技能

## 获取所有设备状态
```bash
curl -s -H "Authorization: Bearer $HA_TOKEN" \
  "http://192.168.5.20:8123/api/states"

常用控制命令

灯光

  • 开灯:/api/services/light/turn_on + entity_id
  • 关灯:/api/services/light/turn_off + entity_id

空调

  • 设置温度:/api/services/climate/set_temperature + entity_id + temperature

插座

  • 打开:/api/services/switch/turn_on
  • 关闭:/api/services/switch/turn_off

门锁

  • 查看状态:/api/states/lock.<entity_id>
  • 注意:不要远程解锁,除非确认安全

HA Token

Token 保存在 ~/.openclaw/workspace/.ha_token


### 实际对话示例

你:帮我把卧室灯关一下 AI:正在关闭卧室床头灯...  → curl POST /api/services/light/turn_off     entity_id: light.yeelink_cn_xxx  ✅ 已关闭


你:现在家里温度怎么样? AI:让我查一下...  → curl GET /api/states/sensor.xiaomi_xxx_temperature  → curl GET /api/states/sensor.xiaomi_xxx_humidity  返回:卧室 24°C / 客厅 25°C / 书房湿度 60%


你:出门了,帮我检查一下门锁 AI:当前门锁状态:已上锁 ✅  所有门窗传感器:无异常 ✅


---

## 第五步:自动化场景

### 场景1:回家自动欢迎

当门锁检测到开锁时,自动执行:

1. 打开客厅灯
2. 空调调到舒适温度
3. 发送飞书消息给主人

这个自动化在 Home Assistant 里面配置:

```yaml
automation:
  - trigger:
      platform: state
      entity_id: lock.xiaomi_lock_e30
      to: "unlocked"
    action:
      - service: light.turn_on
        data:
          entity_id: light.living_room
      - service: climate.set_temperature
        data:
          entity_id: climate.xiaomi_ac
          temperature: 25
      - service: notify.feishu
        data:
          message: "欢迎回家!客厅灯和空调已开启"

场景2:定时播报环境状态

每天早上 8 点,OpenClaw 自动查询家中环境数据,推送到飞书:

🌡️ 环境播报 — 2026-04-01 08:00

卧室:24°C / 湿度 55%
客厅:25°C / 湿度 52%
书房:26°C / 湿度 60%

门锁:已上锁 ✅
NAS 状态:运行中 ✅

场景3:异常告警

当门锁异常或摄像头检测到移动时,AI 主动发消息:

🚨 安全告警 — 2026-04-01 03:12

⚠️ 门锁异常触发!
位置:入户门
状态:暴力破解警告

📷 摄像头画面:[查看画面]

常见设备控制 Domain

Home Assistant 的设备通过不同的 Domain 来控制:

Domain 设备类型 常用服务
light turn_on, turn_off
switch 开关/插座 turn_on, turn_off
climate 空调 set_temperature, set_hvac_mode
lock 门锁 lock, unlock
cover 窗帘 open_cover, close_cover
sensor 传感器 (只读)
camera 摄像头 (只读/快照)

注意事项

  • 安全第一:门锁远程解锁是高级权限,操作前务必二次确认
  • 内网访问:HA 默认在内网,远程控制需要 VPN 或内网穿透(如 Tailscale)
  • Token 保护:HA token 不要硬编码在脚本里,用文件或环境变量存储
  • 设备兼容:小米设备通过 miio 集成,控制命令可能因型号不同有差异

总结

用 OpenClaw 控制智能家居,分三层:

  1. 设备层:Home Assistant(通过米家集成连接所有设备)
  2. 控制层:Home Assistant REST API(标准 HTTP 调用)
  3. 大脑层:OpenClaw(理解自然语言,翻译成 API 调用)

核心就两条命令:

# 查状态
curl -H "Authorization: Bearer $TOKEN" http://HA:8123/api/states/<entity_id>

# 做动作
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -d '{"entity_id": "xxx"}' \
  http://HA:8123/api/services/<domain>/<service>

剩下的,交给 OpenClaw 理解你说的话就行。