智能家居 MCP 协议 (Smart Home MCP)
概念速览
- MCP (Model Context Protocol):Anthropic 提出的开放标准,让 LLM 安全访问外部工具与数据源
- 在智能家居场景:把灯、空调、扫地机、机器人变成 LLM 的「工具」
桥接方案
方案 A:Home Assistant MCP Server
- 项目:homeassistant-mcp / extended_openai_conversation
- 能力:暴露所有 HASS entity 为 LLM tool
方案 B:Matter Controller MCP
- 项目:matter-mcp-bridge (社区在演进)
- 能力:直接通过 Matter 协议控制设备
方案 C:自建 MCP Server
# 最小化示例 (基于 mcp python sdk)from mcp.server.fastmcp import FastMCPimport requests
mcp = FastMCP("home-assistant")
@mcp.tool()def turn_on_light(entity_id: str, brightness: int = 255) -> str: """Turn on a Home Assistant light.""" requests.post( "http://hass.local:8123/api/services/light/turn_on", headers={"Authorization": f"Bearer {HA_TOKEN}"}, json={"entity_id": entity_id, "brightness": brightness}, ) return f"Light {entity_id} turned on at {brightness}"安全模型
- 本地网络隔离:MCP server 仅监听 127.0.0.1
- Token 最小权限:用 Home Assistant Long-Lived Access Token 限定到必要 scope
- 审计日志:所有 LLM 触发的动作写入 HASS logbook
- 确认门控:危险动作(解锁、关火)需二次确认
典型 Agent 流程
User: "我准备睡觉了" │ ▼ LLM 推理 ▼ 工具调用: ├─ turn_off_all_lights() ├─ lock_front_door() ├─ set_thermostat(20°C) └─ arm_security_system("home") │ ▼ HASS 触发自动化 ▼ 完成 → Piper TTS 回复 "晚安,已关闭 12 盏灯并锁定大门"📋 复现条件
| 类别 | 必备 | 可选 / 备注 |
|---|---|---|
| 硬件 | HA 主机 (N100 / 树莓派 5) · 智能设备 ≥ 1 个 | LLM 主机 (Ollama) |
| 操作系统 | HAOS 14+ / Debian 12 · LLM 端 Ubuntu 22.04+ | macOS 14 |
| 软件版本 | HA 2024.10+ · ha-mcp-bridge 0.1+ · MCP Python SDK 1.0+ | Ollama 0.3+ |
| 网络 | 局域网千兆 | 公网 (frp / Cloudflare Tunnel) |
| 账号 | Anthropic / OpenAI API key (云端) 或本地 LLM (无 key) | — |
| 时间 | 装 ha-mcp-bridge 10 min · 配 entity 白名单 20 min · 跑通 demo 30 min | 完整安全模型 +1 h |
| 难度 | ⭐⭐⭐ 进阶 | 安全模型设计需思考 |
| 前置知识 | HA 基础 · MCP 协议 | HA + LLM |
⛔ 别这么做 (Anti-patterns)
经验证的坑 —— 跳过 = 至少浪费半天,严重的烧板 / 锁机。
| ❌ 错误做法 | 💥 后果 | ⚠️ 风险 | 范围 |
|---|---|---|---|
| 不要在断电前直接拔 Valetudo 改装中的 USB-TTL | 刷机中途断电 = 变砖。先 dmesg 确认串口没掉再操作。 | 🟡 | 智米扫拖一体 / Roborock S5 Max |
| 不要把米家设备 token 上传到任何第三方云 | token = 设备控制权,泄漏 = 任何人可远程开门。 | 🔴 | 所有米家 / Aqara 设备 |
不要在生产 HA 配置里直接编辑 configuration.yaml 后 check_config 不通过就 reload | 错的 reload 会让 HA 启动失败 → 所有自动化停摆。用 configuration.yaml 备份 + git 版本化。 | 🟢 | Home Assistant |
| 不要给 Frigate 摄像头内网用 admin/admin 默认密码 | RTSP / ONVIF 默认账号 = 局域网裸奔。先改密码。 | 🟡 | 海康 / 大华摄像头 |
| 不要在 ESPHome 设备上直接 OTA 升级到主版本 (major) | 主版本常改 NVS 分区。OTA 升级后启动失败 = 拆壳刷机。先 flash USB 一次。 | 🟡 | ESP32-S3 语音卫星 / 智能开关 |
| 不要在智能家居自动化里写死设备 IP | DHCP 重启后 IP 变 = 自动化失效。用 hostname / mDNS / 静态租约。 | 🟢 | Home Assistant / Hubitat |
| 不要在 Matter 设备首次配对时关掉手机蓝牙 | Matter 配对 = BLE → WiFi handover,全程需要蓝牙。 | 🟢 | Aqara M3 / Apple Home |
🚨 风险总览 (Risk Matrix)
| 风险等级 | 含义 | 例子 |
|---|---|---|
| 🟢 低 | 改错可回滚 / 几分钟恢复 | pip 全局装包、DHCP IP 写死 |
| 🟡 中 | 需要重新刷机 / 重装 / 1-2 小时恢复 | 装错 ROS 2 版本、没 OTA 升级看版本 |
| 🔴 高 | 不可逆 / 烧板 / 安全风险 | 电池反接、micro-ROS 没看门狗、刷机中途断电 |