
1. 从三个 App 到一句话我家智能家居的真实痛点先说说我家的设备构成估计和很多折腾智能家居的朋友差不多小米生态这边有空气净化器两台、扫地机器人、温湿度传感器、人体感应器、智能插座涂鸦系有智能灯泡六个、窗帘电机、智能门锁另外还有向日葵的远程开机棒和智能插座。设备不算多但品牌横跨三家每个品牌都有自己的 App。之前的日常是这样的想关客厅灯掏手机、解锁、打开涂鸦智能、找到客厅灯、点关闭想看看空气净化器的 PM2.5切到米家想远程开个电脑再切向日葵。Home Assistant 确实把这些设备整合到了一个面板里但说实话整合之后我还是要点屏幕——打开 HA 的 App 或者网页找到对应的实体卡片点一下。设备越多找卡片越费劲。真正的转折点是我意识到智能家居缺的不是统一控制面板而是最后一公里的自然语言入口。我不想记设备名、不想找卡片、不想在三个 App 之间横跳我只想张嘴说一句把客厅灯关了或者打一行字我要睡觉了剩下的交给系统。这就是 OpenClaw 接入 Home Assistant 的价值所在。OpenClaw 是一个支持 MCPModel Context Protocol协议的 AI 客户端/Agent 运行环境它本身不直接控制设备而是通过 MCP 协议把 Home Assistant 暴露出来的实体entity当成工具来调用。你给它一句自然语言它理解意图、匹配实体、调用服务最终落到 Home Assistant 执行。整条链路是语音/文字指令 ↓ OpenClaw意图理解 工具调用 ↓ MCP Protocol ↓ Home Assistant统一设备控制中心 ↓ 小米 / 涂鸦 / 向日葵 / 其他设备这套方案适合谁适合已经在树莓派或小主机上自托管了 Home Assistant、设备已经接入 HA、但觉得点屏幕还是不够爽的人。如果你还没装 HA这篇也能带你走完从零到跑通的路径只是 HA 本身的安装我会点到为止重点放在 OpenClaw 与 HA 的 MCP 对接上。下面我按HA 侧准备 → OpenClaw 侧配置 → 一句话控制验证 → 排错的顺序把每一步的可复制配置都写清楚。踩过的坑我也会标出来省得你重复走一遍。2. Home Assistant 侧准备实体暴露与 MCP 服务启动在 OpenClaw 能控制设备之前Home Assistant 这边必须先把门打开。这一步很多人会忽略导致后面 OpenClaw 连上了却看不到设备。核心要做三件事确认设备已接入、给实体起清晰的名字、启动 MCP 服务并拿到长期访问令牌。2.1 确认设备已接入 Home Assistant我是在树莓派 4B4GB 内存上装的 Home Assistant OS用官方镜像烧录到 SD 卡插网线开机浏览器访问http://树莓派IP:8123就能进初始化界面。HA OS 的好处是自带 Supervisor装集成、装插件都在网页上点不用碰命令行。设备接入这块小米系我用的是 Xiaomi Miot Auto 集成HACS 里装涂鸦系用官方 Tuya 集成向日葵设备如果 HA 没有现成集成可以用 MQTT 或者 RESTful 传感器自己包一层。这里不展开每个集成的安装细节重点是你得先在 HA 的开发者工具 → 状态里能看到这些实体比如light.living_room_main、climate.living_room_ac、cover.bedroom_curtain。2.2 给实体起清晰的名字关键这一步是后面 OpenClaw 能不能准确理解你指令的前提。HA 默认生成的实体名经常是light.yeelight_color_0x1234567这种AI 看了也懵。我的做法是在 HA 里逐个重命名把friendly_name改成人类能懂的中文# customize.yaml在 configuration.yaml 里用 !include 引入 light.living_room_main: friendly_name: 客厅主灯 light.bedroom_ceiling: friendly_name: 卧室吸顶灯 climate.living_room_ac: friendly_name: 客厅空调 cover.bedroom_curtain: friendly_name: 卧室窗帘 switch.study_socket: friendly_name: 书房插座然后在configuration.yaml里加上homeassistant: customize: !include customize.yaml重启 HA 后实体名就友好了。这一步花十分钟后面省无数事。2.3 创建长期访问令牌OpenClaw 通过 MCP 连 HA 需要鉴权用的是 HA 的长期访问令牌Long-Lived Access Token。获取路径打开 HA 网页 → 点左下角你的用户头像 → 拉到安全标签页 → 最底部长期访问令牌 → 创建令牌 → 复制保存。注意这个令牌只显示一次复制后存到密码管理器里。它等同于你的 HA 账户权限别泄露。2.4 启动 Home Assistant MCP 服务MCP 服务是 OpenClaw 和 HA 之间的桥梁。有两种跑法一种是用现成的mcp-server-homeassistantNode 包另一种是 HA 社区维护的 MCP 集成。我用的是前者因为配置直观、日志好查。先装 OpenClaw 的 MCP 管理工具和 HA 的 MCP Server# 安装 OpenClaw CLI假设你已装好 Node 18 npm install -g openclaw/cli # 安装 Home Assistant MCP Server npm install -g mcp-server-homeassistant装完后MCP Server 本身不常驻它由 OpenClaw 在需要时拉起。你要做的是在 OpenClaw 的配置里告诉它这个 MCP Server 怎么启动、连哪个 HA 地址、用什么令牌。这就进入下一节。这里有个容易踩的坑树莓派上跑 HA 和 OpenClaw 如果是同一台机器HA 地址用http://127.0.0.1:8123就行如果 OpenClaw 跑在另一台机器比如你的笔记本或另一台小主机就得用树莓派的局域网 IP比如http://192.168.1.100:8123并且确保 HA 的configuration.yaml里http段允许局域网访问。默认 HA 是允许的但如果你改过trusted_networks就要留意。3. 可复制配置OpenClaw 接入 HA 的完整片段这一节是全文的核心我把 OpenClaw 侧的配置拆成三块MCP Server 定义、模型 endpoint 指向 TaoToken、以及一个最小可跑的 settings 片段。你照着改 IP、令牌、Key 就能用。3.1 OpenClaw 的 MCP 配置config.yamlOpenClaw 的全局配置默认在~/.openclaw/config.yaml。MCP 部分长这样# ~/.openclaw/config.yaml mcp: servers: - name: homeassistant command: mcp-server-homeassistant args: - --url - http://192.168.1.100:8123 - --token - eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.你的长期令牌 env: HA_URL: http://192.168.1.100:8123 HA_TOKEN: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.你的长期令牌把192.168.1.100换成你树莓派的实际 IP令牌换成 2.3 步创建的那个。env段是给某些 MCP Server 版本用的两个都写上不冲突。3.2 把模型 endpoint 改到 TaoToken 统一管理 KeyOpenClaw 本身要调用大模型来理解你的自然语言指令。默认它可能让你填各家厂商的 Key但更省心的做法是把 endpoint 统一指向 TaoToken用一个 Key 管理所有模型调用。这样你换模型、调额度都在一个地方不用在 OpenClaw 里到处改。在~/.openclaw/config.yaml里加模型段# ~/.openclaw/config.yaml模型部分 model: provider: openai-compatible base_url: https://taotoken.net/api api_key: sk-你的TaoToken密钥 model_id: claude-sonnet-4-20250514 temperature: 0.2 max_tokens: 2048这里三个关键字段要写全Base URL是https://taotoken.net/apiAPI Key在 TaoToken 控制台的 API Keys 页面创建Model ID按你实际想用的模型填。temperature 我设 0.2因为设备控制指令需要稳定不需要发挥创意。提示TaoToken 的 Key 创建入口在控制台的 API Keys 页面模型对话调试可以在模型对话页面先试通再填进 OpenClaw。3.3 一个最小可跑的 settings 片段JSON 版如果你用的是支持 JSON 配置的 OpenClaw 版本或者想把配置嵌到别的工具里等价片段如下{ mcp: { servers: [ { name: homeassistant, command: mcp-server-homeassistant, args: [ --url, http://192.168.1.100:8123, --token, eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.你的长期令牌 ] } ] }, model: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model_id: claude-sonnet-4-20250514 } }3.4 如果你用 Claude Code / Cline 类客户端有些朋友可能不是直接用 OpenClaw CLI而是通过 Claude Code 或 Cline 这类支持 MCP 的客户端来跑。配置思路一样只是文件位置不同。以 Claude Code 的 MCP 配置为例通常在项目或全局的 settings 里{ mcpServers: { homeassistant: { command: mcp-server-homeassistant, args: [ --url, http://192.168.1.100:8123, --token, eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.你的长期令牌 ] } } }模型 endpoint 同样指向 TaoToken 的https://taotoken.net/apiKey 和 Model ID 三件套写全。这样无论你用哪个客户端底层调的都是同一套 HA 工具和同一个模型入口。配置写完先别急着跑复杂指令下一节我们用最简单的列出设备来验证链路是否通。4. 验证请求从列出设备到一句话控制灯光空调配置改完第一件事是验证 OpenClaw 能不能通过 MCP 看到 HA 的实体。这一步通了后面控制就是水到渠成。4.1 测试 MCP 连接OpenClaw CLI 自带测试命令openclaw test homeassistant如果配置正确你会看到类似输出✓ Home Assistant 连接成功 ✓ 发现设备45 个 ✓ 发现实体156 个如果这里报错先别往下走去第 5 节对照报错排查。连接通了再继续。4.2 用 Python 脚本列出设备OpenClaw 也提供 Python SDK适合写自动化脚本。先装pip install openclaw然后写个最小脚本import asyncio from openclaw import OpenClaw async def main(): claw OpenClaw() result await claw.run(列出我家的所有智能设备) print(result) asyncio.run(main())跑起来后输出应该按房间分组类似客厅 - 客厅主灯开亮度 80% - 客厅空调关 - 客厅窗帘开 卧室 - 卧室吸顶灯关 - 卧室窗帘关 其他 - 扫地机器人充电中 - 智能门锁已锁定看到这个说明 OpenClaw 已经能读取 HA 的实体状态了。4.3 单设备控制验证先试最简单的灯光await claw.run(把客厅主灯关了) await claw.run(把卧室吸顶灯亮度调到 50%)再试空调和窗帘await claw.run(把客厅空调温度调到 26 度) await claw.run(打开卧室窗帘)每执行一条去 HA 的网页面板看一眼对应实体状态有没有变。变了就说明控制链路完全通了。4.4 批量场景验证单设备没问题后试一句多设备await claw.run(我要睡觉了)OpenClaw 会解析这句话然后依次调用多个 HA 服务比如关客厅灯、关客厅空调、开卧室空调到 26 度、关卧室窗帘、把卧室灯调暗到 20%。你可以在 HA 的日志里看到这一串服务调用记录。4.5 条件与定时条件控制await claw.run(如果客厅温度超过 28 度就打开空调)定时任务用 OpenClaw 的 cron 配置写在~/.openclaw/cron.yamljobs: - name: 每日清晨 schedule: 0 7 * * * action: 执行起床场景 - name: 每日睡眠 schedule: 0 23 * * * action: 执行睡眠场景到这里从列出设备到一句话控制全屋的完整链路就验证完了。整个过程我在树莓派 4B 上跑下来从配置到第一条指令成功大概四十分钟。5. 常见报错排查401、local proxy failed 与实体识别失败这一节是我自己踩过的坑按报错原文对照着查能省你不少时间。5.1 401 Unauthorized最常见。原因基本是长期访问令牌不对或过期。检查三处令牌有没有复制完整HA 的令牌很长容易漏字符、config.yaml里--token后面的引号有没有包住、令牌是不是被你手动撤销过。重新在 HA 里创建一个新令牌替换后重启 OpenClaw。如果用的是 TaoToken 的模型 Key 报 401那是另一回事——检查api_key是不是sk-开头、有没有多余空格、在 TaoToken 控制台的 API Keys 页面确认这个 Key 还有效。5.2 local proxy failed / connection refused这个报错通常出现在 OpenClaw 连不上 MCP Server 或连不上 HA。分两步查先确认 HA 本身能访问。在跑 OpenClaw 的机器上执行curl -s http://192.168.1.100:8123/api/ -H Authorization: Bearer 你的令牌正常应该返回{message: API running.}。如果 curl 都不通那是网络问题——检查树莓派 IP 有没有变、防火墙有没有拦 8123 端口、两台机器是不是同一局域网。curl 通了但 OpenClaw 还报 local proxy failed那就是 MCP Server 启动失败。手动跑一下mcp-server-homeassistant --url http://192.168.1.100:8123 --token 你的令牌看它报什么错。常见的是 Node 版本太低要 18或者包没装全重装一次npm install -g mcp-server-homeassistant通常能解决。5.3 reading choices / 模型返回格式错误这个报错说明模型调用返回的结构 OpenClaw 解析不了。多半是model_id填错了或者 base_url 写成了带路径的地址。确认base_url就是https://taotoken.net/api不要多加/v1之类的后缀具体以 TaoToken 文档为准。model_id要和你实际开通的模型完全一致大小写都别错。5.4 OAuth / 鉴权相关报错如果你用的是 Claude Code 类客户端可能会遇到 OAuth 相关提示。这类客户端有时会尝试走它自己的账号体系你需要显式把模型 provider 改成 openai-compatible 并指向 TaoToken避免它去走默认的 OAuth 流程。配置里provider: openai-compatible这一行不能少。5.5 实体识别失败AI 找不到设备链路全通但你说关客厅灯它没反应或者关错了灯。这几乎都是实体命名问题。回到 2.2 节把friendly_name改成清晰的中文。另外可以在 HA 里给实体加别名aliasOpenClaw 匹配时命中率更高。还有一个隐藏坑HA 里同一个设备可能暴露多个实体比如一个灯既有light.xxx又有switch.xxxAI 可能选错。解决办法是在 HA 里把不用的实体禁用掉只留一个主控实体。5.6 设备状态不同步HA 面板显示灯是开的但实际灯是关的。这是轮询间隔问题。在customize.yaml里给关键实体设短一点的scan_intervallight.living_room_main: friendly_name: 客厅主灯 scan_interval: 30涂鸦设备如果经常掉线考虑上本地 Zigbee 网关不走云端。向日葵设备响应慢的话局域网内尽量用 MQTT 直连别绕远程服务器。6. 把 Key 和 endpoint 收拢到 TaoToken 的长期玩法跑通之后我做的第一件事是把所有模型调用收拢到 TaoToken 统一管理。原因很简单OpenClaw 这类 Agent 会频繁调模型今天用这个模型、明天想换那个如果每个客户端都单独配 Key管理起来是灾难。统一到 TaoToken 之后我只需要维护一个 Key、一个 Base URLhttps://taotoken.net/apiOpenClaw、Claude Code、Cline 全都指向它。想换模型就改model_id想调额度就在控制台操作不用挨个客户端改配置。如果你打算长期跑编码类或 Agent 类任务可以看看 Coding Plan它更适合高频调用的场景。日常调试模型效果用模型对话页面先试通再填进配置能少走弯路。Key 的创建和管理都在 API Keys 页面接入细节参考接入文档。回到智能家居本身这套方案跑了一个多月最大的感受是智能的门槛从学会用 App降到了会说话。我妈来我家我说你对着手机说把客厅灯关了就行她试了一次就会了。这才是智能家居该有的样子——技术藏在后面人只管表达意图。最后留一个我常用的技巧把高频场景固化成 cron 任务比如工作日早上 7 点自动开窗帘、开客厅灯、把空调调到 26 度晚上 11 点自动执行睡眠场景。这样连话都不用说家自己就活了。